
var gErr=false,gErrRows=new Object(),gErrCells=new Object(),gReq,gLastVals=null,gHide=true,gPrintBut=calcGet("butPrint");gResultsTable=calcGet("rd");gDisc=calcGet("disc");function calcGet(id)
{return document.getElementById(id);}
function UpdateValues(encodedVals)
{if(window.XMLHttpRequest)
{gReq=new XMLHttpRequest();}
if(gReq)
{gReq.onreadystatechange=DataReadyStateChanged;gReq.open("POST","/personal-finance/calculators/Calc.ashx?c="+file);gReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");gReq.send("p="+encodeURIComponent(encodedVals));}}
function DataReadyStateChanged()
{if(gReq.readyState==4)
{if(gReq.status==200)
{var response=gReq.responseText;var calcResponse=response.split("|||");if(null!=calcResponse[1])
{var cells=calcResponse[1].split("||"),cell,el;delErrs();for(var i=0;i<cells.length;i++)
{cell=cells[i].split("|");if(undefined==cell[1])
{cell[1]="";}
if(cell[0]=="ERR")
{addErr(cell[1],cell[2]);gErr=true;}
else
{el=calcGet(cell[0]);if(el.tagName=="SELECT")
el.value=cell[1];else
{if('string'==typeof el.value)el.value=cell[1];else if('string'==typeof el.textContent)el.textContent=cell[1];else el.innerText=cell[1];}}}
var inputVals=GetInputVals();var encodedVals=FormEncode(inputVals);gLastVals=encodedVals;showResults();}}}}
function GetInputVals()
{var inputVals=new Object();var calForm=calcGet("frmCalc");var inputs=calForm.getElementsByTagName("input");var strTrim;for(var i=0;i<inputs.length;i++)
{if(inputs[i].type!="button")
{strTrim=inputs[i].value.replace(/\s+/,"");inputVals[inputs[i].id]=(strTrim=="")?"0":inputs[i].value;}}
inputs=calForm.getElementsByTagName("select");for(var i=0;i<inputs.length;i++)
{inputVals[inputs[i].id]=inputs[i].value;}
return inputVals;}
function FormEncode(inputVals)
{var encodedVals="";var currIn="";for(var name in inputVals)
{currIn="";if("__"!=name.substr(0,2)&&""!=name)
{currIn=inputVals[name];currIn=currIn.replace(/[^0-9a-zA-Z\s\$\,\.\(\)\%\-]|^\s+|\s+$/g,"");encodedVals+=name+"="+currIn+"&";}}
return encodedVals;}
function onReset()
{gHide=true;window.location.hash="";document.frmCalc.reset();getChanges();}
function onCalc()
{gHide=false;getChanges();}
function getChanges()
{var inputVals=GetInputVals();var changed=false;var encodedVals=FormEncode(inputVals);if(encodedVals!=gLastVals)
changed=true;gLastVals=encodedVals;if(changed)
UpdateValues(encodedVals);else
showResults();}
function showResults()
{var v="hidden";if(!gHide&&!gErr)
{v="visible";window.location.hash="Results";}
gResultsTable.style.visibility=gPrintBut.style.visibility=gDisc.style.visibility=v;}
function addErr(cellID,errMsg)
{var row=calcGet("tblCalc").insertRow(calcGet(cellID).parentNode.parentNode.rowIndex),cell=row.insertCell(0);row.id="err"+cellID;cell.colSpan=gColCount;cell.className="errMsg";cell.appendChild(document.createTextNode(errMsg));gErrRows[cellID]=row.id;calcGet(cellID).className="errCell";gErrCells[cellID]=cellID;}
function delErrs()
{var tbl=calcGet("tblCalc");for(i in gErrRows)
{tbl.deleteRow(calcGet(gErrRows[i]).rowIndex);delete gErrRows[i];}
for(i in gErrCells)
{calcGet(gErrCells[i]).className="";delete gErrCells[i];}
gErr=false;}