//arGridSize = Array(1020,1360,1530,1700,2040,2380,2720,3060,3400,4080,5100,6800);
//arCostpw = Array(10.10,8.82,8.495,8.175,7.795,7.435,7.35,7.352,7.06,7.255,6.803,6.427);

arGridSize = Array(1050,1400,1575,1750,2100,2450,2800,3150,3500,4200,4900,5250);
arCostpw = Array(8.857,7.714,7.365,7.086,7.000,6.612,6.571,6.556,6.257,6.095,5.714,5.695);

iPanelSize = 175;

var RECSellPrice, intRecsValueTotal, EmissionElec, EmissionCar, KMAverage, DeemedMW, SysSize, TreesAbsorption, BattIneff, GasEm;   

EmissionElec = 1.07;  
EmissionCar = 0.06;
KMAverage = 20000;
TreesAbsorption = 20;

function doCalcMW()
{
	if(isValidate())
	{
		CalcMWh();
		CalcDaily();
		CalcRECS();
		CalcCost();	
		CalcBillSave();	
		CalcEmmission();
		CalcCarOffRoad();				
		CalcNumTrees();
	}
}


function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}
function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

function CalcDaily() {
	//document.all.ReportDaily.innerHTML = Math.round((SysSize * 4) /1000);
	var daily;
	daily = document.all.ReportEnergy.innerHTML/365;
	document.all.ReportDaily.innerHTML = Math.round(daily*100)/100;
	
}
		
function isValidate()
{
	if (PowerCalc.PCode.value=="")
		document.all.divPCode.innerHTML="<font color=orange>*</font>"; 
	else
		document.all.divPCode.innerHTML="";	
	
	if (PowerCalc.Pay.value=="")
		document.all.divPay.innerHTML="<font color=orange>*</font>"; 
	else
		document.all.divPay.innerHTML="";	

	if ((PowerCalc.PCode.value!="") && (PowerCalc.Pay.value!=""))
		return true;
	else
		return false;
}


function CalcCost()
{	
	
	for(i=0;i<arGridSize.length;i++)
	{
		//document.all.ReportCost.innerHTML = "$" + arCostpw[i];
		if(SysSize==arGridSize[i]){
			 SysCost = Math.round(SysSize * arCostpw[i]);	
		}
	}
	
	if (Right(SysCost,1)<5) {
		SysCost = SysCost-Right(SysCost,1); 
	} else {
		SysCost = SysCost+(10-Right(SysCost,1));
	}
	
	document.all.ReportSystemCost.innerHTML = "$" + SysCost;
	
	SysCost = SysCost - intRecsValueTotal;	
	document.all.ReportCost.innerHTML = "$" + SysCost;
}

function CalcRECS()
{	
	var intRECS;
	intRECS = Math.floor(DeemedMW * 15);
	document.all.ReportRECS.innerHTML = intRECS
	intRecsValueTotal = Math.round((intRECS * RECSellPrice)*100)/100;
	document.all.ReportRECSValue.innerHTML = "$" + intRecsValueTotal;
	
}


function CalcBillSave()
{
	document.all.ReportBillSaving.innerHTML = "$" + Math.round(BattIneff * 1000 * PowerCalc.Pay.value/100 * 100)/100;
}

function CalcEmmission()
{	GasEm = Math.round(BattIneff * EmissionElec * 100)/100;
	document.all.ReportEmission.innerHTML = GasEm;
}

function CalcCarOffRoad()
{	var numCars = Math.ceil((BattIneff * 1000 * EmissionElec)/(EmissionCar*KMAverage));
	
	document.all.ReportCar.innerHTML = numCars
	if (numCars > 1)
		document.all.NumCars.innerHTML = "cars ";
	else
		document.all.NumCars.innerHTML = "car ";
}
function CalcNumTrees()
{
	document.all.ReportTree.innerHTML = Math.ceil(GasEm*1000/TreesAbsorption);
}

function CalcMWh()
{ 
	var intPC, strResult, strGenResult, objPCode, intZone, dblCap;
	var arrZone = new Array(1.622, 1.536, 1.382, 1.185);
	
	SysSize= PowerCalc.pvCap.value;
	intPC = PowerCalc.PCode.value;
	RECSellPrice = PowerCalc.pRECs.value;
	
	if(isNaN(intPC))
		intPC=0;	
	
	objPCode = GetCodeTable();
		
	for(i=2;i<objPCode.length-1;i++)
	{
		if(intPC>(objPCode[i][0]*1-1) && intPC<(objPCode[i][1]*1+1))
		{
			intZone=objPCode[i][2];
			strGenResult = Math.round((arrZone[intZone-1] * SysSize))/1000;	
			if (SysSize>1500) {
				strResult = arrZone[intZone-1] * 1500/1000 * 5;
				strResult = strResult + (arrZone[intZone-1] * (SysSize-1500))/1000;
			} else {
				strResult = (Math.floor((arrZone[intZone-1] * SysSize))/1000) * 5;
			}
			DeemedMW = strResult;			
			BattIneff = strGenResult/0.9/0.9;	
		}
	}
	if (strResult == null || strResult=="undefined"){
		document.all.divPCode.innerHTML="<font color=red>Invalid Postcode</font>"; 
		document.all.divReport.style.display="none";
	}
	else
	{
		document.all.divPCode.innerText="";
		document.all.divReport.style.display="inline";

		document.all.ReportEnergy.innerHTML = Math.round((BattIneff * 1000)*100)/100;
	}

	document.all.ReportSystemSize.innerHTML = PowerCalc.pvCap.value;
	document.all.ReportPCode.innerHTML = PowerCalc.PCode.value;
}

function GetCodeTable()
{
	var objPCode, i;
	
	objPCode=PowerCalc.postcodeData.value.split("\n");
	for(i=2;i<objPCode.length;i++)
		objPCode[i]=objPCode[i].split(",");
	return objPCode;
}
