var TimeToFade = 1000.0;//o por decirlo asi, cuanto dura la transicion?


function fadeVO(eid, reverse, eparent){
  // esta funcion oculta TODO, y por TODO me refiero a que si algo tiene un ID 
  //y le ponemos que fade(ID) entonces se oculta

  //alert(eid);
  var element;
  if(typeof(eparent) != "undefined"){
	  element = document.getElementById(eparent).getElementsByTagName('div')[eid];
	  eparentThis="'"+eparent+"'";
  } else {
	  element = document.getElementById(eid);
  }
    
  if(element == null)
    return false;
  
  //esto es para "desaparecer" pero al mismo tiempo "mantener" el ID-contenedor
  
  if(element.style.display == 'none'){
	  //alert("desaparece -> "+eid);
	  element.FadeState = -2;
	  element.style.opacity = '0';
	  element.style.filter = 'alpha(opacity = 0)';
	  
	  if(typeof(reverse) != "undefined" && reverse=='si'){
	  	element.style.display = 'block';
	  }
  }
  
  
  if(element.FadeState == null){
    if( (element.style.opacity == null) || (element.style.opacity == '') || (element.style.opacity == '1') ){
      element.FadeState = 2;
    } else {
      element.FadeState = -2;
    }
  }
 
  //alert(reverse+" -> "+typeof(reverse));
  if(typeof(reverse) != "undefined"){//si pasan el "reverse" para entonces "invertir" el estado actual
	  //alert("atras");
	  if(element.FadeState == 1 || element.FadeState == -1){
		element.FadeState = element.FadeState == 1 ? -1 : 1;
	    element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
	  } else {
	    element.FadeState = element.FadeState == 2 ? -1 : 1;
	    element.FadeTimeLeft = TimeToFade;
	    if(typeof(eparent) != "undefined"){
	    	setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "', '"+eparent+"')", 33);
	    }else{
	    	setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 33);
	    }
	  }
  } else if( (element.FadeState < 0) ) {//aqui lo que le decimos es que "solo muestre"
	  if(element.FadeState == -1){
	    element.FadeState = 1;
	    element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
	  } else {
	    element.FadeState = 1;
	    element.FadeTimeLeft = TimeToFade;
	    if(typeof(eparent) != "undefined"){
	    	setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "', '"+eparent+"')", 33);
	    }else{
	    	setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 33);
	    }
	  }
  }
}

function animateFade(lastTick, eid, eparent){  
  var curTick = new Date().getTime();
  var elapsedTicks = curTick - lastTick;
 
  var element
  if(typeof(eparent) != "undefined"){
	  element = document.getElementById(eparent).getElementsByTagName('div')[eid];
  } else {
	  element = document.getElementById(eid);
  }
 
  
  //alert(element.innerHTML);
  if(element.FadeTimeLeft <= elapsedTicks) {
	
	element.style.opacity = element.FadeState == 1 ? '1' : '0';
    element.style.filter = 'alpha(opacity = '
        + (element.FadeState == 1 ? '100' : '0') + ')';
        
    element.FadeState = element.FadeState == 1 ? 2 : -2;
    
    element.style.display = (element.FadeState == -2 ? 'none' : 'block');
    
    //alert(element.FadeState);
    return false;
  }
 
  element.FadeTimeLeft -= elapsedTicks;
  var newOpVal = element.FadeTimeLeft/TimeToFade;
  if(element.FadeState == 1)
    newOpVal = 1 - newOpVal;

  element.style.opacity = newOpVal;
  element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
  
  if(typeof(eparent) != "undefined"){
  	setTimeout("animateFade(" + curTick + ",'" + eid + "', '"+eparent+"')", 33);
  }else{
  	setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33);
  }
}