// ajaxTree("datastructurenode.mth", uniqueNodeID, "/ajax/dataobjectnode/*", "innerHTML") 

function trace(narrative)
{
    document.getElementById("debugoutput").innerHTML=narrative;
}

function submitAjaxTreeForm(element, prefix, uniqueid)
{
    var uniqueIdElement = document.getElementById(prefix+".ajaxtree.submitteduniqueid");
    if (uniqueIdElement)
    {
        uniqueIdElement.value = uniqueid;
        submitForm(element);
    }
    
}

function setScrollPositions(divId, topPosition, leftPosition)
{
    var divElement = document.getElementById(divId);
    var iteration = 0;
    if (divElement)
    {
        while (iteration < 20)
        {
            divElement.scrollLeft = leftPosition;
            divElement.scrollTop = topPosition;
//            trace("iteration = " + iteration + " topPosition = " + topPosition + "Top = " + divElement.scrollTop + "Left = " + divElement.scrollLeft);
            if ((topPosition == divElement.scrollTop) && (leftPosition == divElement.scrollLeft))
            {
                break;
            }
            iteration++;
        }
    }
}

function recordScrollPosition(divId, leftPositionFieldId,topPositionFieldId)
{

//        trace("recordScrollPosition - " + divId);

    var leftPositionElement = document.getElementById(leftPositionFieldId);
    var topPositionElement = document.getElementById(topPositionFieldId);
    var divElement = document.getElementById(divId);
    
    if (divElement)
    {
        if (leftPositionElement)
        {
            leftPositionElement.value = divElement.scrollLeft;
        }
        if (topPositionElement)
        {
            topPositionElement.value = divElement.scrollTop;
//            trace("topposition = " + divElement.scrollTop + "topPositionElement.value = " + topPositionElement.value );
        }
    }
    
}

function ajaxTreeOpen(method, uniqueNodeID, xpathSelector, propertyName) 
{
    ajaxTreeOpen(method, uniqueNodeID, xpathSelector, propertyName, null, null, null, null) ;
} 
function ajaxTreeOpen(method, uniqueNodeID, xpathSelector, propertyName, additionalParameterNames, additionalParameterValues, prefix, pageStateField) 
{ 
    var Ajax = new sack(method); 
    
    var populatedElement = document.getElementById("POPULATED:"+uniqueNodeID);
    var populated = populatedElement.value;
    var idx;
    
    if (populated == "false")
    {
        Ajax.setVar("uniquenodeid",uniqueNodeID);  
        if (prefix)
        {
            Ajax.setVar("prefix",prefix);  
        }
        
        if (pageStateField)
        {
            var pageStateElement = document.getElementById(pageStateField);
            if (pageStateElement)
            {
                Ajax.setVar(pageStateField, pageStateElement["value"]);
            }
        }
        if (additionalParameterNames)
        {
        
// RN - Talk to Geoff about how he envisaged this working, as I don't think it does at the moment.  Temporariliy changed it so that you can pass one addition parameter        
//            for (idx=0; idx < additionalParameterNames.length; idx++)
//            {
//                Ajax.setVar(additionalParameterNames[idx], additionalParameterValues[idx]);  
//            }

            Ajax.setVar(additionalParameterNames, additionalParameterValues);
        }
        
        Ajax.onCompletion = function PopulateTreeNode() 
        { 
            var XMLNodeList1 = this.xmlhttp.responseXML.selectNodes(xpathSelector); 
            if (XMLNodeList1 &&  (XMLNodeList1.length > 0))
            {
                var elementObj1 = document.getElementById(uniqueNodeID); 
                var elementNodeName1 = elementObj1.nodeName; 
                elementNodeName1 = elementNodeName1.toLowerCase(); 
                propertyName = "innerHTML"; 
                propertyName = propertyName.toLowerCase(); 
                if (elementNodeName1 == "select" && propertyName == "innerhtml") 
                { 
                    setSelectInnerHTML(elementObj1, XMLNodeList1);  
                } 
                else 
                {
                    copyXMLNodeListToDom(XMLNodeList1, elementObj1);
//                    elementObj1.innerHTML = getXMLNodeListSerialisation(XMLNodeList1);  
                }
                toggleClosedStatus(uniqueNodeID, true);

            }
            else
            {
                setFolderEmpty(uniqueNodeID);
            }
        };
          
        Ajax.runAJAX(); 
        populatedElement.value="true";
    }
    else
    {
        toggleClosedStatus(uniqueNodeID, true);

        Ajax.setVar("uniquenodeid",uniqueNodeID);  
        Ajax.setVar("recordonly","true");  
        if (prefix)
        {
            Ajax.setVar("prefix",prefix);  
        }
        Ajax.runAJAX(); 
    }
};

function ajaxTreeClose(method, uniqueNodeID, prefix, pageStateField) 
{ 
    toggleClosedStatus(uniqueNodeID, false);
    if (method)
    {
        var Ajax = new sack(method); 
        Ajax.setVar("uniquenodeid",uniqueNodeID);  
        Ajax.setVar("recordonly","true");  
        Ajax.setVar("closenode","true");  
        if (pageStateField)
        {
            var pageStateElement = document.getElementById(pageStateField);
            if (pageStateElement)
            {
                Ajax.setVar(pageStateField, pageStateElement["value"]);
            }
        }
        if (prefix)
        {
            Ajax.setVar("prefix",prefix);  
        }
        Ajax.runAJAX(); 
    }
}

function setFolderEmpty(uniqueNodeID)
{
    var openImage = document.getElementById("OPENIMG:"+uniqueNodeID);
    var closedImage = document.getElementById("CLOSEDIMG:"+uniqueNodeID);
    var transparentImage = document.getElementById("TRANSPIMG:"+uniqueNodeID);
    var openFolder = document.getElementById("OPENFOLDER:"+uniqueNodeID);
    var closedFolder = document.getElementById("CLOSEDFOLDER:"+uniqueNodeID);

    closedImage.style.display="none";
    closedFolder.style.display="inline";
    openImage.style.display="none";
    openFolder.style.display="none";
    transparentImage.style.display="inline";
}

function toggleClosedStatus(uniqueNodeID, open)
{
    var openImage = document.getElementById("OPENIMG:"+uniqueNodeID);
    var closedImage = document.getElementById("CLOSEDIMG:"+uniqueNodeID);
    var openFolder = document.getElementById("OPENFOLDER:"+uniqueNodeID);
    var closedFolder = document.getElementById("CLOSEDFOLDER:"+uniqueNodeID);
    var childContainer = document.getElementById(uniqueNodeID);

    if (open)
    {
        closedImage.style.display="none";
        closedFolder.style.display="none";
        openImage.style.display="inline";
        openFolder.style.display="inline";
        childContainer.style.display="block";
    }
    else
    {
        childContainer.style.display="none";
        openImage.style.display="none";
        openFolder.style.display="none";
        closedImage.style.display="inline";
        closedFolder.style.display="inline";
    }
    
}
