var GetDate = {
	
	///////////////////////////////////////////////////////////////////////////////
	// Einstellungen
	div_id:							'get_date_box',
	close_link:					true,
	nur_zukunft:				false,
	selects_ausblenden:	false,
	iframe_abdecker:		false,
	///////////////////////////////////////////////////////////////////////////////
	
	selectedDateField:	'',
	CalendarBoxDatum:		'',
	
	// Funktionen zum Herausfinden der Position eines Objekts
	getX:function(obj,relative) { var x=0; if(typeof(obj)=="object" && document.getElementById) { x=obj.offsetLeft; if(obj.offsetParent && !relative) { x+=GetDate.getX(obj.offsetParent); } return x; } else  { return false; } },
	getY:function(obj,relative) { var y=0; if(typeof(obj)=="object" && document.getElementById) { y=obj.offsetTop; if(obj.offsetParent && !relative) { y+=GetDate.getY(obj.offsetParent); } return y; } else  { return false; } },
	
	// Blendet die CalendarBox ein/aus
	GetDate:function(datumsfeld) {
		GetDate.selectedDateField = datumsfeld;
		
		// CalendarBox erzeugen falls noch nicht da
		if(!document.getElementById(GetDate.div_id)) {
			GetDate.createCalendarBox();
		}
		var cb = document.getElementById(GetDate.div_id);
		
		// Kalender ein/ausblenden
		if(cb.style.display != 'block') {
			// Kalender aktualisieren
			var aktuell = document.getElementById(datumsfeld).value;
			var datum = GetDate.value2date(aktuell);
			// Kalender für den ausgewählen Monat aktualisieren
			GetDate.refreshCalendarBox(datum);
			
			// Selects ausblenden
			if(GetDate.selects_ausblenden) {
				var selects = document.getElementsByTagName("select");
				for(var i=0; i!=selects.length; i++) {
					selects[i].style.visibility = "hidden";
				}
			}
			
			// Kalender positionieren
			cb.style.left = GetDate.getX(document.getElementById(datumsfeld)) + "px";
			cb.style.top = (GetDate.getY(document.getElementById(datumsfeld)) + 20)+"px";
			
			// Kalender einblenden
			cb.style.display = 'block';
			
			// IFrame Abdecker
			if(GetDate.iframe_abdecker) {
				var ia = document.getElementById(GetDate.iframe_abdecker);
				ia.style.left = GetDate.getX(document.getElementById(datumsfeld)) + "px";
				ia.style.top = (GetDate.getY(document.getElementById(datumsfeld)) + 20)+"px";
				ia.style.display = 'block';
			}
			
		} else {
			// Selects einblenden
			if(GetDate.selects_ausblenden) {
				var selects = document.getElementsByTagName("select");
				for (i=0; i!=selects.length; i++) {
					selects[i].style.visibility = "visible";
				}
			}
			
			// Kalender ausblenden
			cb.style.display = 'none';
			
			// IFrame Abdecker ausblenden
			if(GetDate.iframe_abdecker) {
				document.getElementById(GetDate.iframe_abdecker).style.display = 'none';
			}
		}
	},
	
	// Setzt das Datum und blendet die Box wieder aus
	set_date:function(datum) {
		document.getElementById(GetDate.selectedDateField).value = datum;
		GetDate.GetDate();
	},

	// CalendarBox erstellen
	createCalendarBox:function() {
		var objBody = document.getElementsByTagName("body").item(0);
		
		// CalendarBox
		var objCalendarBox = document.createElement("div");
		objCalendarBox.setAttribute('id',GetDate.div_id);
		objBody.insertBefore(objCalendarBox, objBody.firstChild);
		
		// IFrame Abdecker
		if(GetDate.iframe_abdecker) {
			var objIframeAbdecker = document.createElement("iframe");
			objIframeAbdecker.setAttribute('id',GetDate.iframe_abdecker);
			objBody.insertBefore(objIframeAbdecker, objBody.firstChild);
		}
	},
	
	// CalendarBox aktualisieren
	refreshCalendarBox:function(datum,monatsversatz) {
		if(!datum) { datum = GetDate.CalendarBoxDatum; }
		if(monatsversatz) { datum = new Date(datum.getFullYear(),datum.getMonth()+monatsversatz,1); }
		GetDate.CalendarBoxDatum = datum;
		
		var monate = new Array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
		var wochentage = new Array('Mo','Di','Mi','Do','Fr','Sa','So');
		var erster_tag = new Date(datum.getFullYear(),datum.getMonth(),1);
		var tage_im_monat = new Date(datum.getFullYear(),datum.getMonth()+1,0).getDate();
		
		var objCalendarBox = document.getElementById(GetDate.div_id);
		objCalendarBox.innerHTML = '';
		
		// Schließen Link
		if(GetDate.close_link) {
			var closeLink = document.createElement("a");
			closeLink.className = 'closer';
			closeLink.href = "javascript:GetDate.GetDate();";
			closeLink.appendChild(document.createTextNode('x'));
			objCalendarBox.appendChild(closeLink);
		}
		
		// Header
		var Header = document.createElement("table");
		Header.className = 'header';
		Header.setAttribute('width','100%');
		Header.setAttribute('border','0');
		Header.setAttribute('cellspacing','0');
		Header.setAttribute('cellpadding','2');
		
		var tr = Header.insertRow(0);
		var td = tr.insertCell(0);
		td.style.textAlign = 'left';
		var a = td.appendChild(document.createElement("a"));
		a.href = 'javascript:GetDate.refreshCalendarBox("",-3);';
		a.appendChild(document.createTextNode('<<'));
		var a = td.appendChild(document.createElement("a"));
		a.href = 'javascript:GetDate.refreshCalendarBox("",-1);';
		a.appendChild(document.createTextNode('<'));
		
		var td = tr.insertCell(1);
		td.appendChild(document.createTextNode(monate[datum.getMonth()]+" - "+datum.getFullYear()));
		
		var td = tr.insertCell(2);
		td.style.textAlign = 'right';
		var a = td.appendChild(document.createElement("a"));
		a.href = 'javascript:GetDate.refreshCalendarBox("",1);';
		a.appendChild(document.createTextNode('>'));
		var a = td.appendChild(document.createElement("a"));
		a.href = 'javascript:GetDate.refreshCalendarBox("",3);';
		a.appendChild(document.createTextNode('>>'));
		
		objCalendarBox.appendChild(Header);
		
		
		// Table
		var objCalendarTable = document.createElement("table");
		objCalendarTable.setAttribute('width','100%');
		objCalendarTable.setAttribute('cellspacing','0');
		objCalendarTable.setAttribute('cellpadding','2');
		
		// Table Header
		var tr = objCalendarTable.insertRow(0);
		for(var i=0;i<7;i++) {
			var td = tr.insertCell(i);
			td.appendChild(document.createTextNode(wochentage[i]));
		}
		
		// Tageszellen
		var tag = 2 - (erster_tag.getDay() == 0 ? 7:erster_tag.getDay());
		
		for(var row=1;tag<=tage_im_monat;row++) {
			var tr = objCalendarTable.insertRow(row);
			for(var i=0;i<7;i++) {
	
				var td = tr.insertCell(i);
				
				if(tag >= 1 && tag <= tage_im_monat) {
					var value = (tag<10 ? '0'+tag:tag)+'.'+((datum.getMonth()+1) < 10 ? '0'+(datum.getMonth()+1):datum.getMonth()+1)+'.'+datum.getFullYear();
					var cell_datum = new Date(datum.getFullYear(),datum.getMonth(),tag);
					
					if(!GetDate.nur_zukunft || cell_datum > new Date()-86400000) {
					
						var a = td.appendChild(document.createElement("a"));
						a.href = 'javascript:GetDate.set_date("'+value+'");';
						if(document.getElementById(GetDate.selectedDateField).value && GetDate.compareDates(cell_datum,GetDate.value2date(document.getElementById(GetDate.selectedDateField).value)) &&
						GetDate.compareDates(cell_datum,new Date())) {
							a.className = 'aktiv heute';
						} else if(document.getElementById(GetDate.selectedDateField).value && GetDate.compareDates(cell_datum,GetDate.value2date(document.getElementById(GetDate.selectedDateField).value))) {
							a.className = 'aktiv';
						} else if(GetDate.compareDates(cell_datum,new Date())) {
							a.className = 'heute';
						}
						a.appendChild(document.createTextNode(tag));
					
					} else {
						td.appendChild(document.createTextNode(tag));
					}
				}
				
				tag++;
			}
		}
		objCalendarBox.appendChild(objCalendarTable);
	},
	
	
	value2date:function(value) {
		value = value.split(".");
		if(value.length == 3) {
			if(parseInt(value[2],10) && parseInt(value[1],10) && parseInt(value[0],10)) {
				return new Date(parseInt(value[2],10),parseInt(value[1],10)-1,parseInt(value[0],10));
			} else {
				return new Date();
			}
		} else {
			return new Date();
		}
	},
	
	compareDates:function(datum1,datum2) {
		if(datum1.getFullYear() == datum2.getFullYear() && datum1.getMonth() == datum2.getMonth() && datum1.getDate() == datum2.getDate()) {
			return true;
		} else {
			return false;
		}
	}
	
};

function get_date(datum) {
	GetDate.GetDate(datum);
}
