var calLightbox=null;

function calendarPicker(e,iid)
{
	calLightbox = new LightboxGeneric();
	calLightbox.start(200,200,"defaultLightbox");
	calCalendar=new QBSCalendar(iid);
	calCalendar.start(calLightbox.objLightbox,"pudrCal","closeCalendar()");
}

function closeCalendar()
{
	calLightbox.end();
}

var QBSCalendar = Class.create({
	
	initialize: function (input) {
		this.c=null;
		this.objCal=null;
		this.inp=$(input);
		value=this.inp.value;
		if(value)
			this.dVal=new Date(value);
		else
			this.dVal=new Date();
		this.month=this.dVal.getMonth();
		this.year=this.dVal.getFullYear();
		this.finishCallback=null;
	},
	
	start: function(container, classname, finishCallback) {
		this.finishCallback=finishCallback;

		this.c=$(container);
		var objBody = $$("body")[0];
		
		this.objCal = new Element("div", {
			"id" : "qbsCalendar",
			className : classname
		});
		this.c.appendChild(this.objCal);
		
		this.drawMonth();
	},
	
	drawMonth: function (month,year)
	{
		this.empty();
		if(month==null)
			month=this.month;
		if(year==null)
			year=this.year;
		var value=this.dVal;
		var tb=new Element("table");
		var tr=tb.insertRow(-1);
		var td=tr.insertCell(-1);
		var img=new Element("img", {
			src: QBS_base_url+"/graphics/arrow_left.png",
			alt: "<<"
		});
		img.onclick=this.__arrowclick(this,-1);
		td.appendChild(img);
		
		td=tr.insertCell(-1);
		td.appendChild(this._optionMonth(month));
		
		td=tr.insertCell(-1);
		td.appendChild(this._optionYear(year));
		
		td=tr.insertCell(-1);
		var img=new Element("img", {
			src: QBS_base_url+"/graphics/arrow_right.png",
			alt: ">>"
		});
		img.onclick=this.__arrowclick(this,1);
		td.appendChild(img);
		
		this.objCal.appendChild(tb);
		
		var today=new Date();
		today=new Date(today.getFullYear(),today.getMonth(),today.getDate());
		var d=new Date(year,month,1);
		tb=new Element("table", {
			'id' : 'date_picker'
		});
		this.objCal.appendChild(tb);
		tr=tb.insertRow(-1);
		tr.appendChild(new Element("th").update("S"));
		tr.appendChild(new Element("th").update("M"));
		tr.appendChild(new Element("th").update("T"));
		tr.appendChild(new Element("th").update("W"));
		tr.appendChild(new Element("th").update("T"));
		tr.appendChild(new Element("th").update("F"));
		tr.appendChild(new Element("th").update("S"));
		
		tr=tb.insertRow(-1);
		for (var i=0, ctr=0;i<d.getDay();i++, ctr++)
		{
			td=tr.insertCell(-1);
			td.className="othermonth";
		}
		var daysInMonth=this._getDaysInMonth(d);
		for (i=0; i<daysInMonth; i++, ctr++)
		{
			if (ctr>=7)
			{
				ctr=0;
				tr=tb.insertRow(-1);
			}
			td=tr.insertCell(-1);
			$(td).update(i+1);
			d.setDate(i+1);
			if(d.valueOf()==value.valueOf())
			{
				td.className="selected";
			}
			else if(d.valueOf()==today.valueOf())
			{
				td.className="today";
			}
			else if(d.valueOf()<today.valueOf())
			{
				td.className="passed";
			}
			else
			{
				td.className="future";
			}
			td.onmouseover=function () {this.className='selected'; };
			td.onmouseout=this.__tdMouseOutFunction(td,td.className);
			td.onclick=this.__tdOnClickFunction(this,d.valueOf());
		}
		for (;ctr<7;ctr++)
		{
			td=tr.insertCell(-1);
			td.className="othermonth";
		}
		var button=new Element("input", {
			'type' : 'button',
			'value' : 'Today'
		});
		var bToday=new Date();
		button.onclick=this.__tdOnClickFunction(this,bToday.valueOf());
		this.objCal.appendChild(button);
		var button=new Element("input", {
			'type' : 'button',
			'value' : 'Cancel'
		});
		button.onclick=this.__cancel(this),
		this.objCal.appendChild(button);
	},
	
	_getDaysInMonth : function(d)
	{
		var dd = new Date(d.getFullYear(), d.getMonth()+1, 0);
		return dd.getDate();
	},

	_optionMonth : function(selected)
	{
		var s=document.createElement("select");
		s.setAttribute("id","__cal_picker_selectMonth");
		var opt;
		var months=new Array();
		months[0]="January";
		months[1]="February";
		months[2]="March";
		months[3]="April";
		months[4]="May";
		months[5]="June";
		months[6]="July";
		months[7]="August";
		months[8]="September";
		months[9]="October";
		months[10]="November";
		months[11]="December";
		for(var i=0;i<12;i++)
		{
			opt=document.createElement("option");
			opt.value=i;
			opt.appendChild(document.createTextNode(months[i]));
			if(selected==i)
				opt.selected=true;
			s.onchange=this.__selectChange(this);
			s.appendChild(opt);
		}
		
		return s;
	},

	_optionYear : function(selected)
	{
		var s=document.createElement("select");
		s.setAttribute("id","__cal_picker_selectYear");
		var opt;
		var i=Math.min(selected,2007);
		var end=Math.max(selected,2013);
		for(;i<end;i++)
		{
			opt=document.createElement("option");
			opt.value=i;
			opt.appendChild(document.createTextNode(i));
			if(selected==i)
				opt.selected=true;
			s.onchange=this.__selectChange(this);
			s.appendChild(opt);
		}
		
		return s;
	},

	_offsetMonth : function(offset)
	{
		var month=parseInt($("__cal_picker_selectMonth").value);
		var year=parseInt($("__cal_picker_selectYear").value);
		month+=offset;
		if(month<0)
		{
			year-=1;
			month+=12;
		}
		else if(month>11)
		{
			year+=1;
			month-=12;
		}
		/*if(year<2007)
			year=2007;
		else if(year>2012)
			year=2012;*/
		this.drawMonth(month,year);
	},

	_changeMonth : function()
	{
		var month=$("__cal_picker_selectMonth").value;
		var year=$("__cal_picker_selectYear").value;
		this.drawMonth(month,year);
	},	

	__tdMouseOutFunction : function (td,orgClass)
	{
		return function () { td.className=orgClass; };
	},
	
	__tdOnClickFunction : function (obj,d)
	{
		return function () { obj.__click(d); };
	},
	
	__arrowclick: function (obj, d)
	{
		return function () { obj._offsetMonth(d); };
	},
	
	__selectChange: function (obj)
	{
		return function () { obj._changeMonth(); };
	},
	
	__click: function (d)
	{
		var pd=new Date(d);
		this.inp.value=(pd.getMonth()+1)+"/"+pd.getDate()+"/"+pd.getFullYear();
		this.end();
	},
	
	__cancel: function (obj)
	{
		return function () { obj.end(); };
	},
	
	empty: function() {
		while(this.objCal.childNodes.length > 0)
		{
			this.objCal.removeChild(this.objCal.firstChild);
		}
	},
	
	end: function() {
		this.c.removeChild($('qbsCalendar'));
		if(this.finishCallback)
			eval(this.finishCallback);
	}
});
