function getElementsByClassName(strClass, strTag, objContElm) {
  strTag = strTag || "*";
  objContElm = objContElm || document;    
  var objColl = objContElm.getElementsByTagName(strTag);
  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
  var arr = new Array();                              
  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';   
  var arrClass = strClass.split(delim);    
  for (var i = 0, j = objColl.length; i < j; i++) {                         
    var arrObjClass = objColl[i].className.split(' ');   
    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
    var c = 0;
    comparisonLoop:
    for (var k = 0, l = arrObjClass.length; k < l; k++) {
      for (var m = 0, n = arrClass.length; m < n; m++) {
        if (arrClass[m] == arrObjClass[k]) c++;
        if ((delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
          arrayPush(arr, objColl[i]); 
          break comparisonLoop;
        }
      }
    }
  }
  return arr; 
}

// To cover IE 5 Mac lack of the push method
var arrayPush = function(arr,value) {arr[arr.length] = value; };

function highlightRows() {
	var CssClassSwitcher = function (target) {

		this.add = function (newClassName) {
			var re = new RegExp('\\b' + newClassName + '\\b');
			var className = target.className;
			if (!className.match(re)) {
				target.className += (className.length > 0 ? ' ' : '') + newClassName;
			}
		};
		
		this.remove = function (className) {
			var re = new RegExp('\\s*' + className + '\\b');
			var currentClassName = target.className;
			if (currentClassName.match(re)) {
				target.className = currentClassName.replace(re, '');
			}
		};

	};	

	var tables = getElementsByClassName('listview','table');
	for(var i=0, length = tables.length; i < length; i++){
		(function (rows) {
			for (var i = 0, length = rows.length; i < length; i++) {
				(function (cells) {
					for (var i = 0, length = cells.length; i < length; i++) {
						cells[i].onmouseover = function () {
							(new CssClassSwitcher(this.parentNode)).add('Highlighted');
						};
						cells[i].onmouseout = function () {
							(new CssClassSwitcher(this.parentNode)).remove('Highlighted');
						};
					}
				})(rows[i].cells);
			}
		})(tables[i].getElementsByTagName('tr'));
	}
}