/******************************************************************************************************
functions to validate date
******************************************************************************************************/
var monthNames=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var dayNames=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
Date.isLeapYear=function(year) { if (year%4==0&&((year%100!=0)||(year%400==0))) return true; else return false; }
Date.daysInYear=function(year) { if (Date.isLeapYear(year)) return 366; else return 365;}
var Day=1000*60*60*24;

// DateDiff equivalent
function dateDiff(dFrom,dTo) {
  if ((isDate(dFrom,'d-MMM-y')==true)&&(isDate(dTo,'d-MMM-y')==true)) {
    // Return number of whole days from Date object dFrom
    // to Date object dTo,midday to roughly midday.
    // WARNING!!!! VALIDATE THE DATE FIRST!!

    //split out the date-entered in Day-MonthName-Year
    Months=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
    var Delimiter='-';
    if (dFrom.indexOf('/')>-1) { Delimiter='/' }
    var dFromArr=dFrom.split(Delimiter);
    var dToArr=dTo.split(Delimiter);
    dFromNum=dFromArr[1];     // Month
    for (i=0;i<12;i++) {
      if (Months[i].substr(0,3).toUpperCase()==dFromNum.substr(0,3).toUpperCase()) { dFromNum=i; i=12; }
    }
    dToNum=dToArr[1];     // Month
    for (i=0;i<12;i++) {
      if (Months[i].substr(0,3).toUpperCase()==dToNum.substr(0,3).toUpperCase()) { dToNum=i; i=12; }
    }
    var dFromYear=parseInt(dFromArr[2],10);
    if(dFromYear.length==1) { dFromYear='200'+dFromYear }
    if(dFromYear.length==2) { dFromYear='20'+dFromYear }
    var dToYear=parseInt(dToArr[2],10);
    if(dToYear.length==1) { dToYear='200'+dToYear }
    if(dToYear.length==2) { dToYear='20'+dToYear }
    var df=new Date(dFromYear,dFromNum,parseInt(dFromArr[0],10));
    var dt=new Date(dToYear,dToNum,parseInt(dToArr[0],10));
    return Math.floor(dt.valueOf()/(24*60*60*1000)-df.valueOf()/(24*60*60*1000) );
  } else {
    return -1;
  }
}

// DateAdd equivalent
function dateAdd(dFrom,Add) {
  if (isDate(dFrom,'d-MMM-y')==true) {

	//split out the date-entered in Day-MonthName-Year
    Months=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
    var Delimiter='-';
    if (dFrom.indexOf('/')>-1) { Delimiter='/' }
    var dFromArr=dFrom.split(Delimiter);
    dFromDate=parseInt(dFromArr[0],10);
    dFromMonth=dFromArr[1];
    dFromYear=dFromArr[2];
    for (i=0;i<12;i++) {
      if (Months[i].substr(0,3).toUpperCase()==dFromMonth.substr(0,3).toUpperCase()) { dFromMonth=i; i=12; }
    }
    if(dFromYear.length==1) { dFromYear='200'+dFromYear }
    if(dFromYear.length==2) { dFromYear='20'+dFromYear }
    var tmpDate=new Date(dFromYear,dFromMonth,dFromDate);
    var retDate=new Date(Date.parse(tmpDate)+(Add*(24*60*60*1000)))
    //alert('tmpDate:'+tmpDate);
    //alert('retDate:'+retDate);
    return formatDate(retDate,'d-NNN-yy')
  }
}

// DatePart equivalent
function datePart(date,Part) {
  var y=date.getYear()+'';
  var M=date.getMonth()+1;
  var d=date.getDate();
  var E=date.getDay();
  var H=date.getHours();
  var m=date.getMinutes();
  var s=date.getSeconds();
  var result;

  switch (Part.toLowerCase()) {
    case 'y':
    case 'yy':
    case 'year':
      result=y;
      break;
    case 'm':
    case 'month':
      result=M;
      break;
    case 'd':
    case 'day':
      result=d;
      break;
    default:
      result=date;
      break;
  }
  return result;
}

// Returns the last day of a given month
function lastDayOfMonth(date) {
  var m=new Number(date.getMonth());     // Starts from 0
  var y=new Number(date.getFullYear());
  if (Date.isLeapYear(y)) {
    var Days=new Array(31,29,31,30,31,30,31,31,30,31,30,31);
  } else {
    var Days=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  }
  return Days[m];
}

// Returns number for a given text month name
function monthNum(Month) {
  var Months=new Array('','January','February','March','April','May','June','July','August','September','October','November','December');
  for (i=0;i<Months.length;i++) {
    if (Month.toUpperCase()==Months[i].substr(0,Month.length).toUpperCase()) {
      break;
	}
  }
  return i;
}