/**
 * CalendarView for jQuery
 *
 * Based on CalendarView for Prototype http://calendarview.org/ which is based
 * on Dynarch DHTML Calendar http://www.dynarch.com/projects/calendar/old/.
 *
 * CalendarView is licensed under the terms of the GNU Lesser General
 * Public License (LGPL)
 */
(function(a){var b=function(){this.date=new Date()};b.VERSION="1.2fr";b.TODAY="Aujourd'hui";b.DAY_NAMES=new Array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");b.SHORT_DAY_NAMES=new Array("Di","Lu","Ma","Me","Je","Ve","Sa");b.MONTH_NAMES=new Array("Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet","Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre");b.SHORT_MONTH_NAMES=new Array("Janv","F&eacute;vr","Mars","Avr","Mai","Juin","Juil","Ao&ucirc;t","Sept","Oct","Nov","D&eacute;c");b.NAV_PREVIOUS_YEAR=-2;b.NAV_PREVIOUS_MONTH=-1;b.NAV_TODAY=0;b.NAV_NEXT_MONTH=1;b.NAV_NEXT_YEAR=2;b._checkCalendar=function(c){if(!window._popupCalendar){return false}if(a(c.target).parents().index(a(window._popupCalendar.container))>=0){return false}window._popupCalendar.callCloseHandler();return c.preventDefault()};b.handleMouseDownEvent=function(c){a(document).mouseup(b.handleMouseUpEvent);c.preventDefault()};b.handleMouseUpEvent=function(d){var e=d.target;var i=e.calendar;var g=false;if(!i){return false}if(typeof e.navAction=="undefined"){if(i.currentDateElement){i.currentDateElement.removeClass("selected");a(e).addClass("selected");i.shouldClose=(i.currentDateElement==a(e));if(!i.shouldClose){i.currentDateElement=a(e)}}i.date.setDateOnly(e.date);g=true;i.shouldClose=!a(e).hasClass("otherDay");var k=!i.shouldClose;if(k){i.update(i.date)}}else{var f=new Date(i.date);if(e.navAction==b.NAV_TODAY){f.setDateOnly(new Date())}var j=f.getFullYear();var h=f.getMonth();function c(n){var o=f.getDate();var l=f.getMonthDays(n);if(o>l){f.setDate(l)}f.setMonth(n)}switch(e.navAction){case b.NAV_PREVIOUS_YEAR:if(j>i.minYear){f.setFullYear(j-1)}break;case b.NAV_PREVIOUS_MONTH:if(h>0){c(h-1)}else{if(j-->i.minYear){f.setFullYear(j);c(11)}}break;case b.NAV_TODAY:break;case b.NAV_NEXT_MONTH:if(h<11){c(h+1)}else{if(j<i.maxYear){f.setFullYear(j+1);c(0)}}break;case b.NAV_NEXT_YEAR:if(j<i.maxYear){f.setFullYear(j+1)}break}if(!f.equalsTo(i.date)){i.shouldClose=false;i.setDate(f);g=true}else{if(e.navAction==0){g=(i.shouldClose=true)}}}if(g){d&&i.callSelectHandler()}if(i.shouldClose){d&&i.callCloseHandler()}a(document).unbind("mouseup",b.handleMouseUpEvent);return d.preventDefault()};b.defaultSelectHandler=function(c){if(!c.dateField){return false}(c.dateField.attr("tagName")=="INPUT")?c.dateField.val(c.date.print(c.dateFormat)):c.dateField.html(c.date.print(c.dateFormat));c.dateField.trigger("change");if(c.shouldClose){c.callCloseHandler()}return true};b.defaultCloseHandler=function(c){c.hide()};b.prototype={container:null,date:null,currentDateElement:null,shouldClose:false,isPopup:true,update:function(d){var e=this;var h=new Date();var j=h.getFullYear();var c=h.getMonth();var f=h.getDate();var g=d.getMonth();var k=d.getDate();if(d.getFullYear()<this.minYear){d.setFullYear(this.minYear)}else{if(d.getFullYear()>this.maxYear){d.setFullYear(this.maxYear)}}this.date=new Date(d);d.setDate(1);var i=(d.getDay()-this.firstDayOfWeek)%7;if(i<0){i+=7}d.setDate(-i);d.setDate(d.getDate()+1);a("tbody tr",this.container).each(function(){var l=false;a(this).children().each(function(){var n=d.getDate();var m=d.getDay();var o=(d.getMonth()==g);cell=a(this);cell.removeAttr("class");cell[0].date=new Date(d);cell.html(n);if(!o){cell.addClass("otherDay")}else{l=true}if(o&&n==k){cell.addClass("selected");e.currentDateElement=cell}if(d.getFullYear()==j&&d.getMonth()==c&&n==f){cell.addClass("today")}if(e.weekend.indexOf(m.toString())!=-1){cell.addClass("weekend")}d.setDate(n+1)});!l?a(this).hide():a(this).show()});a("td.title",this.container).html(b.MONTH_NAMES[g]+" "+e.date.getFullYear())},create:function(g){this.isPopup=false;if(!g){g=a("body");this.isPopup=true}var k=a("<table />");var f=a("<thead />");k.append(f);var l=a("<tr />");var h=a('<td colspan="7" class="title" />');l.append(h);f.append(l);l=a("<tr />");this._drawButtonCell(l,"&#x00ab;",1,b.NAV_PREVIOUS_YEAR);this._drawButtonCell(l,"&#x2039;",1,b.NAV_PREVIOUS_MONTH);this._drawButtonCell(l,b.TODAY,3,b.NAV_TODAY);this._drawButtonCell(l,"&#x203a;",1,b.NAV_NEXT_MONTH);this._drawButtonCell(l,"&#x00bb;",1,b.NAV_NEXT_YEAR);f.append(l);l=a("<tr />");for(var d=0;d<7;++d){var m=(d+this.firstDayOfWeek)%7;h=a("<th />").html(b.SHORT_DAY_NAMES[m]);if(this.weekend.indexOf(m.toString())!=-1){h.addClass("weekend")}l.append(h)}f.append(l);var e=k.append(a("<tbody />"));for(d=6;d>0;--d){l=a("<tr />").addClass("days");e.append(l);for(var c=7;c>0;--c){h=a("<td />");h[0].calendar=this;l.append(h)}}this.container=a("<div />").addClass("calendar").append(k);if(this.isPopup){this.container.css({position:"absolute",display:"none"}).addClass("popup")}this.update(this.date);this.container.mousedown(b.handleMouseDownEvent);g.append(this.container)},_drawButtonCell:function(d,g,f,e){var c=a("<td />");if(f>1){c[0].colSpan=f}c.addClass("button").html(g).attr("unselectable","on");c[0].calendar=this;c[0].navAction=e;d.append(c);return c},callSelectHandler:function(){if(this.selectHandler){this.selectHandler(this,this.date.print(this.dateFormat))}},callCloseHandler:function(){if(this.closeHandler){this.closeHandler(this)}},show:function(){this.container.show();if(this.isPopup){window._popupCalendar=this;a(document).mousedown(b._checkCalendar)}},showAt:function(c,d){this.container.css({left:c+"px",top:d+"px"});this.show()},showAtElement:function(c){var d=c.offset();this.showAt(d.left,d.top)},hide:function(){if(this.isPopup){a(document).unbind("mousedown",b._checkCalendar)}this.container.hide()},parseDate:function(d,c){if(!c){c=this.dateFormat}this.setDate(Date.parseDate(d,c))},setDate:function(c){if(!c.equalsTo(this.date)){this.update(c)}},setRange:function(d,c){this.minYear=d;this.maxYear=c}};window._popupCalendar=null;Date.DAYS_IN_MONTH=new Array(31,28,31,30,31,30,31,31,30,31,30,31);Date.SECOND=1000;Date.MINUTE=60*Date.SECOND;Date.HOUR=60*Date.MINUTE;Date.DAY=24*Date.HOUR;Date.WEEK=7*Date.DAY;Date.parseDate=function(l,c){var n=new Date();var o=0;var e=-1;var k=0;var q=l.split(/\W+/);var p=c.match(/%./g);var h=0,g=0;var r=0;var f=0;for(h=0;h<q.length;++h){if(!q[h]){continue}switch(p[h]){case"%d":case"%e":k=parseInt(q[h],10);break;case"%m":e=parseInt(q[h],10)-1;break;case"%Y":case"%y":o=parseInt(q[h],10);(o<100)&&(o+=(o>29)?1900:2000);break;case"%b":case"%B":for(g=0;g<12;++g){if(b.MONTH_NAMES[g].substr(0,q[h].length).toLowerCase()==q[h].toLowerCase()){e=g;break}}break;case"%H":case"%I":case"%k":case"%l":r=parseInt(q[h],10);break;case"%P":case"%p":if(/pm/i.test(q[h])&&r<12){r+=12}else{if(/am/i.test(q[h])&&r>=12){r-=12}}break;case"%M":f=parseInt(q[h],10);break}}if(isNaN(o)){o=n.getFullYear()}if(isNaN(e)){e=n.getMonth()}if(isNaN(k)){k=n.getDate()}if(isNaN(r)){r=n.getHours()}if(isNaN(f)){f=n.getMinutes()}if(o!=0&&e!=-1&&k!=0){return new Date(o,e,k,r,f,0)}o=0;e=-1;k=0;for(h=0;h<q.length;++h){if(q[h].search(/[a-zA-Z]+/)!=-1){var s=-1;for(g=0;g<12;++g){if(b.MONTH_NAMES[g].substr(0,q[h].length).toLowerCase()==q[h].toLowerCase()){s=g;break}}if(s!=-1){if(e!=-1){k=e+1}e=s}}else{if(parseInt(q[h],10)<=12&&e==-1){e=q[h]-1}else{if(parseInt(q[h],10)>31&&o==0){o=parseInt(q[h],10);(o<100)&&(o+=(o>29)?1900:2000)}else{if(k==0){k=q[h]}}}}}if(o==0){o=n.getFullYear()}if(e!=-1&&k!=0){return new Date(o,e,k,r,f,0)}return n};Date.prototype.getMonthDays=function(d){var c=this.getFullYear();if(typeof d=="undefined"){d=this.getMonth()}if(((0==(c%4))&&((0!=(c%100))||(0==(c%400))))&&d==1){return 29}else{return Date.DAYS_IN_MONTH[d]}};Date.prototype.getDayOfYear=function(){var c=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var e=new Date(this.getFullYear(),0,0,0,0,0);var d=c-e;return Math.floor(d/Date.DAY)};Date.prototype.getWeekNumber=function(){var f=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var e=f.getDay();f.setDate(f.getDate()-(e+6)%7+3);var c=f.valueOf();f.setMonth(0);f.setDate(4);return Math.round((c-f.valueOf())/(7*86400000))+1};Date.prototype.equalsTo=function(c){return((this.getFullYear()==c.getFullYear())&&(this.getMonth()==c.getMonth())&&(this.getDate()==c.getDate())&&(this.getHours()==c.getHours())&&(this.getMinutes()==c.getMinutes()))};Date.prototype.setDateOnly=function(c){var d=new Date(c);this.setDate(1);this.setFullYear(d.getFullYear());this.setMonth(d.getMonth());this.setDate(d.getDate())};Date.prototype.print=function(n){var c=this.getMonth();var l=this.getDate();var o=this.getFullYear();var q=this.getWeekNumber();var r=this.getDay();var x={};var t=this.getHours();var e=(t>=12);var j=(e)?(t-12):t;var v=this.getDayOfYear();if(j==0){j=12}var f=this.getMinutes();var k=this.getSeconds();x["%a"]=b.SHORT_DAY_NAMES[r];x["%A"]=b.DAY_NAMES[r];x["%b"]=b.SHORT_MONTH_NAMES[c];x["%B"]=b.MONTH_NAMES[c];x["%C"]=1+Math.floor(o/100);x["%d"]=(l<10)?("0"+l):l;x["%e"]=l;x["%H"]=(t<10)?("0"+t):t;x["%I"]=(j<10)?("0"+j):j;x["%j"]=(v<100)?((v<10)?("00"+v):("0"+v)):v;x["%k"]=t;x["%l"]=j;x["%m"]=(c<9)?("0"+(1+c)):(1+c);x["%M"]=(f<10)?("0"+f):f;x["%n"]="\n";x["%p"]=e?"PM":"AM";x["%P"]=e?"pm":"am";x["%s"]=Math.floor(this.getTime()/1000);x["%S"]=(k<10)?("0"+k):k;x["%t"]="\t";x["%U"]=x["%W"]=x["%V"]=(q<10)?("0"+q):q;x["%u"]=r+1;x["%w"]=r;x["%y"]=(""+o).substr(2,2);x["%Y"]=o;x["%%"]="%";var u=/%./g;var p=n.match(u);for(var h=0;h<p.length;h++){var g=x[p[h]];if(g){u=new RegExp(p[h],"g");n=n.replace(u,g)}}return n};Date.prototype.__msh_oldSetFullYear=Date.prototype.setFullYear;Date.prototype.setFullYear=function(e){var c=new Date(this);c.__msh_oldSetFullYear(e);if(c.getMonth()!=this.getMonth()){this.setDate(28)}this.__msh_oldSetFullYear(e)};a.fn.calendar=function(c){var e={triggerElement:null,parentElement:null,minYear:1900,maxYear:2100,firstDayOfWeek:1,weekend:"0,6",dateFormat:"%d/%m/%Y",dateField:null,selectHandler:null,closeHandler:null};var d=a.extend({},e,c);this.each(function(){var g=a(this);var h=new b();h.minYear=d.minYear;h.maxYear=d.maxYear;h.firstDayOfWeek=d.firstDayOfWeek;h.weekend=d.weekend;h.dateFormat=d.dateFormat;h.dateField=(d.dateField||g);h.selectHandler=(d.selectHandler||b.defaultSelectHandler);var f=g.html()||g.val();if(d.parentElement){h.create(a(d.parentElement));if(f){h.parseDate(f)}h.show()}else{h.create();if(f){h.parseDate(f)}var i=a(d.triggerElement||g);i.click(function(){h.closeHandler=(d.closeHandler||b.defaultCloseHandler);h.showAtElement(i)})}});return this}})(jQuery);