39a9f63cbcf3092520a4d1d43319c50a76ec3b61.svn-base 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910
  1. var HuangLi = {};
  2. var calData = new Array();
  3. var currentDate = new Date();
  4. var rows;
  5. var showingToday = true; //显示的是今天
  6. var taskHover_inblock = false;
  7. var taskHover_inhover = false;
  8. var madeRiliDate = new Date();
  9. var record = {
  10. elem_id : "",
  11. nav_date : new Date()
  12. };
  13. var timeSelf = 0; //本地时间
  14. var timeBeijing; //北京时间
  15. function clock(time){
  16. timeSelf = (new Date()).getTime();jprestWork
  17. timeBeijing = time*1000;
  18. }
  19. Number.prototype.toPercent = function(n){
  20. n = n || 0;
  21. return ( Math.floor( this * Math.pow( 10, n + 2 ) ) / Math.pow( 10, n ) ).toFixed( n ) + '%';
  22. }
  23. var calander = {
  24. //initialization the calender
  25. init:function()
  26. {
  27. makeCal.pareData(new Date());
  28. makeCal.showCal(new Date());
  29. //init初始化的功能只需要初始化一次
  30. makeCal.initAction();
  31. makeCal.makeHuangli(currentDate);
  32. //CallData(currentDate);
  33. },
  34. //make the calender of `date`
  35. pareData:function(date)
  36. {
  37. date = makeCal.setTimeZero(date);
  38. madeRiliDate = new Date(date);
  39. //the first of this month
  40. var monthFirstD = makeCal.getMonthFirst(date);
  41. //the first in the table
  42. var tableFirstD = makeCal.getWeekFirst(monthFirstD);
  43. //the first of next month
  44. var nextMonthFirstD = makeCal.addTime(monthFirstD, 1, "month");
  45. //last day of this month
  46. var monthLastD = makeCal.addTime(nextMonthFirstD, -1, "day");
  47. //get the rows
  48. rows = Math.ceil((nextMonthFirstD.valueOf()-tableFirstD.valueOf())/(60*60*24*1000*7));
  49. //loop to calculate the data
  50. var indexDay = new Date(tableFirstD);
  51. var nowDay = makeCal.setTimeZero(new Date());
  52. makeCal.fillCalData(indexDay, monthFirstD, monthLastD, nowDay);
  53. },
  54. fillCalData:function(indexDay, monthFirstD, monthLastD, nowDay){
  55. calData = [];
  56. for ( var i = 0; i < rows; i++){
  57. var week = [];
  58. for ( var j = 0; j < 7; j++){
  59. var aDay = makeCal.createDay();
  60. //set mode
  61. if ( indexDay.getTime() < monthFirstD.getTime()){
  62. aDay.before = true;
  63. //aDay=null;
  64. }
  65. else if ( indexDay.getTime() > monthLastD.getTime()){
  66. aDay.after = true;
  67. //aDay=null;
  68. }
  69. //set year month date
  70. aDay.year = indexDay.getFullYear();
  71. aDay.month = indexDay.getMonth();
  72. aDay.date = indexDay.getDate();
  73. if ( indexDay.getTime() == nowDay.getTime()){
  74. aDay.today = true;
  75. }
  76. if ( j == 0 || j == 6){
  77. aDay.weekend = true;
  78. }
  79. aDay.rows = rows;
  80. aDay.inrow = i+1;
  81. aDay.value = indexDay;
  82. aDay.china = templates.lunar_Info(aDay.value);
  83. //临时调整节气
  84. //var date_detail = aDay.value.getFullYear()+"-"+(aDay.value.getMonth()+1)+"-"+aDay.value.getDate();
  85. week.push(aDay);
  86. indexDay = makeCal.addTime(indexDay, 1, "day");
  87. }
  88. calData.push(week);
  89. }
  90. },
  91. showCal:function(selectDate){
  92. var is5Row = (rows<=5?true:false);
  93. if ( typeof(selectDate) == "undefined" ){
  94. selectDate = date = makeCal.setTimeZero(new Date());
  95. }
  96. selectDate = makeCal.setTimeZero(selectDate);
  97. var cldCache = null;//月份为转换后的月
  98. $('#month_num').text(selectDate.getMonth()+1);
  99. $('#year_num').text(selectDate.getFullYear());
  100. var table = "<table> \
  101. <thead class='tablehead'> \
  102. <tr> \
  103. <td class='thead' style='color:#bc5016;'>日</td> \
  104. <td class='thead'>一</td> \
  105. <td class='thead'>二</td> \
  106. <td class='thead'>三</td> \
  107. <td class='thead'>四</td> \
  108. <td class='thead'>五</td> \
  109. <td class='thead' style='color:#bc5016;'>六</td> \
  110. </tr> \
  111. </thead> \
  112. </table> \
  113. <table id='cont' style='height:100%;'> \
  114. <tbody>";
  115. var index=40;
  116. var ind=0;
  117. for ( var i = 0; i < rows; i++)
  118. {
  119. var aWeek = "<tr style='height:"+(1/rows).toPercent()+";'>";
  120. for ( var j = 0; j < 7; j++)
  121. {
  122. if(calData[i][j]!=null){
  123. var tdclass = "";
  124. if ( calData[i][j].today == true ){
  125. tdclass = 'today';
  126. }
  127. var numtype = "number";
  128. var isClickBlock = "";
  129. if (calData[i][j].today == false && calData[i][j].value.getTime() == selectDate.getTime()){
  130. isClickBlock = " block_click";
  131. }
  132. var aDay = "";
  133. if(is5Row)
  134. aDay = "<td i="+i+" j="+j+" style='height:"+(1/rows).toPercent()+";' class='block block5 "+tdclass+isClickBlock+"'>";
  135. else
  136. aDay = "<td i="+i+" j="+j+" style='height:"+(1/rows).toPercent()+";' class='block "+tdclass+isClickBlock+"'>";
  137. aDay += "<a class='block_content'" +
  138. "data='"+(calData[i][j].value.format('MMdd'))+ "' href=\"javascript:;\">";
  139. var dateDay = calData[i][j].date;
  140. var restOrWork = '';
  141. var year= calData[i][j].value.getFullYear();
  142. var md= calData[i][j].value.format('MMdd');
  143. if((worktime.years.join('').indexOf(year)!=-1)&&(worktime['y'+year].workRestStr.indexOf('d'+md)!=-1)){
  144. restOrWork = worktime['y'+year]['d'+md].w;
  145. }else{
  146. restOrWork='';
  147. }
  148. if(restOrWork!=''){
  149. if(restOrWork=="班"){
  150. aDay += "<div class='jprestWork jprestWorkw'>"+restOrWork+"</div>";
  151. }else{
  152. aDay += "<div class='jprestWork'>"+restOrWork+"</div>";
  153. }
  154. }else{
  155. //aDay += "<div class='jprestWork'>&nbsp;</div>";
  156. }
  157. aDay += "<div style='display:inline-block;position:absolute;" +
  158. "top:50%;width:100%;margin-top:-22px;left:0;'>";
  159. if(calData[i][j].weekend&&!(calData[i][j].after||calData[i][j].before)){
  160. aDay += "<div class='"+numtype+"' style='color:#ff4e00;'>"+dateDay+"</div>";
  161. }else{
  162. if(calData[i][j].after||calData[i][j].before){
  163. aDay += "<div class='"+numtype+"' style='color:#c3c3c3;'>"+dateDay+"</div>";
  164. }else{
  165. aDay += "<div class='"+numtype+"'>"+dateDay+"</div>";
  166. }
  167. }
  168. //var dataStr= "";
  169. cldCache = cacheMgr.getCld(year,calData[i][j].value.getMonth());
  170. var dayStr="";
  171. var color = "style='color:#BC5016;'";
  172. var title = "";
  173. if(cldCache[dateDay-1].lunarFestival!=undefined&&cldCache[dateDay-1].lunarFestival!=''){
  174. dayStr=cldCache[dateDay-1].lunarFestival;
  175. }else if(cldCache[dateDay-1].solarFestival!=undefined&&cldCache[dateDay-1].solarFestival!=''){
  176. dayStr=cldCache[dateDay-1].solarFestival;
  177. }else if(cldCache[dateDay-1].solarTerms!=undefined&&cldCache[dateDay-1].solarTerms!=''){
  178. dayStr=cldCache[dateDay-1].solarTerms;
  179. }else{
  180. dayStr=calData[i][j].china.l_day;
  181. color="";
  182. title="";
  183. }
  184. if(color!="") {
  185. var dayTitle = "";
  186. if(cldCache[dateDay-1].lunarFestival!=undefined&&cldCache[dateDay-1].lunarFestival!=''){
  187. dayTitle=cldCache[dateDay-1].lunarFestival;
  188. title += dayTitle;
  189. }
  190. if(cldCache[dateDay-1].solarFestival!=undefined&&cldCache[dateDay-1].solarFestival!=''){
  191. dayTitle=cldCache[dateDay-1].solarFestival;
  192. if(title.trim()!="") {
  193. title+="| ";
  194. }
  195. title += dayTitle;
  196. }
  197. if(cldCache[dateDay-1].solarTerms!=undefined&&cldCache[dateDay-1].solarTerms!=''){
  198. dayTitle=cldCache[dateDay-1].solarTerms;
  199. if(title.trim()!="") {
  200. title+="| ";
  201. }
  202. title += dayTitle;
  203. }
  204. }
  205. aDay += "<div class='lnumber' title='"+title+"' "+color+">"+dayStr+"</div>";
  206. aDay += "</div><div class='tdhover'></div></a></td>";
  207. aWeek += aDay;
  208. }else{
  209. aWeek+="<td></td>";
  210. }
  211. }
  212. aWeek += "</tr>";
  213. table += aWeek;
  214. }
  215. table += "</tbody></table>";
  216. $('#mainCal').empty();
  217. $('#mainCal').append(table);
  218. makeCal.makeAction();
  219. //加载当月的数据
  220. // loadMonthEvent(selectDate);
  221. changeStyle();
  222. },
  223. //init初始化的功能只需要初始化一次
  224. initAction:function()
  225. {
  226. $('#next_button_a').bind('click', function(e){
  227. var month = currentDate.getMonth();
  228. var year = currentDate.getFullYear();
  229. var real_show_month = madeRiliDate.getMonth();
  230. month = real_show_month;
  231. month++;
  232. if ( month > 11 )
  233. {
  234. month = 0;
  235. year++;
  236. }
  237. var currentMonth = real_show_month;
  238. currentDate = makeCal.addTime(currentDate, 1, "month");
  239. if ( currentDate.getMonth() != (currentMonth+1)%12 )
  240. {
  241. currentDate.setDate(1);
  242. currentDate.setMonth(currentMonth+1);
  243. }
  244. $('#year_num').text(year);
  245. $('#month_num').text(month+1);
  246. makeCal.nextMonth(currentDate);
  247. });
  248. $('#prev_button_a').bind('click', function(e){
  249. var month = currentDate.getMonth();
  250. var year = currentDate.getFullYear();
  251. var real_show_month = madeRiliDate.getMonth();
  252. month = real_show_month;
  253. month--;
  254. if ( month < 0 )
  255. {
  256. month = 11;
  257. year--;
  258. }
  259. var currentMonth = real_show_month;
  260. currentDate = makeCal.addTime(currentDate, -1, "month");
  261. if ( currentDate.getMonth() != (currentMonth+11)%12 )
  262. {
  263. currentDate.setDate(1);
  264. currentDate.setMonth((currentMonth+11)%12);
  265. }
  266. $('#year_num').text(year);
  267. $('#month_num').text(month+1);
  268. makeCal.prevMonth(currentDate);
  269. });
  270. $('#today_button').unbind();
  271. $('#today_button').bind('click', function(e){
  272. makeCal.showToday();
  273. $("#today_button").css("display","none");
  274. //currentDate=new Date();
  275. //call to refresh center block data
  276. //date format : 20120101 , 8 digital
  277. //var todayDate = new Date(currentDate.getFullYear(), currentDate.getMonth(),currentDate.getDate(),0,0,0);
  278. //refreshCenterDataOfDate(todayDate);
  279. $("#btns #today").removeClass("botton_today1");
  280. });
  281. //$('#top_bar_time').text(makeCal.getServerTime());
  282. $('#year_num').text(currentDate.getFullYear());
  283. $('#month_num').text(currentDate.getMonth()+1);
  284. /*setInterval(function(){
  285. var time = makeCal.getServerTime();
  286. $('#top_bar_time').text(makeCal.getServerTime());
  287. if ( time == '00:00:00' && showingToday )
  288. {
  289. var d = new Date();
  290. makeCal.pareData(d);
  291. makeCal.showCal(d);
  292. $('#year_num').text(d.getFullYear());
  293. $('#month_num').text(d.getMonth()+1);
  294. }
  295. }, 1000);*/
  296. var indiv = false;
  297. var inhuangli = false;
  298. $('#huangliDiv').bind('mouseover', function(e){
  299. inhuangli = true;
  300. setTimeout(function(){
  301. if ( indiv || inhuangli )
  302. $('#huangliDiv').css({'display': 'block'});
  303. }, 500);
  304. });
  305. $('#huangliDiv').bind('mouseout', function(e){
  306. inhuangli = false;
  307. if ( indiv == false )
  308. {
  309. setTimeout(function(){
  310. if ( inhuangli == false && indiv == false )
  311. $('#huangliDiv').css({'display': 'none'});
  312. }, 500);
  313. }
  314. });
  315. /*$(".today").unbind();
  316. $(".calendar .block").unbind();
  317. $(".calendar .block").on("click",function(){
  318. if(!$(this).hasClass('today')){
  319. $("#today_button").css("display","block");
  320. }else{
  321. $("#today_button").css("display","none");
  322. }
  323. });*/
  324. },
  325. //make初始化的功能每次重绘table后就要初始化一次
  326. makeAction:function(){
  327. // $(".tdhover").on("click",function(){
  328. // $(this).closest(".block").click();
  329. //
  330. // });
  331. $('.tdhover').unbind();
  332. $('.tdhover').bind('click', function(e){
  333. var that= $(this).closest(".block");
  334. $(".block").removeClass("block_click");
  335. that.addClass("block_click");
  336. var real_show_month = madeRiliDate.getMonth();
  337. ele = $(e.target);
  338. while(1)
  339. {
  340. if ( ele.hasClass('block'))
  341. {
  342. break;
  343. }
  344. else
  345. {
  346. ele = ele.parent();
  347. }
  348. }
  349. click_date = calData[ele.attr('i')][ele.attr('j')].value;
  350. //click on a prevDate
  351. if ( click_date.getMonth() == (real_show_month + 11)%12)
  352. {
  353. makeCal.prevMonth(click_date);
  354. $("#today_button").css("display","block");
  355. return;
  356. }
  357. else if ( click_date.getMonth() == (real_show_month+1)%12 )
  358. {
  359. makeCal.nextMonth(click_date);
  360. $("#today_button").css("display","block");
  361. return;
  362. }
  363. if ( ele.hasClass('today') == false )
  364. {
  365. }
  366. var nowTime = new Date();
  367. calData[ele.attr('i')][ele.attr('j')].value.setHours(nowTime.getHours(),nowTime.getMinutes(),nowTime.getSeconds());
  368. makeCal.makeHuangli(calData[ele.attr('i')][ele.attr('j')].value);
  369. //call to refresh center block data
  370. //date format : 20120101 , 8 digital
  371. //refreshCenterDataOfDate(calData[ele.attr('i')][ele.attr('j')].value);
  372. //
  373. if(!that.hasClass('today')){
  374. $("#today_button").css("display","block");
  375. }else{
  376. $("#today_button").css("display","none");
  377. }
  378. if(click_date.getMonth()!=new Date().getMonth()){
  379. $("#btns #today").addClass("botton_today1");
  380. }
  381. });
  382. },
  383. //生成黄历div
  384. makeHuangli:function(date)
  385. {
  386. currentDate=date;
  387. date = makeCal.setTimeZero(date);
  388. var datestr = date.getDate();
  389. lunar = templates.lunar_Info_detail(date, showYJ);
  390. $('#right_big_date').text(datestr);
  391. var gregorianDayStr = date.getFullYear()+"年"+(date.getMonth()+1)+"月"+date.getDate()+"日";
  392. var weekDayStr="";
  393. switch (date.getDay())
  394. {
  395. case 1:
  396. weekDayStr = '星期一';
  397. break;
  398. case 2:
  399. weekDayStr = '星期二';
  400. break;
  401. case 3:
  402. weekDayStr = '星期三';
  403. break;
  404. case 4:
  405. weekDayStr = '星期四';
  406. break;
  407. case 5:
  408. weekDayStr = '星期五';
  409. break;
  410. case 6:
  411. weekDayStr = '星期六';
  412. break;
  413. case 0:
  414. weekDayStr = '星期日';
  415. break;
  416. }
  417. $('#gregorianDayStr').text(gregorianDayStr);
  418. $('#weekDayStr').text(weekDayStr);
  419. $('#popDateStr').text(getFullDateStr(date));
  420. $('#popChineseStr').text((lunar.lunar).substring(2));
  421. var nowDate = makeCal.setTimeZero(new Date());
  422. var nowMiliSecond = nowDate.getTime();
  423. var targetMiliSecond = date.getTime();
  424. var passedTime = Math.ceil((targetMiliSecond - nowMiliSecond)/86400000);
  425. var dayafterorbeforeStr = "";
  426. if ( nowDate.getDate() == date.getDate() )
  427. {
  428. dayafterorbeforeStr = '今天';
  429. }
  430. if ( passedTime < 0 )
  431. {
  432. dayafterorbeforeStr = (0-passedTime)+"天前";
  433. }
  434. else if ( passedTime > 0 )
  435. {
  436. dayafterorbeforeStr = passedTime+"天后";
  437. }
  438. $('#dayafterorbefore').text(dayafterorbeforeStr);
  439. $('#chinaDay').text((lunar.lunar).substring(2));
  440. $('#china_Dt').text((lunar.lunar).substring(2));
  441. //1.23日春节前显示为兔年
  442. if(date.getFullYear()==2012 && (date.getMonth()==0 && date.getDate()<23)){
  443. lunar.y_Info=lunar.y_Info.replace("龙","兔");
  444. }
  445. //2013 1 1~3013 2 9显示为龙年
  446. if(date.getFullYear()==2013 && (date.getMonth()==0 ||(date.getMonth()==1 && date.getDate()<10))){
  447. lunar.y_Info=lunar.y_Info.replace("蛇","龙");
  448. }
  449. info = lunar.y_Info;
  450. var yInfo = info.split(" ");
  451. $('#chinaDay2').text(yInfo[0]);
  452. $('#chinaDay3').text(yInfo[1]);
  453. var aDate=yInfo[0].replace(/[&\|\\\*^%$#@【】年\-]/g,"");
  454. //console.log(aDate);
  455. $('#china_Dt').prepend(aDate+"年&nbsp;");
  456. /*
  457. *由于黄历“宜”,“忌”数据加载有延迟,将其封装作为获取宜忌数据的回调方法
  458. */
  459. function showYJ(lunar){
  460. Y = lunar.huangliY;
  461. $('#ylist').empty();
  462. if(Y.length>0){
  463. Ys = Y.split('.');
  464. for ( var key in Ys )
  465. {
  466. $('#ylist').append(Ys[key]+' ');
  467. }
  468. }else{
  469. $('#ylist').append('无');
  470. }
  471. J = lunar.huangliJ;
  472. $('#jlist').empty();
  473. if(J.length>0){
  474. Js = J.split('.');
  475. $('#jlist').empty();
  476. for ( var key in Js )
  477. {
  478. $('#jlist').append(Js[key]+' ');
  479. }
  480. }else{
  481. $('#jlist').append('无');
  482. }
  483. }
  484. //add by wuzhq
  485. calendarHandler.setSelectedDate(date);
  486. //设置"年、月"下拉框的值
  487. setYMVforSelect(date);
  488. },
  489. makeHuangliForCalFull:function(date){
  490. date = makeCal.setTimeZero(date);
  491. var lunar = templates.lunar_Info_detail(date,undefined);
  492. var gregorianDayStr = date.getFullYear()+"年"+(date.getMonth()+1)+"月 ";
  493. switch (date.getDay())
  494. {
  495. case 1:
  496. gregorianDayStr += '星期一';
  497. break;
  498. case 2:
  499. gregorianDayStr += '星期二';
  500. break;
  501. case 3:
  502. gregorianDayStr += '星期三';
  503. break;
  504. case 4:
  505. gregorianDayStr += '星期四';
  506. break;
  507. case 5:
  508. gregorianDayStr += '星期五';
  509. break;
  510. case 6:
  511. gregorianDayStr += '星期六';
  512. break;
  513. case 0:
  514. gregorianDayStr += '星期日';
  515. break;
  516. }
  517. lunar.solar=gregorianDayStr;
  518. //1.23日春节前显示为兔年
  519. if(date.getFullYear()==2012 && (date.getMonth()==0 && date.getDate()<23)){
  520. lunar.y_Info=lunar.y_Info.replace("龙","兔");
  521. }
  522. //2013 1 1~3013 2 9显示为龙年
  523. if(date.getFullYear()==2013 && (date.getMonth()==0 ||(date.getMonth()==1 && date.getDate()<10))){
  524. lunar.y_Info=lunar.y_Info.replace("蛇","龙");
  525. }
  526. return lunar;
  527. },
  528. //get the first date in the week where `date` in
  529. getWeekFirst:function(date){
  530. var day = date.getDay();
  531. //if ( day == 0 )
  532. //{
  533. // day = 7;
  534. //}
  535. return makeCal.addTime(date, 0-day, "day");
  536. },
  537. //get the first date in the month where `date` in
  538. getMonthFirst:function(date){
  539. ndate = new Date(date);
  540. ndate.setDate(1);
  541. return ndate;
  542. },
  543. //add `inc` time which `mode` said on `date`
  544. addTime:function(date, inc, mode){
  545. ndate = new Date(date);
  546. switch(mode)
  547. {
  548. case "day":
  549. ndate.setDate(date.getDate()+inc);
  550. break;
  551. case "week":
  552. ndate.setDate(date.getDate()+7*inc);
  553. break;
  554. case "month":
  555. ndate.setMonth(date.getMonth()+inc);
  556. break;
  557. case "year":
  558. ndate.setYear(date.getFullYear()+inc);
  559. break;
  560. case "hour":
  561. ndate.setHours(date.getHours()+inc);
  562. break;
  563. case "minute":
  564. ndate.setMinutes(date.getMinutes()+inc);
  565. break;
  566. default:
  567. return ndate;
  568. }
  569. return ndate;
  570. },
  571. //set the time of date zero
  572. setTimeZero:function(date){
  573. ndate = new Date(date);
  574. ndate.setHours(0);
  575. ndate.setMinutes(0);
  576. ndate.setSeconds(0);
  577. ndate.setMilliseconds(0);
  578. return ndate;
  579. },
  580. //the day object
  581. createDay:function(){
  582. obj = new Object();
  583. obj.year = 0;
  584. obj.month = 0;
  585. obj.date = 0;
  586. obj.day = 0;
  587. obj.before = false;
  588. obj.after = false;
  589. obj.weekend = false;
  590. obj.china = null;
  591. obj.rows = 0;
  592. obj.inrow = 0;
  593. obj.today = false;
  594. obj.value = null;
  595. obj.hasWork = false;
  596. return obj;
  597. },
  598. //下一个月
  599. nextMonth:function(clickDate){
  600. makeCal.pareData(clickDate);
  601. makeCal.showCal(clickDate);
  602. showingToday = false;
  603. makeCal.makeHuangli(clickDate);
  604. },
  605. //上一个月
  606. prevMonth:function(clickDate){
  607. makeCal.pareData(clickDate);
  608. makeCal.showCal(clickDate);
  609. showingToday = false;
  610. makeCal.makeHuangli(clickDate);
  611. },
  612. //显示今天
  613. showToday:function(){
  614. currentDate = new Date();
  615. makeCal.pareData(currentDate);
  616. makeCal.showCal(new Date());
  617. $('#year_num').text(currentDate.getFullYear());
  618. $('#month_num').text(currentDate.getMonth()+1);
  619. showingToday = true;
  620. makeCal.makeHuangli(currentDate);
  621. },
  622. //显示指定时间的日历
  623. showSomeMonth:function(currentDate){
  624. //currentDate = currentDate;
  625. makeCal.pareData(currentDate);
  626. makeCal.showCal(currentDate);
  627. $('#year_num').text(currentDate.getFullYear());
  628. $('#month_num').text(currentDate.getMonth()+1);
  629. showingToday = true;
  630. makeCal.makeHuangli(currentDate);
  631. }
  632. };
  633. function StringBuffer(){
  634. this._strings = new Array();
  635. };
  636. StringBuffer.prototype.append = function(str){
  637. this._strings.push(str);
  638. return this;
  639. };
  640. StringBuffer.prototype.toString = function(){
  641. var str = arguments.length == 0 ? '' : arguments[0];
  642. return this._strings.join(str);
  643. };
  644. var templates = {
  645. month_day : function(date){
  646. var d = date || new Date();
  647. return d.getDate();
  648. },
  649. lunar_Info : function(date){
  650. var cld = cacheMgr.getCld(date.getFullYear(), date.getMonth());
  651. var day = date.getDate();
  652. var cld_day = cld[day - 1];
  653. var lunar_detail = {
  654. l_day : "",
  655. l_month : "",
  656. l_day_full:""
  657. };
  658. lunar_detail.l_day = cDay(cld_day.lDay);
  659. lunar_detail.l_month = cld_day.lMonth;
  660. lunar_detail.color = "";
  661. return lunar_detail;
  662. },
  663. lunar_Info_detail : function(date, callback){
  664. var cld = cacheMgr.getCld(date.getFullYear(), date.getMonth());
  665. //var year = date.getFullYear();
  666. var day = date.getDate();
  667. var cld_day = cld[day - 1];
  668. //var festival=[];
  669. var info = {
  670. lunar:"",
  671. y_Info:"",
  672. huangliY:"无",
  673. huangliJ:"无"
  674. };
  675. info.lunar = '农历' + (cld_day.isLeap ? '闰 ' : '')+templates.getChinaNum(cld_day.lMonth)+"月"+ cDay(cld_day.lDay);
  676. info.y_Info = cld_day.cYear + '年【' +this.lunar_year(date) +"】 "+ cld_day.cMonth + '月' + cld_day.cDay + '日';
  677. try{
  678. var cM= cld_day.cMnumber;
  679. var cD= cld_day.cDnumber;
  680. var month = (cM-2)%12;
  681. var jianxing = (cD-month)%12;
  682. var jiazi = cD%60;
  683. if(jianxing.toString().length==1)
  684. {
  685. jianxing="0"+jianxing;
  686. }
  687. if(jiazi.toString().length==1)
  688. {
  689. jiazi="0"+jiazi;
  690. }
  691. var YJArray = _lunarJson[jianxing+""+jiazi];
  692. info.huangliY = YJArray.Y;
  693. info.huangliJ = YJArray.J;
  694. if(callback){
  695. callback(info);
  696. }
  697. } catch (e) {
  698. }
  699. return info;
  700. },
  701. lunar_year : function(date){
  702. var l_year = Animals[(date.getFullYear() - 4) % 12] + '年';
  703. return l_year;
  704. },
  705. getChinaNum :function(Num) {
  706. var monthEn='';
  707. switch(Num){
  708. case 1 : monthEn = "一";break;
  709. case 2 : monthEn = "二";break;
  710. case 3 : monthEn = "三";break;
  711. case 4 : monthEn = "四";break;
  712. case 5 : monthEn = "五";break;
  713. case 6 : monthEn = "六";break;
  714. case 7 : monthEn = "七";break;
  715. case 8 : monthEn = "八";break;
  716. case 9 : monthEn = "九";break;
  717. case 10 : monthEn = "十";break;
  718. case 11 : monthEn = "十一";break;
  719. case 12 : monthEn = "腊";break;
  720. }
  721. return monthEn;
  722. },
  723. init_sel_festival : function(){
  724. //var festival_m = festival_main;
  725. if(festival_main)
  726. {
  727. var str = new StringBuffer();
  728. str.append('<div id="festival_sel_body">');
  729. for(var i in festival_main){
  730. str.append('<div date="'+i).append('">').append(festival_main[i]+'</div>');
  731. }
  732. str.append('</div>');
  733. }
  734. //$("#festival_sel_div").html(str.toString());
  735. $("#festival_sel_body>div").each(function(){
  736. $(this).click(function(){
  737. var y = $(this).attr("date").split("_");
  738. record.nav_date.setFullYear(y[0]);
  739. record.nav_date.setMonth(Number(y[1])-1);
  740. generic_cal(record.nav_date,record.elem_id);
  741. $("#festival_sel_div").hide();
  742. });
  743. $(this).hover(function(){
  744. $(this).addClass("year_bg");
  745. },
  746. function(){
  747. $(this).removeClass("year_bg");
  748. });
  749. });
  750. },
  751. init_sel_year : function(){
  752. var str = new StringBuffer();
  753. str.append('<div id="sel_body">');
  754. for(var i=1900;i<2050;i++)
  755. {
  756. str.append('<div>').append(i).append('</div>');
  757. }
  758. str.append('</div>');
  759. // 设置日期选择的初始位置
  760. //var scroll_top = record.nav_date.getFullYear()-1900;
  761. $("#open_sel_div").html(str.toString());
  762. $("#sel_body>div").each(function(){
  763. $(this).click(function(){
  764. var y = $(this).html();
  765. record.nav_date.setFullYear(y);
  766. generic_cal(record.nav_date,record.elem_id);
  767. $("#open_sel_div").hide();
  768. });
  769. $(this).hover(function(){
  770. $(this).addClass("year_bg");
  771. },
  772. function(){
  773. $(this).removeClass("year_bg");
  774. });
  775. });
  776. },
  777. mousedown_hide_ele : function(id){
  778. $(document).bind("mousedown."+id, function(r) {
  779. var p = r.target;
  780. var q = document.getElementById(id);
  781. while (true)
  782. {
  783. if (p == q)
  784. {
  785. return true;
  786. }
  787. else
  788. {
  789. if (p == document)
  790. {
  791. $(document).unbind("mousedown."+id);
  792. $("#"+id).hide();
  793. return false;
  794. }
  795. else
  796. {
  797. p = $(p).parent()[0];
  798. }
  799. }
  800. }
  801. });
  802. }
  803. };
  804. var cacheMgr = {
  805. cldCache : {}, // 注意!这里存的是calendarObj.js中定义的calendar对象,不是数据文件载入的cldObj
  806. getCld : function(year, month) {
  807. var key = getMonthKey(year, month);
  808. var cld = this.cldCache[key];
  809. if (typeof cld == 'undefined')
  810. {
  811. cld = new calendar(year, month);
  812. this.cldCache[key] = cld;
  813. }
  814. return cld;
  815. }
  816. };
  817. function getRelativePath(sRelative) {// shawl.qiu code, return string
  818. var sUrl = document.URL;
  819. sUrl = sUrl.replace(/^.*?\:\/\/[^\/]+/, "").replace(/[^\/]+$/, "");
  820. if (!sRelative) { return sUrl; }
  821. if (!/\/$/.test(sUrl)) { sUrl += "/"; }
  822. if (/^\.\.\//.test(sRelative)) {
  823. var Re = new RegExp("^\\.\\.\\/"), iCount = 0;
  824. while (Re.exec(sRelative) != null) {
  825. sRelative = sRelative.replace(Re, "");
  826. iCount++;
  827. }
  828. for (var i = 0; i < iCount; i++) { sUrl = sUrl.replace(/[^\/]+\/$/, ""); }
  829. if (sUrl == "") return "/";
  830. return sUrl + sRelative;
  831. }
  832. sRelative = sRelative.replace(/^\.\//, "");
  833. return sUrl + sRelative;
  834. } // end function fRelativePath(sRelative)
  835. function getMonthKey(year, month)
  836. { // 传入的month为0-11的数值
  837. return year.toString() + (month + 1).toString().leftpad(2); // 返回yyyyMM格式的字符串
  838. }
  839. String.prototype.leftpad = function(len, str)
  840. {
  841. if (!str)
  842. {
  843. str = '0';
  844. }
  845. var s = '';
  846. for (var i = 0; i < len - this.length; i++)
  847. {
  848. s += str;
  849. }
  850. return s + this;
  851. };
  852. window.makeCal = calander;
  853. function getMonthDateStr(date)
  854. {
  855. month = date.getMonth()+1;
  856. day = date.getDate();
  857. if ( month < 10 )
  858. {
  859. month = "0"+month;
  860. }
  861. if ( day < 10 )
  862. {
  863. day = "0" + day;
  864. }
  865. return month+""+day;
  866. }
  867. function getFullDateStr(date)
  868. {
  869. month = date.getMonth()+1;
  870. day = date.getDate();
  871. year = date.getFullYear();
  872. return year+"-"+month+"-"+day;
  873. }