//<script>
// Preload icon images
i2=new Image();i2.src="images/icon_admin.gif";
i3=new Image();i3.src="images/icon_admin_hot.gif";
i4=new Image();i4.src="images/icon_airc.gif";
i5=new Image();i5.src="images/icon_airc_hot.gif";
i6=new Image();i6.src="images/icon_back.gif";
i7=new Image();i7.src="images/icon_back_hot.gif";
i8=new Image();i8.src="images/icon_config.gif";
i9=new Image();i9.src="images/icon_config_hot.gif";
i10=new Image();i10.src="images/icon_day.gif";
i11=new Image();i11.src="images/icon_day_hot.gif";
i12=new Image();i12.src="images/icon_del.gif";
i13=new Image();i13.src="images/icon_del_hot.gif";
i14=new Image();i14.src="images/icon_edit.gif";
i15=new Image();i15.src="images/icon_edit_hot.gif";
i16=new Image();i16.src="images/icon_exit.gif";
i17=new Image();i17.src="images/icon_exit_hot.gif";
i18=new Image();i18.src="images/icon_goto.gif";
i19=new Image();i19.src="images/icon_goto_hot.gif";
i21=new Image();i21.src="images/icon_month.gif";
i22=new Image();i22.src="images/icon_month_hot.gif";
i23=new Image();i23.src="images/icon_new.gif";
i24=new Image();i24.src="images/icon_new_hot.gif";
i25=new Image();i25.src="images/icon_ok.gif";
i26=new Image();i26.src="images/icon_ok_hot.gif";
i27=new Image();i27.src="images/icon_print.gif";
i28=new Image();i28.src="images/icon_print_hot.gif";
i29=new Image();i29.src="images/icon_search.gif";
i30=new Image();i30.src="images/icon_search_hot.gif";
i31=new Image();i31.src="images/icon_user.gif";
i32=new Image();i32.src="images/icon_user_hot.gif";
i33=new Image();i33.src="images/icon_users.gif";
i34=new Image();i34.src="images/icon_users_hot.gif";
i35=new Image();i35.src="images/icon_weather.gif";
i36=new Image();i36.src="images/icon_weather_hot.gif";

function placeCal (which,where) {
	am=document.getElementById(which);
	but=document.getElementById(where);
	xd=0;yd=0;lr=but;
	while(lr!=null) {xd+=lr.offsetLeft; yd+=lr.offsetTop; lr=lr.offsetParent;}
	am.style.top=(yd+16)+"px";
	am.style.left=(xd-134)+"px";
}

function setAndSubmit (field,value) {
	f=document.forms[0];
	f.elements[field].value=value;
	if (!chkFormular()) return;
	f.submit();
}

function update_calendar(str_target, str_datetime, update_where, str_curdate) {
	var arr_months = ["Januar", "Februar", "Maerz", "April", "Mai", "Juni",
		"Juli", "August", "September", "Oktober", "November", "Dezember"];
	var week_days = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
	var n_weekstart = 1; // day week starts from (normally 0 or 1)

	var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt(str_datetime));
	var dt_curdate  = (str_curdate == null || str_curdate =="" ?  new Date() : str2dt(str_curdate));
	var dt_prev_month = new Date(dt_datetime);
	dt_prev_month.setMonth(dt_datetime.getMonth()-1);
	var dt_next_month = new Date(dt_datetime);
	dt_next_month.setMonth(dt_datetime.getMonth()+1);
	var dt_firstday = new Date(dt_datetime);
	dt_firstday.setDate(1);
	dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
	var dt_lastday = new Date(dt_next_month);
	dt_lastday.setDate(0);
	
	// html generation (feel free to tune it for your particular application)
	// print calendar header
	var str_buffer = new String (
		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
		"<tr><td bgcolor=\"#4682B4\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"1\" border=\"0\" width=\"100%\">\n"+
		"<tr>\n	<td bgcolor=\"#4682B4\">"+
		"<img src=\"images/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" onClick=\"update_calendar('"+
		str_target+"', '"+ dt2dtstr(dt_prev_month)+"','"+update_where+"','"+dt2dtstr(dt_curdate)+"');\" alt=\"previous month\"></td>\n"+
		"	<td bgcolor=\"#4682B4\" colspan=\"4\" nowrap>"+
		"<font color=\"white\" face=\"tahoma, verdana\" size=\"1\">"
		+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
		"	<td bgcolor=\"#4682B4\" align=\"right\">"+
		"<img src=\"images/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" onClick=\"update_calendar('"
		+str_target+"', '"+dt2dtstr(dt_next_month)+"','"+update_where+"','"+dt2dtstr(dt_curdate)+"');\" alt=\"next month\"></td>\n"+
		"	<td bgcolor=\"#4682B4\" align=\"right\">"+
		"<img src=\"images/close.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" onClick=\"document.getElementById('"+update_where+"').style.display='none';if(self.afterCal)afterCal();\"></td>\n</tr>\n"
	);

	var dt_current_day = new Date(dt_firstday);
	// print weekdays titles
	str_buffer += "<tr>\n";
	for (var n=0; n<7; n++)
		str_buffer += "	<td bgcolor=\"#87CEFA\">"+
		"<font color=\"white\" face=\"tahoma, verdana\" size=\"1\">"+
		week_days[(n_weekstart+n)%7]+"</font></td>\n";
	// print calendar table
	str_buffer += "</tr>\n";
	while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
		dt_current_day.getMonth() == dt_firstday.getMonth()) {
		// print row heder
		str_buffer += "<tr>\n";
		for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
				click="style=\"cursor: pointer;\" onClick=\""+str_target+".value='"+ dt2dtstr(dt_current_day)+"';document.getElementById('"+update_where+"').style.display='none';if(self.afterCal)afterCal();update_values();\"";
				if (dt_current_day.getDate() == dt_curdate.getDate() &&
					dt_current_day.getMonth() == dt_curdate.getMonth())
					// print current date
					str_buffer += "	<td width=18 bgcolor=\"#FFB6C1\" align=\"right\" "+click+">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td width=18 bgcolor=\"#DBEAF5\" align=\"right\" "+click+">";
				else
					// print working days of current month
					str_buffer += "	<td width=18 bgcolor=\"white\" align=\"right\" "+click+">";

				if (dt_current_day.getMonth() == dt_datetime.getMonth())
					// print days of current month
					str_buffer += "<font color=\"black\" face=\"tahoma, verdana\" size=\"1\">";
				else 
					// print days of other months
					str_buffer += "<font color=\"gray\" face=\"tahoma, verdana\" size=\"1\">";
				str_buffer += dt_current_day.getDate()+"</font></td>\n";
				dt_current_day.setDate(dt_current_day.getDate()+1);
		}
		// print row footer
		str_buffer += "</tr>\n";
	}
	// print calendar footer
	str_buffer +=
		"</table>\n" +
		"</tr>\n</td>\n</table>";
		
		document.getElementById(update_where).innerHTML=str_buffer;
}
// datetime parsing and formatting routimes. modify them if you wish other datetime format
function str2dt (str_datetime) {
	var re_date = /^(\d+)\.(\d+)\.(\d+)$/;
	if (!re_date.exec(str_datetime))
		return alert("Invalid Datetime format: "+ str_datetime);
	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1));
}
function dt2dtstr (dt_datetime) {
	return (new String (
			dt_datetime.getDate()+"."+(dt_datetime.getMonth()+1)+"."+dt_datetime.getFullYear()));
}
function date2sqldate(str) {
	var re_date = /^(\d+)\.(\d+)\.(\d+)$/;
	if (!re_date.exec(str))
		return alert("Invalid Datetime format: "+ str);
	return (RegExp.$3+"-"+(RegExp.$2.length<2?"0":"")+RegExp.$2+"-"+(RegExp.$1.length<2?"0":"")+RegExp.$1);
}

function encode64(input) {
   var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}