// JavaScript Document
	
function showCalendar(id_target, str_datetime, id_div) {
	switch (global_lang) {
		case 'EN':
			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"];
			break;
		case 'DE':
			var arr_months = ["Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
			var week_days = ["Son", "Mon", "Die", "Mit", "Don", "Frei", "Sam"];
			break;
		default:
			var arr_months = ["Janvier", "F&eacute;vrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Ao&ucirc;t", "Septembre", "Octobre", "Novembre", "D&eacute;cembre"];
			var week_days = ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"];
	}
	
	var n_weekstart = 1; // day week starts from (normally 0 or 1)

	var dt_datetime = ((str_datetime == null) || (str_datetime == "") ?  new Date() : str2dt(id_target, 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);
	
	var today_datetime = new Date();
	
	// date d'aujourd'hui
	var today_datetime = new Date();
	
	// html generation (feel free to tune it for your particular application)
	// print calendar header
	var str_buffer = new String (
		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
		"<tr><td bgcolor=\"#DDDDDD\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr>\n	<td bgcolor=\"#DDDDDD\"><a href=\"javascript:\" class=\"linkToMonth\" id_target=\""+id_target+"\" str_datetime=\""+dt2dtstr(dt_prev_month)+"\">"+
		"<img src=\"/main/FCK/Image/pictos/arrow_left.gif\" border=\"0\""+
		" alt=\"\"></a></td>\n"+
		"	<td bgcolor=\"#DDDDDD\" colspan=\"5\">"+
		"<font color=\"#000000\" face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\">"
		+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
		"	<td bgcolor=\"#DDDDDD\" align=\"right\"><a href=\"javascript:\" class=\"linkToMonth\" id_target=\""+id_target+"\" str_datetime=\""+dt2dtstr(dt_next_month)+"\">"+
		"<img src=\"/main/FCK/Image/pictos/arrow_right.gif\" border=\"0\""+
		" alt=\"\"></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=\"#333333\">"+
		"<font color=\"white\" face=\"Verdana, Arial, Helvetica, sans-serif\" 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() == today_datetime.getDate() &&
					dt_current_day.getMonth() == today_datetime.getMonth() &&
					dt_current_day.getYear() == today_datetime.getYear())
					// print current date
					str_buffer += "	<td bgcolor=\"#FFB6C1\" align=\"right\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td bgcolor=\"#DBEAF5\" align=\"right\">";
				else
					// print working days of current month
					str_buffer += "	<td bgcolor=\"white\" align=\"right\">";
				
				str_buffer += "<a href=\"javascript:\" id_target=\""+id_target+"\" str_datetime=\""+dt2dtstr(dt_current_day)+"\"";
				if (dt_current_day.getMonth() == dt_datetime.getMonth()) {
					// print days of current month
					str_buffer += " class=\"linkNumDay\">";
				}
				else {
					// print days of other months
					str_buffer += " class=\"linkNumDay linkOtherMonth\">";
				}
				str_buffer += dt_current_day.getDate()+"</a>";
						
				str_buffer += "</td>\n";
				dt_current_day.setDate(dt_current_day.getDate()+1);
		}
		// print row footer
		str_buffer += "</tr>\n";
	}
	// print calendar footer
	str_buffer +=
		"\n" +
		"</table>\n" +
		"</tr>\n</td>\n</table>\n";
	
	$(id_div).update(str_buffer); 
	//$(id_div).innerHTML;
}

function str2dt (id_target, str_datetime) {
	var re_date = /^(\d+)\/(\d+)\/(\d+)/;
	var ladate = new Date();
	var is_date = true;
	var sUrl = pathSite+"inc/check_date.asp";
	var check_date = file(sUrl+"?date_saisie="+str_datetime+"&anticache="+ladate.getTime());
	
	switch (global_lang) {
		case 'EN':
			var normeDate = "dd/mm/yyyy";
			break;
		case 'DE':
			var normeDate = "tt/mm/jjjj";
			break;
		default:
			var normeDate = "jj/mm/aaaa";
	}
	
	if (!re_date.exec(str_datetime)) is_date = false;
	if (check_date.responseText == "ko") is_date = false;
	
	if (!is_date) {
		$(id_target).value = normeDate;
		return new Date();
	}
	
	return (new Date (RegExp.$3, 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 behindIframe(id_div) {
	var f    = document.createElement("iframe");
	var o_x = $(id_div).positionedOffset()[0];
	var o_y = $(id_div).positionedOffset()[1];
	var o_width = $(id_div).getWidth();
	var o_height = $(id_div).getHeight();

	with(f.style){
		position			= "absolute";
	 	width    			= o_width+"px";
	  	height				= o_height+"px";;
	 	top					= o_y+"px";
	  	left				= o_x+"px";
	   	zIndex				= 3;
		border				= "0px";
		margin				= "0px";
		padding				= "0px";
	}
	
	if ($('iframe_'+id_div) != null) $('iframe_'+id_div).remove();
	
	f.setAttribute('id', 'iframe_'+id_div);
	$(id_div).getOffsetParent().appendChild(f);
}

function showCalendarWithIframe(id_target, str_datetime, id_div) {
	showCalendar(id_target, str_datetime, id_div);
	behindIframe.defer(id_div);
}

function majFieldDate(id_target, str_datetime, id_div) {
	$(id_target).value = str_datetime;
	hideCalendar(id_div);
}

function hideCalendar(id_div) {
	$(id_div).update(); 
	$(id_div).innerHTML;
	
	$('iframe_'+id_div).remove();
	Event.stopObserving(document.body, 'click', oCal.bfx);
}

function focusFieldDate(id_target, str_datetime, id_div, id_div_2) {
	switch (global_lang) {
		case 'EN':
			var normeDate = "dd/mm/yyyy";
			break;
		case 'DE':
			var normeDate = "tt/mm/jjjj";
			break;
		default:
			var normeDate = "jj/mm/aaaa";
	}
	
	if ($('iframe_'+id_div_2) != null) hideCalendar(id_div_2);
	
	var val = $(id_target).value;
	if (val == normeDate) $(id_target).value = '';
	showCalendarWithIframe(id_target, str_datetime, id_div);
}

var oCal = {
	fx: function(event, id_target, id_div) {
		var element = event.element();
		var elmtLink = Event.findElement(event, 'a');
		
		if (elmtLink) {
			var id_target = elmtLink.readAttribute('id_target');
			var str_datetime = elmtLink.readAttribute('str_datetime');
			
			if (elmtLink.hasClassName('linkToMonth')) showCalendarWithIframe(id_target, str_datetime, id_div);
			if (elmtLink.hasClassName('linkNumDay')) majFieldDate(id_target, str_datetime, id_div);
		}
		else {
			if (!(element.descendantOf(id_div))) {
				switch (global_lang) {
					case 'EN':
						var normeDate = "dd/mm/yyyy";
						break;
					case 'DE':
						var normeDate = "tt/mm/jjjj";
						break;
					default:
						var normeDate = "jj/mm/aaaa";
				}
				
				var val = $(id_target).value.RLTrim();
				if (val.length == 0) $(id_target).value = normeDate;
			
				hideCalendar(id_div);
			}
		}
	}
};

function blurFieldDate(id_target, id_div) {
	oCal.bfx = oCal.fx.bindAsEventListener(oCal, id_target, id_div);
	Event.observe(document.body, 'click', oCal.bfx);
}


