var Monat= new Array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
var MonatsTage = new Array('31','28','31','30','31','30','31','31','30','31','30','31');
var WochenTag=new Array('Sontag','Montag','Dinstag','Mitwoch','Donerstag','Freitag','Samstag');
/*weekday[0]="Sontag";
weekday[1]="Montag";
weekday[2]="Dinstag";
weekday[3]="Mitwoch";
weekday[4]="Donerstag";
weekday[5]="Freitag";
weekday[6]="Samstag";*/

var current_input_id_arr= Array();

var current_kalender;//teil von id des kalenders

var current_input_id;
var current_input_idx=0;
var current_day;
var current_month;
var current_year;

var CacheKalender= new Array(); //Cache of id names of table cells
var current_td_id=0; //id von current cell(selected day) in table
var result; //result on keypress

//**************************
function isZahl(e,f,len){
	 var isIE = (String(typeof(document.all)) != "undefined");
	 if (isIE) key = e.keyCode;
     else key = e.which;

	 ln = parseInt(f.value.length);
	 if (ln==3 && (key >= 48 && key <= 57)){
	 	return "ok";
	 }
	 if ( (ln > len-1) && (key !=8 ) ) {
	 	return false;
	 }else if ( (key >= 48 && key <= 57) || (key ==8 ) || (key ==0 ) ){
	 	return true;
	 }else{
	 	return false;
	 }
}//#

function onchange_jahr(set){
	if (set=="ok"){
		fill_kalender();
		result= "";
	}
}//#

//**************************
function set_kalender(id,visibility){
	var obj= document.getElementById(id);
	obj.style.visibility= visibility;
}//#

//******* INPUT DATE ***********
function set_input_date(id,dd,mm,yyyy){
	var obj= document.getElementById(id);
	if (dd < 10){
		dd= "0"+eval(dd);
	}
	if (mm < 10){
		mm= "0"+eval(mm);
	}
	obj.value= dd+"."+mm+"."+yyyy;
	//alert(obj.value);
}//#

function onclick_day(id){
	var obj= document.getElementById(id);
	var dmax= get_days(current_year, current_month);
	day= obj.innerHTML;
	if (day != "&nbsp;" || day > 0){
		day= eval(obj.innerHTML);
	}else{
		return;
	}
	/*if (day > 0 && day <= dmax){
	}else{alert(day+" "+dmax);
		return;
	}*/

	current_day= day;
	if (day > dmax){
		current_day= dmax;
	}


	current_td_id.className= 'td_unselect';
	obj.className= 'td_select';
	current_td_id= obj;

	set_input_date(current_input_id,day,current_month,current_year);
}//#

function onkeypress_setKalender(){
	var obj= document.getElementById(current_input_id);
	var datum= isDatumValid(obj.value);//alert(datum);
	if(!datum){
		return;
	}
	current_day= datum[2];
	current_month= datum[3];
	current_year= datum[4];
	set_monat(current_month-1);
	set_jahr(current_year);
	fill_kalender_feld();
	return;
}//#

//******* DAY *************
function set_next_day(id,in_day){
	current_day+= in_day;
	var dmax= get_days(current_year, current_month);
	if (current_day > dmax){
		current_day= 1;
		current_month= next_monat()+1;
	}
	set_input_date(id,current_day,current_month,current_year);
}//#

//******* WOCHE *************
// return nummer des wochentages von 1 tag den monat
function get_weekday(jahr,monat){//monat 1-12
	var dw= new Date(jahr,monat-1,1);//function verwendet monat von 0 bis 11
	dw= dw.getDay(); // 0 - So, 1 - Mo, 2 - Di, 3 - Mi, 4 - Do, 5 - Fr, 6 - Sa
	if (!dw){
		return 6;
	}else{
		return dw-1;
	}
}//# return 0 - Mo, 1 - Di, 2 - Mi, 3 - Do, 4 - Fr, 5 - Sa, 6 - So

//******* MONAT *************
function set_monat(n){// 0-11
	var obj= document.getElementById(current_kalender+'monat');
	obj[n].selected= true;
	//obj.cells[0].innerHTML= monats[n];
}//#

function next_monat(){
	var obj= document.getElementById(current_kalender+'monat');
	var pos= obj.selectedIndex+1;
	var len= obj.length;
	if (pos >= len){
		next_jahr();
		pos= 0;
	}
	return pos;
}//#

function onclick_next_monat(){
	var pos= next_monat();
	var obj= document.getElementById(current_kalender+'monat');
	obj[pos].selected= true;
	fill_kalender();
}//#
function onclick_prev_monat(){
	var obj= document.getElementById(current_kalender+'monat');
	var pos= obj.selectedIndex-1;
	var len= obj.length;
	if (pos < 0){
		prev_jahr();
		pos= len-1;
	}
	obj[pos].selected= true;
	fill_kalender();
}//#
function get_monat(){//return 1-12
	var obj= document.getElementById(current_kalender+'monat');
	return (obj.selectedIndex+1);
}//#

//return Anzahl Tage im Monat(1-12)
function get_days(jahr,monat){
	monat;
	if (monat==2){// Februar
		if (jahr % 4){
			return 28;
		}else{
			return 29;
		}
	}else{
		return MonatsTage[monat-1];
	}
}//#

function onchange_setMonat(id){
	//var obj= document.getElementById(id);
	//var n= obj.selectedIndex;
	fill_kalender();
}//#

//******** JAHR ***************
function set_jahr(n){
	var obj= document.getElementById(current_kalender+'jahr');
	obj.value=n;
}//#
function next_jahr(){
	var obj= document.getElementById(current_kalender+'jahr');
	obj.value++;
}//#
function onclick_next_jahr(){
	next_jahr();
	fill_kalender();
}//#
function prev_jahr(){
	var obj= document.getElementById(current_kalender+'jahr');
	obj.value--;
}//#
function onclick_prev_jahr(){
	prev_jahr();
	fill_kalender();
}//#
function get_jahr(){
	var obj= document.getElementById(current_kalender+'jahr');
	return obj.value;
}//#

//******* SET KALENDER ***********
function setCacheKalender(){
	CacheKalender[current_kalender]= new Array(); //alert(current_kalender);
	var tpl= '';
	for ( var j= 0; j < 6; j++){
		CacheKalender[current_kalender][j]= new Array();
		document.writeln('<tr>');
		for ( var ii= 0; ii < 7; ii++){
			idname= j+'_'+ii;
			tpl= '<td id='+current_kalender+idname+' class=td_nodate onclick="onclick_day('+"'"+current_kalender+idname+"'"+');">&nbsp</td>';
			document.writeln(tpl);
			CacheKalender[current_kalender][j][ii]= document.getElementById(current_kalender+idname);
		}
		document.writeln('</tr>');
	}
}//#

function fill_kalender_feld(){
	var jahr= get_jahr();
	var monat= get_monat();
	var num_days= get_days(jahr,monat);
	var dweek= get_weekday(jahr,monat);
	var dmax= get_days(jahr, monat);

	current_month= monat;
	current_year= jahr;
	//alert(current_kalender);
	var day= 1;
	var cell= 0;
	//while(CacheKalender[j][i] ){
	for ( var j= 0; j < 6; j++){
		for ( var i= 0; i < 7; i++){
			if ( (cell < dweek) || (day > num_days) ){//set empty cells
				CacheKalender[current_kalender][j][i].innerHTML= "&nbsp;";
				CacheKalender[current_kalender][j][i].className= 'td_nodate';
			}else{
				if (current_day > dmax){
					current_day= dmax;
				}
				CacheKalender[current_kalender][j][i].innerHTML= day;
				if (day== current_day){
					if (current_td_id){
						current_td_id.className= 'td_unselect';
					}
					current_td_id= CacheKalender[current_kalender][j][i];
					current_td_id.className= 'td_select';
				}else{
					CacheKalender[current_kalender][j][i].className= 'td_unselect';
				}
				if (4 < i){
					CacheKalender[current_kalender][j][i].style.color= "#AA4444";
				}else {

				}
				day++;
			}
		cell++;
		}//for i
	}//for j
	//set_input_date(current_input_id,current_day,monat,jahr);
}//#

function fill_kalender(){
	var jahr= get_jahr();
	var monat= get_monat();
	var dmax= get_days(jahr, monat);
	fill_kalender_feld();
	if (current_day > dmax){
		current_day= dmax;
	}
	set_input_date(current_input_id,current_day,monat,jahr);
}//#

function show_kalender(id, inp_id){
	var id_old;
	if (id == 'anreise_datum'){
		id_old= 'abreise_datum';
	}
	if (id == 'abreise_datum'){
		id_old= 'anreise_datum';
	}

	var obj= document.getElementById(id);
	if (obj.style.visibility=='visible'){
		obj.style.visibility='hidden';
	}else{
		document.getElementById(id_old).style.visibility='hidden';
		current_kalender= current_input_id= current_input_id_arr[inp_id]; //alert(current_input_id);
		InitKalender();
		obj.style.visibility='visible';
	}

}//#



//******* INIT *****************
function isDatumValid(str){
	var valid= "^(([0-9]{2}).([0-9]{2}).([0-9]{4}))$";
	var regex= new RegExp(valid,"g");
	var datum= regex.exec(str); //array: [2] - TT; [3] - MM; [4] - JJJJ
	if ( !datum || datum[2]<1 || datum[2]>31 ||
				   datum[3]<1 || datum[3]>12 || datum[4]<1900 ){
		return false;
	}else{
		return datum; //array: [2] - TT; [3] - MM; [4] - JJJJ
	}
}//#

function SetKalender(id){ // NUR 1 Mal bei Start
	/*var i=0;
	while(current_input_id_arr[i]){
		i++;
	}//*/
	current_input_id_arr[id]= id;
	current_kalender= id;

	current_input_id= id;// id von input feld
	var datum= new Date();
	current_day= datum.getDate();
	current_month= datum.getMonth()+1;
	current_year= datum.getFullYear();
	set_input_date(current_input_id,current_day,current_month,current_year);
}//#

function InitKalender(){
	obj= document.getElementById(current_input_id);
	var datum= isDatumValid(obj.value);
	if (datum){
		current_day= datum[2];
		current_month= datum[3];
		current_year= datum[4];
	}else{
		setHeute();
		current_month++;
		if(current_input_id=='anreise'){
			set_next_day('anreise',1);
		}
		if(current_input_id=='abreise'){
			set_next_day('abreise',2);
		}
	}

	set_monat(current_month-1);
	set_jahr(current_year);
	fill_kalender();
}//#

function setHeute(){
	var datum= new Date();
	current_day= datum.getDate();
	current_month= datum.getMonth();
	current_year= datum.getFullYear();
	//alert("Huete ist " + WochenTag[datum.getDay()]);
}//#

function onclick_setHeute(){
	setHeute();
	set_monat(current_month);
	set_jahr(current_year);
	fill_kalender();
}//#

// *********** CHECK **************
function idDateKorrekt(date){
	var valid= "^(([0-9]{2}).([0-9]{2}).([0-9]{4}))$";
	var regex= new RegExp(valid,"g");
	var datum= regex.exec(date); //array: [2] - TT; [3] - MM; [4] - JJJJ
	if ( !datum || datum[2]<1 || datum[2]>31 ||
				   datum[3]<1 || datum[3]>12 || datum[4]<1900 ){
		return false;
	}else{

		return true;
	}
}//#
function show_kalender_err(id,msg,show){
	var obj= document.getElementById(id+'_err');
	if (!show){
		obj.innerHTML= '';
		obj.className= 'noerr_kalender';
	}else{
		obj.innerHTML= msg;
		obj.className= 'err_kalender';
	}
}//#


// ********** TEMPLATE ***************
function tpl_Kalender(input_id,kalender_id,label){
	current_input_id_arr[input_id]= input_id;
	current_kalender= input_id;
	//alert(input_id);
	var tpl=
'<Table class=table_input_kalender><tr>  <!-- Input Feld + Kalender  -->'+
'<td>'+
	'<label for='+input_id+'>'+label+'</label>'+
	'<input id='+input_id+' onkeyup="onkeypress_setKalender();return true;" name='+input_id+' class="datum">&nbsp;'+
	'<img src="fileadmin/jscript/kalender/cal.gif" onclick="show_kalender('+"'"+kalender_id+"'"+','+"'"+input_id+"'"+');" style="vertical-align:top;">'+
'</td>'+

'<td>'+
	'<DIV id='+kalender_id+' class=div_kalender onblur="">'+
		'<TABLE class=table_kalender>'+
	'<tr>'+
	'<td>'+
	'<table id='+input_id+'_monat_jahr width=100%>'+
		'<tr>'+
			'<td><a class=prev_next onclick="onclick_prev_monat();return false;" href=""> &#171; </a>'+
			'<select id='+input_id+'monat onchange="onchange_setMonat('+"'"+input_id+'monat'+"'"+')">'+
				'<option>Januar</option>'+
				'<option>Februar</option>'+
				'<option>M&auml;rz</option>'+
				'<option>April</option>'+
				'<option>Mai</option>'+
				'<option>Juni</option>'+
				'<option>Juli</option>'+
				'<option>August</option>'+
				'<option>September</option>'+
				'<option>Oktober</option>'+
				'<option>November</option>'+
				'<option>Dezember</option>'+
			'</select>'+
			'<a class=prev_next onclick="onclick_next_monat();return false;" href=""> &#187; </a> </td>'+

			'<td><a class=prev_next onclick="onclick_prev_jahr();return false;" href=""> &#171; </a>'+
				'<input id='+input_id+'jahr value="" size=2 style="width:36px" onkeypress="return result= isZahl(event,this,4);" onchange="//onchange_jahr(result);" onkeyup="onchange_jahr(result);">'+
			'<a class=prev_next onclick="onclick_next_jahr();return false;" href=""> &#187; </a></td>'+
		'</tr>'+
	'</table>'+
	'</td>'+
	'</tr>'+

	'<tr>'+
	'<td align="center">'+
	'<a class=lnk_heute onclick="onclick_setHeute();return false;" href="">Heute</a>'+
	'</td>'+
	'</tr>'+

	'<tr>'+
	'<td>'+

	'<table id='+input_id+'_kalender>'+
		'<tr>'+
			'<td class=td_woche>Mo</td>'+
			'<td class=td_woche>Di</td>'+
			'<td class=td_woche>Mi</td>'+
			'<td class=td_woche>Do</td>'+
			'<td class=td_woche>Fr</td>'+
			'<td class=td_wocheende>Sa</td>'+
			'<td class=td_wocheende>So</td>'+
		'</tr>'+
	'<script type=text/javascript>setCacheKalender();</script>'+

	'</table>'+

	'</td>'+
	'</tr>'+

	'<tr>'+
	'<td align="center">'+
	'<a class=lnk_heute onclick="show_kalender('+"'"+kalender_id+"'"+','+"'"+input_id+"'"+');return false;" href="">schlie&szlig;en</a>'+
	'</td>'+
	'</tr>'+

	'</TABLE>'+
	'</DIV>'+

'</td>'+
'</tr></Table>  '+
'<div id='+input_id+'_err class=err_kalender>'+
'</div>'+
'<br>'+
'<!-- Input Feld + Kalender  -->';

document.writeln(tpl);

}//#
