// Drilling down stuff

var selected_cells = new Array();

var currentMode = "";

function planit_resize_win()
{
    switchMode(currentMode,5);
    //XXX GNPD HACK - but wont break anything else...
    if (resize_win)
        resize_win();
}



function switchMode(mode, maxTab)
{
    var formContainer = document.getElementById("form_container");
    var innerContainer = document.getElementById("wizard_inner_container");
    var finalContainer = document.getElementById("final_container");
    var wizardButtons = document.getElementById("wizard_buttons");
    var wizardButtonsFinal = document.getElementById("wizard_buttons_final");
    var preview = document.getElementById("graph_preview");
    var controlBox = document.getElementById("control_box");
    var cancelButton = document.getElementById("cancel_finish_button");
    var backToWizard = document.getElementById("back_to_wizard");
    var finish_button = document.getElementById("select_finish_button"); 
    
    
    if (mode == "advanced")
    {
        formContainer.className = "advanced";
        wizardButtons.style.display = "none";
        preview.style.display = "none";
        controlBox.style.display = "none";
        innerContainer.style.border = "none";
        cancelButton.style.display = "none";
        backToWizard.style.display = "inline";
        wizardButtonsFinal.style.display = "none";
        finish_button.style.display="inline";

        var height = 0, minHeight = 0;
        for(i=1; i<=5; i++)
        {
            var panel = document.getElementById("panel"+i);
            panel.style.width = "49%";
            
            if (i <= 2)
            {
                minHeight = "80%";
                height = "60%";
            }
            else if (i <= 4)
            {
                minHeight = "80%";
                height = "30%";
            }
            else
            {
                minHeight = "80%";
                height = "20%";
            }
            panel.style.border = "1px solid #e0e0e0";
            panel.style.height = height;
            panel.style.minHeight = minHeight;
            
            if (i % 2 != 0)
            {
                panel.style.cssFloat = "left";
                panel.style.display = "block";
            }
            else
            {
                panel.style.cssFloat = "right";
                panel.style.display = "block";
            }
        }
    }
    else
    {
        // Make sure all tabs are enabled
        for (i=1; i<=maxTab; i++)
        {
            enablePlanitTab(i, false, false);
        }

    
        formContainer.className = "";
        formContainer.style.width = "77%";
        wizardButtons.style.display = "block";
        preview.style.display = "block";
        preview.className = "GraphDetails";
        innerContainer.style.border = "1px solid #d7d7d7";
        innerContainer.style.width = "100%";
        innerContainer.style.height = "250px"
        innerContainer.style.position = "relative"; 
        cancelButton.style.display = "inline";
        backToWizard.style.display = "none";
        controlBox.style.display = "block";
        controlBox.style.minWidth = "100%";        
        wizardButtonsFinal.style.display="inline";
        finish_button.style.display="none";

        for(i=1; i<=5; i++)
        {
            var panel = document.getElementById("panel"+i);
            panel.style.cssFloat = "left";
            panel.style.minHeight = "";
            panel.style.border = "";
            panel.style.display = "none";
            panel.style.width = "70%";
        }

        selectPlanitTab(1, maxTab);
        generatePreview();
    }
}


function restoreSettings()
{
    var checkboxes = document.getElementsByTagName("input");

    for (i=0; i<checkboxes.length; i++)
    {
        if (checkboxes[i].type == "checkbox" && checkboxes[i].value.length)
        {
            checkboxes[i].checked = true;
        }
    }
}

function validate()
{
    var chartType = document.getElementById("chart_type");
    var grouping0 = document.getElementById("grouping_0");
    var grouping1 = document.getElementById("grouping_1");
    
    var crosstab_mode = document.getElementById("crosstab_mode");
    var mode = crosstab_mode.options[crosstab_mode.selectedIndex].value;
    
    if (chartType.value.length == 0 && mode != "crosstab")
    {
        window.alert("You must choose a chart type.");
        return false;
    }
    
    if (grouping0.options[grouping0.selectedIndex].text == "-")
    {
        window.alert("You must choose a field for the " + getAxisDescription("x"));
        return false;
    }

    var status = document.getElementById("penetrationMode").checked;
    if (status) //Z-Axis is only required for penetraion mode
    {
        if (grouping1.options[grouping1.selectedIndex].text == "-")
        {
            window.alert("You must choose a field for the " + getAxisDescription("z"));
            return false;
        }
    }
    return true;
}

function getAxisDescription(axis)
{
    var crosstab_mode = document.getElementById("crosstab_mode");
    var mode = crosstab_mode.options[crosstab_mode.selectedIndex].value;
    if (mode == "crosstab")
    {
        switch(axis)
        {
            case "x":
                return "column";
            case "z":  
                return "row";
            default:
                return "unknown";
        }
    }
    else
    {
        var chart_type = document.getElementById("chart_type").value;
        switch(axis)
        {
            case "x":
                if (chart_type == "pie")
                {
                    return "Dataset";
                }
                else
                {
                    return "X-Axis";
                }
            case "z":
                return "Z-Axis";
            default:
                return "unknown";
        }
    }
}

function generatePreview(show_all)
{
    var stage = 0;
    if (show_all)
    {
        stage = MAX_PLANIT_TABS;
    }
    else
    {
        stage = currentPlanitTab;
    }
    // stage < 2  => No preview (not enough info)
    // stage = 2  => Show selected chart type
    // stage = 3  => Show chart type and selected X (& Z)
    // stage = 4  => Show chart type (including any special options) and selected X (& Z)

    var img = document.getElementById("preview_image");
    var chart_type = document.getElementById("chart_type");
    
   
    var previewTitle = document.getElementById("preview_title");
    var previewChartTitle = document.getElementById("preview_chart_title");
    var previewX = document.getElementById("preview_x");
    var previewY = document.getElementById("preview_y");
    var previewZ = document.getElementById("preview_z");
    var grouping_0 = document.getElementById("grouping_0");
    var grouping_1 = document.getElementById("grouping_1");
    var output_data = document.getElementById("data");
    var presentation = document.getElementById("presentation_ready");
    var three_dimensional = document.getElementById("three_dimensional");
    var previewOther = document.getElementById("preview_other")
    var chartTitle = document.getElementById("title");
    var outputStatus = document.getElementById("outputStatus");
    
    var crosstab_mode = document.getElementById("crosstab_mode");
    var mode = crosstab_mode.options[crosstab_mode.selectedIndex].value;
    
    if (stage < 2)
    {
        img.src = "/images/compere/planit/blank.jpg";
        previewX.innerHTML = "";
        previewY.innerHTML = "";        
        previewZ.innerHTML = "";
        previewOther.innerHTML = "";
        previewTitle.innerHTML = "";
        outputStatus.style.display = "none";
    }
    
    if (mode != "crosstab")
    {    
        if (stage >= 2)
        {
            previewTitle.innerHTML = "Your Graph Details";
            if (chart_type.value.length > 0)
            {
                img.src = getImageNameForChartSettings();
            }
            
            previewX.innerHTML = "";
            previewY.innerHTML = "";
            previewZ.innerHTML = "";
    
            var other_details = "";
            if (presentation.checked && !presentation.disabled)
            {
                other_details+="This graph is <b>presentation ready</b>";
            }
    
            if (three_dimensional.checked)
            {
                if (other_details.length)
                {
                    other_details+=" and ";
                }
                else
                {
                    other_details = "This graph is ";
                }
                
                other_details+="<b>3D</b>";
            }
    
            previewOther.innerHTML = other_details;
            outputStatus.style.display = "";
        }
    }
    else
    {
        if (stage >= 2)
        {
            previewTitle.innerHTML = "Your Crosstab Details";
            img.src = "/images/compere/planit/crosstab.jpg";
                        
            previewX.innerHTML = "";
            previewY.innerHTML = "";
            previewZ.innerHTML = "";
            outputStatus.style.display = "";
        }
    }
        
    if (stage >= 3)
    {
        var xAxis = grouping_0.options[grouping_0.selectedIndex].text;
        var zAxis = grouping_1.options[grouping_1.selectedIndex].text;
        
        if (xAxis != "-")
        {
            previewX.innerHTML = xAxis;
        }

        if (zAxis != "-" && !grouping_1.disabled)
        {
            previewZ.innerHTML = zAxis;
        }

        previewY.innerHTML = output_data.options[output_data.selectedIndex].text;
    }
}

function setFilterMode()
{
  var form = document.forms["planit_form"];
  var filter_mode = form.restrict_option;  

  var mode;

  // if there is a filter when the page reloads, force the mode
  
  var grouping_0_selected_ids = form.grouping_0_selected_ids.value;
  var grouping_1_selected_ids = form.grouping_1_selected_ids.value;
  
  for (x = 0;x < filter_mode.length;x++)
  {
    if (filter_mode[x].checked)
    {
      
      mode = filter_mode[x].value;
      break;
    }
  }

  if (typeof(mode) == "undefined")
  {
    // make sure 'no filtering' is checked
    filter_mode[0].checked = true;
  }

  if (mode != "planit")
  {
    grouping_0_selected_ids="";
    grouping_1_selected_ids="";
    grouping_0_parent_ids="";
    grouping_1_parent_ids="";
  }
  
  
  if (grouping_0_selected_ids.length || grouping_1_selected_ids.length)
  {
    // set correct mode - 'planit' means custom
    mode = "planit"
    
    
    for (x = 0;x < filter_mode.length;++x)
    {
      if (filter_mode[x].value=="planit")
      {
        filter_mode[x].checked = true;
      }
    }
    
    // check custom filter
    if (grouping_0_selected_ids.length)
    {
      // check column box
      form.grouping_0_enabled.checked = true;
      
    }
    
    if (grouping_1_selected_ids.length)
    {
      // check row box
      form.grouping_1_enabled.checked = true;
    }    
  }
  
  var filter_options = document.getElementById("filter_options");

  if (mode == "planit")
  {
    // set filter options visible
    filter_options.style.display="";
  }
  else
  {
    // set filter msg visible
    filter_options.style.display="none";
  }
  

}


function setCrosstabMode(do_update)
{
  var form = document.forms["planit_form"];
  var crosstab_mode = form.crosstab_mode;
  var mode = crosstab_mode.options[crosstab_mode.selectedIndex].value;
  
  var grouping0_desc   = document.getElementById("grouping0_desc");
  var grouping1_desc   = document.getElementById("grouping1_desc");

  if (mode == "crosstab")
  {
    // update descriptions
    grouping0_desc.innerHTML = "Column: ";
    grouping1_desc.innerHTML = "Row: ";
    
    document.getElementById("graph_type_options").style.display = "none";
  }
  else if (mode == "graph")
  {
    // update descriptions
    grouping0_desc.innerHTML = "X-Axis: ";
    grouping1_desc.innerHTML = "Z-Axis: ";

    document.getElementById("graph_type_options").style.display = "";

    graphTypeChanged();

    //enable the advanced graphing options
    enablePlanitTab(4, true);
  }
  else
  {
    // invalid mode set
  }  
 
    // ensure that having the pie chart selected doesnt stop the crosstab from working properly
    var grouping1 = document.getElementById("grouping_1")
    var grouping1_top = document.getElementById("grouping_1_top");
    var grouping1_desc   = document.getElementById("grouping1_desc");
    var penetrationMode = document.getElementById("penetrationMode");
    grouping1.disabled = false;
    grouping1_top.disabled = false;
    grouping1_desc.className = "";
    penetrationMode.disabled = false;
    
    setOutputMode();
}


function setPenetrationMode()
{
    var status = document.getElementById("penetrationMode").checked;

    //get the combo boxes we need
    var xAxis = document.getElementById("grouping_0");
    var zAxis = document.getElementById("grouping_1");

    var xItem = xAxis.options[xAxis.selectedIndex].text;
    var zItem = zAxis.options[zAxis.selectedIndex].text;
    
    var outputStatusLine = document.getElementById("outputStatus");
    
    var form = document.forms["planit_form"];
    var percent_type = form.percentage_type;
    var percent_level = form.percentage_level;
    
    if (status)
    {
        percent_type.value="replace";
        percent_level.value="1";
        if (xItem != "-" && zItem != "-")
        {
            outputStatusLine.innerHTML = "Displaying penetration of <span class='grouping_1'>" + xItem + "</span> in <span class='grouping_2'>" + zItem + "</span>";
        }
        else
        {
            outputStatusLine.innerHTML = "";
        }
    }
}

function setPercentageMode()
{
    var status = document.getElementById("percentageMode").checked;

    //get the combo boxes we need
    var xAxis = document.getElementById("grouping_0");
    var zAxis = document.getElementById("grouping_1");

    var xItem = xAxis.options[xAxis.selectedIndex].text;
    var zItem = zAxis.options[zAxis.selectedIndex].text;
    
    var outputStatusLine = document.getElementById("outputStatus");
    
    var form = document.forms["planit_form"];
    var percent_type = form.percentage_type;
    var percent_level = form.percentage_level;
    
    if (status)
    {
        percent_type.value="replace";
        percent_level.value="0";
        if (xItem != "-")
        {            
            outputStatusLine.innerHTML = "Displaying percentage of <span class='grouping_1'>" + xItem + "</span> ";
            if (zItem != "-")
            {
                outputStatusLine.innerHTML += " with <span class='grouping_2'>" + zItem + "</span>";
            }            
        }
    }  
}


function setItemCountMode()
{
    var status = document.getElementById("itemCountMode").checked;

    //get the combo boxes we need
    var xAxis = document.getElementById("grouping_0");
    var zAxis = document.getElementById("grouping_1");

    var xItem = xAxis.options[xAxis.selectedIndex].text;
    var zItem = zAxis.options[zAxis.selectedIndex].text;

    var outputStatusLine = document.getElementById("outputStatus");
    
    var form = document.forms["planit_form"];
    var percent_type = form.percentage_type;
    var percent_level = form.percentage_level;

    if (status)
    {
        percent_type.value="";
        percent_level.value="";

        if (xItem != "-")
        {            
            outputStatusLine.innerHTML = "Displaying item counts of <span class='grouping_1'>" + xItem + "</span> ";
            if (zItem != "-")
            {
                outputStatusLine.innerHTML += " with <span class='grouping_2'>" + zItem + "</span>";
            }            
        }

    }
}


function setOutputMode()
{
    var form = document.forms["planit_form"];
    var percent_type = form.percentage_type.value;
    var percent_level = form.percentage_level.value;
  
    var itemCountMode   = document.getElementById("itemCountMode");
    var percentageMode  = document.getElementById("percentageMode");
    var penetrationMode = document.getElementById("penetrationMode");

    var xAxis = document.getElementById("grouping_0");
    var yAxis = document.getElementById("grouping_1");
    
    if (xAxis.value == "-" || yAxis.value == "-")
    {
        penetrationMode.disabled=true;
    }
    else
    {
        penetrationMode.disabled=false;
    }

    if (percent_type == "replace")
    {
        if (percent_level == "1")
        {
            penetrationMode.checked = true;
        }
        else
        {
            percentageMode.checked = true;
        }
    }
    else
    {
        itemCountMode.checked = true;     
    }
  
    setPercentageMode();
    setItemCountMode();
    setPenetrationMode();
}

function updateChartTitle()
{
    var xAxis = document.getElementById("grouping_0");
    var yAxis = document.getElementById("grouping_1");
    var xItem = xAxis.options[xAxis.selectedIndex].text;
    var yItem = yAxis.options[yAxis.selectedIndex].text;
    var title = document.getElementById("title");

    title.value = "Chart of " + xItem +(yItem.length >  1 ? (" against " + yItem) : "");
}

function updateGroupingField(obj)
{
  // remove planit field
  removePlanitRefine(obj.name, false, true);
}

function selectCell(cell, force, mark_cell)
{
    selected_cells = new Array(cell.id);
    markCell(cell, true);
    drillDown("list");
}

function selectCells(cells, force)
{
    if (force)
    {
        var temp_array = new Array();
        var found;

        for (var i = 0, count = cells.length; i < count; i++)
        {
            var temp = cells[i];
            found = false;
            for (var j = 0, count2 = selected_cells.length; j < count2; j++)
            {
                if (temp == selected_cells[j])
                {
                    found = true;
                }
            }
            if (!found)
            {
                temp_array = temp_array.concat(temp);
            }
        }

        selected_cells = selected_cells.concat(temp_array);
    }
    else
    {
        var temp_array = new Array();
        var found;

        for (var j = 0, count2 = selected_cells.length; j < count2; j++)
        {
            var temp = selected_cells[i];
            found = false;
            for (var i = 0, count = cells.length; i < count; i++)
            {
                if (temp == selected_cells[j])
                {
                    found = true;
                }
            }
            if (!found)
            {
                temp_array = temp_array.concat(temp);
            }
        }

        selected_cells = temp_array;
    }
}

function selectRow(cell)
{
    var cells = document.getElementsByTagName("td");
    var force = (cell.className != "planit_selected");
    var ids   = new Array();

    window.status = (force ? "S" : "Des") + "electing row...";

    var to_find = "," + cell.id;
    var length = to_find.length;
    for (var i = 0, count = cells.length; i < count; i++)
    {
        var temp = cells[i];

        // split temp.id into two
        cell_pair = temp.id.split(",");
        if (cell_pair && cell_pair[1])
        {
            if (cell_pair[1] == cell.id)
            {
                markCell(temp, force);
                ids = ids.concat(temp.id);
            }
        }
    }

    selectCells(ids, force);
    markCell(cell, force);
    window.status = "Row " + (force ? "" : "de") + "selected";

    // set the drill down mode
    var frm = document.forms["planit_form"];
    frm.drill_mode.value="row";

    // do the actual drill down
    drillDown();
}

function selectColumn(cell)
{
    ///////////////////////////////////////////////////////////
    //
    // Drill down is not supported, so disable this function
    //
    
    return false;
    
    ///////////////////////////////////////////////////////////
    
    
    var cells = document.getElementsByTagName("td");
    var force = (cell.className != "planit_selected");
    var ids   = new Array();

    window.status = (force ? "S" : "Des") + "Selecting column...";

    var to_find = cell.id + ",";
    var length = to_find.length;

    for (var i = 0, count = cells.length; i < count; i++)
    {
        var temp = cells[i];
        if (temp.id.substr(0, length) == to_find)
        {
            markCell(temp, force);
            ids = ids.concat(temp.id);
        }
    }

    selectCells(ids, force);
    markCell(cell, force);
    window.status = "Column " + (force ? "" : "de") + "selected";

    // set the drill down mode
    var frm = document.forms["planit_form"];
    frm.drill_mode.value="column";

    // do the actual drill down
    drillDown();
}

function clearDrillHistory()
{
    var frm = document.forms["planit_form"];
    frm.command.value = "clear_history";
    frm.submit();
}

function clearCells()
{
    // clear selected_cells and re-initialize
    selected_cells = null;
    selected_cells = new Array();
}

function drillDown(type)
{
    var frm = document.forms["planit_form"];

    if (typeof(type) == "undefined")
    {
        frm.command.value = "drill";
    }
    else
    {
        frm.command.value = ("drill_" + type);
    }


    frm.selected_cells.value = selected_cells.join(";");

    if (frm.drill_mode.value == "row")
    {
      frm.grouping_1_selected_ids.value=selected_cells.join(",");
    }
    else if (frm.drill_mode.value == "column")
    {
      frm.grouping_0_selected_ids.value=selected_cells.join(",");
    }
    else
    {
      // eek, invalid mode
    }

    frm.submit();
    frm.selected_cells.value = "";        

    return true;
}

function displayDrill(level, type)
{
    var frm = document.forms["planit_form"];

    if (typeof(type) == "undefined")
    {
        frm.command.value = "drill_display";
    }
    else
    {
        frm.command.value = ("drill_" + type);
    }

    frm.drill_display.value = level;

    frm.submit();

    frm.selected_cells.value = "";
}

function markCell(cell, mark)
{
    if (cell)
    {
        if (mark)
        {
            cell.className = "planit_selected";
        }
        else
        {
            cell.className = "planit_unselected";
        }
    }
}
