//**********************************************************************
//Controla el ingreso de fechas.
//en el head
//<script language="javascript" src="ingresar_fechas.js"></script>
//
//en el form
//<INPUT size=11 maxLength=11 name=fecha onblur="convert_date(fecha);">
//**********************************************************************
function convert_date(field1)
{
var fLength = field1.value.length; // Length of supplied field in characters.
var divider_values = new Array ('-','.','/',' ',':','_',','); // Array to hold permitted date seperators.  Add in '\' value
var array_elements = 7; // Number of elements in the array - divider_values.
var day1 = new String(null); // day value holder
var month1 = new String(null); // month value holder
var year1 = new String(null); // year value holder
var divider1 = null; // divider holder
var outdate1 = null; // formatted date to send back to calling field holder
var counter1 = 0; // counter for divider looping 
var divider_holder = new Array ('0','0','0'); // array to hold positions of dividers in dates
var s = String(field1.value); // supplied date value variable

	//If field is empty do nothing
	if (fLength == 0) { return true;}

	//Find position and type of divider in the date
	for ( var i=0; i<3; i++ ) {
		for ( var x=0; x<array_elements; x++ ) {
			if ( s.indexOf(divider_values[x], counter1) != -1 ) {
				divider1 = divider_values[x];
				divider_holder[i] = s.indexOf(divider_values[x], counter1);
				counter1 = divider_holder[i] + 1;
				break;
			}
		}
	}

	//if element 2 is not 0 then more than 2 dividers have been found so date is invalid.
	if (divider_holder[2]!=0) {
		invalid_date(field1);
		return false;
	}

	//See if no dividers are present in the date string.
	if (divider_holder[0] == 0 && divider_holder[1] == 0 ) {
		switch (fLength) {
			case 3:
				//dmm
				month1 = '0' + field1.value.substring(0,1);
				day1 = field1.value.substring(1,3);
				var nYear = new Date();
				year1= String(nYear.getYear());
				break;

			case 4:
				//ddmm
				month1 = field1.value.substring(0,2);
				day1 = field1.value.substring(2,4);
				var nYear = new Date();
				year1= String(nYear.getYear());
				break;

			case 6:
				//ddmmyy
				month1 = field1.value.substring(0,2);
				day1 = field1.value.substring(2,4);
				year1 = field1.value.substring(4,6);
				if ((year1 = validate_year(year1)) == false ) {
					invalid_date(field1);
					return false;
				}
				break;

			case 8:
				//ddmmyyyy
				month1 = field1.value.substring(0,2);
				day1 = field1.value.substring(2,4);
				year1 = field1.value.substring(4,8);
				break;
		}

		if ((outdate1 = validate_date(day1,month1,year1)) == false ) {
			invalid_date(field1);
			return false;
		}

		field1.value = outdate1;
		return true;// All OK
	}

	//2 dividers are present so continue to process
	if ( divider_holder[0] != 0 && divider_holder[1] != 0 ) {
		month1 = field1.value.substring(0, divider_holder[0]);
		day1 = field1.value.substring(divider_holder[0] + 1, divider_holder[1]);
		year1 = field1.value.substring(divider_holder[1] + 1, field1.value.length);
	}

	//Check day and year are numeric
	if (isNaN(day1) && isNaN(year1)) {
		invalid_date(field1);
		return false;
	}
	
	//Make d day dd
	if (day1.length==1) {day1 = '0' + day1;}

	//Make m month mm
	if (month1.length == 1 ) { month1 = '0' + month1;}

	//Make yy year yyyy
	if (year1.length == 2) {
		if ((year1 = validate_year(year1)) == false ) {
			invalid_date(field1);
			return false;
		}
	}

	//Error mmm month
	if ( month1.length > 2) {
		invalid_date(field1);
		return false;
	}

	//Date components are OK
	if ((day1.length == 2 || month1.length == 2 || year1.length == 4) == false) {
		invalid_date(field1);
		return false;
	}

	//Validate the date
	if ((outdate1 = validate_date(day1, month1, year1)) == false ) {
		invalid_date(field1);
		return false;
	}

	// Redisplay the date in dd/mm/yyyy format
	field1.value = outdate1;
	return true;//All is well
}

//*******************************************************************
function invalid_date(inField) {
	alert("This value: " + inField.value + " it's not a valid date.\n\r" + "Please, use the next format mm/dd/aaaa.");
	inField.focus();
	inField.select();
	return true;
}

//****************************************************************** www.simonkneafsey.co.uk
function validate_date(day2, month2, year2) {
	var DayArray = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var inpDate = month2 + day2 + year2;
	var filter;

	//Check mmddyyyy date supplied
	filter=/^[0-9]{2}[0-9]{2}[0-9]{4}$/;
	if (! filter.test(inpDate)) { return false;}

	//Check Valid Month
	filter=/01|02|03|04|05|06|07|08|09|10|11|12/;
	if (! filter.test(month2)) { return false;}

	/* Check for valid days for month */
	var ctr = Number(month2)-1;

	if (ctr==1) { //Febrero
		//Check a�o bisiesto
		var N = Number(year2);
		if ( ( N%4==0 && N%100 !=0 ) || ( N%400==0 )) { DayArray[1]=29;}
	}

	if (day2<= DayArray[ctr] && day2 >0) {
		inpDate = month2 + '/' + day2  + '/' + year2;
		return inpDate;
	} else
		return false;
}

function validate_year(inYear) {
	if (inYear < 10) {
		inYear = "20" + inYear;
		return inYear;
	}
	else if ( inYear >= 10 ) {
		inYear = "19" + inYear;
		return inYear;
	}
	else
	{
		return false;
	}
}