function calShowCalendar(objid,value){
	new calAssistent().init(document.getElementById(objid),document.getElementById(objid));
}

/*
	Kalender-Assistent
	2010, Bundesrechenzentrum GmbH, Sebastian Spanninger (E-DM-OM)
*/

var assistent = null;

function calAssistent(){
	
	this.check = true;
	this.currentDate = new Date();
	this.displayDate = new Date();
	this.tage = config["wochentage_kurz"];
	this.tageLang = config["wochentage_lang"];
	this.monate = config["monate_lang"];
	this.anzTage = Array(31,28,31,30,31,30,31,31,30,31,30,31);
	this.target = null;


	/*
	Initialisierung des Kalenderassistent
	*/

	this.init = function(obj,target){

		this.target = target;

		// Ermittlung ob im betroffenen Eingabefeld ein gültiges Datum eingegeben ist, ansonsten wird das aktuelle Datum verwendet
		this.displayDate = this.isValidDate(target.value) ? this.convertStringToDate(target.value) : this.displayDate;

		var body = document.getElementsByTagName("BODY")[0];
		var html = document.getElementsByTagName("HTML")[0];

		// Überprüfung ob bereits ein Kalender-Assistent geöffnet ist und ggf. diesen schließen
		if(assistent){
			body.removeChild(assistent);
		}

		// Erzeugen des neuen Assistent
		var calLayer = document.createElement("div");
		calLayer.className = "assistent";
		calLayer.appendChild(this.drawTable(this.displayDate,false));

		document.getElementsByTagName("BODY")[0].appendChild(calLayer);

		assistent = calLayer;

		// Position des öffnenden Elements (Kalender-Icon) ermitteln
		var top = this.getAbsolutePosition(obj)[1] + obj.offsetHeight;
		var left = this.getAbsolutePosition(obj)[0];

		// Positionierung des Kalender-Assistenten
		if(html.offsetWidth < left + calLayer.offsetWidth){
			calLayer.style.left = left - calLayer.offsetWidth + obj.offsetWidth + "px";
		}else{
			calLayer.style.left = left + "px";
		}

		if(html.offsetHeight < top + calLayer.offsetHeight){
			var val = top - calLayer.offsetHeight - obj.offsetHeight - 2;

			if(val < 0){
				calLayer.style.top =  top + 2 + "px";
			}else{
				calLayer.style.top =  val  + "px";
			}
		}else{
			calLayer.style.top =  top + 2 + "px";
		}
	};
	
	/*
	Umwandlung eines Strings ("dd.mm.yyyy") in ein Datumsobjekt
	*/

	this.convertStringToDate = function(date){
		var dateElements = date.split(".");
		dateElements[1] = dateElements[1] * 1 - 1;
		return new Date(dateElements[2],dateElements[1],dateElements[0]);
	}

	/*
	Überprüfung eines Datums auf Gültigkeit
	*/

	this.isValidDate = function(date){
		var dateElements = date.split(".");
 		var tempAnzTage = this.anzTage;

		if(dateElements.length != 3)
			return false;

		var dd = parseInt(dateElements[0]*1);
		if(isNaN(dd)) return false; 
		var mm = parseInt(dateElements[1]*1);
		if(isNaN(dd)) return false; 
		var yy = parseInt(dateElements[2]*1);
		if(isNaN(dd)) return false; 

		if(dd <= 0) return false;
		if(mm <= 0 ||mm > 12) return false;
		if(yy <= 1000) return false;
		
		mm--;

		if (((yy % 100 != 0) || (yy % 400 == 0)) && (yy % 4 == 0)){
			tempAnzTage[1] = 29;	
		}		

		if(dd > tempAnzTage[mm]) return false;

		return true;
	}

	this.formatDate = function(date){
		if(this.isValidDate(date)){
			var dateElements = date.split(".");
	
			dateElements[0] = ((dateElements[0] * 1)<10)? '0' + dateElements[0]:dateElements[0];
			dateElements[1] = ((dateElements[1] * 1)<10)? '0' + dateElements[1]:dateElements[1];
			dateElements[2] = ((dateElements[2] * 1)<100)? '20' + dateElements[2]:dateElements[2];
			
			date = dateElements[0] + '.' + dateElements[1] + '.' +dateElements[2];
					
		}
		return date;
	}

	this.redrawTable = function(value,obj){
		assistent.removeChild(assistent.firstChild);
	
		var yy = this.displayDate.getFullYear();
		var mm = this.displayDate.getMonth();

		var showselector = false;

		switch(value){
			case '--':
				yy--;
			break;
			case '-':
				mm--;
			break;
			case '+':
				mm++;
			break;
			case '++':
				yy++;
			break;
			case 'jump':
				//alert(document.getElementById("calAssistent_jump_month").value);
				yy = obj.parentNode.childNodes[1].value;
				mm = obj.parentNode.childNodes[0].value;
				showselector = true;
			break;
			case 'today':
				//alert(document.getElementById("calAssistent_jump_month").value);
				var today = new Date();
				yy = today.getFullYear();
				mm = today.getMonth();
				showselector = true;
			break;
		}

		var tempDate = new Date(yy,mm,1);

		this.displayDate = tempDate;
		assistent.appendChild(this.drawTable(tempDate,showselector));
	};

	this.displayDateSelector2 = function(obj,directMode){
		var parent = (directMode) ? obj.parentNode.parentNode.parentNode.parentNode : obj;


		parent.removeChild(parent.firstChild);
		
		var sel = document.createElement("select");
		sel.Instanz = this;
		sel.onchange = function() { this.Instanz.redrawTable("jump",this); }
		sel.id = "calAssistent_jump_month";

		for(var a = 0; a < this.monate.length; a++){
			var opt = document.createElement("option");
			opt.value = a ;

			if(this.displayDate.getMonth() == a)
				opt.selected = true;
			if(this.currentDate.getMonth() == a)
				opt.className = "selectToday";

			opt.appendChild(document.createTextNode(this.monate[a]));
			sel.appendChild(opt);
		}
		parent.appendChild(sel);

		var sel = document.createElement("select");
		sel.Instanz = this;
		sel.onchange = function() { this.Instanz.redrawTable("jump",this); }
		sel.id = "calAssistent_jump_year";

		for(var a = 1900; a < this.currentDate.getFullYear() + 20 ; a++){
			var opt = document.createElement("option");
			opt.value = a;
	
			if(this.displayDate.getFullYear() == a)
				opt.selected = true;
			if(this.currentDate.getFullYear() == a)
				opt.className = "selectToday";


			opt.appendChild(document.createTextNode(a));
			sel.appendChild(opt);
		}
		parent.appendChild(sel);

		var img = document.createElement("img");
		img.src = "/forms_v2/StaticContent/Images/calicon.gif";
		img.Instanz = this;
		img.className = "todayIcon";
		img.title = config["calendarAssistant"]["jump_current_date"];
		img.onclick = function() { this.Instanz.redrawTable("today",this); }

		parent.appendChild(img);

	}

	this.drawTable = function(date,showSelector){

		var currentValueDate = this.convertStringToDate(this.target.value);

		var tempAnzTage = this.anzTage;
		var wochenTagStart = new Date(date.getFullYear(),date.getMonth(), 1).getDay();
		wochenTagStart--;
		wochenTagStart = (wochenTagStart<0)?6:wochenTagStart;


		// Schaltjahr ermitteln
		if (((date.getFullYear() % 100 != 0) || (date.getFullYear() % 400 == 0)) && (date.getFullYear() % 4 == 0)){
			tempAnzTage[1] = 29;	
		}
		
		var wochenTageMax = tempAnzTage[date.getMonth()];
		var tableRows = Math.ceil((wochenTagStart + wochenTageMax)/7);



		var tbl = document.createElement("table");

		// Tabellen-Kopf
		var thead = document.createElement("thead");
		
		
		var tr = document.createElement("tr");

		var td = document.createElement("td");
		td.setAttribute("colSpan","7");

			var tbl2 = document.createElement("table");
			tbl2.className="selector";
			var tbody2 = document.createElement("thead");
			var tr2 = document.createElement("tr");


			var td2 = document.createElement("th");
			td2.appendChild(document.createTextNode("\u00AB\u00AB"));
			td2.Instanz = this;
			td2.onclick = function() { this.Instanz.redrawTable("--",null); }
			tr2.appendChild(td2);
			var td2 = document.createElement("th");
			td2.appendChild(document.createTextNode("\u00AB"));
			td2.Instanz = this;
			td2.onclick = function() { this.Instanz.redrawTable("-",null); }
			tr2.appendChild(td2);

			var td2 = document.createElement("th");
			td2.className = "label";
			td2.appendChild(document.createTextNode(this.monate[date.getMonth()] + " " + date.getFullYear()));
			td2.Instanz = this;
			td2.onclick = function() { this.Instanz.displayDateSelector2(this,true); }
			tr2.appendChild(td2);

			var td2 = document.createElement("th");
			td2.appendChild(document.createTextNode("\u00BB"));
			td2.Instanz = this;
			td2.onclick = function() { this.Instanz.redrawTable("+",null); }
			tr2.appendChild(td2);
			var td2 = document.createElement("th");
			td2.appendChild(document.createTextNode("\u00BB\u00BB"));
			td2.Instanz = this;
			td2.onclick = function() { this.Instanz.redrawTable("++",null); }
			tr2.appendChild(td2);


			tbody2.appendChild(tr2);
			tbl2.appendChild(tbody2);
		
		td.appendChild(tbl2);

		if(showSelector){
			this.displayDateSelector2(td,false);
		}

		tr.appendChild(td);
		thead.appendChild(tr);



		var tr = document.createElement("tr");

		for(var a = 0; a < this.tage.length; a++){
			var th = document.createElement("th");
			th.appendChild(document.createTextNode(this.tage[a]));
			tr.appendChild(th);
		}

		thead.appendChild(tr);
		tbl.appendChild(thead);


		var tbody = document.createElement("tbody");

		var count = 1;
		var beginnDrawing = false;

		

		for(var a = 0; a < tableRows; a++){

			var tr = document.createElement("tr");
			
			for(var b = 0; b <= 6; b++){
			
				if(count == 1 && b == wochenTagStart){
					beginnDrawing = true;
				}else if(count > wochenTageMax){
					beginnDrawing = false;
				}

				var td = document.createElement("td");


				if(beginnDrawing){
					td.appendChild(document.createTextNode(count));
					
					var heute = (this.currentDate.getFullYear() == date.getFullYear() && this.currentDate.getMonth() == date.getMonth() && this.currentDate.getDate() == count);
					var auswahl = (date.getFullYear() == currentValueDate.getFullYear() && date.getMonth() == currentValueDate.getMonth() && count == currentValueDate.getDate());
					var wochenende = (b == 5 || b == 6);
					if(auswahl){
						td.className = "auswahl";
					}else if(heute){
						td.className = "heute";
					}else if(wochenende){
						td.className = "wochenende";
					}

					td.id =  this.formatDate(count + "." + (date.getMonth()+1) + "." + date.getFullYear());

					var cell_title = config["calendarAssistant"]["cell_title_template"];

					cell_title = cell_title.replace(/%WTAG%/g,this.tageLang[new Date(count,(date.getMonth()+1),date.getFullYear()).getDay()]);
					cell_title = cell_title.replace(/%DATUM%/,td.id);

					td.title = cell_title;

					td.Instanz = this;
					td.onclick = function(e){
						 this.Instanz.target.value = this.id;
						 this.Instanz.target.focus();
						 this.Instanz.target.select();
						document.getElementsByTagName("BODY")[0].removeChild(assistent);
						assistent = null;
					};
					td.onmouseout = function(e){
						this.className = this.className.replace(/HIGHLIGHT/g,"");
					};
					td.onmouseover = function(e){
						this.className = this.className.replace(/HIGHLIGHT/g,"") + "HIGHLIGHT";
					};

					count++;
				}else{
					td.className = "empty";
				}

				tr.appendChild(td);

			}
			
			tbody.appendChild(tr);

		}

		tbl.appendChild(tbody);

		return tbl;
	};

	this.getAbsolutePosition = function(obj){
		var returnval_y = 0;
		var returnval_x = 0;

		while(obj.offsetParent){
			returnval_y = returnval_y + obj.offsetTop;
			returnval_x = returnval_x + obj.offsetLeft;
			obj = obj.offsetParent;
		}

		returnval_y = returnval_y + obj.offsetTop;
		returnval_x = returnval_x + obj.offsetLeft;
		
		return Array(returnval_x,returnval_y);
	}

	this.display = function(){
	}


}

function isAssistentLayer(t){
	while(t.parentNode){
		if(t == assistent){
			return true;
		}
		t=t.parentNode;
	}
	return false;
} 
