/* Fancensus Object */
var fancensus = new Object();

fancensus.loadingImg = function(target)
{
  document.getElementById(target).innerHTML = "<div id=\"loader\"><img src=\"/images/loading.gif\"/></div><div id=\"loader-text\">Loading data from server... Please Wait.</div>";
}

fancensus.loadingStatus = function(target, percentage)
{
  document.getElementById(target).innerHTML = "<div id=\"loader-text\">Data Loaded, Processing... " + percentage + "% Complete.</div>";
}

fancensus.loadTable = function(url, target, override, forcedownload)
{
  if (!override)
    override = false;

  if (!forcedownload)
    forcedownload = false;

  this.showData();

  if ((document.getElementById('dataFormat') && (document.getElementById('dataFormat').value == 'csv' || document.getElementById('dataFormat').value == 'xls' || document.getElementById('dataFormat').value == 'xlsx') && !override) || forcedownload)
  {
    var iFrame = document.getElementById("theFrame");
    if (iFrame)
      iFrame.parentNode.removeChild(iFrame);

    iFrame = document.createElement("iframe");
    iFrame.style.display = 'none';
    iFrame.id = "theFrame";
    document.body.appendChild(iFrame);

    iFrame.src = url;
  }
  else
  {
    this.loadingImg(target);

    if (override)
      if (url.indexOf("?") >= 0)
        url = url + '&force=true';
      else
        url = url + '?force=true';
    this.loader = new net.getContent(url, target, this.tableProcessor);
  }
}

fancensus.submitOrder = function(query, url)
{
  var loader = new net.getContent(url + '?' + query, null, fancensus.quickResponse);
}

fancensus.quickResponse = function()
{
  var response = this.req.responseXML.documentElement;

  fancensus.parseScript(response.getElementsByTagName('script'));
}

fancensus.tableProcessor = function()
{
  var theDiv = document.getElementById(this.target);
  fancensus.loadingStatus(this.target, 0);

  if (this.req.responseXML == null)
  {
    var error = document.createElement("div");
    error.className = 'error';
    error.innerHTML = "There was an error with your request, please try again. If this problem persists, please contact us.";

    while (theDiv.firstChild)
      theDiv.removeChild(theDiv.firstChild);

    theDiv.appendChild(error);
    return;
  }

  var response = this.req.responseXML.documentElement;

  var errorMsg = response.getElementsByTagName('Error');
  if (errorMsg.length == 1)
  {
    var error = document.createElement("div");
    error.className = 'error';
    error.innerHTML = field.getContent(errorMsg[0]);

    while (theDiv.firstChild)
      theDiv.removeChild(theDiv.firstChild);

    theDiv.appendChild(error);
    return;
  }

  var IPP = response.getElementsByTagName('IPP');
  var inIPP = false;
  if (IPP.length == 1)
  {
    if (field.getContent(IPP[0]) == true)
      inIPP = true;
  }

  var inDropdown = false;
  if (this.target.indexOf("extra") >= 0)
    inDropdown = true;

  var newTable = document.createElement("table");
  var tableBody = document.createElement("tbody");
  newTable.appendChild(tableBody);

  if (!inDropdown)
  {
    var theTitle = response.getElementsByTagName('theTitle');

    if (theTitle.length == 1)
    {
      var title = document.createElement("div");
      title.className = "title";
      title.innerHTML += field.getContent(theTitle[0]);
    }
  }

  var tabBar = document.getElementById('tabbar');

  if (tabBar && tabBar.id == 'tabbar')
  {
    var tabOpt = response.getElementsByTagName("tabs");

    if (tabOpt.length == 1 && field.getContent(tabOpt[0]) == 'on')
      showDiv('tabbar');
    else
      hideDiv('tabbar');
  }

  var html = response.getElementsByTagName('html');

  if (html.length == 1)
  {
    var theHtml = field.getContent(html[0])
  }
  else
  {
    var Headers = response.getElementsByTagName('Headers');
    if (Headers.length == 1)
    {
      var headerRow = document.createElement("tr");
      var Cells = Headers[0].childNodes;

      for (var j = 0; j < Cells.length; j++)
      {
        if (Cells[j].nodeType == 1)
        {
          var element = document.createElement("th")
          element.innerHTML = field.getContent(Cells[j]);
          element.setAttribute('rel', Cells[j].nodeName);

          var extra = '';
          if (inIPP)
            extra = '&ipp=ipp';

          if (inDropdown)
          {
            target = this.target;
            element.onclick = function () {fancensus.submitOrder('field=searchDropOrder&query=' + this.getAttribute('rel') + extra + "&where=" + target, '/calc/search/');};
          }
          else
            element.onclick = function () {fancensus.submitOrder('field=searchOrder&query=' + this.getAttribute('rel') + extra, '/calc/search/');};

          delete(extra);
          element.style.cursor = "pointer";
          headerRow.appendChild(element);
        }
      }
      tableBody.appendChild(headerRow)
    }

    var Rows = response.getElementsByTagName('Data');
    for (var i = 0; i < Rows.length; i++)
    {
      var newRow = document.createElement("tr");
      var Cells = Rows[i].childNodes;
      newRow.className = "row" + (i % 2);
      var colSpan = 0;
      for (var j = 0; j < Cells.length; j++)
      {
        if (Cells[j].nodeType == 1)
        {
          if(Cells[j].nodeName.indexOf('colspan') >= 0)
          {
            colSpan = field.getContent(Cells[j]);
          }
          else
          {
            var element = document.createElement("td")
            element.innerHTML = field.getContent(Cells[j]);
            if (colSpan)
            {
              element.colSpan = colSpan;
              colSpan = 0;
            }
            newRow.appendChild(element);
          }
        }
      }

      tableBody.appendChild(newRow)
      fancensus.loadingStatus(this.target, Math.round((i / Rows.length) * 100));
    }
  }

  while (theDiv.firstChild)
    theDiv.removeChild(theDiv.firstChild);

  if (title)
    theDiv.appendChild(title);
  if (newTable)
    theDiv.appendChild(newTable);
  if (theHtml)
    theDiv.innerHTML = theHtml;

  fancensus.parseScript(response.getElementsByTagName('script'));
}

fancensus.loadAverages = function(url, target)
{
  fancensus.loadingImg(target);
  this.loader = new net.getContent(url, target, this.averageProcessor);
}

fancensus.averageProcessor = function()
{
  showDiv(this.target);

  if (this.req.responseXML == null)
  {
    var error = document.createElement("div");
    error.className = 'error';
    error.innerHTML = "There was an error with your request, please try again. If this problem persists, please contact us.";

    var theDiv = document.getElementById(this.target);
    while (theDiv.firstChild)
      theDiv.removeChild(theDiv.firstChild);

    theDiv.appendChild(error);
    return;
  }

  var response = this.req.responseXML.documentElement;

  var Rows = response.getElementsByTagName('Data');

  if (Rows.length == 1)
  {
    var title = document.createElement("div");
    title.className = "title";
    title.innerHTML = "Averages";

    var newTable = document.createElement("table");
    var tableBody = document.createElement("tbody");
    newTable.appendChild(tableBody);
    var newRow = document.createElement("tr");
    var Cells = Rows[0].childNodes;

    for (var j = 0; j < Cells.length; j++)
    {
      if (Cells[j].nodeType == 1)
      {
        var element = document.createElement("td")
        element.innerHTML = field.getContent(Cells[j]);
        newRow.appendChild(element);
      }
    }
    tableBody.appendChild(newRow)

    var theDiv = document.getElementById(this.target);
    while (theDiv.firstChild)
      theDiv.removeChild(theDiv.firstChild);
    theDiv.appendChild(title);
    theDiv.appendChild(newTable);
    showDiv(this.target);
  }
  else if (Rows.length > 1)
  {
    var title = document.createElement("div");
    title.className = "title";
    title.innerHTML = "Averages";

    var newTable = document.createElement("table");
    var tableBody = document.createElement("tbody");
    newTable.appendChild(tableBody);

    for (var i = 0; i < Rows.length; i++)
    {
      var newRow = document.createElement("tr");
      var Cells = Rows[i].childNodes;

      for (var j = 0; j < Cells.length; j++)
      {
        if (Cells[j].nodeType == 1)
        {
          var element = document.createElement("td")
          element.innerHTML = field.getContent(Cells[j]);
          newRow.appendChild(element);
        }
      }
      tableBody.appendChild(newRow)
    }

    var theDiv = document.getElementById(this.target);
    while (theDiv.firstChild)
      theDiv.removeChild(theDiv.firstChild);
    theDiv.appendChild(title);
    theDiv.appendChild(newTable);
    showDiv(this.target);
  }
}

fancensus.showData = function()
{
  if (document.getElementById('imageTable'))
    hideDiv('imageTable');
  if (document.getElementById('imageTable'))
    showDiv('dataTable');
}

fancensus.parseScript = function(script)
{
  if (script.length == 1)
  {
    script = field.getContent(script[0]);
    script = script.replace(/\&amp;/g,'&');
    eval(script);
  }
}

fancensus.loadExtra = function(url, target, colspan)
{
  if (!document.getElementById(target + 'extra'))
  {
    var theImage = document.getElementById(target + 'image');
    theImage.src = '/images/collapse.gif';

    var theRow = document.getElementById(target).parentNode.parentNode;
    var Pos = theRow.rowIndex + 1;
    var table = theRow.parentNode.parentNode;
    var newRow = table.insertRow(Pos);
    newRow.className = 'expand';

    var element = document.createElement("td")
    newRow.appendChild(element);

    element = document.createElement("td")
    element.id = target + 'extra';
    element.setAttribute('colSpan', colspan - 1);

    newRow.appendChild(element);

    target = target + 'extra';
    fancensus.loadingImg(target);
    this.loader = new net.getContent(url, target, this.tableProcessor);
  }
  else if (colspan == 'RELOAD')
  {
    target = target + 'extra';
    fancensus.loadingImg(target);
    this.loader = new net.getContent(url, target, this.tableProcessor);
  }
  else
  {
    fancensus.extraCollapse(target);
  }
}

fancensus.extraCollapse = function(target)
{
  if (document.getElementById(target + 'extra'))
  {
    var theImage = document.getElementById(target + 'image');
    theImage.src = '/images/expand.gif';

    var row = document.getElementById(target + 'extra').parentNode
    var table = row.parentNode;
    table.deleteRow(row.rowIndex);

  }
}

fancensus.saveQuery = function(field, title)
{
  fancensus.callBack('/calc/search/', field, title);
}

fancensus.callBack = function(url, name, value)
{
  if (value)
  { // Save it
    var temp = new Array();
    temp.name = name;
    temp.value = value;
    field.submitField(temp, url);
  }
  else
  { // Error
    // Notify ?
  }
}

fancensus.lock = function()
{
  fancensus.locked = true;
  showDiv('locked');
  hideDiv('unlocked');
}

fancensus.unlock = function()
{
  fancensus.locked = false;
  showDiv('unlocked');
  hideDiv('locked');

}

fancensus.showCalc = function()
{
  if (!this.locked)
    effects.slide('calc', -2, -1, 250, function() {showDiv('hideCalc');hideDiv('showCalc');});
}

fancensus.hideCalc = function()
{
  if (!this.locked)
    effects.slide('calc', 0, -1, 250, function() {showDiv('showCalc');hideDiv('hideCalc');});
}

fancensus.showMenu = function()
{
  effects.slide('menu', -1, 164, 250, function() {showDiv('hideMenu');hideDiv('showMenu');});
}

fancensus.hideMenu = function()
{
  effects.slide('menu', -1, 0, 250, function() {showDiv('showMenu');hideDiv('hideMenu');});
}

fancensus.showhide = function(theId)
{
  var theDiv = document.getElementById(theId);
  if (theDiv.style.display == 'none')
    showDiv(theId);
  else
    hideDiv(theId);
}

fancensus.enableExtra = function()
{
  var theDiv = document.getElementById('calcExtra');
  fancensus.changeInputs(theDiv, false);
}

fancensus.disableExtra = function()
{
  var theDiv = document.getElementById('calcExtra');
  fancensus.changeInputs(theDiv, true);
}

fancensus.changeInputs = function(theDiv, state)
{
  fancensus.changeInputState(theDiv.getElementsByTagName("input"), state);
  fancensus.changeInputState(theDiv.getElementsByTagName("select"), state);
  fancensus.changeInputState(theDiv.getElementsByTagName("textarea"), state);
}

fancensus.changeInputState = function(theChildren, state)
{
  for (var i = 0; i < theChildren.length; i++)
  {
    if (theChildren[i].parentNode.id != 'Control')
      theChildren[i].disabled = state;
  }
}

fancensus.changeStatusInput = function(element, status)
{

}

fancensus.resetSelection = function()
{
  var loader = new net.getContent('/calc/search/?field=resetSelected', null,  field.quickResponse);
}

fancensus.saveProduct = function(theField)
{
  fancensus.saveData('product', theField);
}

fancensus.saveData = function(getVar, theField)
{
  if (theField.checked)
    var value = 'on';
  else
    var value = 'off';
  
  var loader = new net.getContent('/calc/search/?' + getVar + '=' + theField.name + '&status=' + value , null, field.quickResponse);
}

fancensus.showGraph = function(field, product)
{
  var loader = new net.getContent('/calc/search/?graph=' + field.name , null, field.quickResponse);

  var div = 'graph-' + field.name;

  var theDiv = document.getElementById(div);
  
  var Parent = theDiv.parentNode;
  var parentWidth = Parent.offsetWidth;

  if (field.value)
  {
    var extra;
    extra = 'value|' + field.value;
    if (product)
      extra = extra + '||product|' + product;
    
    if (extra.indexOf("?") >= 0)
      extra += "&r=" + (Math.random() * Date.parse(new Date()));
    else
      extra += "/?r=" + (Math.random() * Date.parse(new Date()));

    ShowFlash("/swf/chart.swf", parentWidth - 10,"400", "data-file=/graphs/" + field.name + "/" + extra, div);
  }
  else if (field.checked)
  {
    var extra;
    if (product)
      extra = '?product=' + product;
    
    if (extra.indexOf("?") >= 0)
      extra += "&r=" + (Math.random() * Date.parse(new Date()));
    else
      extra += "?r=" + (Math.random() * Date.parse(new Date()));

    ShowFlash("/swf/chart.swf", parentWidth - 10,"400", "data-file=/graphs/" + field.name + "/" + extra, div);
  }
  else
  {
    theDiv.innerHTML = '';
  }
}

function save_image(src)
{
  var flash = getFlash(src);
  var image = flash[1].get_img_binary();
  var popUp = window.open('', 'Export as Image');
  with(popUp.document)
    write("<html><head><title>Export as Image</title></head><body><img src='data:image/png;base64," + image + "' /></body></html>");
}

fancensus.message = function (message)
{
  var messageDiv = document.getElementById('message');
  messageDiv.innerHTML = message;

  showDiv('message');

  setTimeout('showDiv(\'message\');', 500);
}

function selectBox(element)
{
  var status = false;
  if (element.checked)
    status = true;

  var dataTable = document.getElementById('dataTable');
  var selects = dataTable.getElementsByTagName('input');

  for (var i = 0; i < selects.length; i++)
  {
    if (selects[i].getAttribute('type') == 'checkbox')
      selects[i].checked = status;
  }
  var temp = new Array();
  temp.name = 'selectAll';
  temp.value = status;
  field.submitField(temp, '/calc/search/');
}
