﻿var MC_Stage;
var MC_Mode;

function MC_ValidateForm()
{
  __FormErrorCount=0;
  
  __ValidateNotEmpty(MC_ID+"AmountBorrowedTextBox");
  __ValidateNotEmpty(MC_ID+"InterestRateTextBox");
  __ValidateNotEmpty(MC_ID+"RepaymentPeriodTextBox");
  __ValidateNotEmpty(MC_ID+"FirstRepaymentTextBox");
  {
    __ParseTemplate("dd/MM/yyyy");
    __SetValue(MC_ID+"FirstRepaymentTextBox",__ParseDateToString(__ParseDate(__GetValue(MC_ID+"FirstRepaymentTextBox"))));
  }
  
  return(__FormErrorCount==0);
}
function MC_ValidateNewRate()
{
  __FormErrorCount=0;
  
  __ValidateNotEmpty(MC_ID+"NewInterestRateTextBox");
  __ValidateNotEmpty(MC_ID+"EffectiveAfterTextBox");
  
  return(__FormErrorCount==0);
}


/**************************************************************/
/*                      E-MAIL FUNCTIONS                      */
/**************************************************************/
function MC_EmailCheckChange()
{
  document.getElementById("EmailFields").style.display=(document.getElementById(MC_ID+"EmailProjectionsCheckbox").checked?"inline":"none");
}
function MC_EmailProjections()
{
  __FormErrorCount=0;
  
  if(__ValidateNotEmpty(MC_ID+"EmailAddressTextBox"))
  {
    __ValidateEmailAddress(MC_ID+"EmailAddressTextBox");
  }
  if(__ValidateNotEmpty(MC_ID+"ConfirmEmailAddressTextBox"))
  {
    __ValidateEmailAddress(MC_ID+"ConfirmEmailAddressTextBox");
  }
  if(__FormErrorCount===0)
  {
    if(!__ValidateCompare(MC_ID+"EmailAddressTextBox",MC_ID+"ConfirmEmailAddressTextBox"))
    {
      __SetLabel(document.getElementById(MC_ID+"ConfirmEmailAddressTextBox"),true,"The e-mail addresses that you have entered do not match");
    }
    else
    {
      __SetLabel(document.getElementById(MC_ID+"ConfirmEmailAddressTextBox"),false);
    }
  }
  if(__FormErrorCount===0)
  {
    MC_Mode=2;
    MC_RemoveOutOfRangeRates();
    MC_RequestCalculations();
  }
}

/**************************************************************/
/*                    RATE CHANGE FUNCTIONS                   */
/**************************************************************/
function MC_ShowRateChangeDlg()
{
  document.getElementById(MC_ID+"NewInterestRateTextBox").value="";
  document.getElementById(MC_ID+"EffectiveAfterTextBox").value="";
  document.getElementById(MC_ID+"NewRateFixedRadio").checked=document.getElementById(MC_ID+"FixedRateRadio").checked;
  document.getElementById(MC_ID+"NewRateVariableRadio").checked=document.getElementById(MC_ID+"VariableRateRadio").checked;
  document.getElementById(MC_ID+"NewRateYearsRadio").checked=document.getElementById(MC_ID+"RepayYearsRadio").checked;
  document.getElementById(MC_ID+"NewRateMonthsRadio").checked=document.getElementById(MC_ID+"RepayMonthsRadio").checked;
  __ShowDialog(document.getElementById("RateChangeDialog"));
}
function MC_HideRateChangeDlg()
{
  __HideDialog(document.getElementById("RateChangeDialog"));
}
function MC_AddNewRate()
{
  MC_HideRateChangeDlg();
  var newRate=document.getElementById(MC_ID+"NewInterestRateTextBox").value;
  var newRateType=(document.getElementById(MC_ID+"NewRateFixedRadio").checked?"1":"2");
  var effectiveAfter=document.getElementById(MC_ID+"EffectiveAfterTextBox").value;
  var effectiveType=(document.getElementById(MC_ID+"NewRateYearsRadio").checked?"1":"2");
  var totalMonths=effectiveAfter*(effectiveType=="1"?12:1);
  var loanTermInMonths=document.getElementById(MC_ID+"RepaymentPeriodTextBox").value*(document.getElementById(MC_ID+"RepayYearsRadio").checked?"12":"1");
  if(loanTermInMonths>=totalMonths){
    document.getElementById("AdditionalRates").style.display="block";
    var newRateEntry=document.createElement("span");
    newRateEntry.i_value=newRate+"|"+newRateType+"|"+effectiveAfter+"|"+effectiveType;
    newRateEntry.className="Row";
    var newRateDetails=document.createElement("span");
    newRateDetails.innerHTML=newRate+"% after "+effectiveAfter+" "+(effectiveType==1?"year":"month")+(effectiveAfter==1?"":"s");
    newRateEntry.appendChild(newRateDetails);
    var remLink=document.createElement("a");
    remLink.href="#";
    remLink.onclick=function MC_RemoveAdditionalRate(){MC_RemoveRateEntry(newRateEntry.i_value);return(false);};
    remLink.innerHTML="(remove)";
    newRateEntry.appendChild(remLink);
    var rateTable=document.getElementById("RateChangesSpan");
    var currRates=rateTable.childNodes;
    var pos=-1;
    var i=0;
    while(i<currRates.length&&pos==-1){
      var rateDtls=currRates[i].i_value.split("|");
      var months=rateDtls[2]*(rateDtls[3]=="1"?12:1);
      if(months==totalMonths){
        pos=-2;
      }
      else{
        if(months>totalMonths){
          pos=i;
        }
        else{
          i++;
        }
      }
    }
    switch(pos){
      case -2:
        rateTable.replaceChild(newRateEntry,currRates[i]);
        break;
      case -1:
        rateTable.appendChild(newRateEntry);
        break;
      default:
        rateTable.insertBefore(newRateEntry,currRates[i]);
        break;
    }
    document.getElementById(MC_ID+"ResponseMessage").innerHTML="Remember to click 'Calculate' to view updated projections";
    document.getElementById(MC_ID+"ResponseMessage").style.display="inline";
  }  
}
function MC_RemoveRateEntry(id)
{
  var rateTable=document.getElementById("RateChangesSpan");
  var currRates=rateTable.childNodes;
  var i=0;
  while(i<currRates.length){
    if(currRates[i].i_value==id){
      rateTable.removeChild(currRates[i]);
      i=currRates.length;
    }
    else{
      i++;
    }
  }
  if(rateTable.childNodes.length==0){
    document.getElementById("AdditionalRates").style.display="none";
  }
  document.getElementById(MC_ID+"ResponseMessage").innerHTML="Remember to click 'Calculate' to view updated projections";
  document.getElementById(MC_ID+"ResponseMessage").style.display="inline";
}
function MC_RemoveOutOfRangeRates()
{
  var totalMonths=document.getElementById(MC_ID+"RepaymentPeriodTextBox").value*(document.getElementById(MC_ID+"RepayYearsRadio").checked?12:1);
  var rateTable=document.getElementById("RateChangesSpan");
  var currRates=rateTable.childNodes;
  var i=currRates.length-1;
  while(i>=0){
    var rateDtls=currRates[i].i_value.split("|");
    var months=rateDtls[2]*(rateDtls[3]=="1"?12:1);
    if(totalMonths<=months){
      rateTable.removeChild(currRates[i]);
    }
    i--;
  }
  if(rateTable.childNodes.length==0){
    document.getElementById("AdditionalRates").style.display="none";
  }
}


/**************************************************************/
/*                       DIALOG FUNCTIONS                     */
/**************************************************************/
function MC_ShowCalculator()
{
  __ShowDialog(document.getElementById("MortgageCalculator"));
}
function MC_HideCalculator()
{
  __HideDialog(document.getElementById("MortgageCalculator"));
}


/**************************************************************/
/*                    CALCULATION FUNCTIONS                   */
/**************************************************************/
function MC_Calculate()
{
  __ChangeTab('SummaryTab','SummaryForm|ScheduleForm|ChartsForm','MortgageCalculatorTabs',null);
  document.getElementById("Projections").style.display="block";
  document.getElementById("ScheduleForm").innerHTML="Loading...";
  document.getElementById("ChartsForm").innerHTML="Loading...";
  document.getElementById(MC_ID+"ResponseMessage").style.display="none";
  MC_RemoveOutOfRangeRates();  
  MC_Mode=1;
  MC_Stage=1;
  MC_RequestCalculations();
}
function MC_GetSchedule()
{
  MC_Mode=1;
  MC_Stage=2;
  MC_RequestCalculations();
}
function MC_GetChart()
{
  MC_Mode=1;
  MC_Stage=3;
  MC_RequestCalculations();
}
function MC_RequestCalculations()
{
  var emailAddr=MC_Email;
  var inputEmailAddr=document.getElementById(MC_ID+"EmailAddressTextBox").value;
  if(MC_Mode==2){
    emailAddr=inputEmailAddr;
  }
  else{
    if(inputEmailAddr!=""){
      var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
      var regex = new RegExp(emailReg);
      if(regex.test(inputEmailAddr)){
        emailAddr=inputEmailAddr;
      }
    }
  }
  var reqData="<mortgages stage='"+MC_Stage+"' mode='"+MC_Mode+"'><guid>"+MC_GUID+"</guid><siteName>"+MC_Portal+"</siteName><emailType>1</emailType><emailAddress>"+emailAddr+"</emailAddress><mortgage>";
  reqData=reqData+"<amount>"+document.getElementById(MC_ID+"AmountBorrowedTextBox").value+"</amount>";
  reqData=reqData+"<rates>";
  reqData=reqData+"<entry>";
  reqData=reqData+"<rate>"+document.getElementById(MC_ID+"InterestRateTextBox").value+"</rate>";
  reqData=reqData+"<type>"+(document.getElementById(MC_ID+"FixedRateRadio").checked?"1":"2")+"</type>";
  reqData=reqData+"<effective>0</effective>";
  reqData=reqData+"<period>1</period>";
  reqData=reqData+"</entry>";
  if(document.getElementById("AdditionalRates").style.display=="block"){
    var rates=document.getElementById("RateChangesSpan").childNodes;
    var i=0;
    while(i<rates.length){        
      var rateDtls=rates[i].i_value.split("|");
      reqData=reqData+"<entry>";
      reqData=reqData+"<rate>"+rateDtls[0]+"</rate>";
      reqData=reqData+"<type>"+rateDtls[1]+"</type>";
      reqData=reqData+"<effective>"+rateDtls[2]+"</effective>";
      reqData=reqData+"<period>"+rateDtls[3]+"</period>";
      reqData=reqData+"</entry>";
      i++;
    }
  }
  reqData=reqData+"</rates>";
  reqData=reqData+"<term>"+document.getElementById(MC_ID+"RepaymentPeriodTextBox").value+"</term>";
  reqData=reqData+"<termType>"+(document.getElementById(MC_ID+"RepayYearsRadio").checked?"1":"2")+"</termType>";
  reqData=reqData+"<firstPayment>"+document.getElementById(MC_ID+"FirstRepaymentTextBox").value+"</firstPayment>";
  reqData=reqData+"</mortgage></mortgages>";
  __MakeRequest(MC_CALLBACKID,reqData,MC_GetCalculationsResponse,MC_ReqFailure);  
}
function MC_GetCalculationsResponse()
{
  if(MC_Mode==1)
  {
    switch(MC_Stage)
    {
      case 1:
        document.getElementById("SummaryForm").innerHTML=__NodeValue(__Resp,"calculation");
        document.getElementById("MortgageCalculator").setAttribute("positioning","");
        __WindowResize();
        document.getElementById("MortgageCalculator").setAttribute("positioning","IGNORE");
        break;
      case 2:
        document.getElementById("ScheduleForm").innerHTML=__NodeValue(__Resp,"calculation");
        break;
      case 3:
        document.getElementById("ChartsForm").innerHTML=__NodeValue(__Resp,"calculation");
        break;
    }
  }
  else
  {
    __ShowMessage("Success!","Your mortgage projections have been successfully e-mailed to you.",1,"Okay");
  }
}

function MC_ReqFailure()
{
  __ShowMessage("Error",__NodeValue(__Resp,"responseText"),0,"Okay");
}
