// Marcos Ortega *** Oct 2006 ***
// Nicaragua

// en los objetos se debe incluir esto: style="filter:alpha(opacity=50); -moz-opacity:0.5"

//
function muestraTransparenciaUnaVez(idobjeto){
	if(dameCookie(idobjeto+'_mostrado')!='si'){
		if(muestraTransparencia(idobjeto)){
			ponCookie(idobjeto+'_mostrado', 'si');
			return true;
		}
	}
	return false;
}

function muestraTransparencia(idobjeto){
	return muestraTransparenciaYEjecuta(idobjeto, '');
}

function muestraTransparenciaYEjecuta(idobjeto, JS){
	var obj = dameObj(idobjeto);
	if(obj){
		obj.style.visibility = 'visible';
		procesaTransp(obj, 10, 100, JS);
		return true;
	}
	return false;
}

function ocultaTransparencia(idobjeto){
	return ocultaTransparenciaYEjecuta(idobjeto, '');
}

function ocultaTransparenciaYEjecuta(idobjeto, JS){
	var obj = dameObj(idobjeto);
	if(obj){
		procesaTransp(obj, -10, 1, 'dameObj(\''+idobjeto+'\').style.visibility=\'hidden\';'+JS);
		return true;
	}
	return false;
}

function muestraObjeto(idobjeto){
	var obj = dameObj(idobjeto);
	if(obj){
		//ponTransparencia(obj, 100);
		obj.style.visibility = 'visible';
		return true;
	}
	return false;
}

function ocultaObjeto(idobjeto){
	var obj = dameObj(idobjeto);
	if(obj){
		//ponTransparencia(obj, 0);
		obj.style.visibility = 'hidden';
		return true;
	}
	return false;
}
//

// -----------------------
// funciones de transparencia
// -----------------------
function ponTransparencia(obj, valor){
	if(obj){
		//Mozilla
		if(obj.style)
			if(obj.style.MozOpacity)
				obj.style.MozOpacity= (valor / 100);
		//IE4
		if(obj.filters)
			if(obj.filters.alpha)
				if(obj.filters.alpha.opacity)
					obj.filters.alpha.opacity = valor;
	}
}

function dameTransparencia(obj){
	if(obj){
		//Mozilla
		if(obj.style)
			if(obj.style.MozOpacity)
				return (obj.style.MozOpacity*100);
		//IE4
		if(obj.filters)
			if(obj.filters.alpha)
				if(obj.filters.alpha.opacity)
					 return obj.filters.alpha.opacity;
	}
	return -1;
}



// -----------------------
// motor de transparencias
// -----------------------
var transp_objetos 		= new Array();	// objetos que estan siendo ocultados/visualizados
var transp_ajustes 		= new Array();	// factores de transparencia a mover (negativo para ocultar)
var transp_final 		= new Array();	// valor final de transparencia deseado
var transp_funciones 	= new Array();	// funciones a llamar cuando el proceso termine
var transp_conteo 		= 0;			// cantidad de objetos en proceso
var transp_timer;

// devuelve la posicion del objeto indicado en la fila de 'objetos a procesar transparencia'
function posObjTransp(obj){
	var i;
	for(i=0; i<transp_conteo; i++){
		if(transp_objetos[i]==obj) return i;
	}
	return -1;
}

// agrega el objeto indicado de la fila de 'objetos a procesar transparencia'
// esta es la unica funcion que el programador debe llamar directamente
function procesaTransp(obj, ajuste, valorFinal, llamarFuncionAlTerminar){
	if(obj==null || ajuste==0 || valorFinal<0 || valorFinal>100) return;
	var posActual = posObjTransp(obj); 			// ya esta siendo procesado?
	if(posActual==-1){							// si es nuevo en la fila: se agrega todo
		transp_ajustes[transp_conteo] 	= ajuste;
		transp_final[transp_conteo]		= valorFinal;
		transp_funciones[transp_conteo] = llamarFuncionAlTerminar;
		transp_objetos[transp_conteo] 	= obj;
		transp_conteo++;
		if(transp_conteo==1){
			transp_timer = setInterval('pasoMotorTransparencia();', 50);
		}
	} else {									// si ya esta en la fila: solo se modifican sus parametros
		transp_ajustes[posActual] 	= ajuste;
		transp_final[posActual]		= valorFinal;
		transp_funciones[posActual] = llamarFuncionAlTerminar;
	}
}


// quita el objeto indicado de la fila de 'objetos a procesar transparencia'
function quitaObjTransp(obj){
	var pos = posObjTransp(obj);
	while(pos>=0){
		quitaElemTransp(pos);
		pos = posObjTransp(obj);
	}
}

// quita el elemento de la posicion indicada en la fila de 'objetos a procesar transparencia'
function quitaElemTransp(pos){
	if(pos<0 || pos>=transp_conteo) return;
	var i;
	for(i=pos; i<transp_conteo; i++){
		transp_objetos[i] 	= transp_objetos[i+1];
		transp_ajustes[i] 	= transp_ajustes[i+1];
		transp_funciones[i] = transp_funciones[i+1];
		transp_final[i]		= transp_final[i+1];
	}
	transp_conteo--;
	if(transp_conteo==0){
		clearInterval(transp_timer);
	}
}

// procesa una paso ('tick') de los objetos en la fila de 'objetos a procesar transparencia'
function pasoMotorTransparencia(){
	var i;
	for(i=0; i<transp_conteo; i++){
		var valor = dameTransparencia(transp_objetos[i]);
		var nuevoValor = valor + transp_ajustes[i];
		if((transp_ajustes[i]<0 && (nuevoValor<=0 || nuevoValor<=transp_final[i])) || (transp_ajustes[i]>0 && (nuevoValor>=100 || nuevoValor>=transp_final[i]))){
			ponTransparencia(transp_objetos[i], transp_final[i]);
			var miFuncionALlamar = transp_funciones[i];				// para evitar bloqueos de llamadas javascript, quito el obj antes de llamar a su funcion
			quitaObjTransp(transp_objetos[i]);
			if(miFuncionALlamar!='')eval(miFuncionALlamar);			//ejecuta la funcion
		} else{
			ponTransparencia(transp_objetos[i], nuevoValor);
		}
	}
}