var arrHpSM = "";
var maxIndex = 0;

function calculateAmpere() { 
	var volts 	= document.getElementById("voltsReq").value; 
	var kVA 	= document.getElementById("genKVA").value; 
	var phase 	= document.getElementById("phase").value; 
	var errMsg	= "Calculation failed or aborted due to error(s) found.\n\nPlease amend the following error(s):\n\n";
	var hasErr	= false;
	var kVAErr	= false;
	var voltErr = false;
	var ampere;
	
	if( !isValidInput( kVA ) ) 
	{
		errMsg = errMsg + "Invalid Generator kVA input, kVA needs to be a number greater than 0 (zero).\n";
		hasErr = true;
		kVAErr = true;
	}
	if( !isValidInput( volts ) ) 
	{
		errMsg = errMsg + "Invalid Volts Required input, Volts needs to be a number greater than 0 (zero).\n";
		hasErr = true;
		voltErr = true;
	}
	
	if( hasErr ) 
	{
		alert( errMsg );
		if( kVAErr ) 
		{
			document.getElementById("genKVA").focus();
			document.getElementById("genKVA").select();
		}
		else
		{
			if( voltErr ) 
			{
				document.getElementById("voltsReq").focus();
				document.getElementById("voltsReq").select();
			}
		}
	}
	else
	{
		ampere = CalculateKVA_( volts, kVA, phase ); 
		document.getElementById("amp").value = ampere;
	}
	return;
} 

function calculateKva() { 
	var volts 	= document.getElementById("voltsReq1").value; 
	var amps 	= document.getElementById("genAmpere").value; 
	var phase 	= document.getElementById("phase1").value; 
	var errMsg	= "Calculation failed or aborted due to error(s) found.\n\nPlease amend the following error(s):\n\n";
	var hasErr	= false;
	var ampErr	= false;
	var voltErr = false;
	var kva;
	
	if( !isValidInput( amps ) ) 
	{
		errMsg = errMsg + "Invalid Generator ampere input, ampere needs to be a number greater than 0 (zero).\n";
		hasErr = true;
		ampErr = true;
	}
	if( !isValidInput( volts ) ) 
	{
		errMsg = errMsg + "Invalid Volts Required input, Volts needs to be a number greater than 0 (zero).\n";
		hasErr = true;
		voltErr = true;
	}
	
	if( hasErr ) 
	{
		alert( errMsg );
		if( ampErr ) 
		{
			document.getElementById("genAmpere").focus();
			document.getElementById("genAmpere").select();
		}
		else
		{
			if( voltErr ) 
			{
				document.getElementById("voltsReq1").focus();
				document.getElementById("voltsReq1").select();
			}
		}
	}
	else
	{
		kva = CalculateAmpere_( volts, amps, phase ); 
		document.getElementById("kva").value = kva;
	}
	return;
} 


function kVA2kWConverter()
{
	var errMsg	= "Please amend the following error:\n\nkVA need to be a number greater than 0 (zero).";
	var el = document.getElementById( "kVA2kW_kVA" );
	var kVA = el.value;
	var kW;
	
	if( !isValidInput( kVA ) )
	{
		alert( errMsg );
		el.focus();
		el.select();				
	}
	else
	{
		kW = kVA * 0.8;
		document.getElementById( "kVA2kW_kW" ).value = kW;
	}
	return;
}

function kW2kVAConverter()
{
	var errMsg	= "Please amend the following error:\n\nkW need to be a number greater than 0 (zero).";
	var el = document.getElementById( "kW2kVA_kW" );
	var kW = el.value;
	var kVA;
	
	if( !isValidInput( kW ) )
	{
		alert( errMsg );
		el.focus();
		el.select();				
	}
	else
	{
		kVA = kW / 0.8;
		document.getElementById( "kW2kVA_kVA" ).value = kVA;
	}
	return;
}


function kW2HpConverter()
{
	var errMsg	= "Please amend the following error:\n\nkW need to be a number greater than 0 (zero).";
	var el = document.getElementById( "kW2Hp_kW" )
	var kW = el.value;
	var HP;
	
	if( !isValidInput( kW ) )
	{
		alert( errMsg );
		el.focus();
		el.select();		
	}
	else
	{
		HP = kW / 0.746;
		document.getElementById( "kW2Hp_Hp" ).value = HP;
	}
	return;
}

function Hp2KVAConverter()
{
	var errMsg	= "Please amend the following error:\n\nHP of motor need to be a number greater than 0 (zero).";
	var el = document.getElementById( "Hp2KVA_Hp" )
	var HP = el.value;
	var kVA;
	
	if( !isValidInput( HP ) )
	{
		alert( errMsg );
		el.focus();
		el.select();
	}
	else
	{
		var K = 0;
		var S = 1;
		var R = 1;
	
		if (HP < 50) {
			R = 1.5;
		}
		else if (HP > 49 && HP < 100) {
			R = 1.4;
		}
		
		else if (HP > 99) {
			R = 1.3;
			S = 5;
		}
		
		if (HP < 30) {
			S = 7;
		}
		
		else if (HP > 29 && HP < 100) {
			S = 6
		}
	
		kVA = ((HP * R * S) / 2) / 1.39;    
		document.getElementById( "Hp2KVA_kVA" ).value = kVA;
	}
	return;
}

function CalculateKVA_( volts, kva, phase ) 
{ 
	var V = parseInt( volts ); 
	var K = parseInt( kva ); 
	var P = parseInt( phase );
	var A = 0; 

	if (P == 1) {
		A = ((K * 1000)/V); 	
	}
	else if (P == 2 || P == 4)  {
		A = ((K * 1000)/(2*V)); 	
	}
	else if (P == 3) {
		A = ((K * 1000)/(1.73*V)); 	
	}
	return(A); 
} 

function CalculateAmpere_( volts, amps, phase ) 
{ 
	var V = parseInt( volts ); 
	var A = parseInt( amps ); 
	var P = parseInt( phase );
	var K = 0; 

	if (P == 1) {
		K = ( A*V )/1000;
	}
	else if (P == 2 || P == 4)  {
		K = ( 2*A*V )/1000;
	}
	else if (P == 3) {
		K = ( 1.73*V*A )/1000;
	}
	return(K); 
} 


function evaluateGenSize( form )
{
	if( initializeArrHpSM( form ) )
	{
		var phaseMultiplier = getPhaseMultiplier( form.genSizePhase );
		var totRunCurrPrev = 0;
		var runningCurrentMax = 0;
		var startCurrentMax = 0;
		var kvaStartWith = 0;
		var kvaRunningWith = 0;
		var kvaRecommended = 0;
		
		var intIndex;
		var hp;
		var method;
		var runningValue;
		var phaseCurrent;
		var startValue;
		var totalRunningCurrent;
		var totalStartCurrent;
		var nbrOfRows = form.maxRows.value;
		
		for( i=0; i<maxIndex; i++ )
		{
			hp 		= arrHpSM[i][0];
			method 	= arrHpSM[i][1];
			
			runningValue 		= calRunningValue( hp );
			phaseCurrent 		= calPhaseCurrent( hp );
			startValue	 		= calStartValue( hp, method );
			totalRunningCurrent = calTotalRunningCurrent( hp, totRunCurrPrev );
			totalStartCurrent 	= calTotalStartCurrent( hp, totRunCurrPrev, method );
			totRunCurrPrev 		= totalRunningCurrent;
	
			if( totalRunningCurrent > runningCurrentMax ) runningCurrentMax = totalRunningCurrent;
			if( totalStartCurrent > startCurrentMax) startCurrentMax = totalStartCurrent;
			
			//Spit out to the form
			intIndex = i+1;
			document.getElementById( "genSizeRunVar" + intIndex ).value = runningValue;
			document.getElementById( "genSizePhaseCurr" + intIndex ).value = Math.round( phaseCurrent );
			document.getElementById( "genSizeStartVal" + intIndex ).value = startValue;
			document.getElementById( "genSizeTotRunCurr" + intIndex ).value = Math.round( totalRunningCurrent );
			document.getElementById( "genSizeTotStartCurr" + intIndex ).value = Math.round( totalStartCurrent );
		}
		
		//Clear the rest
		if( maxIndex < nbrOfRows )
		{
			for( i=maxIndex+1; i<=nbrOfRows; i++ )
			{
				document.getElementById( "genSizeRunVar" + i ).value = "";
				document.getElementById( "genSizePhaseCurr" + i ).value = "";
				document.getElementById( "genSizeStartVal" + i ).value = "";
				document.getElementById( "genSizeTotRunCurr" + i ).value = "";
				document.getElementById( "genSizeTotStartCurr" + i ).value = "";
			}
		}
		
		kvaStartWith   = startCurrentMax / phaseMultiplier / 2;
		kvaRunningWith = runningCurrentMax / phaseMultiplier;
		kvaRecommended = 1.16 * Math.max( kvaStartWith, kvaRunningWith );

		form.genSizeStartWith.value = Math.round( kvaStartWith );
		form.genSizeRunWith.value   = Math.round( kvaRunningWith );
		form.genSizeRecom.value 	= Math.round( kvaRecommended );
	}
	arrHpSM = "";
	maxIndex = 0;
	return false;
}

//*****************************************//
// FUNCTION NAME: initializeArrHpSM	  	   //
// ARGUMENT: number of rows			       //
// PURPOSE: to initialize arrHpSM array    //
//			and maxIndex				   //
// RETURN: true if no error on HP input    //
//*****************************************//
function initializeArrHpSM( form )
{
	var nbrOfRows = form.maxRows.value;
	var hp = form.genSizeHp;
	var method = form.genSizeMethod;
	arrHpSM = new Array( nbrOfRows );
	var hasNoError = true;
	
	for( i=0; i<nbrOfRows; i++ )
	{
		if( !isValidMotorHP( hp[i].value ) )
		{
			var errMsg	= "Please amend the following error:\n\nHP of motor need to be a number greater than 0 (zero).";
			alert( errMsg );
			i = nbrOfRows;
			hasNoError = false;
		}
		else
		{			
			if( hp[i].value == "" )
			{
				i = nbrOfRows;
			}
			else
			{
				arrHpSM[i] = new Array(2);
      			arrHpSM[i][0] = hp[i].value;
				arrHpSM[i][1] = method[i].value;
				maxIndex += 1;
			}
		}
	}
	return hasNoError;
}

function getPhaseMultiplier( el )
{
	if( el[0].checked ) return 1.39;
	else return 4.20;
}

function isValidMotorHP( val )
{
	if( val.length > 0 )
	{
		if( val == null || isNaN( val )  )
		{
			return false;
		}
		else
		{
			if( val <= 0 ) return false;
		}
	}
	return true;
}

function calRunningValue( hp )
{
	if (0 < hp && hp < 50)
	{
		return 1.5;
	}
	else if (50 <= hp && hp < 100)
	{
		return 1.4;
	}
	else if (hp >= 100)
	{
		return 1.3;
	}
	return 1.5;
}

function calPhaseCurrent( hp )
{
	var runVal = calRunningValue( hp );
	return ( hp * runVal );
}

function calStartValue( hp, method )
{
	var sv;

	if (0<hp && hp<=30)
	{
		sv = 7;
	}
	else if (30<hp && hp<100)
	{
		sv = 6;
	}
	else if (100<=hp)
	{
		sv = 5;
	}

	if ( method == 2 ) //Star Delta
	{
		return sv/2;
	}
	else //DOL
	{
		return sv;
	}
}

function calTotalRunningCurrent( hp, totRunCurrPrev )
{
	var phaseCurrent = calPhaseCurrent( hp )
	return ( totRunCurrPrev + phaseCurrent );
}

function calTotalStartCurrent( hp, totRunCurrPrev, method )
{
	var startVal = calStartValue( hp, method );
	var phaseCurrent = calPhaseCurrent( hp );
	return ( phaseCurrent * startVal + totRunCurrPrev );
}


function isValidInput( val )
{
	if( val == null || isNaN( val ) || val.length == "" )
	{
		return false;
	}
	else
	{
		if( val <= 0 ) return false;
	}
	return true;
}
