/*======================================================================*\
|| #################################################################### ||
|| #  				  Imperial Bulletin Board v1.x                    # ||
|| # ---------------------------------------------------------------- # ||
|| #  For license, version and changelog questions or concerns,       # ||
|| #  navigate to the docs/ folder or visit the forums at the		  # ||
|| #  website, http://www.imperialbb.com/forums. with your questions. # ||
|| # ---------------------------------------------------------------- # ||
|| # Name: js_event.js                                                # ||
|| # ---------------------------------------------------------------- # ||
|| #                "Copyright(c) 2007 The iBB Group"                 # ||
|| # ---------------------------------------------------------------- # ||
|| #################################################################### ||
\*======================================================================*/

function ibb_dom_event ( )
{
	var domobj = this;

	this.add_event = function ( o, t, f )
	{
		var d 		= 'addEventListener';
		var n 		= 'on'+t;
		var rO 		= o;
		var clean 	= ( t != 'unload' );
		if ( o[ d ] )
		{
			o[d] ( t, f, false );
		}
		else if ( o.attachEvent ) 
		{
			o.attachEvent ( n, f );
		}
		else
		{
			clean = false;
			if ( !o.evts )
			{
				o.evts = { };
			}
			if ( !o.evts[ t ] )
			{
				o.evts[ t ] = IBB.general.ifelse ( o[ n ], { b : o[ n ] }, {} );
				o[ n ] = new Function ( 'e', 'var r = true, o = this, a = o.evts[ "'+t+'" ], i; for ( i in a ) { o.f = a[ i ]; r = o.f ( e||window.event ) != false && r; o.f = null; } return r' );
				if ( t != 'unload' ) 
				{
					clean = true;
				}
			}
			if ( !f.i )
			{
				f.i = domobj.add_event.i++;
			}
			o.evts[ t ][ f.i ] = f;
		}
		if ( clean == true ) 
		{
			domobj.add_event ( window, 'unload', 
				function ( )
				{
					domobj.remove_event ( rO, t, f );
				}
			);
		}
	};

	domobj.add_event.i = 1;

	this.remove_event = function ( o, t, f )
	{
		var d = 'removeEventListener';
		if ( o[ d ] )
		{
			o[ d ] ( t, f, false );
		}
		else if ( o.detachEvent ) 
		{
			o.detachEvent ( 'on'+t, f );
		}
		else if ( o.evts && o.evts[ t ] && f.i ) 
		{
			delete o.evts[ t ][ f.i ];
		}
	};

	this.dom_ready = function ( f, a )
	{
		var n = 0;
		var t = setInterval ( 
			function ( )
			{
				var c = true;
				n++;
				if ( ( IBB.general.fetch_tag ( 'body' )[ 0 ] != null || document.body != null ) )
				{
					c = false;
					if ( typeof ( a ) === 'object' )
					{
						for ( var i in a )
						{
							if ( ( a[ i ] == 'id' && $ ( i ) == null ) || ( a[ i ] == 'tag' && IBB.general.fetch_tag ( i ).length < 1 ) )
							{
								c = true;
								break;
							}
						}
					}
					if ( !c )
					{
						try 
						{ 
							f ( ); 
						}
						catch ( e )
						{ 
							alert ( 'Error: '+ e.description ); 
						}
						clearInterval ( t );
					}
				}
				if ( n >= 60 ) 
				{
					clearInterval ( t );
				}
			}, 
		250 );
	};

	/*this.attach_event = function ( obj, evt, fun )
	{
		if ( obj.addEventListener )
		{
			obj.addEventListener ( evt, fun, false );
		}
		else if ( obj.attachEvent )
		{
			obj.attachEvent ( 'on'+evt, fun, false );
		}
		else
		{
			obj[ 'on'+evt ] = fun;
			obj[ 'on'+evt ] = function ( )
			{
				obj[ 'on'+evt ]( window.event );
			}
		}
	};

	this.remove_event = function ( obj, evt, fun )
	{
		if ( obj.removeEventListener )
		{
			obj.removeEventListener ( evt, fun, false );
		}
		else if ( obj.attachEvent )
		{
			var ret = obj.attachEvent ( 'on'+evt, fun );
			return ret;
		}
		else
		{
			obj.detachEvent ( 'on'+evt, fun );
		}
	};*/
};
IBB.namespace ( 'event' );
IBB.event = new ibb_dom_event ( );

/*======================================================================*\
|| #################################################################### ||
|| #                "Copyright(c) 2007 The iBB Group"                 # ||
|| #################################################################### ||
\*======================================================================*/