var _dynCalendar;
var firstDaySelectable;
_dynCalendar = 0;

function dynCalendar(divName, US_or_EU) {
//	document.writeln("<iframe id='"+ divName +"_iframe' frameborder=0 style='-moz-opacity:0; -khtml-opacity:0; opacity: 0; filter: alpha(opacity=0); display:none; position:absolute; top:0; left:0; width:100px; height:100px'></iframe>");
//	document.writeln("<div id='"+ divName +"' class=dynCalendar style='-moz-opacity:.95; -khtml-opacity:.95; opacity: .95; filter: alpha(opacity=95); position:absolute; display:none'>");
//	document.writeln("");
//	document.writeln("</div>");
	
	this.divName = divName;
	this.fieldID = null;

	this.openCalendar = dynCalendar_openCalendar;
	this.refreshCalendar = dynCalendar_refreshCalendar;
	this.closeCalendar = dynCalendar_closeCalendar;
	this.setCalDate = dynCalendar_setCalDate;
	this.US_or_EU = US_or_EU;

	this.generateDays = fDrawCal;

}


function dynCalendar_openCalendar(fieldID, defaultValue, offset_x, offset_y) {
	if(!offset_x)
		offset_x = 0;
	else
		offset_x = offset_x - 0;
	if(!offset_y)
		offset_y = 0;
	else
		offset_y = offset_y - 0;

	if(document.getElementById(fieldID)) {
		this.fieldID = fieldID;
		this.defaultDate = defaultValue;
		this.refreshCalendar();
		
		setPosition(this.divName, "icocal_"+ fieldID, 0 + offset_x, 16 + offset_y);
		setPosition(this.divName + "_iframe", "icocal_"+ fieldID, 0 + offset_x, 16 + offset_y);

		document.getElementById(this.divName).style.display = "block";

		document.getElementById(this.divName + "_iframe").style.width = document.getElementById(this.divName).offsetWidth;
		document.getElementById(this.divName + "_iframe").style.height = document.getElementById(this.divName).offsetHeight;
		
		document.getElementById(this.divName + "_iframe").style.display = "block";

		_dynCalendar = 1;
	}

}

function dynCalendar_closeCalendar() {
	if(document.getElementById(this.divName))
		document.getElementById(this.divName).style.display = "none";
	if(document.getElementById(this.divName + "_iframe"))
		document.getElementById(this.divName + "_iframe").style.display = "none";

	_dynCalendar = 0;
}


function dynCalendar_refreshCalendar() {

	if(document.getElementById(this.divName) && document.getElementById(this.divName +"_days")) {
		d = this.defaultDate;
		if(d=="") {
			da = new Date();
			d = new Array();
			d[0] = da.getFullYear();
			d[1] = da.getMonth()+1;
			d[2] = da.getDay();
		}
		else {
			if(this.US_or_EU == "US") {
				d = d.split("-");
			}
			else {
				d = d.split("/");
				d = d.reverse();
			}
		}

		this.generateDays(d[0], d[1]);//, 30, 30, '10px', 'bold', 1);
	}
}


function dynCalendar_setCalDate(iYear, iMonth, iDay) {
	if(document.getElementById(this.fieldID)) {
		if(iMonth < 10)
			iMonth = "0"+ iMonth;
		if(iDay < 10)
			iDay = "0"+ iDay;

		if(this.US_or_EU == "US")
			value = iYear +"-"+ iMonth +"-"+ iDay;
		else
			value = iDay +"/"+ iMonth +"/"+ iYear;

		document.getElementById(this.fieldID).value = value;
		document.getElementById(this.fieldID).focus();
		this.closeCalendar();
	}
}
























var dDate = new Date();
var dCurMonth = dDate.getMonth();

var dCurDayOfMonth = dDate.getDate();
var dCurYear = dDate.getFullYear();
var 
objPrevElement = new Object();
function fToggleColor(myElement) {
	var toggleColor = "#ff0000";
	if (myElement.id == "calDateText") {
		if (myElement.color == toggleColor)
			myElement.color = "";
		else
			myElement.color = toggleColor;
	}
	else if (myElement.id == "calCell") {
		for (var i in myElement.children) {
			if (myElement.children[i].id == "calDateText") {
				if (myElement.children[i].color == toggleColor)
					myElement.children[i].color = "";
				else
					myElement.children[i].color = toggleColor;
			}
		}
	}
}


function fSetSelectedDay(myElement){
	if (myElement.id == "calCell") {
		if (!isNaN(parseInt(myElement.children["calDateText"].innerText))) {
			myElement.bgColor = "#C0C0C0";
			objPrevElement.bgColor = "";

			document.all.calSelectedDate.value = parseInt(myElement.children["calDateText"].innerText);

			objPrevElement = myElement;
		}
	}
}


function fGetDaysInMonth(iMonth, iYear) {
	var dPrevDate = new Date(iYear, iMonth, 0);
	return dPrevDate.getDate();
}


function fBuildCal(iYear, iMonth, lang, iDayStyle) {
	var aMonth = new Array();
	aMonth[0] = new Array(7);
	aMonth[1] = new Array(7);
	aMonth[2] = new Array(7);
	aMonth[3] = new Array(7);
	aMonth[4] = new Array(7);
	aMonth[5] = new Array(7);
	aMonth[6] = new Array(7);
	var dCalDate = new Date(iYear, iMonth-1, 1);
	var iDayOfFirst = dCalDate.getDay();
	if(iDayOfFirst==0)
		iDayOfFirst = 7;

	var iDaysInMonth = fGetDaysInMonth(iMonth, iYear);
	var iVarDate = 1;
	var i, d, w;

	if (iDayStyle == 2) {
		if (lang=="US") {
			aMonth[0][0] = "Monday";
			aMonth[0][1] = "Tuesday";
			aMonth[0][2] = "Wednesday";
			aMonth[0][3] = "Thursday";
			aMonth[0][4] = "Friday";
			aMonth[0][5] = "Saturday";
			aMonth[0][6] = "Sunday";
		}
		else {
			aMonth[0][0] = "Lundi";
			aMonth[0][1] = "Mardi";
			aMonth[0][2] = "Mercredi";
			aMonth[0][3] = "Jeudi";
			aMonth[0][4] = "Vendredi";
			aMonth[0][5] = "Samedi";
			aMonth[0][6] = "Dimanche";
		}
	}
	else if (iDayStyle == 1) {
		if (lang=="US") {
			aMonth[0][0] = "Mon";
			aMonth[0][1] = "Tue";
			aMonth[0][2] = "Wed";
			aMonth[0][3] = "Thu";
			aMonth[0][4] = "Fri";
			aMonth[0][5] = "Sat";
			aMonth[0][6] = "Sun";
		}
		else {
			aMonth[0][0] = "Lun";
			aMonth[0][1] = "Mar";
			aMonth[0][2] = "Mer";
			aMonth[0][3] = "Jeu";
			aMonth[0][4] = "Ven";
			aMonth[0][5] = "Sam";
			aMonth[0][6] = "Dim";
		}
	}
	else {
		if (lang=="US") {
			aMonth[0][0] = "Mo";
			aMonth[0][1] = "Tu";
			aMonth[0][2] = "We";
			aMonth[0][3] = "Th";
			aMonth[0][4] = "Fr";
			aMonth[0][5] = "Sa";
			aMonth[0][6] = "Su";
		}
		else {
			aMonth[0][0] = "Lu";
			aMonth[0][1] = "Ma";
			aMonth[0][2] = "Me";
			aMonth[0][3] = "Je";
			aMonth[0][4] = "Ve";
			aMonth[0][5] = "Sa";
			aMonth[0][6] = "Di";
		}
	}

	for (d = iDayOfFirst; d <= 7; d++) {
		aMonth[1][d-1] = iVarDate;
		iVarDate++;
	}

	for (w = 2; w < 7; w++) {
		for (d = 0; d < 7; d++) {
			if (iVarDate <= iDaysInMonth) {
				aMonth[w][d] = iVarDate;
				iVarDate++;
			}
		}
	}

	return aMonth;
}


function fDrawCal(iYear, iMonth, iCellWidth, iCellHeight, sDateTextSize, sDateTextWeight, iDayStyle) {
	var myMonth;

	if(document.getElementById('tbSelMonth'))
		document.getElementById('tbSelMonth').value = iMonth-0;
	if(document.getElementById('tbSelYear'))
		document.getElementById('tbSelYear').value = iYear-0;

	myMonth = fBuildCal(iYear, iMonth, this.US_or_EU, iDayStyle);
	myCal = "";
	myCal += "<table class=dynCalendar cellpadding=0 cellspacing=0>";
	myCal += "<tr class=days>";
	
	today = new Date();
	today = (today.getDate()<10?"0":"") + today.getDate() +"/"+ (today.getMonth()+1<10?"0":"") + (today.getMonth()+1) +"/"+ today.getFullYear();

	for(i=0; i<7; i++)
		myCal += "<td>" + myMonth[0][i] + "</td>";
	
	myCal += "</tr>";

	for (w = 1; w < 7; w++) {
		printThisLine = false;
		for (d = 0; d < 7; d++) {
			if (!isNaN(myMonth[w][d])) {
				printThisLine = true;
				break;
			}
		}

		if(printThisLine) {
		
			myCal += "<tr>";
			for (d = 0; d < 7; d++) {
				
				myCal += "<td";

				if(!isNaN(myMonth[w][d])) {
					
					day1 = new Date(iYear, iMonth-1, myMonth[w][d]+1);
					if(!firstDaySelectable)
						firstDaySelectable = new Date();
					isSelectable = (day1.getTime() >= firstDaySelectable.getTime());

					testday = (myMonth[w][d]-0<10?"0":"") + (myMonth[w][d]-0) +"/"+ (iMonth-0<10?"0":"") + (iMonth-0) +"/"+ iYear;
					myCal += (today==testday ? " id=today title=\"Aujourd'hui\"" : "") + (isSelectable ? " onMouseOver=\"this.className='over'\" onMouseOut=\"this.className=''\" onClick='"+ this.divName +".setCalDate("+iYear+", "+iMonth+", this.innerHTML)'" : " class=noselect") + ">" + myMonth[w][d];

				}
				else
					myCal += " style='cursor:default'>";
				
				myCal += "</td>";
			}
			myCal += "</tr>";
		}

	}
	myCal += "</table>";

//	if(document.getElementById(this.divName +"_days"))
		document.getElementById(this.divName +"_days").innerHTML = myCal;
}


function fUpdateCal(divName, iYear, iMonth) {
	myMonth = fBuildCal(iYear, iMonth, this.US_or_EU);
	//objPrevElement.bgColor = "";
	//document.all.calSelectedDate.value = "";

	for (w = 1; w < 7; w++) {
		for (d = 0; d < 7; d++) {
			if (!isNaN(myMonth[w][d]))
				calDateText[((7*w)+d)-7].innerText = myMonth[w][d];
			else
				calDateText[((7*w)+d)-7].innerText = " ";
		}
	}
}
























function setPosition(element, elementToPlace) {
	if(document.getElementById(elementToPlace) && document.getElementById(element)) {
		args = setPosition.arguments;

		var offsetX = 0;
		var offsetY = 0;
		try { offsetX += args[2]; }
		catch (e) { }

		try { offsetY += args[3]; }
		catch (e) { }

		var a = new Object();

		a = getPosition(document.getElementById(elementToPlace));

		document.getElementById(element).style.left = eval(a.x) + offsetX;
		document.getElementById(element).style.top = eval(a.y) + offsetY;
	}
}


function getPosition(element) {

	var elem=element, tagname="", x=0, y=0;
  
	while ((typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined")) {
		y+=elem.offsetTop;
		x+=elem.offsetLeft;
		tagname=elem.tagName.toUpperCase();

		if(tagname=="BODY")
			elem=0;

		if(typeof(elem)=="object")
			if (typeof(elem.offsetParent)=="object")
				elem=elem.offsetParent;
	}

	position = new Object();
	position.x = x;
	position.y = y;
	return position;
}

