/*

 jQuery UI Droppable

 Copyright (c) 2008 Paul Bakaus
 Dual licensed under the MIT (MIT-LICENSE.txt)
 and GPL (GPL-LICENSE.txt) licenses.

 http://docs.jquery.com/UI/Droppables

 Depends:
 ui.core.js
 ui.draggable.js
*/
(function(d){d.widget("ui.droppable",{init:function(){this.element.addClass("ui-droppable");this.isover=0;this.isout=1;var a=this.options,b=a.accept;a=d.extend(a,{accept:a.accept&&a.accept.constructor==Function?a.accept:function(c){return d(c).is(b)}});this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables.push(this)},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(){for(var a=d.ui.ddmanager.droppables,b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable")},over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.options.accept.call(this.element,b.currentItem||b.element)){d.ui.plugin.call(this,"over",[a,this.ui(b)]);this.element.triggerHandler("dropover",
[a,this.ui(b)],this.options.over)}},out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.options.accept.call(this.element,b.currentItem||b.element)){d.ui.plugin.call(this,"out",[a,this.ui(b)]);this.element.triggerHandler("dropout",[a,this.ui(b)],this.options.out)}},drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var f=false;this.element.find(".ui-droppable").not(".ui-draggable-dragging").each(function(){var e=
d.data(this,"droppable");if(e.options.greedy&&d.ui.intersect(c,d.extend(e,{offset:e.element.offset()}),e.options.tolerance)){f=true;return false}});if(f)return false;if(this.options.accept.call(this.element,c.currentItem||c.element)){d.ui.plugin.call(this,"drop",[a,this.ui(c)]);this.element.triggerHandler("drop",[a,this.ui(c)],this.options.drop);return true}return false},activate:function(a){var b=d.ui.ddmanager.current;d.ui.plugin.call(this,"activate",[a,this.ui(b)]);b&&this.element.triggerHandler("dropactivate",
[a,this.ui(b)],this.options.activate)},deactivate:function(a){var b=d.ui.ddmanager.current;d.ui.plugin.call(this,"deactivate",[a,this.ui(b)]);b&&this.element.triggerHandler("dropdeactivate",[a,this.ui(b)],this.options.deactivate)}});d.extend(d.ui.droppable,{defaults:{disabled:false,tolerance:"intersect"}});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var f=(a.positionAbs||a.position.absolute).left,e=f+a.helperProportions.width,i=(a.positionAbs||a.position.absolute).top,k=i+a.helperProportions.height,
g=b.offset.left,j=g+b.proportions.width,h=b.offset.top;b=h+b.proportions.height;switch(c){case "fit":return g<f&&e<j&&h<i&&k<b;case "intersect":return g<f+a.helperProportions.width/2&&e-a.helperProportions.width/2<j&&h<i+a.helperProportions.height/2&&k-a.helperProportions.height/2<b;case "pointer":return g<(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left&&(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left<j&&h<(a.positionAbs||a.position.absolute).top+
(a.clickOffset||a.offset.click).top&&(a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top<b;case "touch":return(i>=h&&i<=b||k>=h&&k<=b||i<h&&k>b)&&(f>=g&&f<=j||e>=g&&e<=j||f<g&&e>j);default:return false}};d.ui.ddmanager={current:null,droppables:[],prepareOffsets:function(a,b){for(var c=d.ui.ddmanager.droppables,f=b?b.type:null,e=0;e<c.length;e++)if(!(c[e].options.disabled||a&&!c[e].options.accept.call(c[e].element,a.currentItem||a.element))){c[e].visible=c[e].element.css("display")!=
"none";if(c[e].visible){c[e].offset=c[e].element.offset();c[e].proportions={width:c[e].element[0].offsetWidth,height:c[e].element[0].offsetHeight};if(f=="dragstart"||f=="sortactivate")c[e].activate.call(c[e],b)}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables,function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=this.drop.call(this,b);if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element,a.currentItem||
a.element)){this.isout=1;this.isover=0;this.deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables,function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var f;if(this.options.greedy){var e=this.element.parents(".ui-droppable:eq(0)");if(e.length){f=d.data(e[0],"droppable");
f.greedyChild=c=="isover"?1:0}}if(f&&c=="isover"){f.isover=0;f.isout=1;f.out.call(f,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"over":"out"].call(this,b);if(f&&c=="isout"){f.isout=0;f.isover=1;f.over.call(f,b)}}}})}};d.ui.plugin.add("droppable","activeClass",{activate:function(a,b){d(this).addClass(b.options.activeClass)},deactivate:function(a,b){d(this).removeClass(b.options.activeClass)},drop:function(a,b){d(this).removeClass(b.options.activeClass)}});d.ui.plugin.add("droppable",
"hoverClass",{over:function(a,b){d(this).addClass(b.options.hoverClass)},out:function(a,b){d(this).removeClass(b.options.hoverClass)},drop:function(a,b){d(this).removeClass(b.options.hoverClass)}})})(jQuery);

