// Title: Timestamp picker
// Description: See the demo at url
// URL: http://us.geocities.com/tspicker/
// Script featured on: http://javascriptkit.com/script/script2/timestamp.shtml
// Version: 1.0
// Date: 12-05-2001 (mm-dd-yyyy)
// Author: Denis Gritcyuk <denis@softcomplex.com>; <tspicker@yahoo.com>
// Notes: Permission given to use this script in any kind of applications if
//    header lines are left unchanged. Feel free to contact the author
//    for feature requests and/or donations



function show_calendar(str_target, str_datetime) {
	var arr_months = array_mois;
	var week_days = array_jours;
		
	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>Calendrier</title>\n"+
		"</head>\n"+
		"<body bgcolor=\"#FEF7D3\">\n"+
		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
		"<tr><td bgcolor=\"#F4AD64\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr>\n	<td bgcolor=\"#F4AD64\"><a href=\"javascript:window.opener.show_calendar('"+
		str_target+"', '"+ dt2dtstr(dt_prev_month)+"'+document.cal.time.value);\">"+
		"<img src=\"images/pages/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\"previous month\"></a></td>\n"+
		"	<td bgcolor=\"#F4AD64\" colspan=\"5\">"+
		"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">"
		+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
		"	<td bgcolor=\"#F4AD64\" align=\"right\"><a href=\"javascript:window.opener.show_calendar('"
		+str_target+"', '"+dt2dtstr(dt_next_month)+"'+document.cal.time.value);\">"+
		"<img src=\"images/pages/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\"next month\"></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 bgcolor=\"#F5C695\">"+
		"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"+
		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=\"#B3D6F6\" align=\"right\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td bgcolor=\"#F6D5B3\" align=\"right\">";
				else
					// print working days of current month
					str_buffer += "	<td bgcolor=\"white\" align=\"right\">";

				if (dt_current_day.getMonth() == dt_datetime.getMonth())
					// print days of current month
					str_buffer += "<a href=\"javascript:window.opener."+str_target+
					".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value;window.close();\">"+
					"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
				else 
					// print days of other months
					str_buffer += "<a href=\"javascript:window.opener."+str_target+
					".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value; window.close();\">"+
					"<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">";
				str_buffer += 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 += 

		"</table>\n" +
		"</tr>\n</td>\n</table>\n" +
		"<form name=\"cal\">\n<tr><td colspan=\"7\" bgcolor=\"#87CEFA\">"+
		"<font color=\"White\" face=\"tahoma, verdana\" size=\"2\">"+
		//"Time: <input type=\"text\" name=\"time\" value=\""+dt2tmstr(dt_datetime)+
		"<input type=\"hidden\" name=\"time\" value=\""+dt2tmstr(dt_datetime)+
		"\" size=\"8\" maxlength=\"8\"></font></td></tr>\n</form>\n" +

		"</body>\n" +
		"</html>\n";

	var vWinCal = window.open("", "Calendrier", 
		"width=200,height=220,status=no,resizable=yes,top=200,left=200");
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}

function show_calendar2(str_form,str_target, str_datetime) {
	var arr_months = array_mois;
	var week_days = array_jours;
		
	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>Calendrier</title>\n"+
		"</head>\n"+
		"<body bgcolor=\"#FEF7D3\">\n"+
		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
		"<tr><td bgcolor=\"#F4AD64\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr>\n	<td bgcolor=\"#F4AD64\"><a href=\"javascript:window.opener.show_calendar2('"+
		+str_form+"','"+str_target+"', '"+ dt2dtstr(dt_prev_month)+"'+document.cal.time.value);\">"+
		"<img src=\"images/pages/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\"previous month\"></a></td>\n"+
		"	<td bgcolor=\"#F4AD64\" colspan=\"5\">"+
		"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">"
		+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
		"	<td bgcolor=\"#F4AD64\" align=\"right\"><a href=\"javascript:window.opener.show_calendar2('"
		+str_form+"','"+str_target+"', '"+dt2dtstr(dt_next_month)+"'+document.cal.time.value);\">"+
		"<img src=\"images/pages/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\"next month\"></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 bgcolor=\"#F5C695\">"+
		"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"+
		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=\"#B3D6F6\" align=\"right\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td bgcolor=\"#F6D5B3\" align=\"right\">";
				else
					// print working days of current month
					str_buffer += "	<td bgcolor=\"white\" align=\"right\">";

				if (dt_current_day.getMonth() == dt_datetime.getMonth())
					// print days of current month
					str_buffer += "<a href=\"javascript:window.opener."+str_target+
					".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value;window.opener."+str_form+
					".submit();window.close();\">"+
					"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
				else 
					// print days of other months
					str_buffer += "<a href=\"javascript:window.opener."+str_target+
					".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value;window.opener."+str_form+
					".submit(); window.close();\">"+
					"<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">";
				str_buffer += 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 += 

		"</table>\n" +
		"</tr>\n</td>\n</table>\n" +
		"<form name=\"cal\">\n<tr><td colspan=\"7\" bgcolor=\"#87CEFA\">"+
		"<font color=\"White\" face=\"tahoma, verdana\" size=\"2\">"+
		//"Time: <input type=\"text\" name=\"time\" value=\""+dt2tmstr(dt_datetime)+
		"<input type=\"hidden\" name=\"time\" value=\""+dt2tmstr(dt_datetime)+
		"\" size=\"8\" maxlength=\"8\"></font></td></tr>\n</form>\n" +

		"</body>\n" +
		"</html>\n";

	var vWinCal = window.open("", "Calendrier", 
		"width=200,height=220,status=no,resizable=yes,top=200,left=200");
	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+(\d+)\:(\d+)\:(\d+)$/;
	var re_date1 = /^(\d+)\-(\d+)\-(\d+)/;
	var re_date2 = /^(\d+)\/(\d+)\/(\d+)/;
	if (!re_date1.exec(str_datetime) && !re_date2.exec(str_datetime))
		return alert("Format de date non valable : "+ str_datetime);
		else
		{
		annee = RegExp.$3
		if (annee<99) annee = 20 + annee;
		return (new Date (annee, RegExp.$2-1, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6));
		}
}

//function dt2dtstr (dt_datetime) {
//	return (new String (
//			dt_datetime.getDate()+"/"+(dt_datetime.getMonth()+1)+"/"+dt_datetime.getFullYear()+" "));
//}
function dt2dtstr (dt_datetime) {
	var jour = new String(dt_datetime.getDate());
	jour = (jour.length<2 ? "0"+jour : jour);
	var mois = new String(dt_datetime.getMonth()+1);
	mois = (mois.length<2 ? "0"+mois : mois);
	
	//return (new String(jour+"/"+mois+"/"+dt_datetime.getFullYear()+" "));
	return (new String(jour+"/"+mois+"/"+dt_datetime.getFullYear()));
}

function dt2tmstr (dt_datetime) {
	return ""
	return (new String (
			dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));
}

// ChampDate le nom du champ contenant la date
// obligatoire true ou false si la présence de la date est obligatoire ou non
// valeurs de retour de la fonction
// true si la date est correcte sinon false


function TesteDate(ChampDate,obligatoire) {  
	var retour = "";
	var ValeurDate = new String(ChampDate.value);
	ValeurDate = ValeurDate.replace(" ","");
	if (ValeurDate.length!="") {
		if (ValeurDate.length!=8 && ValeurDate.length!=10) {
			retour = 'Date erronée : ' + ValeurDate + ' (Format accepté : jj/mm/aa ou jj/mm/aaaa)';
		} else if ((ValeurDate.substring(2,3)!="/") || (ValeurDate.substring(5,6)!="/")) {
			retour = 'Séparateur de date erronée : ' + ValeurDate + ' (Format accepté : jj/mm/aa ou jj/mm/aaaa)';
		} else if (ValeurDate.substring(3,5)>"12") {
			retour = 'Mois erroné : ' + ValeurDate + ' (Format accepté : jj/mm/aa ou jj/mm/aaaa)';
		} else {
			var Annee = ValeurDate.substring(6,ValeurDate.length);
			if (Annee.length<3) {
				if (Number(Annee)<40) {
					Annee = "20"+Annee;
				} else {
					Annee = "19"+Annee;
				}
			}
			var Mois = ValeurDate.substring(3,5);
			var Jour = ValeurDate.substring(0,2);
			var JourErrone = false;
			switch (Mois) {
				case '01':
				case '03':
				case '05':
				case '07':
				case '08':
				case '10':
				case '12':
					if (Jour<"01" || Jour>"31") {
						JourErrone = true;
					}
					break;
				case '04':
				case '06':
				case '09':
				case '11':
					if (Jour<"01" || Jour>"30") {
						JourErrone = true;
					}
					break;
				case '02':
					if (Jour<"01" || Jour>"29") {
						JourErrone = true;
					}
					if (Jour==29 && ((Annee/4)!=parseInt(Annee/4))) JourErrone = true; // Année bisextiles
					
					break;
				default :
						JourErrone = true;
					break;
			}
			if (JourErrone) {
				retour = 'Jour erroné : ' + ValeurDate + ' (Format accepté : jj/mm/aa ou jj/mm/aaaa)';
			} else {
				var jourdhui = new Date();
				JourErrone = true;
				if (Number(Annee)>=jourdhui.getYear()) {
					if (Number(Mois)>=(jourdhui.getMonth()+1)) {
						if (Number(Jour)>=jourdhui.getDate()) {
							JourErrone = false;
						}
					}
				}
				if (JourErrone && 1==2) {
					Jour = (jourdhui.getDate()<10 ? "0"+jourdhui.getDate():jourdhui.getDate());
					Mois = ((jourdhui.getMonth()+1)<10 ? "0"+(jourdhui.getMonth()+1):(jourdhui.getMonth()+1));
					ChampDate.value = Jour + "/" + Mois + "/" + jourdhui.getYear();
				}
			}
		}
	} else {
			if (obligatoire) {
				retour = 'Saisissez une date (Format accepté : jj/mm/aa ou jj/mm/aaaa)';
			}
	}
	if (retour!="") {
		alert(retour);
		ChampDate.focus();
	}
	return (retour=="");
	
}