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