//see mozilla/firefoz chrome://webdeveloper/content/common/xpath.js
// Evaluates an XPath against a given node
function webdeveloper_evaluateXPath(node, xPath)
{
    var result         = null;
    var resultList     = new Array();
    var xPathEvaluator = new XPathEvaluator();
    var results        = null;

    // If the node has an owner document
    if(node.ownerDocument)
    {
        results = xPathEvaluator.evaluate(xPath, node, xPathEvaluator.createNSResolver(node.ownerDocument.documentElement), 0, null);
    }
    else
    {
        results = xPathEvaluator.evaluate(xPath, node, xPathEvaluator.createNSResolver(node.documentElement), 0, null);
    }

    // Loop through the results
    while((result = results.iterateNext()) != null)
    {
        resultList.push(result);
    }

    return resultList;
}

//chrome://webdeveloper/content/generated/output_pivot.js
// Collapses all output
function webdeveloper_collapseAllOutput(event)
{
    webdeveloper_pivotAllOutput(event, false);
}

// Expands all output
function webdeveloper_expandAllOutput(event)
{
    webdeveloper_pivotAllOutput(event, true);
}

// Makes all output on the page pivotable
function webdeveloper_makeOutputPivotable()
{
    var collapseAll       = document.getElementById("webdeveloper-generated-tool-collapse-all");
    var expandAll         = document.getElementById("webdeveloper-generated-tool-expand-all");
    var spanElementList   = webdeveloper_evaluateXPath(document, "//span[@class='collapsed pivot']");
    var spanElementLength = spanElementList.length;

    // Loop through the span elements
    for(var i = 0; i < spanElementLength; i++)
    {
        spanElementList[i].addEventListener("click", webdeveloper_pivotOutput, false);
    }

    // If the collapse all element is found
    if(collapseAll)
    {
        collapseAll.addEventListener("click", webdeveloper_collapseAllOutput, false);
    }

    // If the expand all element is found
    if(expandAll)
    {
        expandAll.addEventListener("click", webdeveloper_expandAllOutput, false);
    }
}

// Pivots all output
function webdeveloper_pivotAllOutput(event, expand)
{
    var divElementList    = null;
    var divElementLength  = null;
    var spanElementList   = null;
    var spanElementLength = null;

    // If expanding
    if(expand)
    {
        divElementList    = webdeveloper_evaluateXPath(document, "//div[@class='collapsed output']");
        divElementLength  = divElementList.length;
        spanElementList   = webdeveloper_evaluateXPath(document, "//span[@class='collapsed pivot']");
        spanElementLength = spanElementList.length;

        // Loop through the div elements
        for(var i = 0; i < divElementLength; i++)
        {
            divElementList[i].setAttribute("class", "output");
        }

        // Loop through the span elements
        for(i = 0; i < spanElementLength; i++)
        {
            spanElementList[i].setAttribute("class", "expanded pivot");
        }
    }
    else
    {
        divElementList    = webdeveloper_evaluateXPath(document, "//div[@class='output']");
        divElementLength  = divElementList.length;
        spanElementList   = webdeveloper_evaluateXPath(document, "//span[@class='expanded pivot']");
        spanElementLength = spanElementList.length;

        // Loop through the div elements
        for(var i = 0; i < divElementLength; i++)
        {
            divElementList[i].setAttribute("class", "collapsed output");
        }

        // Loop through the span elements
        for(i = 0; i < spanElementLength; i++)
        {
            spanElementList[i].setAttribute("class", "collapsed pivot");
        }
    }

    event.preventDefault();
}

// Pivots output
function webdeveloper_pivotOutput(event)
{
    // If the event is set
    if(event)
    {
        var pivot  = event.target;
        var output = pivot.parentNode.nextSibling;

        // If the output element is found
        if(output)
        {
            // If the output class attribute is set to collapsed
            if(output.getAttribute("class") == "collapsed output")
            {
                output.setAttribute("class", "output");
                pivot.setAttribute("class", "expanded pivot");
            }
            else if(output.getAttribute("class") == "output")
            {
                output.setAttribute("class", "collapsed output");
                pivot.setAttribute("class", "collapsed pivot");
            }
        }
    }
}

//webdeveloper_makeOutputPivotable();

