

var date_error_count = 0;


function js_date_ddMMyy(id)
{
    js_date_format(id, 'dd/MM/yy');
}


function js_date_ddMMyyyy(id)
{
    js_date_format(id, 'dd/MM/yyyy');
}


function js_date_format(id, format)
{
    var element = document.getElementById(id);
    var strDate = element.value;
    
    if (strDate==null||strDate=='') {
        date_error_count=0;

        element.style.backgroundColor = 'white';
        return;
    }

    var dDate = js_check_date_format(strDate);

    if (dDate==null) {
        element.style.backgroundColor = '#FFCCFF';
        var msgError = "Error: The date must be entered in one the following formats:\r\n" +
                       "DDMMYY\r\n" +
                       "D/M/YY\r\n" + 
                       "DD/M/YY\r\n" +
                       "DD/MM/YY\r\n" +
                       "DDMMYYYY\r\n" +
                       "D/MM/YYYY\r\n" +
                       "DD/M/YYYY\r\n" +
                       "DD/MM/YYYY\r\n" +
                       "and year must be greater than 1900 and smaller than 2100.";
        alert(msgError);

        if (++date_error_count<=2)
            element.focus();
    }
    else {
        date_error_count=0;
        element.style.backgroundColor = 'white';
        element.value = formatDate(dDate, format);
    }	
}



function formatDate(dDate, format)
{
    if (format=='dd/MM/yyyy')
        return fillWithZero(dDate.getDate(),2) + '/' + fillWithZero(dDate.getMonth()+1,2) + '/' + dDate.getFullYear();
    if (format=='dd/MM/yy')
        return fillWithZero(dDate.getDate(),2) + '/' + fillWithZero(dDate.getMonth()+1,2) + '/' + (""+dDate.getFullYear()).substr(2);
}


function fillWithZero(n, size) 
{
    var res = "";
    var len = (""+n).length;
    for (i=0; len+i<size; i++)
        res += "0";
    return res+n;
}

function js_check_date_format(strDate)
{
    //blank field
    if (strDate == '')
        return null;

    // min:6, max 10
    if (strDate.length<6 || strDate.length>10)
        return null;
  	
    // first selection
    var regexSlashes = "^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/(19|20)?[0-9]{2}$";
    var regexNoSlashes = "^(0?[1-9]|[12][0-9]|3[01])(0?[1-9]|1[012])(19|20)?[0-9]{2}$";

    var strDay, strMonth, strYear;

    if (strDate.match(regexSlashes)!=null) {
        // Split the string
        var tmp = strDate.split("/"); 
        strDay = tmp[0];
        strMonth = tmp[1];
        strYear = tmp[2];
    }
    else if (strDate.match(regexNoSlashes)!=null) {
        strDay = strDate.substr(0,2);
        strMonth = strDate.substr(2,2);
        strYear = strDate.substr(4);
    }
    else
        return null;
    
    
    var day = parseInt(strDay, 10);
    if (day<1 || day>31)
        return null;

    var month = parseInt(strMonth, 10);
    if (month<1 || month>12)
        return null;

	/* month starts with 0 in JS */
    month--;                        

    

    // if length is 2, add the century prefix
    strYear = (strYear.length==2?"20":"") + strYear;
    var year = parseInt(strYear, 10);
    if (year<1900 || year>2099)
        return null;

    // Check if valid day
     if (!validDate(year, month, day))
        return null;

    return new Date(year, month, day);
  
}



function validDate(intYear, intMonth, intDay)
{
    var dtmDate = new Date(intYear, intMonth, intDay);
	if (intYear!=dtmDate.getFullYear() || intMonth!=dtmDate.getMonth() || dtmDate.getDate()<intDay)
		return false;
	return true;
}


