﻿var handler;

window.onload = function() {
    var boxExpandedId = $("boxExpandedId");
    
    // If we have an expanded node, then scroll to it (FindPosition is in Common.js)
    if (boxExpandedId && boxExpandedId.value) {
        window.scroll(0, FindPosition($(boxExpandedId.value))[1] - 25);
    }
    
    // Check the handler to be used
    var boxHandler = $("boxHandler");
    handler = boxHandler ? boxHandler.value : "BrowseHandler.ashx";
}

/*
 * Changes the url for all links in the nominated container
 */
function ModifyLinks(container, linkUrl) {
    var links = container.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++) {
        links[i]["href"] = "javascript:" + linkUrl + ";";
    }
}

/*
 * Change the image in the cell to the nominated image url
 */
function ModifyImage(dataMart, imageSrc, title) {
    var img = $("i_" + dataMart);
    img.src = "_Images/" + imageSrc;
    img.title = title;
    img.alt = title;
}

/*
 * Expands the nominated dataset into it's component dimensions
 */
function Expand(dataMartId) {
    lastDataMartId = dataMartId;

    // Modify the links to collapse instead of expand, then modify the image to be a - instead of a +
    var containerId = "c_" + dataMartId;
    var container = $(containerId);
    ModifyLinks(container, "Collapse('" + dataMartId + "')");
    ModifyImage(dataMartId, "Minus.png", "Collapse");

    var childContainer = $(containerId + "_e");
    childContainer.style["display"] = "block";
    
    // Check if this dataMart has previously been expanded
    if (childContainer.innerHTML != "") {
        return;
    }
    
    // If not, build a new row and fill it with a loading message
    childContainer.innerHTML = GetProgressImage("Loading...", "Loading", null);
    
    var url = "Handlers/" + handler + "?DataMartId=" + dataMartId;
    var onResponse = function(responseText) {
        var isSingleDimension = GetResponse("IsSingleDimension");
        if (isSingleDimension != "True") {
            childContainer.className = "e";
        }
        
        childContainer.innerHTML = responseText;
        DiscardXmlHttpRequest();    
    }
    
    SendXmlHttpRequest(url, onResponse, OnError);    
}

/*
 * Collapses the nominated dataset
 */
function Collapse(dataMartId) {
    // Modify the links
    var containerId = "c_" + dataMartId;
    var container = $(containerId);
    ModifyLinks(container, "Expand('" + dataMartId + "')");
    ModifyImage(dataMartId, "Plus.png", "Expand");
    
    // Now collapse the data set row
    var childContainer = $(containerId + "_e");
    childContainer.style["display"] = "none";
}

/* 
 * Expands the nominated dimension
 */
function ExpandChild(dataMartId, dimensionId) {
    // Change the link to collapse
    var link = $("link_" + dataMartId + "_" + dimensionId);
    link.href = "javascript:CollapseChild('" + dataMartId + "', '" + dimensionId + "');";
    
    // Update the corresponding image
    var img = $("img_" + dataMartId + "_" + dimensionId);
    img.src = "_Images/Minus.png";
    img.alt = "Collapse";
    img.onclick = "CollapseChild('" + dataMartId + "', '" + dimensionId + "');";
    
    var divDimension = $(dataMartId + "_" + dimensionId + "_e");
    divDimension.style["display"] = "block";
    
    if (divDimension.innerHTML == null || divDimension.innerHTML == "") {
        divDimension.innerHTML = GetProgressImage("Loading...", "Loading", null);    
        
        var url = "Handlers/" + handler + "?DataMartId=" + dataMartId + "&DimensionId=" + dimensionId;
        var onResponse = function(responseText) {
            divDimension.innerHTML = responseText;
            DiscardXmlHttpRequest();
        }
        
        SendXmlHttpRequest(url, onResponse, OnError);
    }
}

/*
 * Collapses the nominated dimension
 */
function CollapseChild(dataMartId, dimensionId) {
    // Change the link to expand
    var link = document.getElementById("link_" + dataMartId + "_" + dimensionId);
    link.href = "javascript:ExpandChild('" + dataMartId + "', '" + dimensionId + "');";
    
    // Update the corresponding image
    var img = $("img_" + dataMartId + "_" + dimensionId);
    img.src = "_Images/Plus.png";
    img.alt = "Expand";
    img.onclick = "ExpandChild('" + dataMartId + "', '" + dimensionId + "');";
    
    var divDimension = $(dataMartId + "_" + dimensionId + "_e");
    divDimension.style["display"] = "none";
}

/*
 * Invoked when there's an error processing an xmlhttp request
 */
function OnError(responseText) {
    var divMessageBox = document.getElementById("messageBox");
    divMessageBox.innerHTML = BuildMessageBox(responseText, "error");
}

/*
 * Expands a child dimension
 */
function Toggle(childId) {
    // Toggle the child
    var divChild = $(childId);
    var displayStyle = divChild.style["display"] != null && divChild.style["display"] == "none"
        ? "block" : "none";
        
    divChild.style["display"] = displayStyle;
    
    // Update the image
    var img = $("img_" + childId);
    img.src = displayStyle == "block" ? "_Images/Minus.png" : "_Images/Plus.png";
    img.alt = displayStyle == "block" ? "Collapse" : "Expand";
}