function isLeapYear(year) {
   if (year % 4 == 0) {
      if (year % 100 == 0) {
         return (year % 400 == 0);
      } else {
         return (true);
      }
   }
   return (false);
}

function daysInMonth(month, year) {
   switch (month) {
      case  0: return 31;  // january
      case  1:             // february
         if (isLeapYear(year)) {
            return 29;
         } else {
            return 28;
         }
      case  2: return 31;  // march
      case  3: return 30;  // april
      case  4: return 31;  // may
      case  5: return 30;  // june
      case  6: return 31;  // july
      case  7: return 31;  // august
      case  8: return 30;  // september
      case  9: return 31;  // october
      case 10: return 30;  // november
      case 11: return 31;  // december
   }
}

function DateAdd(datepart, number, date) {
   var d = new Date(date);
   switch (datepart) {
      // millisecond
      case "ms":
         return new Date(Date.parse(d) + (number));

      // second
      case "s":
      case "ss":
         return new Date(Date.parse(d) + (number*1000));

      // minute
      case "n":
      case "mi":
         return new Date(Date.parse(d) + (number*1000*60));

      // hour
      case "hh":
         return new Date(Date.parse(d) + (number*1000*60*60));

      // day
      case "d":
      case "dd":
         return new Date(Date.parse(d) + (number*1000*60*60*24));

      // week
      case "wk":
      case "ww":
         return new Date(Date.parse(d) + (number*1000*60*60*24*7));

      // month
      case "m":
      case "mm":
         var i = 0;
         var maxcurr = daysInMonth(d.getMonth(), d.getFullYear());
         var mm = (d.getMonth() + number) % 12;
         if (mm < 0) mm += 12;
         var yy = d.getFullYear() + Math.floor((number + d.getMonth()) / 12);
         var maxnext = daysInMonth(mm, yy);
         if (maxnext < d.getDate()) {
            i = (maxnext - d.getDate());
         }
         if (d.getDate() == maxcurr) {
            i = (maxnext - maxcurr);
         }
         return new Date(
            d.getFullYear(),
            d.getMonth()+number,
            d.getDate()+i,
            d.getHours(),
            d.getMinutes(),
            d.getSeconds());

      // quarter
      case "q":
      case "qq":
         var i = 0;
         var maxcurr = daysInMonth(d.getMonth(), d.getFullYear());
         var mm = (d.getMonth() + number*3) % 12;
         if (mm < 0) mm += 12;
         var yy = d.getFullYear() + Math.floor((number*3 + d.getMonth()) / 12);
         var maxnext = daysInMonth(mm, yy);
         if (maxnext < d.getDate()) {
            i = (maxnext - d.getDate());
         }
         if (d.getDate() == maxcurr) {
            i = (maxnext - maxcurr);
         }
         return new Date(
            d.getFullYear(),
            d.getMonth()+number*3,
            d.getDate()+i,
            d.getHours(),
            d.getMinutes(),
            d.getSeconds());

      // year
      case "yy":
      case "yyyy":
         var i = 0;
         if (d.getMonth() == 1) {
            if (d.getDate() == 29) {
               if (!isLeapYear(d.getFullYear() + number)) {
                  i = -1;
               }
            }
            if (d.getDate() == 28) {
               if (!isLeapYear(d.getFullYear())) {
                  if (isLeapYear(d.getFullYear() + number)) {
                     i = 1;
                  }
               }
            }
         }
         return new Date(
            d.getFullYear()+number,
            d.getMonth(),
            d.getDate()+i,
            d.getHours(),
            d.getMinutes(),
            d.getSeconds());
   }
}

function printDate(dateToPrint)
{
	
	var date = dateToPrint;
	var d  = date.getDate();
	var day = (d < 10) ? '0' + d : d;
	var m = date.getMonth() + 1;
	var month = (m < 10) ? '0' + m : m;
	var yy = date.getYear();
	var year = (yy < 1000) ? yy + 1900 : yy;
	
	return year+'/' + month + '/' +day;
}