function clearFromToError(){
	with(new mslib()){
		
		var today		= dateToTimeStamp(new Date());
		var from 		= openDatePicker.prototype.fromElement;
		var fromStamp	= stringToTimeStamp(from.value);
		var to 			= openDatePicker.prototype.toElement;
		var toStamp		= stringToTimeStamp(to.value);	
		
		/* Von liegt in Vergangenheit */
		if(fromStamp){
			if(fromStamp < today){
				from.value 	= dateToString(new Date());
				fromStamp	= stringToTimeStamp(from.value);
			}//end if
		}//end if
		
		/* Bis liegt in Vergangenheit */
		if(toStamp){
			if(toStamp < today){
				to.value 	= dateToString(new Date());
				toStamp		= stringToTimeStamp(to.value);
			}//end if
		}//end if
		
		/*bis liegt vor von*/
		if(fromStamp && toStamp){
			if(fromStamp > toStamp){
				to.value = "";
			}
		}//end if
		
	}//end with
}//end function
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function setFrom(DateObject, DateString){
	
	with(new mslib()){
		with(openDatePicker.prototype.fromElement){
			value = dateToString(DateObject);
			title = DateString;
		}//end with
	}//end with
	
	clearFromToError();
	
}//end if
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getFrom(){
	var date;
	with(new mslib()){
		if(date = stringToDate(openDatePicker.prototype.fromElement.value)){
			return(date);
		}//end if
		else{
			return(new Date());
		}
	}//end with
}//end function
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getTo(){
	
	var date;
	var von 	= openDatePicker.prototype.fromElement;
	var bis 	= openDatePicker.prototype.toElement;
	
	with(new mslib()){
		if( (date=stringToDate(bis.value)) || (date=stringToDate(von.value)) || (date = new Date()) ){
			return(date);
		}//end if
	}//end with
	
	return(new Date());
	
}//end function
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function setTo(DateObject, DateString){
	with(new mslib()){
		with(openDatePicker.prototype.toElement){
			value = dateToString(DateObject);
			title = DateString;
		}//end with
	}//end with
	
	clearFromToError();
	
}//end if
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getMonthTable(Jahr, Monat, InputElement){
	
	var Months    = new Array("Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember", "Januar");
	var WeekDays  = new Array("MO", "DI", "MI", "DO", "FR" ,"SA", "SO");
		
	with(new Date(Jahr, Monat, 0)){
		var Month       = getMonth();  //Monat numerisch, 0 indiziert
		var Day         = getDay();   //Wochentag des ersten Tages im Monat,  0 indiziert
	} // end with
	
	var DaysOfMonth = new Date(Jahr, Monat+1, 0).getDate();	
	var Calandar    = new Array(42);
	
	var index     = Day;
	var RealMonat = parseInt(Monat) + 1;
	var parameter = new Array(Jahr, RealMonat,1, "'" + InputElement + "'");
	var onclick   = '';
	
	//var Bereich = document.getElementsByName("bereich")[0].value;
	var inaktiv = "";
	for(var i = 1; i <= DaysOfMonth; i++){
		
			if(new Date(Jahr, Monat, i+1).getTime() >= new Date().getTime()){
				parameter[2]    = i;
				inaktiv = " aktiv";
				onclick = 'onClick="setDay(' + parameter.join(",") + ')"';
				
			} // end if 
			else {
				inaktiv = " inaktiv";
			}
	
		
		Calandar[index] = '<input class = "calendar '+inaktiv+'" ' + onclick + ' size="2" type="text" value="' + i + '" readonly/>';
		index++;
	
	}//end for
	
	Calandar[index] = '<input class = "calendar"  style="visibility: hidden; display:block;" size="2" type="text" value="" readonly/>';
	Calandar[41]    = '<input class = "calendar"  style="visibility: hidden; display:block;" size="2" type="text" value="" readonly/>';
	
	
	var rows = '';
	for (var i = 0; i < Calandar.length; i+=7){
  		//console.log(i);
	
		rows+= '<tr>';
		rows+=	'<td>';
  		rows+= 		Calandar.slice(i,i+6).join('</td><td>');
		rows+= '</td>';
		if(i==0 || i==7 || i == 14 || i == 21 || i == 28 || i == 35){
			rows+=	'<td class="calendar_sunday">';
			rows+= 		Calandar.slice(i+6,i+7).join('</td><td>');
			rows+= '</td>';
		}
		rows+= '</tr>';
  
	} // end for

	var MonatPrev = (Monat == 0) ? 11			: Monat - 1;
	var JahrPrev  = (Monat == 0) ? Jahr - 1		: Jahr;
	
	var MonatNext = (Monat == 11) ? 0			: Monat + 1;
	var JahrNext  = (Monat == 11) ? Jahr + 1	: Jahr;
	
	var action = new Array("Next", "Prev");
	
	action["Next"] = '<a class="calendar" href="javascript:void(0);" onClick="setNewMonthTable(' + JahrNext + ', ' + MonatNext + ', \'' + InputElement +'\')">vor</a>';
	action["Prev"] = '<a class="calendar" href="javascript:void(0);" onClick="setNewMonthTable(' + JahrPrev + ', ' + MonatPrev + ', \'' + InputElement +'\')">zur&uuml;ck</a>';
		
	var table = '';
		table+= '<table class="calendar" border="0" cellpadding="2" cellspacing="2">';
		table+= '<tr>';
		table+= 	'<th colspan="2" align="left">' + action["Prev"] + '</th>';
		table+=		'<th colspan="3" align="center">' + Months[Month+1] +"<br />"+ Jahr+'</th>';
		table+=		'<th colspan="2" align="right">' + action["Next"] + '</th>';
		table+=	'</tr>';
		table+= '<tr>';
		table+= 	'<td align="center">';
		table+= 		WeekDays.join('</td><td  align="center">');
		table+=	 	'</td>';
		table+=	'</tr>';
		table+= rows;
		table+= '<tr>';
		table+= 	'<td colspan="7" align="right" >';
		table+= 		'<a class="calendar" href="javascript:void(0);" onClick="closeCalendar()">schliessen</a>';
		table+= 	'</td>';
		table+=	'</tr>';
		table+= '</table>';
	
	return(table);
	
} // end function  


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function setNewMonthTable(jahr, monat, InputElement){
	
	document.getElementById("calendar").innerHTML = getMonthTable(jahr, monat, InputElement);
		
} // end function

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function setDay(Jahr, Monat, Tag, InputElement){
	
	document.getElementsByName(String(InputElement))[0].value = new Array(Tag, Monat, Jahr).join(".");
	closeCalendar();
		
	if(typeof(window.copy_bis_datum) == "function" && InputElement == 'bis')	{	//prüfe ob es diese function gibt
		copy_bis_datum();
	}
}// end function setDate

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function closeCalendar(){

	document.getElementById("calendar").innerHTML = "";	
	
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function openCalendar(Ereignis, InputElement){
  if(!$("calendar")){
	  document.body.insert('<div id="calendar" style="z-index:100; position:absolute;"></div>');
  }
	if (Ereignis){
		
		var pos = Element.extend(Ereignis).cumulativeOffset();
		document.getElementById("calendar").style.left	=(pos.left +20) + "px";
    	document.getElementById("calendar").style.top  	= (pos.top) + "px";
		
		var jetzt = new Date();
		setNewMonthTable(jetzt.getFullYear(), jetzt.getMonth(), InputElement);
		
	} // end if
	
} // end function 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function openDatePicker(FromElement, ToElement, CallBack, GetStart, Language, Event, ClickElement){

	openDatePicker.prototype.fromElement = FromElement;
	openDatePicker.prototype.toElement	 = ToElement;
	
	return(
		   new msc(
				CallBack, 
				GetStart(),
				[new Date().getFullYear(),new Date().getFullYear()+1], 
				Event,
				Language, 
				ClickElement
			)
	);

}//end function 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function openDatePicker2(nameElement,Event){
	
	/* Aktueller Context */
	openDatePicker2.prototype.context = {
		"intervall" 	: [],
		"inputElement"	: {},
		"imageElement"	: {}
	};
	
	openDatePicker2.prototype.callback = function(X){
		with(openDatePicker2.prototype.context){
			alert(X);
		}//end with
	}//end if
	
	/* von/bis-Elemente über gemeinsamen Namen ermitteln */
	for(var i=0;i<document.getElementsByName(nameElement.name).length;i++){
		openDatePicker2.prototype.context.intervall[i%2] = document.getElementsByName(nameElement.name)[i];
	}//end for
	
	/* in die Biliothek gehen */
	with(new mslib()){
		
		// Zeilenumbrüche, Kommentare usw entfernen
		removeChildNodes(nameElement, [1]);
		
		//input und image anhand unterschiedlicher Attribute ermitteln
		for(var i=0;i<nameElement.childNodes.length;i++){
			if(nameElement.childNodes[i].type == "text"){
				openDatePicker2.prototype.context.inputElement = nameElement.childNodes[i];
			}//end if
			if(nameElement.childNodes[i].src){
				openDatePicker2.prototype.context.imageElement = nameElement.childNodes[i];
			}//end if
		}//end for
	
		/* Kalender aufrufen */
		new msc(
			openDatePicker2.prototype.callback,
			new Date(),
			[new Date().getFullYear(),new Date().getFullYear()+1], 
			Event,
			"de",
			openDatePicker2.prototype.context.imageElement
		)
	
	}//end with
	
}//end function
