var strUserAgent = navigator.userAgent.toLowerCase();
//document.onselectstart=new Function ("return false");

function blockError(){
   return true;
}
window.onerror = blockError;

function clickIE() {
   if (document.all) {
      return false;
   }
}
function clickNS(e) {
   if (document.layers||(document.getElementById&&!document.all)) {
      if (e.which==2||e.which==3) {
         return false;
      }
   }
}
/*if (document.layers) {
   document.captureEvents(Event.MOUSEDOWN);
   document.onmousedown=clickNS;
}
else {
   document.onmouseup=clickNS;
   document.oncontextmenu=clickIE;
}*/

document.oncontextmenu=new Function("return false")

function disableselect(e){
   return false
}

function reEnable(){
   return true
}

//document.onselectstart=new Function ("return false")

/*if (window.sidebar){
   document.onmousedown=disableselect
   document.onclick=reEnable
}*/

var isIE = strUserAgent.indexOf("msie") > -1;
function getObject(objectId) {
   var obj = false;
   if(document.getElementById) {
      obj=document.getElementById(objectId);
   } else if (document.all) {
      obj=document.all(objectId);
   } else if (document.layers) {
      obj = document.layers[objectId];
   } else {
      alert("Browser incompatibility: Please contact techhelp@lawdepot.com for assistance.\n\nWe apologize for the inconvenience.");
   }
   return obj;
}
function onlyNumeric(event) {
   if(isIE)
      iKeyCode = event.keyCode;
   else
      iKeyCode = event.which;
   if(
         (iKeyCode >= 32 && iKeyCode <= 43) ||
         (iKeyCode == 45 || iKeyCode == 47) ||
         iKeyCode >= 58
     )
      return false;
   return true;

}
function isLeapYear(year) {
   return new Date(year,2-1,29).getDate()==29;
}
function setDays() {
   var month = getObject('month').value;
   var year = getObject('year').value;
   var days = 31;
   if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
      days = 31;
   else if(month == 4 || month == 6 || month == 9 || month == 11)
      days = 30;
   else if(isLeapYear(year))
      days = 29;
   else
      days = 28;
   getObject('day').options.length = days;
   for(var i=1;i<=days;i++)
      getObject('day').options[i-1] = new Option(i,i);
}
function makeDateString(d,m,y) {
   // Creates a string appropriate for the Date() constructor
   var months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec");
   return d + " " + months[m-1] + ", " + y;
}
function printDate(date) {
   var weekdays = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
   var months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec");
   var year = parseFloat(date.getYear());
   if(year<1900) year+=1900;
   return weekdays[date.getDay()] + "<br />" + months[date.getMonth()] + " " + date.getDate() + getSuffix(date.getDate()) + "<br />" + year;
}
function getSuffix(n) {
   if(n == 1 || n == 21 || n == 31) return "st";
   else if(n == 2 || n == 22) return "nd";
   else if(n == 3 || n == 23) return "rd";
   else return "th";
}
function round(n) {
   // Rounds the number 'n' to two decimal places
   var result = Math.round(n * 100) / 100;
   var str = result.toString();
   var index = str.indexOf('.');
   if(index == -1)
      return str + ".00";
   else {
      var test = str.substring(index);
      if(test.length == 2)
         return str + "0";
      else
         return result;
   }
}
function calculatePayments() {
   var p = getObject('amount').value; // p = Principle
   var term = escape(getObject('term').value);
   var i = getObject('rate').value; // r = rate

   var termType = getObject('termType').value;

   var numDays = new Array(12);
   numDays[0] = 31; // Jan
   numDays[1] = 28; // Feb
   numDays[2] = 31; // Mar
   numDays[3] = 30; // Apr
   numDays[4] = 31; // May
   numDays[5] = 30; // June
   numDays[6] = 31; // July
   numDays[7] = 31; // Aug
   numDays[8] = 30; // Sept
   numDays[9] = 31; // Oct
   numDays[10]= 30; // Nov
   numDays[11]= 31; // Dec

   var weekDays = new Array(7);
   weekDays[0] = "Sun";
   weekDays[1] = "Mon";
   weekDays[2] = "Tue";
   weekDays[3] = "Wed";
   weekDays[4] = "Thu";
   weekDays[5] = "Fri";
   weekDays[6] = "Sat";

   var month = getObject('month').value - 1;
   var day = getObject('day').value;
   var year = getObject('year').value;

   var dayCount = 0;
   for(j=0;j<month;j++)
      dayCount += numDays[j];
   dayCount += parseInt(day);
   var week = Math.round(dayCount / 7);

   var compounding = getObject('compounding').value;

   if(termType == "week")
      i=i/52.0;
   else if(termType == "month")
      i=i/12.0;

   var mInterest=1+(i/100.0);
   
   // Calculate payment amounts
   var mPayments = 0;
   if(getObject('paymentType').value == "Specific Amount")
      mPayments = getObject('payments').value;
   else if(getObject('paymentType').value == "Lumpsum Payment")
      mPayments = 0;
   else if(getObject('paymentType').value == "Interest Only")
      mPayments = (mInterest-1)*p;
   else
      var mPayments = ((mInterest-1) * p) / (1 - Math.pow(mInterest,-1.0*term));


   getObject('payments').value = round(Math.ceil(mPayments*100)/100);

}

function calculateSchedule() {
   calculatePayments();
   
   var p = getObject('amount').value; // p = Principle
   var term = escape(getObject('term').value);
   var i = getObject('rate').value; // r = rate

   var termType = getObject('termType').value;

   var numDays = new Array(12);
   numDays[0] = 31; // Jan
   numDays[1] = 28; // Feb
   numDays[2] = 31; // Mar
   numDays[3] = 30; // Apr
   numDays[4] = 31; // May
   numDays[5] = 30; // June
   numDays[6] = 31; // July
   numDays[7] = 31; // Aug
   numDays[8] = 30; // Sept
   numDays[9] = 31; // Oct
   numDays[10]= 30; // Nov
   numDays[11]= 31; // Dec

   var weekDays = new Array(7);
   weekDays[0] = "Sun";
   weekDays[1] = "Mon";
   weekDays[2] = "Tue";
   weekDays[3] = "Wed";
   weekDays[4] = "Thu";
   weekDays[5] = "Fri";
   weekDays[6] = "Sat";

   var month = getObject('month').value - 1;
   var day = getObject('day').value;
   var year = getObject('year').value;

   var dayCount = 0;
   for(j=0;j<month;j++)
      dayCount += numDays[j];
   dayCount += parseInt(day);
   var week = Math.round(dayCount / 7);

   var compounding = getObject('compounding').value;

   // Calculate monthly interest rate
   if(termType == "week")
      i=i/52.0;
   else if(termType == "month")
      i=i/12.0;

   var mInterest=1+(i/100.0);
   
   var payments = getObject('payments').value;


   if(payments.length > 0 && !isNaN(parseFloat(payments)) && parseFloat(payments) > 0) {
      // Make sure that
         // a) a string was entered,
         // b) The string parses into a float (e.g. '10' is acceptable; 'foo' is not), and
         // c) The parsed value is greater than zero

         payments = parseFloat(payments);

   } else {

      // Calculate monthly payments
      var mPayments = 0;
      if(getObject('paymentType').value == "Specific Amount")
         mPayments = getObject('payments').value;
      else if(getObject('paymentType').value == "Lumpsum Payment")
         mPayments = 0;
      else if(getObject('paymentType').value == "Interest Only")
         mPayments = (mInterest-1)*p;
      else
         var mPayments = ((mInterest-1) * p) / (1 - Math.pow(mInterest,-1.0*term));

      payments = Math.ceil(mPayments*100)/100;
      getObject('payments').value = round(payments);
   }
   mPayments = payments;

   var owing = parseFloat(p);
   var payments = new Array();
   var interest = new Array();
   var principle = new Array();
   var owingArray = new Array();
   var tInterest = new Array();
   var paymentDate = new Date();
   var dates = new Array();
   var earlyQuit = false; // set to 'true' if the balance reaches zero before reaching the end of the term

   var months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec");
//      var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");

   var thisDay = parseFloat(getObject('day').value);
   var thisMonth = parseFloat(getObject('month').value);
   var thisYear = parseFloat(getObject('year').value);

   var temp = makeDateString(thisDay,thisMonth,thisYear);

   if(getObject('paymentType').value == "Specific Amount") {
      for(i=1;i<=getObject('term').value && !earlyQuit;i++) {
         payments[i-1] = mPayments;
         interest[i-1] = owing * (mInterest - 1.0);

         if(owing + interest[i-1] - payments[i-1] < 0.00) {
            payments[i-1] = owing + interest[i-1];
            earlyQuit = true;
         }
         principle[i-1] = payments[i-1] - interest[i-1];
         owing = owing + interest[i-1] - payments[i-1];

         owingArray[i-1] = owing;
         if(i>1)
            tInterest[i-1] = tInterest[i-2] + interest[i-1];
         else
            tInterest[i-1] = interest[i-1];
      }
   } else if(getObject('paymentType').value == "Lumpsum Payment") {
      for(i=1;i<=getObject('term').value;i++) {
         if(i == getObject('term').value) {
            interest[i-1] = owing * (mInterest - 1.0);
            payments[i-1] = owing + interest[i-1];
            //principle[i-1] = payments[i-1] - interest[i-1];
            owing = owing + interest[i-1] - payments[i-1];
            principle[i-1] = owing;
         } else {
            payments[i-1] = 0;
            interest[i-1] = owing * (mInterest - 1.0);
            //principle[i-1] = payments[i-1] - interest[i-1];
            principle[i-1] = 0;
            owing = owing + interest[i-1] - payments[i-1];
         }

         owingArray[i-1] = owing;
         if(i>1)
            tInterest[i-1] = tInterest[i-2] + interest[i-1];
         else
            tInterest[i-1] = interest[i-1];
      }
   } else if(getObject('paymentType').value == "Interest Only") {
      for(i=1;i<=getObject('term').value;i++) {
         payments[i-1] = owing * (mInterest - 1.0);
         interest[i-1] = owing * (mInterest - 1.0);
         principle[i-1] = payments[i-1] - interest[i-1];
         owing = owing + interest[i-1] - payments[i-1];

         owingArray[i-1] = owing;
         if(i>1)
            tInterest[i-1] = tInterest[i-2] + interest[i-1];
         else
            tInterest[i-1] = interest[i-1];
      }
   } else {
      for(i=1;owing>0 && i <= term;i++) {
         if(mPayments <= owing) {
            payments[i-1] = mPayments;
            interest[i-1] = owing * (mInterest - 1.0);
            principle[i-1] = payments[i-1] - interest[i-1];
            owing = owing + interest[i-1] - payments[i-1];
         } else {
            principle[i-1] = owing;
            interest[i-1] = owing * (mInterest - 1.0);
            payments[i-1] = principle[i-1] + interest[i-1];
            owing = 0;
         }
         owingArray[i-1] = owing;
         if(i>1)
            tInterest[i-1] = tInterest[i-2] + interest[i-1];
         else
            tInterest[i-1] = interest[i-1];

         source = source + "<tr><td>"+months[month]+ "<br />" + year + "</td><td valign='top'>"+round(owing)+"</td><td valign='top'>"+round(payments[i-1])+"</td><td valign='top'>"+round(principle[i-1])+"</td><td valign='top'>"+round(interest[i-1])+"</td></tr>\n";
      }
   }

   var source = "<table cellpadding='0' cellspacing='0' style='font-size:10px'>";
   var s1,s2,s3,s4,s5,s6;
   var index = 0;
   if(termType == "week") {
      for(i=0;i*52 < payments.length;i++) {
         s1="";s2="";s3="";s4="";s5="";s6="";
         s1 = "<tr><td style='font-weight:bold;text-align:right;background-color:#ddd'>Week<br />Year</td>";
         s2 = "<tr><td style='font-weight:bold;text-align:right'>Payment&nbsp;("+currencySign+")</td>";
         s3 = "<tr><td style='font-weight:bold;text-align:right'>Principal&nbsp;Paid&nbsp;("+currencySign+")</td>";
         s4 = "<tr><td style='font-weight:bold;text-align:right'>Interest&nbsp;Paid&nbsp;("+currencySign+")</td>";
         s5 = "<tr><td style='font-weight:bold;text-align:right'>Total&nbsp;Interest&nbsp;("+currencySign+")</td>";
         s6 = "<tr><td style='font-weight:bold;text-align:right'>Balance&nbsp;("+currencySign+")</td>";
         for(j=0;j<52&&j+(i*52)<payments.length;j++) {
            week++;
            if(week > 52) {
               week = 1;
               year++;
            }
            thisDay += 7;
            if(thisDay > numDays[thisMonth-1]) {
               if(thisMonth == 2 && thisDay == 29 && isLeapYear(thisYear))
                  ;
               else {
                  thisDay -= numDays[thisMonth-1];
                  if(thisMonth == 2 && isLeapYear(thisYear))
                     thisDay--;
                  thisMonth++;
               }
            }
            if(thisMonth > 12) {
               thisMonth = 1;
               thisYear++;
            }
            var thisTerm = new Date(makeDateString(thisDay,thisMonth,thisYear));
            //s1 = s1 + "<td style='background-color:#ddd'>&nbsp;&nbsp;"+week+"&nbsp;&nbsp;<br />&nbsp;&nbsp;"+year+"&nbsp;&nbsp;</td>";
            s1 = s1 + "<td style='background-color:#ddd;padding-left:0.5em;padding-right:0.5em'>"+printDate(thisTerm)+"</td>";
            s2 = s2 + "<td>&nbsp;&nbsp;"+round(payments[index])+"&nbsp;&nbsp;</td>";
            s3 = s3 + "<td>&nbsp;&nbsp;"+round(principle[index])+"&nbsp;&nbsp;</td>";
            s4 = s4 + "<td>&nbsp;&nbsp;"+round(interest[index])+"&nbsp;&nbsp;</td>";
            s5 = s5 + "<td>&nbsp;&nbsp;"+round(tInterest[index])+"&nbsp;&nbsp;</td>";
            s6 = s6 + "<td>&nbsp;&nbsp;"+round(owingArray[index])+"&nbsp;&nbsp;</td>";
            index++;
            if(j == 12 || j == 25 || j == 38) {
               s1 = s1 + "</tr>";
               s2 = s2 + "</tr>";
               s3 = s3 + "</tr>";
               s4 = s4 + "</tr>";
               s5 = s5 + "</tr>";
               s6 = s6 + "</tr>";
               source = source + s1 + s2 + s3 + s4 + s5 + s6 + "<tr><td colspan='13'>&nbsp;<br />&nbsp;</td></tr>";

               s1 = "<tr><td style='font-weight:bold;text-align:right;background-color:#ddd'>Week<br />Year</td>";
               s2 = "<tr><td style='font-weight:bold;text-align:right'>Payment&nbsp;("+currencySign+")</td>";
               s3 = "<tr><td style='font-weight:bold;text-align:right'>Principal&nbsp;Paid&nbsp;("+currencySign+")</td>";
               s4 = "<tr><td style='font-weight:bold;text-align:right'>Interest&nbsp;Paid&nbsp;("+currencySign+")</td>";
               s5 = "<tr><td style='font-weight:bold;text-align:right'>Total&nbsp;Interest&nbsp;("+currencySign+")</td>";
               s6 = "<tr><td style='font-weight:bold;text-align:right'>Balance&nbsp;("+currencySign+")</td>";
            }
         }
         s1 = s1 + "</tr>";
         s2 = s2 + "</tr>";
         s3 = s3 + "</tr>";
         s4 = s4 + "</tr>";
         s5 = s5 + "</tr>";
         s6 = s6 + "</tr>";
         source = source + s1 + s2 + s3 + s4 + s5 + s6 + "<tr><td colspan='13'>&nbsp;<br />&nbsp;</td></tr>";
      }
   } else if(termType == "month") {
      for(i=0;i*12 < payments.length;i++) {
         s1="";s2="";s3="";s4="";s5="";s6="";
         s1 = "<tr><td style='font-weight:bold;text-align:right;background-color:#ddd'>Month<br />Year</td>";
         s2 = "<tr><td style='font-weight:bold;text-align:right'>Payment&nbsp;("+currencySign+")</td>";
         s3 = "<tr><td style='font-weight:bold;text-align:right'>Principal&nbsp;Paid&nbsp;("+currencySign+")</td>";
         s4 = "<tr><td style='font-weight:bold;text-align:right'>Interest&nbsp;Paid&nbsp;("+currencySign+")</td>";
         s5 = "<tr><td style='font-weight:bold;text-align:right'>Total&nbsp;Interest&nbsp;("+currencySign+")</td>";
         s6 = "<tr><td style='font-weight:bold;text-align:right'>Balance&nbsp;("+currencySign+")</td>";
         for(j=0;j<12&&j+(i*12)<payments.length;j++) {
            month++;
            if(month >= 12) {
               month = 0;
               year++;
            }
            thisMonth += 1;
            if(thisMonth > 12) {
               thisMonth = 1;
               thisYear++;
            }
            var thisTerm = new Date(makeDateString(thisDay,thisMonth,thisYear));
            //s1 = s1 + "<td style='background-color:#ddd'>&nbsp;&nbsp;"+months[month]+"&nbsp;&nbsp;<br />&nbsp;&nbsp;"+year+"&nbsp;&nbsp;</td>";
            s1 = s1 + "<td style='background-color:#ddd;padding-left:0.5em;padding-right:0.5em'>"+printDate(thisTerm)+"</td>";
            s2 = s2 + "<td>&nbsp;&nbsp;"+round(payments[index])+"&nbsp;&nbsp;</td>";
            s3 = s3 + "<td>&nbsp;&nbsp;"+round(principle[index])+"&nbsp;&nbsp;</td>";
            s4 = s4 + "<td>&nbsp;&nbsp;"+round(interest[index])+"&nbsp;&nbsp;</td>";
            s5 = s5 + "<td>&nbsp;&nbsp;"+round(tInterest[index])+"&nbsp;&nbsp;</td>";
            s6 = s6 + "<td>&nbsp;&nbsp;"+round(owingArray[index])+"&nbsp;&nbsp;</td>";
            index++;
         }
         s1 = s1 + "</tr>";
         s2 = s2 + "</tr>";
         s3 = s3 + "</tr>";
         s4 = s4 + "</tr>";
         s5 = s5 + "</tr>";
         s6 = s6 + "</tr>";
         source = source + s1 + s2 + s3 + s4 + s5 + s6 + "<tr><td colspan='13'>&nbsp;<br />&nbsp;</td></tr>";
      }
   } else {
      for(i=0;i < payments.length;i++) {
         s1="";s2="";s3="";s4="";s5="";s6="";
         s1 = "<tr><td style='font-weight:bold;text-align:right;background-color:#ddd'>Month<br />Year</td>";
         s2 = "<tr><td style='font-weight:bold;text-align:right'>Payment&nbsp;("+currencySign+")</td>";
         s3 = "<tr><td style='font-weight:bold;text-align:right'>Principal&nbsp;Paid&nbsp;("+currencySign+")</td>";
         s4 = "<tr><td style='font-weight:bold;text-align:right'>Interest&nbsp;Paid&nbsp;("+currencySign+")</td>";
         s5 = "<tr><td style='font-weight:bold;text-align:right'>Total&nbsp;Interest&nbsp;("+currencySign+")</td>";
         s6 = "<tr><td style='font-weight:bold;text-align:right'>Balance&nbsp;("+currencySign+")</td>";
         year++;
         thisYear++;
         var thisTerm = new Date(makeDateString(thisDay,thisMonth,thisYear));
            //s1 = s1 + "<td style='background-color:#ddd'>&nbsp;&nbsp;"+months[month]+"&nbsp;&nbsp;<br />&nbsp;&nbsp;"+year+"&nbsp;&nbsp;</td>";
            s1 = s1 + "<td style='background-color:#ddd;padding-left:0.5em;padding-right:0.5em'>"+printDate(thisTerm)+"</td>";
            s2 = s2 + "<td>&nbsp;&nbsp;"+round(payments[index])+"&nbsp;&nbsp;</td>";
            s3 = s3 + "<td>&nbsp;&nbsp;"+round(principle[index])+"&nbsp;&nbsp;</td>";
            s4 = s4 + "<td>&nbsp;&nbsp;"+round(interest[index])+"&nbsp;&nbsp;</td>";
            s5 = s5 + "<td>&nbsp;&nbsp;"+round(tInterest[index])+"&nbsp;&nbsp;</td>";
            s6 = s6 + "<td>&nbsp;&nbsp;"+round(owingArray[index])+"&nbsp;&nbsp;</td>";
            index++;
         s1 = s1 + "</tr>";
         s2 = s2 + "</tr>";
         s3 = s3 + "</tr>";
         s4 = s4 + "</tr>";
         s5 = s5 + "</tr>";
         s6 = s6 + "</tr>";
         source = source + s1 + s2 + s3 + s4 + s5 + s6 + "<tr><td colspan='13'>&nbsp;<br />&nbsp;</td></tr>";
      }
   }
   source = source + "</table>";

   getObject('schedule').innerHTML = source;
}


function isNumber(inputVal) {
  oneDecimal = false
  inputStr = inputVal.toString()
  for (var i=0; i<inputStr.length; i++) {
    var oneChar =inputStr.charAt(i)
    if (oneChar == "." && !oneDecimal) {
      oneDecimal = true
      continue
    }
    if (oneChar < "0" || oneChar > "9")  {
      if (oneChar != ",") {
        alert("Please make sure entries are numbers.")
        return false
      }
    }
  }
  return true
}

function loadFunc(principal,term,termType,interest,compounding,startDay,startMonth,startYear,paymentType,payments) {
   //alert('1');
   /*alert(principal);*/
   if (isNumber(principal))
      getObject('amount').value = escape(principal);
   
   if(paymentType == "Specific Amount")
      getObject('paymentType').selectedIndex = 0;
   else if(paymentType == "Lumpsum Payment")
      getObject('paymentType').selectedIndex = 1;
   else if(paymentType == "Interest Only")
      getObject('paymentType').selectedIndex = 2;
   else
      getObject('paymentType').selectedIndex = 3;

   if (isNumber(term))
      getObject('term').value = escape(term);

   if (isNumber(interest))
      getObject('rate').value = escape(interest);

   if(compounding == "monthly")
      getObject('compounding').selectedIndex = 0;
   else if(compounding == "semiannual")
      getObject('compounding').selectedIndex = 1;
   else
      getObject('compounding').selectedIndex = 2;

   getObject('month').selectedIndex = startMonth - 1;
   getObject('day').selectedIndex = startDay - 1;
   for(var i=0;i<getObject('year').length;i++) {
      if(getObject('year').options[i].value == startYear) {
         getObject('year').selectedIndex = i;
         break;
      }
   }
   if (isNumber(payments))
   getObject('payments').value = escape(payments);


   setDays();
   disabledPaymentBox();

   getObject('compoundingRow').style.display="none";

   //getObject('termTypeText').innerHTML = getObject('termType').value;
    //        alert('2');

}
function disabledPaymentBox() {
   // This function has, ironically, been disabled.
   //getObject('payments').disabled = getObject('paymentType').value != 'Specific Amount';
   getObject('payments').disabled = false;
}
