var debug = null;
var debugLevel = 0;

function changeStyle( objeto,estilo)
{
   objeto.className=estilo; 
}

function setDebug( debugFunction , level )
{
	debug = debugFunction;
	debugLevel = level;
}

function evalSingleConstraint( element , constraint )
{
	var expression = null;
	var constraintArray = constraint.split( "=");
	var result = false;
	

	if ( constraintArray.length == 2 )
	{
		expression = "element." + constraintArray[ 0 ];
		
						
		if ( debug ) 
			debug( "expression : " + expression , 2);
			
		if ( eval( expression ) )
		{
			expression = expression + "==" + constraintArray[ 1 ];
	
				
			if ( debug ) 
				debug( "expression : " + expression , 2);  
				
			result = eval( expression );
						
			if ( debug ) 
				debug( "expression : " + expression + " = " + result , 2);
		}


	}
	return result;
}

function evalConstraints( element , constraints )
{
	var result = true;
	var constraintsArray = constraints.split( ";" );
	
	for( var i = 0 ; i < constraintsArray.length && result ; i++)
		result = evalSingleConstraint( element , constraintsArray[ i ] );
		
	return result;
}

function getElementsByTagAndConstraint( name , constraints )
{
  var elementList = document.getElementsByTagName( name );
  var found = false;
  var result = new Array();

  if ( elementList )
  { 
  	 if ( debug )
  	 {
	     debug( "finding : " + name + "  contraint:" + constraints, 1 );
	     debug( "found: " + elementList.length + " elements " , 2 );
	 } 
		 
  	 for( var i = 0 ; i < elementList.length; i++ ) 
	 {
	 	if ( debug )
	 	  debug( "evaluating constraint for element: " + i , 2 );
	 	  
	 	if ( constraints ) 
			found = evalConstraints( elementList[ i ] , constraints );
		else
			found = true;
	    
		if ( found ) 
			result.push( elementList[ i ] );
			
		found = false;
	 }
  }
  
  return result;
}