1 (function ($, rf) {
  2 
  3     rf.ui = rf.ui || {};
  4 
  5     rf.ui.PopupPanel.Border = function(id, modalPanel, cursor, sizer) {
  6 
  7         $super.constructor.call(this, id);
  8 
  9         this.element = $(rf.getDomElement(id));
 10         this.element.css('cursor', cursor);
 11         var border = this;
 12         this.element.bind('mousedown', {border:border}, this.startDrag);
 13 
 14         this.modalPanel = modalPanel;
 15         this.sizer = sizer;
 16     };
 17 
 18     var $super = rf.BaseComponent.extend(rf.ui.PopupPanel.Border);
 19     var $super = rf.ui.PopupPanel.Border.$super;
 20 
 21     $.extend(rf.ui.PopupPanel.Border.prototype, (function (options) {
 22 
 23         return {
 24 
 25             name: "RichFaces.ui.PopupPanel.Border",
 26 
 27             destroy: function() {
 28                 if (this.doingDrag) {
 29                     $(document).unbind('mousemove', this.doDrag);
 30                     $(document).unbind('mouseup', this.endDrag);
 31                 }
 32 
 33                 this.element.unbind('mousedown', this.startDrag);
 34                 this.element = null;
 35                 this.modalPanel = null;
 36             },
 37 
 38             show: function() {
 39                 this.element.show();
 40             },
 41 
 42             hide: function() {
 43                 this.element.hide();
 44             },
 45 
 46             startDrag: function(event) {
 47                 var border = event.data.border;
 48                 border.doingDrag = true;
 49 
 50                 border.dragX = event.clientX;
 51                 border.dragY = event.clientY;
 52                 $(document).bind('mousemove', {border:border}, border.doDrag);
 53                 $(document).bind('mouseup', {border:border}, border.endDrag);
 54 
 55                 border.modalPanel.startDrag(border);
 56 
 57                 border.onselectStartHandler = document.onselectstart;
 58                 document.onselectstart = function() {
 59                     return false;
 60                 }
 61             },
 62 
 63             getWindowSize : function() {
 64                 var myWidth = 0, myHeight = 0;
 65                 if (typeof( window.innerWidth ) == 'number') {
 66                     myWidth = window.innerWidth;
 67                     myHeight = window.innerHeight;
 68                 } else if (document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight )) {
 69                     myWidth = document.documentElement.clientWidth;
 70                     myHeight = document.documentElement.clientHeight;
 71                 } else if (document.body && ( document.body.clientWidth || document.body.clientHeight )) {
 72                     myWidth = document.body.clientWidth;
 73                     myHeight = document.body.clientHeight;
 74                 }
 75                 return {"width":myWidth,"height":myHeight};
 76             },
 77 
 78             doDrag: function(event) {
 79                 var border = event.data.border;
 80                 if (!border.doingDrag) {
 81                     return;
 82                 }
 83 
 84                 var evtX = event.clientX;
 85                 var evtY = event.clientY;
 86 
 87                 var winSize = border.getWindowSize();
 88 
 89                 if (evtX < 0) {
 90                     evtX = 0;
 91                 } else if (evtX >= winSize.width) {
 92                     evtX = winSize.width - 1;
 93                 }
 94 
 95                 if (evtY < 0) {
 96                     evtY = 0;
 97                 } else if (evtY >= winSize.height) {
 98                     evtY = winSize.height - 1;
 99                 }
100 
101                 var dx = evtX - border.dragX;
102                 var dy = evtY - border.dragY;
103 
104                 if (dx != 0 || dy != 0) {
105 
106                     var id = border.id;
107 
108                     var diff = border.sizer.prototype.doDiff(dx, dy);//TODO
109                     var doResize;
110 
111                     var element = border.modalPanel.cdiv;
112 
113                     if (diff.deltaWidth || diff.deltaHeight) {
114                         doResize = border.modalPanel.invokeEvent("resize", event, null, element);
115                     } else if (diff.deltaX || diff.deltaY) {
116                         doResize = border.modalPanel.invokeEvent("move", event, null, element);
117                     }
118 
119                     var vetoes;
120 
121                     if (doResize) {
122                         vetoes = border.modalPanel.doResizeOrMove(diff);
123                     }
124 
125                     if (vetoes) {
126                         if (!vetoes.x) {
127                             border.dragX = evtX;
128                         } else {
129                             if (!diff.deltaX) {
130                                 border.dragX -= vetoes.vx || 0;
131                             } else {
132                                 border.dragX += vetoes.vx || 0;
133                             }
134                         }
135 
136                         if (!vetoes.y) {
137                             border.dragY = evtY;
138                         } else {
139                             if (!diff.deltaY) {
140                                 border.dragY -= vetoes.vy || 0;
141                             } else {
142                                 border.dragY += vetoes.vy || 0;
143                             }
144                         }
145                     }
146                 }
147             },
148 
149             endDrag: function(event) {
150                 var border = event.data.border;
151                 border.doingDrag = undefined;
152 
153                 $(document).unbind('mousemove', border.doDrag);
154                 $(document).unbind('mouseup', border.endDrag);
155 
156                 border.modalPanel.endDrag(border);
157 
158                 document.onselectstart = border.onselectStartHandler;
159                 border.onselectStartHandler = null;
160             },
161 
162             doPosition: function() {
163                 this.sizer.prototype.doPosition(this.modalPanel, this.element);	//TODO remove prototype
164             }
165         }
166 
167     })());
168 
169 })(RichFaces.jQuery, window.RichFaces);