//<script language='javascript' src='sch_date.js'></script>
//isDate(dateStr,T)//T=mm for mm-dd-yyyy T=dd for dd-mm-yyyy
//dateDiff(d1String,d2String) both in dd-mm-yyyy for mat
//formatDate() - alert(dateFormat(new Date() , "!yyyy !dd !mmm"))
//getDaysInMonth(aDate)

// ******************************************************************
// This function accepts a string variable and verifies if it is a
// proper date or not. It validates format matching either
// mm-dd-yyyy or mm/dd/yyyy. Then it checks to make sure the month
// has the proper number of days, based on which month it is.

// The function returns true if a valid date, false if not.
// ******************************************************************
function dateDiff(d1,d2) {
   diff=new Date();
   if (!isDate(d1,'dd')||!isDate(d2,'dd')){
      alert ("Incorrect Date Format");
      return(false);
   }
//   alert (d1+" "+d2);
   matchArray1 = d1.split(/\/|-/);
   Year1 = matchArray1[2];
   Month1 = matchArray1[1]-1;
   Day1 = matchArray1[0];
   matchArray2 = d2.split(/\/|-/);
   Year2 = matchArray2[2];
   Month2 = matchArray2[1]-1;
   Day2 = matchArray2[0];
   date1 = new Date(Year1,Month1,Day1);
   date2 = new Date(Year2,Month2,Day2);
   //alert (Year1+"-"+Month1+"-"+Day1+" "+Year2+"-"+Month2+"-"+Day2);
   //alert(formatDate(date1,"!dd-!MM-!yyyy"));
   //alert(formatDate(date2,"!dd-!MM-!yyyy"));
// diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
   diff.setTime((date1.getTime() - date2.getTime()));
   timediff = diff.getTime();
   days = Math.floor(timediff / (1000 * 60 * 60 * 24));
   timediff -= days * (1000 * 60 * 60 * 24);
   return days;
}

function isDate(dateStr,T) {
    //T=mm for mm-dd-yyyy T=dd for dd-mm-yyyy
     var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?

    if (matchArray == null) {
        alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
        return false;
    }

    if(T=="mm"){
     month = matchArray[1]; // parse date into variables
     day = matchArray[3];
     year = matchArray[5];
    }else{ 
     month = matchArray[3]; // parse date into variables
     day = matchArray[1];
     year = matchArray[5];
    }

    if (month < 1 || month > 12) { // check month range
        alert("Month must be between 1 and 12.");
        return false;
    }

    if (day < 1 || day > 31) {
        alert("Day must be between 1 and 31.");
        return false;
    }

    if ((month==4 || month==6 || month==9 || month==11) && day==31) {
        alert("Month "+month+" doesn't have 31 days!")
        return false;
    }

    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap)) {
            alert("February " + year + " doesn't have " + day + " days!");
            return false;
        }
    }
    return true; // date is valid
}



function getDaysInMonth(aDate){
   // returns the last day of a given month
    var m = new Number(aDate.getMonth());
    var y = new Number(aDate.getYear());
    
    var tmpDate = new Date(y, m, 28);
    var checkMonth = tmpDate.getMonth();
    var lastDay = 27;
    
    while(lastDay <= 31){
        temp = tmpDate.setDate(lastDay + 1);
        if(checkMonth != tmpDate.getMonth())
            break;
        lastDay++
    }
    return lastDay;
}


function formatDate(aDate, displayPat){
    /********************************************************
    *   Valid Masks:
    *   !mmmm = Long month (eg. January)
    *   !mmm = Short month (eg. Jan)
    *   !mm = Numeric date (eg. 07)
    *   !m = Numeric date (eg. 7)
    *   !dddd = Long day (eg. Monday)
    *   !ddd = Short day (eg. Mon)
    *   !dd = Numeric day (eg. 07)
    *   !d = Numeric day (eg. 7)
    *   !yyyy = Year (eg. 1999)
    *   !yy = Year (eg. 99)
   ********************************************************/

    intMonth = aDate.getMonth();
    intDate = aDate.getDate();
    intDay = aDate.getDay();
    intYear = aDate.getFullYear();

    var months_long = new Array('January','February','March','April','May','June','July','August','September','October','November','December')
    var months_short = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')
    var days_long = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
    var days_short = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat')
    
    var mmmm = months_long[intMonth]
    var mmm = months_short[intMonth]
    var mm = intMonth < 9?'0'+ (1 + intMonth) + '':(1+intMonth)+'';
    var m = 1+intMonth+'';
    var dddd = days_long[intDay];
    var ddd = days_short[intDay];
    var dd = intDate<10?'0'+intDate+'':intDate+'';
    var d = intDate+'';
    var yyyy = intYear;

    century = 0;
    while((intYear-century)>=100)
        century = century + 100;

    var yy = intYear - century
    if(yy<10)
        yy = '0' + yy + '';

    displayDate = new String(displayPat);

    displayDate = displayDate.replace(/!mmmm/i,mmmm);
    displayDate = displayDate.replace(/!mmm/i,mmm);
    displayDate = displayDate.replace(/!mm/i,mm);
    displayDate = displayDate.replace(/!m/i,m);
    displayDate = displayDate.replace(/!dddd/i,dddd);
    displayDate = displayDate.replace(/!ddd/i,ddd);
    displayDate = displayDate.replace(/!dd/i,dd);
    displayDate = displayDate.replace(/!d/i,d);
    displayDate = displayDate.replace(/!yyyy/i,yyyy);
    displayDate = displayDate.replace(/!yy/i,yy);

    return displayDate;
}



