var all_cols = true;
var span_control = false;
function filter_system(spanObj,text) {
  if(all_cols == true) {
    all_cols = new Array();
    var tbl = document.getElementById('system_table');
    while(tbl.tagName != 'TBODY') tbl = tbl.firstChild;
    var backupCount = 0;
    var idRow = tbl.firstChild.lastChild;
    while(idRow.id.charAt(0) == "c") {
      all_cols[idRow.id] = new Array();
      for(var i=0;tbl.childNodes.length>i;i++) {
        var thisCell = tbl.childNodes[i].lastChild;
        for(var j=0;backupCount>j;j++) { thisCell = thisCell.previousSibling; }
        all_cols[idRow.id].push(thisCell);
      }
      backupCount++;
      if(idRow.previousSibling) idRow = idRow.previousSibling;
      else break;
    }
  }
  if(span_control == false) {
    span_control = new Array();
    var spans = document.getElementById('system_filter_box').getElementsByTagName('SPAN');
    for(var i = 0; spans.length > i; i++) span_control.push(spans[i]);
  }

  var rows = text.split(",");
  for(cId in all_cols) {
    var visible = 'none';
    for(var i = 0; rows.length>i; i++) if(cId == 'c_'+rows[i]) visible = '';
    for(var i = 0; all_cols[cId].length > i; i++) all_cols[cId][i].style.display = visible;
  }
  
  for(var i = 0; span_control.length > i; i++) {
    if(span_control[i] === spanObj) span_control[i].className = 'highlight';
    else span_control[i].className = '';
  }
  check_scroll_bars();
}

window.onload = function() { set_cell_size(); check_scroll_bars(); }
function set_cell_size() {
  if(document.getElementById('scroller_wrap_table')) {
    var desired_width = 797;
    if(document.getElementById('scroller_wrap_table').offsetWidth < desired_width) desired_width = document.getElementById('scroller_wrap_table').offsetWidth;
    if(document.getElementById('system_filter_box')) { // filter cell exists
      var leftWidth = document.getElementById('system_filter_cell').offsetWidth + 16;
      var rightWidth = desired_width - leftWidth;
      document.getElementById('scroller_box').style.width = rightWidth+"px";
    }
    else { // no filters, the filter_system_cell is the table cell
      var leftWidth = desired_width;
      var rightWidth = 0;
      document.getElementById('scroller_box').style.width = leftWidth+"px";
    }
    document.getElementById('system_filter_cell').style.width = leftWidth+"px";
    if(document.getElementById('system_scroll_cell') && rightWidth > 0) document.getElementById('system_scroll_cell').style.width = rightWidth+"px";
    document.getElementById('system_filter_cell').style.height = document.getElementById('system_filter_cell').offsetHeight + "px";
    document.getElementById('scroller_box').style.overflow = "hidden";
  }
}
document.onmousemove = mouseMove;
document.onmouseup = scrollbar_up;
function check_scroll_bars() {
  if(document.getElementById('scroller_box')) {
    set_scroll(0);
    if(document.getElementById('system_table').offsetWidth > document.getElementById('scroller_box').offsetWidth) {
      var barWidth = parseInt((document.getElementById('scroller_box').offsetWidth / document.getElementById('system_table').offsetWidth) * (document.getElementById('scroller_box').offsetWidth - 26));
      document.getElementById('scroll_table_top').width = document.getElementById('scroller_box').offsetWidth;
      document.getElementById('scroll_table_bottom').width = document.getElementById('scroller_box').offsetWidth;
      document.getElementById('scroll_bar_top').width = barWidth - 2;
      document.getElementById('scroll_bar_bottom').width = barWidth - 2;
      set_scrollbar_visibility('');
    }
    else { set_scrollbar_visibility('none'); }
  }
}
function set_scrollbar_visibility(visibility) {
  if(document.getElementById('scroll_right_image')) document.getElementById('scroll_right_image').style.display = visibility;
  if(document.getElementById('scroll_table_top')) document.getElementById('scroll_table_top').style.display = visibility;
  if(document.getElementById('scroll_table_bottom')) document.getElementById('scroll_table_bottom').style.display = visibility;
}
var mouse_current_x = false;
var mouse_start_x = false;
var scroll_start_x = false;
function scrollbar_down() {
  mouse_start_x = mouse_current_x;
  scroll_start_x = parseInt(document.getElementById('scroll_bar_top').style.left);
  this.onmousedown = function() { return false; }
}
function scrollbar_up() { mouse_start_x = scroll_start_x = false; }
function mouseMove(ev){
	ev = ev || window.event;
	if(ev.pageX || ev.pageY) mouse_current_x = ev.pageX;
	else mouse_current_x = ev.clientX + document.body.scrollLeft - document.body.clientLeft;
	if(mouse_start_x !== false && scroll_start_x !== false) { set_scroll(mouse_current_x - mouse_start_x + scroll_start_x); return false;	}
}
function set_scroll(loc) {
  if(loc < 0) loc = 0;
  var maxloc = document.getElementById('scroll_bar_top').parentNode.offsetWidth - document.getElementById('scroll_bar_top').offsetWidth;
  if(loc > (maxloc)) loc = maxloc;
  document.getElementById('scroll_bar_top').style.left = document.getElementById('scroll_bar_bottom').style.left = loc + "px";
  var percent_scroll = loc / (document.getElementById('scroll_bar_top').parentNode.offsetWidth - document.getElementById('scroll_bar_top').offsetWidth);
  document.getElementById('scroller_box').scrollLeft = parseInt((document.getElementById('system_table').offsetWidth - document.getElementById('scroller_box').offsetWidth) * percent_scroll)
}
var scrollTimer;
function hoverscroll(dir) {
  clearTimeout(scrollTimer);
  dir *= 5;
  if(dir != 0) scrollTimer = setInterval("perform_scroll('"+dir+"')",10);
}
function perform_scroll(dir) { set_scroll(parseInt(document.getElementById('scroll_bar_top').style.left) + parseInt(dir)); }

/* TABLE ROW HIGHLIGHTING */
var row_hlt_active = new Array();
function row_hlt_init(tid) {
  if(document.getElementById(tid)) {
    var tbody = document.getElementById(tid).getElementsByTagName('TBODY');
    tbody = tbody[0];
    for(var i = 0; tbody.childNodes.length > i; i++) {
      if(tbody.childNodes[i].tagName == "TR" && tbody.childNodes[i].className != 'spacerrow') {
        for(var j = 0; tbody.childNodes[i].childNodes.length > j; j++) {
          if(tbody.childNodes[i].childNodes[j].tagName == "TD") {
            tbody.childNodes[i].childNodes[j].onmouseover = function () { row_hlt(this); }
            tbody.childNodes[i].childNodes[j].onmouseout = function () { row_hlt_cleanup(); }
} } } } } }

function row_hlt(elm) {
  row_hlt_cleanup();

  //var activeCol = -1;
  var row = elm.parentNode;
  var bgColor = "";
  for(var i = 0; row.childNodes.length > i; i++) {
    if(row.childNodes[i].tagName == "TD") {
      //if(elm == row.childNodes[i]) activeCol = i;
      if(row.className && row.className == "stonehaven_title") bgColor = "#f0f0f0"; /* f0f2f0 for amd */
      else bgColor = "#f0f0f0"; /* f0f4fd for abernas */
      row.childNodes[i].style.backgroundColor = bgColor;
      row.childNodes[i].style.backgroundImage = "none";
      row_hlt_active.push(row.childNodes[i]);
    }
  }
/*
  if(activeCol > -1) {
    var col = elm.parentNode.parentNode;
    for(var i = 0; col.childNodes.length > i; i++) {
      if(col.childNodes[i].tagName == "TR" && col.childNodes[i].className != 'spacerrow' && col.childNodes[i].childNodes[activeCol]) {
        if(col.childNodes[i].className && col.childNodes[i].className == "stonehaven_title") bgColor = "#f0f2f0";
        else bgColor = "#f0f4fd";
        col.childNodes[i].childNodes[activeCol].style.backgroundColor = bgColor;
        col.childNodes[i].childNodes[activeCol].style.backgroundImage = "none";
        row_hlt_active.push(col.childNodes[i].childNodes[activeCol]);
      }
    }
  }
*/
  //if(row.className && row.className == "stonehaven_title") bgColor = "#e0e5e0";
  //else bgColor = "#e2ebf7";
  //elm.style.backgroundColor = bgColor;
  //elm.style.backgroundImage = "none";
  row_hlt_active.push(elm);
}

function row_hlt_cleanup() {
  while(row_hlt_active.length > 0) {
    var temp = row_hlt_active.pop();
    temp.style.backgroundColor = "";
    temp.style.backgroundImage = "";
  }
}

/* HORIZONTAL VIEW FILTERS */
var horiz_filter_inputs = new Array();
var horiz_filter_rows = new Array();
function horiz_filter_init(tid) {
  horiz_filter_inputs = document.getElementById(tid).getElementsByTagName('INPUT');
  for(var i = 0; horiz_filter_inputs.length > i; i++) {
    if(horiz_filter_inputs[i].disabled) {
      horiz_filter_inputs[i].onclick = function () { horiz_filter_input(); }
      horiz_filter_inputs[i].disabled = false;
    }
  }
  var temp = document.getElementsByTagName('TR');
  for(var i = 0; temp.length > i; i++) {
    if(temp[i].id && temp[i].id.substring(0,6) == "sysrow") {
      horiz_filter_rows.push(temp[i]);
    }
  }
}
function horizontal_filter_reset() {
  for(var i = 0; horiz_filter_inputs.length > i; i++)
    if(horiz_filter_inputs[i].checked) horiz_filter_inputs[i].checked = false;
  horiz_filter_input();
}
function horiz_filter_input() {
  var active_rows = new Array();
  for(var i = 0; horiz_filter_inputs.length > i; i++) {
    if(horiz_filter_inputs[i].checked) {
      var group = (horiz_filter_inputs[i].title.split("/"))[0];
      if(!(active_rows[group])) active_rows[group] = new Array();
      active_rows[group][horiz_filter_inputs[i].id] = horiz_filter_inputs[i].value;
      horiz_filter_inputs[i].parentNode.style.fontWeight = 'bold';
    }
    else horiz_filter_inputs[i].parentNode.style.fontWeight = '';
  }
  
  // Update system display
  var display_array = horiz_filter_get_display(active_rows);
  document.getElementById('horiz_filter_count').innerHTML = display_array.length;
  var key_array = new Array();
  for(var key in display_array) key_array['sysrow'+display_array[key]] = 1;
  for(var key in horiz_filter_rows) {
    if(key_array[horiz_filter_rows[key].id]) var display = '';
    else var display = 'none';
    horiz_filter_rows[key].previousSibling.style.display = display;
    horiz_filter_rows[key].style.display = display;
  }
  if(display_array.length > 0) display = 'none'; else display = '';
  document.getElementById('horiz_filter_error_row').style.display = display;
  
  // Calculate change, update qty display(s)
  for(var key in horiz_filter_inputs) {
    // clone the clone_row object with this input's selection reversed
    var clone_rows = new Array();
    for(var i = 0; horiz_filter_inputs.length > i; i++) {
      var thisinput = horiz_filter_inputs[i].checked;
      if(horiz_filter_inputs[key].id == horiz_filter_inputs[i].id) thisinput = !thisinput;
      if(thisinput) {
        var group = (horiz_filter_inputs[i].title.split("/"))[0];
        if(!(clone_rows[group])) clone_rows[group] = new Array();
        clone_rows[group][horiz_filter_inputs[i].id] = horiz_filter_inputs[i].value;
        horiz_filter_inputs[i].parentNode.style.fontWeight = 'bold';
      }
      else horiz_filter_inputs[i].parentNode.style.fontWeight = '';
    }
    var temp = horiz_filter_inputs[key];
    while(temp.nextSibling && temp.tagName != 'SPAN') temp = temp.nextSibling;
    if(temp.tagName == 'SPAN') {
      if(horiz_filter_inputs[key].checked) temp.innerHTML = "";
      else {
        var count = (horiz_filter_get_display(clone_rows)).length;
        var count_display = count;
        var group = (horiz_filter_inputs[key].title.split("/"))[0];
        if(active_rows[group]) {
          count_display = "+" + (count - display_array.length);
        }
        temp.innerHTML = "( " + count_display + " )";
        if(count > 0 && count_display != "+0") {
          horiz_filter_inputs[key].disabled = false;
          horiz_filter_inputs[key].parentNode.style.color = '';
        }
        else {
          horiz_filter_inputs[key].disabled = true;
          horiz_filter_inputs[key].parentNode.style.color = 'a0a0a0';
        }
      }
    }
  }
}
function horiz_filter_get_display(aRows) {
  var group = new Array();
  var empty = true;
  for(var key in aRows) {
    empty = false;
    var temp = new Array();
    for(var k in aRows[key]) {
      var t = aRows[key][k].split(",");
      for(var i in t) temp.push(t[i]);
    }
    if(group.length == 0) group = array_unique_sort(temp);
    else group = array_intersect(group,temp);
  }
  if(empty) {
    for(var key in horiz_filter_rows) {
      group.push(horiz_filter_rows[key].id.substr(6));
    }
  }
  return group;
}
function array_unique_sort(thisArray) {
  thisArray.sort();
  var lastValue = "";
  for(var i = 0; thisArray.length > i; i++) {
    if(thisArray[i] == lastValue) thisArray.splice(i--,1);
    else lastValue = thisArray[i];
  }
  return thisArray;
}
function array_intersect(arrayA,arrayB) {
  var arrayA = array_unique_sort(arrayA);
  var arrayB = array_unique_sort(arrayB);
  var thisArray = new Array();
  for(var i = 0; arrayA.length > i && arrayB.length > i; i++) {
    while(arrayA[i] < arrayB[i]) arrayA.splice(i,1);
    while(arrayA[i] > arrayB[i]) arrayB.splice(i,1);
    while(arrayA[i] < arrayB[i]) arrayA.splice(i,1);
    if(arrayA[i] == arrayB[i]) thisArray.push(arrayA[i]);
  }
  return thisArray;
}
