function addEvent(elm, evType, fn, useCapture)
// cross-browser event handling for IE5+, NS6+ and Mozilla 
// By Scott Andrew 
{
  if (elm.addEventListener) { 
    elm.addEventListener(evType, fn, useCapture); 
    return true; 
  } else if (elm.attachEvent) { 
    var r = elm.attachEvent('on' + evType, fn); 
    return r; 
  } else {
    elm['on' + evType] = fn;
  }
}

// climb up the tree to the supplied tag.
function ascendDOM(e, target) {
  while (e.nodeName.toLowerCase() != target && 
      e.nodeName.toLowerCase() != 'html')
    e = e.parentNode;
  
  return (e.nodeName.toLowerCase() == 'html') ? null : e;
}

// turn on highlighting
function hi_cell(e) {
  var el;
  if (window.event && window.event.srcElement)
    el = window.event.srcElement;
  if (e && e.target)
    el = e.target;
  if (!el) return;

el = ascendDOM(el, 'td');
  if (el == null) return;
    

  var parent_row = ascendDOM(el, 'tr');
  if (parent_row == null) return;

  var parent_table = ascendDOM(parent_row, 'table');
  if (parent_table == null) return;

  // row styling
  parent_row.className += ' hi';

}

// turn on highlighting definitive on click
function hi_cell_def(e) {
  var el;
  if (window.event && window.event.srcElement)
    el = window.event.srcElement;
  if (e && e.target)
    el = e.target;
  if (!el) return;

  el = ascendDOM(el, 'td');
  if (el == null) return;

  var parent_row = ascendDOM(el, 'tr');
  if (parent_row == null) return;

  var parent_table = ascendDOM(parent_row, 'table');
  if (parent_table == null) return;

  // row styling
  // check for hi_def: if not set hi_def class else remove hi_def class
  var occur = parent_row.className.indexOf('hi_def');
//alert(occur);
	if (occur > -1  ) {
		  parent_row.className = parent_row.className.replace(/\b ?hi_def\b/, '');
  } else {
	  parent_row.className += ' hi_def';
  }

}

// turn off highlighting
function lo_cell(e) {
  var el;
  if (window.event && window.event.srcElement)
    el = window.event.srcElement;
  if (e && e.target)
    el = e.target;
  if (!el) return;

  el = ascendDOM(el, 'td');
  if (el == null) return;
  
  var parent_row = ascendDOM(el, 'tr');
  if (el == null) return;

  var parent_table = ascendDOM(parent_row, 'table');
  if (el == null) return;

  // row de-styling
  parent_row.className = parent_row.className.replace(/\b ?hi\b/, '');
}


function addListeners() {
  if (!document.getElementsByTagName) return;
  
  var all_cells = document.getElementsByTagName('td');
  for (var i = 0; i < all_cells.length; i++) {
    addEvent(all_cells[i], 'mouseover', hi_cell, false);
    addEvent(all_cells[i], 'mouseout', lo_cell, false);
	addEvent(all_cells[i], 'click', hi_cell_def, false);
  }
}

addEvent(window, 'load', addListeners, false);

