//Copyright 2007 www.chatlb.net
//Version  1.0

var Calendar = 
{
	Root: "",
	Id: "ChatLb_Net_Calendar",
	CalFormName: "ChatLB_Net_Calendar_Form",
	CurrentField: "",
	Div: null,
	Days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
	Months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", 
		"October", "November", "December"],
	CurrentDate: new Date(),
	CurrentZoom: 0,
	CurrentFade: 0,
	WriteIcon: function (FormName, FieldName, pos)
	{
		if(!pos)
			pos = {"top": 0, "left": 0};
		document.open();
		var str = "<img class=\"Calendar\" src=\"{0}/Images/Icons/Calendar.Gif\" onclick=\"Calendar.ShowCalendar('{1}', '{2}', this, {3}, {4})\" /><BR/>".Format(Calendar.Root, FormName, FieldName, pos.top, pos.left);
		document.write(str);
		if(!document.getElementById(Calendar.Id))
			document.write("<div id={0} class=CalendarDiv></div>".Format(Calendar.Id));
		document.close();
		Calendar.Div = document.getElementById(Calendar.Id);
	},
	MoveNext: function()
	{
		var d = Calendar.CurrentDate;
		d.setMonth(d.getMonth() + 1);
		Calendar.InitCalValues(d);
		Calendar.Change();
	},
	MoveBack: function()
	{
		var d = Calendar.CurrentDate;
		d.setMonth(d.getMonth() - 1);
		Calendar.InitCalValues(d);
		Calendar.Change();
	},
	FadeIn: function()
	{
		with(Calendar)
		{
			if(CurrentFade >= 98)
				return;
			
			if(CurrentFade == 0)
				Div.style.visibility = "visible";
			
			CurrentFade += 2;
			
			if(Div.style.filter)
				Div.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity={0})".Format(CurrentFade);
			else
				Div.style.opacity = CurrentFade/100;
				
			setTimeout(FadeIn, 10);
		}
	},
	FadeOut: function()
	{
		with(Calendar)
		{
			CurrentFade -= 10;
			if(Div.style.filter)
				Div.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity={0})".Format(CurrentFade);
			else
				Div.style.opacity = CurrentFade/100;
				
			if(CurrentFade < 10)
			{
				Div.style.visibility = "hidden";
				return;
			}
			setTimeout(FadeOut, 10);
		}
	},
	Zoomout: function()
	{
		with(Calendar)
		{
			CurrentZoom -= 10;
			Div.style.zoom = CurrentZoom + "%";
			if(CurrentZoom < 10)
			{
				Div.style.visibility = "hidden";
				return;
			}
			setTimeout(Zoomout, 10);
		}
	},
	Zoomin: function()
	{
		with(Calendar)
		{
			if(CurrentZoom >= 100)
				return;

			if(CurrentZoom == 0)
				Div.style.visibility = "visible";
				
			CurrentZoom += 10;
			Div.style.zoom = CurrentZoom + "%";
			setTimeout(Zoomin, 10);
		}
	},
	Close: function()
	{
		Calendar.Zoomout();
		Calendar.FadeOut();
	},
	Change: function()
	{
		var d = Calendar.CurrentDate;
		d.setMonth(document.getElementById("Cal_Months").value);
		d.setFullYear(document.getElementById("Cal_Years").value);
		document.getElementById("CalBody").innerHTML = Calendar.CalDaysTable(d);
	},
	ShowCalendar: function (FormName, FieldName, icon, _top, _left)
	{
		with(Calendar)
		{
			CurrentField = document.forms[FormName][FieldName];
			var d = GetCurrentFieldDate();
			
			if(Div.innerHTML == "")
			{
				var str="{0}<div id=CalBody>{1}</div>{2}";
				
				var m = ["<select id=Cal_Months onchange=Calendar.Change()>"];
				for(var i = 0;i < Months.length; i++)
				{
					m.push("<option value={0}>{1}</option>".Format(i, Months[i]));
				}
				m.push("</select>");

				var y = ["<select id=Cal_Years onchange=Calendar.Change()>"];
				for(var i = d.getFullYear() - 60; i < d.getFullYear() + 5; i++)
				{
					y.push("<option value={0}>{0}</option>".Format(i));
				}
				y.push("</select>");
				
				var str1 = "<div class=CalHeader><table width=100%><TR><td><img src=\"{0}/Images/Icons/back.gif\" Alt=Previous onclick=Calendar.MoveBack()></td><TD>{1}</td><td>{2}</td><td><img src=\"{0}/Images/Icons/fwd.gif\" Alt=Next onclick=Calendar.MoveNext()></td><td><img src=\"{0}/Images/Icons/close_white.gif\" Alt=Close align=right onclick=Calendar.Close()></td></table></div>".Format(Root, m.join(""), y);
				var str2 = CalDaysTable(d);
				var str3 = "";
				Div.innerHTML = str.Format(str1, str2, str3);
			}
			InitCalValues(d);
			
			var pos = GetPosition(icon);
			
			with(Div.style)
			{
				top = (pos.top + _top) + "px";
				left = pos.left + _left + (new Dimension(icon)).width + 2 + "px";
				Zoomin();
				FadeIn();
			}
		}
	},
	CalDaysTable: function(date)
	{
		var m =date.getDate();
		var cols=7, rows=6;
		var date1 = new Date(date.toString());
		date1.setDate(1);
		var StartDay = parseInt(date1.getDay());
		var bool = 1, start = 0;
		var tm = date.getMonth() + 1;
		var limit= 30;
		if((tm==1)||(tm==3)||(tm==5)||(tm==7)||(tm==8)||(tm==10)||(tm==12))
			limit = 31;
		if(tm==2)
		{
			if(parseInt(date.getFullYear())%4==0)
				limit = 29;
			else
				limit = 28;
		}
		var str = ["<table border=1><THEAD><Tr>"];
		for(var i=0; i < cols; i++) 
			str.push("<td class=CalDays>" + Trank(Calendar.Days[i], 2) + "</td>");
		str.push("</tr></THEAD><TBODY>");
		var IsContinue = 1;
		str.push("<tr>"+((StartDay>0)? "<td colspan="+StartDay+">" + ("&nbsp;") + "</td>":""));
		for(var i=1; i <= limit; i++)
		{
			if((i + StartDay)%cols == 1 && i > 1) 
				str.push("<tr>");
			str.push("<td title=\"" + (Calendar.Days[(i + StartDay)%cols - 1 < 0? 6: (i + StartDay)%cols - 1] + " - " + Calendar.Months[date.getMonth()] + " " + i + " - " + date.getFullYear()) +"\" class=" + (i == m? "CalCurrent": "CalReg")+"><a href=\"javascript:void(0)\" onclick=Calendar.DayClick(this)>"+i+"</a></td>");
			if((i + StartDay)%cols==0)
				str.push("</tr>");
		}
		str.push("</TBODY></table>");
		return str.join("");
	},
	DayClick: function(el)
	{
		Calendar.CurrentField.value = "{0}/{1}/{2}".Format(Calendar.CurrentDate.getMonth() + 1, el.innerHTML, Calendar.CurrentDate.getFullYear());
		Calendar.Close();
	},
	GetCurrentFieldDate: function()
	{
		with(Calendar)
		{
			if(CurrentField != null)
			{
				try
				{
					var d = new Date(CurrentField.value);
				}
				catch(e){}
				if(isNaN(d))
					return new Date();
				return d;
			}
			else
				return new Date();
		}
	},
	Init: function()
	{
		if(!document.getElementById(Calendar.Id))
		{
			document.open();
			document.write("<div id={0} class=CalendarDiv></div>".Format(Calendar.Id, Calendar.CalFormName));
			document.close();
			Calendar.Div = document.getElementById(Calendar.Id);
		}
	},
	InitCalValues: function(d)
	{
		InitFormValue(document.getElementById("Cal_Years"), d.getFullYear());
		InitFormValue(document.getElementById("Cal_Months"), d.getMonth());
	}
}
