function showReportableLayers(pObjDiv, pNumMapID, pScale)
{
    if ((pObjDiv == null) || (pObjDiv == undefined))
        return;

    var strUrl = "./jsp/showSliderReport.jsp";
    var strUrlParams = "mapID=" + pNumMapID + "&scale=" + pScale + "&lang=" + strLang;

    // Create a new XML HTTP object for AJAX operation.
    var oTempXmlHttp = getNewXmlHTTPObject();

    // Process the AJAX request.
    if (!isXmlHTTPNull(oTempXmlHttp))
    {
        logMsg("Retrieving reportable layers. url: " + encodeURIComponent(strUrl + "?" + strUrlParams), "info", "sliderReport.js (getReport)");
        doXMLRequest(oTempXmlHttp, strUrl, strUrlParams, "post", false, "application/x-www-form-urlencoded");
    }

    // Show the output in the div.
    pObjDiv.innerHTML = oTempXmlHttp.responseText;

    oTempXmlHttp = null;
}

function doReportSelectAll(pObjCheckBox)
{
    if (!document.getElementById("frmReport"))
        return;

    var objChkReportDataLayer = document.getElementById("frmReport").chkReportDataLayer;

    if (document.getElementById("divReportDataLayers").style.display.toUpperCase() != "NONE")
    {
        // Ensure that there are data layers.
        if (objChkReportDataLayer)
        {
            // Get a count of report data layer checkboxes.
            var intCheckCount = ((objChkReportDataLayer.length == null) || (objChkReportDataLayer.length == undefined)) ? 1 : objChkReportDataLayer.length;

            // Loop through the report data layer checkboxes and add/remove selection.
            for (intCounter = 0; intCounter < intCheckCount; intCounter ++)
            {
                // Check to see if there is only 1 data layer row (1 data layer row gives an undefined length count).
                var objTempCheck = (intCheckCount == 1) ? objChkReportDataLayer : objChkReportDataLayer[intCounter];

                if ((objTempCheck.style.display.toUpperCase() != "NONE") && (!objTempCheck.disabled))
                    objTempCheck.checked = pObjCheckBox.checked;
            }
        }

        // Change button state.
        enableDisableGetReportButton();
    }
}

function doReportCheckBox(pObjCheckBox, pStrValue)
{
    if (!document.getElementById("frmReport"))
        return;

    var objHidReportDataLayer = document.getElementById("frmReport").hidReportDataLayer;

    // Change button state.
    enableDisableGetReportButton();

    if ((!pObjCheckBox.checked) || (document.getElementById("chkReportSelectAll").checked))
        document.getElementById("chkReportSelectAll").checked = false;
}

function doGetReport()
{
    if (!document.getElementById("frmReport"))
        return;

    var objChkReportDataLayer = document.getElementById("frmReport").chkReportDataLayer;
    var objHidReportDataLayer = document.getElementById("frmReport").hidReportDataLayer;

    var strLayers = "";
    var strFilters = "";

    // Ensure that there are data layers.
    if (objChkReportDataLayer)
    {
        // Get a count of report data layer checkboxes.
        var intCheckCount = ((objChkReportDataLayer.length == null) || (objChkReportDataLayer.length == undefined)) ? 1 : objChkReportDataLayer.length;

        // Loop through the report data layer checkboxes and add/remove selections.
        for (intCounter = 0; intCounter < intCheckCount; intCounter ++)
        {
            // Check to see if there is only 1 data layer row (1 data layer row gives an undefined length count).
            var objTempCheck = ((intCheckCount == 1) ? objChkReportDataLayer : objChkReportDataLayer[intCounter]);
            var objTempHidden = ((intCheckCount == 1) ? objHidReportDataLayer : objHidReportDataLayer[intCounter]);

            if (objTempCheck.checked)
                strLayers += objTempHidden.value + ",";

            // Get any filters that have been applied (if the filter exists).
            if (document.getElementById("hidFilter_" + intCounter))
                if (document.getElementById("hidFilter_" + intCounter).value.trim().length > 0)
                    strFilters += objTempHidden.value.split("|")[0]  + "|" + document.getElementById("hidFilter_" + intCounter).value.trim() + ",";
        }
    }

    // Ensure that at least one layer is selected.
    if (strLayers.length > 0)
    {
        logMsg("Generating report...", "info", "sliderReport.js (doGetReport)");

        doPostForm("frmReportWindow", "windowReport", "./jsp/showReport.jsp", ["layers$" + strLayers.substring(0, strLayers.length - 1), "filters$" + strFilters.substring(0, strFilters.length - 1).trim(), "bbox$" + objMap.getExtent().toBBOX(), "lang$" + strLang])
    }
}

function updateReport(pStrLayersChecked, pStrLayersUnchecked)
{
    if (!document.getElementById("frmReport"))
        return;

    var objChkReportDataLayer = document.getElementById("frmReport").chkReportDataLayer;
    var objHidReportDataLayer = document.getElementById("frmReport").hidReportDataLayer;

    var strLayersChecked = "," + pStrLayersChecked + ",";
    var strLayersUnchecked = "," + pStrLayersUnchecked + ",";

    var boolSelectAll = false;

    // Ensure that there are data layers.
    if (objChkReportDataLayer)
    {
        // Get a count of report data layer checkboxes.
        var intCheckCount = ((objChkReportDataLayer.length == null) || (objChkReportDataLayer.length == undefined)) ? 1 : objChkReportDataLayer.length;

        // Loop through the report data layer checkboxes and add/remove selections.
        for (intCounter = 0; intCounter < intCheckCount; intCounter ++)
        {
            // Check to see if there is only 1 data layer row (1 data layer row gives an undefined length count).
            var objTempCheck = (intCheckCount == 1) ? objChkReportDataLayer : objChkReportDataLayer[intCounter];
            var objTempHidden = (intCheckCount == 1) ? objHidReportDataLayer : objHidReportDataLayer[intCounter];

            // Check to see if the layer is to be reported.
            if (strLayersChecked.toUpperCase().indexOf("," + objTempHidden.value.split("|")[1].toUpperCase() + ",") >= 0)
            {
                // Enable the checkbox if disabled and change text style.
                if ((objTempCheck.style.display.toUpperCase() != "NONE") && (objTempCheck.disabled))
                {
                    objTempCheck.disabled = false;
                    document.getElementById("tblRowReportData" + intCounter).className = "enabledText";

                    // Place a checkmark in the checkbox.
                    objTempCheck.checked = true;
                }
            }
            else if (strLayersUnchecked.toUpperCase().indexOf("," + objTempHidden.value.split("|")[1].toUpperCase() + ",") >= 0)
            {
                // Disable the checkbox, the clear selection and change text style.
                objTempCheck.checked = false;
                objTempCheck.disabled = true;
                document.getElementById("tblRowReportData" + intCounter).className = "disabledText";
            }

            // Check to see if there is at least a checkbox selected.
            if ((objTempCheck.checked) && (!boolSelectAll))
                boolSelectAll = true;
        }
    }

    // If there are no checkboxes selected, uncheck the "select all" checkbox.
    if (!boolSelectAll)
        if (document.getElementById("chkReportSelectAll"))
            document.getElementById("chkReportSelectAll").checked = false;

    // Change button state.
    enableDisableGetReportButton();
}

function enableDisableGetReportButton()
{
    if (!document.getElementById("frmReport"))
        return;

    var objChkReportDataLayer = document.getElementById("frmReport").chkReportDataLayer;
    var objHidReportDataLayer = document.getElementById("frmReport").hidReportDataLayer;

    // Loop through the report data layer checkboxes to see if there are any layers selected.
    var boolLayerSelected = false;

    // Ensure that there are data layers.
    if (objChkReportDataLayer)
    {
        // Get a count of report data layer checkboxes.
        var intCheckCount = ((objChkReportDataLayer.length == null) || (objChkReportDataLayer.length == undefined)) ? 1 : objChkReportDataLayer.length;

        // Loop through the report data layer checkboxes and add/remove selections.
        for (intCounter = 0; intCounter < intCheckCount; intCounter ++)
        {
            // Check to see if there is only 1 data layer row (1 data layer row gives an undefined length count).
            var objTempCheck = (intCheckCount == 1) ? objChkReportDataLayer : objChkReportDataLayer[intCounter];

            if (objTempCheck.checked)
            {
                boolLayerSelected = true;
                break;
            }
        }
    }

    // Enable/disable the button based on number of selected layers.
    if (document.getElementById("btnGetReport"))
        document.getElementById("btnGetReport").disabled = !boolLayerSelected;
}
