// JavaScript Document
function tableRulers(bAddRem) {
  if (document.getElementById && document.createTextNode) {
    var tables=document.getElementsByTagName('table');
    for (var i=0;i<tables.length;i++) {
      if(hasClass(tables[i], 'ruler')) {
        var trs=tables[i].getElementsByTagName('tr');
        for(var j=0;j<trs.length;j++) {
          if(trs[j].parentNode.nodeName=='TBODY' && trs[j].parentNode.nodeName!='TFOOT') {
						if (bAddRem) {
						  // addEvent(trs[j], 'mouseover', function() {addClass(this, 'ruled');} );
							// addEvent(trs[j], 'mouseout', function() {removeClass(this, 'ruled');} );
						  addEvent(trs[j], 'mouseover', function() {this.className = 'ruled';} );
							addEvent(trs[j], 'mouseout', function() {this.className = '';} );
						} else {
							removeEvent(trs[j], 'mouseover', function() {addClass(this, 'ruled');} );
							removeEvent(trs[j], 'mouseout', function() {removeClass(this, 'ruled');} );
						}
					}
				}
			}
		}
	}
}


function addClass(obj, cls) {
	// if obj already has addclass
	if (hasClass(obj, cls)) {
		// return success (exiting out)
		return true;
	}
	// else if append addclass to obj.className succeeds
	if (obj.className += ' ' + cls) {
		// return success
		return true;
	}
	// else fail
	return false;
}
function removeClass(obj, cls) {
	var classes = obj.className.split(' ');
	classes = classes.filter(function (n) {n!=cls;});
	obj.className = classes.join(' ');
}
function hasClass(obj, cls) {
	var reg = new RegExp('\\b'+cls+'\\b');
	return reg.test(obj.className);
}

Array.prototype.filter = function(fnc) {
	var a = new Array();
	for (var i = 0; i < this.length; i++) {
		if (fnc(this[i])) {
			a.push(this[i]);
		}
	}
	return a;
}

// addEvent( document.getElementById('foo'), 'click', doSomething );
// addEvent( obj, 'mouseover', function(){ alert('hello!'); } );
function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
		obj.attachEvent( 'on'+type, obj[type+fn] );
	} else
		obj.addEventListener( type, fn, false );
}

// removeEvent( object, eventType, function );
function removeEvent( obj, type, fn ) {
	if ( obj.detachEvent ) {
		obj.detachEvent( 'on'+type, obj[type+fn] );
		obj[type+fn] = null;
	} else
		obj.removeEventListener( type, fn, false );
}

function windowLoad() {
	window.unload = windowUnload;
	tableRulers(true);
}

function windowUnload() {
	tableRulers(false);
}
window.onload = windowLoad;

