﻿// JScript File
var _ratecalculator_res_water = "RESIDENTIAL WATER";
var _ratecalculator_com_water = "COMMERCIAL WATER";
var _ratecalculator_sewer = "SEWER";

var _debugstr = "";
function debugWrite(str) {
    _debugstr+="\n" + str;
}
function showDebug() {
    if (_debugstr != "") {
        alert(_debugstr);
    }
}

function fnIsFloat(txtVal) {
   if (isNaN(parseFloat(txtVal))) {
      return false;
   }
   return true;
}

function fnFormatMoney(pFloat){   
    var n = Math.round(pFloat*100)/100;
    var x = n.toString();    
    if (x.indexOf('.') == x.length-2) {
         x+= "0";
    }    
    if (x.indexOf('.') == -1) {
         x+= ".00";
    }    
    return x;
}

var _maxUsageForRate = 0;
var _minUsageForRate = 0;


/*PURPOSE: generic function to append rate data from a range of usage*/
function appendToRate(currUsage,maxUsage,rateMultiplier) {
  _minUsageForRate = _maxUsageForRate+1; //one more than old max
  if (currUsage >= _minUsageForRate) {
       _maxUsageForRate= maxUsage;
       var tempUsage=currUsage-_minUsageForRate+1;
       if (currUsage>_maxUsageForRate) {
          tempUsage=_maxUsageForRate-_minUsageForRate+1;
       }
       return (rateMultiplier * tempUsage);            
   }
   return 0;     
}


//object to create...
function UtilityCalculator(calculatorType) {
   this.htmltemplate ="";
   
   switch (calculatorType) {
      case _ratecalculator_res_water:
          this.displayCalculator = DisplayResidentialWater;
          break;
      case _ratecalculator_com_water:
          this.displayCalculator = DisplayCommercialWater;
          break;
      case _ratecalculator_sewer:
          this.displayCalculator = DisplayResidentialSewer;
          break;
   }      
}


/*************************************
RESIDENTIAL WATER FUNCTIONS
*************************************/

function DisplayResidentialWater(elemId) {
    this.htmltemplate = "<form id=\"frmrwc\" name=\"frmrwc\" method='get'><table id=\"rwc\">";
    this.htmltemplate += "<tr><td class=\"calcrow1\" colspan='2'> </td></tr>";
    this.htmltemplate += "<tr><td  class=\"calcrow2col1\">Insert Usage</td><td class=\"calcrow2col2\"><input type='text' id=\"rwcusage\" name=\"rwcusage\" class=\"calcusage\" onblur=\"javascript: rwcCalculateUsage(this);\" /> <input class=\"calcusagego\" type=\"button\" value='Go' /></td></tr>";
    this.htmltemplate += "<tr><td  class=\"calcrow3col1\">Current Rate</td><td class=\"calcrow3col2\"><div id='rwcproposedrate'></div></td></tr>";
    this.htmltemplate += "<tr><td  class=\"calcrow4col1\"> </td><td class=\"calcrow4col2\"><div id='rwccurrentrate' style='display:none;'></div></td></tr>";
    this.htmltemplate += "</table></form>";
    
    if (document.getElementById && document.getElementById(elemId)) {
        document.getElementById(elemId).innerHTML=this.htmltemplate; 
    } 
}


function rwcCalculateUsageMath(currUsage) {
    var baseRate = 21.7;
    var rateMultiplier = 0;
    var tempUsage = 0;
    _minUsageForRate = 0;
    _maxUsageForRate = 0;
   
    var currRate=baseRate; //default            
            
    _minUsageForRate = 7;
    // handle first base rate section
    if (currUsage >= _minUsageForRate) {
       _maxUsageForRate= 15;
       rateMultiplier = 5.51; 
       tempUsage=currUsage;
       if (currUsage>_maxUsageForRate) {
          tempUsage=_maxUsageForRate;
       }
       currRate = baseRate + (rateMultiplier * (tempUsage-_minUsageForRate+1));
    
    
        //add additional rates from rate table
        currRate +=appendToRate(currUsage,20,5.63);            
        currRate +=appendToRate(currUsage,30,5.74);
        currRate +=appendToRate(currUsage,40,5.87);            
        currRate +=appendToRate(currUsage,50,6.33);
        currRate +=appendToRate(currUsage,60,6.58);
        currRate +=appendToRate(currUsage,70,6.81);
        currRate +=appendToRate(currUsage,80,7.04);
        currRate +=appendToRate(currUsage,405,7.16);
    }
    return currRate;
}

//proposed rate calculator table
function rwcCalculateUsageProposedMath(currUsage) {
    var baseRate = 23.82;
    var rateMultiplier = 0;
    var tempUsage = 0;
    _minUsageForRate = 0;
    _maxUsageForRate = 0;

    var currRate = baseRate; //default            

    _minUsageForRate = 7;
    // handle first base rate section
    if (currUsage >= _minUsageForRate) {
        _maxUsageForRate = 15;
        rateMultiplier = 6.05;
        tempUsage = currUsage;
        if (currUsage > _maxUsageForRate) {
            tempUsage = _maxUsageForRate;
        }
        currRate = baseRate + (rateMultiplier * (tempUsage - _minUsageForRate + 1));

        //add additional rates from rate table
        currRate += appendToRate(currUsage, 20, 6.18);
        currRate += appendToRate(currUsage, 30, 6.30);
        currRate += appendToRate(currUsage, 40, 6.44);
        currRate += appendToRate(currUsage, 50, 6.95);
        currRate += appendToRate(currUsage, 60, 7.22);
        currRate += appendToRate(currUsage, 70, 7.47);
        currRate += appendToRate(currUsage, 80, 7.73);
        currRate += appendToRate(currUsage, 405, 7.86);
    }
    return currRate;
}


function rwcCalculateUsage(obj) {
   
   var currUsage = 0.00;
   var currRate = 0.00;

   var proposedRate = 0.00;

   _debugstr = "";
   
   if (document.getElementById && document.getElementById("rwccurrentrate")) {
        if(fnIsFloat(obj.value)) {
            currUsage = parseFloat(obj.value);  //get value from text object
            
            currRate=rwcCalculateUsageMath(currUsage)+scCalculateUsageMath(currUsage);
            //proposedRate = currRate * 1.12; //old

            // 9.75% for water  and 15% for sewer
            var proposedWater = rwcCalculateUsageProposedMath(currUsage);  //(rwcCalculateUsageMath(currUsage) * 1.0975);
            var proposedSewer = scCalculateUsageProposedMath(currUsage);  //(scCalculateUsageMath(currUsage) * 1.150);
            proposedRate = proposedWater + proposedSewer;
           
            debugWrite("proposed resid water: " + proposedWater);
            debugWrite("proposed sewer: " + proposedSewer);
            //showDebug();
            document.getElementById("rwccurrentrate").innerHTML = fnFormatMoney(currRate);
            document.getElementById("rwcproposedrate").innerHTML = fnFormatMoney(proposedRate);
        }
   } 
}


/*************************************
COMERCIAL WATER FUNCTIONS
*************************************/


function DisplayCommercialWater(elemId) {
    this.htmltemplate = "<form id=\"frmcwc\" name=\"frmcwc\" method='get'><table id=\"cwc\">";
    this.htmltemplate += "<tr><td class=\"calcrow1\" colspan='2'> </td></tr>";
    this.htmltemplate += "<tr><td  class=\"calcrow2col1\">Insert Usage</td><td class=\"calcrow2col2\"><input type='text' id=\"cwcusage\" name=\"cwcusage\" class=\"calc:usage\" onblur=\"javascript: cwcCalculateUsage(this);\" /> <input class=\"calcusagego\" type=\"button\" value='Go' /></td></tr>";
    this.htmltemplate += "<tr><td  class=\"calcrow3col1\">Current Rate</td><td class=\"calcrow3col2\"><div id='cwcproposedrate'></div></td></tr>";
    this.htmltemplate += "<tr><td  class=\"calcrow4col1\"> </td><td class=\"calcrow4col2\"><div id='cwccurrentrate' style='display:none;'></div></td></tr>";
    this.htmltemplate += "</table></form>";
    
    if (document.getElementById && document.getElementById(elemId)) {
        document.getElementById(elemId).innerHTML=this.htmltemplate; 
    } 
}


function cwcCalculateUsageProposedMath(currUsage) {
    var baseRate = 55.18;
    var rateMultiplier = 0;
    var tempUsage = 0;

    _minUsageForRate = 0;
    _maxUsageForRate = 0;

    var currRate = baseRate; //default            

    _minUsageForRate = 7;
    // handle first base rate section
    if (currUsage >= _minUsageForRate) {
        _maxUsageForRate = 15;
        rateMultiplier = 6.69;
        tempUsage = currUsage;
        if (currUsage > _maxUsageForRate) {
            tempUsage = _maxUsageForRate;
        }
        currRate = baseRate + (rateMultiplier * (tempUsage - _minUsageForRate + 1));


        //add additional rates from rate table
        currRate += appendToRate(currUsage, 20, 6.83);
        currRate += appendToRate(currUsage, 30, 6.95);
        currRate += appendToRate(currUsage, 40, 7.08);
        currRate += appendToRate(currUsage, 50, 7.47);
        
        currRate += appendToRate(currUsage, 60, 7.73);
        currRate += appendToRate(currUsage, 70, 8.12);
        currRate += appendToRate(currUsage, 80, 8.37);
        currRate += appendToRate(currUsage, 1421, 9.02);
    }
    return currRate;
}

function cwcCalculateUsageMath(currUsage) {
   var baseRate = 49.27;
   var rateMultiplier = 0;
   var tempUsage = 0; 
      
   _minUsageForRate = 0;
   _maxUsageForRate = 0;   
   
   var currRate=baseRate; //default            
            
    _minUsageForRate = 7;
    // handle first base rate section
    if (currUsage >= _minUsageForRate) {
       _maxUsageForRate= 15;
       rateMultiplier = 6.10; 
       tempUsage=currUsage;
       if (currUsage>_maxUsageForRate) {
          tempUsage=_maxUsageForRate;
       }
       currRate = baseRate + (rateMultiplier * (tempUsage-_minUsageForRate+1));
    
    
        //add additional rates from rate table
        currRate +=appendToRate(currUsage,20,6.22);            
        currRate +=appendToRate(currUsage,30,6.33);
        currRate +=appendToRate(currUsage,40,6.45);            
        currRate +=appendToRate(currUsage,50,6.81);
        currRate +=appendToRate(currUsage,60,7.04);
        currRate +=appendToRate(currUsage,70,7.40);
        currRate +=appendToRate(currUsage,80,7.63);
        currRate +=appendToRate(currUsage,1421,8.22);
    }
    return currRate;
}



function cwcCalculateUsage(obj) {
   
   var currUsage = 0.00;
   var currRate = 0.00;

   var proposedRate = 0.00;
   
   if (document.getElementById && document.getElementById("cwccurrentrate")) {
        if(fnIsFloat(obj.value)) {
            currUsage = parseFloat(obj.value);            
            
            currRate=cwcCalculateUsageMath(currUsage)+scCalculateUsageMath(currUsage);
            
            var proposedWater = cwcCalculateUsageProposedMath(currUsage);
            var proposedSewer = scCalculateUsageProposedMath(currUsage);
            debugWrite("proposed com water: " + proposedWater);
            debugWrite("proposed sewer: " + proposedSewer);
            //showDebug();
            proposedRate = proposedWater + proposedSewer;             
            
            document.getElementById("cwccurrentrate").innerHTML = fnFormatMoney(currRate);
            document.getElementById("cwcproposedrate").innerHTML = fnFormatMoney(proposedRate);
        }
   } 
}


/*************************************
SEWER FUNCTIONS
*************************************/

function DisplayResidentialSewer(elemId) {
    this.htmltemplate = "<form id=\"frmsc\" name=\"frmsc\" method='get'><table id=\"sc\">";
    this.htmltemplate += "<tr><td class=\"calcrow1\" colspan='2'>Sewer Customer F/Y 08/09</td></tr>";
    this.htmltemplate += "<tr><td  class=\"calcrow2col1\">Insert Usage</td><td class=\"calcrow2col2\"><input type='text' id=\"scusage\" name=\"scusage\" class=\"calc:usage\" onblur=\"javascript: scCalculateUsage(this);\" /> <input class=\"calcusagego\" type=\"button\" value='Go' /></td></tr>";
    this.htmltemplate += "<tr><td  class=\"calcrow3col1\">Current Rate</td><td class=\"calcrow3col2\"><div id='sccurrentrate'></div></td></tr>";
    this.htmltemplate += "<tr><td  class=\"calcrow4col1\"> </td><td class=\"calcrow4col2\"><div id='scproposedrate'></div></td></tr>";
    this.htmltemplate += "</table></form>";
    
    if (document.getElementById && document.getElementById(elemId)) {
        document.getElementById(elemId).innerHTML=this.htmltemplate; 
    } 
}

function scCalculateUsageProposedMath(currUsage) {
    var baseRate = 65.03;
    var rateMultiplier = 0;
    var tempUsage = 0;

    _minUsageForRate = 0;
    _maxUsageForRate = 0;

    var currRate = baseRate; //default            

    _minUsageForRate = 2;

    // handle first base rate section
    if (currUsage >= _minUsageForRate) {
        _maxUsageForRate = 1075;
        rateMultiplier = 1.94;
        tempUsage = currUsage;
        if (currUsage > _maxUsageForRate) {
            tempUsage = _maxUsageForRate;
        }
        currRate = baseRate + (rateMultiplier * (tempUsage - _minUsageForRate + 1));
    }
    return currRate;
}


function scCalculateUsageMath(currUsage) {
   var baseRate = 56.55;
   var rateMultiplier = 0;
   var tempUsage = 0; 
      
   _minUsageForRate = 0;
   _maxUsageForRate = 0;   
   
   var currRate=baseRate; //default            
            
   _minUsageForRate = 2;
   
    // handle first base rate section
    if (currUsage >= _minUsageForRate) {
       _maxUsageForRate= 1075;
       rateMultiplier = 1.69;
       tempUsage=currUsage;
       if (currUsage>_maxUsageForRate) {
          tempUsage=_maxUsageForRate;
       }
       currRate = baseRate + (rateMultiplier * (tempUsage-_minUsageForRate+1));
    }
    return currRate;
}

function scCalculateUsage(obj) {
   var currUsage = 0.00;
   var currRate = 0.00;

   var proposedRate = 0.00;
   
   if (document.getElementById && document.getElementById("cwccurrentrate")) {
        if(fnIsFloat(obj.value)) {
            currUsage = parseFloat(obj.value);
            
            currRate = scCalculateUsageMath(currUsage);

            // 9.75% for water  and 15% for sewer
            proposedRate = (scCalculateUsageMath(currUsage) * 1.150)
            
            document.getElementById("sccurrentrate").innerHTML = fnFormatMoney(currRate);
            document.getElementById("scproposedrate").innerHTML = fnFormatMoney(proposedRate);
        }
   } 
}



