// JavaScript Document

var baseClass = function( ) 
{
	var self = this ; 
	var _isInitalised = false ;

	self.name = "baseClass" ;
	self.applicationPath = "/" ;

	var preInitaliseEvents = [ ] ;
	var initaliseEvents = [ ] ;
	var postInitaliseEvents = [ ] ;

    self.registerPreInitaliseEvent = function( func )
	{
        preInitaliseEvents.push( func ) ;
    } ;

    self.registerInitaliseEvent = function( func )
	{
        initaliseEvents.push( func ) ;
    } ;

    self.registerPostInitaliseEvent = function( func )
	{
        postInitaliseEvents.push( func ) ;  
    } ;

	var firePreInitaliseEvents = function( )
	{
        for ( var i = 0; i < preInitaliseEvents.length; i++ )
		{
            preInitaliseEvents[ i ]( ) ;
        }
    } ;

	var fireInitaliseEvents = function( )
	{
        for ( var i = 0; i < initaliseEvents.length; i++ )
		{
            initaliseEvents[ i ]( ) ;
        }
    } ;

	var firePostInitaliseEvents = function( )
	{
        for ( var i = 0; i < postInitaliseEvents.length; i++ )
		{
            postInitaliseEvents[ i ]( ) ;
        }
    } ;

	self.preInitalise = function ( )
	{
		return true ;
	} ;

	self.initalise = function ( )
	{
		self.preInitalise( ) ;
		firePreInitaliseEvents( ) ;
		fireInitaliseEvents( ) ;
		firePostInitaliseEvents( ) ;
		_isInitalised = true ;
		self.postInitalise( ) ;
		return true ;
	} ;

	self.postInitalise = function ( )
	{
		return true ;
	} ;
	
	self.loadJsCssFile = function ( filename, filetype )
	{
		if ( filetype == "js" )
		{ //if filename is a external JavaScript file
			var fileref = document.createElement( "script" ) ;
			fileref.setAttribute( "type", "text/javascript" ) ;
			fileref.setAttribute( "src", filename ) ;
		}
		else if ( filetype == "css" )
		{ //if filename is an external CSS file
			var fileref = document.createElement( "link" )
			fileref.setAttribute( "rel", "stylesheet" ) ;
			fileref.setAttribute( "type", "text/css" ) ;
			fileref.setAttribute( "href", filename ) ;
		}
		if ( typeof fileref != "undefined" )
		{
			document.getElementsByTagName( "head" )[ 0 ].appendChild( fileref ) ;
		}
		return true ;
	} ;

	self.isInitalised = function ( )
	{
		return _isInitalised ;
	} ;

	// Object create OK	
	return true;
} ;

var pageLoadQueue = new baseClass( ) ;
pageLoadQueue.name = "pageLoadQueue" ;
addOnWindowLoadEvent( pageLoadQueue.initalise ) ;

if (document.body.__defineGetter__) 
{
	if (HTMLElement) 
	{
		var element = HTMLElement.prototype;
		if (element.__defineGetter__) 
		{
			element.__defineGetter__( "outerHTML" , 
				function ( )
				{
					var		parent				= this.parentNode ;
					var		el					= document.createElement( parent.tagName ) ;
					el.appendChild( this ) ;
					var		shtml				= el.innerHTML ;
					parent.appendChild( this ) ;
					return	shtml ;
				} 
			) ;
		}
        if (element.__defineSetter__)
        {
			element.__defineSetter__( "outerHTML" ,
				function ( html )
				{  
					var		el					= document.createElement( 'div' ) ;
					el.innerHTML				= html ;
					var		range				= document.createRange( ) ;
					range.selectNodeContents( el ) ;
					var		documentFragment	= range.extractContents( ) ;
					this.parentNode.insertBefore( documentFragment, this ) ;
					this.parentNode.removeChild( this ) ;
				  }
			);
		}
	}
}