(function(b){b.fn.calendar=function(d){return this.each(function(){new c(b(this),d)})};var a=new Date;var c=function(e,d){this.today=a;this.init(e,d).build().show()};c.prototype={weekName:["sun","mon","tue","wed","thu","fri","sat"],init:function(e,d){this.setOption(d);this.elem=b("<div />").addClass(this.option.cssClass);this.elem.css("z-index",2);this.wrap=b("<div />").append(this.elem);this.wrap.css({position:"relative",overflow:"hidden"});e.append(this.wrap);this.view={};this.preloadEvents={};return this.createNavi().createTable().createCaption().createTodayLink()},setOption:function(d){if(this.option&&!d){return this}if(this.option){b.extend(this.option,d);return this}this.option=b.extend({lang:"ja",year:this.today.getFullYear(),month:this.today.getMonth()+1,week:{en:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],ja:["\u65e5","\u6708","\u706b","\u6c34","\u6728","\u91d1","\u571f"]},caption:{en:"%Y-%M",ja:"%Y\u5e74%M\u6708"},navi:{en:["Prev","Next"],ja:["\u524d\u306e\u6708","\u6b21\u306e\u6708"]},todayLink:{en:"Today [%Y-%M-%D]",ja:"\u4eca\u65e5 [%Y\u5e74%M\u6708%D\u65e5]"},moveTime:700,events:{},hideOther:false,cssClass:"jqueryCalendar",addDay:function(){},addEvent:function(g,e){var f=typeof e.url!="undefined"?b("<a />").attr("href",e.url):b("<span />");if(e.id){f.attr("id","event-"+e.id)}if(e.title){f.attr("title",e.title)}f.text(g.text());g.text("").append(f).addClass("event")},beforeMove:function(){},afterMove:function(){},preloadEvent:function(){}},d);return this},createNavi:function(){if(!this.option.navi){return this}var d=this;var e=function(h,j,k){var g=new Date(d.option.year,(d.option.month+j)-1,1);var i=b("<a />").text(k).attr("href","javascript:void(0)").click(function(){d.move(j);return false});return b("<li />").addClass(h).append(i)};var f=typeof this.option.navi==="object"?this.option.navi[this.option.lang]:this.option.navi;this.elem.append(b("<ul />").addClass("navi").append(e("prev",-1,f[0])).append(e("next",1,f[1])));return this},createTable:function(){this.tr=b("<tr />");this.td=b("<td />");this.table=b("<table />");var f=[];var d=typeof this.option.week==="object"?this.option.week[this.option.lang]:this.option.week;for(var e=0,g;g=d[e];e++){f[f.length]=['<th class="',this.weekName[e],'">',g,"</td>"].join("")}this.thead=b("<thead />").append(this.tr.clone().html(f.join("")));this.tbody=b("<tbody />");this.elem.append(b("<div />").addClass("main").append(this.table.addClass("calendar").append(this.thead).append(this.tbody)));return this},createCaption:function(){if(this.option.caption&&!this.caption){this.caption=b("<div />").addClass("caption");this.table.before(this.caption)}return this},createTodayLink:function(){var e=this.getKey(this.today).split("-");var f=typeof this.option.todayLink==="object"?this.option.todayLink[this.option.lang]:this.option.todayLink;var d=this;this.table.after(b("<div />").addClass("todayLink").append(b("<a />").text(f.replace(/%Y/i,e[0]).replace(/%M/i,e[1]).replace(/%D/i,e[2])).attr("href","javascript:void(0)").click(function(){d.option.month=d.today.getMonth()+1;d.rebuild().show().resetWrap()})));return this},build:function(){this.prevFill();this.current=new Date(this.option.year,this.option.month-1,1);var e=new Date(this.option.year,this.option.month,0).getDate();for(var d=1;d<=e;d++){this.current.setDate(d);this.option.addDay(this.addDay(this.current,"currentMonth"))}this.nextFill();this.addEvent();return this},rebuild:function(){this.tbody.empty();this.view={};return this.build()},prevFill:function(){var f=new Date(this.option.year,this.option.month-1,0),e=f.getDate(),d=e-f.getDay();if(e-d>=6){return this}for(;d<=e;d++){f.setDate(d);this.addDay(f,"otherMonth",this.option.hideOther)}return this},nextFill:function(){var e=new Date(this.option.year,this.option.month,1),f=7-e.getDay();if(f>=7){return this}for(var d=1;d<=f;d++){e.setDate(d);this.addDay(e,"otherMonth",this.option.hideOther)}return this},addDay:function(d,g,f){var e=g==="otherMonth"?g+this.getKey(d):this.getKey(d);this.view[e]=this.td.clone().addClass(g).addClass(this.weekName[d.getDay()]);this.view[e].text(f?" ":d.getDate());if(e!=="otherMonth"){this.view[e].attr("id",["calendar",this.getKey(d)].join("-"))}return this.view[e]},getKey:function(d,f){if(typeof d==="string"){d=d.split("-")}var e=[d[0]||d.getFullYear(),("0"+(d[1]||d.getMonth()+1)).slice(-2),("0"+(d[2]||d.getDate())).slice(-2)];if(f===true){return e}return e.join("-")},addEvent:function(){var d=this;b.each(d.option.events,function(f,g){var i=d.view[d.getKey(f)];try{d.option.addEvent(i,g)}catch(h){}});return this},show:function(){var f=this.getKey(this.today),i,h=0,d=this;b.each(d.view,function(e){if(h%7===0||h===0){i=h%2==0?d.tr.clone().addClass("even"):d.tr.clone().addClass("odd");d.tbody.append(i)}if(e===f&&!e.match("otherMonth")){this.addClass("today")}i.append(this);h++});this.setCaption();try{var g=this.getKey(this.current).split("-");this.preloadEvents=this.option.preloadEvent(g[0],g[1])}catch(j){}return this},setCaption:function(){if(!this.option.caption){return this}this.caption.text(this.getCaption(this.current));return this},getCaption:function(e){e=this.getKey(e).split("-");var d=typeof this.option.caption==="object"?this.option.caption[this.option.lang]:this.option.caption;return d.replace(/%Y/i,e[0]).replace(/%M/i,e[1])},move:function(g){var f=this.elem.innerWidth();var j=this.elem.position();var i=this.elem.clone().css({position:"absolute",top:j.top+"px",left:j.left+"px",zIndex:1});this.resetWrap();this.wrap.append(i);this.option.month=this.option.month+g;var e=new Date(this.option.year,this.option.month-1,1);e=this.getKey(e,true);this.option.beforeMove(this.option,e[0],e[1]);this.setPreloadEvent(g);this.rebuild().show();var h=this.option.moveTime;this.wrap.animate({height:this.elem.innerHeight()},h);if((g+"").charAt(0)!=="-"){i.animate({marginLeft:"-"+f+"px"},h,function(){i.remove()})}else{this.elem.css({position:"absolute",marginLeft:"-"+f+"px"});var d=this;this.elem.animate({marginLeft:0},h,function(){i.remove();d.elem.css("position","static")})}this.option.afterMove(this.option,e[0],e[1])},resetWrap:function(){this.wrap.css({width:this.elem.innerWidth()+"px",height:this.elem.innerHeight()+"px"});return this},setPreloadEvent:function(f){var d=f===1?"next":"prev";try{if(typeof this.preloadEvents[d]==="object"){return this.option.events=this.preloadEvents[d]}if(typeof this.preloadEvents==="object"){return this.option.events=this.preloadEvents}}catch(g){}}}})(jQuery);