/**
 * 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();
		}
		
	}

}


function showImageDetails( image_url, image_width, image_height ) {

	var oConfig = { 'url': 'about:blank', 'width': image_width, 'height': image_height, 'scroll' : false , 'statusbar' : false};
	
	var oImageWindow = createWindow( oConfig );
	
	try {
	
		oImageWindow.document.write( '<body style="margin: 0px; padding: 0px;"><img src="' + image_url + '" /></body>' );
		oImageWindow.document.close();
	
	} catch( e ) {
		
		oImageWindow.close();
		
	}
	
	
}


function hide (id) {
	var obj = document.getElementById(id);
	obj.style.display = 'none';
}

function show (id) {
	var obj = document.getElementById(id);
	obj.style.display = 'block';
}


function change_image( id, src ){
	var obj = document.getElementById(id);
	if ( obj ) {
		obj.src = src;
	}
}
