﻿/* http://keith-wood.name/calendars.html
   Calendars extras for jQuery v1.1.2.
   Written by Keith Wood (kbwood{at}iinet.com.au) August 2009.
   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and 
   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. 
   Please attribute the author if you use it. */
(function($){$.extend($.calendars.regional[''],{invalidArguments:'Invalid arguments',invalidFormat:'Cannot format a date from another calendar',missingNumberAt:'Missing number at position {0}',unknownNameAt:'Unknown name at position {0}',unexpectedLiteralAt:'Unexpected literal at position {0}',unexpectedText:'Additional text found at end'});$.calendars.local=$.calendars.regional[''];$.extend($.calendars.cdate.prototype,{formatDate:function(a){return this._calendar.formatDate(a||'',this)}});$.extend($.calendars.baseCalendar.prototype,{UNIX_EPOCH:$.calendars.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:24*60*60,TICKS_EPOCH:$.calendars.instance().jdEpoch,TICKS_PER_DAY:24*60*60*10000000,ATOM:'yyyy-mm-dd',COOKIE:'D, dd M yyyy',FULL:'DD, MM d, yyyy',ISO_8601:'yyyy-mm-dd',JULIAN:'J',RFC_822:'D, d M yy',RFC_850:'DD, dd-M-yy',RFC_1036:'D, d M yy',RFC_1123:'D, d M yyyy',RFC_2822:'D, d M yyyy',RSS:'D, d M yy',TICKS:'!',TIMESTAMP:'@',W3C:'yyyy-mm-dd',formatDate:function(f,g,h){if(typeof f!='string'){h=g;g=f;f=''}if(!g){return''}if(g.calendar()!=this){throw $.calendars.local.invalidFormat||$.calendars.regional[''].invalidFormat;}f=f||this.local.dateFormat;h=h||{};var i=h.dayNamesShort||this.local.dayNamesShort;var j=h.dayNames||this.local.dayNames;var k=h.monthNamesShort||this.local.monthNamesShort;var l=h.monthNames||this.local.monthNames;var m=h.calculateWeek||this.local.calculateWeek;var n=function(a,b){var c=1;while(s+c<f.length&&f.charAt(s+c)==a){c++}s+=c-1;return Math.floor(c/(b||1))>1};var o=function(a,b,c,d){var e=''+b;if(n(a,d)){while(e.length<c){e='0'+e}}return e};var p=function(a,b,c,d){return(n(a)?d[b]:c[b])};var q='';var r=false;for(var s=0;s<f.length;s++){if(r){if(f.charAt(s)=="'"&&!n("'")){r=false}else{q+=f.charAt(s)}}else{switch(f.charAt(s)){case'd':q+=o('d',g.day(),2);break;case'D':q+=p('D',g.dayOfWeek(),i,j);break;case'o':q+=o('o',g.dayOfYear(),3);break;case'w':q+=o('w',g.weekOfYear(),2);break;case'm':q+=o('m',g.month(),2);break;case'M':q+=p('M',g.month()-this.minMonth,k,l);break;case'y':q+=(n('y',2)?g.year():(g.year()%100<10?'0':'')+g.year()%100);break;case'Y':n('Y',2);q+=g.formatYear();break;case'J':q+=g.toJD();break;case'@':q+=(g.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case'!':q+=(g.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case"'":if(n("'")){q+="'"}else{r=true}break;default:q+=f.charAt(s)}}}return q},parseDate:function(f,g,h){if(g==null){throw $.calendars.local.invalidArguments||$.calendars.regional[''].invalidArguments;}g=(typeof g=='object'?g.toString():g+'');if(g==''){return null}f=f||this.local.dateFormat;h=h||{};var j=h.shortYearCutoff||this.shortYearCutoff;j=(typeof j!='string'?j:this.today().year()%100+parseInt(j,10));var k=h.dayNamesShort||this.local.dayNamesShort;var l=h.dayNames||this.local.dayNames;var m=h.monthNamesShort||this.local.monthNamesShort;var n=h.monthNames||this.local.monthNames;var o=-1;var p=-1;var q=-1;var r=-1;var s=-1;var t=false;var u=false;var v=function(a,b){var c=1;while(B+c<f.length&&f.charAt(B+c)==a){c++}B+=c-1;return Math.floor(c/(b||1))>1};var w=function(a,b){v(a,b);var c=[2,3,4,4,10,11,20]['oyYJ@!'.indexOf(a)+1];var d=new RegExp('^-?\\d{1,'+c+'}');var e=g.substring(A).match(d);if(!e){throw($.calendars.local.missingNumberAt||$.calendars.regional[''].missingNumberAt).replace(/\{0\}/,A)}A+=e[0].length;return parseInt(e[0],10)};var x=this;var y=function(a,b,c,d){var e=(v(a,d)?c:b);for(var i=0;i<e.length;i++){if(g.substr(A,e[i].length)==e[i]){A+=e[i].length;return i+x.minMonth}}throw($.calendars.local.unknownNameAt||$.calendars.regional[''].unknownNameAt).replace(/\{0\}/,A)};var z=function(){if(g.charAt(A)!=f.charAt(B)){throw($.calendars.local.unexpectedLiteralAt||$.calendars.regional[''].unexpectedLiteralAt).replace(/\{0\}/,A)}A++};var A=0;for(var B=0;B<f.length;B++){if(u){if(f.charAt(B)=="'"&&!v("'")){u=false}else{z()}}else{switch(f.charAt(B)){case'd':r=w('d');break;case'D':y('D',k,l);break;case'o':s=w('o');break;case'w':w('w');break;case'm':q=w('m');break;case'M':q=y('M',m,n);break;case'y':var C=B;t=!v('y',2);B=C;p=w('y',2);break;case'Y':p=w('Y',2);break;case'J':o=w('J')+0.5;if(g.charAt(A)=='.'){A++;w('J')}break;case'@':o=w('@')/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case'!':o=w('!')/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case'*':A=g.length;break;case"'":if(v("'")){z()}else{u=true}break;default:z()}}}if(A<g.length){throw $.calendars.local.unexpectedText||$.calendars.regional[''].unexpectedText;}if(p==-1){p=this.today().year()}else if(p<100&&t){p+=(j==-1?1900:this.today().year()-this.today().year()%100-(p<=j?0:100))}if(s>-1){q=1;r=s;for(var D=this.daysInMonth(p,q);r>D;D=this.daysInMonth(p,q)){q++;r-=D}}return(o>-1?this.fromJD(o):this.newDate(p,q,r))},determineDate:function(f,g,h,i,j){if(h&&typeof h!='object'){j=i;i=h;h=null}if(typeof i!='string'){j=i;i=''}var k=this;var l=function(a){try{return k.parseDate(i,a,j)}catch(e){}a=a.toLowerCase();var b=(a.match(/^c/)&&h?h.newDate():null)||k.today();var c=/([+-]?[0-9]+)\s*(d|w|m|y)?/g;var d=c.exec(a);while(d){b.add(parseInt(d[1],10),d[2]||'d');d=c.exec(a)}return b};g=(g?g.newDate():null);f=(f==null?g:(typeof f=='string'?l(f):(typeof f=='number'?(isNaN(f)||f==Infinity||f==-Infinity?g:k.today().add(f,'d')):f)));return f}})})(jQuery);
