/**
 * author: mark 
 * 08/08/2008
 * tested on: IE6, FF3, Safari 3.1.2, Google Chrome
 **/
 
/** sample usage
 * <html>
 * <head>
 * <title>Date Input Util Test</title>
 * <script type="text/javascript" src="DateInputUtil.js"></script>
 * </head>
 * <body>
 * <input id="diuDD" type="text" name="diuDD" value="" maxlength="2" size="3" /> /
 * <input id="diuMM" type="text" name="diuMM" value="" maxlength="2" size="3" /> /
 * <input id="diuYYYY" type="text' name="diuYYYY" value="" maxlength="4" size="5" />
 * <hr />
 * Actual Date: 
 * <input id="actualDate" name="actualDate" value="" />
 * <script type="text/javascript">
 * {
 *   var dd = document.getElementById("diuDD");
 *   var mm = document.getElementById("diuMM");
 *   var yyyy = document.getElementById("diuYYYY");
 *   var actualDate = document.getElementById("actualDate");
 *   var myDate = new DateInputUtil(dd,mm,yyyy,actualDate);
 *   dd.onkeyup = function(event) { myDate.ddHandler(event); };
 *   mm.onkeyup = function(event) { myDate.mmHandler(event); };
 *   yyyy.onkeyup = function(event) { myDate.yyyyHandler(event); };
 * } 
 * </script>
 * </body>
 * </html>
 **/          
var DateInputUtil = function(dd,mm,yyyy,actualDate) {
  this.dd = dd;
  this.mm = mm;
  this.yyyy = yyyy;
  this.actualDate = actualDate;
  
  this.dd.style.width = "1.2em";
  this.mm.style.width = "1.2em";
  this.yyyy.style.width = "2.2em";
  
};
DateInputUtil.prototype = {
    
  ddHandler: function(evt) {
    var toAdvance = true;
    evt = (evt) ? evt : ((event) ? event : null);

    if (evt.keyCode == 9 || evt.keyCode == 16) {
        toAdvance = false;
    }
    
    if (toAdvance && this.dd.value.length == 2 && this.dd.value > 0 && this.dd.value < 32) {
        this.mm.focus();
        this.mm.select();
    } else if (toAdvance && this.dd.value.length == 1 && this.dd.value > 3) {
        this.dd.value = "0" + this.dd.value;
        this.mm.focus();
        this.mm.select();
    }
    this.setActualDate(); 
  },
  
  mmHandler: function(evt) {
    var toAdvance = true;
    evt = (evt) ? evt : ((event) ? event : null);
    
    if (evt.keyCode == 9 || evt.keyCode == 16) {
       toAdvance = false;
    }
      
    if (toAdvance && this.mm.value.length == 2 && this.mm.value > 0 && this.mm.value < 13) {
      this.yyyy.focus();
      this.yyyy.select();
    } else if (toAdvance && this.mm.value.length == 1 && this.mm.value > 1) {
      this.mm.value = "0" + this.mm.value;
      this.yyyy.focus();
      this.yyyy.select();
    }
    this.setActualDate();
  },
  
  yyyyHandler: function(evt) { 
    this.setActualDate();
  },
  
  setActualDate: function() {
    
    if (this.dd.value.length > 0 || this.mm.value.length > 0 || this.yyyy.value.length > 0)
        this.actualDate.value = this.dd.value + "/" + this.mm.value + "/" + this.yyyy.value;
    else
        this.actualDate.value = "";
  }
  
};

// ------------------------------
// --------------------------------
/**
 * DHTML date validation script for dd/mm/yyyy. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
//var minYear=1900;
//var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : dd/mm/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		return false
	}
//	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
	if (strYear.length != 4 || year==0){
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		return false
	}
return true
}

//-------------------------------------------------------
function getDDMMYYYY(date) {
    var day = date.getDate();
    var month = date.getMonth() + 1;
    var year = date.getFullYear();
    var strDate = "";
    
    if (day < 10) strDate += "0";
    strDate += day;
    
    strDate += "/";
    
    if (month < 10) strDate += "0";
    strDate += month;
    
    strDate += "/";
    
    strDate += year;
    
    return strDate;
}

function isDateAfter(strDate, date) {
	/* var pos1=strDate.indexOf(dtCh)
	var pos2=strDate.indexOf(dtCh,pos1+1)
	var strDay=strDate.substring(0,pos1)
	var strMonth=strDate.substring(pos1+1,pos2)
	var strYear=strDate.substring(pos2+1)
        alert(strDate + " / " + strMonth + " / " + strYear);
        var actualDate = new Date();
        actualDate.setFullYear(parseInt(strYear), parseInt(strMonth) - 1, parseInt(strDay));
        alert(actualDate);
        return (actualDate > date);*/
        var dateArray = strDate.split("/");
        
        if (dateArray.length == 3) {
            var day = dateArray[0];
            var month = dateArray[1];
            var year = dateArray[2];
            var actualDate = new Date();
            actualDate.setFullYear(year,month-1,day);
            return (actualDate > date);
        } return false;
        
}
