
function resetField(componentId) {
	document.getElementById(componentId).value="";
}

function init_calendar(str_target, str_datetime, pattern) {
	str_datetime = null;
	show_calendar(str_target, str_datetime, pattern);
}

function show_calendar(str_target, str_datetime, pattern) {

	if(navigator.appName=="Netscape"){
		if (navigator.language.indexOf("fr")!=-1) {
			var arr_months = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
				"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"];
			var week_days = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"];
		}else {
			if (navigator.language.indexOf("it")!=-1) {
				var arr_months = ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
					"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"];
				var week_days = ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"];
			}else {
				if (navigator.language.indexOf("es")!=-1) {
					var arr_months = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
						"Julio", "Agosto", "Setiembre", "Octubre", "Noviembre", "Diciembre"];
					var week_days = ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"];
				} else {
					if (navigator.language.indexOf("de")!=-1) {
					    var arr_months = ["Januar", "Februar", "März", "April", "Mai", "Juni",
							"Juli", "August", "September", "Oktober", "November", "Dezember"];
						var week_days = ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"];
					} else {
						var arr_months = ["January", "February", "March", "April", "May", "June",
							"July", "August", "September", "October", "November", "December"];
						var week_days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
					}
				}
			}
		}
		
	
	}
	else{//Internet Explorer...
		if (navigator.browserLanguage=="fr") {
			var arr_months = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
				"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"];
			var week_days = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"];
		}else {
			if (navigator.browserLanguage=="it") {
				var arr_months = ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
					"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"];
				var week_days = ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"];
			}else {
				if (navigator.browserLanguage=="es") {
					var arr_months = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
						"Julio", "Agosto", "Setiembre", "Octubre", "Noviembre", "Diciembre"];
					var week_days = ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"];
				} else {
					if (navigator.browserLanguage=="de") {
					    var arr_months = ["Januar", "Februar", "März", "April", "Mai", "Juni",
							"Juli", "August", "September", "Oktober", "November", "Dezember"];
						var week_days = ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"];
					} else {
						var arr_months = ["January", "February", "March", "April", "May", "June",
							"July", "August", "September", "October", "November", "December"];
						var week_days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
					}
				}
			}
		}
	}
			
	var n_weekstart = 1; // day week starts from (normally 0 or 1)
	var dt_datetime;
	 
	if (str_datetime == null) {
		dt_datetime = new Date();
		str_datetime = dt_datetime;
	}else{
		dt_datetime = str2dt2(str_datetime,pattern);
	}
	
	var dt_prev_month = new Date(dt_datetime);
	dt_prev_month.setMonth(dt_datetime.getMonth()-1);
	if (dt_datetime.getMonth()%12 != (dt_prev_month.getMonth()+1)%12) {
		dt_prev_month.setMonth(dt_datetime.getMonth());
		dt_prev_month.setDate(0);
	}
	
	var dt_next_month = new Date(dt_datetime);
	dt_next_month.setMonth(dt_datetime.getMonth()+1);
	if ((dt_datetime.getMonth() + 1)%12 != dt_next_month.getMonth()%12)
		dt_next_month.setDate(0);
	
	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=\"White\">\n");

	str_buffer = str_buffer + "<table cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
		"<tr><td bgcolor=\"#6A8EA4\" color=\"#FFFFFF\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr>\n	<td bgcolor=\"#6A8EA4\"><a href=\"javascript:window.opener.show_calendar('"+
		str_target+"', '"+ dt2dtstr2(dt_prev_month,pattern)+"','"+pattern+"');\">"+
		"<img src=\"" + webContext+ "/images/back.gif\" border=\"0\""+
		" alt=\"previous month\"></a></td>\n"+
		"	<td bgcolor=\"#6A8EA4\" colspan=\"5\" align=\"center\">"+
		"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">\n";
	
	var buff = "";
	
		var dt_month = new Date(dt_datetime);
		var strdt_month = "";
		buff = "<SELECT size=\"1\" name=\"cbMonth\" id=\"cbMonth\" onchange=\"window.opener.show_calendar('" +
			str_target+"', cbMonth.value, '"+pattern+"')\">\n";
		for (tm=0;tm<12;tm++) {
			dt_month.setDate(1);
			dt_month.setMonth(tm);
			strdt_month = dt2dtstr2(dt_month,pattern);
			buff = buff + "<OPTION value=\"" + strdt_month + "\" ";
			if (tm==dt_datetime.getMonth())
				buff = buff + "selected=\"selected\" ";
			buff = buff + ">"+ arr_months[tm] + "</OPTION>\n";
		}
		buff = buff + "</SELECT>\n";

		str_buffer = str_buffer + buff; //str_buffer + arr_months[dt_datetime.getMonth()];

		var dt_year = new Date(dt_datetime);
		var strdt_year = "";
		buff = "<SELECT size=\"1\" name=\"cbYear\" id=\"cbYear\" onchange=\"window.opener.show_calendar('" +
			str_target+"', cbYear.value, '"+pattern+"')\">\n";
		var curAn = dt_datetime.getFullYear();
		var scopeInf = 70;  // a. moreau le 19/07/2004
		var scopeSup = 30;
		for (ta=curAn-scopeInf;ta<=curAn+scopeSup;ta++) {
			dt_year.setDate(1);
			dt_year.setFullYear(ta);
			strdt_year = dt2dtstr2(dt_year,pattern);
			buff = buff + "<OPTION value=\"" + strdt_year + "\" ";
			if (ta==curAn)
				buff = buff + "selected=\"selected\" ";
			buff = buff + ">"+ ta + "</OPTION>\n";
		}
		buff = buff + "</SELECT>\n";

		str_buffer = str_buffer + buff;//str_buffer + dt_datetime.getFullYear();
	

/*
	str_buffer = str_buffer + arr_months[dt_datetime.getMonth()] + " ";
	str_buffer = str_buffer + dt_datetime.getFullYear();
*/	

	str_buffer = str_buffer + "</font></td>\n<td bgcolor=\"#6A8EA4\" align=\"right\"><a href=\"javascript:window.opener.show_calendar('"
		+str_target+"', '"+dt2dtstr2(dt_next_month,pattern)+"','"+pattern+"');\">"+
		"<img src=\"" + webContext+ "/images/forward.gif\" 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=\"#DBE2EB\">"+
		"<font color=\"black\" 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=\"#DBEAF5\" align=\"right\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td bgcolor=\"#DBE2EB\" 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='"+dt2dtstr2(dt_current_day,pattern)+"'; 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='"+dt2dtstr2(dt_current_day,pattern)+"'; 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" +
		"</body>\n" +
		"</html>\n";
	var vWinCal = window.open("", "Calendar", 
		"width=250,height=220,status=no,resizable=no,top=200,left=200");
	vWinCal.opener = self;
	vWinCal.focus();
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}

function str2dt2 (str_datetime,pattern) {

	var temp = new String(pattern);
	temp=pattern.replace(/dd/,"(\\d+)");
	temp=temp.replace(/mm/,"(\\d+)");
	if (temp.match(/yyyy/))
		temp=temp.replace(/yyyy/,"(\\d+)");
	else 
		temp=temp.replace(/yy/,"(\\d+)");
	var re_date = new RegExp(temp);
	re_date.exec(str_datetime);
	var dayIndex = pattern.indexOf("dd");
	var monthIndex = pattern.indexOf("mm");
	var yearIndex = pattern.indexOf("yy");
	if (dayIndex < monthIndex) {
		if (monthIndex < yearIndex)
			return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1)); // dd...mm...yy
		else {
			if (dayIndex < yearIndex)
				return (new Date (RegExp.$3, RegExp.$1, RegExp.$2-1)); // dd...yy...mm
			else
				return (new Date (RegExp.$1, RegExp.$3, RegExp.$2-1)); // yy...dd...mm
		}
	}
	else {
		if (dayIndex < yearIndex)
			return (new Date (RegExp.$2-1, RegExp.$3, RegExp.$1)); // mm...dd...yy
		else {
			if (monthIndex < yearIndex)
				return (new Date (RegExp.$2-1, RegExp.$1, RegExp.$3)); // mm...yy...dd
			else
				return (new Date (RegExp.$1, RegExp.$2-1, RegExp.$3)); // yy...mm...dd
		}
	}
	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1));
}

function dt2dtstr2 (dt_datetime, pattern) {

	var retour = new String(pattern);
	if (dt_datetime.getDate()<10)
		retour=retour.replace(/dd/,"0"+dt_datetime.getDate().toString());
	else
		retour=retour.replace(/dd/,dt_datetime.getDate().toString());
	if ((dt_datetime.getMonth()+1)<10)
		retour=retour.replace(/mm/,"0"+(dt_datetime.getMonth()+1).toString());
	else
		retour=retour.replace(/mm/,(dt_datetime.getMonth()+1).toString());
	if (retour.match(/yyyy/))
		retour=retour.replace(/yyyy/,dt_datetime.getFullYear().toString());
	else
		retour=retour.replace(/yy/,dt_datetime.getYear().toString());
	
	return retour;
}

