/*!
* jsF.calendar
* Copyright 2011, yellow race<f.v.yuelin@gmail.com>
* http://yellowrace.com/
*
* Date: Mon, 01 Aug 2011 03:18:22 GMT
*/
jsF.register("jsF.calendar",function(f,c,e,a){var d={INFO:"About the Calendar",ABOUT:"[Calendar]\nDescription: DHTML Date/Time Selector\nAuthor: yellow race<f.v.yuelin@gmail.com>\n(c) 2011 yellowrace.com",MonthName:["January","February","March","April","May","June","July","August","September","October","November","December"],MonthName_Short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],WeekName:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],WeekName_Short:["S","M","T","W","T","F","S","S"],FirstDay:0,MIN_YEAR:-271820,MAX_YEAR:275760,SELECTED_DAYS:null,FESTIVALS:null,PREV_YEAR:"Prev. Year (Hold for Menu)",PREV_MONTH:"Prev. Month (Hold for Menu)",GO_TODAY:"Go to Today",NEXT_MONTH:"Next Month (Hold for Menu)",NEXT_YEAR:"Next Year (Hold for Menu)",SEL_DATE:"Select Date",DRAG_TO_MOVE:"Drag to Move",PART_TODAY:" (Today)",DAY_FIRST:"Display %ss first",WEEKEND:"0,6",CLOSE:"Close Calendar",TODAY:"Today",DEF_DATE_FORMAT:"yyyy/MM/dd",TT_DATE_FORMAT:"MMM d, yyyy"},b=f.browser,g=f(a);function h(B,y){var C=this,N,j,H,K,o=false,n=false,l=false,Q,m,M,A,s,u,O=0,v=0,i=[],r,G=null,k=null,t=f.extend([],{contains:function(T){for(var R=0;R<this.length;R++){var S=this[R];if(f.isObject(S)){if(T>=S.from&&T<=S.to){return true}}else{if(S==T){return true}}}return false}}),P=f.extend({},d);function x(S,R){if(R){t.length=0}t.push(C.toInteger(S))}function E(R){R.triggerHandler("click")}function z(U){var T=U.getTime(),R=new Date(C.year,C.month,1),V=new Date(C.year,C.month+1,1);if(!(T>=R.getTime()&&T<V.getTime())){C.setDate(U);R=new Date(C.year,C.month,1);V=new Date(C.year,C.month+1,1)}var S=(R.getDay()+7-P.FirstDay)%7+U.getDate()-1;return H.rows[3+Math.floor(S/7)].cells[S%7]}function p(R){H.rows[10].cells[0].innerHTML=R}function L(){var R=new Date(),ac=new Date(R.getFullYear(),R.getMonth(),R.getDate()),W,V,U,ae,ad,aa,ab;H.rows[0].cells[1].innerHTML=C.toString("MMMM, yyyy");ae=((new Date(C.year,C.month,1)).getDay()+7-P.FirstDay)%7;aa=(new Date(C.year,C.month+1,0)).getDate();ad=ae+aa;for(W=0,U=0;W<7;W++){ab=H.rows[W+3];ab.className=(U>=ad?"hidden-row":null);for(V=0;V<7;V++,U++){var Y=U-ae+1,T=ab.cells[V],S=new Date(C.year,C.month,Y);T.date=S;T.info=C.toString(P.TT_DATE_FORMAT,S);if(U<ae||U>=ad){T.innerHTML=" ";T.className="empty";T.info=T.date=null;T.select=T.onmouseover=T.onmouseout=T.onclick=null}else{var Z=G==null||G.call(C,S);T.innerHTML=S.getDate();T.className="day";if(P.WEEKEND.indexOf(S.getDay().toString())!=-1){T.className+=" weekend"}if(k){var X=k.getByDate.call(C,S);if(X!=null){T.info=X;T.className+=" festival"}}if(C.equalsTo(S,ac)){T.className+=" today"}if(t.contains(C.toInteger(S))){T.className+=" selected"}if(!Z){T.className+=" disabled";T.select=f.noop;T.onmouseover=T.onmouseout=T.onclick=null}else{T.select=function(){if(u){u.removeClass("selected")}u=f(this).addClass("selected");x(this.date,true);C.onchangedate(this.date)};T.onmouseover=function(){f(this).addClass("hover");p(this.info)};T.onmouseout=function(){f(this).removeClass("hover");p(P.SEL_DATE)};T.onclick=function(af){this.select();C.onselectdate(this.date);if(l){C.hide()}}}}}}}function q(U,R,T){var S=new Date(U,R,T);U=S.getFullYear();if(U>P.MAX_YEAR){return new Date(P.MAX_YEAR,12,0)}if(U<P.MIN_YEAR){return new Date(P.MIN_YEAR,0,1)}return S}function F(R){if(!f.isNumber(R)){return}if(!(R>=0&&R<7)){return}if(P.FirstDay==R){return}P.FirstDay=R;u=f(z(C.getDate()));var V=H.rows[2];for(var S=0;S<7;S++){var X=V.cells[S],W=X.weekIndex=(S+R)%7,U=P.WeekName[W],T=P.WeekName_Short[W];X.title=U,X.info=P.DAY_FIRST.replace("%s",U);X.innerHTML=T}}function I(R){j.css({left:R.pageX-K.x,top:R.pageY-K.y});return R.stopPropagation()}function D(R){g.unbind("mousemove",I);g.unbind("mouseup",D)}function w(R){C.hide()}function J(U){var S=U.keyCode||U.which,T=C.getDate(),W=0,R=-1,V=C.date;if(U.ctrlKey){switch(S){case 37:E(m);break;case 38:E(Q);break;case 39:E(A);break;case 40:E(s);break}}else{switch(S){case 32:E(M);break;case 27:C.hide();break;case 37:case 38:case 39:case 40:switch(S){case 37:T.setDate(V-1);break;case 38:T.setDate(V-7);break;case 39:T.setDate(V+1);break;case 40:T.setDate(V+7);break}C.setDate(q(T.getFullYear(),T.getMonth(),T.getDate()));break;case 13:E(u);break;default:if(S>=48&&S<=57){W=O=O*10+S-48;C.setDate(q(W,C.month,C.date))}else{switch(S){case 65:case 97:v=(v+1)%2;R=[3,7][v];break;case 68:case 100:R=11;break;case 70:case 102:R=1;break;case 74:case 106:v=(v+1)%3;R=[0,5,6][v];break;case 77:case 109:v=(v+1)%2;R=[2,4][v];break;case 78:case 110:R=10;break;case 79:case 111:R=9;break;case 83:case 115:R=8;break}if(R>=0&&R<12){T.setMonth(R);C.setDate(T)}}break}}if(W==0){O=0}U.stopPropagation()}f.extend(C,{setup:function(R){if(f.isPlainObject(R)){f.extend(true,P,R)}if(P.SELECTED_DAYS){f.each(P.SELECTED_DAYS,function(S,T){t.push(T)})}if(P.FESTIVALS&&f.isFunction(P.FESTIVALS.getByDate)){k=P.FESTIVALS}if(o){L()}},bind:function(W,V,S,R,U,T){if(!W&&f.isFunction(V)){i.push(V)}else{if(!f.instanceOf(W)){W=f(W)}if(W.length>0){if(U){i.push(V||function(X){W.val(C.toString(X))})}if(f.invalid(S)){S=function(){C.setDate(C.parseDate(f(this).val()))}}W.click(function(Y){var X=this;X.blur();r=(U?null:f.$proxy(V||function(Z){W.val(C.toString(Z))},X));G=(f.isFunction(R)?R:null);if(f.isFunction(S)){S.call(X,C)}L();C.showAtElement(X);Y.stopPropagation()});if(T){W.keypress(function(X){X.stopPropagation()}).focus(function(X){W.triggerHandler("click")})}}}return C},show:function(){j.fadeIn("normal",function(){H.focus()});if(l){g.bind("keydown",J);g.bind("click",w)}return C},showAt:function(R,S){j.css({left:R,top:S});return C.show()},showAtElement:function(R){var S=f(R).position();return C.showAt(S.left,S.top+R.offsetHeight)},hide:function(){if(l){g.unbind("keydown",J);g.unbind("click",w)}O=0;j.fadeOut("fast");return C},getDate:function(){return new Date(C.year,C.month,C.date)},setDate:function(R){if(!isNaN(R.getTime())){C.date=R.getDate();if(C.year!=R.getFullYear()||C.month!=R.getMonth()){C.year=R.getFullYear();C.month=R.getMonth();L()}z(R).select()}return C},onselectdate:function(R){if(r!=null){if(!R){R=C.getDate()}r(R,C)}},onchangedate:function(R){if(!R){R=C.getDate()}C.date=R.getDate();f.each(i,function(S,T){T.call(C,R)})},onclose:function(){return true},parseDate:function(S,R){return f.$date(S,R||P.DEF_DATE_FORMAT,P.MonthName,P.MonthName_Short,P.WeekName,P.WeekName_Short)},equalsTo:function(S,R){if(!R){R=C.getDate()}return((S.getFullYear()==R.getFullYear())&&(S.getMonth()==R.getMonth())&&(S.getDate()==R.getDate())&&(S.getHours()==R.getHours())&&(S.getMinutes()==R.getMinutes())&&(S.getSeconds()==R.getSeconds()))},toInteger:function(R){return parseInt(C.toString("yyyyMMdd",R))}});C.toString=function(S,R){if(arguments.length==1){if(S.constructor==Date){R=S;S=P.DEF_DATE_FORMAT}}if(!R){R=C.getDate()}return R.toString(S,P.MonthName,P.MonthName_Short,P.WeekName,P.WeekName_Short)};C.setup(y);(function(){var T=f.isElement(B);if(!o){o=true;N=f.addStyle("*{-moz-user-select:none;}");N.disabled=true;var R=f.$element,ac=f(R("div",null,{className:"Calendar"})).click(function(ag){ag.stopPropagation()});if(b.ie){var V=f(R("iframe",ac,{frameBorder:0})).css({position:"absolute",zIndex:-1,opacity:0});ac.resize(function(){V.width=ac.width();V.height=ac.height()})}var af=R("table",ac[0],{cellSpacing:0,cellPadding:2,width:"100%",bgColor:"white"}),aa=R("thead",af),Y=R("tbody",af),ad=R("tfoot",af),X,W,ab,U,Z={onmouseover:function(){f(this).addClass("hover");if(this.info){p(this.info)}},onmouseout:function(){f(this).removeClass("hover");p(P.SEL_DATE)}},ae=function(ag,ah){return f(R("td",ab,ah)).html(ag)};ab=R("tr",aa);ae("?",f.extend({className:"button",info:P.INFO},Z)).click(function(){alert(P.ABOUT)});var S=ae("Month, Year",{colSpan:5,className:"title"});if(!T){S.mouseover(function(){p(P.DRAG_TO_MOVE)}).mousedown(function(ag){K=j.coords(ag);N.disabled=false;g.bind("mousemove",I);g.bind("mouseup",D)}).mouseup(function(ag){N.disabled=true;D(ag)})}ae("&#x00d7;",f.extend({className:"button",info:P.CLOSE},Z)).click(function(){if(C.onclose()!==false){C.hide()}});ab=R("tr",aa,{className:"tool-nav"});Q=ae("&#x00ab;",f.extend({info:P.PREV_YEAR,onclick:function(){C.setDate(q(C.year-1,C.month,C.date))}},Z));m=ae("&#x2039;",f.extend({info:P.PREV_MONTH,onclick:function(){C.setDate(q(C.year,C.month-1,C.date))}},Z));M=ae(P.TODAY,f.extend({colSpan:3,info:P.GO_TODAY,onclick:function(){C.setDate(new Date())}},Z));A=ae("&#x203a;",f.extend({info:P.NEXT_MONTH,onclick:function(){C.setDate(q(C.year,C.month+1,C.date))}},Z));s=ae("&#x00bb;",f.extend({info:P.NEXT_YEAR,onclick:function(){C.setDate(q(C.year+1,C.month,C.date))}},Z));ab=R("tr",aa,{className:"weeknames"});for(X=0;X<7;X++){ae(P.WeekName_Short[X],f.extend({weekIndex:X,width:"14%",title:P.WeekName[X],info:P.DAY_FIRST.replace("%s",P.WeekName[X]),onclick:function(){F(this.weekIndex);L()}},Z))}for(X=0;X<7;X++){ab=R("tr",Y,Z);for(W=0;W<7;W++){ae("-")}}ab=R("tr",ad);U=ae(P.SEL_DATE,{colSpan:7,className:"tooltip"});H=af;j=ac}F(P.FirstDay);if(!T){B=a.body;l=true}if(l){j.css("position","absolute");j.hide()}f(B).append(j)})();return C}f.$calendar=function(k,i,j){return(new h(i,k)).setDate(j||new Date())};f.$calendar.setup=function(i){f.extend(true,d,i)}});

