/**********************************************
class Ckalender
Basisklasse für Kalender-Eingabemodule 
Parent=Ctime
-----------------------------------------------
Version 2
Letzte Änderung 15.02.2010 / Eberhard Räder
**********************************************/
//--- Konstruktion ----------------------------
function Ckalender(my_name,classname){ //parameter: variablenname; z.b. var KALENDER =new Ckalender("KALENDER");
	//--- Konfiguration ---
	this.spaltenbreite	=30; 		//überschreiben um die breite des dialogfeldes einzustellen
	this.farbe_heute	='red';		//farbe,mit der das aktuelle datum markiert wird
	this.ausgabeform	=1;			//Datumsaugabe,eingabe; 1=kurz; 2=lang;
	//--- Basiskonstruktion ---
	this.base=Ctime; //parent-class definieren
	this.base(); //parent-konstruktor aufrufen
	//--- Membervariable (Eigenschaften) ---
	this.top 	= 0; //y-position in px;
	this.left	= 0; //x-position in px;
	this.tod_D	=0; //heute tag des monats
	this.tod_M	=0; //heute monat (startet mit 0!!)
	this.tod_Y	=0; //heute jahr
	this.classname=classname || ""; //CSS-klassenname zur änderung des designs
	this.my_name =my_name || "kalender"; //variablenname der instanz
	this.target_id= ""; //id des Elementes, an das das ergebnis geliefert werden soll.
	this.div=document.createElement("div"); //ausgabebereich erzeugen
	this.is_appended=false; //bereich wurde noch nicht implementiert
	s=this.div.style; //css.eigenschaften
	s.position="absolute"; //nur in ausnahmefällen ändern;
	s.backgroundColor="#ffe751"; //hintergrundfarbe des kalenders (standard)
	if(this.classname!="")s.className=this.classname;
	else s.backgroundColor="silver"; //hintergrundfarbe des kalenders (standard)
	
}
Ckalender.prototype=new Ctime; //parent-class implementieren
//--- Memberfunktionen (Methoden) -------------
Ckalender.prototype.set_today=function(){ 			//standardinitialisierung ; beliebiges Datum
	date =new Date();
	this.tod_D		=date.getDate(); 			
	this.tod_M		=date.getMonth(); 
	this.tod_Y		=date.getFullYear(); 
}
Ckalender.prototype.set_position=function(top,left){//CSS; position in pixeln bezogen auf das übergeordnete fenster
	s=this.div.style;
	s.top=top+"px";
	s.left=left+"px";
}
Ckalender.prototype.go_pr_month=function(){ 		//zum vorhergehenden monat springen
	this.M--;
	if(this.M<0){this.M = 11;this.Y--;}
	this.set_date(this.Y,this.M,1);
	this.refresh(this.target_id);
}
Ckalender.prototype.go_next_month=function(){		//zum nächsten monat springen
	this.M++;
	if(this.M>11){this.M = 0;this.Y++;}
	this.set_date(this.Y,this.M,1);
	this.refresh(this.target_id);
}
Ckalender.prototype.go_month=function(month){		//zu einem beliebigen monat springen
	this.set_date(this.Y,month,1);
	this.refresh(this.target_id);
}
Ckalender.prototype.go_year=function(year){			//zu einem beliebigen jahr springen
	this.set_date(year,this.M,1);
	this.refresh(this.target_id);
}
Ckalender.prototype.close=function(){				//zu einem beliebigen jahr springen
	this.div.style.visibility="hidden"; //bereich usichtbar machen
}
Ckalender.prototype.go=function(target_id){
	if(d=document.getElementById(target_id)){
		if(d.value)	{
			this.set_date_string(d.value);
		}
	}
	this.refresh(target_id)
}
Ckalender.prototype.refresh=function(target_id){ 		//erzeugen des html-content !! nicht ändern !!
	this.set_today();
	this.target_id = target_id || "";
	if(!this.is_appended){ // ggf. bereich für Kalenderausgabe implementieren
		document.body.appendChild(this.div);
	 	this.is_appended=true;
		if(this.classname!="")this.div.className=this.classname;
	}
	htm  ='<form><table style="text-align:center;">';
	htm +='<colgroup>';
	for(i=0;i<7;i++)htm +='<col width='+this.spaltenbreite+'>';
	
	htm +='</colgroup>';
	htm +='<tr><td><input onClick="'+this.my_name+'.go_pr_month()" style="width:100%;" type=button value ="&lt;"></td><td colspan=3>';
	//monate zeigen
	var test="this.value";
	htm +='<select name= "monat" style="width:100%;" onchange="'+this.my_name+'.go_month(this.value)">';
	for(i=0;i<12;i++){
		htm +='<option value="'+i+'"';
		if(this.M == i) htm += " selected";
		htm +=' >'+this.r_monat_lang[i]+"</option>";
	}
	htm +='</select>';
	htm +='</td><td><input  onClick="'+this.my_name+'.go_next_month()" style="width:100%;" type=button value ="&gt;"></td>';
	//jahre zeigen;
	htm +='</td><td colspan=2>';
	
	jahr=this.Y -5; //jahre Vorlauf
	htm +='<select name="jahr" style="width:100%;" onchange="'+this.my_name+'.go_year(this.value)">';
	for(i=0;i<11;i++){
		htm +='<option value="'+jahr+'"';
		if(this.Y == jahr)htm += " selected ";
		htm +='>'+jahr+"</option>";
		jahr++;
	}
	htm +='</select>';

	htm +='</tr><tr>';
	//kalender zeigen
	for(i=0;i<7;i++){
		htm +='<td>'+this.r_tage_kurz[i]+'</td>';
	}
	htm +='</tr><tr>';
	dow_1 =new Date(this.Y,this.M,1); 
	dow_1=dow_1.getDay();
	for(i=0;i<dow_1;i++){ //tage des vorgehenden monats
		htm +='<td></td>';
	}
	dom=1;
	for(i=dow_1;i<7;i++){ //tage der ersten woche des aktuellen monats
		if(dom==this.tod_D && this.M==this.tod_M && this.Y==this.tod_Y) htm +='<td><input style="width:100%; color:'+this.farbe_heute+';" type=button value ="'+dom+'" onClick="'+this.my_name+'.return_date('+dom+')"></td>';
		else htm +='<td><input  style="width:100%;" type=button value ="'+dom+'" onClick="'+this.my_name+'.return_date('+dom+')"></td>';
		dom++;
	}
	htm +='</tr><tr>';
	s=0;
	if(this.M==1){
		if(this.sj) this.r_dom[this.M]= 29; 
		else this.r_dom[this.M] = 28; //schaltjahr berücksichtigen;
	}
	while(dom<=this.r_dom[this.M]){//restliche tage des aktuellen monats
		if(s==0)htm +='<tr>'; 
		if(dom==this.tod_D && this.M==this.tod_M && this.Y==this.tod_Y) htm +='<td><input  style="width:100%; color:'+this.farbe_heute+'; font-weight:bold" type=button value ="'+dom+'" onClick="'+this.my_name+'.return_date('+dom+')"></td>';
		else htm +='<td><input style="width:100%;" type=button value ="'+dom+'" onClick="'+this.my_name+'.return_date('+dom+')"></td>';
		dom++;
		s++;
		if(s==7){
			s=0;
			htm += '</tr>';
		}
	}
	if(s>0) htm+= '</tr>';
	htm +='<tr><td colspan=2><input  style="width:100%;" type=button value ="Heute" onClick="'+this.my_name+'.heute()"></td>';
	htm +='<td colspan=3><input  style="width:100%;" type=button value ="Abbrechen" onClick="'+this.my_name+'.close()"></td>';
	htm +='<td colspan=2><input  style="width:100%;" type=button value ="Löschen" onClick="'+this.my_name+'.clear()"></td></tr>';
	htm +='</table></form>';
	this.div.innerHTML=htm;
	this.div.style.visibility="visible"; //bereich sichtbar machen

}
Ckalender.prototype.clear=function(D){
	t= document.getElementById(this.target_id);
	t.value="";
	this.div.style.visibility="hidden"; //bereich usichtbar machen
}
Ckalender.prototype.heute=function(D){
	this.set_time_now();
//	t= document.getElementById(this.target_id); //wenn das aktuelle datum sofort eintetragen werden soll
//	t.value=this.datestring_lang();
	this.refresh(this.target_id);
}
Ckalender.prototype.return_date=function(D){ 		//rückgabe des datum strings an das übergeordnete element; kann in child-klassen überschrieben werden
	this.set_date(this.Y,this.M,D);
	this.div.style.visibility="hidden"; //bereich usichtbar machen
	t= document.getElementById(this.target_id);
	if(this.ausgabeform ==1 )	t.value=this.datestring();
	else						t.value=this.datestring_lang();
	
}
