Event.observe(window, 'load', function (e){
	attachTextValidation();
	attachHelp();
	
	$('validationErrors').setOpacity(0);
	
	$('calculator').observe('keypress', function(e){
		if (e.keyCode == Event.KEY_RETURN) {
			e.stop();
			return false;
		}
	});
	
	
			
});


$('calculateSubmit').observe('click', function (e){
	e.stop();
	valid = performValidation(e);

	if (valid)
	{	
		window.scrollTo(0,0);
		performCalculation();
		$('pageheading1').hide();
		$('form1').hide();
		$('form2').hide();
		$('form3').hide();
		$('form4').hide();
		$('calculateSubmit').hide();
		$('pageheading2').show();
		$('results1').show();
		$('results2').show();
		$('notes').show();
		$('energyAnotherCalc').show();
		do_sIFR();
	}
	
	return false;
});

$('energyAnotherCalc').observe('click', function (e){
	e.stop();
	window.scrollTo(0,0);
	performCalculation();	
	$('pageheading1').show();
	$('form1').show();
	$('form2').show();
	$('form3').show();
	$('form4').show();
	$('calculateSubmit').show();
	$('pageheading2').hide();
	$('results1').hide();
	$('results2').hide();
	$('notes').hide();
	$('energyAnotherCalc').hide();
	do_sIFR();
});

$('calculator').observe('submit', function (e){
	e.stop();
	valid = performValidation(e);


	if (valid)
	{
		performCalculation();	
	}
	
	return false;
});


function attachTextValidation() {
	
	var f = $('calculator');
	var texts = f.getInputs('text');
		
	for (var i=0, len=texts.length; i < len; i++ ){
		
		texts[i].observe('change', function (e){
			validateText(e.target);
		});
		
		texts[i].observe('blur', function (e){
			validateText(e.target);
		});
		
	}
	
	
}

function validateText(n){

	var isValid = true;
	var value = n.value;

	n = $(n);
	
	if (value == null || 0 >=value.length )
		value = "zzzz";
			
	value = (value.replace(/\W*/,'')) * 1;
		
	var validationIcon = null;
	if( null != $(n.parentNode).select('img').length==1) {
		var imageNodes = $(n.parentNode).select('img');
		validationIcon = $(n.parentNode).select('img')[imageNodes.length - 1];
	}		


		//we attach different classes to the inputs to determine how to validate.
		// eg big num.. must be a number between 5 and six digits
		if ( n.hasClassName('bigNum') ){
			if (isNaN(value))
				isValid = false;
				
			isValid = ( value >= 100000 && value < 10000000);
			
		} else if (n.hasClassName('optNum')){

			//if (0 == value.length) {
			//	isValid = true;
			//} else if (0 < value.length) {
				isValid = !isNaN(value);
			//} else {
			//	isValid = false;
			//}
			
		} else {
			if (isNaN( value ) || 0 > value || 0 >= value.length){
				isValid = false;
			} else {
				isValid = true;
			}
		}
	
	
	//add additional checks here.. that make the text dependant on another item.
	
	
	if (isValid){
		validationIcon.src = "/images/tick.gif";
		return true;		
	} else {
		validationIcon.src = "/images/cross.gif";
		return false;		
	}
}


function validateTextFields() {
	var f = $('calculator');
	var texts = f.getInputs('text');
	var textsAreValid = true;
	
	var validText=false;
	for (var i=0, len=texts.length; i < len; i++ ){
		validText = validateText(texts[i]);
		if (!validText) {
			textsAreValid = false;
		}
	}
	return textsAreValid;
}


function validateDates(){
	return 1 == 1;
}

function performValidation(e){

	//first validate radio buttons	
	var textsAreValid = validateTextFields();
	return	textsAreValid;
}

function showValidationError(){
	
	var popUp = $('validationErrors');
	popUp.show();
	
	var icon = $('calculateSubmit');
	
	var iconDims = icon.getDimensions();
	var iconOffset = icon.viewportOffset();
	var iconScrollOffset = icon.cumulativeScrollOffset();
			
	popUp.style.left = ( iconOffset.left - popUp.getWidth() - 20 + iconScrollOffset.left ) + 'px' ;
	popUp.style.top = (iconOffset.top - (iconDims.height/2) + 10  + iconScrollOffset.top) + 'px';
	
	new Effect.Opacity( 'validationErrors', { from: 0.0, to: 1.0, duration: 0.2 });	
}

function hideValidationError() {
	new Effect.Opacity( 'validationErrors', { 
		from: 1.0, 
		to: 0.0, 
		duration: 0.2
		}
		
	);
	$('validationErrors').hide();
}

function attachHelp(){
	var helpIcons = $$('.helpIcon');

	for (var i=0, len= helpIcons.length; i < len; i++){
		
		var icon=helpIcons[i];
		
		var popUp = $(icon.readAttribute('rel'));
		if (null != popUp){
			popUp.setOpacity(0);
			//popUp.show();
		}
		
		$(icon).observe('mouseover', function (e){
			var icon = $(e.target);
			
			
			var popUp = $(icon.readAttribute('rel'));
			
			if (null == popUp)
				return;

			var iconDims = icon.getDimensions();
			var iconOffset = icon.viewportOffset();
			var iconScrollOffset = icon.cumulativeScrollOffset();
			
			popUp.style.left = ( iconOffset.left + (iconDims.width/2) + iconScrollOffset.left ) + 'px' ;
			popUp.style.top = (iconOffset.top - popUp.getHeight() - 10  + iconScrollOffset.top) + 'px';
			
			//possibly add an effect??

			
			new Effect.Opacity( popUp.identify(), { 
				from: 0.0, 
				to: 1.0, 
				duration: 0.2 ,
				beforeStart: function (effect) {
					effect.element.show();

				}
				});
			
		});	
		
		$(icon).observe('mouseout', function (e){
		
			var icon = $(e.target);			
			var popUp = $(icon.readAttribute('rel'));

			if (null == popUp)
				return;
				
			
			new Effect.Opacity(popUp.identify(), 
			{ 
				from: 1.0, 
				to: 0.0, 
				duration: 0.2,
				afterFinish: function (effect) {		
					effect.element.hide();
				}
			});
		});	
	}

}

function washVolume(vatSize){
	switch (vatSize) {
		case 3400 : return 100;
		case 4500 : return 100; 
		case 5700 : return 120; 
		case 6800 : return 150; 
		case 7800 : return 160; 
		case 7950 : return 160;  
		case 9100 : return 200;  
		case 11500 : return 230;  
		case 14000 : return 300;  
		case 16000 : return 320;  
		case 18000 : return 360;  
		case 21500 : return 430;  
		case 24000 : return 480;  
		case 26000 : return 520;  
		case 28000 : return 560;  
		case 30000 : return 600;
		default : return 0;
	}
}

function performCalculation(){
	//this is defined but not named.. 
	var G11=0.001;
	
/*	var totalDetergentLitres = 
	((WC5*10)*WE5*WG5*G11)  + 0 + (WC8*1*WG8*G11) + (WE8*1*WJ8*G11)
	
	//WC5 == number of clusters
*/

	//detergent litres.
	var numberOfClusters = $F('numberOfClusters') * 1;//WC5
	var noPlantWashes = $F('noPlantWashes') * 1;//WE5
	var milkingDays = $F('milkingDays') * 1;//wg5

	var washVolumeBMT1 = washVolume( ( $F('bmt1')  * 1 ) );//WC8 // also.. C14
	var bmt1Collections = $F('bmt1Collections') * 1;//WG8

	var washVolumeBMT2 = washVolume( ( $F('bmt2')  * 1 ) );//WE8
	var bmt2Collections = $F('bmt2Collections') * 1;//WJ8
	
	var totalDetergentLitres = 
	((numberOfClusters*10)* noPlantWashes * milkingDays * G11)  +
	0 +
	(washVolumeBMT1*1*bmt1Collections*G11)+
	(washVolumeBMT2*1*bmt2Collections*G11);
	
	
	
	$('totalDetergentLitres').update( commaSeperation(  Math.round(totalDetergentLitres)+"",'3,3'));
	
	//supernova?? cost..
	var superNovaCost = 0;
	var packSize = $F('packSize') * 1;//WE25
	
	// var superNovaDetergentCost =0;
	var superNovaDetergentCost = $F('supernovaPrice') * 1;
	if (packSize > 0 && (numberOfClusters + washVolumeBMT1 + washVolumeBMT2) > 0 ) {
		// if( packSize==100 ) {
		// 	superNovaDetergentCost=590;               // price 100
		// } else if (packSize==200) {
		//	superNovaDetergentCost=995;          //price 200	 
		// }
		superNovaCost=superNovaDetergentCost * totalDetergentLitres/packSize;
		
	}
	$('superNovaCost').update( commaSeperation(  Math.ceil(superNovaCost)+"",'3,3'));
	
	
	//Electricity Cost Savings 
            
	//plant..
	var plantTotalLitres=(numberOfClusters*10*noPlantWashes*milkingDays);
	
	var bmt1TotalLitres=(washVolumeBMT1*1*bmt1Collections);
	var colostrumWeeks = $F('colostrumWeeks') * 1;//colostrumWeeks=(Text3.Value);
	

	var waterInletTemp = $F('waterInletTemp') * 1;//WC12-  inlet temp
	var energyCost = $F('energyCost');//WG12 - electricty
	
	var plantTotalHotWater=0;//L12
	if(plantTotalLitres>0) {
		plantTotalHotWater=(((2-1)*(numberOfClusters*10))*((milkingDays-(colostrumWeeks*7))/2));   
	}

	var plantTotalKWH =((plantTotalHotWater*4.186*(85-waterInletTemp))/(1000*3.6));	//M12
	var plantTotalDollars=(plantTotalKWH*(energyCost/100));// N12

	//tanks..
	var bmt1TotalHotWater = 0;//L14
	if(bmt1TotalLitres > 0) { 
		bmt1TotalHotWater=((1-1)*washVolumeBMT1*(bmt1Collections-(colostrumWeeks*7)/1));//L14    
	} 
	
	var bmt1TotalKWH=0;//M14
	if(bmt1TotalHotWater>0) {
		bmt1TotalKWH=((bmt1TotalHotWater*4.186*(85-waterInletTemp))/(1000*3.6));
	} 
	
	var bmt1TotalDollars =(bmt1TotalKWH*(energyCost/100));// N14
	
	
	var carbonEmissionsCost = ((0.625*(plantTotalKWH+bmt1TotalKWH)/1000)*15);// N18         
	var totalCost = (plantTotalDollars+bmt1TotalDollars+carbonEmissionsCost);// N21
	var electricitySavings = (totalCost-carbonEmissionsCost);	
	

	$('electricitySavings').update( commaSeperation(  Math.ceil(electricitySavings)+"",'3,3'));
	$('additionalSavings').update( commaSeperation(  Math.ceil(carbonEmissionsCost)+"",'3,3'));
	
	//REal costs..

	// bmt2Collections // C15=(LookupValue(Int32.Parse (Select2.Value)));
	var bmt2TotalLitres = bmt2Collections*1*bmt2Collections;

	var bmt2TotalHotWater =0; // L15
	if(bmt1TotalLitres>0) {
		bmt2TotalHotWater=((1-1)*bmt2Collections)*(bmt2Collections-(colostrumWeeks*7))/1;   //(1-1)==(m5-1)
	}
	
	var bmt2TotalKWH=0;
	if(bmt2TotalHotWater>0) {
		bmt2TotalKWH=(bmt2TotalHotWater*4.186*(85-waterInletTemp))/(1000*3.6);
	}
	
	var bmt2TotalDollars=bmt2TotalKWH*(energyCost/100);//N15
	
	var actualSuperNovaCost=0;
	if(packSize>0) {
		actualSuperNovaCost = superNovaCost;//(result2);
	}


	
	var totalSupernovaActualCost=0;	
	if(packSize>0) {
		totalSupernovaActualCost=(actualSuperNovaCost-plantTotalDollars-bmt1TotalDollars-bmt2TotalDollars);		
	}
	$('totalSupernovaActualCost').update( commaSeperation(  Math.round(totalSupernovaActualCost)+"",'3,3'));
	
	//perform result6 for Supernova real cost per cow
	var superNovaPerCow=0;
	var herdSize = $F('herdSize') * 1;
	if(herdSize > 0 ) {
		superNovaPerCow = totalSupernovaActualCost/herdSize;
		//tem=System.Convert.ToDouble(result6.ToString());//
		//Text13.Value=(costPerCow*100)/100; //erpcentage of what?
	}
	$('superNovaPerCow').update((superNovaPerCow).toFixed(2));

	var currentDetergentCostPerLitre = $F('currentDetergentCostPerLitre') * 1;//WE24
	if (currentDetergentCostPerLitre > 0){
		//perform groud results for Current Acid Detergent Real Cost
	
		//var litresOfWaterForPlantWash = (numberOfClusters*10*noPlantWashes*milkingDays);//F12
		
		var currentPlantDetergentLitres = plantTotalLitres*0.0015;  //h12  //H11=0.0015
		var currentBMT1DetergentLitres = bmt1TotalLitres*0.0015;//h14 // bmt1TotalLitresF14=(washVolumeBMT1*1*bmt1Collections);
		var currentBMT2DetergentLitres =bmt2TotalLitres*0.0015;// h15

		var currentTotalLitresOfDetergent=currentPlantDetergentLitres+currentBMT1DetergentLitres+currentBMT2DetergentLitres;//H16
		$('currentTotalLitresOfDetergent').update( commaSeperation(  Math.ceil(currentTotalLitresOfDetergent)+"",'3,3'));
		
		var currentDetergentCost=0;
		if(packSize > 0) {
			currentDetergentCost=(Math.ceil(currentTotalLitresOfDetergent)/packSize)*currentDetergentCostPerLitre;
		}
		$('currentDetergentCost').update( commaSeperation(  Math.round(currentDetergentCost)+"",'3,3'));
		
		var currentActualCost=0;//result 9...
		if(currentDetergentCost>0) {
			//currentActualCost=currentDetergentCost+plantTotalDollars+bmt1TotalDollars+bmt2TotalDollars;
			currentActualCost=currentDetergentCost;
		}

		$('currentActualCost').update( commaSeperation(  Math.round(currentActualCost)+"",'3,3'));
		
		var currentActualCostPerCow=0;
		if(herdSize > 0) {
			currentActualCostPerCow=(currentActualCost/herdSize);
		}
		$('currentActualCostPerCow').update( commaSeperation(((currentActualCostPerCow).toFixed(2))+"",'3,3'));

	}

	
	
}

function commaSeperation(number, commaSeperaterList)
       {
               //My array
               var myArray = commaSeperaterList.split(',');

               var newNum = "";
               var newNum2 = "";
               var count = 0;

               //decimal number check
               if (number.indexOf('.') != -1){ //number ends with a decimal point
               if (number.indexOf('.') == number.length-1){
               number += "00";
               }
               if (number.indexOf('.') == number.length-2){ //number ends with a single digit
               number += "0";
               }

               var a = number.split(".");
               number = a[0]; //the part we will commaSeperation
               var end = '.' + a[1] //the decimal place we will ignore and add back later
               }
               else {var end = "";}

               var q=0;
               //add the commas
               for (var k = number.length-1; k >= 0; k--)
               {
                   ar = myArray[q]

                       var oneChar = number.charAt(k);
                       if (count == ar)
                       {
                               newNum += ",";
                               newNum += oneChar;
                               count = 1;
                               q++;
                               continue;
                       }
                       else
                       {
                               newNum += oneChar;
                               count ++;
                       }
               } 
               //re-reverse the string
               for (var k = newNum.length-1; k >= 0; k--){
               var oneChar = newNum.charAt(k);
               newNum2 += oneChar;
       }

return newNum2 + end;
}
