MWF.require("MWF.xDesktop.UserData", null, false); MWF.require("MWF.xAction.org.express.RestActions", null,false); MWF.xDesktop.requireApp("Meeting", "Actions.RestActions", null, false); MWF.xDesktop.requireApp("Meeting", "MeetingView", null, false); MWF.xApplication.Meeting.options.multitask = false; MWF.xApplication.Meeting.Main = new Class({ Extends: MWF.xApplication.Common.Main, Implements: [Options, Events], options: { "style": "default", "name": "Meeting", "icon": "icon.png", "width": "1000", "height": "600", "isResize": true, "isMax": true, "title": MWF.xApplication.Meeting.LP.title }, onQueryLoad: function(){ this.lp = MWF.xApplication.Meeting.LP; this.menuMode="show"; this.isManager = MWF.AC.isMeetingAdministrator(); if (!this.actions) this.actions = new MWF.xApplication.Meeting.Actions.RestActions(); if (!this.personActions) this.personActions = new MWF.xAction.org.express.RestActions(); }, loadApplication: function(callback) { MWF.UD.getDataJson("meetingConfig", function(json){ this.meetingConfig = json || {}; this.createNode(); if (!this.options.isRefresh) { this.maxSize(function () { this.loadLayout(); }.bind(this)); } else { this.loadLayout(); } if (callback) callback(); }.bind(this)); }, createNode: function(){ this.content.setStyle("overflow", "hidden"); this.node = new Element("div", { "styles": {"width": "100%", "height": "100%", "overflow": "hidden"} }).inject(this.content); }, loadLayout: function(){ this.topMenu = new Element("div", {"styles": this.css.topMenu}).inject(this.node); this.contentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.node); this.bottomMenu = new Element("div", {"styles": this.css.bottomMenu}).inject(this.node); this.loadTopMenus(); this.loadBottomMenus(); this.hideMenu(); this.node.addEvent("contextmenu", function(e){ if (this.menuMode=="show"){ this.hideMenu(); }else{ this.showMenu(); } e.preventDefault(); }.bind(this)); this.setEvent(); if (this.meetingConfig.defaultView){ this[this.meetingConfig.defaultView](); }else{ this.toMyMeeting(); } }, setEvent: function(){ //this.topMenu.addEvent("mouseover", function(){this.showMenu();}.bind(this)); //this.topMenu.addEvent("mouseout", function(){this.hideMenu();}.bind(this)); //this.bottomMenu.addEvent("mouseover", function(){this.showMenu();}.bind(this)); //this.bottomMenu.addEvent("mouseout", function(){this.hideMenu();}.bind(this)); this.contentNode.addEvent("click", function(){this.hideMenu();}.bind(this)); }, loadTopMenus: function(){ this.createTopMenu(this.lp.myMeeting, "myMeeting", "toMyMeeting"); this.createTopMenu(this.lp.month, "month", "toMonth"); this.createTopMenu(this.lp.day, "day", "toDay"); this.createTopMenu(this.lp.list, "list", "toList"); this.createTopMenu(this.lp.room, "room", "toRoom"); }, createTopMenu: function(text, icon, action){ var actionNode = new Element("div", {"styles": this.css.topMenuNode}).inject(this.topMenu); var actionIconNode = new Element("div", {"styles": this.css.topMenuIconNode}).inject(actionNode); actionIconNode.setStyle("background", "url(/x_component_Meeting/$Main/default/icon/"+icon+".png) no-repeat center center"); var actionTextNode = new Element("div", {"styles": this.css.topMenuTextNode, "text": text}).inject(actionNode); var _self = this; actionNode.addEvents({ "mouseover": function(){this.setStyles(_self.css.topMenuNode_over);}, "mouseout": function(){this.setStyles(_self.css.topMenuNode);}, "mousedown": function(){this.setStyles(_self.css.topMenuNode_down);}, "mouseup": function(){this.setStyles(_self.css.topMenuNode_over);}, "click": function(){if (_self[action]) _self[action].apply(_self);} }); return actionNode; }, loadBottomMenus: function(){ this.createBottomMenu(this.lp.addMeeting, "add", "addMeeting"); if (this.isManager) this.createBottomMenu(this.lp.addRoom, "addRoom", "addRoom"); var refreshNode = this.createBottomMenu(this.lp.refresh, "refresh", "refresh"); refreshNode.setStyle("float", "right"); var configNode = this.createBottomMenu(this.lp.config, "setup", "config"); configNode.setStyle("float", "right"); }, createBottomMenu: function(text, icon, action){ var actionNode = new Element("div", {"styles": this.css.bottomMenuNode, "title": text}).inject(this.bottomMenu); //var actionIconNode = new Element("div", {"styles": this.css.bottomMenuIconNode}).inject(actionNode); actionNode.setStyle("background", "url(/x_component_Meeting/$Main/default/icon/"+icon+".png) no-repeat center center"); //var actionTextNode = new Element("div", {"styles": this.css.bottomMenuTextNode, "text": text}).inject(actionNode); var _self = this; actionNode.addEvents({ "mouseover": function(){this.setStyle("background", "url(/x_component_Meeting/$Main/default/icon/"+icon+"_over.png) no-repeat center center");}, "mouseout": function(){this.setStyle("background", "url(/x_component_Meeting/$Main/default/icon/"+icon+".png) no-repeat center center");}, "mousedown": function(){this.setStyle("background", "url(/x_component_Meeting/$Main/default/icon/"+icon+"_down.png) no-repeat center center");}, "mouseup": function(){this.setStyle("background", "url(/x_component_Meeting/$Main/default/icon/"+icon+"_over.png) no-repeat center center");}, "click": function(){if (_self[action]) _self[action].apply(_self);} }); return actionNode; }, hideMenu: function(){ if (!this.meetingConfig.hideMenu) this.meetingConfig.hideMenu="static"; if (this.meetingConfig.hideMenu!="static"){ if (this.menuMode=="show"){ this.topMenu.set("tween", {duration: 100, transition: "bounce:out"}); this.bottomMenu.set("tween", {duration: 100, transition: "bounce:out"}); this.topMenu.tween("top", "0px", "-50px"); this.bottomMenu.tween("bottom", "0px", "-50px"); this.menuMode = "hide"; if (!this.topMenuPoint){ this.topMenuPoint = new Element("div", {"styles": this.css.topMenuPoint}).inject(this.topMenu); this.topMenuPointAction = new Element("div", {"styles": this.css.menuPointAction}).inject(this.topMenuPoint); this.topMenuPointAction.addEvent("mouseover", function(){this.showMenu();}.bind(this)); } if (!this.bottomMenuPoint){ this.bottomMenuPoint = new Element("div", {"styles": this.css.bottomMenuPoint}).inject(this.bottomMenu); this.bottomMenuPointAction = new Element("div", {"styles": this.css.menuPointAction}).inject(this.bottomMenuPoint); this.bottomMenuPointAction.addEvent("mouseover", function(){this.showMenu();}.bind(this)); } this.topMenuPoint.setStyle("display", "block"); this.bottomMenuPoint.setStyle("display", "block"); } } }, showMenu: function(){ if (this.menuMode!="show") { this.topMenu.set("tween", {duration: 100, transition: "bounce:out"}); this.bottomMenu.set("tween", {duration: 100, transition: "bounce:out"}); this.topMenu.tween("top", "-50px", "0px"); this.bottomMenu.tween("bottom", "-50px", "0px"); this.menuMode = "show"; if (this.topMenuPoint) this.topMenuPoint.setStyle("display", "none"); if (this.bottomMenuPoint) this.bottomMenuPoint.setStyle("display", "none"); } }, hideCurrentView: function(){ if (this.currentView){ this.currentView.hide(); this.currentView = null; } }, toMyMeeting: function(){ this.contentNode.setStyles(this.css.contentNode); if ((!this.myMeetingView) || this.currentView!=this.myMeetingView){ this.hideCurrentView(); this.getMyMeetingView(function(){ this.myMeetingView.show(); this.currentView = this.myMeetingView; }.bind(this)); this.hideMenu(); } }, getMyMeetingView: function(callback){ if (!this.myMeetingView){ MWF.xDesktop.requireApp("Meeting", "MeetingView", function(){ this.myMeetingView = new MWF.xApplication.Meeting.MeetingView(this.contentNode, this); if (callback) callback(); }.bind(this)); }else{ if (callback) callback(); } }, toList: function(){ this.contentNode.setStyle("background", "#EEE"); if ((!this.listView) || this.currentView!=this.listView){ this.hideCurrentView(); this.getListView(function(){ this.listView.show(); this.currentView = this.listView; }.bind(this)); this.hideMenu(); } }, getListView: function(callback){ if (!this.listView){ MWF.xDesktop.requireApp("Meeting", "ListView", function(){ this.listView = new MWF.xApplication.Meeting.ListView(this.contentNode, this); if (callback) callback(); }.bind(this)); }else{ if (callback) callback(); } }, toMonth: function(){ this.contentNode.setStyle("background", "#EEE"); if ((!this.monthView) || this.currentView!=this.monthView){ this.hideCurrentView(); this.getMonthView(function(){ this.monthView.show(); this.currentView = this.monthView; }.bind(this)); this.hideMenu(); } }, getMonthView: function(callback){ if (!this.monthView){ MWF.xDesktop.requireApp("Meeting", "MonthView", function(){ this.monthView = new MWF.xApplication.Meeting.MonthView(this.contentNode, this); if (callback) callback(); }.bind(this)); }else{ if (callback) callback(); } }, toDay: function(d){ this.contentNode.setStyle("background", "#EEE"); if ((!this.dayView) || this.currentView!=this.dayView){ this.hideCurrentView(); this.getDayView(function(){ this.dayView.show(); this.currentView = this.dayView; }.bind(this), d); this.hideMenu(); } }, getDayView: function(callback, d){ if (!this.dayView){ MWF.xDesktop.requireApp("Meeting", "DayView", function(){ this.dayView = new MWF.xApplication.Meeting.DayView(this.contentNode, this, {"date": d}); if (callback) callback(); }.bind(this)); }else{ this.dayView.toDay(d); if (callback) callback(); } }, toRoom: function(){ this.contentNode.setStyle("background", "#EEE"); if ((!this.roomView) || this.currentView!=this.roomView){ this.hideCurrentView(); this.getRoomView(function(){ this.roomView.show(); this.currentView = this.roomView; }.bind(this)); this.hideMenu(); } }, getRoomView: function(callback){ if (!this.roomView){ MWF.xDesktop.requireApp("Meeting", "RoomView", function(){ this.roomView = new MWF.xApplication.Meeting.RoomView(this.contentNode, this); if (callback) callback(); }.bind(this)); }else{ if (callback) callback(); } }, refresh: function(){ this.hideMenu(); if (this.currentView) this.currentView.reload(); }, addMeeting: function(date, hour, room){ MWF.UD.getPublicData("meetingConfig", function(json){ var process = (json) ? json.process : null; if (process){ }else{ new MWF.xApplication.Meeting.Creator(this, date, hour, room); this.hideMenu(); } }.bind(this)); }, config: function(){ new MWF.xApplication.Meeting.Config(this, this.meetingConfig); this.hideMenu(); }, addRoom: function(){ this.createAddRoomNodes(); var createRoomFx = new Fx.Morph(this.createRoomNode, { "duration": "300", "transition": Fx.Transitions.Sine.easeOut }); createRoomFx.start({"opacity": 1}); }, createAddRoomNodes: function(){ this.createRoomNode = new Element("div", {"styles": this.css.createRoomNode}).inject(this.node); var createRoomAreaNode = new Element("div", {"styles": this.css.createRoomAreaNode}).inject(this.createRoomNode); var titleNode = new Element("div", {"styles": this.css.createRoomTitleNode, "text": this.lp.addRoom}).inject(createRoomAreaNode); var contentNode = new Element("div", {"styles": this.css.createRoomContentNode}).inject(createRoomAreaNode); var bottomNode = new Element("div", {"styles": this.css.createRoomBottomNode}).inject(createRoomAreaNode); var nameNode = new Element("div", { "styles": this.css.createRoomFormNode, "html": "
"+this.lp.roomForm.name+"
" }).inject(contentNode); nameNode.getFirst("div").setStyles(this.css.createRoomFormTitleNode); nameNode.getLast("div").setStyles(this.css.createRoomFormContentNode); this.createRoomNameInput = nameNode.getElement("input").setStyles(this.css.createRoomFormInput); var buildingNode = new Element("div", { "styles": this.css.createRoomFormNode, "html": "
"+this.lp.roomForm.building+"
" }).inject(contentNode); buildingNode.getFirst("div").setStyles(this.css.createRoomFormTitleNode); buildingNode.getLast("div").setStyles(this.css.createRoomFormContentNode); this.createRoomBuildingInput = buildingNode.getElement("input").setStyles(this.css.createRoomFormInput); var floorNode = new Element("div", { "styles": this.css.createRoomFormNode2, "html": "
"+this.lp.roomForm.floor+"
" }).inject(contentNode); floorNode.getFirst("div").setStyles(this.css.createRoomFormTitleNode); var node = floorNode.getLast("div").setStyles(this.css.createRoomFormContentNode); this.createRoomFloorSelect = new Element("select", {"styles": this.css.createRoomFormSelect}).inject(node); for (var i=-2; i<=50; i++){ var option = new Element("option", { "value": i, "text": i+this.lp.floor, "selected": (i==1) }).inject(this.createRoomFloorSelect); } var capacityNode = new Element("div", { "styles": this.css.createRoomFormNode3, "html": "
"+this.lp.roomForm.capacity+"
" }).inject(contentNode); capacityNode.getFirst("div").setStyles(this.css.createRoomFormTitleNode); capacityNode.getLast("div").setStyles(this.css.createRoomFormContentNode); this.createRoomCapacityInput = capacityNode.getElement("input").setStyles(this.css.createRoomFormInput); var roomNumberNode = new Element("div", { "styles": this.css.createRoomFormNode2, "html": "
"+this.lp.roomForm.roomNumber+"
" }).inject(contentNode); roomNumberNode.getFirst("div").setStyles(this.css.createRoomFormTitleNode); roomNumberNode.getLast("div").setStyles(this.css.createRoomFormContentNode); this.createRoomRoomNumberInput = roomNumberNode.getElement("input").setStyles(this.css.createRoomFormInput); var phoneNode = new Element("div", { "styles": this.css.createRoomFormNode3, "html": "
"+this.lp.roomForm.phone+"
" }).inject(contentNode); phoneNode.getFirst("div").setStyles(this.css.createRoomFormTitleNode); phoneNode.getLast("div").setStyles(this.css.createRoomFormContentNode); this.createRoomRoomPhoneNode = phoneNode.getElement("input").setStyles(this.css.createRoomFormInput); var auditorNode = new Element("div", { "styles": this.css.createRoomFormNode, "html": "
"+this.lp.roomForm.auditor+"
" }).inject(contentNode); auditorNode.getFirst("div").setStyles(this.css.createRoomFormTitleNode); this.createRoomRoomAuditorNode = auditorNode.getLast("div").setStyles(this.css.createRoomFormAuditorNode); auditorNode.setStyle("display", "none"); //this.createRoomRoomAuditorInput = auditorNode.getElement("input").setStyles(this.css.createRoomFormInput); var deviceNode = new Element("div", { "styles": this.css.createRoomFormNode2, "html": "
"+this.lp.roomForm.device+"
" }).inject(contentNode); deviceNode.getFirst("div").setStyles(this.css.createRoomFormTitleNode); this.createRoomDeviceChecks = deviceNode.getLast("div").setStyles(this.css.createRoomFormContentNode2); Object.each(this.lp.device, function(d, k){ new Element("div", { "styles": {"float": "left", "width": "80px"}, "html": ""+d }).inject(this.createRoomDeviceChecks); }.bind(this)); var availableNode = new Element("div", { "styles": this.css.createRoomFormNode3, "html": "
"+this.lp.roomForm.available+"
" }).inject(contentNode); availableNode.getFirst("div").setStyles(this.css.createRoomFormTitleNode); this.createRoomAvailableChecks = availableNode.getLast("div").setStyles(this.css.createRoomFormContentNode2); new Element("div", { "styles": {"float": "left"}, "html": ""+this.lp.enable }).inject(this.createRoomAvailableChecks); new Element("div", { "styles": {"float": "left"}, "html": ""+this.lp.disable }).inject(this.createRoomAvailableChecks); this.createRoomCancelActionNode = new Element("div", { "styles": this.css.createRoomCancelActionNode, "text": this.lp.cancel }).inject(bottomNode); this.createRoomOkActionNode = new Element("div", { "styles": this.css.createRoomOkActionNode, "text": this.lp.save }).inject(bottomNode); this.createRoomCancelActionNode.addEvent("click", function(e){ this.createRoomCancel(e); }.bind(this)); this.createRoomOkActionNode.addEvent("click", function(e){ this.createRoomSave(e); }.bind(this)); this.setCreateRoomEvent(); }, setCreateRoomEvent: function(){ this.createRoomNameInput.addEvents({ "focus": function(){ var errorNode = this.createRoomNameInput.retrieve("errorNode", null); if (errorNode){ errorNode.destroy(); this.createRoomNameInput.eliminate("errorNode"); this.createRoomNameInput.setStyle("border", "1px solid #999"); } }.bind(this), "blur": function(){ if (!this.createRoomNameInput.get("value")) this.createRoomVerification(this.createRoomNameInput, this.lp.roomForm.verification.inputName); }.bind(this), }); this.createRoomBuildingInput.addEvents({ "focus": function(){ var errorNode = this.createRoomBuildingInput.retrieve("errorNode", null); if (errorNode){ errorNode.destroy(); this.createRoomBuildingInput.eliminate("errorNode"); this.createRoomBuildingInput.setStyle("border", "1px solid #999"); } }.bind(this), "blur": function(){ var createBuilding = false; var building = this.createRoomBuildingInput.retrieve("buildingId"); if (!building){ var buildingName = this.createRoomBuildingInput.get("value"); if (buildingName) createBuilding = true; } if (!building && !createBuilding) this.createRoomVerification(this.createRoomBuildingInput, this.lp.roomForm.verification.inputBuilding); }.bind(this), }); this.createRoomCapacityInput.addEvents({ "focus": function(){ var errorNode = this.createRoomCapacityInput.retrieve("errorNode", null); if (errorNode){ errorNode.destroy(); this.createRoomCapacityInput.eliminate("errorNode"); this.createRoomCapacityInput.setStyle("border", "1px solid #999"); } }.bind(this), "blur": function(){ if (!this.createRoomCapacityInput.get("value")) this.createRoomVerification(this.createRoomCapacityInput, this.lp.roomForm.verification.inputCapacity); }.bind(this), }); this.createRoomBuildingInput.addEvents({ "focus": function(){this.createRoomListBuilding();}.bind(this), //"blur": function(){}.bind(this), "change": function(){this.createRoomBuildingInput.eliminate("buildingId");}.bind(this), "keydown": function(e){ //if ([13,40,38].indexOf(e.code)!=-1){ // if (!this.createRoomSelectBuildingNode){ // this.createRoomListBuilding(); // } //} if (e.code==13){ this.createRoomListBuildingHide(); this.createRoomListBuilding(); } if (e.code==40) this.createRoomSelectBuildingNext(); if (e.code==38) this.createRoomSelectBuildingPrev(); if (e.code==32) this.createRoomSelectBuildingConfirm(e); }.bind(this) }); MWF.xDesktop.requireApp("Organization", "Selector.package", function(){ var name = this.createRoomRoomAuditorNode.retrieve("names", null); this.createRoomRoomAuditorNode.addEvents({ "click": function(){ var options = { "type": "person", "names": (name) ? [name] : [], "count": 1, "onComplete": function(items){ var op = this.createRoomRoomAuditorNode.retrieve("person"); if (op){ op.node.destroy(); MWF.release(op); this.createRoomRoomAuditorNode.eliminate("person"); } this.createRoomRoomAuditorNode.store("names", items[0].data.name); MWF.require("MWF.widget.Identity", function(){ var explorer = { "actions": this.personActions, "app": { "lp": this.lp } } var _self = this; var person = new MWF.widget.Person(items[0].data, this.createRoomRoomAuditorNode, explorer, true, function(e){ this.node.destroy(); MWF.release(this); _self.createRoomRoomAuditorNode.eliminate("names"); _self.createRoomRoomAuditorNode.eliminate("person"); e.stopPropagation(); }, {"style": "meeting"}); this.createRoomRoomAuditorNode.store("person", person); }.bind(this)); }.bind(this) }; var selector = new MWF.OrgSelector(this.content, options); }.bind(this) }); }.bind(this)); }, createRoomSelectBuildingNext: function(){ if (this.createRoomSelectBuildingNode){ var node=nu;;; if (this.createRoomSelectBuildingNode.selectedNode){ var node = this.createRoomSelectBuildingNode.selectedNode.getNext(); if (!node) node = this.createRoomSelectBuildingNode.getFirst(); this.createRoomSelectBuildingNode.selectedNode.setStyle("background-color", this.createRoomSelectBuildingNode.selectedNode.retrieve("bg")); }else{ node = this.createRoomSelectBuildingNode.getFirst(); } if (node){ var color = node.getStyle("background-color"); node.store("bg", color); node.setStyles(this.css.createRoomBuildingSelectItem_over); this.createRoomSelectBuildingNode.selectedNode = node; } } }, createRoomSelectBuildingPrev: function(){ if (this.createRoomSelectBuildingNode){ var node = null; if (this.createRoomSelectBuildingNode.selectedNode){ var node = this.createRoomSelectBuildingNode.selectedNode.getPrevious(); if (!node) node = this.createRoomSelectBuildingNode.getLast(); this.createRoomSelectBuildingNode.selectedNode.setStyle("background-color", this.createRoomSelectBuildingNode.selectedNode.retrieve("bg")); }else{ node = this.createRoomSelectBuildingNode.getLast(); } if (node){ var color = node.getStyle("background-color"); node.store("bg", color); node.setStyles(this.css.createRoomBuildingSelectItem_over); this.createRoomSelectBuildingNode.selectedNode = node; } } }, createRoomSelectBuildingConfirm: function(e){ if (this.createRoomSelectBuildingNode.selectedNode){ this.selectBuilding(this.createRoomSelectBuildingNode.selectedNode); e.preventDefault(); } }, //cancelCreateRoom: function(){ // this.createRoomNode.destroy(); //}, createRoomListBuilding: function(){ var key = this.createRoomBuildingInput.get("value"); this.actions.listBuildingByKey(key, function(json){ if (json.data && json.data.length){ this.createRoomSelectBuildingNode = new Element("div", {"styles": this.css.createRoomSelectBuildingNode}).inject(this.createRoomNode); this.setCreateRoomSelectBuildingNodeSize(); this.createRoomListBuildingHideFun = this.createRoomListBuildingHide.bind(this); this.node.addEvent("mousedown", this.createRoomListBuildingHideFun); var _self = this; json.data.each(function(building, idx){ var node = new Element("div", {"styles": this.css.createRoomBuildingSelectItem}).inject(this.createRoomSelectBuildingNode); var nameNode = new Element("div", {"styles": this.css.createRoomBuildingSelectItemName, "text": building.name}).inject(node); var addrNode = new Element("div", {"styles": this.css.createRoomBuildingSelectItemAddr, "text": building.address}).inject(node); if ((idx % 2)==1) node.setStyle("background-color", "#f1f6ff"); node.store("building", building.id); node.addEvents({ "mouseover": function(e){ var color = this.getStyle("background-color"); this.store("bg", color); this.setStyles(_self.css.createRoomBuildingSelectItem_over); }, "mouseout": function(e){ this.setStyle("background-color", this.retrieve("bg")); }, "mousedown": function(e){e.stopPropagation();}, "click": function(e){ _self.selectBuilding(this); }, }); }.bind(this)); } }.bind(this)); }, selectBuilding: function(node){ var id = node.retrieve("building"); var text = node.getFirst().get("text"); this.createRoomBuildingInput.set("value", text); this.createRoomBuildingInput.store("buildingId", id); this.createRoomListBuildingHide(); var errorNode = this.createRoomBuildingInput.retrieve("errorNode", null); if (errorNode){ errorNode.destroy(); this.createRoomBuildingInput.eliminate("errorNode"); this.createRoomBuildingInput.setStyle("border", "1px solid #999"); } }, setCreateRoomSelectBuildingNodeSize: function(){ var p = this.createRoomBuildingInput.getPosition(this.createRoomBuildingInput.getOffsetParent()); this.createRoomSelectBuildingNode.position({ relativeTo: this.createRoomBuildingInput, position: 'bottomCenter', edge: 'upperCenter', offset: {x: 0- p.x, y: 0} }); this.createRoomSelectBuildingNode.setStyle("left", p.x); var size = this.createRoomBuildingInput.getSize(); var w = size.x-2 this.createRoomSelectBuildingNode.setStyle("width", ""+w+"px"); }, createRoomListBuildingHide: function(){ if (this.createRoomSelectBuildingNode){ //this.removeEvent("resize", this.setCreateRoomSelectBuildingNodeSizeFun); this.createRoomSelectBuildingNode.destroy(); this.createRoomSelectBuildingNode = null; this.node.removeEvent("mousedown", this.createRoomListBuildingHideFun); } }, createRoomCancel: function(){ var createRoomFx = new Fx.Morph(this.createRoomNode, { "duration": "300", "transition": Fx.Transitions.Sine.easeOut }); createRoomFx.start({"opacity": 0}).chain(function(){ this.createRoomNode.destroy(); this.createRoomNode = null; this.createRoomNameInput = null; this.createRoomBuildingInput = null; this.createRoomFloorSelect = null; this.createRoomCapacityInput = null; this.createRoomRoomNumberInput = null; this.createRoomRoomAuditorNode = null; this.createRoomDeviceChecks = null; this.createRoomAvailableChecks = null; this.createRoomCancelActionNode = null; this.createRoomOkActionNode = null; this.createRoomSelectBuildingNode = null; delete this.createRoomNameInput; delete this.createRoomBuildingInput; delete this.createRoomFloorSelect; delete this.createRoomCapacityInput; delete this.createRoomRoomNumberInput; delete this.createRoomRoomAuditorNode; delete this.createRoomDeviceChecks; delete this.createRoomAvailableChecks; delete this.createRoomCancelActionNode; delete this.createRoomOkActionNode; delete this.createRoomSelectBuildingNode; }.bind(this)); }, createRoomSave: function(){ this.getCreateRoomData(function(data){ this.actions.saveRoom(data, function(json){ this.notice(this.lp.roomForm.save_success, "success", this.node, {"x": "left", "y": "bottom"}); this.createRoomCancel(); }.bind(this)); }.bind(this)); }, getCreateRoomData: function(callback){ var flag = true; var name = this.createRoomNameInput.get("value"); if (!name) flag = this.createRoomVerification(this.createRoomNameInput, this.lp.roomForm.verification.inputName); var createBuilding = false; var building = this.createRoomBuildingInput.retrieve("buildingId"); if (!building){ var buildingName = this.createRoomBuildingInput.get("value"); if (buildingName) createBuilding = true; } if (!building && !createBuilding) flag = this.createRoomVerification(this.createRoomBuildingInput, this.lp.roomForm.verification.inputBuilding); var floor = this.createRoomFloorSelect.options[this.createRoomFloorSelect.selectedIndex].value; var capacity = this.createRoomCapacityInput.get("value"); if (!capacity) flag = this.createRoomVerification(this.createRoomCapacityInput, this.lp.roomForm.verification.inputCapacity); var number = this.createRoomRoomNumberInput.get("value"); var phoneNumber = this.createRoomRoomPhoneNode.get("value"); var auditor = this.createRoomRoomAuditorNode.retrieve("names", ""); var deviceList = []; var deviceChecks = this.createRoomDeviceChecks.getElements("input"); deviceChecks.each(function(input){ if (input.checked) deviceList.push(input.get("value")); }.bind(this)); var device = deviceList.join("#"); var available = true; var radios = this.createRoomAvailableChecks.getElements("input"); for (var i=0; i"; this.uploadFileAreaNode.set("html", html); this.fileUploadNode = this.uploadFileAreaNode.getFirst(); this.fileUploadNode.addEvent("change", function(){ var files = this.fileUploadNode.files; if (files.length){ for (var i = 0; i < files.length; i++) { var file = files.item(i); var formData = new FormData(); formData.append('file', file); //formData.append('folder', folderId); this.app.actions.addAttachment(function(o, text){ debugger; if (o.id){ this.app.actions.getAttachment(o.id, function(json){ if (json.data) this.attachmentController.addAttachment(json.data); this.attachmentController.checkActions(); }.bind(this)) } this.attachmentController.checkActions(); }.bind(this), null, formData, this.data.id, file); } } }.bind(this)); }, deleteAttachments: function(e, node, attachments){ var names = []; attachments.each(function(attachment){ names.push(attachment.data.name); }.bind(this)); var _self = this; this.app.confirm("warn", e, this.lp.deleteAttachmentTitle, this.lp.deleteAttachment+"( "+names.join(", ")+" )", 300, 120, function(){ while (attachments.length){ attachment = attachments.shift(); _self.deleteAttachment(attachment); } this.close(); }, function(){ this.close(); }, null); }, deleteAttachment: function(attachment){ this.app.actions.deleteFile(attachment.data.id, function(josn){ this.attachmentController.removeAttachment(attachment); this.attachmentController.checkActions(); }.bind(this)); }, downloadAttachment: function(e, node, attachments){ attachments.each(function(att){ this.app.actions.getFileDownload(att.data.id); }.bind(this)); }, openAttachment: function(e, node, attachments){ attachments.each(function(att){ this.app.actions.getFile(att.data.id); }.bind(this)); }, getAttachmentUrl: function(attachment, callback){ this.app.actions.getFileUrl(attachment.data.id, callback); }, setDescriptionHeight: function(){ var size = this.node.getSize(); var y = size.y-190; this.descriptionInput.setStyle("height", ""+y+"px"); }, loadBeginDate: function(){ var lineNode = new Element("div", {"styles": this.css.createMeetingInfoLineNode}).inject(this.infoContentNode); var titleNode = new Element("div", {"styles": this.css.createMeetingInfoItemTitleNode, "text": this.lp.beginDate}).inject(lineNode); var editNode = new Element("div", { "styles": this.css.createMeetingInfoItemEditNode, "html": "" }).inject(lineNode); this.dateInput = editNode.getFirst(); this.dateInput.setStyles(this.css.createMeetingInfoItemInputNode); this.dateInput.set("value", this.date.format("%Y-%m-%d")); var downNode = new Element("div", {"styles": this.css.createMeetingInfoItemDownNode}).inject(editNode); MWF.require("MWF.widget.Calendar", function(){ new MWF.widget.Calendar(this.dateInput, {"style":"meeting", "target": this.node}); }.bind(this)); downNode.addEvent("click", function(){ this.dateInput.focus(); }.bind(this)); }, loadBeginTime: function(){ var lineNode = new Element("div", {"styles": this.css.createMeetingInfoLineNode}).inject(this.infoContentNode); var titleNode = new Element("div", {"styles": this.css.createMeetingInfoItemTitleNode, "text": this.lp.beginTime}).inject(lineNode); var editNode = new Element("div", {"styles": this.css.createMeetingInfoItemEditNode}).inject(lineNode); this.beginHourSelect = new Element("select", {"styles": this.css.createMeetingInfoItemSelectNode}).inject(editNode); this.beginMinuteSelect = new Element("select", {"styles": this.css.createMeetingInfoItemSelectNode}).inject(editNode); var hour = this.hour; if (!hour){ var now = (new Date()).increment("hour", 1); var hour = now.getHours(); } for (i=0; i<24; i++){ var op = new Element("option", { "value": i, "text": i }).inject(this.beginHourSelect); if (i==hour) op.set("selected", true); } for (i=0; i<60; i = i+5){ var op = new Element("option", { "value": i, "text": i }).inject(this.beginMinuteSelect); if (i==0) op.set("selected", true); } }, loadEndTime: function(){ var lineNode = new Element("div", {"styles": this.css.createMeetingInfoLineNode}).inject(this.infoContentNode); var titleNode = new Element("div", {"styles": this.css.createMeetingInfoItemTitleNode, "text": this.lp.endTime}).inject(lineNode); var editNode = new Element("div", {"styles": this.css.createMeetingInfoItemEditNode}).inject(lineNode); this.endHourSelect = new Element("select", {"styles": this.css.createMeetingInfoItemSelectNode}).inject(editNode); this.endMinuteSelect = new Element("select", {"styles": this.css.createMeetingInfoItemSelectNode}).inject(editNode); var hour = this.hour; if (!hour){ var now = (new Date()).increment("hour", 1); var hour = now.getHours(); } hour++; for (i=0; i<24; i++){ var op = new Element("option", { "value": i, "text": i }).inject(this.endHourSelect); if (i==hour) op.set("selected", true); } for (i=0; i<60; i = i+5){ var op = new Element("option", { "value": i, "text": i }).inject(this.endMinuteSelect); if (i==0) op.set("selected", true); } }, loadSelectRoom: function(){ var lineNode = new Element("div", {"styles": this.css.createMeetingInfoLineNode}).inject(this.infoContentNode); var titleNode = new Element("div", {"styles": this.css.createMeetingInfoItemTitleNode, "text": this.lp.selectRoom}).inject(lineNode); var editNode = new Element("div", { "styles": this.css.createMeetingInfoItemEditNode, "html": "
" }).inject(lineNode); this.roomInput = editNode.getFirst(); this.roomInput.setStyles(this.css.createMeetingInfoItemDivNode); var downNode = new Element("div", {"styles": this.css.createMeetingInfoItemDownNode}).inject(editNode); this.roomInput.addEvents({ "click": function(e){this.selectRooms();}.bind(this) }); downNode.addEvent("click", function(){ this.selectRooms(); }.bind(this)); if (this.room){ this.app.actions.getRoom(this.room, function(json){ this.app.actions.getBuilding(json.data.building, function(bjson){ this.roomId = this.room; this.roomInput.set("text", json.data.name+" ("+bjson.data.name+")"); }.bind(this)); }.bind(this)); } }, selectRooms: function(){ this.createRoomNode(function(){ this.loadSelectRooms(); this.selectRoomNode.setStyle("display", "block"); this.hideRoomNodeFun = this.hideRoomNode.bind(this); document.body.addEvent("mousedown", this.hideRoomNodeFun); //var p = this.selectRoomNode.getPosition(this.selectRoomNode.getOffsetParent()); this.selectRoomNode.position({ relativeTo: this.roomInput, position: 'bottomLeft', edge: 'upperLeft', offset: {x: 0, y: 0} }); var size = this.roomInput.getSize(); var w = size.x-2 this.selectRoomNode.setStyle("width", ""+w+"px"); }.bind(this)); }, createRoomNode: function(callback){ if (!this.selectRoomNode){ this.selectRoomNode = new Element("div", {"styles": this.css.createMeetingInfoSelectRoomNode}).inject(this.node); this.selectRoomNode.addEvent("mousedown", function(e){e.stopPropagation();}); if (callback) callback(); }else{ if (callback) callback(); } }, loadSelectRooms: function(){ var d = this.dateInput.get("value"); var bh = this.beginHourSelect.options[this.beginHourSelect.selectedIndex].value; var bm = this.beginMinuteSelect.options[this.beginMinuteSelect.selectedIndex].value; var eh = this.endHourSelect.options[this.endHourSelect.selectedIndex].value; var em = this.endMinuteSelect.options[this.endMinuteSelect.selectedIndex].value; var start = d+" "+bh+":"+bm; var completed = d+" "+eh+":"+em; this.app.actions.listBuildingByRange(start, completed, function(json){ json.data.each(function(building){ var node = new Element("div", {"styles": this.css.createMeetingInfoSelectRoomItem1Node}).inject(this.selectRoomNode); var nodeName = new Element("div", {"styles": this.css.createMeetingInfoSelectRoomItem1NameNode, "text": building.name}).inject(node); var nodeAddr = new Element("div", {"styles": this.css.createMeetingInfoSelectRoomItem1AddrNode, "text": building.address}).inject(node); building.roomList.each(function(room, i){ if (room.available) this.createRoomSelectNode(room, i, building); }.bind(this)); }.bind(this)); }.bind(this)); }, createRoomSelectNode: function(room, i, building){ var roomNode = new Element("div", {"styles": this.css.roomTitleNode}).inject(this.selectRoomNode); var capacityNode = new Element("div", {"styles": this.css.roomTitleCapacityNode, "text": room.capacity+this.lp.person}).inject(roomNode); var inforNode = new Element("div", {"styles": this.css.roomTitleInforNode}).inject(roomNode); var node = new Element("div", {"styles": {"height": "20px"}}).inject(inforNode); var numberNode = new Element("div", {"styles": this.css.roomTitleNumberNode, "text": (room.roomNumber) ? "#"+room.roomNumber : ""}).inject(node); var nameNode = new Element("div", {"styles": this.css.roomTitleNameNode, "text": room.name}).inject(node); var iconsNode = new Element("div", {"styles": this.css.roomTitleIconsNode}).inject(inforNode); var deviceList = room.device.split("#"); deviceList.each(function(name){ var node = new Element("div", {"styles": this.css.roomTitleIconNode, "title": this.lp.device[name]}).inject(iconsNode); node.setStyle("background-image", "url(/x_component_Meeting/$RoomView/default/icon/"+name+".png)"); }.bind(this)); if ((i % 2)!=0) roomNode.setStyle("background-color", "#f4f8ff"); roomNode.store("room", room); var _self = this; if (room.idle){ roomNode.addEvents({ "mouseover": function(){ var color = roomNode.getStyle("background-color"); this.store("bgcolor", color); this.setStyle("background-color", "#e4edfc"); }, "mouseout": function(){ var color = this.retrieve("bgcolor", "#FFF"); this.setStyle("background-color", color); }, "click": function(){ var roomData = this.retrieve("room"); _self.roomId = roomData.id; //roomNode.inject(_self.roomInput); _self.roomInput.set("text", roomData.name+" ("+building.name+")"); _self.hideRoomNode(); } }); }else{ roomNode.setStyle("background-color", "#fff6f6"); var disabledNode = new Element("div", {"styles": this.css.roomTitleDisabledIconNode}).inject(roomNode); } }, hideRoomNode: function(){ this.selectRoomNode.empty(); this.selectRoomNode.setStyle("display", "none"); document.body.removeEvent("mousedown", this.hideRoomNodeFun); }, setCreateRoomSelectBuildingNodeSize: function(){ var p = this.createRoomBuildingInput.getPosition(this.createRoomBuildingInput.getOffsetParent()); this.createRoomSelectBuildingNode.position({ relativeTo: this.createRoomBuildingInput, position: 'bottomCenter', edge: 'upperCenter', offset: {x: 0, y: 0} }); this.createRoomSelectBuildingNode.setStyle("left", p.x); var size = this.createRoomBuildingInput.getSize(); var w = size.x-2 this.createRoomSelectBuildingNode.setStyle("width", ""+w+"px"); }, loadInvite: function(){ var lineNode = new Element("div", {"styles": this.css.createMeetingInfoLineNode}).inject(this.infoContentNode); var titleNode = new Element("div", {"styles": this.css.createMeetingInfoItemTitleNode, "text": this.lp.invitePerson}).inject(lineNode); var editNode = new Element("div", { "styles": this.css.createMeetingInfoItemEditNode, "html": "
" }).inject(lineNode); this.inviteInput = editNode.getFirst(); this.inviteInput.setStyles(this.css.createMeetingInfoItemDivNode); this.invitePersons = []; this.invitePersonNames = []; MWF.xDesktop.requireApp("Organization", "Selector.package", function(){ this.inviteInput.addEvents({ "click": function(){ var options = { "type": "person", "names": this.invitePersonNames, "count": 0, "onComplete": function(items){ this.invitePersons.each(function(op){ op.node.destroy(); MWF.release(op); }.bind(this)); this.invitePersons = []; this.invitePersonNames = []; var explorer = { "actions": this.app.personActions, "app": { "lp": this.lp } } MWF.require("MWF.widget.Identity", function(){ items.each(function(item){ var _self = this; var person = new MWF.widget.Person(item.data, this.inviteInput, explorer, false, null, {"style": "room"}); this.invitePersonNames.push(item.data.name); this.invitePersons.push(person); }.bind(this)); }.bind(this)); }.bind(this) }; var selector = new MWF.OrgSelector(this.app.content, options); }.bind(this) }); }.bind(this)); }, show: function(){ var fx = new Fx.Morph(this.node, { "duration": "300", "transition": Fx.Transitions.Sine.easeOut }); fx.start({"opacity": 1}); }, hide: function(){ var fx = new Fx.Morph(this.node, { "duration": "300", "transition": Fx.Transitions.Sine.easeOut }); fx.start({"opacity": 0}).chain(function(){ this.node.destroy(); MWF.release(this); }.bind(this)); } }); MWF.xApplication.Meeting.Config = new Class({ Implements: [Events], initialize: function(app){ this.app = app; this.css = this.app.css; this.lp = this.app.lp; this.configData = this.app.meetingConfig || {}; MWF.UD.getPublicData("meetingConfig", function(json){ var jsonData = json || {}; if (jsonData.process){ this.configData.process = jsonData.process; }else{ this.configData.process = ""; } this.load(); }.bind(this)); }, load: function(){ this.node = new Element("div", {"styles": this.css.configNode}).inject(this.app.node); this.contentNode = new Element("div", {"styles": this.css.configContentNode}).inject(this.node); var html = "
"+this.lp.config.navi+ "
"+this.lp.config.autoHide+"
" + "
"+this.lp.config["default"]+"
" + ""+this.lp.myMeeting+ ""+this.lp.month+ ""+this.lp.day+ ""+this.lp.list+ ""+this.lp.room+"
" + "
"+this.lp.config.legend+"
" + "
" + "
" + "
"+this.lp.config.wait+"
" + "
" + "
" + "
"+this.lp.config.progress+"
" + "
" + "
" + "
"+this.lp.config.invite+"
" + "
" + "
" + "
"+this.lp.config.completed+"
" + "
"+ "
"+this.lp.config.applyProcess+"
";; this.contentNode.set("html", html); this.contentNode.getElements("div.line").setStyles(this.css.configContentLine); this.contentNode.getElements("div.configTitle").setStyles(this.css.configTitleDiv); this.processNode = this.contentNode.getLast("div").getLast("div"); if (this.app.isManager && false){ //@todo no process this.createApplicationSelect(); }else{ this.contentNode.getLast("div").setStyle("display", "none"); } this.actionNode = new Element("div", {"styles": this.css.configActionNode}).inject(this.node); this.cancelNode = new Element("div", {"styles": this.css.configActionCancelNode, "text": this.app.lp.cancel}).inject(this.actionNode); this.saveNode = new Element("div", {"styles": this.css.configActionSaveNode, "text": this.app.lp.save}).inject(this.actionNode); this.cancelNode.addEvent("click", this.hide.bind(this)); this.saveNode.addEvent("click", this.save.bind(this)); this.node.addEvent("mousedown", function(e){e.stopPropagation();}.bind(this)); this.show(); }, createApplicationSelect: function(){ MWF.xDesktop.requireApp("process.ApplicationExplorer", "Actions.RestActions", function(){ this.appActions = new MWF.xApplication.process.ApplicationExplorer.Actions.RestActions(); this.getCurrentProcess(function(){ this.applicationSelect = new Element("select").inject(this.processNode); var op = new Element("option", {"text": "", "value": "", "selected": true}).inject(this.applicationSelect); this.appActions.listApplication("", function(json){ json.data.each(function(app){ var op = new Element("option", { "text": app.name, "value": app.id, "selected": (this.currentProcess) ? (this.currentProcess.application==app.id) : false }).inject(this.applicationSelect); }.bind(this)); if (this.applicationSelect.selectedIndex && this.applicationSelect.selectedIndex!=0){ var id = this.applicationSelect.options[this.applicationSelect.selectedIndex].get("value"); if (id) this.createProcessSelect(id); } this.applicationSelect.addEvent("change", function(){ var id = this.applicationSelect.options[this.applicationSelect.selectedIndex].get("value"); this.createProcessSelect(id); }.bind(this)); }.bind(this)) }.bind(this)); }.bind(this)); }, createProcessSelect: function(id){ if (id){ if (!this.processSelect){ this.processSelect = new Element("select").inject(this.processNode); }else{ this.processSelect.empty(); } var op = new Element("option", {"text": "", "value": "", "selected": true}).inject(this.processSelect); this.appActions.listProcess(id, function(json){ json.data.each(function(process){ var op = new Element("option", { "text": process.name, "value": process.id, "selected": (this.currentProcess) ? (this.currentProcess.id==process.id) : false }).inject(this.processSelect); }.bind(this)); }.bind(this)); }else{ if (this.processSelect){ this.processSelect.destroy(); this.processSelect = null; } } }, getCurrentProcess: function(callback){ if (this.configData.process){ this.appActions.getProcess(this.configData.process, function(json){ this.currentProcess = json.data; if (callback) callback(); }.bind(this)); }else{ this.currentProcess = null; if (callback) callback(); } }, save: function(){ var hideMenu = "auto"; var defaultView = "toMyMeeting"; var process = ""; var node = this.contentNode.getFirst("div"); var hideMenuNode = node.getElement("input"); if (hideMenuNode) if (!hideMenuNode.checked) hideMenu = "static"; node = node.getNext(); var viewNodes = node.getElements("input"); for (var i=0; i