/**
 * 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.all ? document_ref.all[element] : ( document_ref.getElementById ? document_ref.getElementById( element ) : null );
		
		if( typeof( ret_val ) != 'object' ) {
			
			ret_val = ( typeof( document[element] ) == 'object' ) ? document[element] : 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 ) );
	
}

var _created_windows = new Array();

function boolToYesNo( value ) {

	return( value ? 'yes' : 'no' );

}

function createWindow ( oPConfig ) {

	var ret_val = null;
	
	var window_params = '';
	
	var oConfig = {
		
		'x' 		: -1,
		'y' 		: -1,
		'width' 	: 400,
		'height' 	: 400,
		'nodups'	: true,
		'scroll'	: true,
		'status'	: false,
		'location'	: false,
		'menubar'	: false,
		'toolbar'	: false,
		'hotkeys'	: false,
		'fullscreen': false,
		'resize'	: false,
		'name'		: 'dialog',
		'url'		: 'about:blank'
		
	}


	if( oPConfig && typeof( oPConfig ) == 'object' ) {
		
		for( var idx in oPConfig ) {
			if( typeof( oConfig[idx] ) != 'undefined' ) {
				oConfig[idx] = oPConfig[idx];
			}
		}
		
		if( oConfig.nodups && _created_windows[oConfig.name] ) {
			
			try {
				_created_windows[oConfig.name].close();
			} catch ( e ) {
				// oj, exceptionas =|
			}
			
			_created_windows[oConfig.name] = null;
		
		}
		
		if( oConfig.x < 0 ) {
			oConfig.x = Math.round( ( screen.height - oConfig.height ) / 2 );
		}
		
		if( oConfig.y < 0 ) {
			oConfig.y = Math.round( ( screen.width - oConfig.width ) / 2 );
		}
		
		window_params = 
			
			'top=' + oConfig.x + ',' +
			'left=' + oConfig.y + ',' +
			'width=' + oConfig.width + ',' +
			'height=' + oConfig.height + ',' +
			'location=' + boolToYesNo( oConfig.location ) + ',' +
			'menubar=' + boolToYesNo( oConfig.menubar ) + ',' +
			'toolbar=' + boolToYesNo( oConfig.toolbar ) + ',' +
			'hotkeys=' + boolToYesNo( oConfig.hotkeys ) + ',' +
			'fullscreen=' + boolToYesNo( oConfig.fullscreen ) + ',' +
			'resizable=' + boolToYesNo( oConfig.resize ) + ',' +
			'status=' + boolToYesNo( oConfig.status ) + ',' +
			'scrollbars=' + boolToYesNo( oConfig.scroll );
		
		ret_val = window.open( oConfig.url, oConfig.name, window_params );
		
		_created_windows[oConfig.name] = ret_val;
		
	}
	
	return( ret_val );

}

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.clientX = evt.clientX ? ( evt.clientX ) : 0;
		this.clientY = evt.clientY ? ( evt.clientY ) : 0;
		
		
		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();
		}
		
	}

}

