function chk_fecha(jsp_obj) 
{
	var datefield = jsp_obj;
	
	if (chkdate(datefield) == false) 
	{
		datefield.select();
		alert("La fecha es inválida. Por favor ingresela en formato DD/MM/AAAA.");
		datefield.focus();
		return false;
	}
	else 
	{
		return true;
	}
}

function chk_num(jsp_num)
{
	if (jsp_num<10)
	{
		return '0'+jsp_num;
	}
	else
	{
		return jsp_num;
	}
}

function chkdate(jsp_obj) 
{
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = jsp_obj;
	var strSeparatorArray = new Array("-"," ","/",".");
	var intElementNr;
	var err = 0;
	strDate = datefield.value;
	if (strDate.length < 1) 
	{
		return true;
	}

	if (strDate.length != 6 && strDate.length != 10) 
	{
		return false;
	}

	if (strDate.length == 6) 
	{
		datefield.value=strDate.substr(1,2)+'/'+strDate.substr(3,2)+'/'+strDate.substr(5,2)
	}

	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) 
	{
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) 
		{
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if (strDateArray.length != 3) 
			{
				err = 1;
				return false;
			}
			else 
			{
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
		}
	}

	if (booFound == false) 
	{
		if (strDate.length>5) 	
		{
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4);
		}
	}

	intday = parseInt(strDay, 10);
	if (isNaN(intday)) 
	{
		err = 2;
		return false;
	}

	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) 	
	{
		err = 3;
		return false;
	}

	intYear = strYear;
	if (isNaN(intYear)) 
	{
		err = 4;
		return false;
	}
	if (intMonth>12 || intMonth<1) 
	{
		err = 5;
		return false;
	}
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) 
	{
		err = 6;
		return false;
	}
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) 
	{
		err = 7;
		return false;
	}
	if (intMonth == 2) 
	{
		if (intday < 1) 
		{
			err = 8;
			return false;
		}
		if (LeapYear(intYear) == true) 
		{
			if (intday > 29) 
			{
				err = 9;
				return false;
			}
		}
		else 
		{
			if (intday > 28) 
			{
				err = 10;
				return false;
			}
		}
	}
	datefield.value = chk_num(intday) + "/" + chk_num(intMonth) + "/" + strYear;
return true;
}

function LeapYear(jsp_year) 
{
	if (jsp_year % 100 == 0) 
	{
		if (jsp_year % 400 == 0) { return true; }
	}
	else 	
	{
		if ((jsp_year % 4) == 0) { return true; }
	}
return false;
}

function show_calendar(str_target, str_datetime) {
	var arr_months = ["ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO",
		"JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"];
	var week_days = ["DOM", "LUN", "MAR", "MIE", "JUE", "VIE", "SAB"];
	var n_weekstart = 1; // day week starts from (normally 0 or 1)

	var dt_datetime = (str_datetime == null || str_datetime == "" ? new Date() : str2dt(str_datetime));
	var dt_prev_month = new Date(dt_datetime);
	dt_prev_month.setMonth(dt_datetime.getMonth()-1);
	var dt_next_month = new Date(dt_datetime);
	dt_next_month.setMonth(dt_datetime.getMonth()+1);
	var dt_firstday = new Date(dt_datetime);
	dt_firstday.setDate(1);
	dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
	var dt_lastday = new Date(dt_next_month);
	dt_lastday.setDate(0);
	
	// html generation (feel free to tune it for your particular application)
	// print calendar header
	var str_buffer = new String (
		"<html>\n"+
		"<head>\n"+
		"	<title>Calendario</title>\n"+
		"</head>\n"+
		"<body bgcolor=\"White\" leftmargin=\"0\" topmargin=\"0\" >\n"+
		"<table cellspacing=\"0\" border=\"0\" width=\"220\" height=\"165\">\n"+
		"<tr><td bgcolor=\"#4682B4\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"1\" border=\"0\" width=\"220\" height=\"165\">\n"+
		"<tr>\n	<td bgcolor=\"#4682B4\" width=\"31\" align=\"center\"><a href=\"javascript:window.opener.show_calendar('"+
		str_target+"', '"+ dt2dtstr(dt_prev_month)+"');\">"+
		"<img src=\"/images/prev.gif\" border=\"0\"></a></td>\n"+
		"	<td bgcolor=\"#4682B4\" align=\"center\" colspan=\"5\">"+
		"<font color=\"white\" style=\"letter-spacing : 2px; font-size:12px;\" face=\"Verdana, Tahoma\">"
		+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
		"	<td bgcolor=\"#4682B4\" align=\"right\" width=\"31\"><a href=\"javascript:window.opener.show_calendar('"
		+str_target+"', '"+dt2dtstr(dt_next_month)+"');\">"+
		"<img src=\"/images/next.gif\" border=\"0\"></a></td>\n</tr>\n"
	);

	var dt_current_day = new Date(dt_firstday);
	// print weekdays titles
	str_buffer += "<tr>\n";
	for (var n=0; n<7; n++)
		str_buffer += "	<td align=\"center\" width=\"31\" bgcolor=\"#87CEFA\">"+
		"<font color=\"white\" face=\"Verdana, Tahoma\" style=\"font-size:8px;\">"+
		week_days[(n_weekstart+n)%7]+"</font></td>\n";
	// print calendar table
	str_buffer += "</tr>\n";
	while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
		dt_current_day.getMonth() == dt_firstday.getMonth()) {
		// print row heder
		str_buffer += "<tr>\n";
		for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
				if (dt_current_day.getDate() == dt_datetime.getDate() &&
					dt_current_day.getMonth() == dt_datetime.getMonth())
					// print current date
					str_buffer += "	<td bgcolor=\"#FFB6C1\" width=\"31\" align=\"center\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td bgcolor=\"#DBEAF5\" width=\"31\" align=\"center\">";
				else
					// print working days of current month
					str_buffer += "	<td bgcolor=\"white\" width=\"31\" align=\"center\">";

				if (dt_current_day.getMonth() == dt_datetime.getMonth())
					// print days of current month
					str_buffer += "<a style=\"text-decoration:none;\" href=\"javascript:window.opener."+str_target+
					".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
					"<font color=\"black\" face=\"Verdana, Tahoma\" style=\"font-size:10px;\">";
				else 
					// print days of other months
					str_buffer += "<a style=\"text-decoration:none;\" href=\"javascript:window.opener."+str_target+
					".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
					"<font color=\"gray\" face=\"Verdana, Tahoma\" style=\"font-size:10px;\">";
				str_buffer += frmdate(dt_current_day.getDate())+"</font></a></td>\n";
				dt_current_day.setDate(dt_current_day.getDate()+1);
		}
		// print row footer
		str_buffer += "</tr>\n";
	}
	// print calendar footer
	str_buffer +=
		"</td></tr>\n</form>\n" +
		"</table>\n" +
		"</tr>\n</td>\n</table>\n" +
		"</body>\n" +
		"</html>\n";

	var vWinCal = window.open("", "Calendar", 
		"width=222,height=167,status=no,resizable=no,top=300,left=400");
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}
// datetime parsing and formatting routimes. modify them if you wish other datetime format
function str2dt (str_datetime) {
	var re_date = /^(\d+)\/(\d+)\/(\d+)\s$/;
	if (!re_date.exec(str_datetime))
		return alert("Formato de Fecha Invalido: "+ str_datetime);
	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1));
}
function dt2dtstr (dt_datetime) {
	return (new String (
			//frmdate(dt_datetime.getDate())+"/"+frmdate((dt_datetime.getMonth()+1))+"/"+dt_datetime.getFullYear()+" "));
      frmdate(dt_datetime.getDate())+"/"+frmdate((dt_datetime.getMonth()+1))+"/"+dt_datetime.getFullYear()));
}
function dt2tmstr (dt_datetime) {
	return (new String (
			dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));
}
function frmdate (str_date) {
	if ((str_date.toString().length==1)){
    str_date='0'+str_date;
    }
		return str_date;
}
