//Copyright 2007 www.liteweb.net
//Version  1.0

var Calendar = 
{
Root: "",
	Id: "liteweb_Net_Calendar",
	CalFormName: "liteweb_Net_Calendar_Form",
	CurrentField: "",
	Div: null,
	Days: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
	Months: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", 
		"Oct", "Nov", "Dec"],
	CurrentDate: new Date(),
	CurrentZoom: 0,
	CurrentFade: 0,
	_initDiv: function(oldway)
	{
		if(oldway)
		{
			if(!document.getElementById(Calendar.Id))
				document.write("<div id={0} class=CalendarDiv></div>".Format(Calendar.Id));
			Calendar.Div = document.getElementById(Calendar.Id);		
		}
		else
		{
			if(!document.getElementById(Calendar.Id))
			{
				var div = document.createElement("div");
				div.id = Calendar.Id;
				div.className = "CalendarDiv";
				document.body.insertBefore(div, null);
				Calendar.Div = document.getElementById(Calendar.Id);
			}
		}
	},
	WriteIcon: function (FormName, FieldName, pos)
	{
		Calendar._initDiv(true);
		if(!pos)
			pos = {"top": 0, "left": 0};
		document.open();
		var str = "<img class=\"Calendar\" src=\"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);
		document.close();
	},
	FillCalDiv: function(d, div)
	{
		var _cM = d.getMonth(), _cY = d.getFullYear();
		
		with(Calendar)
		{
			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}{2}>{1}</option>".Format(i, Months[i], _cM == i? " selected": ""));
			m.push("</select>");

			var y = ["<select id=Cal_Years onchange=Calendar.Change()>"];
			for(var i = d.getFullYear() - 5; i < d.getFullYear() + 5; i++)
				y.push("<option value={0}{1}>{0}</option>".Format(i, _cY == i? " selected": ""));
			y.push("</select>");
			
			var str1 = "<div class=CalHeader><table><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></table></div>".Format(Root, m.join(""), y);
			var str2 = CalDaysTable(d);
			var str3 = "";
			(div || Div).innerHTML = str.Format(str1, str2, str3);
		}
	},
	StickTo: function(fieldId)
	{
		Calendar._initDiv();
		var el = document.getElementById(fieldId);
		el.onfocus = new Function("Calendar.ShowFieldCalendar('{0}')".Format(el.id));
	},
	ShowFieldCalendar: function (id)
	{
		var el = document.getElementById(id);
			
		with(Calendar)
		{
			CurrentField = el;
			var d = GetCurrentFieldDate();
			
			FillCalDiv(d);
			InitCalValues(d);
			
			var pos = GetPosition(el);
			
			
			with(Div.style)
			{
				var main = document.body.childNodes[0].childNodes[0];
				if(document.body.childNodes[0].nodeType == 3)
					main = document.body.childNodes[1].childNodes[1];
				var dim = new Dimension(el);
				var dimbody = new Dimension(main);
				var posbody = GetPosition(main);
				
				var _left = (pos.left);
				if(pos.left + 257 > (dimbody.width + posbody.left))
				{
					_left = pos.left - 257 + dim.width;
				}
				
				top = (pos.top + dim.height) + "px";
				left = _left  + "px";
				//Zoomin();
				FadeIn();
			}
		}
	},
	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";
			
			if("string" == typeof Div.style.filter)
			{
				CurrentFade += 10;
				Div.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity={0})".Format(CurrentFade);
			}
			else
			{
				CurrentFade += 2;
				Div.style.opacity = CurrentFade/100;
			}	
			setTimeout(FadeIn, 10);
		}
	},
	FadeOut: function()
	{
		with(Calendar)
		{
			
			
			if("string" == typeof Div.style.filter)
			{
				CurrentFade -= 20;
				Div.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity={0})".Format(CurrentFade);
			}
			else
			{
				CurrentFade -= 10;
				Div.style.opacity = CurrentFade/100;
			}
			if(CurrentFade < 10)
			{
				Div.style.visibility = "hidden";
				CurrentFade = 0;
				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 += 20;
			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)
	{
		if("string" == typeof icon)
			icon = document.getElementById(icon);
			
		with(Calendar)
		{
			CurrentField = document.forms[FormName][FieldName];
			var d = GetCurrentFieldDate();
			
			FillCalDiv(d);

			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++)
		{
			var key = "{0}/{1}/{2}".Format(tm, i, date.getFullYear());
			
			if((i + StartDay)%cols == 1 && i > 1) 
				str.push("<tr>");
			var title = (Calendar.Days[(i + StartDay)%cols - 1 < 0? 6: (i + StartDay)%cols - 1] + " - " + Calendar.Months[date.getMonth()] + " " + i + " - " + date.getFullYear());
			str.push("<td title=\"{0}\" class=\"{1}\"><a href=\"javascript:void(0)\" onclick=\"Calendar.DayClick('{2}', '{0}')\">{3}</a></td>".Format(title, (i == m? "CalCurrent": (Calendar.Events && Calendar.Events[key]? "CalHasEvent": "CalReg")), key, i));
			if((i + StartDay)%cols==0)
				str.push("</tr>");
		}
		str.push("</TBODY></table>");
		return str.join("");
	},
	DayClick: function(key, title)
	{
		if(Calendar.Events && Calendar.Events[key])
		{
			var param = "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,copyhistory=yes,resizable=yes width=355 height=173 top=100 left=400";
			var html = [];//["<html><head><title>{0}Events for {1}</title></head>".Format(document.getElementById("CalTitle").innerHTML + " ", title)];
			//html.push("<body style=\"background:url(styles/images/Calendar-Background_2.png) no-repeat;margin:15px 50px 10px 20px;font-size:12px;font-family:verdana;\">");
			for(var i = 0; i <Calendar.Events[key].length; i++)
			{
				html.push("<p>{0}</p>".Format(Calendar.Events[key][i]));
			}
			//html.push("</body></html>");
			//var w = window.open("", "", param);
			//w.document.write(html.join(""));
			document.getElementById("CalendarDetails").innerHTML = html.join("");
		}
		return;
		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());
	}
}
