	 function findTable(table) { // For faster usage
	   while((table.localName || table.tagName).toLowerCase() != 'table') {
              table=table.parentNode;
           }
	   return table;
	 }
	 
	 function setClassHoverTable(node) {
			 if (!node.table) node.table=findTable(node);
			 var cellIndex=node.cellIndex;

			 setClassHover(node, 'hoverCell');
			 setClassHover(node.parentNode, 'hoverRow');			 
			 for(var row=0; row < node.table.rows.length; row++) {
					 setClassHover(node.table.rows[row].cells[cellIndex], 'hoverCol');
			 }
	 }

	 function unsetClassHoverTable(node) {
			 if (!node.table) node.table=findTable(node);
			 var cellIndex=node.cellIndex;

			 unsetClassHover(node, 'hoverCell');
			 unsetClassHover(node.parentNode, 'hoverRow');
			 for(var row=0; row < node.table.rows.length; row++) {
					 unsetClassHover(node.table.rows[row].cells[cellIndex], 'hoverCol');
			 }
	 }


 	 function setClassHover(node, sClass) {
           if (!node) return;
	   node.className=(node.className || node.getAttribute('class')) + ' '+sClass;
	   node.setAttribute('class', node.className);
	 }

	 function unsetClassHover(node, sClass) {
           if (!node) return;
	   node.className=(node.className || node.getAttribute('class')).replace(new RegExp(" "+sClass), '');
	   node.setAttribute('class', node.className);	 
	 }