(function(a){a.widget("ui.droppable",{_setData:function(b,c){if(b=="accept"){this.options.accept=c&&a.isFunction(c)?c:function(e){return e.is(accept)}}else{a.widget.prototype._setData.apply(this,arguments)}},_init:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.options.accept=this.options.accept&&a.isFunction(this.options.accept)?this.options.accept:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[this.options.scope]=a.ui.ddmanager.droppables[this.options.scope]||[];a.ui.ddmanager.droppables[this.options.scope].push(this);(this.options.cssNamespace&&this.element.addClass(this.options.cssNamespace+"-droppable"))},plugins:{},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,absolutePosition:b.positionAbs,options:this.options,element:this.element}},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable-disabled").removeData("droppable").unbind(".droppable")},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element,(b.currentItem||b.element))){a.ui.plugin.call(this,"over",[c,this.ui(b)]);this.element.triggerHandler("dropover",[c,this.ui(b)],this.options.over)}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element,(b.currentItem||b.element))){a.ui.plugin.call(this,"out",[c,this.ui(b)]);this.element.triggerHandler("dropout",[c,this.ui(b)],this.options.out)}},_drop:function(d,c){var b=c||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var f=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var e=a.data(this,"droppable");if(e.options.greedy&&a.ui.intersect(b,a.extend(e,{offset:e.element.offset()}),e.options.tolerance)){f=true;return false}});if(f){return false}if(this.options.accept.call(this.element,(b.currentItem||b.element))){a.ui.plugin.call(this,"drop",[d,this.ui(b)]);this.element.triggerHandler("drop",[d,this.ui(b)],this.options.drop);return this.element}return false},_activate:function(c){var b=a.ui.ddmanager.current;a.ui.plugin.call(this,"activate",[c,this.ui(b)]);if(b){this.element.triggerHandler("dropactivate",[c,this.ui(b)],this.options.activate)}},_deactivate:function(c){var b=a.ui.ddmanager.current;a.ui.plugin.call(this,"deactivate",[c,this.ui(b)]);if(b){this.element.triggerHandler("dropdeactivate",[c,this.ui(b)],this.options.deactivate)}}});a.extend(a.ui.droppable,{defaults:{disabled:false,tolerance:"intersect",scope:"default",cssNamespace:"ui"}});a.ui.intersect=function(n,g,k){if(!g.offset){return false}var e=(n.positionAbs||n.position.absolute).left,d=e+n.helperProportions.width,j=(n.positionAbs||n.position.absolute).top,i=j+n.helperProportions.height;var f=g.offset.left,c=f+g.proportions.width,m=g.offset.top,h=m+g.proportions.height;switch(k){case"fit":return(f<e&&d<c&&m<j&&i<h);break;case"intersect":return(f<e+(n.helperProportions.width/2)&&d-(n.helperProportions.width/2)<c&&m<j+(n.helperProportions.height/2)&&i-(n.helperProportions.height/2)<h);break;case"pointer":return(f<((n.positionAbs||n.position.absolute).left+(n.clickOffset||n.offset.click).left)&&((n.positionAbs||n.position.absolute).left+(n.clickOffset||n.offset.click).left)<c&&m<((n.positionAbs||n.position.absolute).top+(n.clickOffset||n.offset.click).top)&&((n.positionAbs||n.position.absolute).top+(n.clickOffset||n.offset.click).top)<h);break;case"touch":return((j>=m&&j<=h)||(i>=m&&i<=h)||(j<m&&i>h))&&((e>=f&&e<=c)||(d>=f&&d<=c)||(e<f&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(f,k){var b=a.ui.ddmanager.droppables[f.options.scope];var g=k?k.type:null;var h=(f.currentItem||f.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(f&&!b[d].options.accept.call(b[d].element,(f.currentItem||f.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(g=="dragstart"||g=="sortactivate"){b[d]._activate.call(b[d],k)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element,(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}};a.ui.plugin.add("droppable","activeClass",{activate:function(c,b){a(this).addClass(b.options.activeClass)},deactivate:function(c,b){a(this).removeClass(b.options.activeClass)},drop:function(c,b){a(this).removeClass(b.options.activeClass)}});a.ui.plugin.add("droppable","hoverClass",{over:function(c,b){a(this).addClass(b.options.hoverClass)},out:function(c,b){a(this).removeClass(b.options.hoverClass)},drop:function(c,b){a(this).removeClass(b.options.hoverClass)}})})(jQuery);