//Incluir ocmoscap.js, global.js, protoculous-1.0.1.js y arrascap.js
//Incluir la imagen "imagenes/cargando.gif"
// Nota IMPORTANTE: al asignar a la imagen del visor la fuente en IE la llamada al manejador del evento onload es inmediata. Hay que
//tenerlo en cuenta para las variables de control del manejador (asignarlas antes de asignar la fuente para evitar problemas).

var visores=new Array();
//------------------------------------------------------------------------------
//Clase visor
function visor(posx,posy,txtCtrlA,txtCtrlB,limSup,rutfot,nomAncla){
 this.posx=posx;
 this.posy=posy;
 this.txtCtrlA=txtCtrlA;
 this.txtCtrlB=txtCtrlB;
 this.limSup=limSup;
 this.rutfot=rutfot;
 this.nomAncla=nomAncla;
 this.idCapaVisor="";
 this.idCapaCab="";
 this.id_imagen="";
 this.id_cerrar="";
 this.idEnlA="";
 this.idEnlB="";
 this.limInf=1;
 this.indice=1;
 this.fntVsr="";
 this.fntCrgnd="imagenes/cargando.gif";
 this.crgnd=false;
 this.mostrando=false;
 this.visorAbierto=false;
 this.imgAuxi=new Image();
 this.imgAuxiCargada=0;
 this.imgAuxi.onload=al_cargar_imagen_auxi;
 this.cssObjVisor="position:absolute;z-index:100;visibility:hidden;background-color:#FFF;text-align:center;";
 this.cssObjCab="background-color:#F90;height:20px;margin:0;";
 this.altoCab=0;
 this.cssObjCerrar="float:right;cursor:pointer;color:#FFF;font-size:12px;font-weight:bold;line-height:14px;width:15px;";
 this.cssSobreObjCerrar="";
 this.cssObjImg="margin:40px;";
 this.cssObjEnlA="color:#000;margin:8px;line-height:14px;";
 this.cssObjEnlB="color:#000;margin:8px;line-height:14px;";
 this.altoEnls=0;
 this.factorMargen=4;
 //métodos privados  
 this.centrarVisor=centrarVisor;
 //métodos públicos
 this.setCrgnd=setCrgnd;
 this.mostrar=mostrar;
 this.mosPorInd=mosPorInd;
 this.setCssVisor=setCssVisor;
 this.setCssCab=setCssCab;
 this.setCssCerrar=setCssCerrar;
 this.setCssSobreCerrar=setCssSobreCerrar;
 this.setCssEnlA=setCssEnlA;
 this.setCssEnlB=setCssEnlB;
 //------------------------------------------
 var objVisor=Builder.node('div',{id:this.idCapaVisor=id_unico("visor")});
 objVisor.style.cssText=this.cssObjVisor=this.cssObjVisor+"left:"+this.posx+"px;top:"+this.posy+"px;";
 
 var objCab=Builder.node('div',{id:this.idCapaCab=id_unico("cab")});
 objVisor.appendChild(objCab);
 objCab.style.cssText=this.cssObjCab;
 this.altoCab=parseInt(objCab.style.height);
 
 var cerrar=Builder.node('span',{id:this.id_cerrar=id_unico("cerrar")});
 cerrar.style.cssText=this.cssObjCerrar;
 cerrar.onclick=cerrar_visor;
 cerrar.onmouseover=sobre_cerrar_visor;
 cerrar.onmouseout=salir_cerrar_visor;
 
 var imagen=Builder.node('img',{id:this.id_imagen=id_unico("imagen")});
 imagen.style.cssText=this.cssObjImg;
 imagen.onerror=al_fallar_imagen;
 
 objCab.appendChild(cerrar); 
 objVisor.appendChild(imagen);
 
 if(this.txtCtrlA!=""){
  var salto=d.createElement("br");
	
	var controlA=Builder.node('a',{id:this.idEnlA=id_unico("enl"),href:"#"+nomAncla});
	controlA.style.cssText=this.cssObjEnlA;
	this.altoEnls=parseInt(controlA.style.lineHeight)+(parseInt(controlA.style.marginTop)*2);
	controlA.onclick=anterior;
  var textocontrolA=d.createTextNode(this.txtCtrlA);
	
	objVisor.appendChild(salto);
  objVisor.appendChild(controlA);
  controlA.appendChild(textocontrolA);
 }
 
 if(this.txtCtrlB!=""){
	var controlB=Builder.node('a',{id:this.idEnlB=id_unico("enl"),href: "#"+nomAncla});
	controlB.style.cssText=this.cssObjEnlB;
	controlB.onclick=siguiente;
  var textocontrolB=d.createTextNode(this.txtCtrlB);
	
	objVisor.appendChild(controlB);
  controlB.appendChild(textocontrolB);
 } 
 d.body.appendChild(objVisor);
 new Effect.Shrink(this.idCapaVisor,{afterFinish: mostrarCapaVisor});
 new Draggable(this.idCapaVisor,{handle:this.idCapaCab});
}

//Fin Clase visor
//------------------------------------------------------------------------------
//métodos
function setCrgnd(fuente){this.fntCrgnd=fuente;}

function mostrar(fuente){
 if(this.mostrando) return; //evitar doble click
 this.mostrando=true;
 this.fntVsr=fuente;
 if(this.visorAbierto) Effect.Shrink(this.idCapaVisor,{afterFinish: cargando});
 else cargando(this);
}

function mosPorInd(ind){
 if(this.mostrando) return;
 if(ind>=this.limInf && ind<=this.limSup){
  this.mostrar(this.rutfot+ind+'.jpg');
  this.indice=ind;
 }
 else alert("El índice no es válido.");
}

function setCssVisor(regla){$(this.idCapaVisor).style.cssText=this.cssObjVisor=this.cssObjVisor+regla;}

function setCssCab(regla){$(this.idCapaCab).style.cssText=this.cssObjCab=this.cssObjCab+regla;this.altoCab=parseInt($(this.idCapaCab).style.height);}

function setCssCerrar(regla){$(this.id_cerrar).style.cssText=this.cssObjCerrar=this.cssObjCerrar+regla;}

function setCssSobreCerrar(regla){$(this.id_cerrar).style.cssText=this.cssSobreObjCerrar=this.cssSobreObjCerrar+regla;}

function setCssImg(regla){$(this.id_imagen).style.cssText=this.cssObjImg=this.cssObjImg+regla;}

function setCssEnlA(regla){
 $(this.idEnlA).style.cssText=this.cssObjEnlA=this.cssObjEnlA+regla;
 this.altoEnls=parseInt($(this.idEnlA).style.lineHeight)+(parseInt($(this.idEnlA).style.marginTop)*2);
}

function setCssEnlB(regla){$(this.idEnlB).style.cssText=this.cssObjEnlB=this.cssObjEnlB+regla;}

//calcular el scroll para posicionar
function centrarVisor(){
 var objCapVis=$(this.idCapaVisor);
 var altoCentrar=Element.getHeight(objCapVis), anchoCentrar=Element.getWidth(objCapVis);
 var anchoVentana,altoVentana,elem,desplax=0,desplay=0,posCent; 
 
 anchoVentana=d.documentElement.offsetWidth?d.documentElement.offsetWidth:innerWidth;
 if(anchoVentana>anchoCentrar) desplax=Math.floor((anchoVentana-anchoCentrar)/2);  
 altoVentana=(window.innerHeight)?window.innerHeight:(d.body.clientHeight>d.documentElement.offsetHeight)?d.body.clientHeight:d.documentElement.offsetHeight;  
 if(altoVentana>altoCentrar) desplay=Math.floor((altoVentana-altoCentrar)/2);
 with(objCapVis.style){
  if(d.all){
	 posLeft=desplax;	//IE
	 posTop=desplay;	//IE
	}
  else{
	 left=desplax+"px";			//otros
   top=desplay+"px";			//otros
	}
 } 
}

//Fin métodos
//------------------------------------------------------------------------------
//funciones
function crearVisor(posx,posy,txtCtrlA,txtCtrlB,limSup,rutfot,nomAncla){
 var nuevoVisor=new visor(posx,posy,txtCtrlA,txtCtrlB,limSup,rutfot,nomAncla);
 visores.push(nuevoVisor);
 return nuevoVisor;
}

function getRefObjVis(idCapVis){for(var i=0;i<visores.length;i++) if(visores[i].idCapaVisor==idCapVis) return visores[i];}

//funciones callback
function cargando(obj){
 var objVis;
 if(obj.imgAuxi) objVis=obj;
 else objVis=getRefObjVis(obj.effects[0].element.id);
 objVis.imgAuxiCargada=0;
 objVis.crgnd=true;
 objVis.imgAuxi.src=objVis.fntCrgnd;  //poner al final para IE
}

function cargarFotoEnAuxi(obj){
 var objVis=getRefObjVis(obj.effects[0].element.id);
 objVis.imgAuxiCargada=0;
 objVis.imgAuxi.src=objVis.fntVsr;  //poner al final para IE
}

function cargarFoto(obj){
 var objVis=getRefObjVis(obj.effects[0].element.id);
 var objImgVis=$(objVis.id_imagen);
 objImgVis.style.margin=(parseInt(objImgVis.style.marginLeft)/objVis.factorMargen)+"px";
 $(objVis.idCapaVisor).style.width=(objVis.imgAuxi.width+(parseInt(objImgVis.style.marginLeft)*2))+"px";
 objImgVis.src=objVis.imgAuxi.src;
 objVis.centrarVisor();
 Effect.Grow(objVis.idCapaVisor,{afterFinish: setMostrando});
}

function setMostrando(obj){
 var objVis=getRefObjVis(obj.effects[0].element.id);
 objVis.mostrando=false;
}

function mostrarCapaVisor(obj){MosCapa(obj.effects[0].element.id);}

function abrirVisor(obj){new Effect.Grow(obj.effects[0].element.id);}

//Fin funciones
//------------------------------------------------------------------------------
//manejadores de eventos
function cerrar_visor(){
 Effect.Shrink(this.parentNode.parentNode.id);
 getRefObjVis(this.parentNode.parentNode.id).visorAbierto=false;
}

function sobre_cerrar_visor(){
 var objVisor=getRefObjVis(this.parentNode.parentNode.id);
 if(objVisor.cssSobreObjCerrar=="") return;
 this.style.cssText=objVisor.cssSobreObjCerrar;
}

function salir_cerrar_visor(){
 var objVisor=getRefObjVis(this.parentNode.parentNode.id); 
 if(objVisor.cssSobreObjCerrar=="") return; 
 this.style.cssText=objVisor.cssObjCerrar;
}

function al_cargar_imagen_auxi(){
 var objVis,objCapVis,objImgVis,objImgAuxi;
 /* var brwsr=new Browser(); */
 objImgAuxi=this;
 for(var i=0;i<visores.length;i++){
  if(visores[i].imgAuxi==objImgAuxi){
	 objVis=visores[i];
	 break;
	}
 }
 if(objVis.imgAuxiCargada==0) objVis.imgAuxiCargada++;  //para IE muy importante (el manejador se ejecuta múltiples veces).
 else return;
 objCapVis=$(objVis.idCapaVisor);
 objImgVis=$(objVis.id_imagen);
 if(objImgAuxi.width>0){
  var alto;
	/* if(brwsr.isIE){
	 alto=objImgAuxi.height+objVis.altoCab+(parseInt(objImgVis.style.marginTop)*2)+objVis.altoEnls;
	 objCapVis.style.height=alto+"px";  //calcular altura para IE
	} */
	if(objVis.crgnd){
   objVis.crgnd=false;
	 objImgVis.style.margin=(parseInt(objImgVis.style.marginLeft)*objVis.factorMargen)+"px";
	 objCapVis.style.width=(objImgAuxi.width+(parseInt(objImgVis.style.marginLeft)*2))+"px";
   objImgVis.src=objImgAuxi.src;
	 objVis.centrarVisor();
	 Effect.Grow(objCapVis.id,{afterFinish: cargarFotoEnAuxi});
  }
	else{
	 Effect.Shrink(objCapVis.id,{afterFinish: cargarFoto});
	}
	objVis.visorAbierto=true;
 }
}

function anterior(){
 var objVis=getRefObjVis(this.parentNode.id);
 if(objVis.crgnd) return;
 if(objVis.indice>objVis.limInf) objVis.indice--;
 else objVis.indice=objVis.limSup;
 objVis.mostrar(objVis.rutfot+objVis.indice+'.jpg');
}
	
function siguiente(){
 var objVis=getRefObjVis(this.parentNode.id);
 if(objVis.crgnd) return;
 if(objVis.indice<objVis.limSup) objVis.indice++;
 else objVis.indice=objVis.limInf;
 objVis.mostrar(objVis.rutfot+objVis.indice+'.jpg');
}

function al_fallar_imagen(){alert("La imagen no se ha podido descargar.");}

//Fin manejadores de eventos