/**
 * Global client info object
 */

if( ! oClientInfo ) { var oClientInfo = new ClientInfo() };

/**
 * Get element ( extended )
 * @param object document
 * @param mixed element
 * @return object
 */

function getElementEx( document_ref, element ) {
	
	var ret_val = null;	
	
	if( typeof( element ) == 'string' ) {
		
		ret_val = document_ref.getElementById ? document_ref.getElementById( element ) : ( document_ref.all ? document_ref.all[element] : null );
		
		if( typeof( ret_val ) != 'object' ) {
			ret_val = null;
		}
		
	} else if( typeof( element ) == 'object' ) { 
		ret_val = element;
	}
		
	return( ret_val );
	
}

/**
 * Get element
 * @param mixed element
 * @return object
 */

function getElement( element ) {
	return( getElementEx( document, element ) );
}

/**
 * Handy shortcut for getElement ;)
 * @param mixed element
 * @return object
 */

function $( element ) {
	return( getElement( element ) );
}


function setEventHandler( element, event, handler, capture ) {
	
	element = getElement( element );
	capture = capture ? true : false;
	
	if( element ) {
		
		if( element.attachEvent ) {
			
			element.attachEvent( 'on' + event, handler );
			
			if( capture && element.setCapture ) {
				element.setCapture( true );
			}
			
		} else if ( element.addEventListener ) {
			
			element.addEventListener( event, handler, capture );
			
		}
	}

}



function remEventHandler( element, event, handler, capture ) {
	
	element = getElement( element );
	capture = capture ? true : false;
	
	if( element ) {
		if( element.detachEvent ) {
			element.detachEvent( 'on' + event, handler );
			if( capture && element.releaseCapture ) {
				element.releaseCapture();
			}
			
		} else if( element.removeEventListener ) {
			element.removeEventListener( event, handler, capture );
		}
	}


}



CompatEvent = function( evt ) {
	
	evt = window.event ? window.event : ( evt ? evt : null );
	
	if( evt ) {
		
		this.event = evt;
		this.element = evt.srcElement ? evt.srcElement : ( evt.target ? evt.target : null );
		this.pageX = evt.x ? evt.x : ( evt.pageX ? evt.pageX : null );
		this.pageY = evt.y ? evt.y : ( evt.pageY ? evt.pageY : null );
		this.button = evt.button ? evt.button : null;
		this.ctrlKey = evt.ctrlKey ? evt.ctrlKey : null;
		
	}

}

CompatEvent.prototype.stopPropogation = function() {
	
	if( this.event ) {
		
		if( this.event.stopPropogation ) {
			this.event.stopPropogation();
		} 
		
		if( this.event.cancelBubble ) {
			this.event.cancelBubble = true;
		}
	
	}

}

CompatEvent.prototype.cancel = function() {
	
	if( this.event ) {
		
		this.stopPropogation();

		if( this.event.returnValue ) {
			this.event.returnValue = false;
		} else if( this.event.preventDefault ) {
			this.event.preventDefault();
		}
		
	}

}
