var CALENDAR_ROW_PREFIX = "W";
var CALENDAR_COL_PREFIX = "D";

var CALENDAR_ROW_PREFIX = "W";
var CALENDAR_COL_PREFIX = "D";

function Calendar(name,strMonth,strWeek,date,postfct)
{
	var trs;
	this.div = document.getElementById(name+"_div");
	this.div.objlnk = this;
	this.name = name;
	this.main = document.getElementById(name+"_main");
	trs = this.main.getElementsByTagName("TR");
	this.mainTitle = trs[0].getElementsByTagName("TD")[1];
	this.prevMonth = trs[0].getElementsByTagName("TD")[0];
	this.nextMonth = trs[0].getElementsByTagName("TD")[2];
	this.prevMonth.objlnk = this;
	this.nextMonth.objlnk = this;
	this.weekTitle = trs[1];
	this.setDate();
	this.strWeek = strWeek;
	this.strMonth = strMonth;
	this.postfct = postfct;
	this.refDay();
	this.displayWeek();
	this.displayMonth();
}

Calendar.prototype.setDate= function(date)
{
	if(!date) date = new Date();
	if(typeof(date) == 'string')
	{
		var sdate = date;
		var idx = sdate.indexOf("/");
		date = new Date();
		date.setDate(sdate.substring(0,idx));
		sdate = sdate.substring(idx+1);
		idx = sdate.indexOf("/");
		date.setMonth(Number(sdate.substring(0,idx))-1);
		date.setYear(sdate.substring(idx+1));
	}
	this.dat = date;
	this.dat.setHours(0,0,0,0);
	this.month = this.dat.getMonth();
	this.year = this.dat.getFullYear();
}
Calendar.prototype.display = function(img,frm,input)
{
	var input = img ? document.forms[frm].elements[input] : null;
	if(!input || input == this.input)
	{
		this.input = null;
		this.div.style.display ="none";
	}
	else
	{
		var coor = JSTool.getOffsetCoor(img)
		this.setInput(input);
		this.div.style.left = (coor[JSTool.coor.X] + img.width - 130 ) + "px";
		this.div.style.top = coor[JSTool.coor.Y] - 93 + "px";
		this.div.style.display ="block";
	}
}

Calendar.prototype.setInput = function(input)
{
	this.input = input;
	this.setDate(input.value);
	this.displayMonth();
}

Calendar.prototype.refDay = function()
{
	var row;
	var trs = this.main.getElementsByTagName("TR");
	this.days = new Array();
 	for(var i=0;i<6;i++)
	{
		this.days[i] = new Array();
		row = trs[i+2];
		for(var j=0;j<7;j++)
		{
			this.days[i][j] = row.getElementsByTagName("TD")[j];
			this.days[i][j].objlnk = this;
		}
	}
}

Calendar.prototype.displayWeek = function()
{
	for(var i=0;i<7;i++)
		this.weekTitle.getElementsByTagName("TD")[i].innerHTML = this.strWeek[i];
}

Calendar.prototype.displayMonth = function()
{

	var dat = new Date();
	var lmonth = this.month;
	var dayNum = 1;
	var week;var day;var td;
	this.mainTitle.innerHTML = this.strMonth[lmonth] + " " + this.year;
	for(var i=0;i<7;i++)
	{
		this.days[0][i].innerHTML = "";
		this.days[4][i].innerHTML = "";
		this.days[5][i].innerHTML = "";
		this.days[0][i].className="";
		this.days[4][i].className="";
		this.days[5][i].className="";
	}

	dat.setFullYear(this.year,this.month,1);
	dat.setHours(0,0,0,0);

	while(lmonth == dat.getMonth())
	{
		week = this.getWeekOfMonth(dat);
		day = this.getDay(dat);
		td = this.days[week][day];
		if(this.dat.toString() == dat.toString())
		{
			td.className="caltoday";
   			td.today=true;
		}
		else
		{
			td.className="caldayoff";
			td.today=false;
		}
		td.innerHTML = dayNum;
		dayNum++;
		dat.setMonth(this.month,dayNum);
	}
}
Calendar.prototype.getDay = function(dat)
{
	var day = (dat.getDay() + 6) % 7;
	return day;
}

Calendar.prototype.getWeekOfMonth = function(dat)
{
	var ldat = new Date(dat.getFullYear(),dat.getMonth(),1);
	var dayNb = dat.getDate()+this.getDay(ldat)-1;
	return 	parseInt(dayNb/7);
}

Calendar.prototype.changeMonth = function(delta)
{
	this.month+=delta;
	if(this.month<0)
	{
		this.month = 12+this.month;
		this.year--;
	}
	if(this.month>11)
	{
		this.month = 12-this.month;
		this.year++;
	}
	this.displayMonth();
}

Calendar.prototype.switchDate = function(td)
{
	var cl = td.className;
	if(cl != "")
	{
		if(cl == "caltoday" || cl == "caldayoff")
			td.className = "caldayon";
		else
			td.className = td.today ? "caltoday" : "caldayoff";
	}
}
Calendar.prototype.getDate = function(w,d)
{
	var dat = new Date();dat.setFullYear(this.year,this.month,1);
	var day = w*7+d;
	var day1 = this.getDay(dat);
	var month;
	this.selDate = new Date(this.year,this.month,day-day1+1);
	if(day-day1+1>0 && this.selDate.getMonth() == dat.getMonth())
	{
		day = this.selDate.getDate()+""; day = (day.length < 2 ? "0" : "") + day;
		month = (this.selDate.getMonth() + 1)+""; month = (month.length < 2 ? "0" : "") + month;
		if(this.input)
			this.input.value = day + "/" + month + "/" +this.selDate.getFullYear();
		if(this.postfct) this.postfct();
		this.display();
	}
}
