// Define the control names used in the page
var rdoOption = "radio";
var tbtier1Rate = "tierrate";
var divTier = "Tier";
var divResult = "divResult";
// End definition

// Variable Declaration
var AvgHourOfSunlight = 5.5;
var TotalRate = 0;
var YearlyAverage;
// for storing AC and DC KW
var PercAC = new Array();
var PercDC = new Array();
// Annual KW Usage
var AnnualKW = new Array();
// Total Saving per month
var iSaving = new Array();
// Percentage saving per month
var iSavingPerc = new Array();

// Sell Price
var SellPrice=10;
// System Investment
var iSystemInvestment = new Array();

// Estimate Rebate
var iEstimateRebate = new Array();

// Estimate Tax Credit @ 30%
var iEstimateTaxCredit = new Array();

// Balance Financed After Rebate
var iBalanceFinanced = new Array();

// Variables for sample carbon offset savings
var lessCO = 1.56879;           //Less Lbs of Carbon Dioxide
var lessVehicle = 0.000130325;  //Less Passenger Vehicles
var gallonGasoline = 0.08077085; //Less Gallons of Gasoline consumed
var barrelOil = 0.0016548625;   //Less Barrels of Oil consumed
var lessPropane = 0.0296496375;  //Less Propane Cylinders for home BBQ's
var lessCoal = 0.0000037225;    //Less Railcars of Coal Burned
var elecAvgHome = 0.00009425;   //Electricity to Power the Avg. American Home 

var iRebate;
var percRebate = 0.3;
var tierRate = new Array();
var iMonth = 0;
var iTierRateArray = MultiDimensionalArray(12, 5);

var iTierAverage = new Array(5);
// Define array of months.. .not in use now
var month = new Array(12);
month[0] = "January";
month[1] = "February";
month[2] = "March";
month[3] = "April";
month[4] = "May";
month[5] = "June";
month[6] = "July";
month[7] = "August";
month[8] = "September";
month[9] = "October";
month[10] = "November";
month[11] = "December";




// Loads the rate depending upon the resendential and commercial
function LoadRate() {
    var i;
	
//check for input 
	if (document.getElementById("address").value=="")
	{
		alert("Enter a valid street address");
		document.getElementById("address").focus();
		return false;
	}
	if (document.getElementById("city").value.length<=1)
	{
		alert("Enter a valid city");
		document.getElementById("city").focus();
		return false;
	}
	if (document.getElementById("state").value=="")
	{
		alert("Enter a valid state");
		document.getElementById("state").focus();
		return false;
	}	
	if (document.getElementById("zip").value.length!=5)
	{
		alert("Enter a valid zip");
		document.getElementById("zip").focus();
		return false;
	}		
	
    // get the rate for residential and commercial.
    var rdOptionValue = document.getElementById(rdoOption);
    if (getCheckedValue(rdOptionValue) == "Residential") {
        iRebate = 1.55;
    }
    else {
        iRebate= 1.24;
    }

    // Validates the Tier Rate input
    if (ValidateTierRate()) {
        for (i = 1; i <= 5; i++) {
            var strTextBox = tbtier1Rate + i.toString();
            tierRate[i - 1] = document.getElementById(strTextBox).value;
        }
    }
    else {
        alert("Enter a valid tier rate");
        return false;
    }
    return true;


    
    
}
// Calculate the saving based on Average
function CalculateSaving() {
try{
    YearlyAverage = (iTierAverage[0] + iTierAverage[1] + iTierAverage[2] + iTierAverage[3] + iTierAverage[4]) * 12;
    var DailyConsumption = YearlyAverage / 365;
    var ACWatt = DailyConsumption / AvgHourOfSunlight;
    var DCWatt = ACWatt / 0.82;
//    alert("calculate saving");


    PercAC[0] = ACWatt;
    PercDC[0] = DCWatt;


    PercAC[1] = ACWatt * .75;
    PercDC[1] = DCWatt * .75;


    PercAC[2] = ACWatt * .50;
    PercDC[2] = DCWatt * .50;


    PercAC[3] = ACWatt * .25;
    PercDC[3] = DCWatt * .25;


    AnnualKW[0]  = Math.round(PercAC[0] * AvgHourOfSunlight * 365);
    AnnualKW[1]  = Math.round(PercAC[1] * AvgHourOfSunlight * 365);
    AnnualKW[2]  = Math.round(PercAC[2] * AvgHourOfSunlight * 365);
    AnnualKW[3]  = Math.round(PercAC[3] * AvgHourOfSunlight * 365);






    CalculateCost();

    CalculateInvestmentDetails();

    CreateReport();
}
catch (ex) {
    alert(ex.message);
}

}
// Create the final report to display the output
function CreateReport() {
    try {
			document.getElementById("tdStreetAddress").innerText = document.getElementById("address").value;
			document.getElementById("tdCity").innerText = document.getElementById("city").value;
			document.getElementById("tdState").innerText = document.getElementById("state").value;
			document.getElementById("tdZip").innerText = document.getElementById("zip").value;
			if (document.getElementById("radio").checked==true)
				document.getElementById("tdResidential").innerText = "Residential";
			else
				document.getElementById("tdResidential").innerText = "Commercial";
		
//new addition to report
        for (var i = 1; i <= 5; i++) {
            
			document.getElementById("tdTierRate"+i.toString()).innerText = tierRate[i-1];
			//document.getElementById("tdTier2_"+ i.toString()+"Usage").innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_2_" + i.toString()).value));
			//document.getElementById("tdTier3_"+ i.toString()+"Usage").innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_3_" + i.toString()).value));
			//document.getElementById("tdTier4_"+ i.toString()+"Usage").innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_4_" + i.toString()).value));
			//document.getElementById("tdTier5_"+ i.toString()+"Usage").innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_5_" + i.toString()).value));
			
        }
			
		
	    for (var i = 1; i <= 12; i++) {
			if (document.getElementById("div" + i).style.display == 'block') {
				var icount1 = 0;
			
			document.getElementById("tdMonth"+ i.toString()).innerText = document.getElementById("cboMonth_"+i.toString()).value ;	
			document.getElementById("tdTier1_"+ i.toString()+"Usage").innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_1_" + i.toString()).value));
			document.getElementById("tdTier2_"+ i.toString()+"Usage").innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_2_" + i.toString()).value));
			document.getElementById("tdTier3_"+ i.toString()+"Usage").innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_3_" + i.toString()).value));
			document.getElementById("tdTier4_"+ i.toString()+"Usage").innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_4_" + i.toString()).value));
			document.getElementById("tdTier5_"+ i.toString()+"Usage").innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_5_" + i.toString()).value));
			
			}
		}
//new addition ro report - end
		
        for(icounter=0;icounter<4;icounter++)
        {
            var Perc = (4-icounter) * 25; // just for fixing a variable to 25, 50, 75 and 100 :) 
            document.getElementById("tdEstArrDC" + Perc).innerText = RoundtoDec(PercDC[icounter], 2);
			//document.getElementById("tdEstArrDC" + Perc).innerText = parseFloat(ReturnZeroifNaN(document.getElementById("tier_1_1").value));
            document.getElementById("tdEstAnnualAC" + Perc).innerText = RoundtoDec(PercAC[icounter], 2);
            document.getElementById("tdEstMonCostRed" + Perc).innerText = "$ " + addCommas(RoundtoDec(iSaving[icounter], 0));
            document.getElementById("tdSaving" + Perc).innerText = "$ " + addCommas(RoundtoDec(iSystemInvestment[icounter], 0) - RoundtoDec(iBalanceFinanced[icounter], 0))

            // for the sample carbon saving grid
            document.getElementById("tdlessCO" + Perc).innerText = addCommas(RoundtoDec(AnnualKW[icounter] * lessCO, 0));
            document.getElementById("tdlessVehicle" + Perc).innerText =  addCommas(RoundtoDec(AnnualKW[icounter] * lessVehicle , 2));
            document.getElementById("tdgallonGasoline" + Perc).innerText =  addCommas(RoundtoDec(AnnualKW[icounter] * gallonGasoline, 0));
            document.getElementById("tdbarrelOil" + Perc).innerText = addCommas(RoundtoDec(AnnualKW[icounter] * barrelOil, 0));
            document.getElementById("tdlessPropane" + Perc).innerText =  addCommas(RoundtoDec(AnnualKW[icounter] * lessPropane , 0));
            document.getElementById("tdlessCoal" + Perc).innerText =  addCommas(RoundtoDec(AnnualKW[icounter] * lessCoal , 2));
            document.getElementById("tdelecAvgHome" + Perc).innerText = addCommas(RoundtoDec(AnnualKW[icounter] * elecAvgHome, 2));

            document.getElementById("tdAnnualKWReqd" + Perc).innerText = addCommas(RoundtoDec(AnnualKW[icounter], 2));
            
        }
        showHideDivForResult();        
    }
    catch (ex) {
        alert(ex.message);
    }
}
// Function to round to a decimal place
function RoundtoDec(intValue, intDec) {
    if (intDec == 0)
        return Math.round(intValue);
    var multiplier = Math.pow(10, intDec);
    return Math.round(intValue * multiplier) / multiplier;
}
// Calculates the cost based on the tier rates and avg. tier KW
function CalculateCost() {
    try
    {
        TotalRate = 0;
        for (var i = 0; i < 5; i++) {
            TotalRate += (iTierAverage[i] * tierRate[i] * 12);
        }

        TotalRate = Math.round(TotalRate);

        var jcounter;
        var totalKWA;
        // J==>0 100%, 1-> 75%, 2->50%, 3->25%
        for (jcounter= 0; jcounter< 4; jcounter++) {
            var icounter = 0;
            iSaving[jcounter] = 0;
            totalKWA = Math.round(YearlyAverage) - Math.round( AnnualKW[jcounter]); // to calculate the remaining consumption
            while (totalKWA > Math.round((iTierAverage[icounter] *12)))
            {
                iSaving[jcounter] += Math.round((iTierAverage[icounter] * 12) * tierRate[icounter]);
                totalKWA = totalKWA - Math.round((iTierAverage[icounter] * 12));
                icounter++;
            }
            if (icounter < 5 && totalKWA > 0) {
                iSaving[jcounter] += totalKWA * tierRate[icounter];
            }
            iSavingPerc[jcounter] = Math.round((TotalRate - iSaving[jcounter]) / TotalRate * 100);
            iSaving[jcounter] = Math.round((TotalRate - iSaving[jcounter]) / 12);
    //        alert(iSaving[jcounter]);
    //        alert(iSavingPerc[jcounter]);
            }
    }

    catch (ex) {
        alert(ex.message);
    }
    
    
    
}

// To calculate investment details
function CalculateInvestmentDetails() {
    try
    {
        var jcounter;
        for (jcounter = 0; jcounter < 4; jcounter++) {
            iSystemInvestment[jcounter] = (PercDC[jcounter] * 1000) * SellPrice;
            iEstimateRebate[jcounter] = (((PercAC[jcounter] * 1000) * 0.96) * iRebate);
            iEstimateTaxCredit[jcounter] = (iSystemInvestment[jcounter] - iEstimateRebate[jcounter]) * percRebate; 
            iBalanceFinanced[jcounter] = iSystemInvestment[jcounter] - iEstimateRebate[jcounter] - iEstimateTaxCredit[jcounter];
        }
    }
    catch (ex) {
        alert(ex.message);
        }
}

// gets value of a checked radio button
function getCheckedValue(radioObj) {
    if (!radioObj)
        return "";
    var radioLength = radioObj.length;
    if (radioLength == undefined)
        if (radioObj.checked)
        return radioObj.value;
    else
        return "";
    for (var i = 0; i < radioLength; i++) {
        if (radioObj[i].checked) {
            return radioObj[i].value;
        }
    }
    return "";
}
// Function to validate tier rates
function ValidateTierRate() {
var blnReturnValue;
blnReturnValue = true;

for (var i = 1; i <= 5; i++) {
        var strTextBox = tbtier1Rate + i.toString();
        if (isValidNumber(document.getElementById(strTextBox).value) == false)
        {
            blnReturnValue = false;
        }
    }
    return blnReturnValue;
}


// For building multi-dimensional array
function MultiDimensionalArray(iRows, iCols) {
    var i;
    var j;
    var a = new Array(iRows);
    for (i = 0; i < iRows; i++) {
        a[i] = new Array(iCols);
        for (j = 0; j < iCols; j++) {
            a[i][j] = "";
        }
    }
    return (a);
}


// Update Array Value
function UpdateArrayValue()
{
    iTierRateArray[iMonth][0] = document.getElementById("tier1" + iMonth.toString()).value;
    iTierRateArray[iMonth][1] = document.getElementById("tier2" + iMonth.toString()).value;
    iTierRateArray[iMonth][2] = document.getElementById("tier3" + iMonth.toString()).value;
    iTierRateArray[iMonth][3] = document.getElementById("tier4" + iMonth.toString()).value;
    iTierRateArray[iMonth][4] = document.getElementById("tier5" + iMonth.toString()).value;

}
// function to validate if all the months name entered are unique
function ValidateMonths() {
    var icount = 0;
    var strMonths = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec";
    for (var i = 1; i <= 12; i++) {
        if (document.getElementById("div" + i).style.display == 'block') {
            var strMonthName = document.getElementById("cboMonth_" + i).value;
            if (strMonths.indexOf(strMonthName) >= 0) {
                strMonths = strMonths.replace(strMonthName, "");
            }
            else {
                alert("Please enter unique months!");
                return false;
            }
            
        }
    }
    return true;
}
// function to check that all the rates are entered for all the months, if not then
// display the error message div and return false
function ValidateRates() {
    //divWarning
    for (var i = 1; i <= 12; i++) {
        if (document.getElementById("div" + i).style.display == 'block') {
            var icount = 0;

            icount += parseFloat(ReturnZeroifNaN(document.getElementById("tier_1_" + i.toString()).value));
            icount += parseFloat(ReturnZeroifNaN(document.getElementById("tier_2_" + i.toString()).value));
            icount += parseFloat(ReturnZeroifNaN(document.getElementById("tier_3_" + i.toString()).value));
            icount += parseFloat(ReturnZeroifNaN(document.getElementById("tier_4_" + i.toString()).value));
            icount += parseFloat(ReturnZeroifNaN(document.getElementById("tier_5_" + i.toString()).value));
            if (icount == 0) {
                document.getElementById("divWarning").style.display = "block";
                return false;
            }
        }
    }
    document.getElementById("divWarning").style.display = "none";

    return true;
 }
        
// function to calculate the average of each month entered
function CalculateAverage() {
    try {
        //UpdateArrayValue();
        
        if (LoadRate() && ValidateMonths() && ValidateRates())
        {

            iMonth = 12;
            iTierAverage[0] = 0;
            iTierAverage[1] = 0;
            iTierAverage[2] = 0;
            iTierAverage[3] = 0;
            iTierAverage[4] = 0;
            var icount=0;
            for (var i = 1; i <= iMonth; i++) {
                if (document.getElementById("div" + i).style.display == 'block') {
                    iTierAverage[0] += parseFloat(ReturnZeroifNaN(document.getElementById("tier_1_" + i.toString()).value));
                    iTierAverage[1] += parseFloat(ReturnZeroifNaN(document.getElementById("tier_2_" + i.toString()).value));
                    iTierAverage[2] += parseFloat(ReturnZeroifNaN(document.getElementById("tier_3_" + i.toString()).value));
                    iTierAverage[3] += parseFloat(ReturnZeroifNaN(document.getElementById("tier_4_" + i.toString()).value));
                    iTierAverage[4] += parseFloat(ReturnZeroifNaN(document.getElementById("tier_5_" + i.toString()).value));
                    icount++;
                }
            }
            iTierAverage[0] = iTierAverage[0] / icount;
            iTierAverage[1] = iTierAverage[1] / icount;
            iTierAverage[2] = iTierAverage[2] / icount;
            iTierAverage[3] = iTierAverage[3] / icount;
            iTierAverage[4] = iTierAverage[4] / icount;

           
            CalculateSaving();
        }
    }
    catch (ex) {
        alert(ex.message);
    }
}
// function to submit the result form for sending email
function submitForm() {
    
    if (validateForm() == true) {
        document.getElementById("hidEmailContents").value = document.getElementById("divResults").innerHTML;
		document.getElementById("hideInput").value = document.getElementById("divInput").innerHTML;
        document.frmMail.submit();
    }
    else { return false; }
}
// function to validate the form
function validateForm()
{
var strErrorMessage='';

    if(isEmpty(document.getElementById("txtName").value))
        strErrorMessage = strErrorMessage + "Please enter Name.\n";

    if (isEmpty(document.getElementById("txtEmailId").value))
        strErrorMessage = strErrorMessage + "Please enter Email Address.\n";
    else
        if(isEmail(document.getElementById("txtEmailId").value)) 
            strErrorMessage = strErrorMessage + "Please enter a valid Email Address.\n";

        if (!isEmpty(strErrorMessage)) {
            alert(strErrorMessage);
            return false;
        }
        else {
            if (document.getElementById("chkAgree").checked == false) {
                alert("Please check the checkbox to send the email!");
                return false;
            }
        }
return (isEmpty(strErrorMessage));

}
        

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
//To check the email address
function isEmail(string) {
    return (string.search(/^([\w\d\-\.]+)@{1}(([\w\d\-]{1,67})|([\w\d\-]+\.[\w\d\-]{1,67}))\.(([a-zA-Z\d]{2,4})(\.[a-zA-Z\d]{2})?)$/) == -1);


}


// to Get Month in character format

function GetMonth(iMonthNum) {

    return month[iMonthNum];

}

// To check valid number
function isValidNumber(inpString) {
    if (inpString.length > 0)
        return /^[-+]?\d*(\.\d*)?$/.test(inpString);
    else
        return false;
}
// Returns Zero if input is not a valid number
function ReturnZeroifNaN(intNumber) {
    if (isValidNumber(trim(intNumber))) {
        return trim(intNumber);
    }
    else {
        return 0;
    }
}
function trim(str) {
    return str.replace(/^\s*/, "").replace(/\s*$/, "");

}

function addCommas(nStr) {
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}
