 FWS_Calendar.instance =null;  FWS_Calendar.id ='fws_calendar';FWS_Calendar.language =new Array();    function FWS_Calendar(path,inputId,onSelected) {this.cssFile ='';this.path =path; this.inputId = inputId; this.onStartUp =null; this.maxYear =2020;this.minYear =1900;	if(typeof onSelected !='function'){this.onSelected =function(date) {var input =FWS_getElement(this.inputId); var val =date.getFullYear() +"-";val +=this.get2Digits((date.getMonth() +1))+"-"+this.get2Digits(date.getDate()); 	input.value =val; };}else this.onSelected =onSelected; this.selectedDate =null; this.date =new Date(); this.display =display; this.setCSSFile =setCSSFile; this.nextMonth =nextMonth; this.prevMonth =prevMonth; this.prevYear =prevYear; this.nextYear =nextYear; this.setStartUpFunction =setStartUpFunction; this.setSelectedDate =setSelectedDate; this.setMinYear =setMinYear; this.setMaxYear =setMaxYear; this.enableButton =enableButton; this.disableButton =disableButton; this.adjustButtons =adjustButtons;      this.get2Digits =function(input) {	if(input <10)return '0'+ input; return input; }; this.dateToString =function(date,comps,sep) {	if(typeof comps=='undefined')comps=new Array('m','d','Y'); 	if(typeof sep =='undefined')sep ='/';var str ='';for(var i =0; i <comps.length; i++) {switch(comps[i]) {case 'm':str +=this.get2Digits(date.getMonth() +1);break; case 'd':str +=this.get2Digits(date.getDate()); break; case 'Y':str +=this.get2Digits(date.getFullYear()); break; }str +=sep; }return str.substr(0,str.length -1);}; this.stringToDate =function(str,comps,sep) {	if(typeof comps=='undefined')comps=new Array('m','d','Y'); 	if(typeof sep =='undefined')sep ='/';var day,month,year; var parts =str.split(sep); for(var i =0; i <comps.length; i++) {switch(comps[i]) {case 'm':month =parts[i] -1;break; case 'd':day=parts[i]; break; case 'Y':year =parts[i]; break; }}return new Date(year,month,day,0,0,0); };this.getHTML =function() {var html ='';html +='<table>'+"\n";html +='	<thead>'+"\n";html +='		<tr>'+"\n";html +='			<td id="fwscal_prev_year" class="cal_button"';html +=' onmouseover="this.className = \'cal_button_hover\';"'; html +=' onmouseout="this.className = \'cal_button\';"'; html +=' onclick="FWS_Calendar.instance.prevYear();">&lt;&lt;</td>'+"\n";html +='			<td id="fwscal_prev_month" class="cal_button"';html +=' onmouseover="this.className = \'cal_button_hover\';"'; html +=' onmouseout="this.className = \'cal_button\';"'; html +=' onclick="FWS_Calendar.instance.prevMonth();">&lt;</td>'+"\n";html +='			<td id="cal_headline" class="cal_month" colspan="4">&nbsp;</td>'+"\n";html +='			<td id="fwscal_next_month" class="cal_button"';html +=' onmouseover="this.className = \'cal_button_hover\';"'; html +=' onmouseout="this.className = \'cal_button\';"'; html +=' onclick="FWS_Calendar.instance.nextMonth();">&gt;</td>'+"\n";html +='			<td id="fwscal_next_year" class="cal_button"';html +=' onmouseover="this.className = \'cal_button_hover\';"'; html +=' onmouseout="this.className = \'cal_button\';"'; html +=' onclick="FWS_Calendar.instance.nextYear();">&gt;&gt;</td>'+"\n";html +='		</tr>'+"\n";html +='		<tr>'+"\n";for(var x=0;x<8;x++){	if(x ==0)html +='			<td class="cal_wkcorner">&nbsp;</td>'+"\n";else html +='			<td class="cal_wkday">'+FWS_Calendar.language['wd_' +(x-1)]+'</td>'+"\n";}html +='		</tr>'+"\n";html +='	</thead>'+"\n";html +='	<tbody>'+"\n";for(var i =0;i <6;i++) {html +='		<tr>'+"\n";for(var x=0;x<8;x++){	if(x ==0)html +='			<td class="cal_wkno" id="cal_col_'+ i +'_'+x+'">&nbsp;</td>'+"\n";else html +='			<td id="cal_col_'+ i +'_'+x+'">&nbsp;</td>'+"\n";}html +='		</tr>'+"\n";}html +='	</tbody>'+"\n";html +='	<tfoot>'+"\n";html +='		<tr>'+"\n";html +='			<td colspan="8">';html +='<a href="javascript:FWS_hideElement(\'' + FWS_Calendar.id + '\');">';html +=FWS_Calendar.language['close'] +'</a></td>'+"\n";html +='		</tr>'+"\n";html +='	</tfoot>'+"\n";html +='</table>'+"\n";return html; };this.setPrevMonth =function() {	if(this.date.getMonth() >0)this.date.setMonth(this.date.getMonth() -1);else {	if(this.date.getFullYear() >this.minYear) {this.date.setMonth(11); this.date.setFullYear(this.date.getFullYear() -1);}}this.adjustButtons(); };this.setNextMonth =function(adjustButtons) {	if(this.date.getMonth() <11)this.date.setMonth(this.date.getMonth() +1);else {	if(this.date.getFullYear() <this.maxYear) {this.date.setMonth(0); this.date.setFullYear(this.date.getFullYear() +1);}}	if(typeof adjustButtons !='undefined'&&adjustButtons) this.adjustButtons(); }; this._onSelected =function(id) {var col=FWS_getElement(id); var day=parseInt(col.innerHTML); 	if(day) {this.selectedDate =new Date(this.date.getFullYear(),this.date.getMonth(),day,0,0,0); this.onSelected(this.selectedDate); }};this.fill =function() { var year =this.date.getFullYear(); var month =this.date.getMonth(); var cday=this.date.getDate(); var day=1;var now =new Date(); var nyear =now.getFullYear(); var nmonth =now.getMonth(); var nday =now.getDate(); var syear =this.selectedDate !=null ?this.selectedDate.getFullYear() :-1;var smonth =this.selectedDate !=null ?this.selectedDate.getMonth() :-1;var sday=this.selectedDate !=null ?this.selectedDate.getDate() :-1;var monthDays =this.date.getMonthDays(); var lastMonthDays =this.date.getMonthDays(month >0?month -1:11);var weekDay =this.date.getFirstGerWeekDayInMonth(); var realDay =lastMonthDays -weekDay; for(var y=0;y<6;y++){	if(day >monthDays +1)this.setNextMonth(); this.date.setDate(day >monthDays +1?realDay :day);var week =this.date.getWeekOfYear(); this.date.setDate(cday); this.date.setMonth(month); this.date.setFullYear(year); var col=FWS_getElement('cal_col_' +y+'_0');col.innerHTML =week; for(var x=1;x<8;x++){var col=FWS_getElement('cal_col_' +y+'_'+x);	if(weekDay !=null ||day>monthDays +1)realDay++; else realDay =1;   	if(day <=monthDays &&(weekDay ==null ||weekDay ==x-1)){col.innerHTML =day;col.className ='cal_valid';	if(nyear ==year &&nmonth ==month &&nday ==day)FWS_addClassName(col,'cal_today'); 	if(syear ==year &&smonth ==month &&sday==day)FWS_addClassName(col,'cal_selected'); col.onmouseover =function() {FWS_addClassName(this,'cal_valid_hover'); };col.onmouseout =function() {FWS_removeClassName(this,'cal_valid_hover'); };col.onclick =function() {FWS_hideElement(FWS_Calendar.id); FWS_Calendar.instance._onSelected(this.id); };weekDay =null; }else {col.onmouseover =null; col.onmouseout =null; col.onclick =null; col.innerHTML =realDay; col.className ='cal_invalid';}	if(weekDay ==null) day++;}} var headline =FWS_getElement('cal_headline'); headline.innerHTML =FWS_Calendar.language['month_' +month] +' '+year; }} function setMinYear(year) {this.minYear =year; } function setMaxYear(year) {this.maxYear =year; }   function setStartUpFunction(func) {this.onStartUp =func; }   function setSelectedDate(year,month,day) {	if(typeof year =='object')this.selectedDate =year; else {year =year <this.minYear ?this.minYear :year; year =year >this.maxYear ?this.maxYear :year; this.date =new Date(year,month -1,day,0,0,0);this.selectedDate =new Date(); this.selectedDate.setTime(this.date.getTime()); }this.adjustButtons(); }function adjustButtons() {	if(this.date.getMonth() ==11&&this.date.getFullYear() ==this.maxYear) this.disableButton('fwscal_next_month'); else this.enableButton('fwscal_next_month'); 	if(this.date.getMonth() ==0&&this.date.getFullYear() ==this.minYear) this.disableButton('fwscal_prev_month'); else this.enableButton('fwscal_prev_month'); 	if(this.date.getFullYear() ==this.maxYear) this.disableButton('fwscal_next_year'); else this.enableButton('fwscal_next_year'); 	if(this.date.getFullYear() ==this.minYear) this.disableButton('fwscal_prev_year'); else this.enableButton('fwscal_prev_year'); }function prevMonth() {this.setPrevMonth(); this.fill(); }function nextMonth() {this.setNextMonth(true); this.fill(); }function prevYear() {	if(this.date.getFullYear() >this.minYear) {this.date.setFullYear(this.date.getFullYear() -1);this.adjustButtons(); this.fill(); }}function nextYear() {	if(this.date.getFullYear() <this.maxYear) {this.date.setFullYear(this.date.getFullYear() +1);this.adjustButtons(); this.fill(); }}   function enableButton(id) {var el =FWS_getElement(id); el.className ='cal_button';el.onmouseover =function() {el.className ='cal_button_hover';};el.onmouseout =function() {el.className ='cal_button';};}   function disableButton(id) {var el =FWS_getElement(id); el.className ='cal_button_disabled';el.onmouseover =null; el.onmouseout =null; }function setCSSFile(file) {this.cssFile =file; }  function display(relId) { 	if(!FWS_getElement(FWS_Calendar.id)) {var body=document.getElementsByTagName('body')[0]; var element =document.createElement('div'); element.id =FWS_Calendar.id; element.zindex =100;element.className ='calendar';element.innerHTML =this.getHTML(); body.appendChild(element); 	if(this.cssFile) {var head =document.getElementsByTagName('head')[0]; var element =document.createElement('link'); element.rel ='stylesheet';element.type ='text/css';element.href =this.cssFile; head.appendChild(element); }}FWS_Calendar.instance =this; 	if(this.onStartUp !=null) this.onStartUp(); var cal=FWS_getElement(FWS_Calendar.id); var rel =FWS_getElement(relId);   cal.style.top ='-600px';cal.style.position ='absolute';cal.style.display ='block';  var windowWidth =FWS_getPageSize()[0]; 	if(FWS_getPageOffsetLeft(rel) +cal.offsetWidth +rel.offsetWidth >windowWidth -25)FWS_displayElement(FWS_Calendar.id,relId,'lt',2); else FWS_displayElement(FWS_Calendar.id,relId,'rt',2); this.fill(); }Date._monthDays =new Array(31,28,31,30,31,30,31,31,30,31,30,31);     Date.prototype.getMonthDays =function(month) {var year =this.getFullYear(); 	if(typeof month =="undefined")month =this.getMonth(); 	if(month ==1&&year %4==0&&(year %100!=0||year %400==0))return 29;return Date._monthDays[month]; };Date.prototype.getWeekOfYear =function() {var d=new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0,0,0);var DoW=d.getDay(); d.setDate(d.getDate() -(DoW+6)%7+3);var ms=d.valueOf(); d.setMonth(0); d.setDate(4);  return Math.round((ms -d.valueOf()) /(7*864e5)) +1;}; Date.prototype.getFirstGerWeekDayInMonth =function() {var oldDay=this.getDate(); this.setDate(1); var wd=this.getDay(); var no; 	if(wd ==0)no =6;else no =wd-1;this.setDate(oldDay); return no; };

