__G.lc={};__G.lc.en={};__G.lc.en.dayName=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];__G.lc.en.monthName=["January","February","March","April","May","June","July","August","September","October","November","December"];String.prototype.lpad=function(d,e){var a=this;while(a.length<d){a=e+a}return a};String.prototype.splice=function(a,d,b){return this.substr(0,a)+b+this.substr(a+d)};Date.prototype.isLeapYear=function(){return(!(y=this.getFullYear())%4&&(y%100||!y%400))?T:F};Date.prototype.getDayName=function(){return __G.lc.en.dayName[this.getDay()]};Date.prototype.getMonthName=function(){return __G.lc.en.monthName[this.getMonth()]};Date.prototype.getDayAbbrev=function(){return this.getDayName().substr(0,3)};Date.prototype.getMonthAbbrev=function(){return this.getMonthName().substr(0,3)};Date.prototype.getDayofYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000)};Date.prototype.getWeek=function(b){var a=this.getDay(),a=(a+7-b)%7,c=this.getDayofYear();return(c<a)?0:Math.floor((c-a)/7+1)};Date.prototype.getISOWeek=function(){var c,d,b=new Date(d=this.getFullYear(),0,4),a=arguments[0];b.setDate(b.getDate()-(b.getDay()+6)%7);c=new Date(d+1,0,4);c.setDate(c.getDate()-(c.getDay()+6)%7);if(this>=c){return a?d-1:1}b=Math.floor((this-b)/86400000/7);return(b>=0)?(a?d:(b+1)):new Date(d-1,11,30).getISOWeek(a)};Date.prototype.getISOWeekYear=function(){return this.getISOWeek(T)};Date.prototype.strftime=function(fmt){var r,i=0,v,l,c;while((i=fmt.indexOf("%",i))>-1){l=0;c="0";with(this){switch(fmt.charAt(i+1)){case"a":r=getDayAbbrev();break;case"A":r=getDayName();break;case"h":case"b":r=getMonthAbbrev();break;case"B":r=getMonthName();break;case"c":r=toLocaleString();break;case"C":r=Math.floor(getFullYear()/100);l=2;break;case"C":r=Math.floor(getFullYear()/100);l=2;break;case"d":r=getDate();l=2;break;case"D":r=strftime("%m/%d/%y");break;case"e":r=getDate();l=2;break;case"F":r=strftime("%Y-%m-%d");break;case"g":r=getISOWeekYear()%100;l=2;break;case"G":r=getISOWeekYear();break;case"H":r=getHours();l=2;break;case"I":r=(v=getHours()%12)?v:12;l=2;break;case"j":r=getDayOfYear();l=3;break;case"k":r=getHours();l=2;c=" ";break;case"l":r=(v=getHours()%12)?v:12;l=2;c=" ";break;case"m":r=getMonth()+1;l=2;break;case"M":r=getMinutes();l=2;break;case"n":r="\n";break;case"p":r=getHours()<12?"AM":"PM";break;case"P":r=getHours()<12?"am":"pm";break;case"r":r=strftime("%I:%M:%S %p");break;case"R":r=strftime("%H:%M");break;case"s":r=Math.floor((this-new Date(0))/1000);break;case"S":r=getSeconds();l=2;break;case"t":r="\t";break;case"T":r=strftime("%H:%M:%S");break;case"u":r=getDay()+1;break;case"U":r=getWeek(0);l=2;break;case"V":r=getISOWeek();l=2;break;case"w":r=getDay();break;case"W":r=getWeek(1);break;case"x":r="$TODO:LS_TIME$";break;case"X":r="$TODO:LC_DATE$";break;case"y":r=String(getFullYear()).substr(2);break;case"Y":r=getFullYear();break;case"z":r=getTimezoneOffset()*-100/60;break;case"Z":r="$TODO:TZNAME$";break;case"+":r=strftime("%a %b %e %H:%M:%S %Z %Y");break;default:r=fmt.charAt(i+1);break}}r=l?String(r).lpad(l,c):String(r);fmt=fmt.splice(i,2,r);i+=r.length}return fmt};NG.Calendar=function(a){this.doc=a;this.today=new Date();this.today.setHours(0,0,0,0);this.month=this.today.getMonth()+1;this.year=this.today.getFullYear();this.dow=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];this.months=["January","February","March","April","May","June","July","August","September","October","November","December"];this.startDow=1;this.node=null;this.showOutsideDays=false;this.labelNode=null;this.daysNode=null;this.prevNode=this.doc.createTextNode("< Prev");this.nextNode=this.doc.createTextNode("Next >");this.dateFuncs={};this.minDate=null;this.maxDate=null;this.setToday=function(b){if(!isObj(b)){b=new Date(b)}b.setHours(0,0,0,0);this.today=b;this.showDate(this.today)};this.showDate=function(b){if(!isObj(b)){b=new Date(b)}this.month=b.getMonth()+1;this.year=b.getFullYear();this.refresh()};this.setDateFunc=function(b,c){if(!isObj(b)){b=new Date(b)}this.dateFuncs[b.valueOf()]=c};this.changeMonth=function(c){if(!this.checkChangeMonth(c)){return}var b=new Date(this.year,this.month-1+c,1);this.month=b.getMonth()+1;this.year=b.getFullYear();this.refresh()};this.checkChangeMonth=function(d){var b=new Date(this.year,this.month-1+d,1);var c=new Date((new Date(this.year,this.month+d,1))-1);if(!isNull(this.minDate)&&this.minDate>c){return false}if(!isNull(this.maxDate)&&this.maxDate<b){return false}return true};this.execDateFunc=function(c){var b;if(!isNull(b=this.getDateFunc(c.dateValue))){b(c.dateValue)}};this.refresh=function(){this.getLabelNode().firstChild.nodeValue=this.months[this.month-1]+" "+this.year;this.getLabelNode().previousSibling.className="prev-nav"+(this.checkChangeMonth(-1)?"":"-disabled");this.getLabelNode().nextSibling.className="next-nav"+(this.checkChangeMonth(1)?"":"-disabled");var c,b=new Date(this.year,this.month-1,1);b.setDate(1-b.getDay());for(var d=0;d<6*7;d++){c=this.getDaysNode().childNodes[Math.floor(d/7)].childNodes[d%7];c.dateValue=new Date(b.getFullYear(),b.getMonth(),b.getDate());if(b.getFullYear()<this.year||(b.getFullYear()==this.year&&b.getMonth()<this.month-1)){c.className="prev-month";c.firstChild.nodeValue=(this.showOutsideDays?b.getDate():"")}else{if(b.getFullYear()>this.year||(b.getFullYear()==this.year&&b.getMonth()>this.month-1)){c.className="next-month";c.firstChild.nodeValue=(this.showOutsideDays?b.getDate():"")}else{c.className=(isNull(this.getDateFunc(b))?"":"hasFunc");c.firstChild.nodeValue=b.getDate()}}if(!isNull(this.minDate)&&b.valueOf()<this.minDate){c.className+=" disabled"}else{if(!isNull(this.maxDate)&&b.valueOf()>this.maxDate){c.className+=" disabled"}}if(b.valueOf()==this.today.valueOf()){c.className+=" today"}b.setDate(b.getDate()+1)}};this.originalGetDateFunc=this.getDateFunc=function(b){if(!isDef(typeof this.dateFuncs[b.valueOf()])){return N}if(!isNull(this.minDate)&&b.valueOf()<this.minDate){return N}else{if(!isNull(this.maxDate)&&b.valueOf()>this.maxDate){return N}}return this.dateFuncs[b.valueOf()]};this.getLabelNode=function(){return this.getNode().firstChild.childNodes[1]};this.getDaysNode=function(){return this.getNode().childNodes[1].childNodes[1]};this.attach=function(b){b.appendChild(this.getNode())};this.getNode=function(){return this.getNodeFunc()};this.originalGetNodeFunc=this.getNodeFunc=function(){if(isNull(this.node)){this.node=this.doc.createElement("div");this.node.className="calendar";var b,g=this.node.appendChild(this.doc.createElement("div"));g.className="header";b=g.appendChild(this.doc.createElement("div"));b.appendChild(this.prevNode);b.className="prev-nav";var k=this;NG.addEventListener(b,"click",function(){k.changeMonth(-1)});b=g.appendChild(this.doc.createElement("div"));b.appendChild(this.doc.createTextNode(""));b=g.appendChild(this.doc.createElement("div"));b.appendChild(this.nextNode);b.className="next-nav";NG.addEventListener(b,"click",function(){k.changeMonth(1)});var h,c,f,l=this.node.appendChild(this.doc.createElement("table"));f=l.appendChild(this.doc.createElement("thead"));h=f.appendChild(this.doc.createElement("tr"));for(var e=0;e<7;e++){c=h.appendChild(this.doc.createElement("th"));c.appendChild(this.doc.createTextNode(this.dow[e]))}f=l.appendChild(this.doc.createElement("tbody"));for(var e=0;e<6;e++){h=f.appendChild(this.doc.createElement("tr"));for(var d=0;d<7;d++){c=h.appendChild(this.doc.createElement("td"));c.appendChild(this.doc.createTextNode(""));this._mkTD(k,c)}}this.refresh()}return this.node};this._mkTD=function(b,c){NG.addEventListener(c,"click",function(){b.execDateFunc(c)})}};