var ExtendedSortable=Object.extend(Sortable,{create:function(C){C=$(C);
var B=Object.extend({element:C,tag:"li",dropOnEmpty:false,tree:false,treeTag:"ul",overlap:"vertical",constraint:"vertical",containment:C,handle:false,only:false,delay:0,hoverclass:null,ghosting:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:this.SERIALIZE_RULE,elements:false,handles:false,swap:false,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});
this.destroy(C);
var A={revert:true,quiet:B.quiet,scroll:B.scroll,scrollSpeed:B.scrollSpeed,scrollSensitivity:B.scrollSensitivity,delay:B.delay,ghosting:B.ghosting,constraint:B.constraint,handle:B.handle};
if(B.starteffect){A.starteffect=B.starteffect
}if(B.reverteffect){A.reverteffect=B.reverteffect
}else{if(B.ghosting){A.reverteffect=function(F){F.style.top=0;
F.style.left=0
}
}}if(B.endeffect){A.endeffect=B.endeffect
}if(B.zindex){A.zindex=B.zindex
}var D={overlap:B.overlap,containment:B.containment,swap:B.swap,tree:B.tree,hoverclass:B.hoverclass,onHover:Sortable.onHover};
var E={onHover:Sortable.onEmptyHover,overlap:B.overlap,containment:B.containment,hoverclass:B.hoverclass,swap:B.swap};
Element.cleanWhitespace(C);
B.draggables=[];
B.droppables=[];
if(B.dropOnEmpty||B.tree){Droppables.add(C,E);
B.droppables.push(C)
}(B.elements||this.findElements(C,B)||[]).each(function(H,F){var G=B.handles?$(B.handles[F]):(B.handle?$(H).select("."+B.handle)[0]:H);
B.draggables.push(new Draggable(H,Object.extend(A,{handle:G})));
Droppables.add(H,D);
if(B.tree){H.treeNode=C
}B.droppables.push(H)
});
if(B.tree){(Sortable.findTreeElements(C,B)||[]).each(function(F){Droppables.add(F,E);
F.treeNode=C;
B.droppables.push(F)
})
}this.sortables[C.id]=B;
Draggables.addObserver(new SortableObserver(C,B.onUpdate))
},onHover:function(E,D,A){if(Element.isParent(D,E)){return 
}if(A>0.33&&A<0.66&&Sortable.options(D).tree){return 
}else{if(A>0.5){Sortable.mark(D,"before");
if(D.previousSibling!=E){var B=E.parentNode;
E.style.visibility="hidden";
Sortable.createGuide(E);
D.parentNode.insertBefore(E,D);
D.parentNode.insertBefore(Sortable._guide,E);
Sortable.markEmptyPlace(E);
if(D.parentNode!=B){Sortable.options(B).onChange(E)
}Sortable.options(D.parentNode).onChange(E)
}}else{Sortable.mark(D,"after");
var C=D.nextSibling||null;
if(C!=E){var B=E.parentNode;
E.style.visibility="hidden";
Sortable.createGuide(E);
D.parentNode.insertBefore(E,C);
D.parentNode.insertBefore(Sortable._guide,E);
Sortable.markEmptyPlace(E);
if(D.parentNode!=B){Sortable.options(B).onChange(E)
}Sortable.options(D.parentNode).onChange(E)
}}}},onEmptyHover:function(E,G,H){var I=E.parentNode;
var A=Sortable.options(G);
if(!Element.isParent(G,E)){var F;
var C=Sortable.findElements(G,{tag:A.tag,only:A.only});
var B=null;
if(C){var D=Element.offsetSize(G,A.overlap)*(1-H);
for(F=0;
F<C.length;
F+=1){if(D-Element.offsetSize(C[F],A.overlap)>=0){D-=Element.offsetSize(C[F],A.overlap)
}else{if(D-(Element.offsetSize(C[F],A.overlap)/2)>=0){B=F+1<C.length?C[F+1]:null;
break
}else{B=C[F];
break
}}}}Sortable.createGuide(E);
G.insertBefore(E,B);
G.insertBefore(Sortable._guide,E);
Sortable.markEmptyPlace(E);
Sortable.options(I).onChange(E);
A.onChange(E)
}},unmark:function(){if(Sortable._marker){Sortable._marker.hide()
}if(Sortable._guide&&Sortable._guide.parentNode){Sortable._guide.parentNode.removeChild(Sortable._guide)
}if(Sortable._emptyPlaceMarker){Element.hide(Sortable._emptyPlaceMarker)
}},createGuide:function(A){if(!Sortable._guide){Sortable._guide=$("_guide")||document.createElement("DIV");
Sortable._guide.style.position="relative";
Sortable._guide.style.width="1px";
Sortable._guide.style.height="0px";
Sortable._guide.style.cssFloat="left";
Sortable._guide.id="guide";
document.getElementsByTagName("body").item(0).appendChild(Sortable._guide)
}},markEmptyPlace:function(B){if(!Sortable._emptyPlaceMarker){Sortable._emptyPlaceMarker=$("emptyPlaceMarker")||document.createElement("DIV");
Element.hide(Sortable._emptyPlaceMarker);
Element.addClassName(Sortable._emptyPlaceMarker,"emptyPlaceMarker");
Sortable._emptyPlaceMarker.style.position="absolute";
document.getElementsByTagName("body").item(0).appendChild(Sortable._emptyPlaceMarker)
}var D=Position.cumulativeOffset(Sortable._guide);
Sortable._emptyPlaceMarker.style.left=(D[0]+5)+"px";
Sortable._emptyPlaceMarker.style.top=(D[1]+5)+"px";
var C={};
C.width=(Element.getDimensions(B).width-5)+"px";
C.height=(Element.getDimensions(B).height-5)+"px";
Sortable._emptyPlaceMarker.setStyle(C);
var A=Element.getStyle(B,"margin");
if(A&&A!=""){Sortable._emptyPlaceMarker.setStyle({margin:A})
}else{Sortable._emptyPlaceMarker.setStyle({margin:""})
}Element.show(Sortable._emptyPlaceMarker)
}});