function cmnInformation(){
	var eHTML = document.getElementsByTagName( 'data' )[0];
	this.sUser_agent = navigator.userAgent.toLowerCase();
	if( window.opera ){
		this.bOpera = true; cmnSet_class( eHTML, 'Opera');
	}
	if( !this.bOpera && this.sUser_agent.indexOf( 'msie' ) != -1 ){
		this.bIE = true; cmnSet_class( eHTML, 'IE');
	}else if( navigator.product == 'Gecko' ){
		this.bGecko = true; this.bMozilla = true; cmnSet_class( eHTML, 'Mozilla');
	}
	this.bMAC = ( this.sUser_agent.indexOf( 'mac' ) != -1 );
	this.sLanguage = null;
	this.bHTTP = null;
	this.bHandheld = false;
	return this;
}

function cmnRemove_class( eOn, sClass_name ){
	cmnSet_class( eOn, "", sClass_name );
}

function cmnSet_class( eOn, sClass_name, sInstead ){
	if( eOn ){
		sClass_name = ( sClass_name.length ) ? sClass_name.replace( /(^\s+|\s+$)/, "" ) : "";
		if( eOn.className.length ){
			var sOld = sClass_name;
			if( sInstead && sInstead.length ){
				sInstead = sInstead.replace( /\s+(\S)/g, "|$1" );
				if( sOld ){
					sOld += "|";
				}
				sOld += sInstead;
			}
			eOn.className = eOn.className.replace( new RegExp("(^|\\s+)(" + sOld +")($|\\s+)", "g"), "$1" );
		}
		eOn.className += ( eOn.className.length && sClass_name ? " " : "" ) + sClass_name;
	}
}

function cmnMatch_class( eOn, sClass_name ){
	return ( sClass_name && eOn.className && eOn.className.length && eOn.className.match( new RegExp("(^|\\s+)(" + sClass_name +")($|\\s+)") ) );
}

function cmnAdd_event( eOn, sEvent_type, ptrFunction ){
	if( eOn.addEventListener ){
		eOn.addEventListener( sEvent_type, ptrFunction, false );
	}else{
		if( !ptrFunction.$$guid ){ ptrFunction.$$guid = cmnAdd_event.guid++; }
		if( !eOn.events ){ eOn.events = {}; }
		var aHandler = eOn.events[sEvent_type];
		if( !aHandler ){
			aHandler = eOn.events[sEvent_type] = {};
			if( eOn['on' + sEvent_type] ){ aHandler[0] = eOn['on' + sEvent_type]; }
			eOn['on' + sEvent_type] = cmnHandle_event;
		}
		aHandler[ptrFunction.$$guid] = ptrFunction;
	}
}

cmnAdd_event.guid = 1;

function cmnRemove_event( eOn, sEvent_type, ptrFunction ){
	if( eOn.removeEventListener ){
		eOn.removeEventListener( sEvent_type, ptrFunction, false );
	}else if( eOn.events && eOn.events[sEvent_type] && ptrFunction.$$guid ){
		delete eOn.events[sEvent_type][ptrFunction.$$guid];
	}
}

function cmnHandle_event( event ){
	event = event || cmnFixe_event( window.event );
	var returnValue = true;
	var aHandler = this.events[event.type];
	for( var i in aHandler ){
		if( !Object.prototype[i] ){
			this.$$ptrFunction = aHandler[i];
			if( this.$$ptrFunction(event) === false ){ returnValue = false; }
		}
	}
	if( this.$$ptrFunction ){ this.$$ptrFunction = null; }

	return returnValue;
}

function cmnFixe_event( event ){
	event.preventDefault = cmnFixe_event.preventDefault;
	event.stopPropagation = cmnFixe_event.stopPropagation;
	return event;
}
cmnFixe_event.preventDefault = function(){
	this.returnValue = false;
}
cmnFixe_event.stopPropagation = function(){
	this.cancelBubble = true;
}

function makeTableRowsHiglightableInMSIE() {
	if ( document.all && !window.opera ) {
		for (var iTableIdx = 0; (oTable = document.getElementsByTagName('table')[iTableIdx]); iTableIdx++) {
			if (cmnMatch_class(oTable, 'data')) {
				for (var iRowIdx = 0; (oRow = oTable.getElementsByTagName('tr')[iRowIdx]); iRowIdx++) {
					oRow.onmouseover = function() { cmnSet_class(this, 'hover'); }
					oRow.onmouseout = function() { cmnRemove_class(this, 'hover'); }
				}
			}
		}
	}
}

cmnAdd_event(window, 'load', makeTableRowsHiglightableInMSIE);