// Javascript calendar class

// Constructor
function calendar(id, d, divid, altField, noCheck) {
	this.id = id;
	this.dateObject = d;
	this.divid = divid;
	this.write = writeCalendar;
	if (altField != null) {
	    this.altField = altField;
	}
	// check if there is already a date entered and start there
	if (!noCheck == true) {
		enteredDate = '';
		var egal= false;
		if(document.getElementById("egal")){
			egal =document.getElementById("egal").value;
		}
	    var aktvalue= eval(this.id+'.value');
		if (
	    		(aktvalue != '' && aktvalue != egal )|| 
	    		this.altField == '' || 
	    		this.altField == null
	    	) 
            enteredDate = aktvalue;
        else if (eval(this.altField+'.value') != ''|| aktvalue == egal) 
            enteredDate = eval(this.altField+'.value');
        var dateRegExp = /^(\d{1,2})(\-|\/|\.)(\d{1,2})\2(\d{4})$/;
	    if (enteredDate.match(dateRegExp)) {
			enteredDate.replace('-', '.');
			enteredDate.replace('/', '.');
			dateArray = enteredDate.split('.');
		    d.setDate(dateArray[0]);
		    d.setMonth(dateArray[1]-1);
		    d.setFullYear(dateArray[2]);
		    this.dateObject = d;
	    }
	}
	// settings for current month
	this.dateObject.setMonth(d.getMonth());
	this.month = d.getMonth();
	this.length = getLength(this.month, this.dateObject);
	this.date = d.getDate();
	this.day = d.getDay();
	this.year = d.getFullYear();
	d.setDate(1);
	// adjust firstday of the week to Monday instead of Sunday
	this.firstDay = d.getDay()-1;
	if (this.firstDay < 0) {
		this.firstDay += 7;
	}
	// settings for previous month
	this.dateObject.setMonth(this.month-1,1);
	this.daysPreviousMonth = getLength(this.dateObject.getMonth(), this.dateObject);
	this.previousMonth = this.dateObject.getMonth();
	this.previousYear = this.dateObject.getFullYear();
	this.dateObject.setMonth(this.previousMonth+1, this.date);
    this.daysPreviousMonth = this.daysPreviousMonth - this.firstDay + 1;
	// settings for next month
	this.dateObject.setMonth(this.month+1,1);
	this.nextDay = 1;
	this.nextMonth = this.dateObject.getMonth();
	this.nextYear = this.dateObject.getFullYear();
	this.dateObject.setMonth(this.nextMonth-1, this.date);
	
	d.setDate(this.date);
	


    function getLength(month, dateObject) {
        switch(month) {
	        case 1:
		        if ((dateObject.getFullYear()%4==0 &&
			         dateObject.getFullYear()%100!=0) ||
				     dateObject.getFullYear()%400==0)
				    return 29;
			    else
			        return 28;
		    case 3:
		        return 30;
		    case 5:
		        return 30;
		    case 8:
		        return 30;
		    case 10:
		        return 30;
		    default:
		        return 31;
	    }
    }

    function writeCalendar() {
	    var calString = '';
	    calString += '<table id="cal' + this.id + '" cellspacing=1 cellpadding=2 bgcolor="#000088" width="162">';//hier war width=162
	    calString += '<tr bgcolor="#000088">';
	    calString += '<td><a href="Javascript:changeMonth(-1,\'' + this.divid + '\')"><img border="0" src="/images/backward.gif" width="8" height="15"></a></td>';
	    calString += '<td colspan=5 align=center class="topmenu">' + months[this.month] + ' ' + this.year + '</td>';
	    calString += '<td align=right><a href="Javascript:changeMonth(1,\'' + this.divid + '\')"><img border="0" src="/images/forward.gif" width="8" height="15"></a></td></tr>';
	    calString += '<tr bgcolor="#FFD000">';
	
	    for (var i= 0; i< days.length; i++) {
		    calString += '<td class="menu">' + days[i] + '</td>';
	    }
	
	    calString += '</tr>';
	
	    // main calendar
	    var weekStartDay = 0;
	    calString += '<tr bgcolor="#DFDFFF">';
	    for (var j= 0; j< 42; j++) {
		    var displayNum = (j-this.firstDay+1);
		    if (j%7>=5) {
			    var tdclass = 'weekend';
		    } else {
			    var tdclass = 'activenav';
		    }
		    if (j<this.firstDay) {
			    calString += '<td class="nomonth" align=right><a href="Javascript:changeDate(\'' + this.daysPreviousMonth + '.' + (this.previousMonth+1) + '.' + this.previousYear + '\',\'' + this.id +'\',\'' + this.divid +'\')" class="nomonth">' + this.daysPreviousMonth + '</a></td>';
			    this.daysPreviousMonth++;
		    } else if(displayNum==this.date) {
			    calString += '<td class="' + tdclass + '" align=right><a href="Javascript:changeDate(\'' + displayNum + '.' + (this.month+1) + '.' + this.year + '\',\'' + this.id +'\',\'' + this.divid +'\')" class="' + tdclass + '">' + displayNum + '</a></td>';
		    } else if(displayNum>this.length) {
			    calString += '<td class="nomonth" align=right><a href="Javascript:changeDate(\'' + this.nextDay + '.' + (this.nextMonth+1) + '.' + this.nextYear + '\',\'' + this.id +'\',\'' + this.divid +'\')" class="nomonth">' + this.nextDay + '</a></td>';
				this.nextDay++;
		    } else {
			    calString += '<td class="' + tdclass + '" align=right><a href="Javascript:changeDate(\'' + displayNum + '.' + (this.month+1) + '.' + this.year + '\',\'' + this.id +'\',\'' + this.divid +'\')" class="' + tdclass + '">' + displayNum + '</a></td>';
		    }
		    if (j%7==6) {
			    if (j < 41 && displayNum < this.length) {
			        calString += '</tr><tr bgcolor="#DFDFFF">';
			    } else {
				    j = 42;
			    }
		    }
	    }
	    calString += '</tr>';
	
	    calString += '<tr bgcolor="White"><td colspan=7 class="menusmall"><br>' + calendarComment + '<br><a href="Javascript:hideCalendar(\'' + this.divid + '\');">' + calendarSchliessen + '</a></td></tr>';
	
	    calString += '</table>';

        return calString;
    }

}

// function for change date
function changeDate(date, calid, divid) {
	calid = eval(calid);
	calid.value = date;
	hideCalendar(divid);
	checkDates(1);//Prüfung Navbar
	//Eventauslösung für AJAX in detail_maindescription.tpl, calendarEvent ist UnitID
	if(calendarEvent){
		checkAll(calendarEvent);
	}
}

// function for change month
function changeMonth(mo, divid) {
	cal = eval(divid);
	cal.dateObject.setMonth(cal.dateObject.getMonth() + mo);
	cal = new calendar(cal.id, cal.dateObject, divid, null, true);
	document.getElementById(divid).innerHTML = cal.write();
}

// function for calendar refresh
function refreshMonth(divid) {
	cal = eval(divid);
	cal = new calendar(cal.id, cal.dateObject, divid, cal.altField, false);
	document.getElementById(divid).innerHTML = cal.write();
}

// Zeilen ausblenden
function hide(idTag) {
	if (DOM || MS){
		//alert("167 hide "+idTag);
		getElem('id',idTag,null).style.display = 'none';
	}
	if (NS){
		getElem('id',idTag,null).display = 'none';
	}
}
	
// Zeilen einblenden
function show(idTag) {
	if (DOM || MS){
		//alert("178 show "+ idTag);
		getElem('id',idTag,null).style.display = '';
	}
	if (NS){
		getElem('id',idTag,null).display = '';
	}
}

function timestamp(datum){
	//Hier noch prüfen, ob sinnvolles Datum
	var arraydatum = datum.split(".");
	var meindatum = new Date(arraydatum[2], arraydatum[1], arraydatum[0]);
	return meindatum;
}

function checkDates(type){//Datum vergleichen, Fehlermeldung alert, Felder löschen
	//Belegung variabel (Argumente)
	if(type== 2){//Kein Argument-> Ajax- Skripte Detailseite
		var dateId="2";
	} else {//Navbar
		var dateId="";
	}
	//alert("DateId "+dateId);
	var fromdate= timestamp(document.getElementById("dateFrom"+dateId).value);
	var todate= timestamp(document.getElementById("dateTo"+dateId).value);
	
	if(todate < fromdate){
		//alert(document.getElementById("lngDatum").innerHTML);
		//Felder löschen
		document.getElementById("dateTo"+dateId).value= "";//nur abreisedatum wird zurückgesetzt
		//document.getElementById("dateTo"+dateId).value= ""
	}
	if(typeof checkState== "function") checkState();
}
