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,d){if(isString(b)&&(b.length>0)&&!isDate(b)){if((b.length>2)||(b.indexOf("+")!=-1)){var e=/(\d+)\D+(\d+)\D+(\d+)\D*/;e.exec(b);var a=1*RegExp.$1;var f=1*RegExp.$2;var c=1*RegExp.$3;if(f!=""){f-=1;if(f<0){f=11}else{if(f>11){f=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,f,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(d){var i=d.style.display;var b=new Object();var h=d;for(b.x=0,b.y=0;h!=null;b.x+=h.offsetLeft,b.y+=h.offsetTop,h=h.offsetParent){}if(i!="none"&&i!=null){b.w=d.offsetWidth;b.h=d.offsetHeight}else{var c=d.style;var f=c.visibility;var g=c.position;var a=c.display;c.visibility="hidden";c.position="absolute";c.display="block";b.w=d.clientWidth;b.h=d.clientHeight;c.display=a;c.position=g;c.visibility=f}return b}};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,bitfield: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(d){if(typeof d=="object"){var i=new Calendar(d)}else{if(typeof this.calendar_config=="object"){var i=new Calendar(this.calendar_config)}else{alert("no calendar configuration found!")}}i.viewPeriodS=this.viewPeriodS;i.viewPeriodE=this.viewPeriodE;i.dataPeriodS=this.dataPeriodS;i.dataPeriodE=this.dataPeriodE;i.bitfield=this.bitfield;i.bitfieldS=this.bitfieldS;i.bitfieldE=this.bitfieldE;i.monthsTexts=this.monthsTexts;i.weekdaysTexts=this.weekdaysTexts;i.useWeekdays=this.useWeekdays;i.closeText=this.closeText;i.value=this.value;i.today=this.today;i.myparent=this;i.id=this.id;i.name=this.id;i.setOneMonthOnly(true);inherits(d,i);makeObservable(i,this);i.jumpToValue();var j=document.createElement("DIV");j.id="calendar"+this.id;j.className=this.styleClass;j.style.display="none";var a=eId(this.referenceObject).parentNode;a.appendChild(j);i.div=document.createElement("DIV");var e=eId("calendar"+this.id);var b=document.createElement("DIV");var g=document.createElement("TABLE");g.style.width="100%";var k=document.createElement("TBODY");var h=document.createElement("TR");var f=document.createElement("TD");h.appendChild(f);f=document.createElement("TD");f.innerHTML="<a href=\"javascript:calman.toggleDisplay('"+this.id+"');void(0);\">"+this.closeText+"</a>";f.style.textAlign="right";h.appendChild(f);k.appendChild(h);g.appendChild(k);b.appendChild(g);e.appendChild(b);eId("calendar"+this.id).appendChild(i.div);i.draw();this.calendar=i;return i},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)&&(aValue.indexOf("+")==-1)){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}}else{if(aValue.indexOf("+")==0){var date=new Date();date.shiftD(1*aValue.slice(1));return date}}},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){var b=parseUserDateInput(a);if(b<this.datePeriodS){b=this.datePeriodS}else{if(b>this.datePeriodE){b=this.datePeriodE}}this.preSelectedDay=b;this.selectedDay=this.getCellName(b);this.viewPeriodS=new Date(b);this.viewPeriodS.setDate(1);this.viewPeriodE=new Date(b);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 j=new Date(this.dataPeriodS);var y=0;if(j.getTime()<this.viewPeriodS.getTime()){while(j.getTime()<this.viewPeriodS.getTime()){y++;j.shiftD(1)}}else{while(j.getTime()>this.viewPeriodS.getTime()){y--;j.shiftD(-1)}}}var p=this.div;var x=eId(this.name+"_table");if(x==null){x=document.createElement("TABLE");p.insertBefore(x,p.firstChild);x.setAttribute("cellSpacing","0");if(typeof isIE=="undefined"){x.style.width="auto"}x.style.width="100%";x.id=this.name+"_table";x.className="calendar"}var a=eId(this.name+"_tbody");if(a!=null){a.parentNode.removeChild(a)}a=document.createElement("TBODY");x.appendChild(a);a.id=this.name+"_tbody";j=new Date(this.viewPeriodS);if(this.oneMonthOnly){var s=document.createElement("TR");if(this.scrollable){if(this.internalScrollers){var g=document.createElement("TH");g.id=this.name+"_heading_months_lt"}else{var g=eId(this.name+"prev")}var A=new Date(j);A.setDate(1);if(((!this.useDataPeriod)||(!this.dataPeriodS)||(this.dataPeriodS&&(A.getTime()>this.dataPeriodS.getTime())))){g.innerHTML=this.prevMonthHTML;g.className="prevMonth";if(this.internalScrollers){g.onclick=function(){var d=this.id.substring(0,this.id.indexOf("_heading_months_lt"));calman.calcons[d].calendar.prevMonth()}}else{g.onclick=function(){var d=this.id.substring(0,this.id.indexOf("prev"));calman.calcons[d].calendar.prevMonth()}}}else{g.innerHTML="";g.className="disabled"}if(this.internalScrollers){s.appendChild(g)}}g=document.createElement("TH");var l=((this.scrollable)&&(this.internalScrollers))?6:8;if(!this.showWeekNumbers){l=l-1}g.colSpan=l;g.innerHTML=this.monthsTexts[j.getMonth()]+"&nbsp;"+j.getFullYear();g.textAlign="center";g.id=this.name+"_heading_months"+j.getMonth();if(this.multipleSelect){g.className="heading_months_enabled";g.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{g.className="heading_months_disabled"}s.appendChild(g);if(this.scrollable){if(this.internalScrollers){g=document.createElement("TH");g.id=this.name+"_heading_months_gt"}else{g=eId(this.name+"next")}var A=new Date(j);A.setDate(1);A.shiftM(1);A.shiftD(-1);if((!this.useDataPeriod)||(!this.dataPeriodE)||(this.dataPeriodE&&(A.getTime()<this.dataPeriodE.getTime()))){g.innerHTML=this.nextMonthHTML;g.className="nextMonth";if(this.internalScrollers){g.onclick=function(){var d=this.id.substring(0,this.id.indexOf("_heading_months_gt"));calman.calcons[d].calendar.nextMonth()}}else{g.onclick=function(){var d=this.id.substring(0,this.id.indexOf("next"));calman.calcons[d].calendar.nextMonth()}}}else{g.innerHTML="";g.className="disabled"}if(this.internalScrollers){s.appendChild(g)}}a.appendChild(s)}var h=document.createElement("TR");if(this.showWeekNumbers){var b=document.createElement("TH");b.id=this.name+"_heading_"+z;b.className="heading_daynames";b.innerHTML=this.weekNoHTML;h.appendChild(b)}for(z=0;z<7;z++){var b=document.createElement("TH");b.id=this.name+"_heading_"+z;b.innerHTML=this.weekdaysTexts[z];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"}h.appendChild(b)}a.appendChild(h);var o=(j.getDay()-1<0)?6:j.getDay()-1;var k=0;var n=false;var c=0;var f=1;var m=-1;var r=j.getWeek();var q=true;while(q){m++;if(((j.getDate()==1&&n)||(k==0))&&(j.getTime()>=this.viewPeriodS.getTime())){o=(j.getDay()-1<0)?6:j.getDay()-1;if(this.oneMonthOnly==false){s=document.createElement("TR");g=document.createElement("TD");g.colSpan=7;g.innerHTML=this.monthsTexts[j.getMonth()]+" - "+j.getFullYear();g.id=this.name+"_heading_months"+j.getMonth();if(this.multipleSelect){g.className="enabled";g.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{g.className="disabled"}s.appendChild(g);a.appendChild(s)}}s=eId(this.name+"_row_"+m);if(s==null){s=document.createElement("TR");s.id=this.name+"_row_"+m;a.appendChild(s)}if(this.showWeekNumbers){b=document.createElement("TD");b.className="weekno";b.innerHTML=r++;s.appendChild(b)}for(var z=0;z<7;z++){if((j.getDate()==1&&n==false)&&(k!=0)){n=true;for(var u=z;u<7;u++){b=document.createElement("TD");b.className="disabled";b.innerHTML="&nbsp;";if(s!=null){s.appendChild(b)}}break}b=document.createElement("TD");if(o<=0&&k<this.howManyDays){n=false;b.id=this.getCellName(j);if((this.useDataPeriod)&&(y+k>=0)&&(this.dataPeriodS)&&(this.dataPeriodE)&&(j.getTime()<=this.dataPeriodE.getTime())){if(this.bitfield.charAt(y+k)=="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()==j.getTime()){b.className=b.className+" today"}if(this.value.getTime()==j.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=j.getDate();j.shiftD(1);k+=1}else{b.className="disabled";b.innerHTML="&nbsp;";b.onclick=null;o-=1}j.shiftD(-1);if(j.getTime()<this.dataPeriodS.getTime()){b.className="disabled before_period";b.onclick=null}if(j.getTime()>this.dataPeriodE.getTime()){b.className="disabled beyond_period";b.onclick=null}j.shiftD(1);s.appendChild(b)}if((j>this.viewPeriodE)||(k>=this.howManyDays)){q=false}}if(m<5){var h=document.createElement("TR");for(var t=0;t<=l;t++){var b=document.createElement("TD");b.className="disabled";b.innerHTML="&nbsp;";h.appendChild(b)}a.appendChild(h)}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;if(d.type=="text"){c=this.mydoWeekday(c)}this.setDate(c);if(isDate(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();
