/*	USAGE
	
	iterateOverElements( getElementsByClass( "class_name" ), function ( element )
	{
		// do something with each element
	} );


	withClass( "class_name" ).run( function ( element )
	{
		// do something with each element
	} );
*/

function iterateOverElements( elements, functionReference )
{
	if ( elements.length )
	{
		for ( var i in elements )
		{
			if ( typeof elements[ i ] != "function" )
			{
				functionReference( elements[ i ] );
			}
		}
	}
	else
	{
		functionReference( elements );
	}
}

function getElementsByClass( className, node )
{
	var elements = Array( );
		
	if ( className != null )
	{
		if ( node == null )
		{
			node = document.body;
		}
		
		if ( node.className == className )
		{
			elements.push( node );
		}
		
		for ( var i in node.childNodes )
		{
			elements = elements.concat( getElementsByClass( className, node.childNodes[ i ] ) );
		}
	}
	
	return elements;
}

function withClass( className )
{
	var elements = getElementsByClass( className );
	
	elements.run = run;
	
	return elements;
}

function withID( idName )
{
	var element = document.getElementById( idName );

	if ( element )
	{
		element.run = run;
	}
	
	return element;	
}

function run( functionReference )
{
	iterateOverElements( this, functionReference );
}

