(function($){$.widget("mjs.nestedSortable",$.extend({},$.ui.sortable.prototype,{options:{tabSize:20,disableNesting:'mjs-nestedSortable-no-nesting',errorClass:'mjs-nestedSortable-error',doNotClear:false,listType:'ol',maxLevels:0,protectRoot:false,rootID:null,rtl:false,isAllowed:function(item,parent){return true}},_create:function(){this.element.data('sortable',this.element.data('nestedSortable'));if(!this.element.is(this.options.listType))throw new Error('nestedSortable: Please check the listType option is set to your actual list type');return $.ui.sortable.prototype._create.apply(this,arguments)},destroy:function(){this.element.removeData("nestedSortable").unbind(".nestedSortable");return $.ui.sortable.prototype.destroy.apply(this,arguments)},_mouseDrag:function(event){this.position=this._generatePosition(event);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}var o=this.options;if(this.options.scroll){var scrolled=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!='HTML'){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-event.pageY=0;i--){var item=this.items[i],itemElement=item.item[0],intersection=this._intersectsWithPointer(item);if(!intersection)continue;if(itemElement!=this.currentItem[0]&&this.placeholder[intersection==1?"next":"prev"]()[0]!=itemElement&&!$.contains(this.placeholder[0],itemElement)&&(this.options.type=='semi-dynamic'?!$.contains(this.element[0],itemElement):true)){$(itemElement).mouseenter();this.direction=intersection==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(item)){$(itemElement).mouseleave();this._rearrange(event,item)}else{break}this._clearEmpty(itemElement);this._trigger("change",event,this._uiHash());break}}var parentItem=(this.placeholder[0].parentNode.parentNode&&$(this.placeholder[0].parentNode.parentNode).closest('.ui-sortable').length)?$(this.placeholder[0].parentNode.parentNode):null,level=this._getLevel(this.placeholder),childLevels=this._getChildLevels(this.helper);var previousItem=this.placeholder[0].previousSibling?$(this.placeholder[0].previousSibling):null;if(previousItem!=null){while(previousItem[0].nodeName.toLowerCase()!='li'||previousItem[0]==this.currentItem[0]||previousItem[0]==this.helper[0]){if(previousItem[0].previousSibling){previousItem=$(previousItem[0].previousSibling)}else{previousItem=null;break}}}var nextItem=this.placeholder[0].nextSibling?$(this.placeholder[0].nextSibling):null;if(nextItem!=null){while(nextItem[0].nodeName.toLowerCase()!='li'||nextItem[0]==this.currentItem[0]||nextItem[0]==this.helper[0]){if(nextItem[0].nextSibling){nextItem=$(nextItem[0].nextSibling)}else{nextItem=null;break}}}var newList=document.createElement(o.listType);this.beyondMaxLevels=0;if(parentItem!=null&&nextItem==null&&(o.rtl&&(this.positionAbs.left+this.helper.outerWidth()>parentItem.offset().left+parentItem.outerWidth())||!o.rtl&&(this.positionAbs.leftpreviousItem.offset().left+o.tabSize))){this._isAllowed(previousItem,level,level+childLevels+1);if(!previousItem.children(o.listType).length){previousItem[0].appendChild(newList)}if(previousTopOffset&&(previousTopOffset<=previousItem.offset().top)){previousItem.children(o.listType).prepend(this.placeholder)}else{previousItem.children(o.listType)[0].appendChild(this.placeholder[0])}this._trigger("change",event,this._uiHash())}else{this._isAllowed(parentItem,level,level+childLevels)}this._contactContainers(event);if($.ui.ddmanager)$.ui.ddmanager.drag(this,event);this._trigger('sort',event,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(event,noPropagation){if(this.beyondMaxLevels){this.placeholder.removeClass(this.options.errorClass);if(this.domPosition.prev){$(this.domPosition.prev).after(this.placeholder)}else{$(this.domPosition.parent).prepend(this.placeholder)}this._trigger("revert",event,this._uiHash())}for(var i=this.items.length-1;i>=0;i--){var item=this.items[i].item[0];this._clearEmpty(item)}$.ui.sortable.prototype._mouseStop.apply(this,arguments)},serialize:function(options){var o=$.extend({},this.options,options),items=this._getItemsAsjQuery(o&&o.connected),str=[];$(items).each(function(){var res=($(o.item||this).attr(o.attribute||'data-id')||'').match(o.expression||(/(.+)[-=_](.+)/)),pid=($(o.item||this).parent(o.listType).parent(o.items).attr(o.attribute||'data-id')||'').match(o.expression||(/(.+)[-=_](.+)/));if(res){str.push(((o.key||res[1])+'['+(o.key&&o.expression?res[1]:res[2])+']')+'='+(pid?(o.key&&o.expression?pid[1]:pid[2]):o.rootID))}if(res){str.push(((o.key||res[1])+'[123]')+'='+(pid?(o.key&&o.expression?pid[1]:pid[2]):o.rootID))}});if(!str.length&&o.key){str.push(o.key+'=')}return str.join('&')},toHierarchy:function(options){var o=$.extend({},this.options,options),sDepth=o.startDepthCount||0,ret=[];$(this.element).children(o.items).each(function(){var level=_recursiveItems(this);ret.push(level)});return ret;function _recursiveItems(item){var id=($(item).attr(o.attribute||'data-id')||'').match(o.expression||(/(.+)[-=_](.+)/));if(id){var currentItem={"id":id[2]};if($(item).children(o.listType).children(o.items).length>0){currentItem.children=[];$(item).children(o.listType).children(o.items).each(function(){var level=_recursiveItems(this);currentItem.children.push(level)})}return currentItem}}},toArray:function(options){var o=$.extend({},this.options,options),sDepth=o.startDepthCount||0,ret=[],left=2;ret.push({"item_id":o.rootID,"parent_id":'none',"data-type":'top',"data-data":'',"depth":sDepth,"left":'1',"right":($(o.items,this.element).length+1)*2});$(this.element).children(o.items).each(function(){left=_recursiveArray(this,sDepth+1,left)});ret=ret.sort(function(a,b){return(a.left-b.left)});return ret;function _recursiveArray(item,depth,left){var right=left+1,id,dt,pid;if($(item).children(o.listType).children(o.items).length>0){depth++;$(item).children(o.listType).children(o.items).each(function(){right=_recursiveArray($(this),depth,right)});depth--}id=($(item).attr(o.attribute||'data-id')).match(o.expression||(/(.+)[-=_](.+)/));dt=($(item).attr(o.attribute||'data-type')).match(o.expression||('.*'));optionData=($(item).attr(o.attribute||'data-data')).match(o.expression||('.*'));if(depth===sDepth+1){pid=o.rootID}else{var parentItem=($(item).parent(o.listType).parent(o.items).attr(o.attribute||'data-id')).match(o.expression||(/(.+)[-=_](.+)/));pid=parentItem[2]}opt=optionData[0];if(id){ret.push({"item_id":id[2],"parent_id":pid,"depth":depth,"left":left,"right":right,"data_type":dt[0],"custom_data":encodeURIComponent(optionData[0])})}left=right+1;return left}},_clearEmpty:function(item){var emptyList=$(item).children(this.options.listType);if(emptyList.length&&!emptyList.children().length&&!this.options.doNotClear){emptyList.remove()}},_getLevel:function(item){var level=1;if(this.options.listType){var list=item.closest(this.options.listType);while(list&&list.length>0&&!list.is('.ui-sortable')){level++;list=list.parent().closest(this.options.listType)}}return level},_getChildLevels:function(parent,depth){var self=this,o=this.options,result=0;depth=depth||0;$(parent).children(o.listType).children(o.items).each(function(index,child){result=Math.max(self._getChildLevels(child,depth+1),result)});return depth?result+1:result},_isAllowed:function(parentItem,level,levels){var o=this.options,isRoot=$(this.domPosition.parent).hasClass('ui-sortable')?true:false,maxLevels=this.placeholder.closest('.ui-sortable').nestedSortable('option','maxLevels');if(!o.isAllowed(this.currentItem,parentItem)||parentItem&&parentItem.hasClass(o.disableNesting)||o.protectRoot&&(parentItem==null&&!isRoot||isRoot&&level>1)){this.placeholder.addClass(o.errorClass);if(maxLevels