var crumbs = document.cookie.split("; ");

function getCookie(name) {
   for (i=0; i<crumbs.length; i++) {
      nextcrumb = crumbs[i].split("=");
      if (nextcrumb[0]==name) {
         return unescape(nextcrumb[1]);
      }
   }
   return null;
}

function setPCookie(name, value) {
   var today = new Date();
   var permexpire = new Date(today.getTime()+100000*24*3600*1000);
   if (value!=null && value!="") {
      document.cookie = name+"="+escape(value)+"; expires="+permexpire.toGMTString();
   }
   crumbs = document.cookie.split("; ");
}

function setCookie(name, value,expires) {
   if (value!=null && value!="") {
      document.cookie = name+"="+escape(value)+((expires)?"; expires="+expiresx.toGMTString():"");
   }
   crumbs = document.cookie.split("; ");
}

function calcGoMonths(date,months) {
   var lnDay = date.getDate();
   if (lnDay>28) lnDay=28;
   var lnMonth = date.getMonth()+1;
   var lnYear = date.getFullYear();
   for (var ln=1; ln<months; ln++) {
      if (lnMonth==12) {
         lnMonth = 1;
         lnYear++;
      } else {
      	lnMonth++;
      }
   }
   var ldDate = calcMonthName(lnMonth)+" "+lnDay+", "+lnYear;
   date = new Date(ldDate);
   return date;
}

function calcMonthName(month) {
   if (month==1) return "January";
   if (month==2) return "February";
   if (month==3) return "March";
   if (month==4) return "April";
   if (month==5) return "May";
   if (month==6) return "June";
   if (month==7) return "July";
   if (month==8) return "August";
   if (month==9) return "September";
   if (month==10) return "October";
   if (month==11) return "November";
   if (month==12) return "December";
}

function calcDayName(day) {
   if (day==0) return "Sunday";
   if (day==1) return "Monday";
   if (day==2) return "Tuesday";
   if (day==3) return "Wednesday";
   if (day==4) return "Thursday";
   if (day==5) return "Friday";
   if (day==6) return "Saturday";
}

function formatRound(number,precision) {
   if (precision==null) precision = 2;
   if (precision==0) {
      return Math.round(number);
   }
   lnFactor = Math.floor(Math.pow(10,precision));
   if (precision<0) {
      return  Math.round(number/lnFactor)*lnFactor;
   }
   
   return Math.round(number*lnFactor)/lnFactor;
}

function calcPayment (amount,rate,time,balloon) {
   if (rate<=0) {
      if (time<=0) {
      	return amount;
      } else {
      	return amount/time;
      }
   }
   if (balloon==null) balloon = 0;
   
   var ln = Math.pow(1+rate,time);
   return (amount-balloon/ln)/((1-(1/ln))/rate);
}
   
function formatNumber(number,precision,commas) {
   if (precision==null) precision = 2;
   number = formatRound(number,precision);
   var llSign = number<0;
   number = Math.abs(number);
   var ln = precision+1;
   var lc = "";
   number = Math.floor(number*Math.pow(10,precision));
   while (((ln--)>0) || (number>0)) {
      lc = (number%10)+lc;
      number = Math.floor(number/10);
      if (ln==1) lc = "."+lc;
   }
   if (llSign) lc = "-"+lc;
   var lc2 = "";
   if (commas) {
      var lc3 = lc;
      ln = lc.length;
      if (lc.indexOf(".")!=-1) {
         lc2 = lc.substring(lc.indexOf("."),ln);
         lc3 = lc.substring(0,lc.indexOf("."));
      }
      ln = lc3.length;
      var lnCount = 0;
      while (ln>0) {
         lnCount++;
         if (lnCount==4) {
            lc2 = ","+lc2;
            lnCount = 1;
         } 
         lc2 = lc3.substring(ln-1,ln)+lc2;
         ln--;
      }
   } else {
      lc2 = lc;
   }
   return lc2;
}
function checkNumber(number, msg, min, max) {
   msg = msg+" field has invalid numeric data: "+number.value;
   var str = number.value;
   if (str==null || str=="" || !str) return true;
   if (str.substring(1,1)=="$") {
      str = str.substring(2);
   }
   if (!validNumber(str)) {
      alert(msg);
      return false;
   }
   var num = parseFloat(str);
   if (min!=null && max!=null) {
      if (num<min || num>max) {
         alert(msg+" not in range ["+min+".."+max+"]");
         return false;
      }
   }
   number.value = str;
   return true;
}

function validNumber(number) {
   var checknum = parseFloat(number);
   if (isNaN(checknum)) return false;
   return true;
}

function calcFV(startamt, addamt, rate, periodsadded, periodsheld) {
   var lnResult = startamt;
   for (var ln=1; ln<periodsadded; ln++) {
      lnResult = lnResult+(lnResult*rate)+addamt;
   }
   if (periodsheld>0) {
      for (var ln=1; ln<periodsheld; ln++) {
         lnResult = lnResult+(lnResult*rate);
      }
   }
   return lnResult;
}

function padLeft(tcString,tnLength,tcChar) {
   if (tcChar==null) tcChar = " ";
   if (tcString.length>tnLength) {
      return "~"+tcString.substring(tcString.length-(tnLength-1),tcString.length);
   } else {
      if (tcString.length==tnLength) {
         return tcString;
      } else {
         var lnx = tnLength-tcString.length;
         for (var ln=0; ln<lnx; ln++) {
            tcString = tcChar+tcString;
         }  
         return tcString;
      }  
   }  
}  
function padRight(tcString,tnLength,tcChar) {
   if (tcChar==null) tcChar = " ";
   if (tcString.length>tnLength) {
      return tcString.substring(0,tnLength-1)+"~";
   } else {
      if (tcString.length==tnLength) {
         return tcString;
      } else {
         var lnx = tnLength-tcString.length;
         for (var ln=0; ln<lnx; ln++) {
            tcString = tcString+tcChar;
         }  
         return tcString;
      }  
   }  
}  
function mathRemainder(tnValue,tnDivisor) {
   if (tnValue==null) return 0;
   if (tnDivisor==null) return 0;
   var lnTimes = Math.floor(tnValue/tnDivisor);
   return tnValue-(lnTimes*tnDivisor);
}  // function

