// PNC Preferred Noise Criterion Calculator 

function PNoiseCriterion(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 PNC value
PNoiseCriterion.prototype.calculatePNC = function(){
	var pnc = -1;
	var oor = 1;
	var hz31 = {PNC15:58, PNC20:59, PNC25:60, PNC30:31, PNC35:62, PNC40:64, PNC45:67, PNC50:70, PNC55:73, PNC60:76, PNC65:79};
	var hz63 = {PNC15:43, PNC20:46, PNC25:49, PNC30:52, PNC35:55, PNC40:59, PNC45:63, PNC50:66, PNC55:70, PNC60:73, PNC65:76};
	var hz125 = {PNC15:35, PNC20:39, PNC25:43, PNC30:46, PNC35:50, PNC40:54, PNC45:58, PNC50:62, PNC55:66, PNC60:69, PNC65:73};
	var hz250 = {PNC15:28, PNC20:32, PNC25:37, PNC30:41, PNC35:45, PNC40:50, PNC45:54, PNC50:58, PNC55:62, PNC60:66, PNC65:70};
	var hz500 = {PNC15:21, PNC20:26, PNC25:31, PNC30:35, PNC35:40, PNC40:45, PNC45:50, PNC50:54, PNC55:59, PNC60:63, PNC65:67};
	var hz1000 = {PNC15:15, PNC20:20, PNC25:25, PNC30:30, PNC35:35, PNC40:40, PNC45:45, PNC50:50, PNC55:55, PNC60:59, PNC65:64};
	var hz2000 = {PNC15:10, PNC20:15, PNC25:20, PNC30:25, PNC35:30, PNC40:36, PNC45:41, PNC50:46, PNC55:51, PNC60:56, PNC65:61};
	var hz4000 = {PNC15:8, PNC20:13, PNC25:18, PNC30:23, PNC35:28, PNC40:33, PNC45:38, PNC50:43, PNC55:48, PNC60:53, PNC65:58};
	var hz8000 = {PNC15:8, PNC20:13, PNC25:18, PNC30:23, PNC35:28, PNC40:33, PNC45:38, PNC50:43, PNC55:48, PNC60:53, PNC65:58};
	var pncLims = [hz31, hz63, hz125, hz250, hz500, hz1000, hz2000, hz4000, hz8000];

	for (i = 0; i < pncLims.length; i++){
		var pncTemp;
		if (this.hzValues[i] > pncLims[i].PNC15) pncTemp = 15 + 5*(this.hzValues[i] - pncLims[i].PNC15)/(pncLims[i].PNC20 - pncLims[i].PNC15); // PNC 15+	
		if (this.hzValues[i] > pncLims[i].PNC20) pncTemp = 20 + 5*(this.hzValues[i] - pncLims[i].PNC20)/(pncLims[i].PNC25 - pncLims[i].PNC20); // PNC 20+	
		if (this.hzValues[i] > pncLims[i].PNC25) pncTemp = 25 + 5*(this.hzValues[i] - pncLims[i].PNC25)/(pncLims[i].PNC30 - pncLims[i].PNC25); // PNC 25+	
		if (this.hzValues[i] > pncLims[i].PNC30) pncTemp = 30 + 5*(this.hzValues[i] - pncLims[i].PNC30)/(pncLims[i].PNC35 - pncLims[i].PNC30); // PNC 30+	
		if (this.hzValues[i] > pncLims[i].PNC35) pncTemp = 35 + 5*(this.hzValues[i] - pncLims[i].PNC35)/(pncLims[i].PNC40 - pncLims[i].PNC35); // PNC 35+	
		if (this.hzValues[i] > pncLims[i].PNC40) pncTemp = 40 + 5*(this.hzValues[i] - pncLims[i].PNC40)/(pncLims[i].PNC45 - pncLims[i].PNC40); // PNC 40+	
		if (this.hzValues[i] > pncLims[i].PNC45) pncTemp = 45 + 5*(this.hzValues[i] - pncLims[i].PNC45)/(pncLims[i].PNC50 - pncLims[i].PNC45); // PNC 45+	
		if (this.hzValues[i] > pncLims[i].PNC50) pncTemp = 50 + 5*(this.hzValues[i] - pncLims[i].PNC50)/(pncLims[i].PNC55 - pncLims[i].PNC50); // PNC 50+	
		if (this.hzValues[i] > pncLims[i].PNC55) pncTemp = 55 + 5*(this.hzValues[i] - pncLims[i].PNC55)/(pncLims[i].PNC60 - pncLims[i].PNC55); // PNC 55+	
		if (this.hzValues[i] > pncLims[i].PNC60) pncTemp = 60 + 5*(this.hzValues[i] - pncLims[i].PNC60)/(pncLims[i].PNC65 - pncLims[i].PNC60); // PNC 60+	
		if (this.hzValues[i] > pncLims[i].PNC65) oor = -1; // PNC 70+ out of range
		if (pncTemp > pnc) pnc = pncTemp;
		if (oor == -1) pnc = -1;
	}

	return pnc; 
}

// returns input values
PNoiseCriterion.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