function isYear(s, emptyOK) {   
	if ( (s == null) || (s.length == 0) )
		if (isYear.arguments.length == 1) return false;
		else return (isYear.arguments[1] == true);
	if ( isNaN(s) || (parseInt(s,10) < 0) ) return false;
	return ((s.length == 2) || (s.length == 4));
}

function isMonth(s, emptyOK) {
	var num;
	if ( (s == null) || (s.length == 0) ) 
		if (isMonth.arguments.length == 1) return false;
		else return (isMonth.arguments[1] == true);
	if ( isNaN(s) || (parseInt(s,10) < 0) ) return false;
	num = parseInt(s,10);
	return ((num >= 1) && (num <= 12));
}

function isDay(s, emptyOK) {
	var num;
	if ( (s == null) || (s.length == 0) ) 
		if (isDay.arguments.length == 1) return false;
		else return (isDay.arguments[1] == true);   
	num = parseInt(s,10);
	return ((num >= 1) && (num <= 31));
}

function daysInFebruary(year) {
	return ( ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isDate(dt) {
	var year;
	var month;
	var day;
	var daysInMonth = makeArray(12);
	var intYear;
	var intMonth;
	var intDay;
	var intHora;
	var intMinuto;
	var iLength = dt.length;

	daysInMonth[1] = 31;
	daysInMonth[2] = 29;
	daysInMonth[3] = 31;
	daysInMonth[4] = 30;
	daysInMonth[5] = 31;
	daysInMonth[6] = 30;
	daysInMonth[7] = 31;
	daysInMonth[8] = 31;
	daysInMonth[9] = 30;
	daysInMonth[10] = 31;
	daysInMonth[11] = 30;
	daysInMonth[12] = 31;

	// dd/mm/yyyy hh:mm
	if (iLength == 10 || iLength == 16 || iLength == 19 ) {
		if ( dt.substring(2, 3) != "/" || dt.substring(5, 6) != "/" ) return false;

		day = dt.substring(0, 2);
		month = dt.substring(3, 5);
		year = dt.substring(6, 10);

		if ( !(isYear(year, false) && isMonth(month, false) && isDay(day, false)) ) return false;

		intYear = parseInt(year,10);
		intMonth = parseInt(month,10);
		intDay = parseInt(day,10);

		if (intDay > daysInMonth[intMonth]) return false; 

		if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;

		if (iLength == 16) 
			if ( dt.substring(13, 14) != ":" ) return false;

		if (iLength == 19) 
			if ( dt.substring(16, 17) != ":" ) return false;

		if (iLength == 16 || iLength == 19) 
			if ( !isDate(dt.substring(11, 19)) ) return false;
	}
	else {
		if (iLength == 5) 
			{
			// hh:mm
			intHora = dt.substring(0, 2);
			intMinuto = dt.substring(3, 5);
			if ( (intHora < 0 || intHora > 23) || (intMinuto < 0 || intMinuto > 59) ) return false;
			}

		if (iLength == 8) 
			{
			// hh:mm:ss
			intHora = dt.substring(0, 2);
			intMinuto = dt.substring(3, 5);
			intSegundo = dt.substring(6, 8);
			if ( (intHora < 0 || intHora > 23) || (intMinuto < 0 || intMinuto > 59) || (intSegundo < 0 || intSegundo > 59) ) return false;
			}

		if (iLength < 8) 
			{
			return false;
			}

	}

	return true;
}

function compareDate(a, b) {

	var datA = new Date(InvertData(a));
	var datB = new Date(InvertData(b));
	if (datA < datB) { return -1; }
	else {
		if (datA > datB) { return 1; }
		else { return 0; }
	}
}

function makeArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 0;
	}
	return this;
}


function InvertData(d) {

	var ano;
	var mes;
	var dia;
	var hora;
	var retorno;
	dia = d.substring(0, 2);
	mes = d.substring(3, 5);
	ano = d.substring(6, 10);
	hora = d.substring(11, 16);
	retorno = mes + '/' + dia + '/' + ano + ' ' + hora;

	return retorno;
}

function DateAdd(startDate, numDays, numMonths, numYears)
{
	var returnDate = new Date(startDate.getTime());
	var yearsToAdd = numYears;
	
	var month = returnDate.getMonth()	+ numMonths;
	if (month > 11)
	{
		yearsToAdd = Math.floor((month+1)/12);
		month -= 12*yearsToAdd;
		yearsToAdd += numYears;
	}
	returnDate.setMonth(month);
	returnDate.setFullYear(returnDate.getFullYear()	+ yearsToAdd);
	
	returnDate.setTime(returnDate.getTime()+60000*60*24*numDays);
	
	return returnDate;

}

function YearAdd(startDate, numYears)
{
		return DateAdd(CharToDate( startDate ),0,0,parseInt(numYears,10));
}

function MonthAdd(startDate, numMonths)
{
		return DateAdd(CharToDate( startDate ),0,parseInt(numMonths,10),0);
}

function DayAdd(startDate, numDays)
{
		return DateAdd(CharToDate( startDate ),parseInt(numDays,10),0,0);
}

    
function DateToChar( data )
{
	var dia 	= 	data.getDate();
	var mes 	= 	( data.getMonth() + 1 );
	var hora	= 	data.getHours();
	var minuto	= 	data.getMinutes()	;
	var segundo=	data.getSeconds();
	
	if (dia < 10 ) { dia = '0' + dia; }
	if (mes < 10 ) { mes = '0' + mes; }

	if (hora 		< 10 ) { hora 	= '0' + hora; }
	if (minuto 	< 10 ) { minuto 	= '0' + minuto; }
	if (segundo 	< 10 ) { segundo = '0' + segundo; }
	
	return ( dia + "/" + mes + "/" + data.getFullYear() + ' ' + hora + ':' + minuto + ':' + segundo );
}

function CharToDate( data )
{
	if ( data.substring(17, 19) != '' )
		var data = new Date( parseInt(data.substring(6, 10),10) , parseInt(data.substring(3, 5),10)-1 , parseInt(data.substring(0, 2),10) , parseInt(data.substring(11, 13),10) , parseInt(data.substring(14, 16),10), parseInt(data.substring(17, 19),10) );
	else
		if ( data.substring(14, 16) != '' )
			var data = new Date( parseInt(data.substring(6, 10),10) , parseInt(data.substring(3, 5),10)-1 , parseInt(data.substring(0, 2),10) , parseInt(data.substring(11, 13),10) , parseInt(data.substring(14, 16),10), 0 );
		else
			if ( data.substring(11, 13) != '' )
				var data = new Date( parseInt(data.substring(6, 10),10) , parseInt(data.substring(3, 5),10)-1 , parseInt(data.substring(0, 2),10) , parseInt(data.substring(11, 13),10) , 0, 0 );
			else
				var data = new Date( parseInt(data.substring(6, 10),10) , parseInt(data.substring(3, 5),10)-1 , parseInt(data.substring(0, 2),10) , 0 , 0, 0 );			

	return data;
}
