source: extensions/GrumPluginClasses/js/external/iNestedSortablePack.js @ 10884

Last change on this file since 10884 was 10884, checked in by grum, 13 years ago

fix bug:2302 - release 3.5.1

  • Property svn:executable set to *
File size: 58.5 KB
Line 
1/**
2 * file build from :
3 *
4 *  #  Interface Elements for jQuery
5 *     http://interface.eyecon.ro
6 *     Copyright (c) 2006 Stefan Petre
7 *     Dual licensed under the MIT (MIT-LICENSE.txt)
8 *     and GPL (GPL-LICENSE.txt) licenses.
9 *      - iUtil
10 *      - iDrag
11 *      - iDrop
12 *      - iSort
13 *
14 *  #  Nested Sortable Plugin for jQuery/Interface Version 1.0.1
15 *     http://code.google.com/p/nestedsortables/
16 *     Copyright (c) 2007 Bernardo de Padua dos Santos
17 *     Dual licensed under the MIT (MIT-LICENSE.txt)
18 *     and GPL (GPL-LICENSE.txt) licenses.
19 *
20 *  Files unpacked with JSBeautifier
21 *     http://jsbeautifier.org/
22 *
23 */
24
25
26jQuery.iDrag = {
27    helper: null,
28    dragged: null,
29    destroy: function () {
30        return this.each(function () {
31            if (this.isDraggable) {
32                this.dragCfg.dhe.unbind('mousedown', jQuery.iDrag.draginit);
33                this.dragCfg = null;
34                this.isDraggable = false;
35                if (jQuery.browser.msie) {
36                    this.unselectable = "off"
37                } else {
38                    this.style.MozUserSelect = '';
39                    this.style.KhtmlUserSelect = '';
40                    this.style.userSelect = ''
41                }
42            }
43        })
44    },
45    draginit: function (e) {
46        if (jQuery.iDrag.dragged != null) {
47            jQuery.iDrag.dragstop(e);
48            return false
49        }
50        var elm = this.dragElem;
51        jQuery(document).bind('mousemove', jQuery.iDrag.dragmove).bind('mouseup', jQuery.iDrag.dragstop);
52        elm.dragCfg.pointer = jQuery.iUtil.getPointer(e);
53        elm.dragCfg.currentPointer = elm.dragCfg.pointer;
54        elm.dragCfg.init = false;
55        elm.dragCfg.fromHandler = this != this.dragElem;
56        jQuery.iDrag.dragged = elm;
57        if (elm.dragCfg.si && this != this.dragElem) {
58            parentPos = jQuery.iUtil.getPosition(elm.parentNode);
59            sliderSize = jQuery.iUtil.getSize(elm);
60            sliderPos = {
61                x: parseInt(jQuery.css(elm, 'left')) || 0,
62                y: parseInt(jQuery.css(elm, 'top')) || 0
63            };
64            dx = elm.dragCfg.currentPointer.x - parentPos.x - sliderSize.wb / 2 - sliderPos.x;
65            dy = elm.dragCfg.currentPointer.y - parentPos.y - sliderSize.hb / 2 - sliderPos.y;
66            jQuery.iSlider.dragmoveBy(elm, [dx, dy])
67        }
68        return jQuery.selectKeyHelper || false
69    },
70    dragstart: function (e) {
71        var elm = jQuery.iDrag.dragged;
72        elm.dragCfg.init = true;
73        var dEs = elm.style;
74        elm.dragCfg.oD = jQuery.css(elm, 'display');
75        elm.dragCfg.oP = jQuery.css(elm, 'position');
76        if (!elm.dragCfg.initialPosition) elm.dragCfg.initialPosition = elm.dragCfg.oP;
77        elm.dragCfg.oR = {
78            x: parseInt(jQuery.css(elm, 'left')) || 0,
79            y: parseInt(jQuery.css(elm, 'top')) || 0
80        };
81        elm.dragCfg.diffX = 0;
82        elm.dragCfg.diffY = 0;
83        if (jQuery.browser.msie) {
84            var oldBorder = jQuery.iUtil.getBorder(elm, true);
85            elm.dragCfg.diffX = oldBorder.l || 0;
86            elm.dragCfg.diffY = oldBorder.t || 0
87        }
88        elm.dragCfg.oC = jQuery.extend(jQuery.iUtil.getPosition(elm), jQuery.iUtil.getSize(elm));
89        if (elm.dragCfg.oP != 'relative' && elm.dragCfg.oP != 'absolute') {
90            dEs.position = 'relative'
91        }
92        jQuery.iDrag.helper.empty();
93        var clonedEl = elm.cloneNode(true);
94        jQuery(clonedEl).css({
95            display: 'block',
96            left: '0px',
97            top: '0px'
98        });
99        clonedEl.style.marginTop = '0';
100        clonedEl.style.marginRight = '0';
101        clonedEl.style.marginBottom = '0';
102        clonedEl.style.marginLeft = '0';
103        jQuery.iDrag.helper.append(clonedEl);
104        var dhs = jQuery.iDrag.helper.get(0).style;
105        if (elm.dragCfg.autoSize) {
106            dhs.width = 'auto';
107            dhs.height = 'auto'
108        } else {
109            dhs.height = elm.dragCfg.oC.hb + 'px';
110            dhs.width = elm.dragCfg.oC.wb + 'px'
111        }
112        dhs.display = 'block';
113        dhs.marginTop = '0px';
114        dhs.marginRight = '0px';
115        dhs.marginBottom = '0px';
116        dhs.marginLeft = '0px';
117        jQuery.extend(elm.dragCfg.oC, jQuery.iUtil.getSize(clonedEl));
118        if (elm.dragCfg.cursorAt) {
119            if (elm.dragCfg.cursorAt.left) {
120                elm.dragCfg.oR.x += elm.dragCfg.pointer.x - elm.dragCfg.oC.x - elm.dragCfg.cursorAt.left;
121                elm.dragCfg.oC.x = elm.dragCfg.pointer.x - elm.dragCfg.cursorAt.left
122            }
123            if (elm.dragCfg.cursorAt.top) {
124                elm.dragCfg.oR.y += elm.dragCfg.pointer.y - elm.dragCfg.oC.y - elm.dragCfg.cursorAt.top;
125                elm.dragCfg.oC.y = elm.dragCfg.pointer.y - elm.dragCfg.cursorAt.top
126            }
127            if (elm.dragCfg.cursorAt.right) {
128                elm.dragCfg.oR.x += elm.dragCfg.pointer.x - elm.dragCfg.oC.x - elm.dragCfg.oC.hb + elm.dragCfg.cursorAt.right;
129                elm.dragCfg.oC.x = elm.dragCfg.pointer.x - elm.dragCfg.oC.wb + elm.dragCfg.cursorAt.right
130            }
131            if (elm.dragCfg.cursorAt.bottom) {
132                elm.dragCfg.oR.y += elm.dragCfg.pointer.y - elm.dragCfg.oC.y - elm.dragCfg.oC.hb + elm.dragCfg.cursorAt.bottom;
133                elm.dragCfg.oC.y = elm.dragCfg.pointer.y - elm.dragCfg.oC.hb + elm.dragCfg.cursorAt.bottom
134            }
135        }
136        elm.dragCfg.nx = elm.dragCfg.oR.x;
137        elm.dragCfg.ny = elm.dragCfg.oR.y;
138        if (elm.dragCfg.insideParent || elm.dragCfg.containment == 'parent') {
139            parentBorders = jQuery.iUtil.getBorder(elm.parentNode, true);
140            elm.dragCfg.oC.x = elm.offsetLeft + (jQuery.browser.msie ? 0 : jQuery.browser.opera ? -parentBorders.l : parentBorders.l);
141            elm.dragCfg.oC.y = elm.offsetTop + (jQuery.browser.msie ? 0 : jQuery.browser.opera ? -parentBorders.t : parentBorders.t);
142            jQuery(elm.parentNode).append(jQuery.iDrag.helper.get(0))
143        }
144        if (elm.dragCfg.containment) {
145            jQuery.iDrag.getContainment(elm);
146            elm.dragCfg.onDragModifier.containment = jQuery.iDrag.fitToContainer
147        }
148        if (elm.dragCfg.si) {
149            jQuery.iSlider.modifyContainer(elm)
150        }
151        dhs.left = elm.dragCfg.oC.x - elm.dragCfg.diffX + 'px';
152        dhs.top = elm.dragCfg.oC.y - elm.dragCfg.diffY + 'px';
153        dhs.width = elm.dragCfg.oC.wb + 'px';
154        dhs.height = elm.dragCfg.oC.hb + 'px';
155        jQuery.iDrag.dragged.dragCfg.prot = false;
156        if (elm.dragCfg.gx) {
157            elm.dragCfg.onDragModifier.grid = jQuery.iDrag.snapToGrid
158        }
159        if (elm.dragCfg.zIndex != false) {
160            jQuery.iDrag.helper.css('zIndex', elm.dragCfg.zIndex)
161        }
162        if (elm.dragCfg.opacity) {
163            jQuery.iDrag.helper.css('opacity', elm.dragCfg.opacity);
164            if (window.ActiveXObject) {
165                jQuery.iDrag.helper.css('filter', 'alpha(opacity=' + elm.dragCfg.opacity * 100 + ')')
166            }
167        }
168        if (elm.dragCfg.frameClass) {
169            jQuery.iDrag.helper.addClass(elm.dragCfg.frameClass);
170            jQuery.iDrag.helper.get(0).firstChild.style.display = 'none'
171        }
172        if (elm.dragCfg.onStart) elm.dragCfg.onStart.apply(elm, [clonedEl, elm.dragCfg.oR.x, elm.dragCfg.oR.y]);
173        if (jQuery.iDrop && jQuery.iDrop.count > 0) {
174            jQuery.iDrop.highlight(elm)
175        }
176        if (elm.dragCfg.ghosting == false) {
177            dEs.display = 'none'
178        }
179        return false
180    },
181    getContainment: function (elm) {
182        if (elm.dragCfg.containment.constructor == String) {
183            if (elm.dragCfg.containment == 'parent') {
184                elm.dragCfg.cont = jQuery.extend({
185                    x: 0,
186                    y: 0
187                }, jQuery.iUtil.getSize(elm.parentNode));
188                var contBorders = jQuery.iUtil.getBorder(elm.parentNode, true);
189                elm.dragCfg.cont.w = elm.dragCfg.cont.wb - contBorders.l - contBorders.r;
190                elm.dragCfg.cont.h = elm.dragCfg.cont.hb - contBorders.t - contBorders.b
191            } else if (elm.dragCfg.containment == 'document') {
192                var clnt = jQuery.iUtil.getClient();
193                elm.dragCfg.cont = {
194                    x: 0,
195                    y: 0,
196                    w: clnt.w,
197                    h: clnt.h
198                }
199            }
200        } else if (elm.dragCfg.containment.constructor == Array) {
201            elm.dragCfg.cont = {
202                x: parseInt(elm.dragCfg.containment[0]) || 0,
203                y: parseInt(elm.dragCfg.containment[1]) || 0,
204                w: parseInt(elm.dragCfg.containment[2]) || 0,
205                h: parseInt(elm.dragCfg.containment[3]) || 0
206            }
207        }
208        elm.dragCfg.cont.dx = elm.dragCfg.cont.x - elm.dragCfg.oC.x;
209        elm.dragCfg.cont.dy = elm.dragCfg.cont.y - elm.dragCfg.oC.y
210    },
211    hidehelper: function (dragged) {
212        if (dragged.dragCfg.insideParent || dragged.dragCfg.containment == 'parent') {
213            jQuery('body', document).append(jQuery.iDrag.helper.get(0))
214        }
215        jQuery.iDrag.helper.empty().hide().css('opacity', 1);
216        if (window.ActiveXObject) {
217            jQuery.iDrag.helper.css('filter', 'alpha(opacity=100)')
218        }
219    },
220    dragstop: function (e) {
221        jQuery(document).unbind('mousemove', jQuery.iDrag.dragmove).unbind('mouseup', jQuery.iDrag.dragstop);
222        if (jQuery.iDrag.dragged == null) {
223            return
224        }
225        var dragged = jQuery.iDrag.dragged;
226        jQuery.iDrag.dragged = null;
227        if (dragged.dragCfg.init == false) {
228            return false
229        }
230        if (dragged.dragCfg.so == true) {
231            jQuery(dragged).css('position', dragged.dragCfg.oP)
232        }
233        var dEs = dragged.style;
234        if (dragged.si) {
235            jQuery.iDrag.helper.css('cursor', 'move')
236        }
237        if (dragged.dragCfg.frameClass) {
238            jQuery.iDrag.helper.removeClass(dragged.dragCfg.frameClass)
239        }
240        if (dragged.dragCfg.revert == false) {
241            if (dragged.dragCfg.fx > 0) {
242                if (!dragged.dragCfg.axis || dragged.dragCfg.axis == 'horizontally') {
243                    var x = new jQuery.fx(dragged, {
244                        duration: dragged.dragCfg.fx
245                    }, 'left');
246                    x.custom(dragged.dragCfg.oR.x, dragged.dragCfg.nRx)
247                }
248                if (!dragged.dragCfg.axis || dragged.dragCfg.axis == 'vertically') {
249                    var y = new jQuery.fx(dragged, {
250                        duration: dragged.dragCfg.fx
251                    }, 'top');
252                    y.custom(dragged.dragCfg.oR.y, dragged.dragCfg.nRy)
253                }
254            } else {
255                if (!dragged.dragCfg.axis || dragged.dragCfg.axis == 'horizontally') dragged.style.left = dragged.dragCfg.nRx + 'px';
256                if (!dragged.dragCfg.axis || dragged.dragCfg.axis == 'vertically') dragged.style.top = dragged.dragCfg.nRy + 'px'
257            }
258            jQuery.iDrag.hidehelper(dragged);
259            if (dragged.dragCfg.ghosting == false) {
260                jQuery(dragged).css('display', dragged.dragCfg.oD)
261            }
262        } else if (dragged.dragCfg.fx > 0) {
263            dragged.dragCfg.prot = true;
264            var dh = false;
265            if (jQuery.iDrop && jQuery.iSort && dragged.dragCfg.so) {
266                dh = jQuery.iUtil.getPosition(jQuery.iSort.helper.get(0))
267            }
268            jQuery.iDrag.helper.animate({
269                left: dh ? dh.x : dragged.dragCfg.oC.x,
270                top: dh ? dh.y : dragged.dragCfg.oC.y
271            }, dragged.dragCfg.fx, function () {
272                dragged.dragCfg.prot = false;
273                if (dragged.dragCfg.ghosting == false) {
274                    dragged.style.display = dragged.dragCfg.oD
275                }
276                jQuery.iDrag.hidehelper(dragged)
277            })
278        } else {
279            jQuery.iDrag.hidehelper(dragged);
280            if (dragged.dragCfg.ghosting == false) {
281                jQuery(dragged).css('display', dragged.dragCfg.oD)
282            }
283        }
284        if (jQuery.iDrop && jQuery.iDrop.count > 0) {
285            jQuery.iDrop.checkdrop(dragged)
286        }
287        if (jQuery.iSort && dragged.dragCfg.so) {
288            jQuery.iSort.check(dragged)
289        }
290        if (dragged.dragCfg.onChange && (dragged.dragCfg.nRx != dragged.dragCfg.oR.x || dragged.dragCfg.nRy != dragged.dragCfg.oR.y)) {
291            dragged.dragCfg.onChange.apply(dragged, dragged.dragCfg.lastSi || [0, 0, dragged.dragCfg.nRx, dragged.dragCfg.nRy])
292        }
293        if (dragged.dragCfg.onStop) dragged.dragCfg.onStop.apply(dragged);
294        return false
295    },
296    snapToGrid: function (x, y, dx, dy) {
297        if (dx != 0) dx = parseInt((dx + (this.dragCfg.gx * dx / Math.abs(dx)) / 2) / this.dragCfg.gx) * this.dragCfg.gx;
298        if (dy != 0) dy = parseInt((dy + (this.dragCfg.gy * dy / Math.abs(dy)) / 2) / this.dragCfg.gy) * this.dragCfg.gy;
299        return {
300            dx: dx,
301            dy: dy,
302            x: 0,
303            y: 0
304        }
305    },
306    fitToContainer: function (x, y, dx, dy) {
307        dx = Math.min(Math.max(dx, this.dragCfg.cont.dx), this.dragCfg.cont.w + this.dragCfg.cont.dx - this.dragCfg.oC.wb);
308        dy = Math.min(Math.max(dy, this.dragCfg.cont.dy), this.dragCfg.cont.h + this.dragCfg.cont.dy - this.dragCfg.oC.hb);
309        return {
310            dx: dx,
311            dy: dy,
312            x: 0,
313            y: 0
314        }
315    },
316    dragmove: function (e) {
317        if (jQuery.iDrag.dragged == null || jQuery.iDrag.dragged.dragCfg.prot == true) {
318            return
319        }
320        var dragged = jQuery.iDrag.dragged;
321        dragged.dragCfg.currentPointer = jQuery.iUtil.getPointer(e);
322        if (dragged.dragCfg.init == false) {
323            distance = Math.sqrt(Math.pow(dragged.dragCfg.pointer.x - dragged.dragCfg.currentPointer.x, 2) + Math.pow(dragged.dragCfg.pointer.y - dragged.dragCfg.currentPointer.y, 2));
324            if (distance < dragged.dragCfg.snapDistance) {
325                return
326            } else {
327                jQuery.iDrag.dragstart(e)
328            }
329        }
330        var dx = dragged.dragCfg.currentPointer.x - dragged.dragCfg.pointer.x;
331        var dy = dragged.dragCfg.currentPointer.y - dragged.dragCfg.pointer.y;
332        for (var i in dragged.dragCfg.onDragModifier) {
333            var newCoords = dragged.dragCfg.onDragModifier[i].apply(dragged, [dragged.dragCfg.oR.x + dx, dragged.dragCfg.oR.y + dy, dx, dy]);
334            if (newCoords && newCoords.constructor == Object) {
335                dx = i != 'user' ? newCoords.dx : (newCoords.x - dragged.dragCfg.oR.x);
336                dy = i != 'user' ? newCoords.dy : (newCoords.y - dragged.dragCfg.oR.y)
337            }
338        }
339        dragged.dragCfg.nx = dragged.dragCfg.oC.x + dx - dragged.dragCfg.diffX;
340        dragged.dragCfg.ny = dragged.dragCfg.oC.y + dy - dragged.dragCfg.diffY;
341        if (dragged.dragCfg.si && (dragged.dragCfg.onSlide || dragged.dragCfg.onChange)) {
342            jQuery.iSlider.onSlide(dragged, dragged.dragCfg.nx, dragged.dragCfg.ny)
343        }
344        if (dragged.dragCfg.onDrag) dragged.dragCfg.onDrag.apply(dragged, [dragged.dragCfg.oR.x + dx, dragged.dragCfg.oR.y + dy]);
345        if (!dragged.dragCfg.axis || dragged.dragCfg.axis == 'horizontally') {
346            dragged.dragCfg.nRx = dragged.dragCfg.oR.x + dx;
347            jQuery.iDrag.helper.get(0).style.left = dragged.dragCfg.nx + 'px'
348        }
349        if (!dragged.dragCfg.axis || dragged.dragCfg.axis == 'vertically') {
350            dragged.dragCfg.nRy = dragged.dragCfg.oR.y + dy;
351            jQuery.iDrag.helper.get(0).style.top = dragged.dragCfg.ny + 'px'
352        }
353        if (jQuery.iDrop && jQuery.iDrop.count > 0) {
354            jQuery.iDrop.checkhover(dragged)
355        }
356        return false
357    },
358    build: function (o) {
359        if (!jQuery.iDrag.helper) {
360            jQuery('body', document).append('<div id="dragHelper"></div>');
361            jQuery.iDrag.helper = jQuery('#dragHelper');
362            var el = jQuery.iDrag.helper.get(0);
363            var els = el.style;
364            els.position = 'absolute';
365            els.display = 'none';
366            els.cursor = 'move';
367            els.listStyle = 'none';
368            els.overflow = 'hidden';
369            if (window.ActiveXObject) {
370                el.unselectable = "on"
371            } else {
372                els.mozUserSelect = 'none';
373                els.userSelect = 'none';
374                els.KhtmlUserSelect = 'none'
375            }
376        }
377        if (!o) {
378            o = {}
379        }
380        return this.each(function () {
381            if (this.isDraggable || !jQuery.iUtil) return;
382            if (window.ActiveXObject) {
383                this.onselectstart = function () {
384                    return false
385                };
386                this.ondragstart = function () {
387                    return false
388                }
389            }
390            var el = this;
391            var dhe = o.handle ? jQuery(this).find(o.handle) : jQuery(this);
392            if (jQuery.browser.msie) {
393                dhe.each(function () {
394                    this.unselectable = "on"
395                })
396            } else {
397                dhe.css('-moz-user-select', 'none');
398                dhe.css('user-select', 'none');
399                dhe.css('-khtml-user-select', 'none')
400            }
401            this.dragCfg = {
402                dhe: dhe,
403                revert: o.revert ? true : false,
404                ghosting: o.ghosting ? true : false,
405                so: o.so ? o.so : false,
406                si: o.si ? o.si : false,
407                insideParent: o.insideParent ? o.insideParent : false,
408                zIndex: o.zIndex ? parseInt(o.zIndex) || 0 : false,
409                opacity: o.opacity ? parseFloat(o.opacity) : false,
410                fx: parseInt(o.fx) || null,
411                hpc: o.hpc ? o.hpc : false,
412                onDragModifier: {},
413                pointer: {},
414                onStart: o.onStart && o.onStart.constructor == Function ? o.onStart : false,
415                onStop: o.onStop && o.onStop.constructor == Function ? o.onStop : false,
416                onChange: o.onChange && o.onChange.constructor == Function ? o.onChange : false,
417                axis: /vertically|horizontally/.test(o.axis) ? o.axis : false,
418                snapDistance: o.snapDistance ? parseInt(o.snapDistance) || 0 : 0,
419                cursorAt: o.cursorAt ? o.cursorAt : false,
420                autoSize: o.autoSize ? true : false,
421                frameClass: o.frameClass || false
422            };
423            if (o.onDragModifier && o.onDragModifier.constructor == Function) this.dragCfg.onDragModifier.user = o.onDragModifier;
424            if (o.onDrag && o.onDrag.constructor == Function) this.dragCfg.onDrag = o.onDrag;
425            if (o.containment && ((o.containment.constructor == String && (o.containment == 'parent' || o.containment == 'document')) || (o.containment.constructor == Array && o.containment.length == 4))) {
426                this.dragCfg.containment = o.containment
427            }
428            if (o.fractions) {
429                this.dragCfg.fractions = o.fractions
430            }
431            if (o.grid) {
432                if (typeof o.grid == 'number') {
433                    this.dragCfg.gx = parseInt(o.grid) || 1;
434                    this.dragCfg.gy = parseInt(o.grid) || 1
435                } else if (o.grid.length == 2) {
436                    this.dragCfg.gx = parseInt(o.grid[0]) || 1;
437                    this.dragCfg.gy = parseInt(o.grid[1]) || 1
438                }
439            }
440            if (o.onSlide && o.onSlide.constructor == Function) {
441                this.dragCfg.onSlide = o.onSlide
442            }
443            this.isDraggable = true;
444            dhe.each(function () {
445                this.dragElem = el
446            });
447            dhe.bind('mousedown', jQuery.iDrag.draginit)
448        })
449    }
450};
451jQuery.fn.extend({
452    DraggableDestroy: jQuery.iDrag.destroy,
453    Draggable: jQuery.iDrag.build
454});
455jQuery.iDrop = {
456    fit: function (zonex, zoney, zonew, zoneh) {
457        return zonex <= jQuery.iDrag.dragged.dragCfg.nx && (zonex + zonew) >= (jQuery.iDrag.dragged.dragCfg.nx + jQuery.iDrag.dragged.dragCfg.oC.w) && zoney <= jQuery.iDrag.dragged.dragCfg.ny && (zoney + zoneh) >= (jQuery.iDrag.dragged.dragCfg.ny + jQuery.iDrag.dragged.dragCfg.oC.h) ? true : false
458    },
459    intersect: function (zonex, zoney, zonew, zoneh) {
460        return !(zonex > (jQuery.iDrag.dragged.dragCfg.nx + jQuery.iDrag.dragged.dragCfg.oC.w) || (zonex + zonew) < jQuery.iDrag.dragged.dragCfg.nx || zoney > (jQuery.iDrag.dragged.dragCfg.ny + jQuery.iDrag.dragged.dragCfg.oC.h) || (zoney + zoneh) < jQuery.iDrag.dragged.dragCfg.ny) ? true : false
461    },
462    pointer: function (zonex, zoney, zonew, zoneh) {
463        return zonex < jQuery.iDrag.dragged.dragCfg.currentPointer.x && (zonex + zonew) > jQuery.iDrag.dragged.dragCfg.currentPointer.x && zoney < jQuery.iDrag.dragged.dragCfg.currentPointer.y && (zoney + zoneh) > jQuery.iDrag.dragged.dragCfg.currentPointer.y ? true : false
464    },
465    overzone: false,
466    highlighted: {},
467    count: 0,
468    zones: {},
469    highlight: function (elm) {
470        if (jQuery.iDrag.dragged == null) {
471            return
472        }
473        var i;
474        jQuery.iDrop.highlighted = {};
475        var oneIsSortable = false;
476        for (i in jQuery.iDrop.zones) {
477            if (jQuery.iDrop.zones[i] != null) {
478                var iEL = jQuery.iDrop.zones[i].get(0);
479                if (jQuery(jQuery.iDrag.dragged).is('.' + iEL.dropCfg.a)) {
480                    if (iEL.dropCfg.m == false) {
481                        iEL.dropCfg.p = jQuery.extend(jQuery.iUtil.getPositionLite(iEL), jQuery.iUtil.getSizeLite(iEL));
482                        iEL.dropCfg.m = true
483                    }
484                    if (iEL.dropCfg.ac) {
485                        jQuery.iDrop.zones[i].addClass(iEL.dropCfg.ac)
486                    }
487                    jQuery.iDrop.highlighted[i] = jQuery.iDrop.zones[i];
488                    if (jQuery.iSort && iEL.dropCfg.s && jQuery.iDrag.dragged.dragCfg.so) {
489                        iEL.dropCfg.el = jQuery('.' + iEL.dropCfg.a, iEL);
490                        elm.style.display = 'none';
491                        jQuery.iSort.measure(iEL);
492                        iEL.dropCfg.os = jQuery.iSort.serialize(jQuery.attr(iEL, 'id')).hash;
493                        elm.style.display = elm.dragCfg.oD;
494                        oneIsSortable = true
495                    }
496                    if (iEL.dropCfg.onActivate) {
497                        iEL.dropCfg.onActivate.apply(jQuery.iDrop.zones[i].get(0), [jQuery.iDrag.dragged])
498                    }
499                }
500            }
501        }
502        if (oneIsSortable) {
503            jQuery.iSort.start()
504        }
505    },
506    remeasure: function () {
507        jQuery.iDrop.highlighted = {};
508        for (i in jQuery.iDrop.zones) {
509            if (jQuery.iDrop.zones[i] != null) {
510                var iEL = jQuery.iDrop.zones[i].get(0);
511                if (jQuery(jQuery.iDrag.dragged).is('.' + iEL.dropCfg.a)) {
512                    iEL.dropCfg.p = jQuery.extend(jQuery.iUtil.getPositionLite(iEL), jQuery.iUtil.getSizeLite(iEL));
513                    if (iEL.dropCfg.ac) {
514                        jQuery.iDrop.zones[i].addClass(iEL.dropCfg.ac)
515                    }
516                    jQuery.iDrop.highlighted[i] = jQuery.iDrop.zones[i];
517                    if (jQuery.iSort && iEL.dropCfg.s && jQuery.iDrag.dragged.dragCfg.so) {
518                        iEL.dropCfg.el = jQuery('.' + iEL.dropCfg.a, iEL);
519                        elm.style.display = 'none';
520                        jQuery.iSort.measure(iEL);
521                        elm.style.display = elm.dragCfg.oD
522                    }
523                }
524            }
525        }
526    },
527    checkhover: function (e) {
528        if (jQuery.iDrag.dragged == null) {
529            return
530        }
531        jQuery.iDrop.overzone = false;
532        var i;
533        var applyOnHover = false;
534        var hlt = 0;
535        for (i in jQuery.iDrop.highlighted) {
536            var iEL = jQuery.iDrop.highlighted[i].get(0);
537            if (jQuery.iDrop.overzone == false && jQuery.iDrop[iEL.dropCfg.t](iEL.dropCfg.p.x, iEL.dropCfg.p.y, iEL.dropCfg.p.wb, iEL.dropCfg.p.hb)) {
538                if (iEL.dropCfg.hc && iEL.dropCfg.h == false) {
539                    jQuery.iDrop.highlighted[i].addClass(iEL.dropCfg.hc)
540                }
541                if (iEL.dropCfg.h == false && iEL.dropCfg.onHover) {
542                    applyOnHover = true
543                }
544                iEL.dropCfg.h = true;
545                jQuery.iDrop.overzone = iEL;
546                if (jQuery.iSort && iEL.dropCfg.s && jQuery.iDrag.dragged.dragCfg.so) {
547                    jQuery.iSort.helper.get(0).className = iEL.dropCfg.shc;
548                    jQuery.iSort.checkhover(iEL)
549                }
550                hlt++
551            } else if (iEL.dropCfg.h == true) {
552                if (iEL.dropCfg.onOut) {
553                    iEL.dropCfg.onOut.apply(iEL, [e, jQuery.iDrag.helper.get(0).firstChild, iEL.dropCfg.fx])
554                }
555                if (iEL.dropCfg.hc) {
556                    jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.hc)
557                }
558                iEL.dropCfg.h = false
559            }
560        }
561        if (jQuery.iSort && !jQuery.iDrop.overzone && jQuery.iDrag.dragged.so) {
562            jQuery.iSort.helper.get(0).style.display = 'none'
563        }
564        if (applyOnHover) {
565            jQuery.iDrop.overzone.dropCfg.onHover.apply(jQuery.iDrop.overzone, [e, jQuery.iDrag.helper.get(0).firstChild])
566        }
567    },
568    checkdrop: function (e) {
569        var i;
570        for (i in jQuery.iDrop.highlighted) {
571            var iEL = jQuery.iDrop.highlighted[i].get(0);
572            if (iEL.dropCfg.ac) {
573                jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.ac)
574            }
575            if (iEL.dropCfg.hc) {
576                jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.hc)
577            }
578            if (iEL.dropCfg.s) {
579                jQuery.iSort.changed[jQuery.iSort.changed.length] = i
580            }
581            if (iEL.dropCfg.onDrop && iEL.dropCfg.h == true) {
582                iEL.dropCfg.h = false;
583                iEL.dropCfg.onDrop.apply(iEL, [e, iEL.dropCfg.fx])
584            }
585            iEL.dropCfg.m = false;
586            iEL.dropCfg.h = false
587        }
588        jQuery.iDrop.highlighted = {}
589    },
590    destroy: function () {
591        return this.each(function () {
592            if (this.isDroppable) {
593                if (this.dropCfg.s) {
594                    id = jQuery.attr(this, 'id');
595                    jQuery.iSort.collected[id] = null;
596                    jQuery('.' + this.dropCfg.a, this).DraggableDestroy()
597                }
598                jQuery.iDrop.zones['d' + this.idsa] = null;
599                this.isDroppable = false;
600                this.f = null
601            }
602        })
603    },
604    build: function (o) {
605        return this.each(function () {
606            if (this.isDroppable == true || !o.accept || !jQuery.iUtil || !jQuery.iDrag) {
607                return
608            }
609            this.dropCfg = {
610                a: o.accept,
611                ac: o.activeclass || false,
612                hc: o.hoverclass || false,
613                shc: o.helperclass || false,
614                onDrop: o.ondrop || o.onDrop || false,
615                onHover: o.onHover || o.onhover || false,
616                onOut: o.onOut || o.onout || false,
617                onActivate: o.onActivate || false,
618                t: o.tolerance && (o.tolerance == 'fit' || o.tolerance == 'intersect') ? o.tolerance : 'pointer',
619                fx: o.fx ? o.fx : false,
620                m: false,
621                h: false
622            };
623            if (o.sortable == true && jQuery.iSort) {
624                id = jQuery.attr(this, 'id');
625                jQuery.iSort.collected[id] = this.dropCfg.a;
626                this.dropCfg.s = true;
627                if (o.onChange) {
628                    this.dropCfg.onChange = o.onChange;
629                    this.dropCfg.os = jQuery.iSort.serialize(id).hash
630                }
631            }
632            this.isDroppable = true;
633            this.idsa = parseInt(Math.random() * 10000);
634            jQuery.iDrop.zones['d' + this.idsa] = jQuery(this);
635            jQuery.iDrop.count++
636        })
637    }
638};
639jQuery.fn.extend({
640    DroppableDestroy: jQuery.iDrop.destroy,
641    Droppable: jQuery.iDrop.build
642});
643jQuery.recallDroppables = jQuery.iDrop.remeasure;
644
645jQuery.iSort = {
646    changed: [],
647    collected: {},
648    helper: false,
649    inFrontOf: null,
650    start: function () {
651        if (jQuery.iDrag.dragged == null) {
652            return
653        }
654        var shs, margins, c, cs;
655        jQuery.iSort.helper.get(0).className = jQuery.iDrag.dragged.dragCfg.hpc;
656        shs = jQuery.iSort.helper.get(0).style;
657        shs.display = 'block';
658        jQuery.iSort.helper.oC = jQuery.extend(jQuery.iUtil.getPosition(jQuery.iSort.helper.get(0)), jQuery.iUtil.getSize(jQuery.iSort.helper.get(0)));
659        shs.width = jQuery.iDrag.dragged.dragCfg.oC.wb + 'px';
660        shs.height = jQuery.iDrag.dragged.dragCfg.oC.hb + 'px';
661        margins = jQuery.iUtil.getMargins(jQuery.iDrag.dragged);
662        shs.marginTop = margins.t;
663        shs.marginRight = margins.r;
664        shs.marginBottom = margins.b;
665        shs.marginLeft = margins.l;
666        if (jQuery.iDrag.dragged.dragCfg.ghosting == true) {
667            c = jQuery.iDrag.dragged.cloneNode(true);
668            cs = c.style;
669            cs.marginTop = '0px';
670            cs.marginRight = '0px';
671            cs.marginBottom = '0px';
672            cs.marginLeft = '0px';
673            cs.display = 'block';
674            jQuery.iSort.helper.empty().append(c)
675        }
676        jQuery(jQuery.iDrag.dragged).after(jQuery.iSort.helper.get(0));
677        jQuery.iDrag.dragged.style.display = 'none'
678    },
679    check: function (e) {
680        if (!e.dragCfg.so && jQuery.iDrop.overzone.sortable) {
681            if (e.dragCfg.onStop) e.dragCfg.onStop.apply(dragged);
682            jQuery(e).css('position', e.dragCfg.initialPosition || e.dragCfg.oP);
683            jQuery(e).DraggableDestroy();
684            jQuery(jQuery.iDrop.overzone).SortableAddItem(e)
685        }
686        jQuery.iSort.helper.removeClass(e.dragCfg.hpc).html('&nbsp;');
687        jQuery.iSort.inFrontOf = null;
688        var shs = jQuery.iSort.helper.get(0).style;
689        shs.display = 'none';
690        jQuery.iSort.helper.after(e);
691        if (e.dragCfg.fx > 0) {
692            jQuery(e).fadeIn(e.dragCfg.fx)
693        }
694        jQuery('body').append(jQuery.iSort.helper.get(0));
695        var ts = [];
696        var fnc = false;
697        for (var i = 0; i < jQuery.iSort.changed.length; i++) {
698            var iEL = jQuery.iDrop.zones[jQuery.iSort.changed[i]].get(0);
699            var id = jQuery.attr(iEL, 'id');
700            var ser = jQuery.iSort.serialize(id);
701            if (iEL.dropCfg.os != ser.hash) {
702                iEL.dropCfg.os = ser.hash;
703                if (fnc == false && iEL.dropCfg.onChange) {
704                    fnc = iEL.dropCfg.onChange
705                }
706                ser.id = id;
707                ts[ts.length] = ser
708            }
709        }
710        jQuery.iSort.changed = [];
711        if (fnc != false && ts.length > 0) {
712            fnc(ts)
713        }
714    },
715    checkhover: function (e, o) {
716        if (!jQuery.iDrag.dragged) return;
717        var cur = false;
718        var i = 0;
719        if (e.dropCfg.el.size() > 0) {
720            for (i = e.dropCfg.el.size(); i > 0; i--) {
721                if (e.dropCfg.el.get(i - 1) != jQuery.iDrag.dragged) {
722                    if (!e.sortCfg.floats) {
723                        if ((e.dropCfg.el.get(i - 1).pos.y + e.dropCfg.el.get(i - 1).pos.hb / 2) > jQuery.iDrag.dragged.dragCfg.ny) {
724                            cur = e.dropCfg.el.get(i - 1)
725                        } else {
726                            break
727                        }
728                    } else {
729                        if ((e.dropCfg.el.get(i - 1).pos.x + e.dropCfg.el.get(i - 1).pos.wb / 2) > jQuery.iDrag.dragged.dragCfg.nx && (e.dropCfg.el.get(i - 1).pos.y + e.dropCfg.el.get(i - 1).pos.hb / 2) > jQuery.iDrag.dragged.dragCfg.ny) {
730                            cur = e.dropCfg.el.get(i - 1)
731                        }
732                    }
733                }
734            }
735        }
736        if (cur && jQuery.iSort.inFrontOf != cur) {
737            jQuery.iSort.inFrontOf = cur;
738            jQuery(cur).before(jQuery.iSort.helper.get(0))
739        } else if (!cur && (jQuery.iSort.inFrontOf != null || jQuery.iSort.helper.get(0).parentNode != e)) {
740            jQuery.iSort.inFrontOf = null;
741            jQuery(e).append(jQuery.iSort.helper.get(0))
742        }
743        jQuery.iSort.helper.get(0).style.display = 'block'
744    },
745    measure: function (e) {
746        if (jQuery.iDrag.dragged == null) {
747            return
748        }
749        e.dropCfg.el.each(function () {
750            this.pos = jQuery.extend(jQuery.iUtil.getSizeLite(this), jQuery.iUtil.getPositionLite(this))
751        })
752    },
753    serialize: function (s) {
754        var i;
755        var h = '';
756        var o = {};
757        if (s) {
758            if (jQuery.iSort.collected[s]) {
759                o[s] = [];
760                jQuery('#' + s + ' .' + jQuery.iSort.collected[s]).each(function () {
761                    if (h.length > 0) {
762                        h += '&'
763                    }
764                    h += s + '[]=' + jQuery.attr(this, 'id');
765                    o[s][o[s].length] = jQuery.attr(this, 'id')
766                })
767            } else {
768                for (a in s) {
769                    if (jQuery.iSort.collected[s[a]]) {
770                        o[s[a]] = [];
771                        jQuery('#' + s[a] + ' .' + jQuery.iSort.collected[s[a]]).each(function () {
772                            if (h.length > 0) {
773                                h += '&'
774                            }
775                            h += s[a] + '[]=' + jQuery.attr(this, 'id');
776                            o[s[a]][o[s[a]].length] = jQuery.attr(this, 'id')
777                        })
778                    }
779                }
780            }
781        } else {
782            for (i in jQuery.iSort.collected) {
783                o[i] = [];
784                jQuery('#' + i + ' .' + jQuery.iSort.collected[i]).each(function () {
785                    if (h.length > 0) {
786                        h += '&'
787                    }
788                    h += i + '[]=' + jQuery.attr(this, 'id');
789                    o[i][o[i].length] = jQuery.attr(this, 'id')
790                })
791            }
792        }
793        return {
794            hash: h,
795            o: o
796        }
797    },
798    addItem: function (e) {
799        if (!e.childNodes) {
800            return
801        }
802        return this.each(function () {
803            if (!this.sortCfg || !jQuery(e).is('.' + this.sortCfg.accept)) jQuery(e).addClass(this.sortCfg.accept);
804            jQuery(e).Draggable(this.sortCfg.dragCfg)
805        })
806    },
807    destroy: function () {
808        return this.each(function () {
809            jQuery('.' + this.sortCfg.accept).DraggableDestroy();
810            jQuery(this).DroppableDestroy();
811            this.sortCfg = null;
812            this.isSortable = null
813        })
814    },
815    build: function (o) {
816        if (o.accept && jQuery.iUtil && jQuery.iDrag && jQuery.iDrop) {
817            if (!jQuery.iSort.helper) {
818                jQuery('body', document).append('<div id="sortHelper">&nbsp;</div>');
819                jQuery.iSort.helper = jQuery('#sortHelper');
820                jQuery.iSort.helper.get(0).style.display = 'none'
821            }
822            this.Droppable({
823                accept: o.accept,
824                activeclass: o.activeclass ? o.activeclass : false,
825                hoverclass: o.hoverclass ? o.hoverclass : false,
826                helperclass: o.helperclass ? o.helperclass : false,
827                onHover: o.onHover || o.onhover,
828                onOut: o.onOut || o.onout,
829                sortable: true,
830                onChange: o.onChange || o.onchange,
831                fx: o.fx ? o.fx : false,
832                ghosting: o.ghosting ? true : false,
833                tolerance: o.tolerance ? o.tolerance : 'intersect'
834            });
835            return this.each(function () {
836                var dragCfg = {
837                    revert: o.revert ? true : false,
838                    zindex: 3000,
839                    opacity: o.opacity ? parseFloat(o.opacity) : false,
840                    hpc: o.helperclass ? o.helperclass : false,
841                    fx: o.fx ? o.fx : false,
842                    so: true,
843                    ghosting: o.ghosting ? true : false,
844                    handle: o.handle ? o.handle : null,
845                    containment: o.containment ? o.containment : null,
846                    onStart: o.onStart && o.onStart.constructor == Function ? o.onStart : false,
847                    onDrag: o.onDrag && o.onDrag.constructor == Function ? o.onDrag : false,
848                    onStop: o.onStop && o.onStop.constructor == Function ? o.onStop : false,
849                    axis: /vertically|horizontally/.test(o.axis) ? o.axis : false,
850                    snapDistance: o.snapDistance ? parseInt(o.snapDistance) || 0 : false,
851                    cursorAt: o.cursorAt ? o.cursorAt : false
852                };
853                jQuery('.' + o.accept, this).Draggable(dragCfg);
854                this.isSortable = true;
855                this.sortCfg = {
856                    accept: o.accept,
857                    revert: o.revert ? true : false,
858                    zindex: 3000,
859                    opacity: o.opacity ? parseFloat(o.opacity) : false,
860                    hpc: o.helperclass ? o.helperclass : false,
861                    fx: o.fx ? o.fx : false,
862                    so: true,
863                    ghosting: o.ghosting ? true : false,
864                    handle: o.handle ? o.handle : null,
865                    containment: o.containment ? o.containment : null,
866                    floats: o.floats ? true : false,
867                    dragCfg: dragCfg
868                }
869            })
870        }
871    }
872};
873jQuery.fn.extend({
874    Sortable: jQuery.iSort.build,
875    SortableAddItem: jQuery.iSort.addItem,
876    SortableDestroy: jQuery.iSort.destroy
877});
878jQuery.SortSerialize = jQuery.iSort.serialize;
879
880jQuery.iUtil = {
881    getPosition: function (e) {
882        var x = 0;
883        var y = 0;
884        var es = e.style;
885        var restoreStyles = false;
886        if (jQuery(e).css('display') == 'none') {
887            var oldVisibility = es.visibility;
888            var oldPosition = es.position;
889            restoreStyles = true;
890            es.visibility = 'hidden';
891            es.display = 'block';
892            es.position = 'absolute'
893        }
894        var el = e;
895        while (el) {
896            x += el.offsetLeft + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderLeftWidth) || 0 : 0);
897            y += el.offsetTop + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderTopWidth) || 0 : 0);
898            el = el.offsetParent
899        }
900        el = e;
901        while (el && el.tagName && el.tagName.toLowerCase() != 'body') {
902            x -= el.scrollLeft || 0;
903            y -= el.scrollTop || 0;
904            el = el.parentNode
905        }
906        if (restoreStyles == true) {
907            es.display = 'none';
908            es.position = oldPosition;
909            es.visibility = oldVisibility
910        }
911        return {
912            x: x,
913            y: y
914        }
915    },
916    getPositionLite: function (el) {
917        var x = 0,
918            y = 0;
919        while (el) {
920            x += el.offsetLeft || 0;
921            y += el.offsetTop || 0;
922            el = el.offsetParent
923        }
924        return {
925            x: x,
926            y: y
927        }
928    },
929    getSize: function (e) {
930        var w = jQuery.css(e, 'width');
931        var h = jQuery.css(e, 'height');
932        var wb = 0;
933        var hb = 0;
934        var es = e.style;
935        if (jQuery(e).css('display') != 'none') {
936            wb = e.offsetWidth;
937            hb = e.offsetHeight
938        } else {
939            var oldVisibility = es.visibility;
940            var oldPosition = es.position;
941            es.visibility = 'hidden';
942            es.display = 'block';
943            es.position = 'absolute';
944            wb = e.offsetWidth;
945            hb = e.offsetHeight;
946            es.display = 'none';
947            es.position = oldPosition;
948            es.visibility = oldVisibility
949        }
950        return {
951            w: w,
952            h: h,
953            wb: wb,
954            hb: hb
955        }
956    },
957    getSizeLite: function (el) {
958        return {
959            wb: el.offsetWidth || 0,
960            hb: el.offsetHeight || 0
961        }
962    },
963    getClient: function (e) {
964        var h, w, de;
965        if (e) {
966            w = e.clientWidth;
967            h = e.clientHeight
968        } else {
969            de = document.documentElement;
970            w = window.innerWidth || self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
971            h = window.innerHeight || self.innerHeight || (de && de.clientHeight) || document.body.clientHeight
972        }
973        return {
974            w: w,
975            h: h
976        }
977    },
978    getScroll: function (e) {
979        var t = 0,
980            l = 0,
981            w = 0,
982            h = 0,
983            iw = 0,
984            ih = 0;
985        if (e && e.nodeName.toLowerCase() != 'body') {
986            t = e.scrollTop;
987            l = e.scrollLeft;
988            w = e.scrollWidth;
989            h = e.scrollHeight;
990            iw = 0;
991            ih = 0
992        } else {
993            if (document.documentElement) {
994                t = document.documentElement.scrollTop;
995                l = document.documentElement.scrollLeft;
996                w = document.documentElement.scrollWidth;
997                h = document.documentElement.scrollHeight
998            } else if (document.body) {
999                t = document.body.scrollTop;
1000                l = document.body.scrollLeft;
1001                w = document.body.scrollWidth;
1002                h = document.body.scrollHeight
1003            }
1004            iw = self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;
1005            ih = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
1006        }
1007        return {
1008            t: t,
1009            l: l,
1010            w: w,
1011            h: h,
1012            iw: iw,
1013            ih: ih
1014        }
1015    },
1016    getMargins: function (e, toInteger) {
1017        var el = jQuery(e);
1018        var t = el.css('marginTop') || '';
1019        var r = el.css('marginRight') || '';
1020        var b = el.css('marginBottom') || '';
1021        var l = el.css('marginLeft') || '';
1022        if (toInteger) return {
1023            t: parseInt(t) || 0,
1024            r: parseInt(r) || 0,
1025            b: parseInt(b) || 0,
1026            l: parseInt(l)
1027        };
1028        else return {
1029            t: t,
1030            r: r,
1031            b: b,
1032            l: l
1033        }
1034    },
1035    getPadding: function (e, toInteger) {
1036        var el = jQuery(e);
1037        var t = el.css('paddingTop') || '';
1038        var r = el.css('paddingRight') || '';
1039        var b = el.css('paddingBottom') || '';
1040        var l = el.css('paddingLeft') || '';
1041        if (toInteger) return {
1042            t: parseInt(t) || 0,
1043            r: parseInt(r) || 0,
1044            b: parseInt(b) || 0,
1045            l: parseInt(l)
1046        };
1047        else return {
1048            t: t,
1049            r: r,
1050            b: b,
1051            l: l
1052        }
1053    },
1054    getBorder: function (e, toInteger) {
1055        var el = jQuery(e);
1056        var t = el.css('borderTopWidth') || '';
1057        var r = el.css('borderRightWidth') || '';
1058        var b = el.css('borderBottomWidth') || '';
1059        var l = el.css('borderLeftWidth') || '';
1060        if (toInteger) return {
1061            t: parseInt(t) || 0,
1062            r: parseInt(r) || 0,
1063            b: parseInt(b) || 0,
1064            l: parseInt(l) || 0
1065        };
1066        else return {
1067            t: t,
1068            r: r,
1069            b: b,
1070            l: l
1071        }
1072    },
1073    getPointer: function (event) {
1074        var x = event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)) || 0;
1075        var y = event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)) || 0;
1076        return {
1077            x: x,
1078            y: y
1079        }
1080    },
1081    traverseDOM: function (nodeEl, func) {
1082        func(nodeEl);
1083        nodeEl = nodeEl.firstChild;
1084        while (nodeEl) {
1085            jQuery.iUtil.traverseDOM(nodeEl, func);
1086            nodeEl = nodeEl.nextSibling
1087        }
1088    },
1089    purgeEvents: function (nodeEl) {
1090        jQuery.iUtil.traverseDOM(nodeEl, function (el) {
1091            for (var attr in el) {
1092                if (typeof el[attr] === 'function') {
1093                    el[attr] = null
1094                }
1095            }
1096        })
1097    },
1098    centerEl: function (el, axis) {
1099        var clientScroll = jQuery.iUtil.getScroll();
1100        var windowSize = jQuery.iUtil.getSize(el);
1101        if (!axis || axis == 'vertically') jQuery(el).css({
1102            top: clientScroll.t + ((Math.max(clientScroll.h, clientScroll.ih) - clientScroll.t - windowSize.hb) / 2) + 'px'
1103        });
1104        if (!axis || axis == 'horizontally') jQuery(el).css({
1105            left: clientScroll.l + ((Math.max(clientScroll.w, clientScroll.iw) - clientScroll.l - windowSize.wb) / 2) + 'px'
1106        })
1107    },
1108    fixPNG: function (el, emptyGIF) {
1109        var images = jQuery('img[@src*="png"]', el || document),
1110            png;
1111        images.each(function () {
1112            png = this.src;
1113            this.src = emptyGIF;
1114            this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + png + "')"
1115        })
1116    }
1117};
1118[].indexOf || (Array.prototype.indexOf = function (v, n) {
1119    n = (n == null) ? 0 : n;
1120    var m = this.length;
1121    for (var i = n; i < m; i++) if (this[i] == v) return i;
1122    return -1
1123});
1124
1125jQuery.iNestedSortable = {
1126    checkHover: function (e, o) {
1127        if (e.isNestedSortable) {
1128            jQuery.iNestedSortable.scroll(e);
1129            return jQuery.iNestedSortable.newCheckHover(e)
1130        } else {
1131            return jQuery.iNestedSortable.oldCheckHover(e, o)
1132        }
1133    },
1134    oldCheckHover: jQuery.iSort.checkhover,
1135    newCheckHover: function (e) {
1136        if (!jQuery.iDrag.dragged) {
1137            return
1138        }
1139        if (!(e.dropCfg.el.size() > 0)) {
1140            return
1141        }
1142        if (!e.nestedSortCfg.remeasured) {
1143            jQuery.iSort.measure(e);
1144            e.nestedSortCfg.remeasured = true
1145        }
1146        var a = jQuery.iNestedSortable.findPrecedingItem(e);
1147        var b = jQuery.iNestedSortable.shouldNestItem(e, a);
1148        var c = (!a) ? jQuery.iNestedSortable.isTouchingFirstItem(e) : false;
1149        var d = false;
1150        if (a) {
1151            if (e.nestedSortCfg.lastPrecedingItem === a && e.nestedSortCfg.lastShouldNest === b) {
1152                d = true
1153            }
1154        } else if (e.nestedSortCfg.lastPrecedingItem === a && e.nestedSortCfg.lastTouchingFirst === c) {
1155            d = true
1156        }
1157        e.nestedSortCfg.lastPrecedingItem = a;
1158        e.nestedSortCfg.lastShouldNest = b;
1159        e.nestedSortCfg.lastTouchingFirst = c;
1160        if (d) {
1161            return
1162        }
1163        if (a !== null) {
1164            if (b) {
1165                jQuery.iNestedSortable.nestItem(e, a)
1166            } else {
1167                jQuery.iNestedSortable.appendItem(e, a)
1168            }
1169        } else if (c) {
1170            jQuery.iNestedSortable.insertOnTop(e)
1171        }
1172    },
1173    scroll: function (e) {
1174        if (!e.nestedSortCfg.autoScroll) {
1175            return false
1176        }
1177        var a = e.nestedSortCfg.scrollSensitivity;
1178        var b = e.nestedSortCfg.scrollSpeed;
1179        var c = jQuery.iDrag.dragged.dragCfg.currentPointer;
1180        var d = jQuery.iUtil.getScroll();
1181        if ((c.y - d.ih) - d.t > -a) {
1182            window.scrollBy(0, b)
1183        }
1184        if (c.y - d.t < a) {
1185            window.scrollBy(0, -b)
1186        }
1187    },
1188    check: function (a) {
1189        jQuery.iNestedSortable.newCheck(a);
1190        return jQuery.iNestedSortable.oldCheck(a)
1191    },
1192    oldCheck: jQuery.iSort.check,
1193    newCheck: function (a) {
1194        if (jQuery.iNestedSortable.latestNestingClass && jQuery.iNestedSortable.currentNesting) {
1195            jQuery.iNestedSortable.currentNesting.removeClass(jQuery.iNestedSortable.latestNestingClass);
1196            jQuery.iNestedSortable.currentNesting = null;
1197            jQuery.iNestedSortable.latestNestingClass = ""
1198        }
1199        if (jQuery.iDrop.overzone.isNestedSortable) {
1200            jQuery.iDrop.overzone.nestedSortCfg.remeasured = false
1201        }
1202    },
1203    serialize: function (s) {
1204        if (jQuery('#' + s).get(0).isNestedSortable) {
1205            return jQuery.iNestedSortable.newSerialize(s)
1206        } else {
1207            return jQuery.iNestedSortable.oldSerialize(s)
1208        }
1209    },
1210    oldSerialize: jQuery.iSort.serialize,
1211    newSerialize: function (s) {
1212        var i;
1213        var h = '';
1214        var j = '';
1215        var o = {};
1216        var e;
1217        var k = function (f) {
1218                var g = [];
1219                thisChildren = jQuery(f).children('.' + jQuery.iSort.collected[s]);
1220                thisChildren.each(function (i) {
1221                    var a = jQuery.attr(this, 'id');
1222                    if (a && a.match) {
1223                        a = a.match(e.nestedSortCfg.serializeRegExp)[0]
1224                    }
1225                    if (h.length > 0) {
1226                        h += '&'
1227                    }
1228                    h += s + j + '[' + i + '][id]=' + a;
1229                    g[i] = {
1230                        id: a
1231                    };
1232                    var b = jQuery(this).children(e.nestedSortCfg.nestingTag + "." + e.nestedSortCfg.nestingTagClass.split(" ").join(".")).get(0);
1233                    var c = j;
1234                    j += '[' + i + '][children]';
1235                    var d = k(b);
1236                    if (d.length > 0) {
1237                        g[i].children = d
1238                    }
1239                    j = c
1240                });
1241                return g
1242            };
1243        if (s) {
1244            if (jQuery.iSort.collected[s]) {
1245                e = jQuery('#' + s).get(0);
1246                o[s] = k(e)
1247            } else {
1248                for (a in s) {
1249                    if (jQuery.iSort.collected[s[a]]) {
1250                        e = jQuery('#' + s[a]).get(0);
1251                        o[s[a]] = k(e)
1252                    }
1253                }
1254            }
1255        } else {
1256            for (i in jQuery.iSort.collected) {
1257                e = jQuery('#' + i).get(0);
1258                o[i] = k(e)
1259            }
1260        }
1261        return {
1262            hash: h,
1263            o: o
1264        }
1265    },
1266    findPrecedingItem: function (e) {
1267        var d = 0;
1268        var f = jQuery.grep(e.dropCfg.el, function (i) {
1269            var a = (i.pos.y < jQuery.iDrag.dragged.dragCfg.ny) && (i.pos.y > d);
1270            if (!a) {
1271                return false
1272            }
1273            var b;
1274            if (e.nestedSortCfg.rightToLeft) {
1275                b = (i.pos.x + i.pos.wb + e.nestedSortCfg.snapTolerance > jQuery.iDrag.dragged.dragCfg.nx + jQuery.iDrag.dragged.dragCfg.oC.wb)
1276            } else {
1277                b = (i.pos.x - e.nestedSortCfg.snapTolerance < jQuery.iDrag.dragged.dragCfg.nx)
1278            }
1279            if (!b) {
1280                return false
1281            }
1282            var c = jQuery.iNestedSortable.isBeingDragged(e, i);
1283            if (c) {
1284                return false
1285            }
1286            d = i.pos.y;
1287            return true
1288        });
1289        if (f.length > 0) {
1290            return f[(f.length - 1)]
1291        } else {
1292            return null
1293        }
1294    },
1295    isTouchingFirstItem: function (e) {
1296        var c;
1297        var d = jQuery.grep(e.dropCfg.el, function (i) {
1298            var a = (c === undefined || i.pos.y < c);
1299            if (!a) {
1300                return false
1301            }
1302            var b = jQuery.iNestedSortable.isBeingDragged(e, i);
1303            if (b) {
1304                return false
1305            }
1306            c = i.pos.y;
1307            return true
1308        });
1309        if (d.length > 0) {
1310            d = d[(d.length - 1)];
1311            return d.pos.y < jQuery.iDrag.dragged.dragCfg.ny + jQuery.iDrag.dragged.dragCfg.oC.hb && d.pos.y > jQuery.iDrag.dragged.dragCfg.ny
1312        } else {
1313            return false
1314        }
1315    },
1316    isBeingDragged: function (e, a) {
1317        var b = jQuery.iDrag.dragged;
1318        if (!b) {
1319            return false
1320        }
1321        if (a == b) {
1322            return true
1323        }
1324        if (jQuery(a).parents("." + e.sortCfg.accept.split(" ").join(".")).filter(function () {
1325            return this == b
1326        }).length !== 0) {
1327            return true
1328        } else {
1329            return false
1330        }
1331    },
1332    shouldNestItem: function (e, a) {
1333        if (!a) {
1334            return false
1335        }
1336        if (e.nestedSortCfg.noNestingClass && jQuery(a).filter("." + e.nestedSortCfg.noNestingClass).get(0) === a) {
1337            return false
1338        }
1339        if (e.nestedSortCfg.rightToLeft) {
1340            return a.pos.x + a.pos.wb - (e.nestedSortCfg.nestingPxSpace - e.nestedSortCfg.snapTolerance) > jQuery.iDrag.dragged.dragCfg.nx + jQuery.iDrag.dragged.dragCfg.oC.wb
1341        } else {
1342            return a.pos.x + (e.nestedSortCfg.nestingPxSpace - e.nestedSortCfg.snapTolerance) < jQuery.iDrag.dragged.dragCfg.nx
1343        }
1344    },
1345    nestItem: function (e, a) {
1346        var b = jQuery(a).children(e.nestedSortCfg.nestingTag + "." + e.nestedSortCfg.nestingTagClass.split(" ").join("."));
1347        var c = jQuery.iSort.helper;
1348        styleHelper = c.get(0).style;
1349        styleHelper.width = 'auto';
1350        if (!b.size()) {
1351            var d = "<" + e.nestedSortCfg.nestingTag + " class='" + e.nestedSortCfg.nestingTagClass + "'></" + e.nestedSortCfg.nestingTag + ">";
1352            b = jQuery(a).append(d).children(e.nestedSortCfg.nestingTag).css(e.nestedSortCfg.styleToAttach)
1353        }
1354        jQuery.iNestedSortable.updateCurrentNestingClass(e, b);
1355        jQuery.iNestedSortable.beforeHelperRemove(e);
1356        b.prepend(c.get(0));
1357        jQuery.iNestedSortable.afterHelperInsert(e)
1358    },
1359    appendItem: function (e, a) {
1360        jQuery.iNestedSortable.updateCurrentNestingClass(e, jQuery(a).parent());
1361        jQuery.iNestedSortable.beforeHelperRemove(e);
1362        jQuery(a).after(jQuery.iSort.helper.get(0));
1363        jQuery.iNestedSortable.afterHelperInsert(e)
1364    },
1365    insertOnTop: function (e) {
1366        jQuery.iNestedSortable.updateCurrentNestingClass(e, e);
1367        jQuery.iNestedSortable.beforeHelperRemove(e);
1368        jQuery(e).prepend(jQuery.iSort.helper.get(0));
1369        jQuery.iNestedSortable.afterHelperInsert(e)
1370    },
1371    beforeHelperRemove: function (e) {
1372        var a = jQuery.iSort.helper.parent(e.nestedSortCfg.nestingTag + "." + e.nestedSortCfg.nestingTagClass.split(" ").join("."));
1373        var b = a.children("." + e.sortCfg.accept.split(" ").join(".") + ":visible").size();
1374        if (b === 0 && a.get(0) !== e) {
1375            a.hide()
1376        }
1377    },
1378    afterHelperInsert: function (e) {
1379        var a = jQuery.iSort.helper.parent();
1380        if (a.get(0) !== e) {
1381            a.show()
1382        }
1383        e.nestedSortCfg.remeasured = false
1384    },
1385    updateCurrentNestingClass: function (e, a) {
1386        var b = jQuery(a);
1387        if ((e.nestedSortCfg.currentNestingClass) && (!jQuery.iNestedSortable.currentNesting || b.get(0) != jQuery.iNestedSortable.currentNesting.get(0))) {
1388            if (jQuery.iNestedSortable.currentNesting) {
1389                jQuery.iNestedSortable.currentNesting.removeClass(e.nestedSortCfg.currentNestingClass)
1390            }
1391            if (b.get(0) != e) {
1392                jQuery.iNestedSortable.currentNesting = b;
1393                b.addClass(e.nestedSortCfg.currentNestingClass);
1394                jQuery.iNestedSortable.latestNestingClass = e.nestedSortCfg.currentNestingClass
1395            } else {
1396                jQuery.iNestedSortable.currentNesting = null;
1397                jQuery.iNestedSortable.latestNestingClass = ""
1398            }
1399        }
1400    },
1401    destroy: function () {
1402        return this.each(function () {
1403            if (this.isNestedSortable) {
1404                this.nestedSortCfg = null;
1405                this.isNestedSortable = null;
1406                jQuery(this).SortableDestroy()
1407            }
1408        })
1409    },
1410    build: function (a) {
1411        if (a.accept && jQuery.iUtil && jQuery.iDrag && jQuery.iDrop && jQuery.iSort) {
1412            this.each(function () {
1413                this.isNestedSortable = true;
1414                this.nestedSortCfg = {
1415                    noNestingClass: a.noNestingClass ? a.noNestingClass : false,
1416                    rightToLeft: a.rightToLeft ? true : false,
1417                    nestingPxSpace: parseInt(a.nestingPxSpace, 10) || 30,
1418                    currentNestingClass: a.currentNestingClass ? a.currentNestingClass : "",
1419                    nestingLimit: a.nestingLimit ? a.nestingLimit : false,
1420                    autoScroll: a.autoScroll !== undefined ? a.autoScroll == true : true,
1421                    scrollSensitivity: a.scrollSensitivity ? a.scrollSensitivity : 20,
1422                    scrollSpeed: a.scrollSpeed ? a.scrollSpeed : 20,
1423                    serializeRegExp: a.serializeRegExp ? a.serializeRegExp : /[^\-]*$/
1424                };
1425                this.nestedSortCfg.snapTolerance = parseInt(this.nestedSortCfg.nestingPxSpace * 0.4, 10);
1426                this.nestedSortCfg.nestingTag = this.tagName;
1427                this.nestedSortCfg.nestingTagClass = this.className;
1428                this.nestedSortCfg.styleToAttach = (this.nestedSortCfg.rightToLeft) ? {
1429                    "padding-left": 0,
1430                    "padding-right": this.nestedSortCfg.nestingPxSpace + 'px'
1431                } : {
1432                    "padding-left": this.nestedSortCfg.nestingPxSpace + 'px',
1433                    "padding-right": 0
1434                };
1435                jQuery(this.nestedSortCfg.nestingTag, this).css(this.nestedSortCfg.styleToAttach)
1436            });
1437            jQuery.iSort.checkhover = jQuery.iNestedSortable.checkHover;
1438            jQuery.iSort.check = jQuery.iNestedSortable.check;
1439            jQuery.iSort.serialize = jQuery.iNestedSortable.serialize
1440        }
1441        return this.Sortable(a)
1442    }
1443};
1444jQuery.fn.extend({
1445    NestedSortable: jQuery.iNestedSortable.build,
1446    NestedSortableDestroy: jQuery.iNestedSortable.destroy
1447});
1448jQuery.iUtil.getScroll = function (e) {
1449    var t, l, w, h, iw, ih;
1450    if (e && e.nodeName.toLowerCase() != 'body') {
1451        t = e.scrollTop;
1452        l = e.scrollLeft;
1453        w = e.scrollWidth;
1454        h = e.scrollHeight;
1455        iw = 0;
1456        ih = 0
1457    } else {
1458        if (document.documentElement && document.documentElement.scrollTop) {
1459            t = document.documentElement.scrollTop;
1460            l = document.documentElement.scrollLeft;
1461            w = document.documentElement.scrollWidth;
1462            h = document.documentElement.scrollHeight
1463        } else if (document.body) {
1464            t = document.body.scrollTop;
1465            l = document.body.scrollLeft;
1466            w = document.body.scrollWidth;
1467            h = document.body.scrollHeight
1468        }
1469        iw = self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;
1470        ih = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
1471    }
1472    return {
1473        t: t,
1474        l: l,
1475        w: w,
1476        h: h,
1477        iw: iw,
1478        ih: ih
1479    }
1480};
Note: See TracBrowser for help on using the repository browser.