function Setup()
{
    _Throbber.Activate();

    _CategoryCount = 0;
    _DestinationURL = "";
    _OOTClient = new SOAPClient(_ServiceLocation);

    if(_XHR)
    {
        _XHR.open("GET",_ContentLocation,false);
        _XHR.send(null);
        _XML = _XHR.responseText;

        BuildTable();
    }

    _Throbber.Deactivate();

    return;
}

function BuildTable()
{
    var Categories = _OOTClient.Categories(_XML).split("\n");

    _CategoryTotal = Categories.length;

    BuildTableHeader(Categories);
    BuildTableFooter(Categories);
    BuildTableBody(Categories);

    return;
}

function BuildTableHeader(Categories)
{
    var TableHeader = document.getElementById("tableheader");
    var Row = null;
    var TableHeaderCell = null;
    var NewInput = null;
    var NewLabel = null;

    while(TableHeader.rows.length)
    {
        TableHeader.deleteRow(0);
    }
    TableHeader.insertRow(0);
    TableHeader.insertRow(1);

    Row = TableHeader.rows[0];
    for(i in Categories)
    {
        TableHeaderCell = document.createElement("th");

        NewInput = document.createElement("input");
        NewInput.type = "checkbox";
        NewInput.id = "Cont-" + Categories[i];
        NewInput.disabled = true;
        NewInput.value = Categories[i];
        NewInput.setAttribute("onclick","EnableContinue()");

        NewLabel = document.createElement("label");
        NewLabel.setAttribute("for",NewInput.id);
        NewLabel.appendChild(document.createTextNode(Categories[i]));
        
        TableHeaderCell.appendChild(NewInput);
        TableHeaderCell.appendChild(NewLabel);

        Row.appendChild(TableHeaderCell);
    }

    Row = TableHeader.rows[1];
    for(i in Categories)
    {
        TableHeaderCell = document.createElement("th");

        NewInput = document.createElement("input");
        NewInput.type = "button";
        NewInput.value = "Clear";
        NewInput.id = "Clear-" + Categories[i];
        NewInput.disabled = true;
        NewInput.setAttribute("onclick","ClearCategory('" + Categories[i] + "')");

        TableHeaderCell.appendChild(NewInput);

        Row.appendChild(TableHeaderCell);
    }

    return;
}

function BuildTableFooter(Categories)
{
    var TableFooter = document.getElementById("tablefooter");

    TableFooter = TableFooter.rows[0].cells[0];

    TableFooter.colSpan = Categories.length;
    document.getElementById("GoButton").disabled = true;
    document.getElementById("ContinueButton").disabled = true;

    return;
}

function BuildTableBody(Categories)
{
    var TableBody = document.getElementById("tablebody");
    var TableBodyRow = document.createElement("tr");
    var TableDataCell = null;

    while(TableBody.rows.length)
    {
        TableBody.deleteRow(0);
    }

    for(i in Categories)
    {
        TableDataCell = document.createElement("td");

        TableDataCell.className = "inputcell";
        TableDataCell.appendChild(BuildSelectElement(Categories[i]));

        TableBodyRow.appendChild(TableDataCell);
    }

    TableBody.appendChild(TableBodyRow);

    return;
}

function BuildSelectElement(Category)
{
    var SelectElement = document.createElement("select");
    var SelectSize = null;
    BuildSelectList(Category,SelectElement);
    SelectSize = SelectElement.options.length;
    if(SelectSize > 25)
    {
        SelectSize = 25;
    }
    SelectElement.id = Category;
    SelectElement.name = Category;
    SelectElement.size = SelectSize;
    SelectElement.setAttribute("onclick","RunQuery(id)");

    return SelectElement;
}

function BuildSelectList(Category,SelectElement)
{
    var CategoryDump = null;
    var CategoryXML = null;
    var NewOption = null;

    CategoryDump = _OOTClient.CategoryDump(_XML,Category);
    CategoryXML = ParseXMLString(CategoryDump);
    CategoryXML = CategoryXML.childNodes[0].childNodes;

    for(var i = 0; i < CategoryXML.length; i++)
    {
        NewOption = document.createElement("option");
        NewOption.value = CategoryXML[i].nodeName;
        NewOption.text = CategoryXML[i].getAttribute("display") +
                         " (" + CategoryXML[i].getAttribute("purview") + ")";

        SelectElement.appendChild(NewOption,null);
    }

    return;
}
