function eId(){return document.getElementById(arguments[0])}function isFunction(a){return(typeof(a)=="function")}function isObject(b){return(typeof b=="object"&&!!b)||isFunction(b)}function isArray(b){return isObject(b)&&b.constructor==Array}function isDate(b){return isObject(b)&&b.constructor==Date}function isString(b){return typeof b=="string"}function moveToBody(a){if(isObject(a)){if(a.parentNode!=null){var b=a.parentNode.removeChild(a)}else{var b=a}document.body.appendChild(b);return b}else{return a}}Date.prototype.isLeapYear=function(){var a=this.getFullYear();return((a&3)==0&&(a%100||(a%400==0&&a)))};Date.prototype.getDaysInMonth=function(){daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()]};Date.prototype.getWeek=function(){var b=new Date(this);b.setDate(b.getDate()-(b.getDay()+6)%7+3);var a=b.valueOf();b.setMonth(0);b.setDate(4);return Math.round((a-b.valueOf())/(7*86400000))+1};Date.prototype.shiftD=function(a){this.setDate(this.getDate()+a)};Date.prototype.shiftM=function(a){this.setMonth(this.getMonth()+a)};Date.prototype.shiftY=function(a){this.setYear(this.getYear()+a)};function parseUserDateInput(b){if(isString(b)&&(b.length>0)&&!isDate(b)){if((b.length>2)||(b.indexOf("+")!=-1)){var d=/(\d+)\D+(\d+)\D+(\d+)\D*/;d.exec(b);var a=1*RegExp.$1;var e=1*RegExp.$2;var c=1*RegExp.$3;if(e!=""){e-=1;if(e<0){e=11}else{if(e>11){e=0}}}if(c!=""){if(c<100){if(c<50){c+=2000}else{c+=1900}}else{if(c<1000){if(c<200){c+=1900}else{c+=1000}}}}if((c!=0)&&(a!=0)){return new Date(c,e,a)}}}else{if(isDate(b)){return b}}return new Date()}var Class={create:function(){return function(){this.initialize.apply(this,arguments)}}};CalUtils=Class.create();CalUtils.prototype={initialize:function(){},getDimensions:function(c){var j=c.style.display;var i=new Object();var h=c;for(var d=0,a=0;h!=null;d+=h.offsetLeft,a+=h.offsetTop,h=h.offsetParent){}i.x=d;i.y=a;if(j!="none"&&j!=null){i.w=c.offsetWidth;i.h=c.offsetHeight}else{var f=c.style;var b=f.visibility;var g=f.position;var k=f.display;f.visibility="hidden";f.position="absolute";f.display="block";i.w=c.clientWidth;i.h=c.clientHeight;f.display=k;f.position=g;f.visibility=b}return i}};function inherits(c,d){for(var b in c){try{d[b]=c[b]}catch(a){}}}function makeObservable(b,a){inherits(new Observable(),b);if(a!=undefined){b.addObserver(a)}}Array.prototype.forEach=function(d,e){var c=e||window;for(var b=0,a=this.length;b<a;++b){d.call(c,this[b],b,this)}};Array.prototype.filter=function(f,g){var e=g||window;var b=[];for(var d=0,c=this.length;d<c;++d){if(!f.call(e,this[d],d,this)){continue}b.push(this[d])}return b};Observer=Class.create();Observer.prototype={initialize:function(){},observe:function(){}};function Observable(){this.fns=[]}Observable.prototype={addObserver:function(a){this.fns.push(a)},removeObserver:function(a){this.fns=this.fns.filter(function(b){if(b!==a){return b}})},notify:function(c,b){var a=b||window;this.fns.forEach(function(d){d.observe(c)})}};CalendarControl=Class.create();CalendarControl.prototype={version:"1.1",type:"calendarcontrol",value:"",today:"",fieldName:"",returnFormname:"",viewPeriodS:"",viewPeriodE:"",dataPeriodS:"",dataPeriodE:"",monthsTexts:null,weekdaysTexts:null,useWeekdays:true,closeText:null,calendar:null,calendar_config:null,initialize:function(a){inherits(new Observer(),this);inherits(a,this);if(!isDate(this.value)){this.value=this.today}if(!isDate(this.today)){this.today=new Date();this.value=this.today}},getNewCalendar:function(a){if(typeof a=="object"){var b=new Calendar(a)}else{if(typeof this.calendar_config=="object"){var b=new Calendar(this.calendar_config)}else{alert("no calendar configuration found!")}}b.viewPeriodS=this.viewPeriodS;b.viewPeriodE=this.viewPeriodE;b.dataPeriodS=this.dataPeriodS;b.dataPeriodE=this.dataPeriodE;b.monthsTexts=this.monthsTexts;b.weekdaysTexts=this.weekdaysTexts;b.useWeekdays=this.useWeekdays;b.closeText=this.closeText;b.value=this.value;b.today=this.today;b.myparent=this;b.id=this.id;b.name=this.id;b.setOneMonthOnly(true);inherits(a,b);makeObservable(b,this);b.jumpToValue();pdiv=document.createElement("DIV");pdiv.id="calendar"+this.id;pdiv.className=this.styleClass;pdiv.style.display="none";myparent=eId(this.referenceObject).parentNode;myparent.appendChild(pdiv);b.div=document.createElement("DIV");cal=eId("calendar"+this.id);div=document.createElement("DIV");tt=document.createElement("TABLE");tt.style.width="100%";t=document.createElement("TBODY");tr=document.createElement("TR");td=document.createElement("TD");tr.appendChild(td);td=document.createElement("TD");td.innerHTML='<a href="#" onClick="calman.toggleDisplay(\''+this.id+"');return false;\">"+this.closeText+"</a>";td.style.textAlign="right";tr.appendChild(td);t.appendChild(tr);tt.appendChild(t);div.appendChild(tt);cal.appendChild(div);eId("calendar"+this.id).appendChild(b.div);b.draw();this.calendar=b;return b},getStartDateFrom:function(ioField){eval("userInput = "+this.formName+"."+ioField+".value;");this.getStartDateFromString(userInput)},getStartDateFromString:function(a){if(a=="today"){this.viewPeriodS=new Date()}else{this.viewPeriodS=parseUserDateInput(a);if(this.viewPeriodS==undefined){this.viewPeriodS=new Date()}}},getEndDateFrom:function(ioField){eval("userInput = "+this.returnForm+"."+ioField+".value;");this.getEndDateFromString(userInput)},getEndDateFromString:function(a){this.viewPeriodE=parseUserDateInput(a)},mydoWeekday:function(aValue){if(aValue.length==2){var wDay=this.weekdaysTexts.join("|").toLowerCase();var reg=eval("/^ *("+wDay+") */");aValue=aValue.toLowerCase();var test=aValue.match(reg);if(test!=null){var date=new Date();var cwdidx=date.getDay()-1;cwdidx=(cwdidx==-1)?cwdidx=6:cwdidx;var nwdidx=(wDay.indexOf(test[0])/3);if(nwdidx<cwdidx){nwdidx=nwdidx+7-cwdidx}else{nwdidx=nwdidx-cwdidx}date.shiftD(nwdidx)}return date}else{return aValue}},formatDate:function(b,f,c){if(isDate(b)){var g=b.getDate();var a=b.getMonth()+1;var h=b.getFullYear();if(g<10){g="0"+g}if(a<10){a="0"+a}if(f){h-=2000;if(h<10){h="0"+h}}if(c){var e=b.getDay()-1;e=(e==-1)?e=6:e;return this.weekdaysTexts[e]+", "+g+"."+a+"."+h}else{return g+"."+a+"."+h}}else{return""}},setDate:function(a){if(!isDate(a)){a=parseUserDateInput(a)}this.value=a;if(typeof this.calendar=="object"){this.calendar.value=a;this.calendar.jumpToValue();this.calendar.draw()}},setDateFromField:function(){v=document.forms[this.formName.replace(/document\./,"")].elements[this.fieldName].value;this.setDate(v)},toggleDisplay:function(h){this.setDateFromField();var g=this.id;var f=false;var e="inline";var j=eId(calman.calcons[g].referenceObject);if(j.hasChildNodes()){var j=j.firstChild}var a=eId("calendar"+g);moveToBody(a);a.style.position="absolute";if(f){var i=eId("calendarshadow"+g);if(!isObject(i)){i=document.createElement("DIV")}moveToBody(i);i.style.position="absolute"}var c=eId("calendariframe"+g);if(c==null){c=document.createElement("iframe")}document.body.appendChild(c);c.id="calendariframe"+g;c.style.position="absolute";calUtils=new CalUtils();var b=calUtils.getDimensions(a);c.width=b.w+"px";c.height=b.h+"px";var d=calUtils.getDimensions(j);if(!h){a.style.top=(d.y-1)+"px";a.style.left=(d.x-1)+"px";if(f){i.style.top=(d.y+1)+"px";i.style.left=(d.x+1)+"px"}c.style.top=(d.y+1)+"px";c.style.left=(d.x+1)+"px"}else{a.style.top=(d.y+d.h-b.h)+"px";a.style.left=(d.x-1)+"px";if(f){i.style.top=(d.y+4+d.h-b.h)+"px";i.style.left=(d.x-1)+"px"}c.style.top=(d.y+d.h-b.h)+"px";c.style.left=(d.x-1)+"px"}a.style.display=(a.style.display!="none")?"none":e;if(f){i.style.display=a.style.display}c.style.display=a.style.display;return false}};Calendar=Class.create();Calendar.prototype={version:"1.0",type:"calendar",value:"",initialize:function(a){if(isObject(a)){this.name=a.id;this.id=a.id;if(isDate(a.value)){this.value=a.value}}this.useDataPeriod=true;this.readOnly=false;this.showWeekNumbers=false;this.internalScrollers=true;this.selectedDay=null;this.preSelectedDay=null;this.multipleSelect=false;this.fullMonthsOnly=true;this.scrollable=true;this.monthsTexts=null;this.weekdaysTexts=null;this.closeText=null;this.prevMonthHTML="&laquo";this.nextMonthHTML="&raquo";this.weekNoHTML="&nbsp;";this.howManyDays=0},prevMonth:function(){this.viewPeriodS.setDate(1);this.viewPeriodS.shiftM(-1);this.viewPeriodE.setDate(1);this.viewPeriodE.shiftD(-1);this.selectedDay=null;this.draw()},nextMonth:function(){this.viewPeriodS.setDate(1);this.viewPeriodS.shiftM(1);this.viewPeriodE.setDate(1);this.viewPeriodE.shiftM(2);this.viewPeriodE.setDate(1);this.viewPeriodE.shiftD(-1);this.selectedDay=null;this.draw()},setFullMonthsOnly:function(a){this.fullMonthsOnly=a;if(this.fullMonthsOnly){this.viewPeriodE=new Date(this.viewPeriodE.getFullYear(),this.viewPeriodE.getMonth()+1,1);this.viewPeriodE.setDate(1);this.viewPeriodE.shiftD(-1)}},setOneMonthOnly:function(a){this.oneMonthOnly=a;if(this.oneMonthOnly){this.viewPeriodS=new Date(this.viewPeriodS.getFullYear(),this.viewPeriodS.getMonth(),1);this.viewPeriodE=new Date(this.viewPeriodS.getFullYear(),this.viewPeriodS.getMonth()+1,1);this.viewPeriodE.shiftD(-1)}},getHowManyDays:function(){var a=new Date(this.viewPeriodS.getFullYear(),this.viewPeriodS.getMonth(),this.viewPeriodS.getDate());var b=0;while(a.getTime()<=this.viewPeriodE.getTime()){b++;a.shiftD(1)}return b},setPreselectedDate:function(a){date=parseUserDateInput(a);if(date<this.datePeriodS){date=this.datePeriodS}else{if(date>this.datePeriodE){date=this.datePeriodE}}this.preSelectedDay=date;this.selectedDay=this.getCellName(date);this.viewPeriodS=new Date(date);this.viewPeriodS.setDate(1);this.viewPeriodE=new Date(date);this.viewPeriodE.setDate(1);this.viewPeriodE.shiftM(1);this.viewPeriodE.setDate(1);this.viewPeriodE.shiftD(-1)},jumpToValue:function(){this.setPreselectedDate(this.value)},hideCallBack:function(){if(isString(this.hideCallBackName)){var temp=this.id;if(isNaN(temp)){temp=""}temp=this.hideCallBackName+"('"+temp+"');";eval(temp)}else{alert("No callback method (hideCallBackName) defined!")}},getCellName:function(a){return this.name+"_df_"+a.getFullYear()+"/"+(a.getMonth())+"/"+a.getDate()},setDate:function(a){if(!this.readOnly){if(this.multipleSelect){var g=eId(a);g.className=(g.className=="active")?"enabled":"active"}else{if(this.selectedDay!=null){g=eId(this.selectedDay);g.className=(typeof this.bitfield!="undefined")?"working":"enabled"}this.selectedDay=a;g=eId(a);g.className=(g.className=="active")?"enabled":"active";this.name=""+this.name;var d=a.substring((this.name.length)+4,a.length);var c=d.split("/");var e=1*c[0];var f=1*c[1];var b=1*c[2];this.value=new Date(e,f,b);this.notify(this);this.myparent.toggleDisplay()}}},draw:function(){this.howManyDays=this.getHowManyDays();if(this.bitfield&&this.useDataPeriod){var h=new Date(this.dataPeriodS);var u=0;if(h.getTime()<this.viewPeriodS.getTime()){while(h.getTime()<this.viewPeriodS.getTime()){u++;h.shiftD(1)}}else{while(h.getTime()>this.viewPeriodS.getTime()){u--;h.shiftD(-1)}}}var n=this.div;var s=eId(this.name+"_table");if(s==null){s=document.createElement("TABLE");n.insertBefore(s,n.firstChild);s.setAttribute("cellSpacing","0");if(typeof isIE=="undefined"){s.style.width="auto"}s.style.width="100%";s.id=this.name+"_table";s.className="calendar"}var a=eId(this.name+"_tbody");if(a!=null){a.parentNode.removeChild(a)}a=document.createElement("TBODY");s.appendChild(a);a.id=this.name+"_tbody";h=new Date(this.viewPeriodS);if(this.oneMonthOnly){current_row=document.createElement("TR");if(this.scrollable){if(this.internalScrollers){current_cell=document.createElement("TH");current_cell.id=this.name+"_heading_months_lt"}else{current_cell=eId(this.name+"prev")}var y=new Date(h);y.setDate(1);if(((!this.useDataPeriod)||(!this.dataPeriodS)||(this.dataPeriodS&&(y.getTime()>this.dataPeriodS.getTime())))){current_cell.innerHTML=this.prevMonthHTML;current_cell.className="prevMonth";if(this.internalScrollers){current_cell.onclick=function(){var d=this.id.substring(0,this.id.indexOf("_heading_months_lt"));calman.calcons[d].calendar.prevMonth()}}else{current_cell.onclick=function(){var d=this.id.substring(0,this.id.indexOf("prev"));calman.calcons[d].calendar.prevMonth()}}}else{current_cell.innerHTML="";current_cell.className="disabled"}if(this.internalScrollers){current_row.appendChild(current_cell)}}current_cell=document.createElement("TH");var k=((this.scrollable)&&(this.internalScrollers))?6:8;if(!this.showWeekNumbers){k=k-1}current_cell.colSpan=k;current_cell.innerHTML=this.monthsTexts[h.getMonth()]+"&nbsp;"+h.getFullYear();current_cell.textAlign="center";current_cell.id=this.name+"_heading_months"+h.getMonth();if(this.multipleSelect){current_cell.className="heading_months_enabled";current_cell.onclick=function(){var d=this.id.substring(0,this.id.indexOf("_heading_months"));var e=this.id.substring(this.id.indexOf("_heading_months")+15,this.id.length);calman.calcons[d].calendar.selectMonth(e)}}else{current_cell.className="heading_months_disabled"}current_row.appendChild(current_cell);if(this.scrollable){if(this.internalScrollers){current_cell=document.createElement("TH");current_cell.id=this.name+"_heading_months_gt"}else{current_cell=eId(this.name+"next")}var y=new Date(h);y.setDate(1);y.shiftM(1);y.shiftD(-1);if((!this.useDataPeriod)||(!this.dataPeriodE)||(this.dataPeriodE&&(y.getTime()<this.dataPeriodE.getTime()))){current_cell.innerHTML=this.nextMonthHTML;current_cell.className="nextMonth";if(this.internalScrollers){current_cell.onclick=function(){var d=this.id.substring(0,this.id.indexOf("_heading_months_gt"));calman.calcons[d].calendar.nextMonth()}}else{current_cell.onclick=function(){var d=this.id.substring(0,this.id.indexOf("next"));calman.calcons[d].calendar.nextMonth()}}}else{current_cell.innerHTML="";current_cell.className="disabled"}if(this.internalScrollers){current_row.appendChild(current_cell)}}a.appendChild(current_row)}var g=document.createElement("TR");if(this.showWeekNumbers){var b=document.createElement("TH");b.id=this.name+"_heading_"+x;b.className="heading_daynames";b.innerHTML=this.weekNoHTML;g.appendChild(b)}for(x=0;x<7;x++){var b=document.createElement("TH");b.id=this.name+"_heading_"+x;b.innerHTML=this.weekdaysTexts[x];if(this.multipleSelect){b.className="enabled";b.onclick=function(){var e=this.id.substring(0,this.id.indexOf("_heading_"));var d=this.id.substring(this.id.indexOf("_heading_")+9,this.id.length);calman.calcons[e].calendar.selectDays(d)}}else{b.className="heading_daynames"}g.appendChild(b)}a.appendChild(g);daystoskip=(h.getDay()-1<0)?6:h.getDay()-1;var j=0;var m=false;var c=0;var f=1;var l=-1;var o=h.getWeek();var p=true;while(p){l++;if(((h.getDate()==1&&m)||(j==0))&&(h.getTime()>=this.viewPeriodS.getTime())){daystoskip=(h.getDay()-1<0)?6:h.getDay()-1;if(this.oneMonthOnly==false){current_row=document.createElement("TR");current_cell=document.createElement("TD");current_cell.colSpan=7;current_cell.innerHTML=this.monthsTexts[h.getMonth()]+" - "+h.getFullYear();current_cell.id=this.name+"_heading_months"+h.getMonth();if(this.multipleSelect){current_cell.className="enabled";current_cell.onclick=function(){var d=this.id.substring(0,this.id.indexOf("_heading_months"));var e=this.id.substring(this.id.indexOf("_heading_months")+15,this.id.length);calman.calcons[d].calendar.selectMonth(e)}}else{current_cell.className="disabled"}current_row.appendChild(current_cell);a.appendChild(current_row)}}current_row=eId(this.name+"_row_"+l);if(current_row==null){current_row=document.createElement("TR");current_row.id=this.name+"_row_"+l;a.appendChild(current_row)}if(this.showWeekNumbers){b=document.createElement("TD");b.className="weekno";b.innerHTML=o++;current_row.appendChild(b)}for(var x=0;x<7;x++){if((h.getDate()==1&&m==false)&&(j!=0)){m=true;for(var r=x;r<7;r++){b=document.createElement("TD");b.className="disabled";b.innerHTML="&nbsp;";if(current_row!=null){current_row.appendChild(b)}}break}b=document.createElement("TD");if(daystoskip<=0&&j<this.howManyDays){m=false;b.id=this.getCellName(h);if((this.useDataPeriod)&&(u+j>=0)&&(this.dataPeriodS)&&(this.dataPeriodE)&&(h.getTime()<=this.dataPeriodE.getTime())){if(this.bitfield.charAt(u+j)=="1"){b.className="working";b.onclick=function(){var d=this.id.substring(0,this.id.indexOf("_df"));calman.calcons[d].calendar.setDate(this.id)}}else{b.className="notworking";b.onclick=null}if(this.today.getTime()==h.getTime()){b.className=b.className+" today"}if(this.value.getTime()==h.getTime()){b.className=b.className+" active"}}else{b.className=(this.readOnly==true)?"disabled":"enabled";b.onclick=function(){var d=this.id.substring(0,this.id.indexOf("_df"));calman.calcons[d].calendar.setDate(this.id)}}b.innerHTML=h.getDate();h.shiftD(1);j+=1}else{b.className="disabled";b.innerHTML="&nbsp;";b.onclick=null;daystoskip-=1}h.shiftD(-1);if(h.getTime()<this.dataPeriodS.getTime()){b.className="disabled before_period";b.onclick=null}if(h.getTime()>this.dataPeriodE.getTime()){b.className="disabled beyond_period";b.onclick=null}h.shiftD(1);current_row.appendChild(b)}if((h>this.viewPeriodE)||(j>=this.howManyDays)){p=false}}if(l<5){var g=document.createElement("TR");for(var q=0;q<=k;q++){var b=document.createElement("TD");b.className="disabled";b.innerHTML="&nbsp;";g.appendChild(b)}a.appendChild(g)}this.div.style.width="auto";if(this.preSelectedDay!=undefined){tempday=eId(this.getCellName(this.preSelectedDay));if(tempday!=undefined){if((!this.dataPeriodS)&&(!this.dataPeriodE)){tempday.className=tempday.className+" active"}else{tempday.className=tempday.className+" active"}}}},getFromVKHEXBitfield:function(a){this.dataPeriodS=new Date("20"+a.substr(4,2),a.substr(2,2),a.substr(0,2));this.dataPeriodS.shiftM(-1);this.dataPeriodE=new Date("20"+a.substr(10,2),a.substr(8,2),a.substr(6,2));this.dataPeriodE.shiftM(-1);a=a.substring(12,a.length);this.bitfield="";var b="";for(var c=0;c<a.length;c+=2){b=(parseInt(a.substring(c,c+2),16)).toString(2);while(b.length<8){b="0"+b}this.bitfield=this.bitfield+b}return this.bitfield}};CalendarManager=Class.create();CalendarManager.prototype={type:"CalendarManager",calcons:new Array(),initialize:function(){},getNewCalCon:function(b){var a=new CalendarControl(b);inherits(this.config,a);a.myparent=this;this.calcons[b.referenceObject]=a;a.id=b.referenceObject;a.observe=function(d){var c=d.value;this.setDate(c);document.forms[this.formName.replace(/document\./,"")].elements[this.fieldName].value=this.formatDate(this.value,this.showShortYear,this.useWeekdays);if(a.callback!=null){a.callback(d)}};makeObservable(document.forms[a.formName.replace(/document\./,"")].elements[a.fieldName],a);return a},createCalendar:function(b){var a=calman.getNewCalCon(b);a.getNewCalendar();return a.id},shiftDate:function(d,b){var c=this.calcons[d];c.setDateFromField();var a=c.value;a.shiftD(b);c.observe(c)},toggleDisplay:function(a){this.calcons[a].toggleDisplay()}};calman=new CalendarManager();