/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
var DATE_SEPARATOR = "/";
var MIN_YEAR = 1900;
var MAX_YEAR = 2100;

function is_integer(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 strip_chars_in_bag(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 days_in_february (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 get_days_array(n) {
	var days_for = Array();

	for ( var month_num = 1; month_num <= n; month_num++ ) {
		days_for[month_num] = 31;
		if ( month_num == 4 || month_num == 6 || month_num == 9 || month_num == 11 ) {
			days_for[month_num] = 30;
		}
		if ( month_num == 2 ) {
			days_for[month_num] = 29;
		}
   } 

   return days_for;
}


function error_in_date(date_string) {
	var days_in_month = get_days_array(12);

	var pos1 = date_string.indexOf(DATE_SEPARATOR);
	var pos2 = date_string.indexOf(DATE_SEPARATOR, pos1 + 1);

	var month_string = date_string.substring(0, pos1)
	var day_string	 = date_string.substring(pos1 + 1, pos2);
	var year_string	 = date_string.substring(pos2 + 1);
	var strYr		 = year_string;

	if ( day_string.charAt(0) == "0" && day_string.length > 1 ) {
		day_string = day_string.substring(1);
	}
	if ( month_string.charAt(0) == "0" && month_string.length > 1 ) {
		month_string = month_string.substring(1);
	}

	for ( var i = 1; i <= 3; i++ ) {
		if ( strYr.charAt(0) == "0" && strYr.length > 1 ) {
			strYr=strYr.substring(1);
		}
	}

	month = parseInt(month_string);
	day	  = parseInt(day_string);
	year  = parseInt(strYr);

	if ( pos1 == -1 || pos2 == -1 ) {
		return "The date format should be MM/DD/YYYY";
	}

	if ( month_string.length < 1 || month < 1 || month > 12 ) {
		return "Please enter a valid month";
	}

	if ( day_string.length < 1 || day < 1 || day > 31
		 || (month == 2 && day > days_in_february(year))
		 || day > days_in_month[month] )
	{
		return "Please enter a valid day";
	}

	if ( year_string.length != 4 || year == 0
		 || year < MIN_YEAR
		 || year > MAX_YEAR )
	{
		return "Please enter a valid 4 digit year between " + MIN_YEAR + " and " + MAX_YEAR;
	}

	if ( date_string.indexOf(DATE_SEPARATOR, pos2 + 1) != -1
		 || is_integer(strip_chars_in_bag(date_string, DATE_SEPARATOR)) == false )
	{
		return "Please enter a valid date";
	}

	return false;
}
