/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */
ToolMan._dragsortFactory = {
    makeSortable : function(item) {
        var group = ToolMan.drag().createSimpleGroup(item)        group.register('dragstart', this._onDragStart)        group.register('dragmove', this._onDragMove)        group.register('dragend', this._onDragEnd)        return group    },
    /** 
     * Iterates over a list's items, making them sortable, applying
     * optional functions to each item.
     *
     * example: makeListSortable(myList, myFunc1, myFunc2, ... , myFuncN)
     */
    makeListSortable : function(list) {        var helpers = ToolMan.helpers()        var coordinates = ToolMan.coordinates()        try{            var items = list.getElementsByTagName("li")        }        catch(e)        {return;}
        helpers.map(items, function(item) {            var dragGroup = dragsort.makeSortable(item)            dragGroup.setThreshold(4)            var min, max            dragGroup.addTransform(function(coordinate, dragEvent) {                return coordinate.constrainTo(min, max)            })
            dragGroup.register('dragstart', function() {                var items = list.getElementsByTagName("li")                min = max = coordinates.topLeftOffset(items[0])                for (var i = 1, n = items.length; i < n; i++) {                    var offset = coordinates.topLeftOffset(items[i])                    min = min.min(offset)                    max = max.max(offset)                }            })        })
        for (var i = 1, n = arguments.length; i < n; i++)            helpers.map(items, arguments[i])    },

	_onDragStart : function(dragEvent) {
		var intItemId = dragEvent.group.element.getAttribute("itemID");
		document.getElementById("id_VoteBox_"+intItemId).className = "itemOrgRankNew";
		document.getElementById("id_ItemRankNo_"+intItemId).className = "itemOrgRankNew";
		document.getElementById("id_DragHandle_"+intItemId).className = "rober1Org move";
	},

	_onDragMove : function(dragEvent) {
		//if (fnShowLoginBox())
			//return;
			
		var helpers = ToolMan.helpers()
		var coordinates = ToolMan.coordinates()

		var item = dragEvent.group.element
		var xmouse = dragEvent.transformedMouseOffset
		var moveTo = null

		var previous = helpers.previousItem(item, item.nodeName)
		while (previous != null) {
			var bottomRight = coordinates.bottomRightOffset(previous)
			if (xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) {
				moveTo = previous
			}
			previous = helpers.previousItem(previous, item.nodeName)
		}
		if (moveTo != null) {
			helpers.moveBefore(item, moveTo)
			return
		}

		var next = helpers.nextItem(item, item.nodeName)
		while (next != null) {
			var topLeft = coordinates.topLeftOffset(next)
			if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x) {
				moveTo = next
			}
			next = helpers.nextItem(next, item.nodeName)
		}
		if (moveTo != null) {
			helpers.moveBefore(item, helpers.nextItem(moveTo, item.nodeName))
			return
		}
	},
    _onDragEnd : function(dragEvent) {        var intChangedItem = dragEvent.group.element.getAttribute("itemID");        ToolMan.coordinates().create(0, 0).reposition(dragEvent.group.element)        document.getElementById("id_VoteBox_"+intChangedItem).className = "itemRank";        document.getElementById("id_ItemRankNo_"+intChangedItem).className = "itemRank";        document.getElementById("id_DragHandle_"+intChangedItem).className = "rober1 move";
        /*CHANGED*/        strItemArray = junkdrawer.getListOrder("phoneticlong");
        var arr = strItemArray.split("|");
        var boolFirst = false;
        var firstItem = arr[0];
        firstItem = firstItem.replace(/^\s+|\s+$/g, '');

        if(arr.length > 0 && intChangedItem == firstItem)
            boolFirst = true;

        fnReorderItems(Base64.encode(strItemArray),intChangedItem,boolFirst);        /*CHANGED*/    },
	_onDragLoginBox : function(dragEvent) {
		fnShowLoginBox();
		return false;
	},

	_onDragEndLoginBox : function(dragEvent) {
		junkdrawer.restoreListOrder("phoneticlong");
		return false;
	}
}
