//
//  This script was created
//  by Mircho Mirev
//  mo /mo@momche.net/
//
//	:: feel free to use it BUT
//	:: if you want to use this code PLEASE send me a note
//	:: and please keep this disclaimer intact
//

function cDomExtension( hParent, aSelectors, hInitFunction )
{
	this.hParent = hParent
	this.aSelectors = aSelectors
	this.hInitFunction = hInitFunction
}

cDomExtensionManager = 
{
	aExtensions : new Array()
}

cDomExtensionManager.register = function( hDomExtension )
{
	cDomExtensionManager.aExtensions.push( hDomExtension )
}

cDomExtensionManager.initSelector = function( hParent, sSelector, hInitFunction )
{
	var hSelectorRegEx = /([a-z0-9_]*)([\.#@]?)([a-z0-9_=]*)/i
	var hAttributeRegEx = /([a-z0-9_]*)=?([a-z0-9_]*)/i
	var aSelectorData = hSelectorRegEx.exec( sSelector )
	var aAttributeData
	var sAttribute 
	
	if( aSelectorData[ 1 ] != '' )
	{
		var hGroup  = hParent.getElementsByTagName( aSelectorData[ 1 ] )
		for( var nI = 0; nI < hGroup.length; nI ++ )
		{
			if( aSelectorData[ 2 ] != '' )
			{
				switch( aSelectorData[ 2 ] )
				{
					case '.' : 	if( hGroup[ nI ].className == aSelectorData[ 3 ] )
								{
									hInitFunction( hGroup[ nI ] )
								}
								break
								
					case '#' : 	if( hGroup[ nI ].id == aSelectorData[ 3 ] )
								{
									hInitFunction( hGroup[ nI ] )
								}
								break
								
					case '@' : 	aAttributeData = hAttributeRegEx.exec( aSelectorData[ 3 ] )
								sAttribute = hGroup[ nI ].getAttribute( aAttributeData[ 1 ] )
								if(  sAttribute != null && sAttribute.length > 0  )
								{					
									if( aAttributeData[ 2 ] != '' )
									{
										if( sAttribute == aAttributeData[ 2 ] )
										{
											hInitFunction( hGroup[ nI ] )
										}
									}
									else
									{
										hInitFunction( hGroup[ nI ] )
									}
								}
								break
				}
			}
		}
	}
}

cDomExtensionManager.initialize = function()
{
	var hDomExtension = null
	var aSelectors
	
	for( var nKey in cDomExtensionManager.aExtensions )
	{
		aSelectors = cDomExtensionManager.aExtensions[ nKey ].aSelectors
		for( var nKey2 in aSelectors )
		{
			cDomExtensionManager.initSelector( cDomExtensionManager.aExtensions[ nKey ].hParent, aSelectors[ nKey2 ], cDomExtensionManager.aExtensions[ nKey ].hInitFunction )
		}
	}
}

cDomEvent.addEvent( window, 'load', cDomExtensionManager.initialize, false )