/**
* @copyright goldkalb GmbH, Berlin
* @author 	Stefan Schultz
*	
* Methodensammlung für den goldkalb(R)-kalender
* 
* @package gkKalender
**/
var idKalender;
var infoFeldDatum, wertFeldDatum;
var infoFeldUhrzeit, wertFeldUhrzeit;
var monate = new Array("Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
var wochentage = new Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
var datum, aktuellesDatum;
var uhrzeit, aktuelleUhrzeit;
var gkh, gkm, gks;


/**
 * Blendet den Kalender mit Uhr ein
 * @param string kalenderID CSS-ID des Div für den Kalender
 * @param string idFeldDatum CSS-ID des Formularfeldes für das Datum
 * @param cssID idInfoDatum CSS-ID des HTML-Elementes für die Infoausgabe (z.B. span oder div)
 */
function gkKalenderEinblenden(kalenderID, idFeldDatum, idInfoDatum) {
	if(idKalender && document.getElementById(idKalender) && document.getElementById(idKalender).style.display == 'block') 
		schliesseKalender();
	
	idKalender = kalenderID;
	wertFeldDatum = document.getElementById(idFeldDatum);
	if(idInfoDatum) infoFeldDatum = document.getElementById(idInfoDatum);
	
	zeigeBasisDiv();
	
	if(wertFeldDatum && wertFeldDatum.value) {
		var tmp = wertFeldDatum.value.split('-');
		aktuellesDatum = new Date(tmp[0], tmp[1] - 1, tmp[2]);
		datum = new Date(tmp[0], tmp[1] - 1, 1);
	} else {
		aktuellesDatum = new Date();
		datum = new Date();
		datum.setDate(1);
	}
	
	schreibeKalender(idKalender + "_monat1");
	setzeMonat('+');
	schreibeKalender(idKalender + "_monat2");
}
/**
 * Blendet den Kalender mit Uhr ein
 * @param string kalenderID CSS-ID des Div für den Kalender
 * @param string idFeldDatum CSS-ID des Formularfeldes für das Datum
 * @param cssID idInfoDatum CSS-ID des HTML-Elementes für die Infoausgabe (z.B. span oder div)
 * @param cssID idFeldUhr CSS-ID des Formularfeldes für die Uhrzeit
 * @param cssID idInfoUhrzeit CSS-ID des HTML-Elementes für die Infoausgabe der Uhrzeit (z.B. span oder div)
 */
function gkKalenderUhrEinblenden(kalenderID, idFeldDatum, idInfoDatum, idFeldUhr, idInfoUhrzeit) {
	gkKalenderEinblenden(kalenderID, idFeldDatum, idInfoDatum);
	wertFeldUhrzeit = document.getElementById(idFeldUhr);
	if(idInfoUhrzeit) infoFeldUhrzeit = document.getElementById(idInfoUhrzeit);
	
	if(wertFeldUhrzeit && wertFeldUhrzeit.value) {
		var tmp = wertFeldUhrzeit.value.split(':');
		uhrzeit = new Date(tmp[0], tmp[1] - 1, tmp[2]);
		uhrzeit.setHours(tmp[0], tmp[1], tmp[2]);
	} else {
		uhrzeit = new Date();
	}
	
	schreibeUhr();
}
/**
 * Blendet das div für den Kalender aus
 */
function schliesseKalender() {
	document.getElementById(idKalender).innerHTML = "";
	document.getElementById(idKalender).style.display = 'none';
}
/**
 * Schreibt den Basisinhalt für das Kalender-Div
 */
function zeigeBasisDiv() {
	document.getElementById(idKalender).style.display = 'block';
	document.getElementById(idKalender).innerHTML = '<div class="blaettern" onclick="gkKalenderZurueck();">&lt;&lt;</div>'
													+ '<div class="monat" id="' + idKalender + '_monat1"></div>'
													+ '<div class="monat" id="' + idKalender + '_monat2"></div>'
													+ '<div class="blaettern" onclick="gkKalenderVor();"">&gt;&gt;</div>'
													+ '<div style="clear:both;height: 0px;"></div>';
	document.getElementById(idKalender).innerHTML += '<div id="schliessen"><span onclick="schliesseKalender();">Kalender schlie&szlig;en</span></div>';
}
/**
 * Schreibt einen Kalender
 * @param string div CSS-ID des Monats-Divs (intern)
 */
function schreibeKalender(div) {
	var maxTag = 31;
	if (datum.getMonth() == 3 || datum.getMonth() == 5 || datum.getMonth() == 8 || datum.getMonth() == 10)
		maxTag = 30;
	
	if (datum.getMonth() == 1) {
		maxTag = maxTag - 3;
		if (datum.getFullYear() % 4 == 0)
			maxTag++;
		if (datum.getFullYear() % 100 == 0)
			maxTag--;
		if (datum.getFullYear() % 400 == 0)
			maxTag++;
	}

	var text = '<div class="monatsname">' + monate[datum.getMonth()] + " " + datum.getFullYear() + '</div>';
	for(var x = 0; x <= 6; x++) {
		text += '<div class="tag fett">' + wochentage[x] + "</div>";
	}
	var cnt = 0;
	monatsdatum = new Date(datum.getFullYear(), datum.getMonth(), 1);
	var beginn = monatsdatum.getDay();
	if(beginn == 0) beginn = 7;
	for(var i = 1; i < beginn; i++) {
		cnt++;
		text += '<div class="tag dunkel"></div>' ;
	}
	for(j = 1; j <= maxTag; j++) {
		cnt++;
		if(aktuellesDatum.getDate() == j && aktuellesDatum.getMonth() == datum.getMonth()) {
			text += '<div class="tag aktiv" onclick="setzeDatum(' + monatsdatum.getFullYear() + ', ' + (monatsdatum.getMonth() + 1) + ', ' + monatsdatum.getDate() + ');">' + j + "</div>\n";
		} else {
			text += '<div class="tag" onclick="setzeDatum(' + monatsdatum.getFullYear() + ', ' + (monatsdatum.getMonth() + 1) + ', ' + monatsdatum.getDate() + ');">' + j + "</div>\n";
		}
		monatsdatum.setDate(monatsdatum.getDate() + 1);
	}
	for(var k = cnt; k < ( 6 * 7); k++) {
		text += '<div class="tag dunkel"></div>' ;
	}
	
	document.getElementById(div).innerHTML = text;
}
/**
 * Setzt den Monat rauf oder runter
 * @param string oper "+" oder "-"
 */
function setzeMonat(oper) {
	if(oper == "+") {
		if(datum.getMonth() + 1 == 1 && datum.getDate() > 28) {
			datum.setDate(28);
		}
		if(datum.getMonth() <= 11) {
			datum.setMonth(datum.getMonth() + 1);
		} else {
			datum.setFullYear(datum.getFullYear() + 1);
			datum.setMonth(1);
		} 
	} else if(oper == "-") {
		if(datum.getMonth() - 1 == 1 && datum.getDate() > 28) {
			datum.setDate(28);
		}
		if(datum.getMonth() >= 0) {
			datum.setMonth(datum.getMonth() - 1);
		} else {
			datum.setFullYear(datum.getFullYear() - 1);
			datum.setMonth(11);
		} 
	}
}
/**
 * Schreibt das neue Datum in die angegebenen Felder (info und Formular)
 * @param int y Jahreszahl
 * @param int m Monat
 * @param int d Tag
 */
function setzeDatum(y, m, d) {
	d = d.toString();
	if(d.length == 1) d = "0" + d;
	m = m.toString();
	if(m.length == 1) m = "0" + m;
	
	setInfoFeldDatum(d + "." + m + "." + y);
	
	setWertFeldDatum(y + "-" + m + "-" + d);
	
	schliesseKalender();
	
}
/**
 * Schreibt den Inhalt des Info-Feldes für das Datum
 * @param string wert das formatierte Datum
 */
function setInfoFeldDatum(wert) {
	if(!infoFeldDatum) return;
	infoFeldDatum.innerHTML = wert;
}
/**
 * Schreibt den Inhalt des Formularfeldes für das Datum
 * @param string wert das formatierte Datum
 */
function setWertFeldDatum(wert) {
	if(!wertFeldDatum) return;
	wertFeldDatum.value = wert;
}
/**
 * Blättert den Kalender einen Monat weiter
 */
function gkKalenderVor() {
	schreibeKalender(idKalender + "_monat1");
	setzeMonat('+');
	schreibeKalender(idKalender + "_monat2");
}
/**
 * Blättert den Kalender einen Monat zurück
 */
function gkKalenderZurueck() {
	setzeMonat('-');
	setzeMonat('-');
	schreibeKalender(idKalender + "_monat1");
	setzeMonat('+');
	schreibeKalender(idKalender + "_monat2");
}
/**
 * Schreibt die Uhr
 */
function schreibeUhr() {
	
	gkh = uhrzeit.getHours();
	gkh = gkh.toString();
	if(gkh.length == 1) gkh = "0" + gkh;
	gkm = uhrzeit.getMinutes();
	gkm = gkm.toString();
	if(gkm.length == 1) gkm = "0" + gkm;
	gks = uhrzeit.getSeconds();
	gks = gks.toString();
	if(gks.length == 1) gks = "0" + gks;
	
	var text = '<div id="' + idKalender + '_uhr" class="uhr">';
	//text += '<form name="uhr" id="gkUhr" onsubmit="schliesseKalender();return setzeUhrzeit();">\nZeit:';
	
	
	/* Stunde */
	text += "&nbsp;<span class=\"stellen\" onclick=\"stundeStellen('-');\">-</span>&nbsp;";
	text += '<input type="text" id="gkUhr_stunde" value="' + gkh + '" onchange=\"setzeUhrzeit();\" />';
	text += "&nbsp;<span class=\"stellen\" onclick=\"stundeStellen('+');\">+</span>&nbsp;";
	text += ":";
		
	/* Minute*/
	text += "&nbsp;<span class=\"stellen\" onclick=\"minuteStellen('-');\">-</span>&nbsp;";
	text += '<input type="text" id="gkUhr_minute" value="' + gkm + '" onchange=\"setzeUhrzeit();\" />';
	text += "&nbsp;<span class=\"stellen\" onclick=\"minuteStellen('+');\">+</span>&nbsp;";
	text += ":"; 
	
	/* Sekunde */
	text += "&nbsp;<span class=\"stellen\" onclick=\"sekundeStellen('-');\">-</span>&nbsp;";
	text += '<input type="text" id="gkUhr_sekunde" value="' + gks + '" onchange=\"setzeUhrzeit();\" />';
	text += "&nbsp;<span class=\"stellen\" onclick=\"sekundeStellen('+');\">+</span>&nbsp;";
	
	//text += '</form>\n';
	text += "</div>";
	
	document.getElementById(idKalender).innerHTML += text;
}
/**
 * Stellt die Uhrzeit (Stunden)
 * @param string richtung "+" oder "-"
 */
function stundeStellen(richtung) {
	if(richtung == "+") {
		uhrzeit.setHours(uhrzeit.getHours() + 1);
	} else if(richtung == "-") {
		uhrzeit.setHours(uhrzeit.getHours() - 1);
	}
	gks = uhrzeit.getHours().toString();
	if(gks.length == 1) gks = "0" + gks;
	document.getElementById("gkUhr_stunde").value = gks;
	setzeUhrzeit();
}
/**
 * Stellt die Uhrzeit (Minuten)
 * @param string richtung "+" oder "-"
 */
function minuteStellen(richtung) {
	if(richtung == "+") {
		uhrzeit.setMinutes(uhrzeit.getMinutes() + 1);
	} else if(richtung == "-") {
		uhrzeit.setMinutes(uhrzeit.getMinutes() - 1);
	}
	gkm = uhrzeit.getMinutes().toString();
	if(gkm.length == 1) gkm = "0" + gkm;
	document.getElementById("gkUhr_minute").value = gkm;
	setzeUhrzeit();
}
/**
 * Stellt die Uhrzeit (Sekunden)
 * @param string richtung "+" oder "-"
 */
function sekundeStellen(richtung) {
	if(richtung == "+") {
		uhrzeit.setSeconds(uhrzeit.getSeconds() + 1);
	} else if(richtung == "-") {
		uhrzeit.setSeconds(uhrzeit.getSeconds() - 1);
	}
	gks = uhrzeit.getSeconds().toString();
	if(gks.length == 1) gks = "0" + gks;
	document.getElementById("gkUhr_sekunde").value = gks;
	setzeUhrzeit();
}
/**
 * Schreibt die angegebenen Felder für die Uhrzeit (Info und Formularfeld)
 */
function setzeUhrzeit() {
	if(document.getElementById("gkUhr_stunde").value < 0) 
		document.getElementById("gkUhr_stunde").value = 0;
	if(document.getElementById("gkUhr_stunde").value > 23) 
		document.getElementById("gkUhr_stunde").value = 23;
	if(document.getElementById("gkUhr_stunde").value.length == 1) 
		document.getElementById("gkUhr_stunde").value = "0" + document.getElementById("gkUhr_stunde").value;
	
	if(document.getElementById("gkUhr_minute").value < 0) 
		document.getElementById("gkUhr_minute").value = 0;
	if(document.getElementById("gkUhr_minute").value > 59) 
		document.getElementById("gkUhr_minute").value = 59;
	if(document.getElementById("gkUhr_minute").value.length == 1) 
		document.getElementById("gkUhr_minute").value = "0" + document.getElementById("gkUhr_minute").value;

	if(document.getElementById("gkUhr_sekunde").value < 0) 
		document.getElementById("gkUhr_sekunde").value = 0;
	if(document.getElementById("gkUhr_sekunde").value > 59) 
		document.getElementById("gkUhr_sekunde").value = 59;
	if(document.getElementById("gkUhr_sekunde").value.length == 1) 
		document.getElementById("gkUhr_sekunde").value = "0" + document.getElementById("gkUhr_sekunde").value;
	
	aktuelleUhrzeit = document.getElementById("gkUhr_stunde").value + ":" + document.getElementById("gkUhr_minute").value + ":" + document.getElementById("gkUhr_sekunde").value;
	wertFeldUhrzeit.value = aktuelleUhrzeit;
	if(infoFeldUhrzeit) infoFeldUhrzeit.innerHTML = aktuelleUhrzeit;
	return false;
}
