/**
 * Month Picker v2.0 (jQuery Plugins)
 *
 * @author Timmy Tin (ycTIN)
 * @license GPL
 * @version 2.0
 * @copyright Timmy Tin (ycTIN)
 * @website http://project.yctin.com/monthpicker
 *
 */
 jQuery.fn.monthpicker=function(opts,callback){if(typeof opts=="function")opts.onChanged=opts;else{if(typeof opts=="string"){var s=opts.split("-");opts={elements:[{tpl:"year",opt:{value:parseInt(s[0])}},{tpl:"month",opt:{value:parseInt(s[1])}}]}}if(typeof callback=="function")opts.onChanged=callback}opts=jQuery.extend({elements:[{tpl:"year"},{tpl:"month"}],onChanged:false},opts);var templates=jQuery.extend({year:{key:"year",type:"dropdown",caption:"Year",range:"-10~0",value:(new Date).getFullYear()},month:{key:"month",type:"button",caption:"Month",text:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],range:"1~12",value:(new Date).getMonth()+1},quarter:{key:"quarter",type:"button",caption:"Quarter",text:["Winter(Jan-Mar)","Spring(Apr-Jun)","Summer(Jul-Sep)","Fall(Oct-Dec)"],range:"1~4",value:1}},opts.templates);return this.each(function(){for(var $container=jQuery(this),$body=jQuery("<tr></tr>"),currentValue={},i=0;i<opts.elements.length;i++)add(opts.elements[i]);jQuery("<table></table>").append($body).appendTo($container.html(""));return this;function toArray(str,cur){if(str.indexOf("~")==-1)return [cur];var sY,eY,y=str.split("~");if(y[0].charAt(0)=="-"||y[1].charAt(0)=="+"){sY=cur+parseInt(y[0],10);eY=cur+parseInt(y[1],10)}else if(y[0].match(/^\d*$/)&&y[1].match(/^\d*$/)){sY=parseInt(y[0],10);eY=parseInt(y[1],10)}else return [cur];for(var p=0,o=[],i=sY;i<=eY;i++)o[p++]=i;return o}function add(element){eval("var tpl = templates."+element.tpl);if(!tpl)return false;tpl=jQuery.extend(tpl,element.opt);set(tpl.key,tpl.value);var range=toArray(tpl.range,tpl.value),text=tpl.text||range,className="";if(tpl.type=="dropdown"){for(var $list=jQuery('<ul><li class="li"><!--[if IE 6]><a class="li" href="javascript:;"><table><tr><td><![endif]--><a href="javascript:;" ><span class="selected">'+tpl.value+"</span></a><ul></ul><!--[if IE 6]></td></tr></table></a><![endif]--></li></ul>"),$items=$list.find("ul"),i=0;i<range.length;i++){className=tpl.value==range[i]?"selected":"";jQuery('<li class="li"></li>').append(jQuery('<a href="javascript:;" title="'+range[i]+'" class="'+className+'">'+text[i]+"</a>").click(function(){var $this=jQuery(this),value=$this.attr("title"),$menu=$this.parent().parent();if(!changing(tpl.key,value,this))return;$menu.slideUp(0).show(1).parent().find(".selected:first").html(value);$menu.find("a").removeClass("selected");$this.addClass("selected");update(tpl.key,value,this)})).appendTo($items)}$body.append('<th class="caption">'+tpl.caption+"</th>").append(jQuery("<td></td>").append($list))}else if(tpl.type=="button"){for(var $items=jQuery('<td class="month"></td>'),i=0;i<range.length;i++){className=tpl.value==range[i]?"selected":"";jQuery('<a href="javascript:;" title="'+range[i]+'"><span class="'+className+'">'+text[i]+"</span></a>").click(function(){var $this=jQuery(this),value=$this.attr("title");if(!changing(tpl.key,value,this))return;$this.parent().find("span").removeClass("selected");$this.find("span").addClass("selected");update(tpl.key,value,this)}).appendTo($items)}$body.append('<th class="caption">'+tpl.caption+"</th>").append($items)}}function changing(key,value,$obj){if(typeof opts.onChanging=="function"){var newValue=jQuery.extend({},currentValue);eval("newValue."+key+"="+value+";");if(!opts.onChanging(newValue,$container))return false}return true}function set(key,value){eval("currentValue."+key+"="+value+";")}function update(key,value,$obj){set(key,value);typeof opts.onChanged=="function"&&opts.onChanged(currentValue,$container)}})}