//--------------------------------
//
//	DATE VALIDATION FUNCTION
//	How To Use: onBlur=dateValidation(this)
//
//--------------------------------
function dateValidation(theObject, standard){

	resultDate=dateFromString(theObject.value, standard);
	if(resultDate) theObject.value=resultDate;
		else theObject.value='';

}

function dateValidationOnKeyPress(e,theObject, standard){
	// the key pressed
	if (!e) var e = window.event;
	// e gives access to the event in all browsers
	if(e.keyCode==13){
		dateValidation(theObject, standard);
	}

}
//--------------------------------
// TRANSFORM A STRING INTO A VALID DATE FORMAT
//--------------------------------
function dateFromString(stringDate, standard){
	if(stringDate=='') return false;
	if(standard=='') return false;


	var now=new Date();

	//------------------------
	// separators
	//------------------------
	var strSeparatorArray = new Array("-"," ","/",".","_");

	//------------------------
	// explode the string
	//------------------------
	var dateArr=explodeString(stringDate,strSeparatorArray);


	// try to find out which date element is most likely to be entered first
	firstPos='';

	// find order
	if (standard=='eu' || standard=='eu_s' || standard=='eu_es') {
		firstPos='day';
	}
	if (standard=='us' || standard=='us_es') {
		firstPos='month';
	}
	if (standard=='iso') {
		firstPos='year';
	}


	// DATE IN 3 ELEMENTS FORMAT /////////////////////////////////////////////////////////////////
	if(dateArr.length==3){

		// try the best solution
		if (firstPos=='day')
			if (dateExists(dateArr[0],monthValid(dateArr[1]),corectYear(dateArr[2])))
				return formatDate(dateArr[0],monthValid(dateArr[1]),corectYear(dateArr[2]), standard);

		if (firstPos=='month')
			if (dateExists(dateArr[1],monthValid(dateArr[0]),corectYear(dateArr[2])))
				return formatDate(dateArr[1],monthValid(dateArr[0]),corectYear(dateArr[2]), standard);

		if (firstPos=='year')
			if (dateExists(dateArr[2],monthValid(dateArr[1]),corectYear(dateArr[0])))
				return formatDate(dateArr[2],monthValid(dateArr[1]),corectYear(dateArr[0]), standard);


		// if the best solution failed, start over
		if(dateExists(dateArr[0],monthValid(dateArr[1]),corectYear(dateArr[2])))
			return formatDate(dateArr[0],monthValid(dateArr[1]),corectYear(dateArr[2]), standard);
		if(dateExists(dateArr[1],monthValid(dateArr[0]),corectYear(dateArr[2])))
			return formatDate(dateArr[1],monthValid(dateArr[0]),corectYear(dateArr[2]), standard);
		if(dateExists(dateArr[2],monthValid(dateArr[1]),corectYear(dateArr[0])))
			return formatDate(dateArr[2],monthValid(dateArr[1]),corectYear(dateArr[0]), standard);


	}
	// DATE IN 2 ELEMENTS FORMAT /////////////////////////////////////////////////////////////////
	if(dateArr.length==2){
		// test if date is day/month
		if (firstPos=='day') {
			if (dateExists(dateArr[0], monthValid(dateArr[1]), now.getFullYear()))
				return formatDate(dateArr[0],monthValid(dateArr[1]), now.getFullYear(), standard);
			// d1=DDMM/DDMMM d2=YY/YYYY
			if(dateExists(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2)), corectYear(dateArr[1])))
				return formatDate(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2)), corectYear(dateArr[1]), standard);
			// d1=DMMM d2=YY/YYYY
			if(dateExists(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1)), corectYear(dateArr[1])))
				return formatDate(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1)), corectYear(dateArr[1]), standard);
		}

		// test if date is month/day
		if (firstPos=='month') {
			if (dateExists(dateArr[1], monthValid(dateArr[0]), now.getFullYear()))
				return formatDate(dateArr[1],monthValid(dateArr[0]), now.getFullYear(), standard);
			// d1=YY/YYYY d2=DDMMM/DDMM
			if(dateExists(dateArr[1].substr(0,2),monthValid(dateArr[1].substr(2)), corectYear(dateArr[0])))
				return formatDate(dateArr[1].substr(0,2),monthValid(dateArr[1].substr(2)), corectYear(dateArr[0]), standard);
		}

		// if the best solution failed, start over
		if(dateExists(dateArr[0],monthValid(dateArr[1]), now.getFullYear()  ))
			return formatDate(dateArr[0],monthValid(dateArr[1]), now.getFullYear(), standard);
		if(dateExists(dateArr[1],monthValid(dateArr[0]), now.getFullYear()  ))
			return formatDate(dateArr[1],monthValid(dateArr[0]), now.getFullYear(), standard);
		if(dateExists(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2)), corectYear(dateArr[1])))
			return formatDate(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2)), corectYear(dateArr[1]), standard);
		if(dateExists(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1)), corectYear(dateArr[1])))
			return formatDate(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1)), corectYear(dateArr[1]), standard);
		if(dateExists(dateArr[1].substr(0,2),monthValid(dateArr[1].substr(2)), corectYear(dateArr[0])))
			return formatDate(dateArr[1].substr(0,2),monthValid(dateArr[1].substr(2)), corectYear(dateArr[0]), standard);

	}

	// DATE IN 1 ELEMENTS FORMAT /////////////////////////////////////////////////////////////////
	if(dateArr.length==1){

		// DD / D
		if(dateArr[0].length<=2) {
			if(dateExists(dateArr[0],now.getMonth()+1, now.getFullYear()))
				return formatDate(dateArr[0],now.getMonth()+1, now.getFullYear(), standard);
		}
		else {

			if(dateArr[0].length<=5){
				if (firstPos=='day') {
					// DDMM/DDMMM
					if(dateExists(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2)), now.getFullYear()))
						return formatDate(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2)), now.getFullYear(), standard);
					// DMMM
					if(dateExists(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1)), now.getFullYear()))
						return formatDate(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1)), now.getFullYear(), standard);
					// DMMYY
					if(dateExists(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1,2)), corectYear(dateArr[0].substr(3))))
						return formatDate(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1,2)), corectYear(dateArr[0].substr(3)), standard);
				}
				if (firstPos=='month') {
					// MMDD
					if (dateExists(dateArr[0].substr(2), monthValid(dateArr[0].substr(0,2)), now.getFullYear()))
						return formatDate(dateArr[0].substr(2), monthValid(dateArr[0].substr(0,2)), now.getFullYear(), standard);
					// MDD
					if (dateExists(dateArr[0].substr(1), monthValid(dateArr[0].substr(0,1)), now.getFullYear()))
						return formatDate(dateArr[0].substr(1), monthValid(dateArr[0].substr(0,1)), now.getFullYear(), standard);
					// MMMDD / MMMD
					if (dateExists(dateArr[0].substr(3), monthValid(dateArr[0].substr(0,3)), now.getFullYear()))
						return formatDate(dateArr[0].substr(3), monthValid(dateArr[0].substr(0,3)), now.getFullYear(), standard);

				}

			}
			else {

				if (firstPos=='day') {
					// DDMMYY / DDMMYYYY
					if(dateExists(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2,2)), corectYear(dateArr[0].substr(4))))
						return formatDate(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2,2)), corectYear(dateArr[0].substr(4)), standard);
					// DMMMYY / DMMMYYYY
					if(dateExists(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1,3)), corectYear(dateArr[0].substr(4))))
						return formatDate(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1,3)), corectYear(dateArr[0].substr(4)), standard);
					// DDMMMYY / DDMMMYYYY
					if(dateExists(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2,3)), corectYear(dateArr[0].substr(5))))
						return formatDate(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2,3)), corectYear(dateArr[0].substr(5)), standard);
				}
				if (firstPos=='month') {
					// MMDDYY / MMDDYYYY
					if (dateExists(dateArr[0].substr(2,2), monthValid(dateArr[0].substr(0,2)), corectYear(dateArr[0].substr(4))))
						return formatDate(dateArr[0].substr(2,2), monthValid(dateArr[0].substr(0,2)), corectYear(dateArr[0].substr(4)), standard);
					// MMDYY / MMDYYYY
					if (dateExists(dateArr[0].substr(2,1), monthValid(dateArr[0].substr(0,2)), corectYear(dateArr[0].substr(3))))
						return formatDate(dateArr[0].substr(2,1), monthValid(dateArr[0].substr(0,2)), corectYear(dateArr[0].substr(3)), standard);
					// MMMDDYY / MMMDDYYYY
					if (dateExists(dateArr[0].substr(3,2), monthValid(dateArr[0].substr(0,3)), corectYear(dateArr[0].substr(5))))
						return formatDate(dateArr[0].substr(3,2), monthValid(dateArr[0].substr(0,3)), corectYear(dateArr[0].substr(5)), standard);
				}
				if (firstPos=='year') {
					// YYMMDD / YYMMD
					if (dateExists(dateArr[0].substr(4), monthValid(dateArr[0].substr(2,2)), corectYear(dateArr[0].substr(0,2))))
						return formatDate(dateArr[0].substr(4), monthValid(dateArr[0].substr(2,2)), corectYear(dateArr[0].substr(0,2)), standard);
					// YYYYMMDD / YYYYMMD
					if (dateExists(dateArr[0].substr(5), monthValid(dateArr[0].substr(4,1)), corectYear(dateArr[0].substr(0,4))))
						return formatDate(dateArr[0].substr(5), monthValid(dateArr[0].substr(4,1)), corectYear(dateArr[0].substr(0,4)), standard);
					// YYYYMDD / YYYYMD
					if (dateExists(dateArr[0].substr(6), monthValid(dateArr[0].substr(4,2)), corectYear(dateArr[0].substr(0,4))))
						return formatDate(dateArr[0].substr(6), monthValid(dateArr[0].substr(4,2)), corectYear(dateArr[0].substr(0,4)), standard);
					// YYYYMMMDD / YYYYMMMD
					if (dateExists(dateArr[0].substr(7), monthValid(dateArr[0].substr(4,3)), corectYear(dateArr[0].substr(0,4))))
						return formatDate(dateArr[0].substr(7), monthValid(dateArr[0].substr(4,3)), corectYear(dateArr[0].substr(0,4)), standard);
				}

			}
		}


		if(dateExists(dateArr[0],now.getMonth()+1, now.getFullYear()))
			return formatDate(dateArr[0],now.getMonth()+1, now.getFullYear(), standard);
		if(dateExists(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2)), now.getFullYear()))
			return formatDate(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2)), now.getFullYear(), standard);
		if(dateExists(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1)), now.getFullYear()))
			return formatDate(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1)), now.getFullYear(), standard);
		if(dateExists(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1,2)), corectYear(dateArr[0].substr(3))))
			return formatDate(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1,2)), corectYear(dateArr[0].substr(3)), standard);


		if (dateExists(dateArr[0].substr(1), monthValid(dateArr[0].substr(0,1)), now.getFullYear()))
			return formatDate(dateArr[0].substr(1), monthValid(dateArr[0].substr(0,1)), now.getFullYear(), standard);
		if (dateExists(dateArr[0].substr(2), monthValid(dateArr[0].substr(0,2)), now.getFullYear()))
			return formatDate(dateArr[0].substr(2), monthValid(dateArr[0].substr(0,2)), now.getFullYear(), standard);

		if (dateExists(dateArr[0].substr(3), monthValid(dateArr[0].substr(0,3)), now.getFullYear()))
			return formatDate(dateArr[0].substr(3), monthValid(dateArr[0].substr(0,3)), now.getFullYear(), standard);
		if(dateExists(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2,2)), corectYear(dateArr[0].substr(4))))
			return formatDate(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2,2)), corectYear(dateArr[0].substr(4)), standard);

		if(dateExists(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1,3)), corectYear(dateArr[0].substr(4))))
			return formatDate(dateArr[0].substr(0,1),monthValid(dateArr[0].substr(1,3)), corectYear(dateArr[0].substr(4)), standard);
		if(dateExists(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2,3)), corectYear(dateArr[0].substr(5))))
			return formatDate(dateArr[0].substr(0,2),monthValid(dateArr[0].substr(2,3)), corectYear(dateArr[0].substr(5)), standard);
		if (dateExists(dateArr[0].substr(2,2), monthValid(dateArr[0].substr(0,2)), corectYear(dateArr[0].substr(4))))
			return formatDate(dateArr[0].substr(2,2), monthValid(dateArr[0].substr(0,2)), corectYear(dateArr[0].substr(4)), standard);
		if (dateExists(dateArr[0].substr(2,1), monthValid(dateArr[0].substr(0,2)), corectYear(dateArr[0].substr(3))))
			return formatDate(dateArr[0].substr(2,1), monthValid(dateArr[0].substr(0,2)), corectYear(dateArr[0].substr(3)), standard);
		if (dateExists(dateArr[0].substr(3,2), monthValid(dateArr[0].substr(0,3)), corectYear(dateArr[0].substr(5))))
			return formatDate(dateArr[0].substr(3,2), monthValid(dateArr[0].substr(0,3)), corectYear(dateArr[0].substr(5)), standard);
		if (dateExists(dateArr[0].substr(4), monthValid(dateArr[0].substr(2,2)), corectYear(dateArr[0].substr(0,2))))
			return formatDate(dateArr[0].substr(4), monthValid(dateArr[0].substr(2,2)), corectYear(dateArr[0].substr(0,2)), standard);
		if (dateExists(dateArr[0].substr(5), monthValid(dateArr[0].substr(4,1)), corectYear(dateArr[0].substr(0,4))))
			return formatDate(dateArr[0].substr(5), monthValid(dateArr[0].substr(4,1)), corectYear(dateArr[0].substr(0,4)), standard);
		if (dateExists(dateArr[0].substr(6), monthValid(dateArr[0].substr(4,2)), corectYear(dateArr[0].substr(0,4))))
			return formatDate(dateArr[0].substr(6), monthValid(dateArr[0].substr(4,2)), corectYear(dateArr[0].substr(0,4)), standard);
		if (dateExists(dateArr[0].substr(7), monthValid(dateArr[0].substr(4,3)), corectYear(dateArr[0].substr(0,4))))
			return formatDate(dateArr[0].substr(7), monthValid(dateArr[0].substr(4,3)), corectYear(dateArr[0].substr(0,4)), standard);

	}

	return false;
}
