MonthView.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  1. MWF.xApplication.Meeting.MonthView = new Class({
  2. Extends: MWF.widget.Common,
  3. Implements: [Options, Events],
  4. options: {
  5. "style": "default"
  6. },
  7. initialize: function(node, app, options){
  8. this.setOptions(options);
  9. this.path = "/x_component_Meeting/$MonthView/";
  10. this.cssPath = "/x_component_Meeting/$MonthView/"+this.options.style+"/css.wcss";
  11. this._loadCss();
  12. this.app = app;
  13. this.container = $(node);
  14. this.load();
  15. },
  16. load: function(){
  17. this.node = new Element("div", {"styles": this.css.node}).inject(this.container);
  18. this.resetNodeSize();
  19. this.app.addEvent("resize", this.resetNodeSize.bind(this));
  20. this.loadCalendar();
  21. },
  22. resetNodeSize: function(){
  23. var size = this.container.getSize();
  24. if (this.app.meetingConfig.hideMenu=="static"){
  25. var y = size.y-120;
  26. this.node.setStyle("height", ""+y+"px");
  27. this.node.setStyle("margin-top", "60px");
  28. }else{
  29. var y = size.y-20;
  30. this.node.setStyle("height", ""+y+"px");
  31. }
  32. },
  33. loadCalendar: function(){
  34. this.calendar = new MWF.xApplication.Meeting.MonthView.Calendar(this);
  35. },
  36. hide: function(){
  37. var fx = new Fx.Morph(this.node, {
  38. "duration": "300",
  39. "transition": Fx.Transitions.Expo.easeOut
  40. });
  41. if (this.currentMeetingDocument) this.currentMeetingDocument.closeDocument();
  42. fx.start({
  43. "opacity": 0
  44. }).chain(function(){
  45. this.node.setStyle("display", "none");
  46. }.bind(this));
  47. },
  48. show: function(){
  49. this.node.setStyles(this.css.node);
  50. var fx = new Fx.Morph(this.node, {
  51. "duration": "800",
  52. "transition": Fx.Transitions.Expo.easeOut
  53. });
  54. this.app.fireAppEvent("resize");
  55. fx.start({
  56. "opacity": 1,
  57. "left": "0px"
  58. }).chain(function(){
  59. this.node.setStyles({
  60. "position": "static",
  61. "width": "auto"
  62. });
  63. }.bind(this));
  64. },
  65. reload: function(){
  66. if (this.calendar) this.calendar.reLoadCalendar();
  67. }
  68. });
  69. MWF.xApplication.Meeting.MonthView.Calendar = new Class({
  70. Implements: [Events],
  71. initialize: function(view){
  72. this.view = view
  73. this.css = this.view.css;
  74. this.container = this.view.node;
  75. this.app = this.view.app;
  76. this.date = new Date();
  77. this.today = new Date();
  78. this.days = {};
  79. this.load();
  80. },
  81. load: function(){
  82. this.titleNode = new Element("div", {"styles": this.css.calendarTitleNode}).inject(this.container);
  83. this.bodyNode = new Element("div", {"styles": this.css.calendarBodyNode}).inject(this.container);
  84. this.setTitleNode();
  85. this.setBodyNode();
  86. this.resetBodySize();
  87. this.app.addEvent("resize", this.resetBodySize.bind(this));
  88. },
  89. resetBodySize: function(){
  90. var size = this.container.getSize();
  91. var titleSize = this.titleNode.getSize();
  92. var y = size.y-titleSize.y;
  93. this.bodyNode.setStyle("height", ""+y+"px");
  94. var tdy = (y-30)/6;
  95. tdy = tdy-34;
  96. var tds = this.calendarTable.getElements("td");
  97. tds.each(function(td){
  98. var yy = tdy;
  99. var node = td.getLast("div");
  100. if (node.childNodes.length>=4){
  101. if (yy<92) yy = 69;
  102. }
  103. node.setStyle("height", ""+yy+"px");
  104. }.bind(this));
  105. },
  106. setTitleNode: function(){
  107. this.prevMonthNode = new Element("div", {"styles": this.css.calendarPrevMonthNode}).inject(this.titleNode);
  108. var text = this.date.format(this.app.lp.dateFormatMonth);
  109. this.titleTextNode = new Element("div", {"styles": this.css.calendarTitleTextNode, "text": text}).inject(this.titleNode);
  110. this.nextMonthNode = new Element("div", {"styles": this.css.calendarNextMonthNode}).inject(this.titleNode);
  111. this.prevMonthNode.addEvents({
  112. "mouseover": function(){this.prevMonthNode.setStyles(this.css.calendarPrevMonthNode_over);}.bind(this),
  113. "mouseout": function(){this.prevMonthNode.setStyles(this.css.calendarPrevMonthNode);}.bind(this),
  114. "mousedown": function(){this.prevMonthNode.setStyles(this.css.calendarPrevMonthNode_down);}.bind(this),
  115. "mouseup": function(){this.prevMonthNode.setStyles(this.css.calendarPrevMonthNode_over);}.bind(this),
  116. "click": function(){this.changeMonthPrev();}.bind(this)
  117. });
  118. this.nextMonthNode.addEvents({
  119. "mouseover": function(){this.nextMonthNode.setStyles(this.css.calendarNextMonthNode_over);}.bind(this),
  120. "mouseout": function(){this.nextMonthNode.setStyles(this.css.calendarNextMonthNode);}.bind(this),
  121. "mousedown": function(){this.nextMonthNode.setStyles(this.css.calendarNextMonthNode_down);}.bind(this),
  122. "mouseup": function(){this.nextMonthNode.setStyles(this.css.calendarNextMonthNode_over);}.bind(this),
  123. "click": function(){this.changeMonthNext();}.bind(this)
  124. });
  125. this.titleTextNode.addEvents({
  126. "mouseover": function(){this.titleTextNode.setStyles(this.css.calendarTitleTextNode_over);}.bind(this),
  127. "mouseout": function(){this.titleTextNode.setStyles(this.css.calendarTitleTextNode);}.bind(this),
  128. "mousedown": function(){this.titleTextNode.setStyles(this.css.calendarTitleTextNode_down);}.bind(this),
  129. "mouseup": function(){this.titleTextNode.setStyles(this.css.calendarTitleTextNode_over);}.bind(this),
  130. "click": function(){this.changeMonthSelect();}.bind(this)
  131. });
  132. },
  133. changeMonthPrev: function(){
  134. this.date.decrement("month", 1);
  135. var text = this.date.format(this.app.lp.dateFormatMonth);
  136. this.titleTextNode.set("text", text);
  137. this.reLoadCalendar();
  138. },
  139. changeMonthNext: function(){
  140. this.date.increment("month", 1);
  141. var text = this.date.format(this.app.lp.dateFormatMonth);
  142. this.titleTextNode.set("text", text);
  143. this.reLoadCalendar();
  144. },
  145. changeMonthSelect: function(){
  146. if (!this.monthSelector) this.createMonthSelector();
  147. this.monthSelector.show();
  148. },
  149. createMonthSelector: function(){
  150. this.monthSelector = new MWF.xApplication.Meeting.MonthView.Calendar.MonthSelector(this.date, this);
  151. },
  152. changeMonthTo: function(d){
  153. this.date = d;
  154. var text = this.date.format(this.app.lp.dateFormatMonth);
  155. this.titleTextNode.set("text", text);
  156. this.reLoadCalendar();
  157. },
  158. setBodyNode: function(){
  159. var html = "<tr><th>"+this.app.lp.weeks.Mon+"</th><th>"+this.app.lp.weeks.Tues+"</th><th>"+this.app.lp.weeks.Wed+"</th>" +
  160. "<th>"+this.app.lp.weeks.Thur+"</th><th>"+this.app.lp.weeks.Fri+"</th><th>"+this.app.lp.weeks.Sat+"</th><th>"+this.app.lp.weeks.Sun+"</th></tr>";
  161. html += "<tr><td vAlign=\"top\"></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>";
  162. html += "<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>";
  163. html += "<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>";
  164. html += "<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>";
  165. html += "<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>";
  166. html += "<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>";
  167. this.calendarTable = new Element("table", {
  168. "styles": this.css.calendarTable,
  169. "height": "100%",
  170. "border": "0",
  171. "cellPadding": "0",
  172. "cellSpacing": "0",
  173. "html": html
  174. }).inject(this.bodyNode);
  175. this.calendarTableTitleTr = this.calendarTable.getElement("tr");
  176. this.calendarTableTitleTr.setStyles(this.css.calendarTableTitleTr);
  177. var ths = this.calendarTableTitleTr.getElements("th");
  178. ths.setStyles(this.css.calendarTableTh);
  179. //var tds = this.calendarTable.getElements("td");
  180. //tds.setStyles(this.css.calendarTableCell);
  181. this.loadCalendar();
  182. },
  183. reLoadCalendar: function(){
  184. Object.each(this.days, function(day){
  185. day.destroy();
  186. }.bind(this));
  187. this.loadCalendar();
  188. },
  189. loadCalendar: function(){
  190. var date = this.date.clone();
  191. date.set("date", 1);
  192. var week = date.getDay();
  193. var decrementDay = ((week-1)<0) ? 6 : week-1;
  194. date.decrement("day", decrementDay);
  195. var tds = this.calendarTable.getElements("td");
  196. tds.each(function(td){
  197. this.loadDay(td, date);
  198. date.increment();
  199. }.bind(this));
  200. },
  201. loadDay: function(td, date){
  202. var type = "thisMonth";
  203. var m = date.get("month");
  204. var y = date.get("year");
  205. var d = date.get("date");
  206. var mm = this.date.get("month");
  207. var yy = this.date.get("year");
  208. var mmm = this.today.get("month");
  209. var yyy = this.today.get("year");
  210. var ddd = this.today.get("date");
  211. if ((m==mmm) && (y==yyy) && (d==ddd)){
  212. type = "today";
  213. }else if ((m==mm) && (y==yy)){
  214. type = "thisMonth";
  215. }else{
  216. type = "otherMonth";
  217. }
  218. var key = date.format(this.app.lp.dateFormat);
  219. this.days[key] = new MWF.xApplication.Meeting.MonthView.Calendar.Day(td, date, this, type);
  220. }
  221. });
  222. MWF.xApplication.Meeting.MonthView.Calendar.Day = new Class({
  223. Implements: [Events],
  224. initialize: function(td, date, calendar, type){
  225. this.node = td;
  226. this.calendar = calendar;
  227. this.view = this.calendar.view;
  228. this.css = this.calendar.css;
  229. this.app = this.calendar.app;
  230. this.date = date.clone();
  231. this.key = this.date.format(this.app.lp.dateFormat);
  232. this.type = type; //today, otherMonth, thisMonth
  233. this.meetings = [];
  234. this.load();
  235. },
  236. load: function(){
  237. this.day = this.date.getDate();
  238. this.month = this.date.getMonth();
  239. this.year = this.date.getYear();
  240. this.node.setStyles(this.css["calendarTableCell_"+this.type]);
  241. this.titleNode = new Element("div", {"styles": this.css["calendarDayTitle_"+this.type]}).inject(this.node);
  242. this.titleDayNode = new Element("div", {"styles": this.css["calendarDayTitleDay_"+this.type], "text": this.day}).inject(this.titleNode);
  243. if ((new Date()).diff(this.date)>=0){
  244. this.titleNode.set("title", this.app.lp.titleNode);
  245. this.titleNode.addEvent("click", function(){
  246. this.app.addMeeting(this.date);
  247. }.bind(this));
  248. }
  249. this.contentNode = new Element("div", {"styles": this.css.calendarDayContentNode}).inject(this.node);
  250. this.loadMeetings();
  251. },
  252. loadMeetings: function(){
  253. var y = this.date.getFullYear();
  254. var m = this.date.getMonth()+1;
  255. var d = this.date.getDate();
  256. var meetingCount = 0;
  257. this.app.actions.listMeetingDay(y, m, d, function(json){
  258. json.data.each(function(meeting, i){
  259. if (!meeting.myReject){
  260. meetingCount++;
  261. if (meetingCount==4){
  262. this.contentNode.setStyle("height", "100px");
  263. }
  264. if (meetingCount<5) this.meetings.push(new MWF.xApplication.Meeting.MonthView.Calendar.Day.Meeting(this, meeting));
  265. }
  266. }.bind(this));
  267. if (meetingCount==0){
  268. var node = new Element("div", {
  269. "styles": {
  270. "line-height": "40px",
  271. "font-size": "14px",
  272. "color": "#888",
  273. "padding": "0px 10px"
  274. }
  275. }).inject(this.contentNode);
  276. node.set("text", this.app.lp.noMeeting);
  277. }else{
  278. if (meetingCount>3){
  279. this.titleInforNode = new Element("div", {"styles": this.css["calendarDayTitleInfor_"+this.type]}).inject(this.titleNode);
  280. this.titleInforNode.addEvent("click", function(e){
  281. this.app.toDay(this.date);
  282. e.stopPropagation();
  283. }.bind(this));
  284. this.titleInforNode.set("text", meetingCount+this.app.lp.countMeetings);
  285. }
  286. }
  287. }.bind(this));
  288. },
  289. destroy: function(){
  290. this.meetings.each(function(meeting){
  291. meeting.destroy();
  292. }.bind(this));
  293. this.meetings = [];
  294. this.titleNode.destroy();
  295. this.titleNode = null;
  296. this.titleDayNode = null;
  297. this.titleInforNode = null;
  298. delete this.calendar.days[this.key];
  299. this.node.empty();
  300. MWF.release(this);
  301. }
  302. });
  303. MWF.xApplication.Meeting.MonthView.Calendar.Day.Meeting = new Class({
  304. initialize: function(day, data){
  305. this.day = day;
  306. this.css = this.day.css;
  307. this.view = this.day.view;
  308. this.app = this.day.app;
  309. this.container = this.day.contentNode;
  310. this.data = data;
  311. this.load();
  312. },
  313. load: function(){
  314. this.node = new Element("div", {"styles": this.css.calendarDayContentMeetingNode}).inject(this.container);
  315. this.iconNode = new Element("div", {"styles": this.css.calendarDayContentMeetingIconNode}).inject(this.node);
  316. this.timeNode = new Element("div", {"styles": this.css.calendarDayContentMeetingTimeNode}).inject(this.node);
  317. this.textNode = new Element("div", {"styles": this.css.calendarDayContentMeetingTextNode}).inject(this.node);
  318. var timeStr = Date.parse(this.data.startTime).format("%H:%M")
  319. this.timeNode.set("text", timeStr);
  320. this.textNode.set("text", this.data.subject);
  321. this.node.set("title", this.data.subject);
  322. //
  323. //if (this.data.myWaitAccept){
  324. // this.iconNode.setStyle("background", "url(/x_component_Meeting/$MonthView/"+this.app.options.style+"/icon/invite.png) no-repeat center center");
  325. //}
  326. switch (this.data.status){
  327. case "wait":
  328. //nothing
  329. break;
  330. case "processing":
  331. this.node.setStyles({
  332. "border-left": "5px solid #18da14",
  333. "background-color": "#deffdd"
  334. });
  335. break
  336. case "completed":
  337. //add attachment
  338. this.node.setStyles({
  339. "border-left": "5px solid #555",
  340. "background-color": "#F3F3F3"
  341. });
  342. this.textNode.setStyle("color", "#666");
  343. break;
  344. }
  345. if (this.data.myWaitAccept){
  346. this.node.setStyles({
  347. "border-left": "5px solid #ecd034",
  348. "background-color": "#fffade"
  349. });
  350. }
  351. this.node.addEvent("click", function(){this.openMeeting();}.bind(this));
  352. },
  353. openMeeting: function(){
  354. if (!this.document){
  355. if (this.view.currentMeetingDocument) this.view.currentMeetingDocument.closeDocument();
  356. this.document = new MWF.xApplication.Meeting.MonthView.Calendar.Day.Document(this);
  357. this.view.currentMeetingDocument = this.document;
  358. }
  359. },
  360. destroy: function(){
  361. if (this.document){
  362. this.document.closeDocument(function(){
  363. this.node.destroy();
  364. MWF.release(this);
  365. }.bind(this));
  366. }else{
  367. this.node.destroy();
  368. MWF.release(this);
  369. }
  370. }
  371. });
  372. MWF.xApplication.Meeting.MonthView.Calendar.Day.Document = new Class({
  373. Extends: MWF.xApplication.Meeting.MeetingView.Document,
  374. initialize: function(item){
  375. this.item = item;
  376. this.view = this.item.view
  377. this.container = this.view.node;
  378. this.app = this.view.app;
  379. this.path = "/x_component_Meeting/$MeetingView/";
  380. this.cssPath = "/x_component_Meeting/$MeetingView/default/css.wcss";
  381. this._loadCss();
  382. this.app.actions.getMeeting(this.item.data.id, function(json){
  383. this.data = json.data;
  384. this.isEdit = (this.data.applicant == this.app.desktop.session.user.name);
  385. this.load();
  386. }.bind(this));
  387. },
  388. closeDocument: function(callback){
  389. //this.saveDocument(true, true);
  390. if (this.setDescriptionNodeSizeFun) this.app.removeEvent("resize", this.setDescriptionNodeSizeFun);
  391. if (this.setNodeSizeFun) this.app.removeEvent("resize", this.setNodeSizeFun);
  392. var size = this.item.node.getSize();
  393. var position = this.item.node.getPosition(this.app.content);
  394. var fx = new Fx.Morph(this.node, {
  395. "duration": "500",
  396. "transition": Fx.Transitions.Expo.easeOut
  397. });
  398. this.node.empty();
  399. this.view.currentMeetingDocument = null;
  400. fx.start({
  401. "opacity": 0,
  402. "width": ""+ size.x+"px",
  403. "height": ""+ size.y+"px",
  404. "left": ""+ position.x+"px",
  405. "top": ""+ position.y+"px",
  406. }).chain(function(){
  407. this.destroy();
  408. if (callback) callback();
  409. }.bind(this));
  410. },
  411. _loadCss: function(){
  412. var key = encodeURIComponent(this.cssPath);
  413. if (MWF.widget.css[key]){
  414. this.css = MWF.widget.css[key];
  415. }else{
  416. var r = new Request.JSON({
  417. url: this.cssPath,
  418. secure: false,
  419. async: false,
  420. method: "get",
  421. noCache: false,
  422. onSuccess: function(responseJSON, responseText){
  423. this.css = responseJSON;
  424. MWF.widget.css[key] = responseJSON;
  425. }.bind(this),
  426. onError: function(text, error){
  427. alert(error + text);
  428. }
  429. });
  430. r.send();
  431. }
  432. }
  433. });
  434. MWF.xApplication.Meeting.MonthView.Calendar.MonthSelector = new Class({
  435. Implements: [Events],
  436. initialize: function(date, calendar){
  437. this.calendar = calendar;
  438. this.css = this.calendar.css;
  439. this.app = this.calendar.app;
  440. this.date = date;
  441. this.year = this.date.get("year");
  442. this.load();
  443. },
  444. load: function(){
  445. this.monthSelectNode = new Element("div", {"styles": this.css.calendarMonthSelectNode}).inject(this.calendar.container);
  446. this.monthSelectNode.position({
  447. relativeTo: this.calendar.titleTextNode,
  448. position: 'bottomCenter',
  449. edge: 'upperCenter'
  450. });
  451. this.monthSelectNode.addEvent("mousedown", function(e){e.stopPropagation();});
  452. this.monthSelectTitleNode = new Element("div", {"styles": this.css.calendarMonthSelectTitleNode}).inject(this.monthSelectNode);
  453. this.monthSelectPrevYearNode = new Element("div", {"styles": this.css.calendarMonthSelectTitlePrevYearNode}).inject(this.monthSelectTitleNode);
  454. this.monthSelectNextYearNode = new Element("div", {"styles": this.css.calendarMonthSelectTitleNextYearNode}).inject(this.monthSelectTitleNode);
  455. this.monthSelectTextNode = new Element("div", {"styles": this.css.calendarMonthSelectTitleTextNode}).inject(this.monthSelectTitleNode);
  456. this.monthSelectTextNode.set("text", this.year);
  457. var html = "<tr><td></td><td></td><td></td></tr>";
  458. html += "<tr><td></td><td></td><td></td></tr>";
  459. html += "<tr><td></td><td></td><td></td></tr>";
  460. html += "<tr><td></td><td></td><td></td></tr>";
  461. this.monthSelectTable = new Element("table", {
  462. "styles": {"margin-top": "10px"},
  463. "height": "200px",
  464. "width": "90%",
  465. "align": "center",
  466. "border": "0",
  467. "cellPadding": "0",
  468. "cellSpacing": "5",
  469. "html": html
  470. }).inject(this.monthSelectNode);
  471. //this.loadMonth();
  472. this.monthSelectBottomNode = new Element("div", {"styles": this.css.calendarMonthSelectBottomNode, "text": this.app.lp.today}).inject(this.monthSelectNode);
  473. this.setEvent();
  474. },
  475. loadMonth: function(){
  476. this.monthSelectTextNode.set("text", this.year);
  477. var d = new Date();
  478. var todayY = d.get("year");
  479. var todayM = d.get("month");
  480. var thisY = this.date.get("year");
  481. var thisM = this.date.get("month");
  482. var _self = this;
  483. var tds = this.monthSelectTable.getElements("td");
  484. tds.each(function(td, idx){
  485. td.empty();
  486. td.removeEvents("mouseover");
  487. td.removeEvents("mouseout");
  488. td.removeEvents("mousedown");
  489. td.removeEvents("mouseup");
  490. td.removeEvents("click");
  491. var m = idx+1;
  492. td.store("month", m);
  493. td.setStyles(this.css.calendarMonthSelectTdNode);
  494. td.set("text", ""+m+this.app.lp.month);
  495. td.setStyle("background-color", "#FFF");
  496. if ((this.year == thisY) && (idx == thisM)){
  497. td.setStyle("background-color", "#EEE");
  498. }
  499. if ((this.year == todayY) && (idx == todayM)){
  500. td.setStyle("background-color", "#CCC");
  501. }
  502. td.addEvents({
  503. "mouseover": function(){this.setStyles(_self.css.calendarMonthSelectTdNode_over);},
  504. "mouseout": function(){this.setStyles(_self.css.calendarMonthSelectTdNode);},
  505. "mousedown": function(){this.setStyles(_self.css.calendarMonthSelectTdNode_down);},
  506. "mouseup": function(){this.setStyles(_self.css.calendarMonthSelectTdNode_over);},
  507. "click": function(){
  508. _self.selectedMonth(this);
  509. }
  510. });
  511. }.bind(this));
  512. },
  513. setEvent: function(){
  514. this.monthSelectPrevYearNode.addEvent("click", function(){
  515. this.prevYear();
  516. }.bind(this));
  517. this.monthSelectNextYearNode.addEvent("click", function(){
  518. this.nextYear();
  519. }.bind(this));
  520. this.monthSelectBottomNode.addEvent("click", function(){
  521. this.todayMonth();
  522. }.bind(this));
  523. },
  524. prevYear: function(){
  525. debugger;
  526. this.year--;
  527. if (this.year<1900) this.year=1900;
  528. this.monthSelectTextNode.set("text", this.year);
  529. this.loadMonth();
  530. },
  531. nextYear: function(){
  532. this.year++;
  533. //if (this.year<1900) this.year=1900;
  534. this.monthSelectTextNode.set("text", this.year);
  535. this.loadMonth();
  536. },
  537. todayMonth: function(){
  538. var d = new Date();
  539. this.calendar.changeMonthTo(d);
  540. this.hide();
  541. },
  542. selectedMonth: function(td){
  543. var m = td.retrieve("month");
  544. var d = Date.parse(this.year+"/"+m+"/1");
  545. this.calendar.changeMonthTo(d);
  546. this.hide();
  547. },
  548. show: function(){
  549. this.date = this.calendar.date;
  550. this.year = this.date.get("year");
  551. this.loadMonth();
  552. this.monthSelectNode.setStyle("display", "block");
  553. this.hideFun = this.hide.bind(this);
  554. document.body.addEvent("mousedown", this.hideFun);
  555. },
  556. hide: function(){
  557. this.monthSelectNode.setStyle("display", "none");
  558. document.body.removeEvent("mousedown", this.hideFun);
  559. },
  560. destroy: function(){
  561. //this.titleNode.destroy();
  562. //this.titleNode = null;
  563. //this.titleDayNode = null;
  564. //this.titleInforNode = null;
  565. //
  566. //delete this.calendar.days[this.key];
  567. //
  568. //this.node.empty();
  569. //MWF.release(this);
  570. }
  571. });