
var maindiv = null;
var startYear = 2000;
var endYear = 2010;
var monthnames = new Array("Januar","Februar","Maerz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
var weekdays = new Array("Mo","Di","Mi","Do","Fr","Sa","So");
var ddyear,ddmonth,caldiv;
var obj;

function DateInput(triggerbuttonid, targetid, objname, starty, endy, sely){

	this.target = dom.gI(targetid);
	this.triggerbutton = dom.gI(triggerbuttonid);
	this.objname = objname;
	this.starty = starty;
	this.endy = endy;
	this.sely = sely;

	if(this.starty == null)
	    this.starty == startYear;
	    
	if(this.endy == null)
	    this.endy == endYear;
	    
//	dom.aE(this.triggerbutton,"mousedown",this.showCalendar,false);
	
	this.showCalendar = function(e,trigger)
	{
		var ev = dom.fE(e);
		obj = this;
		if(this.triggerbutton == null)
			this.triggerbutton = trigger;
			
		if(maindiv == null)
		{
			maindiv = dom.cE("div");
			maindiv.className = "di_calendarpopupdiv";
			maindiv.id = "di_calendarpopup";
			document.body.insertBefore(maindiv,document.body.firstChild)
			
			var div1 = dom.cE("div");
			div1.className = "di_headerdiv";
			div1.innerHTML = "<table width=100%><tr><td valign=\"top\"><div class=kalender>Kalender</div></td><td align=right><a class=di_x href=\"javascript: " + this.objname + ".hide()\">x</a></td></table>";
			dom.aC(maindiv,div1);
			
			var div = dom.cE("div");
			div.className = "di_dropdowndiv";
			dom.aC(maindiv,div);
			
			
			ddmonth = dom.cE("select");
			ddmonth.id = "ddyear";
			ddmonth.className = "di_ddmonth";
			dom.aC(div,ddmonth);
			
			ddyear = dom.cE("select");
			ddyear.id = "ddyear";
			ddyear.className = "di_ddyear";
			dom.aC(div,ddyear);
			
			
			dom.aE(ddyear,"change",this.onMonthChanged,false);
			dom.aE(ddmonth,"change",this.onMonthChanged,false);
		
			for(var i=0;i<12;i++){	
				var opt = dom.cE("option");
				opt.value = i;
				opt.text = monthnames[i];
				ddmonth.options[i] = opt;
			}
		
			var count = 0;
			for(var i=this.endy;i>=this.starty;i--)
			{	
				var opt = dom.cE("option");
				opt.value = i;
				opt.text = i;
				
				if(i == this.sely)
				    opt.selected = true;
				    
				ddyear.options[count] = opt;
				count++;
			}
			
			var weekdaydiv = dom.cE("div");
			weekdaydiv.className = "di_weekdayrow";
			for(var i=0;i<weekdays.length;i++)
				weekdaydiv.innerHTML += "<div class=di_weekdayitem>" + weekdays[i] + "</div>"
			
			dom.aC(maindiv,weekdaydiv);
			
			caldiv = dom.cE("div");
			caldiv.id = "caldiv";
			caldiv.className = "di_calendardisplay";
			dom.aC(maindiv,caldiv);
		} else {
			maindiv.style.display = "block";
		}
		
		if(!window.event)
		{
			maindiv.style.top = (ev.pageY - 14) + "px";
			maindiv.style.left = (ev.pageX + 15) + "px";
		} else {
			maindiv.style.top = window.event.clientY - 14;
			maindiv.style.left = window.event.clientX + 15;
		}
		
		var now = new Date();
		this.showMonth(now.getMonth(),now.getFullYear());

	}
	
	
	this.showMonth = function(month, year)
	{

		caldiv.innerHTML = "";
		var dm = new Date(year,month,1);
		
		var totaldays = this.getTotalDaysOfMonth(dm.getMonth());
		var firstday = this.getWeekNumber(dm.getDay());
		var currday = firstday;
		var wcount = 0;
		var row = dom.cE("div");
		row.className = "di_row";
		caldiv.appendChild(row);
		
		for(var j=0;j<firstday;j++){
			
			var div = dom.cE("div");
			div.className = "di_day";
			div.innerHTML = "&nbsp;";
			dom.aC(row,div);
		}
		
		for(var i=1;i<=totaldays;i++){
			
			var cssclass = "di_day";
	
			if(currday >= 5)
				cssclass = "di_endofweek";
				
			var div = dom.cE("div");
			div.className = cssclass;
			
			var d = new Date(ddyear.options[ddyear.selectedIndex].value,ddmonth.options[ddmonth.selectedIndex].value,i);
			div.innerHTML = "<a class=\"di_link\" href=\"javascript:" + this.objname + ".fillTarget('" + d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear() + "')\">" + i + "</a>"; 
			//dom.aE(div,"dblclick",function(){this.foo(div);},false);
			//dom.aE(div,"mouseover",function(){obj.overButton(div);},false);
			dom.aC(row,div);
			
		//	dom.aE(div,"dblclick",function(event){DateInput.fillTarget(event,d);return true;},false);
			
			if(currday == 6){
				row = dom.cE("div");
				row.className = "di_row";
				caldiv.appendChild(row);
				currday = 0;
				}
			else
				currday++;
			
		}
	
	}
	
	this.foo = function(obj){
		alert(obj.innerHTML);
	}	
	
	this.fillTarget = function(day){
		
		
		this.target.value = day;
		this.hide();
	//	dom.gI("calendarpopup").style.display = "none";
		
	}
	
	this.onMonthChanged = function()
	{	
		
		var month = ddmonth.options[ddmonth.selectedIndex].value;
		var year = ddyear.options[ddyear.selectedIndex].value;
		
		obj.showMonth(month,year);
	}
	
	this.getTotalDaysOfMonth = function(month)
	{
		if(month == 0 || month == 2 || month == 4 || month == 6 || month == 7 || month == 9 || month == 11)
			return 31;
			
		if(month == 1)
			return 28; // schaltjahr nicht vergessen!
			
		return 30;
	
	}
	
	this.getWeekNumber = function(numberOfDay)
	{
		if(numberOfDay == 0)
			return 6;
		else
			return --numberOfDay;
	
	}
	
	this.formatNumber = function(nr)
	{
		if(nr < 10)
			return "0" + nr;
		else
			return nr;
	}
	
	this.hide = function(){
		dom.gI("di_calendarpopup").style.display = "none";
	}
	
	this.overButton = function (img)
	{
		if(img != null)
		{
			img.className = img.className + "_hover";
		}
	}

	this.outButton = function (img)
	{
	
		if(img != null)
		{
			img.className = img.className.replace("_hover","");
		}
	}


}
	


var dom = {
	gI : function (el) {
		return document.getElementById(el);
	},
	cT : function(txt) {
		return document.createTextNode(txt);
	},
	cE : function (el) {
		return document.createElement(el);
	},
	aC : function (p,c) {
		return p.appendChild(c);
	},
	aE : function (elm,evtType,evtFn,set) {
		if (document.addEventListener) {
			if ((elm == window) && window.opera){
				elm == document;
			} 
			elm.addEventListener(evtType,evtFn,set);
		} else {
			elm.attachEvent('on' + evtType,evtFn);
		}
	},
	rE : function (elm,evtType,evtFn,set) {
		if (document.addEventListener) {
			if ((elm == window) && window.opera) elm == document;
			elm.removeEventListener(evtType,evtFn,set);
		} else {
			elm.detachEvent('on' + evtType,evtFn);
		}
	},
	fE : function(e) {
		if (typeof e == 'undefined') 
			e = window.event;
		return e;
	}
}


var mouseevent = {

	getX : function (ev){
		if(ev.pageX)
			return ev.pageX;
		else
			return ev.clientX;
		
	},
	
	getY : function(ev){
		if(ev.pageY)
			return ev.pageY;
		else
			return ev.clientY;
		
	}


}
