// kalender.js - Kalenderblatt + verschiedene Funktionen für den Veranstaltungskalender - 30.07.2010 - GEC

// Globale Variablen		
		var anzklick=0;
		var datumneu = new Date();

// Datum drehen TT.MM.JJJJ -> JJJJMMTT
function datumdreh(datum) {
	if (datum.length==10) {
	 datumneu = datum.substring(6,10)+""+datum.substring(3,5)+""+datum.substring(0,2);
	}	
	return datumneu;	
}

function dayselect() {
	
	var newzeit = new Date();
	var heute = new Date();
	var heutetag=heute.getDate(); 
	if (heute.getDate()<=9) {heutetag="0"+heutetag;}
	var heutemonat=heute.getMonth()+1; 
	if (heute.getMonth()+1<=9) {heutemonat="0"+heutemonat;}	
	var nexttag=heute.getDate();
	var nextmonat=heute.getMonth()+1; 
	
	// Heute
	if (document.getElementById('zeitraum').value==1) {
	
		document.getElementById('suche-vkal-von').value = heutetag + "." + heutemonat + "." +heute.getFullYear();
		document.getElementById('suche-vkal-bis').value = heutetag + "." + heutemonat + "." +heute.getFullYear();
		datumstart = document.getElementById('suche-vkal-von').value;
		new kalenderJS().initvkal("kalender-kal", new Date (datumstart.substring(6,10),(datumstart.substring(3,5)-1),datumstart.substring(0,2)));
		
	}
	// 7 Tage
	if (document.getElementById('zeitraum').value==2) {
		newzeit.setTime(newzeit.getTime() + 6 * 24 * 60 * 60 * 1000);
		nexttag=newzeit.getDate(); 
		if (newzeit.getDate()<=9) {nexttag="0"+nexttag;}
		nextmonat=newzeit.getMonth()+1; 
		if (newzeit.getMonth()+1<=9) {nextmonat="0"+nextmonat;}	
		document.getElementById('suche-vkal-von').value = heutetag + "." + heutemonat + "." +heute.getFullYear();
		document.getElementById('suche-vkal-bis').value = nexttag + "." + nextmonat + "." +newzeit.getFullYear();
		datumstart = document.getElementById('suche-vkal-bis').value;
		new kalenderJS().initvkal("kalender-kal", new Date (datumstart.substring(6,10),(datumstart.substring(3,5)-1),datumstart.substring(0,2)));
		
	}
	// 30 Tage
	if (document.getElementById('zeitraum').value==3) {
		newzeit.setTime(newzeit.getTime() + 29 * 24 * 60 * 60 * 1000);
		nexttag=newzeit.getDate(); 
		if (newzeit.getDate()<=9) {nexttag="0"+nexttag;}
		nextmonat=newzeit.getMonth()+1; 
		if (newzeit.getMonth()+1<=9) {nextmonat="0"+nextmonat;}			
		document.getElementById('suche-vkal-von').value = heutetag + "." + heutemonat + "." +heute.getFullYear();
		document.getElementById('suche-vkal-bis').value = nexttag + "." + nextmonat + "." +newzeit.getFullYear();
		datumstart = document.getElementById('suche-vkal-bis').value;
		new kalenderJS().initvkal("kalender-kal", new Date (datumstart.substring(6,10),(datumstart.substring(3,5)-1),datumstart.substring(0,2)));
		
	}	
	// 60 Tage
	if (document.getElementById('zeitraum').value==4) {
		newzeit.setTime(newzeit.getTime() + 59 * 24 * 60 * 60 * 1000);
		nexttag=newzeit.getDate(); 
		if (newzeit.getDate()<=9) {nexttag="0"+nexttag;}
		nextmonat=newzeit.getMonth()+1; 
		if (newzeit.getMonth()+1<=9) {nextmonat="0"+nextmonat;}			
		document.getElementById('suche-vkal-von').value = heutetag + "." + heutemonat + "." +heute.getFullYear();
		document.getElementById('suche-vkal-bis').value = nexttag + "." + nextmonat + "." +newzeit.getFullYear();
		datumstart = document.getElementById('suche-vkal-bis').value;
		new kalenderJS().initvkal("kalender-kal", new Date (datumstart.substring(6,10),(datumstart.substring(3,5)-1),datumstart.substring(0,2)));		
	}	
	
}

function datumvonbis() {
	document.getElementById('zeitraum').value=5;
}

function manuell(feld) {
	if (datumpruefen(document.getElementById(feld).value) != null) {
		datumstart = document.getElementById(feld).value;
		new kalenderJS().initvkal("kalender-kal", new Date (datumstart.substring(6,10),(datumstart.substring(3,5)-1),datumstart.substring(0,2)));
	}
}

function datumpruefen(string) { 
    if(!string) return null; 
    string += ''; 
    string = string.replace(/[-\/]/g, '.'); // Trennzeichen normalisieren 
    string = string.replace(/[^0-9.: ]/g, ''); // ungültige Zeichen entfernen 
    string = string.replace(/ +/g, ' '); // doppelte Leerzeichen entfernen 
    var uhr = string.split(" "); // Uhrzeit abtrennen 
    var split = uhr[0].split("."); 
    var day = parseInt(split[0], 10); 
    var month = parseInt(split[1] || 0, 10); 
    var year = parseInt(split[2] || 0, 10); 
  
    if(isNaN(year)) year = getFullYear(); 
  
    var check = new Date(year, month - 1, day); 
    if(uhr[1]) { 
         var uhr = uhr[1].split(':'); 
         check.setHours( uhr[0] || 0 ); 
         check.setMinutes( uhr[1] || 0 ); 
         check.setSeconds( uhr[2] || 0 ); 
    } 
  
    var day2 = check.getDate(); 
    var year2 = getFullYear(check); 
    var month2 = check.getMonth() + 1; 
  
    return ( year2 == year && month == month2 && day == day2 ) ? check 
    : null; 
} 

function getFullYear(date){ 
    if(!date) date = new Date(); 
    if(typeof date.getFullYear != 'undefined') return date.getFullYear(); 
    var year = date.getYear(); 
    if(year < 1000) year += 2000; 
    return year; 
} 

function kalenderJS() {
	this.now = new Date();
	this.dayname = ["Mo","Di","Mi","Do","Fr","Sa","So"];
	this.monthname = ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"];	
	this.tooltip = ["vorheriger Monat","nächster Monat","aktueller Tag"];
	this.monthCell = document.createElement("th");
	this.tableHead = null;
	this.parEl = null;
	
	if (document.getElementById('suche-vkal-ort')) {
		document.getElementById('suche-vkal-ort').select();
		document.getElementById('suche-vkal-ort').focus();
	}
	
	this.initvkal = function( id, initDate ) {
		this.now = initDate?initDate:new Date();
		this.date = this.now.getDate();
		this.month = this.mm = this.now.getMonth();
		this.year = this.yy = this.now.getFullYear();
		this.heute = new Date();
		this.heutedate = this.heute.getDate();
		this.heutemonth = this.heute.getMonth();
		this.heuteyear = this.heute.getFullYear();		
		
		this.monthCell.colSpan = 5;
		this.monthCell.appendChild(document.createTextNode( this.monthname[this.mm]+" "+this.yy ));
		this.tableHead = this.createTableHead();
		this.parEl = document.getElementById( id );
		this.show();
		if (!initDate) this.checkDate();
	},
	
	
	this.checkDate = function() {
		var self = this;
		var today = new Date();
		if (this.date != today.getDate()) {
			this.date  = today.getDate();
			if (this.mm == this.month && this.yy == this.year)
				this.switchMonth("current");
			this.month = today.getMonth();
			if (this.mm == this.month && this.yy == this.year)
				this.switchMonth("current");
			this.year  = today.getFullYear();
			if (this.mm == this.month && this.yy == this.year)
				this.switchMonth("current");

		}
		window.setTimeout(function() { self.checkDate(); }, Math.abs(new Date(this.year, this.month, this.date, 24, 0, 0)-this.now));
	},
	
	this.removeElements = function( Obj ) {
		while( Obj.childNodes.length > 0)
			Obj.removeChild(Obj.childNodes[Obj.childNodes.length-1]);
		return Obj;
	},
		
	this.show = function() {
		this.parEl = this.removeElements( this.parEl );
		this.monthCell.firstChild.replaceData(0, this.monthCell.firstChild.nodeValue.length, this.monthname[this.mm]+" "+this.yy);
		var table = document.createElement("table");
		table.appendChild( this.createTableBody() );
		table.appendChild( this.tableHead );
		this.parEl.appendChild( table );
	},
			
	this.createTableHead = function() {
		var thead = document.createElement("thead");
		var tr = document.createElement("tr");
		var th = this.getCell( "th", "\u00AB", "last_month", "" )
		th.Instanz = this;
		th.onclick = function() { this.Instanz.switchMonth("prev"); };
		th.title = this.tooltip[0];
		try { th.style.cursor = "pointer"; } catch(e){ th.style.cursor = "hand"; }
		tr.appendChild( th );
		this.monthCell.Instanz = this;
		this.monthCell.onclick = function() { this.Instanz.switchMonth("current"); };
		this.monthCell.title = this.tooltip[2];
		try { this.monthCell.style.cursor = "pointer"; } catch(e){ this.monthCell.style.cursor = "hand"; }
		tr.appendChild( this.monthCell );			
		th = this.getCell( "th", "\u00BB", "next_month", "" )
		th.Instanz = this;
		th.onclick = function() { this.Instanz.switchMonth("next"); };
		th.title = this.tooltip[1];
		try { th.style.cursor = "pointer"; } catch(e){ th.style.cursor = "hand"; }
		tr.appendChild( th );
		thead.appendChild( tr );
		tr = document.createElement('tr');
		for (var i=0; i<this.dayname.length; i++)
			tr.appendChild( this.getCell("th", this.dayname[i], "weekday", "" ) );
		thead.appendChild( tr );
		return thead;
	},
	
	this.createTableBody = function() {
		var dayspermonth = [31,28,31,30,31,30,31,31,30,31,30,31];
		var sevendaysaweek = 0;
		var begin = new Date(this.yy, this.mm, 1);
		var firstday = begin.getDay()-1;
		if (firstday < 0)
			firstday = 6;
		if ((this.yy%4==0) && ((this.yy%100!=0) || (this.yy%400==0)))
			dayspermonth[1] = 29;
		var tbody = document.createElement("tbody");
		var tr = document.createElement('tr');
		if (firstday == 0) {
			for (var i=0; i<this.dayname.length; i++) {
				var prevMonth = (this.mm == 0)?11:this.mm-1;
				tr.appendChild( this.getCell( "td", dayspermonth[prevMonth]-6+i, "last_month", "" ) );
			}
			tbody.appendChild( tr );
			tr = document.createElement('tr');
		}
		
		for (var i=0; i<firstday; i++, sevendaysaweek++) {
			var prevMonth = (this.mm == 0)?11:this.mm-1;
			tr.appendChild( this.getCell( "td", dayspermonth[prevMonth]-firstday+i+1, "last_month", "" ) );
			
		}
		// Tage malen
		for (var i=1; i<=dayspermonth[this.mm]; i++, sevendaysaweek++){
			if (this.dayname.length == sevendaysaweek){
				tbody.appendChild( tr );
				tr = document.createElement('tr');
				sevendaysaweek = 0;
			}
			
			var td = null;
			
			// Gewählten Zeitraum farbig machen
			var zeitraum = "";
			var kalid= "";
			var	anzeigetag=i; 
			if (anzeigetag<=9) {anzeigetag="0"+anzeigetag;}
			var anzeigemonat=this.mm+1; 
			if (anzeigemonat<=9) {anzeigemonat="0"+anzeigemonat;}		
			kalid = this.yy+""+anzeigemonat+""+anzeigetag;	
			//alert(this.yy+" "+datumdreh(document.getElementById('suche-vkal-von').value));
			if (kalid>=datumdreh(document.getElementById('suche-vkal-von').value) && kalid<=datumdreh(document.getElementById('suche-vkal-bis').value)) {
				zeitraum = " zeitraum";
			}

			if ((i<this.heutedate && this.mm==this.heutemonth && this.yy==this.heuteyear) || (this.mm<this.heutemonth && this.yy==this.heuteyear) || (this.yy<this.heuteyear))
				td = this.getCell( "td", i, "vorbei", kalid );
			else if (i==this.heutedate && this.mm==this.heutemonth && this.yy==this.heuteyear && (sevendaysaweek == 5 || sevendaysaweek == 6))
				td = this.getCell( "td", i, "today weekend"+zeitraum, kalid );
			else if (i==this.heutedate && this.mm==this.heutemonth && this.yy==this.heuteyear)
				td = this.getCell( "td", i, "today"+zeitraum , kalid );
			else if (sevendaysaweek == 5 || sevendaysaweek == 6)
				td = this.getCell( "td", i, "weekend"+zeitraum, kalid );
			else
				td = this.getCell( "td", i, ""+zeitraum, kalid ); 



			td.setDate = this.setDate;
			td.dd = i;
			td.mm = this.mm;
			td.yy = this.yy;
			if ((i<this.heutedate && this.mm==this.heutemonth && this.yy==this.heuteyear) || (this.mm<this.heutemonth && this.yy==this.heuteyear) || (this.yy<this.heuteyear)) {
			 var nichtklicken="ja";
			} else {
				td.onclick = function(e) {
					uebtag=this.dd; 
					if (this.dd<=9) {uebtag="0"+uebtag;}
					uebmonat=this.mm+1; 
					if (this.mm<9) {uebmonat="0"+uebmonat;}					
					this.setDate (uebtag+"."+uebmonat+"."+this.yy);
				}
			};
			tr.appendChild( td );
		}

		var daysNextMonth = 1;
		for (var i=sevendaysaweek; i<this.dayname.length; i++) 
			tr.appendChild( this.getCell( "td", daysNextMonth++, "next_month", ""  ) );
			
		tbody.appendChild( tr );
		
		while (tbody.getElementsByTagName("tr").length<6) {
			tr = document.createElement('tr');
			for (var i=0; i<this.dayname.length; i++) 
				tr.appendChild( this.getCell( "td", daysNextMonth++, "next_month", ""  ) );
			tbody.appendChild( tr );
		}

		return tbody;
		
	},
	
	// Weiterverarbeitung des geklickten Datums
	this.setDate = function(date) {
		
		//window.alert( datumdreh(date) );
		// selected index
		
		document.getElementById('zeitraum').value=5;
		
	if (anzklick==1) {
			document.getElementById('suche-vkal-bis').value=date; // 2. Klick
			anzklick=0;
			datumstart = document.getElementById('suche-vkal-bis').value;
			new kalenderJS().initvkal("kalender-kal", new Date (datumstart.substring(6,10),(datumstart.substring(3,5)-1),datumstart.substring(0,2)));
			
				if (datumdreh(date)<datumdreh(document.getElementById('suche-vkal-von').value)) {
					document.getElementById('suche-vkal-von').value=date; // Bis Datum ist kleiner als von Datum, dann berichtigen
					anzklick=1;
					datumstart = document.getElementById('suche-vkal-von').value;
					new kalenderJS().initvkal("kalender-kal", new Date (datumstart.substring(6,10),(datumstart.substring(3,5)-1),datumstart.substring(0,2)));
				}
			} else {
			document.getElementById('suche-vkal-von').value=date; // 1. Klick
			document.getElementById('suche-vkal-bis').value=date;
			anzklick=1;
			datumstart = document.getElementById('suche-vkal-von').value;
			new kalenderJS().initvkal("kalender-kal", new Date (datumstart.substring(6,10),(datumstart.substring(3,5)-1),datumstart.substring(0,2)));
		}
      
	}
	
	this.getCell = function(tag, str, cssClass, kalid) {
		//if (kalid!="") alert(tag+" "+str+" "+cssClass+" "+kalid);
		var El = document.createElement( tag );
		El.appendChild(document.createTextNode( str ));
		if (cssClass != null)
			El.className = cssClass;
		return El;
	},
	
	this.switchMonth = function( s ){
		switch (s) {
			case "prev": 
				this.yy = (this.mm == 0)?this.yy-1:this.yy;
				this.mm = (this.mm == 0)?11:this.mm-1;
			break;
			
			case "next":
				this.yy = (this.mm == 11)?this.yy+1:this.yy;
				this.mm = (this.mm == 11)?0:this.mm+1;
			break;
			
			case "current":
				this.yy = this.heuteyear;
				this.mm = this.heutemonth;
			break;
		}
		this.show();
	}
}

// var DOMContentLoaded = false;
function addContentLoadListener (func) {
	if (document.addEventListener) {
		var DOMContentLoadFunction = function () {
			window.DOMContentLoaded = true;
			func();
		};
		document.addEventListener("DOMContentLoaded", DOMContentLoadFunction, false);
	}
	var oldfunc = (window.onload || new Function());
	window.onload = function () {
		if (!window.DOMContentLoaded) {
			oldfunc();
			func();
		}
	};
}

// Kalenderblatt initialisieren
/*
addContentLoadListener( function() {  
								 alert("load");
		new kalenderJS().initvkal("kalender-kal");
		//new kalenderJS().init("kalender", new Date(2009, 1, 15)); // Datum vorgeben
} );
*/
function vkalenderstart() {
	if (document.getElementById('suche-vkal-von')) {
	datumstart = document.getElementById('suche-vkal-von').value;
	new kalenderJS().initvkal("kalender-kal", new Date (datumstart.substring(6,10),(datumstart.substring(3,5)-1),datumstart.substring(0,2)));
	}
}

// Rubriken alle Checkboxen: alle selektieren/deselektieren
function checkAll() {
		var chzaehler = 0;
		var e = document.forms['suche-form'].elements;
		for (z0=0;z0<e.length;z0++) {
		if (e[z0].type=='checkbox') {
			chzaehler=chzaehler+1;
			if (chzaehler==1) {wert=e[z0].checked;}
			if (wert==true) {e[z0].checked = true; }
			if (wert==false) {e[z0].checked = false; }
			}
		}
}

function checkAllWeg() {
	// Checkbox alle Rubriken deaktivieren
	document.getElementById('allerubriken').checked=false;
	
	/*
	// Wenn Spezial-Rubriken + von/bis = Heute, dann 60 Tage machen!
	var heute = new Date();
	var heutetag=heute.getDate(); 
	if (heute.getDate()<=9) {heutetag="0"+heutetag;}
	var heutemonat=heute.getMonth()+1; 
	if (heute.getMonth()+1<=9) {heutemonat="0"+heutemonat;}	


	if (document.getElementById('suche-vkal-von').value == heutetag + "." + heutemonat + "." +heute.getFullYear() &&
		document.getElementById('suche-vkal-bis').value == heutetag + "." + heutemonat + "." +heute.getFullYear()
		) {
	document.getElementById('zeitraum').value=4;
	dayselect();
		}
	*/
}


