// NR Noise Rating Calculator 

function NoiseRating(hz31, hz63, hz125, hz250, hz500, hz1000, hz2000, hz4000, hz8000){
	this.hz31 = hz31;
	this.hz63 = hz63;
	this.hz125 = hz125;
	this.hz250 = hz250;
	this.hz500 = hz500;
	this.hz1000 = hz1000;
	this.hz2000 = hz2000;
	this.hz4000 = hz4000;
	this.hz8000 = hz8000;
	this.hzValues = [this.hz31, this.hz63, this.hz125, this.hz250, this.hz500, this.hz1000, this.hz2000, this.hz4000, this.hz8000];
}

// returns NR value
NoiseRating.prototype.calculateNR = function(){
	var nr = -1;
	var oor = 1;
	var hz31 = {NR0:55, NR10:62, NR20:69, NR30:76, NR40:89, NR50:89, NR60:96, NR70:103, NR80:110, NR90:117, NR100:124, NR110:130, NR120:137, NR130:144};
	var hz63 = {NR0:36, NR10:43, NR20:51, NR30:59, NR40:67, NR50:75, NR60:83, NR70:91, NR80:99, NR90:107, NR100:115, NR110:122, NR120:130, NR130:138};
	var hz125 = {NR0:22, NR10:31, NR20:39, NR30:48, NR40:57, NR50:66, NR60:74, NR70:83, NR80:92, NR90:100, NR100:109, NR110:118, NR120:126, NR130:135};
	var hz250 = {NR0:12, NR10:21, NR20:31, NR30:40, NR40:49, NR50:59, NR60:68, NR70:77, NR80:86, NR90:96, NR100:105, NR110:114, NR120:124, NR130:133};
	var hz500 = {NR0:5, NR10:15, NR20:24, NR30:34, NR40:44, NR50:54, NR60:63, NR70:73, NR80:83, NR90:93, NR100:102, NR110:112, NR120:122, NR130:131};
	var hz1000 = {NR0:0, NR10:10, NR20:20, NR30:30, NR40:40, NR50:50, NR60:60, NR70:70, NR80:80, NR90:90, NR100:100, NR110:110, NR120:120, NR130:130};
	var hz2000 = {NR0:-4, NR10:7, NR20:17, NR30:27, NR40:37, NR50:47, NR60:57, NR70:68, NR80:78, NR90:88, NR100:98, NR110:108, NR120:118, NR130:128};
	var hz4000 = {NR0:-6, NR10:4, NR20:14, NR30:25, NR40:35, NR50:45, NR60:55, NR70:66, NR80:76, NR90:86, NR100:96, NR110:107, NR120:117, NR130:127};
	var hz8000 = {NR0:-8, NR10:2, NR20:13, NR30:23, NR40:33, NR50:44, NR60:54, NR70:64, NR80:74, NR90:85, NR100:95, NR110:105, NR120:116, NR130:126};
	var nrLims = [hz31, hz63, hz125, hz250, hz500, hz1000, hz2000, hz4000, hz8000];

	for (i = 0; i < nrLims.length; i++){
		var nrTemp;
		if (this.hzValues[i] > nrLims[i].NR0) nrTemp = 0 + 10*(this.hzValues[i] - nrLims[i].NR0)/(nrLims[i].NR10 - nrLims[i].NR0); // NR 0+	
		if (this.hzValues[i] > nrLims[i].NR10) nrTemp = 10 + 10*(this.hzValues[i] - nrLims[i].NR10)/(nrLims[i].NR20 - nrLims[i].NR10); // NR 10+	
		if (this.hzValues[i] > nrLims[i].NR20) nrTemp = 20 + 10*(this.hzValues[i] - nrLims[i].NR20)/(nrLims[i].NR30 - nrLims[i].NR20); // NR 20+	
		if (this.hzValues[i] > nrLims[i].NR30) nrTemp = 30 + 10*(this.hzValues[i] - nrLims[i].NR30)/(nrLims[i].NR40 - nrLims[i].NR30); // NR 30+	
		if (this.hzValues[i] > nrLims[i].NR40) nrTemp = 40 + 10*(this.hzValues[i] - nrLims[i].NR40)/(nrLims[i].NR50 - nrLims[i].NR40); // NR 40+	
		if (this.hzValues[i] > nrLims[i].NR50) nrTemp = 50 + 10*(this.hzValues[i] - nrLims[i].NR50)/(nrLims[i].NR60 - nrLims[i].NR50); // NR 50+	
		if (this.hzValues[i] > nrLims[i].NR60) nrTemp = 60 + 10*(this.hzValues[i] - nrLims[i].NR60)/(nrLims[i].NR70 - nrLims[i].NR60); // NR 60+	
		if (this.hzValues[i] > nrLims[i].NR70) nrTemp = 70 + 10*(this.hzValues[i] - nrLims[i].NR70)/(nrLims[i].NR80 - nrLims[i].NR70); // NR 70+	
		if (this.hzValues[i] > nrLims[i].NR80) nrTemp = 80 + 10*(this.hzValues[i] - nrLims[i].NR80)/(nrLims[i].NR90 - nrLims[i].NR80); // NR 80+	
		if (this.hzValues[i] > nrLims[i].NR90) nrTemp = 90 + 10*(this.hzValues[i] - nrLims[i].NR90)/(nrLims[i].NR100 - nrLims[i].NR90); // NR 90+	
		if (this.hzValues[i] > nrLims[i].NR100) nrTemp = 100 + 10*(this.hzValues[i] - nrLims[i].NR100)/(nrLims[i].NR110 - nrLims[i].NR100); // NR 100+	
		if (this.hzValues[i] > nrLims[i].NR110) nrTemp = 110 + 10*(this.hzValues[i] - nrLims[i].NR110)/(nrLims[i].NR120 - nrLims[i].NR110); // NR 110+	
		if (this.hzValues[i] > nrLims[i].NR120) nrTemp = 120 + 10*(this.hzValues[i] - nrLims[i].NR120)/(nrLims[i].NR130 - nrLims[i].NR120); // NR 120+	
		if (this.hzValues[i] > nrLims[i].NR130) oor = -1; // NR 130+ out of range
		if (nrTemp > nr) nr = nrTemp;
		if (oor == -1) nr = -1;
	}

	return nr; 
}

// returns input values
NoiseRating.prototype.inputValues = function(){
	var msg = this.hz31 + " " + this.hz63 + " " + this.hz125 + " " + this.hz250 + " " + this.hz500 + " " 
		+ this.hz1000 + " " + this.hz2000 + " " + this.hz4000  + " " + this.hz8000;
	return msg;
}

// Copyright engineeringtoolbox.com