o2sCalObject=null;o2sCalShowTime=false;var o2s={popupTextLastMonth:"&lt;&lt;",popupTextLastYear:"&nbsp;&lt;&nbsp;",popupTextNextMonth:"&gt;&gt;",popupTextNextYear:"&nbsp;&gt;&nbsp;",popupTextToday:"Today",classCal:"o2sCalTable",classCalHeader:"o2sCalHeader",classCalHeaderDay:"o2sCalHeaderDay",classCalDay:"o2sCalDay",classCalDayTarget:"o2sCalDayTarget",classCalHover:"o2sCalHover",dayletter:["S","M","T","W","T","F","S"],dayshort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daylong:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthshort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],monthlong:["January","February","March","April","May","June","July","August","September","October","November","December"],monthdays:[31,28,31,30,31,30,31,31,30,31,30,31],millisecond:1,second:1000,minute:1000*60,hour:1000*60*60,day:1000*60*60*24,week:1000*60*60*24*7,year:1000*60*60*24*365,commonformats:["d/m/yyyy","dd/mm/yyyy","dd-mm-yyyy","dd-mm-yy","d mmmm yyyy","dd mmmm yyyy","dd mmmm yy","d mmmm yy","dd.mm.yyyy","d.m.yyyy","d.m.y","d. mmmm yy","d. mmmm yyyy","d mmm yyyy","dd mmm yyyy","d mmm yy","dd mmm yy","yyyy mmmm dd","yy mmmm dd","yyyy mmmm d","yy mmmm d","yyyy-mm-dd","yyyy.mm.dd","mmmm d, yyyy","mmmm dd, yyyy","mmmm d, yy","mmmm dd, yy","mmm d, yy","mmm d, yyyy","mmm dd, yy","mmm. d, yyyy","mmm. dd, yyyy","mmm. d, yy","mmm. dd, yy","mm/dd/yyyy","mm-dd-yyyy","mm.dd.yy","m/d/yy","mm/dd/yy","mm/dd/yyyy","ddd, dd mmm yyyy","ddd mmm dd yyyy HH:ii:ss","yyyy-j","yyyy-jjj","yyyyjjjj","yyyyj"],pad:function(x){return(x<0||x>9?"":"0")+x},getTokens:function(str){var tokens=[];var curtoken="";var curchar="";var lastchar="";var idx=0;while(idx<str.length){curchar=str.charAt(idx);curtoken="";while(str.charAt(idx)==curchar&&idx<str.length){curtoken+=str.charAt(idx++)}tokens.push(curtoken)}return tokens},dateDiff:function(unit,start,end){start=this.parseDate(start);end=this.parseDate(end);if(!start||!end){return null}var diff=end.getTime()-start.getTime();switch(unit.toLowerCase()){case"ms":{diff=diff;break}case"s":{diff=diff/this.second;break}case"i":{diff=diff/this.minute;break}case"h":{diff=diff/this.hour;break}case"d":{diff=diff/this.day;break}case"w":{diff=diff/this.week;break}case"y":{diff=diff/this.year;break}}return diff},dateAdd:function(unit,amt,date){var diff=0;switch(unit.toLowerCase()){case"ms":{diff=amt*this.millisecond;break}case"s":{diff=amt*this.second;break}case"i":{diff=amt*this.minute;break}case"h":{diff=amt*this.hour;break}case"d":{diff=amt*this.day;break}case"w":{diff=amt*this.week;break}case"y":{diff=amt*this.year;break}default:{return 0}}var date=o2s.parseDate(date);var mills=(date)?date.getTime()+diff:diff;var nd=new Date();nd.setTime(mills);return nd},d:function(date){return date.getDate().toString()},dd:function(date){return this.pad(this.d(date))},ddd:function(date){return this.dayshort[date.getDay()]},dddd:function(date){return this.daylong[date.getDay()]},j:function(date){var y=date.getFullYear();var ds=new Date(y,0,0);return Math.round(this.dateDiff("d",ds,date))},m:function(date){return date.getMonth()+1},mm:function(date){return this.pad(date.getMonth()+1)},mmm:function(date){return this.monthshort[date.getMonth()]},mmmm:function(date){return this.monthlong[date.getMonth()]},y:function(date){return parseInt(date.getFullYear().toString().substr(2))},yy:function(date){return this.pad(this.y(date))},yyyy:function(date){return date.getFullYear()},h:function(date){return(date.getHours()>12?date.getHours()-12:date.getHours())},hh:function(date){return this.pad(this.h(date))},H:function(date){return date.getHours()},HH:function(date){return this.pad(this.H(date))},i:function(date){return date.getMinutes()},ii:function(date){return this.pad(this.i(date))},s:function(date){return date.getSeconds()},ss:function(date){return this.pad(this.s(date))},a:function(date){return(this.H(date)<12?"am":"pm")},A:function(date){return(this.H(date)<12?"AM":"PM")},O:function(date){var tz=(date.getTimezoneOffset()/60)*-1;return(tz<0?tz:"+"+tz)},short:function(date){return this.m(date)+"/"+this.d(date)+"/"+this.yy(date)},medium:function(date){return this.mmm(date)+" "+this.d(date)+", "+this.yyyy(date)},long:function(date){return this.mmmm(date)+" "+this.d(date)+", "+this.yyyy(date)},shorttime:function(date){return this.short(date)+" "+this.HH(date)+":"+this.ii(date)},mediumtime:function(date){return this.medium(date)+" "+this.HH(date)+":"+this.ii(date)},longtime:function(date){return this.long(date)+" "+this.hh(date)+":"+this.ii(date)+":"+this.ss(date)+" "+this.A(date)},iso8610:function(date){return this.yyyy(date)+"-"+this.mm(date)+"-"+this.dd(date)+"T"+this.HH(date)+this.ii(date)+":"+this.ss(date)+this.O(date)},yyyymmdd:function(date){return this.yyyy(date)+"-"+this.mm(date)+"-"+this.dd(date)},format:function(date,format){if(!format){format="medium"}var output="";if(!o2s.isDate(date)){return date};switch(format){case"short":{output+=this.short(date);break}case"medium":{output+=this.medium(date);break}case"long":{output+=this.long(date);break}case"shorttime":{output+=this.shorttime(date);break}case"mediumtime":{output+=this.mediumtime(date);break}case"longtime":{output+=this.longtime(date);break}case"iso8610":{output+=this.iso8610(date);break}case"yyyymmdd":{output+=this.yyyymmdd(date);break}default:{var tokens=this.getTokens(format);for(var x=0;x<tokens.length;x++){var part="";switch(tokens[x]){case"d":{part+=this.d(date);break}case"dd":{part+=this.dd(date);break}case"ddd":{part+=this.ddd(date);break}case"dddd":{part+=this.dddd(date);break}case"m":{part+=this.m(date);break}case"mm":{part+=this.mm(date);break}case"mmm":{part+=this.mmm(date);break}case"mmmm":{part+=this.mmmm(date);break}case"y":{part+=this.y(date);break}case"yy":{part+=this.yy(date);break}case"yyyy":{part+=this.yyyy(date);break}case"h":{part+=this.h(date);break}case"hh":{part+=this.hh(date);break}case"H":{part+=this.H(date);break}case"HH":{part+=this.H(date);break}case"i":{part+=this.i(date);break}case"ii":{part+=this.ii(date);break}case"s":{part+=this.s(date);break}case"ss":{part+=this.ss(date);break}case"a":{part+=this.a(date);break}case"A":{part+=this.A(date);break}case"O":{part+=this.O(date);break}case"j":case"jjj":{part+=this.j(date);break}default:{part+=tokens[x];break}}output+=part}break}}return output},parseDate:function(val,format){if(!val){return null}val=val.toString();if(!format){for(var i=0;i<this.commonformats.length;i++){var d=this.parseDate(val,this.commonformats[i]);if(d!=null){return d}}return null}this.isInteger=function(val){for(var i=0;i<val.length;i++){if("1234567890".indexOf(val.charAt(i))==-1){return false}}return true};this.getInt=function(str,i,minlength,maxlength){for(var x=maxlength;x>=minlength;x--){var token=str.substring(i,i+x);if(token.length<minlength){return null}if(this.isInteger(token)){return token}}return null};var day=0;var month=0;var year=0;var hour=0;var minute=0;var second=0;var ampm;var min,max;var jullian=false;var tokens=this.getTokens(format);idx=0;for(var x=0;x<tokens.length;x++){token=tokens[x];switch(token){case"d":case"dd":{day=this.getInt(val,idx,token.length,2);if(day<1||day>31||day==null){return null}idx+=day.length;break}case"ddd":case"dddd":{var names=(token=="ddd"?this.dayshort:this.daylong);for(var check=0;check<names.length;check++){if(val.substr(idx,names[check].length).toLowerCase()==names[check].toLowerCase()){day=check;idx+=names[check].length;break}}break}case"j":case"jjj":{var day=this.getInt(val,idx,token.length,3);if(day<1||day>366||day==null){return null}idx+=day.length;jullian=true;break}case"m":case"mm":{month=this.getInt(val,idx,token.length,2);if(month<1||month>12||month==null){return null}idx+=month.length;month=parseInt(month)-1;break}case"mmm":case"mmmm":{var names=(token=="mmm")?this.monthshort:this.monthlong;for(var check=0;check<names.length;check++){if(val.substr(idx,names[check].length).toLowerCase()==names[check].toLowerCase()){month=check;idx+=names[check].length;break}}break}case"yyyy":case"yy":case"y":{max=4;min=token.length;if(token=="y"){min=2;max=4}year=this.getInt(val,idx,min,max);if(year==null){return null}idx+=year.length;if(year.length==2){if(year>70){year=1900+parseInt(year)}else{year=2000+parseInt(year)}}break}case"HH":case"H":case"hh":case"h":{hour=this.getInt(val,idx,token.length,2);var maxhour=12;if(token=="HH"||token=="H"){maxhour=23}if(hour<0||hour>maxhour||hour==null){return null}idx+=hour.length;break}case"i":case"ii":case"s":case"ss":{minute=this.getInt(val,idx,token.length,2);if(minute<0||minute>59||minute==null){return null}idx+=minute.length;break}case"a":case"A":{var ampm=val.substr(idx,2).toUpperCase();if(ampm=="AM"||ampm=="PM"){idx+=ampm.length}else{return null}break}default:{var check=val.substr(idx,token.length);if(check!=token){return null}idx+=token.length}}}if(!jullian){if(month==2){if(((year%4==0)&&(year%100!=0))||(year%400==0)){if(day>29){return null}}}else{if(day<1||day>this.monthdays[month]){return null}}}if(parseInt(hour)<12&&ampm=="PM"){hour=parseInt(hour)+12}else if(parseInt(hour)>11&&ampm=="AM"){hour=parseInt(hour)-12}return new Date(year,month,day,hour,minute,second)},isDate:function(date,format){d=o2s.parseDate(date,format);if(d!=null){return true}else{return false}},calendar:function(data){showDate=((!data||data.date==null)?new Date():data.date);var showDate=(isNaN(showDate)||showDate==null)?new Date():showDate;var showYear=showDate.getFullYear();var showMonth=showDate.getMonth();var firstday=new Date(showYear,showMonth,1).getDay();var monthLength=this.monthdays[showMonth];if(showMonth==1){if((showYear%4==0&&showYear%100!=0)||showYear%400==0){monthLength=29}}var html="<table class=\""+this.classCal+"\" id=\""+this.medium(showDate)+"\">";html+="<tr>";html+="<th>&nbsp;</th>";html+="<th colspan=\"5\">";html+=this.monthshort[showMonth]+"&nbsp;"+showYear;html+="</th>";html+="<th><a href=\"#\" id=\"o2sCalClose\">X</a></th>";html+="</tr>";html+="<tr>";html+="<td><a id=\"o2sCalPriorYear\" href=\"#\">"+this.popupTextLastYear+"</a></td>";html+="<td><a id=\"o2sCalPriorMonth\" href=\"#\">"+this.popupTextLastMonth+"</a></td>";html+="<td colspan=\"3\" style=\"text-align: center;\"><a href=\"#\" id=\"o2sCalToday\">"+this.popupTextToday+"</a></td>";html+="<td style=\"text-align: right;\"><a id=\"o2sCalNextMonth\" href=\"#\">"+this.popupTextNextMonth+"</a></td>";html+="<td style=\"text-align: right;\"><a id=\"o2sCalNextYear\" href=\"#\">"+this.popupTextNextYear+"</a></td>";html+="</tr>";html+="<tr class=\""+this.classCalHeader+"\">";for(var i=0;i<this.dayshort.length;i++){html+="<td class=\""+this.classCalHeaderDay+"\">";html+=this.dayletter[i];html+="</td>"}html+="</tr>";var curday=1;while(curday<=monthLength){html+="<tr>";for(i=0;i<7;i++){if((curday<=1&&i<firstday)||curday>monthLength){html+="<td class=\""+this.classCalDay+"\" id=\"\">";html+="&nbsp;"}else{var dayclass=((curday==showDate.getDate())?this.classCalDayTarget:this.classCalDay);html+="<td class=\""+dayclass+"\" id=\""+this.medium(new Date(showYear,showMonth,curday))+"\">";html+=curday;curday++;}html+="</td>"}html+="</tr>";}if(o2sCalShowTime){html+="<tr>";html+="<td>&nbsp;</td>";html+="<td colspan=\"2\" style=\"text-align:right;\"><select id=\"o2sCalTimeHour\">";for(i=0;i<24;i++){html+="<option value=\""+this.pad(i)+"\">"+this.pad(i)+"</option>";}html+="</select> : </td>";html+="<td colspan=\"2\"><select id=\"o2sCalTimeHour\">";for(i=0;i<60;i++){html+="<option value=\""+this.pad(i)+"\">"+this.pad(i)+"</option>";}html+="</select></td>";html+="<td>&nbsp;</td>";html+="</tr>";}html+="</table>";return html;},calendarClose:function(){if(o2sCalObject&&$("#o2sCalendar").css("display")=="block"){$("#o2sCalendar").slideUp("fast",function(){$("#o2sCalendar").remove()});o2sCalObject=false;return false;}},calendarEvents:function(data){if(!data){data={}}if(!data.format){data.format="medium";}$("#o2sCalClose").click(o2s.calendarClose);$("."+this.classCalDay).hover(function(){$(this).addClass(o2s.classCalHover);},function(){$(this).removeClass(o2s.classCalHover);});$("."+this.classCalDay).click(function(){if($.trim($(this).text()).length>0){var d=new Date($(this).attr("id"));$(o2sCalObject).val(o2s.format(d,data.format));o2s.calendarClose();return false;}});$("."+this.classCalDayTarget).click(function(){if($.trim($(this).text()).length>0){var d=new Date($(this).attr("id"));$(o2sCalObject).val(o2s.format(d));$("#o2sCalClose").click();return false;}});$("#o2sCalPriorYear").click(function(){var d=new Date($("."+o2s.classCal).attr("id"));d.setYear(d.getFullYear()-1);$("#o2sCalendar").empty().append(o2s.calendar({date:d}));o2s.calendarEvents(data);return false;});$("#o2sCalPriorMonth").click(function(){var d=new Date($("."+o2s.classCal).attr("id"));d.setMonth(d.getMonth()-1);$("#o2sCalendar").empty().append(o2s.calendar({date:d}));o2s.calendarEvents(data);return false;});$("#o2sCalNextYear").click(function(){var d=new Date($("."+o2s.classCal).attr("id"));d.setYear(d.getFullYear()+1);$("#o2sCalendar").empty().append(o2s.calendar({date:d}));o2s.calendarEvents(data);return false;});$("#o2sCalNextMonth").click(function(){var d=new Date($("."+o2s.classCal).attr("id"));d.setMonth(d.getMonth()+1);$("#o2sCalendar").empty().append(o2s.calendar({date:d}));o2s.calendarEvents(data);return false;});$("#o2sCalToday").click(function(){$("#o2sCalendar").empty().append(o2s.calendar({date:new Date()}));o2s.calendarEvents(data);return false;})},showPopup:function(data,obj){if(!data){data={}}if(data&&data.parent){obj=data.parent}if(obj==o2sCalObject){return}o2sCalObject=obj;var d=this.parseDate($(obj).val());if(d){data.date=d}$("body").append("<div id=\"o2sCalendar\" style=\"display: none;\">"+this.calendar(data)+"</div>");if($("#o2sCalendar").css("display")=="block"){$("#o2sCalendar").hide();}$("#o2sCalendar").css({position:"absolute",top:obj.offsetTop+obj.offsetHeight,left:obj.offsetLeft});$("#o2sCalendar").slideToggle("fast",function(){if($(this).css("display")=="none"){$(this).remove();}});this.calendarEvents(data)}};jQuery.fn.datePicker=function(opts){return this.each(function(){$(this).focus(function(){o2s.showPopup(opts,this)})})};jQuery.fn.dateDiff=function(unit,target){var d=o2s.dateDiff(unit,$(this).val(),target);return d};jQuery.fn.dateAdd=function(unit,amt){var d=o2s.dateAdd(unit,amt,$(this).val());return d};jQuery.fn.dateFormat=function(format){return this.each(function(){var d=o2s.parseDate($(this).val());$(this).val(o2s.format(d,format))})};jQuery.fn.parseDate=function(format){var d=o2s.parseDate($(this).val());return d};jQuery.fn.isDate=function(format){return o2s.isDate($(this).val(),format);};
