﻿<!-- //
var g_divDrag;
var g_aDropTargets = [];

function SwapNode(eSrcNode, eDstNode)
    {
    if(eSrcNode && eDstNode)
        {
        if(eSrcNode.nodeName != eDstNode.nodeName) return;
        var eSrcTable = (eSrcNode.nodeName == "TR") ? eSrcNode.parentNode : eSrcNode.parentNode.parentNode;
        var eDstTable = (eDstNode.nodeName == "TR") ? eDstNode.parentNode : eDstNode.parentNode.parentNode;
        if(eSrcTable != eDstTable) return;
        
        if(eSrcNode.swapNode)
            eSrcNode.swapNode(eDstNode);
        else
            {
            var elParentNode = eDstNode.parentNode;
            var elNextSibling = eDstNode.nextSibling;
            
            if(elNextSibling == eSrcNode)
                elParentNode.insertBefore(eSrcNode, eDstNode);
            else if(eDstNode == eSrcNode.nextSibling)
                elParentNode.insertBefore(eDstNode, eSrcNode);
            else
                {
                eSrcNode.parentNode.replaceChild(eDstNode, eSrcNode);
                elParentNode.insertBefore(eSrcNode, elNextSibling);
                }
            }
            
        var eNode = null;
        var strClassName = "";
        var nRowIndex;
        strClassName = "tabletogglecelloff ";
        if(IsNodeToggled(eSrcNode))
            eNode = eDstNode;
        else if(IsNodeToggled(eDstNode))
            eNode = eSrcNode;
        else
            {
            eNode = eDstNode;
            nRowIndex = (eNode.nodeName == "TR") ? eNode.rowIndex : eNode.parentNode.rowIndex;
            strClassName = ((nRowIndex % 2) > 0) ? "tableoddrow" : "tableevenrow";
            SetNodeColour(eNode, strClassName);
            strClassName = "";
            eNode = eSrcNode;
            }
          
        nRowIndex = (eNode.nodeName == "TR") ? eNode.rowIndex : eNode.parentNode.rowIndex;  
        strClassName += ((nRowIndex % 2) > 0) ? "tableoddrow" : "tableevenrow";
        SetNodeColour(eNode, strClassName);
        }
        
    return false;
    }

function GetDragCoords(eEvent)
    {
    eEvent = eEvent || window.event;
    if(eEvent.pageX || eEvent.pageY)
        {
        eEvent.preventDefault();
        return { nX:eEvent.pageX, nY:eEvent.pageY };
        }
    eEvent.cancelBubble = true;
    eEvent.returnValue = false;
    return { nX:eEvent.clientX + document.documentElement.scrollLeft - document.body.clientLeft, nY:eEvent.clientY + document.documentElement.scrollTop - document.body.clientTop };
    }
       
function GetDragOffset(eElement)
    {
    var nLeft = nTop = 0;
    if(eElement.offsetParent)
	{
	nLeft = eElement.offsetLeft;
	nTop = eElement.offsetTop;
	while(eElement.offsetParent && eElement.parentNode != g_divDrag.parentNode)
	    {
	    eElement = eElement.offsetParent
	    nLeft += eElement.offsetLeft;
	    nTop += eElement.offsetTop;
	    }
	}
    return {nX:nLeft, nY:nTop};
    }
    
function OnDrag(eEvent)
    {
    if(g_divDrag)
        {
        var objDragCoords = GetDragCoords(eEvent);
        g_divDrag.style.left = (objDragCoords.nX - g_divDrag.offset.nX) + "px";
        g_divDrag.style.top = (objDragCoords.nY - g_divDrag.offset.nY) + "px";
        g_divDrag.style.display = "";
        
        for(var nTarget = 0; nTarget < g_aDropTargets.length; nTarget++)
            {
            objTargetOffset = GetDragOffset(g_aDropTargets[nTarget]);
            nTargetWidth = g_aDropTargets[nTarget].offsetWidth;
            nTargetHeight = g_aDropTargets[nTarget].offsetHeight;
            
            if((objDragCoords.nX > objTargetOffset.nX)
            && (objDragCoords.nX < (objTargetOffset.nX + nTargetWidth))
            && (objDragCoords.nY > objTargetOffset.nY)
            && (objDragCoords.nY < (objTargetOffset.nY + nTargetHeight)))
                {
                var strFuncName = "OnDragOver"+g_divDrag.tableid+"Node";
                if(window[strFuncName])
                    window[strFuncName](g_divDrag.element, g_aDropTargets[nTarget]);
                break;
                }
            }
        
        return false;
        }
    }
    
function OnDragStop(eEvent)
    {
    if(g_divDrag)
        {
        var objDragCoords = GetDragCoords(eEvent);
        var objTargetOffset, nTargetWidth, nTargetHeight;
        for(var nTarget = 0; nTarget < g_aDropTargets.length; nTarget++)
            {
            objTargetOffset = GetDragOffset(g_aDropTargets[nTarget]);
            nTargetWidth = g_aDropTargets[nTarget].offsetWidth;
            nTargetHeight = g_aDropTargets[nTarget].offsetHeight;
            
            if((objDragCoords.nX > objTargetOffset.nX)
            && (objDragCoords.nX < (objTargetOffset.nX + nTargetWidth))
            && (objDragCoords.nY > objTargetOffset.nY)
            && (objDragCoords.nY < (objTargetOffset.nY + nTargetHeight)))
                {
                if(g_divDrag.element != g_aDropTargets[nTarget])
                    {
                    var strFuncName = "OnSwap"+g_divDrag.tableid+"Node";
                    if(window[strFuncName])
                        window[strFuncName](g_divDrag.element, g_aDropTargets[nTarget]);
                    else
                        SwapNode(g_divDrag.element, g_aDropTargets[nTarget]);
                    }
                break;
                }
            }
        
        document.body.removeChild(g_divDrag);
        g_divDrag = null;
        g_aDropTargets.length = 0;
            
        if(document.removeEventListener)
            {
            document.removeEventListener("mousemove", OnDrag, true);
            document.removeEventListener("mouseup", OnDragStop, true);
            }
        else
            {
            document.detachEvent("onmousemove", OnDrag);
            document.detachEvent("onmouseup", OnDragStop);
            }
        }
    }
    
function OnDragStart(eEvent, eElement, strTableID, strNodeID)
    {
    if(g_divDrag == null)
        {
        var objDragCoords = GetDragCoords(eEvent);
        var strInnerHTML = eElement.innerHTML;
        strInnerHTML = strInnerHTML.replace("id=\"", "id=\"Drag", "gi");
        strInnerHTML = strInnerHTML.replace("name=\"", "name=\"Drag", "gi");
        strInnerHTML = "<table class=\"table\" style=\"width:100%;\"><tr>" + ((eElement.nodeName == "TR") ? strInnerHTML : "<td class=\"" + eElement.className + "\">" + strInnerHTML + "</td>") + "</tr></table>";
            
        g_divDrag = document.createElement("div");
        document.body.appendChild(g_divDrag);
        g_divDrag.element = eElement;
        g_divDrag.tableid = strTableID;
        g_divDrag.offset = GetDragOffset(g_divDrag.element);
        g_divDrag.style.position = "absolute";
        g_divDrag.style.left = g_divDrag.offset.nX + "px";
        g_divDrag.style.top = g_divDrag.offset.nY + "px";
        g_divDrag.style.width = eElement.offsetWidth + "px";
        g_divDrag.style.height = eElement.offsetHeight + "px";
        g_divDrag.style.display = "none";
        g_divDrag.innerHTML = strInnerHTML;
        if(eElement.style.backgroundColor) g_divDrag.style.backgroundColor = eElement.style.backgroundColor;
        if(eElement.style.backgroundImage) g_divDrag.style.backgroundImage = eElement.style.backgroundImage;
        
        var objDragCoords = GetDragCoords(eEvent);
        g_divDrag.offset.nX = (objDragCoords.nX - g_divDrag.offset.nX);
        g_divDrag.offset.nY = (objDragCoords.nY - g_divDrag.offset.nY);
        
        var eTable, aeDropTargets;
        if(eElement.nodeName == "TR")
            eTable = eElement.parentNode;
        else
            eTable = eElement.parentNode.parentNode;
            
        aeDropTargets = eTable.getElementsByTagName(eElement.nodeName);
        for(nTargets = 0; nTargets < aeDropTargets.length; nTargets++)
            AddDropTargets(aeDropTargets[nTargets]);
            
        var strFuncName = "OnDrag"+g_divDrag.tableid+"Node";
        if(window[strFuncName])
            window[strFuncName](strNodeID);
        
        if(document.addEventListener)
            {
            document.addEventListener("mousemove", OnDrag, true);
            document.addEventListener("mouseup", OnDragStop, true);
            }
        else
            {
            document.attachEvent("onmousemove", OnDrag);
            document.attachEvent("onmouseup", OnDragStop);
            }
        }
    }
    
function DragNode(eEvent, strTableID, strNodeID, strNodeName)
    {
    eEvent = eEvent || window.event;
    
    ToggleNode(strTableID, strNodeID, strNodeName);
    
    var eElement = eEvent.target || window.event.srcElement;
    while(eElement.nodeName != strNodeName && eElement.parentNode)
        eElement = eElement.parentNode;
           
    OnDragStart(eEvent, eElement, strTableID, strNodeID);
    return false;
    }
    
function DropNode(eEvent, strNodeName)
    {
    eEvent = eEvent || window.event;
    }
    
function AddDropTargets()
    {
    var nTargets = g_aDropTargets.length;
    for(var nTarget = 0; nTarget < arguments.length; nTarget++)
        {
        if(arguments[nTarget].id) g_aDropTargets[nTargets] = arguments[nTarget];
        }
    }
    
function ToggleNode(strTableID, strNodeID, strNodeName, strDefaultNodeID)
    {
    var hidToggleNode = document.getElementById("hidToggle" + strNodeName.toUpperCase() + strTableID);
    if(hidToggleNode != null)
        {
        var eToggleNode;
        if(hidToggleNode.value != "")
            {
            eToggleNode = document.getElementById(strNodeName.toLowerCase() + hidToggleNode.value + strTableID);
            if(eToggleNode != null)
                {
                var nRowOffset = parseInt(document.getElementById("hidOffset" + strNodeName.toUpperCase() + strTableID).value);
                var nRowIndex = ((strNodeName.toUpperCase() == "TR") ? eToggleNode.rowIndex : eToggleNode.parentNode.rowIndex) + nRowOffset;
                SetNodeColour(eToggleNode, ((nRowIndex % 2) == 0) ? "tableoddrow tabletogglecelloff" : "tableevenrow tabletogglecelloff");
                }
            }     
        
        eToggleNode = document.getElementById(strNodeName.toLowerCase() + strNodeID + strTableID);
        if(eToggleNode == null || strNodeID == "")
            {
            hidToggleNode.value = strDefaultNodeID;
            eToggleNode = document.getElementById(strNodeName.toLowerCase() + strDefaultNodeID + strTableID);
            }
        else
            hidToggleNode.value = strNodeID;
            
        if(eToggleNode != null)
            SetNodeColour(eToggleNode, "tabletogglecellon");
        }
    }
    
function IsNodeToggled(eNode)
    {
    return (eNode.nodeName == "TR") ?  IsRowToggled(eNode) : IsCellToggled(eNode);
    }
    
function SetNodeColour(eNode, strNewClass)
    {
    (eNode.nodeName == "TR") ? SetRowColour(eNode, strNewClass) : SetCellColour(eNode, strNewClass);
    }
    
function IsRowToggled(trRow)
    {
    var atdCells = trRow.getElementsByTagName("TD");
    var nIndex;
    for(nIndex = 0; nIndex < atdCells.length; nIndex++)
        {
        if(IsCellToggled(atdCells[nIndex])) return true;
        }
    return false;
    }
    
function SetRowColour(trRow, strNewClass)
    {
    var atdCells = trRow.getElementsByTagName("TD");
    var nIndex, strOldClass, bClassesFound;
    for(nIndex = 0; nIndex < atdCells.length; nIndex++)
        SetCellColour(atdCells[nIndex], strNewClass);
    }
    
function IsCellToggled(tdCell)
    {
    var strClass = new String(tdCell.className);
    if(strClass.indexOf("tabletogglecellon") != -1) return true;
    return false;
    }
            
function SetCellColour(tdCell, strNewClass)
    {
    var bClassesFound = false;
    var strOldClass = new String(tdCell.className);
    if(strOldClass.indexOf("tableoddrow") != -1 || strOldClass.indexOf("tableevenrow") != -1)
        {
        strOldClass = strOldClass.replace(/tableoddrow|tableevenrow/, "");
        bClassesFound = true;
        }
    if(strOldClass.indexOf("tabletogglecelloff") != -1 || strOldClass.indexOf("tabletogglecellon") != -1)
        {
        strOldClass = strOldClass.replace(/tabletogglecelloff|tabletogglecellon/, "");
        bClassesFound = true;
        }
    if(bClassesFound)
        tdCell.className = strOldClass + strNewClass;
    }
    
function SubmitTable()
    {
    document.frmDataTable.submit();
    return false;
    }

function ChangePage(strTableID, nPage)
    {
    document.getElementById("hidPage" + strTableID).value = nPage;
    return SubmitTable();
    }
    
function ChangeRows(strTableID)
    {
    document.getElementById("hidPage" + strTableID).value = "";
    return SubmitTable();
    }
    
function SortColumn(strTableID, strFields, bMultiSort)
    {
    var hidSort = document.getElementById("hidSort" + strTableID);
    var strSort = hidSort.value;
    var bAsc = (strFields.indexOf(" asc") != -1);
    var strRemove = (bAsc) ? strFields.replace(/ asc/ig, " desc") : strFields.replace(/ desc/ig, " asc");
    var reRemove = new RegExp(strRemove);
    var bClear = (strSort.indexOf(strFields.replace(/ asc/ig, " desc")) != -1);
    
    reRemove.ignoreCase = true;
    reRemove.global = true;
    strSort = strSort.replace(reRemove, "");
    
    if(bMultiSort)
		{
		if(!bClear) strSort = strFields + (strSort.length > 0 ? ", " + strSort : "");
		strSort = strSort.replace(/, ,/g, ",");
		strSort = strSort.replace(/^,|, $/g, "");
		
		if(strSort.length == 0)
			strSort = strFields;
		}
	else
		strSort = strFields;
		
    hidSort.value = strSort.toLowerCase();
    return SubmitTable();
    }
    
function DoClickSearch(strTableID)
    {
    var hidPage = document.getElementById("hidPage" + strTableID);
    if(hidPage)
        document.getElementById("hidPage" + strTableID).value = "";
    return true;
    }
    
function DoClearSearch(strTableID)
    {
    document.getElementById("txtSearch" + strTableID).value = "";
    return SubmitTable();
    }
        
function ChangeTab(strTabGroupID, nTab)
    {    
    var hidThisTab = document.getElementById("hidThisTab" + strTabGroupID);
    var hidPrevTab = document.getElementById("hidPrevTab" + strTabGroupID);
    var liTabFrom = document.getElementById("liTab" + strTabGroupID + hidThisTab.value);
    var liTabTo = document.getElementById("liTab" + strTabGroupID + nTab);
    
    liTabFrom.className = "";
    liTabTo.className = "tabcurrent";
    hidPrevTab.value = hidThisTab.value;
    hidThisTab.value = nTab;
    }
// -->