(function ($) { var jierixiuxi='',jierishangban=''; function calendarclass(element, options){ var obj = element; var can = options; var me = this, rand= js.getrand(); jierixiuxi=can.jierixiuxi;jierishangban=can.jierishangban; this.onclick = can.onclick; this.mid = ''; this.week = ['日','一','二','三','四','五','六']; this.obj = []; this.Y = 2014; this.m = 1; this.nY = 2014; this.nm = 1; this.nd = 29; this.marr = [31,28,31,30,31,30,31,31,30,31,30,31]; this.max = 0; this.w = 0; this.nobj = null; this.sterma = {}; this.dayobj = []; this.feastarr = {'0101':'元旦','0214':'情人节','一月初一':'春节','一月十五':'元宵节','七月初七':'七夕','五月初五':'端午节','0501':'劳动节','0601':'儿童节','1001':'国庆节','1111':'光棍日','八月十五':'中秋节','十二月三十':'除夕','十二月初八':'腊八','0801':'建军节','0701':'建党日','0401':'愚人节','0504':'五四青年节','0308':'妇女节','1225':'圣诞节','1224':'平安夜','1031':'万圣节','九月初九':'重阳节','0910':'教师节','0504':'青年节','0312':'植树节','0314':'白色情人节','0315':'消费者权益日','十二月廿三':'小年','0305':'学雷锋日','0422':'世界地球日','0920':'国际爱牙日','0918':'九一八事变','1213':'南京大屠杀日','1201':'世界艾滋病日','1203':'国际残疾人日','0815':'日本投降日'}; this.tsarr = {'1144':'感恩节','0520':'母亲节','0630':'父亲节'}; var tgString = '甲乙丙丁戊己庚辛壬癸'; var dzString = '子丑寅卯辰巳午未申酉戌亥'; var bool = false; this.showYue=function(y,m) { var g1=4,g2=0; var y1=1901,y2=1; var jy = y-y1; var jm = jy*12+m; var a1 = (jm+g1)%10,a2 = (jm+g2)%12; return tgString.charAt(a1)+dzString.charAt(a2); } this.showDay=function(y,m,d) { var g1=5,g2=3; var y1=1901,y2=1; var jm=0; var jd1 = js.now('time','1901-01-01'); var jd2 = js.now('time',''+y+'-'+m+'-'+d+''); jm = (jd2-jd1)/1000/24/3600; var a1 = (jm+g1)%10,a2 = (jm+g2)%12; return tgString.charAt(a1)+dzString.charAt(a2); } this.init = function(){ var id = obj.attr('id'); this.mid = id; var s = '',bo1r='0'; if(can.bordercolor!='')bo1r='1'; s+='
'; s+=''; s+=''; for(var i=0;i<7;i++){ s+=''; } s+=''; var x = 0,w = 100/7; var h = can.height-26; for(var j=1;j<=6;j++){ s+=''; for(var i=0;i<7;i++){ x++; s+=''; } s+=''; } s+='
'+this.week[i]+'
'; obj.html(s); var me = this; for(var i=1;i<=42;i++){ var no = get('calcontabc'+i+'_'+id+''); this.obj[i]=no; no.onclick=function(){me.click(this)} } this.nowmonth(can.month);//当月 } this.nowmonth=function(nmot) { var dt = js.now().split('-'); this.Y = parseFloat(dt[0]); this.m = parseFloat(dt[1]); if(nmot){ var nmots = nmot.split('-'); this.Y = parseFloat(nmots[0]); this.m = parseFloat(nmots[1]); } this.nd = parseFloat(dt[2]); this.nY = this.Y; this.nm = this.m; this.setcalend(); return false; } this.jieqishow = function() { var sterma={}; for(var j=1900;j<=2099;j++){ var gY = j; var str = ''; for(var i=1;i<=12;i++){ gm = i; var tmp1=lunar.sTerm(gY, gm*2-2); var tmp2=lunar.sTerm(gY, gm*2-1); sterma[''+this.sa(gm)+''+this.sa(tmp1)+'']=lunar.solarTerm[gm*2-2]; sterma[''+this.sa(gm)+''+this.sa(tmp2)+'']=lunar.solarTerm[gm*2-1]; str+='@'+tmp1+','+tmp2+''; } str = str.substr(1); str = "jieResel["+(j-1900)+"] = \""+str+"\";"; $('body').append(str); } } this.setcalend=function() { can.changemonthbefore(this.Y, this.m, this); var gY = this.Y,gm = this.m,j1=0; this.max=this.marr[gm-1]; if(gY%4==0&&gm==2)this.max=29; this.w = parseFloat(js.now('w',''+gY+'-'+gm+'-01')); var mx = this.max+this.w; var offstaa = $('#calmain_div'+this.mid+'').offset(); $("span[temp='showcaentt5eaee"+this.mid+"']").remove(); //当月24节气名称 var tmp1=lunar.sTerm(gY, gm*2-2); var tmp2=lunar.sTerm(gY, gm*2-1); this.sterma={}; //this.sterma[''+this.sa(gm)+''+this.sa(tmp1)+'']=lunar.solarTerm[gm*2-2]; //this.sterma[''+this.sa(gm)+''+this.sa(tmp2)+'']=lunar.solarTerm[gm*2-1]; this.nobj=null; var xqarr=[0,0,0,0,0,0,0]; var oci = this.w; var savt = ''; for(var i1=1+this.w;i1<=mx; i1++){ xqarr[oci]++; j1++; var col1='',col2='#aaaaaa'; var day = ''+gY+'-'+this.sa(gm)+'-'+this.sa(j1)+''; var lun = lunar.iconv(gY,gm,j1); var s2 = lun[2]; var sn = s2; if(s2=='初一'){ s2 =lun[1]; col2 = '#419900'; } var jie = ''; var jiec = this.getJie(gY,gm,j1,lun[1]+sn); //var jiec1 = this.sterma[''+this.sa(gm)+''+this.sa(j1)+'']; var jiec1 = lun[3]; var jiec2 = this.tsarr[''+this.sa(gm)+''+xqarr[oci]+''+oci+''];//年第几个星期 if(j1==this.nd){ this.nobj=this.obj[i1]; this.obj[i1].style.backgroundColor=can.selbgcolor; this.changetoday(j1); }else{ this.obj[i1].style.backgroundColor=''; } if(jiec!='')jie+=','+jiec+''; //节气 if(jiec1){ if(jiec1!='清明'){ col2='#006699'; } jie+=','+jiec1+''; } if(jiec2){ this.sterma[''+this.sa(gm)+''+this.sa(j1)+'']=jiec2; jie+=','+jiec2+''; } if(jie!=''){ jie = jie.substr(1); s2 = jie; if(col2=='#aaaaaa')col2= '#ff0000'; savt+='|'+gY+'-'+gm+'-'+j1+':'+jie+''; } if(i1%7==0)col1='#ff6600'; if((i1-1)%7==0)col1='#ff6600'; this.obj[i1].innerHTML=this.getSpanAcc(j1,s2,col1,col2,day, i1, false); //是不是休息的 var xiuval = ''; if(jierixiuxi.indexOf(day)>=0)xiuval='休'; if(jierishangban.indexOf(day)>=0)xiuval='班'; if(xiuval!=''){ var coac = '#419900'; if(xiuval=='班')coac='#888888'; var nest = ''+xiuval+''; $(this.obj[i1]).append(nest); } oci++; if(oci==7)oci=0; }; if(!can.fillot){ can.changemonth(this.Y, this.m, this); return; } //填充其余的 var lY = gY,lm = gm-1,lx=0,lxu=0; if(lm==0){ lY = lY-1; lm = 12; } lx = this.marr[lm-1]; if(lY%4==0 && lm==2)lx++;//闰年2月29天 for(var i=this.w;i>=1;i--){ var day = ''+lY+'-'+this.sa(lm)+'-'+this.sa(lx)+''; var lun = lunar.iconv(lY,lm,lx); var s2 = lun[2]; this.obj[i].innerHTML=this.getSpanAcc(lx,s2,'#cccccc','#cccccc', day,i, true); this.obj[i].style.backgroundColor=''; //是不是休息的 var xiuval = ''; if(jierixiuxi.indexOf(day)>=0)xiuval='休'; if(jierishangban.indexOf(day)>=0)xiuval='班'; if(xiuval!=''){ var coac = '#419900'; if(xiuval=='班')coac='#888888'; var nest = ''+xiuval+''; $(this.obj[i]).append(nest); } lx--; } lm = gm+1;lY = gY; if(lm==13){ lY = lY+1; lm = 1; } for(var i=j1+1+this.w;i<=42; i++){ lxu++; var day = ''+lY+'-'+this.sa(lm)+'-'+this.sa(lxu)+''; var lun = lunar.iconv(lY,lm,lxu); var s2 = lun[2]; this.obj[i].innerHTML=this.getSpanAcc(lxu,s2,'#cccccc','#cccccc', day,i, true); this.obj[i].style.backgroundColor=''; //是不是休息的 var xiuval = ''; if(jierixiuxi.indexOf(day)>=0)xiuval='休'; if(jierishangban.indexOf(day)>=0)xiuval='班'; if(xiuval!=''){ var coac = '#419900'; if(xiuval=='班')coac='#888888'; var nest = ''+xiuval+''; $(this.obj[i]).append(nest); } } can.changemonth(this.Y, this.m, this); } this.changetoday=function(d) { var gY = this.Y,gm = this.m; var day = js.now('Y年m月d日 星期W',''+gY+'-'+gm+'-'+d+''); var lun = lunar.iconv(gY, gm, d); //alert(day); $('#leftday').html(this.sa(d)); $('#changedate').html(''+day+''); $('#lunanday').html(''+gY+'年 农历 '+lun[1]+''+lun[2]+''); //什么月 var yue1 = this.showYue(gY,gm); //什么日 var day1 = this.showDay(gY,gm,d); $('#lunanday1').html(''+lun[0]+' '+yue1+'月 '+day1+'日'); var jie = ''; var jiec = this.getJie(gY,gm,d,lun[1]+lun[2]); var jiec1 = this.sterma[''+this.sa(gm)+''+this.sa(d)+'']; if(jiec!='')jie+=','+jiec+''; if(jiec1)jie+=','+jiec1+''; if(jie!=''){ jie = jie.substr(1); }else{jie=' '} this.onclick(gY,gm,d, day, lun, jie); }; this.click=function(o1) { var d = parseFloat($(o1).attr('temp')); var dc = d-this.w; var da = $(this.obj[d]).find('span[dt]:eq(0)').html(); if(!da)return; da = da.split(','); this.nd = parseFloat(da[0]); if(dc<=0){ if(can.boofan)this.fanmonth(-1); return ; } if(dc>this.max){ if(can.boofan)this.fanmonth(1); return; } if(this.nobj!=null)this.nobj.style.backgroundColor=''; this.obj[d].style.backgroundColor=can.selbgcolor; this.nobj = this.obj[d]; this.changetoday(dc); }; this.getSpanAcc=function(s1,s2,col1,col2, day, oi, lbo) { if(s2.indexOf('国际')==0 || s2.indexOf('世界')==0)col2='#419900'; var s = '
'+s1+','+s2+'
'; var sq = can.renderer(day, s, s1,s2,col1,col2, oi,this); if(sq)s = sq; s+= ''+s1+','+day+''; this.dayobj[oi]={day:day,d:s1}; if(!can.overShow && lbo)return ''; return s; }; this.getFistdt = function(){ var d = this.dayobj[1]; return d.day; }; this.getLastdt = function(){ var d = this.dayobj[42]; return d.day; }; this.fanyear = function(oi) { this.Y=this.Y+oi; this.setcalend(); return false; }; this.showjie = function(o,yeas) { var val = o.value; if(val=='')return; this.m = parseFloat(val); this.Y = yeas; this.setcalend(); }; this.fanmonth = function(oi) { oi = parseFloat(oi); this.m = this.m+oi; if(this.m==0){ this.m = 12; this.Y = this.Y-1; } if(this.m==13){ this.m = 1; this.Y = this.Y+1; } this.setcalend(); return false; }; this.nextMonth = function(){ this.fanmonth(1); }; this.lastMonth = function(){ this.fanmonth(-11); }; this.getJie = function(y,m,d,nr) { var s1 = this.sa(m)+this.sa(d),s2 = nr; var a = this.feastarr; var s = ''; if(a[s1]){ var s3 = a[s1]; if(y<1949&&m==10&&d==1)s3=''; if(s3)s+=','+s3+''; } if(a[s2]){ s+=','+a[s2]+''; } if(s!='')s=s.substr(1); return s; }; this.sa = function(s) { s = ''+s+''; if(s.length<=1)s='0'+s+''; return s; }; this.changemonth = function(y1,m1) { this.Y = parseFloat(y1); this.m = parseFloat(m1); this.setcalend(); return false; }; this.setbgcolor = function(oi, col){ if(!col)col=''; this.obj[oi].style.backgroundColor=col; }; this.setMonth = function(mon) { var a = mon.split('-'); this.changemonth(a[0], a[1]); } } $.fn.rockcalendar = function(options){ var defaultVal = { height:400,selbgcolor:'#D3FFF6',month:'', fillot:true,renderer:function(){return ''},align:'left',valign:'top', changemonth:function(){},boofan:true,onclick:function(){},jierixiuxi:'',jierishangban:'',headerbgcolor:'', bordercolor:'', overShow:true, changemonthbefore:function(){} }; var can = $.extend({}, defaultVal, options); var clsa = new calendarclass($(this), can); clsa.init(); return clsa; }; })(jQuery);