


//var dayArrayShort = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
var dayArrayShort = new Array('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa');

//var dayArrayMed = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var dayArrayMed = new Array('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa');

//var dayArrayLong = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var dayArrayLong = new Array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');

//var monthArrayShort = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');
var monthArrayShort = new Array('Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez');

//var monthArrayMed = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');
var monthArrayMed = new Array('Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez');

//var monthArrayLong = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var monthArrayLong = new Array('Januar', 'Februar', 'M&auml;rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember');
 

// d = day, two digits
// m = month, two digits
// y = year, two digits
// Y = year, four digits
// D = day, two letters
var defaultDateFormat = "D d.m.y";
var dateFormat = new Array(); //defaultDateFormat;
var currentDate = new Array(); // null;
var datePickerDivID = new Array(); //"datepicker";


function displayDatePickerInDiv(dateFieldName, datePickerDivId, dtFormat, initialValue){
	drawDatePickerInDiv(dateFieldName, datePickerDivId, dtFormat, initialValue);
	document.getElementById(datePickerDivId[dateFieldName]).style.visibility="visible";	
}
function drawDatePickerInDiv(dateFieldName, datePickerDivId, dtFormat, initialValue){
	if(datePickerDivId)
		datePickerDivID[dateFieldName]=datePickerDivId;
	if(dtFormat)
		dateFormat[dateFieldName] = dtFormat;
	else
		dateFormat[dateFieldName] = defaultDateFormat;
	var initialDate = null;
	if(initialValue)
		initialDate = getFieldDate(dateFieldName,initialValue);
	var dt=initialDate;

	var targetDateField = document.getElementsByName(dateFieldName).item(0);
	if(targetDateField.value){
		var dtFromDateField=getFieldDate(dateFieldName,targetDateField.value);
		if(dtFromDateField)
			dt=dtFromDateField;
	}
	if(dt==null)
		dt=new Date();
	currentDate[dateFieldName]=dt;
	refreshDatePicker(targetDateField.name, dt.getFullYear(), dt.getMonth(), dt.getDate());
}




/** This is the function that actually draws the datepicker calendar. */
function refreshDatePicker(dateFieldName, year, month, day){
 	// if no arguments are passed, use today's date; otherwise, month and year
	// are required (if a day is passed, it will be highlighted later)
	var thisDay = new Date();

	if ((month >= 0) && (year > 0)) {
		thisDay = new Date(year, month, 1);
	} else {
		day = thisDay.getDate();
		thisDay.setDate(1);
	}

	// the calendar will be drawn as a table
	// you can customize the table elements with a global CSS style sheet,
	// or by hardcoding style and formatting elements below
	var crlf = "\r\n";
	var TABLE = "<table cols=7 class='dpTable'>" + crlf;
	var xTABLE = "</table>" + crlf;
	var TR = "<tr class='dpTR'>";
	var TR_title = "<tr class='dpTitleTR'>";
	var TR_days = "<tr class='dpDayTR'>";
	var TR_todaybutton = "<tr class='dpTodayButtonTR'>";
	var xTR = "</tr>" + crlf;
	var TD = "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver='this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
	var TD_title = "<td colspan=5 class='dpTitleTD'>";
	//var TD_buttons = "<td class='dpButtonTD'>";
	var TD_buttons = "<td class='dpButtonTD' onMouseOut='this.className=\"dpTD\";' onMouseOver='this.className=\"dpTDHover\";' ";
	var TD_todaybutton = "<td colspan=7 class='dpTodayButtonTD'>";
	var TD_days = "<td class='dpDayTD'>";
	var TD_selected = "<td class='dpDayHighlightTD' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
	var xTD = "</td>" + crlf;
	var DIV_title = "<div class='dpTitleText'>";
	var DIV_selected = "<div class='dpDayHighlight'>";
	var xDIV = "</div>";

	// start generating the code for the calendar table
	var html = TABLE;

	// this is the title bar, which displays the month and the buttons to
	// go back to a previous month or forward to the next month
	html += TR_title;
	//html += TD_buttons + getButtonCode(dateFieldName, thisDay, -1, "&lt;") + xTD;
	html += TD + getButtonCode(dateFieldName, thisDay, -1) + "&lt;" + xTD;
	html += TD_title + DIV_title + monthArrayLong[ thisDay.getMonth()] + " " + thisDay.getFullYear() + xDIV + xTD;
	html += TD + getButtonCode(dateFieldName, thisDay, 1)  + "&gt;" + xTD;
	html += xTR;

	// this is the row that indicates which day of the week we're on
	html += TR_days;
	for(i = 0; i < dayArrayShort.length; i++)
		html += TD_days + dayArrayShort[i] + xTD;
	html += xTR;

	// Array vorbelegen
	var x=new Array(6);
	for(z=0;z<6;z++){ // Zeilen: Wochen
		x[z]=new Array(7);
		for(s=0;s<7;s++){ // Spalten: Tage
			x[z][s]=TD + ">&nbsp;" + xTD; // leeres Feld, wird anschliessend ggf. ueberschrieben
			// Zahl wird hingedruckt, sobald der aktuelle Tag (So..Sa) dem ersten Tag des Monats entspricht 
			// und dem aktuellen Monat entspricht (sonst hoert die Darstellung nicht am Monatsende auf)
			if((thisDay.getDay() == s) && (thisDay.getMonth() == month)) {
			    TD_onclick = " onclick=\"updateDateField('" + dateFieldName + "', '" + getDateString(dateFieldName,thisDay) + "');\">";
				x[z][s]=TD + TD_onclick + thisDay.getDate() + xTD; // normales Feld, akt. Tag wird ggf. ueberschrieben
				//if(thisDay.getDate() == currentDate.getDate())
				if(thisDay.getTime() == currentDate[dateFieldName].getTime())
					x[z][s]=TD_selected + TD_onclick + DIV_selected + thisDay.getDate() + xDIV + xTD; // aktueller Tag
				// increment the day
				thisDay.setDate(thisDay.getDate() + 1);			
			}
		}
	}
	// Array drucken
	for(z=0;z<6;z++){ // Zeilen: Wochen
		html += TR;
		for(s=0;s<7;s++){ // Spalten: Tage
			html += x[z][s];
		}
		html += xTR;
	}
	// and finally, close the table
	html += xTABLE;
	document.getElementById(datePickerDivID[dateFieldName]).innerHTML = html;
}


/** Convenience function for writing the code for the buttons that bring us back or forward a month. */
function getButtonCode(dateFieldName, dateVal, adjust){
  var newMonth = (dateVal.getMonth () + adjust) % 12;
  var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
  if (newMonth < 0) {
    newMonth += 12;
    newYear += -1;
  }
  //return "<button class='dpButton' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</button>";
  return "onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>";
}


/** Convert a JavaScript Date object to a string, based on the dateFormat variables at the beginning of this script library. */
function getDateString(dateFieldName,dateVal){
	if(dateVal==null)return null;
	var dayString = "00" + dateVal.getDate();
	var monthString = "00" + (dateVal.getMonth()+1);
	var yearString = "" + dateVal.getFullYear();
	dayString = dayString.substring(dayString.length - 2);
	monthString = monthString.substring(monthString.length - 2);
	var dateString = "";
	for(var i=0;i<dateFormat[dateFieldName].length;i++){
		var c=dateFormat[dateFieldName].charAt(i);
		switch(c){
			case "D":
				dateString += dayArrayShort[ dateVal.getDay() ];
				break;
			case "d":
				dateString += dayString;
				break;
			case "m":
				dateString += monthString;
				break;
			case "y":
		    	dateString += yearString.substring(2);
				break;
			case "Y":
				dateString += yearString;
				break;
			default:
				dateString += c;
		}
	}
	return dateString;
}


/** Convert a string to a JavaScript Date object. */
function getFieldDate(dateFieldName,dateString){
	var pos=0;
	var D=-1, d=-1, m=-1, Y=-1;
	//alert(dateString);
	try{
		for(var i=0;i<dateFormat[dateFieldName].length;i++){
			var c=dateFormat[dateFieldName].charAt(i);
			switch(c){
				case "D":
					D = dateString.substr(pos,2);
					pos+=2;
					break;
				case "d":
					d = parseInt(dateString.substr(pos,2),10);
					pos+=2;
					break;
				case "m":
					m = parseInt(dateString.substr(pos,2),10)-1;
					pos+=2;
					break;
				case "y":
					var y = parseInt(dateString.substr(pos,2),10);
					if(y<50) 
						Y = 2000+y;
					else
						Y = 1900+y;
					pos+=2;
					break;
				case "Y":
					Y = parseInt(dateString.substr(pos,4),10);
					pos+=4; // 2009-04-08(hf): changed from: pos+=2; 
					break;
				default:
					if(dateString.charAt(pos)!=c)
						return null;
					pos+=1;
			}
		}
		//alert(Y+"-"+m+"-"+d);
		if((isNaN(Y))||(isNaN(m))||(isNaN(d))){ // 2009-04-08(hf): changed isNaN(Y) to isNaN(d) (third clause)
			return null;
		}else{
			return new Date(Y, m, d);
		}
	} catch(e) {
		return null;
	}
}

function updateDateField(dateFieldName, dateString){
	var targetDateField = document.getElementsByName (dateFieldName).item(0);
	if (dateString){
		var oldInput = targetDateField.value;
		var oldDate = getDateString(dateFieldName,getFieldDate(dateFieldName,oldInput));
		if(oldDate!=null){
			// hinteren Teil abschneiden
			var oldTail = oldInput.substr(oldInput.indexOf(oldDate)+oldDate.length);
			// und wieder anfügen
			targetDateField.value = dateString + oldTail;
		}
		else{
			targetDateField.value = dateString;
		}
		currentDate[dateFieldName]=getFieldDate(dateFieldName,dateString);
		refreshDatePicker(targetDateField.name, currentDate[dateFieldName].getFullYear(), currentDate[dateFieldName].getMonth(), currentDate[dateFieldName].getDate());
	} 
  targetDateField.focus();
}

