//--------------------------------------------------------------------------------------------------------------
//                                            variables globales
//--------------------------------------------------------------------------------------------------------------
var d=document;
var docActual=location.pathname;
var bloginfo=null;
var arroba="@", punto=".";
var dominio=null, ext=null;
var alfabeto=[];
var indices=[];
var globalCont=0;
var anchoCentrar=null, altoCentrar=null;
//posición inicial antes de centrar (no importa la posición de menu.js).
var elemsCentrar=[];

//--------------------------------------------------------------------------------------------------------------
//                                            otras librerias
//--------------------------------------------------------------------------------------------------------------

//d.writeln('<script type="text/javascript" charset="iso-8859-1" src="wp-includes/js/global.js"></script>');

//--------------------------------------------------------------------------------------------------------------
//                                            Funciones globales
//--------------------------------------------------------------------------------------------------------------

function enviarCorreo(){
 var cad="mailto:";
 for(var i=0;i<indices.length;i++) cad+=alfabeto[indices[i]-1];
 window.location=cad+arroba+dominio+punto+ext;
}

//Poner anchoCentrar=null o altoCentrar=null si no se quiere centrar.
function centrar(){
 var anchoVentana=d.viewport.getWidth(),altoVentana=d.viewport.getHeight(),elem,desplax=0,desplay=0,posCent; 
 if(anchoCentrar) if(anchoVentana>anchoCentrar) desplax=Math.floor((anchoVentana-anchoCentrar)/2);
 if(altoCentrar) if(altoVentana>altoCentrar) desplay=Math.floor((altoVentana-altoCentrar)/2);
   
 for(var i=0;i<elemsCentrar.length;i++){
  elem=$(elemsCentrar[i][0]);
	if(anchoCentrar){
	 posCent=parseInt(elemsCentrar[i][1])+desplax;
	 Element.setStyle(elem,{left:posCent+"px"});
	}
	if(altoCentrar){
	 posCent=parseInt(elemsCentrar[i][2])+desplay;
	 Element.setStyle(elem,{top:posCent+"px"});
	}
 }
}

function centrarElem(idElem){
 var elem=$(idElem);
 if(elem.getStyle('position')!='absolute'){
  alert('No se puede centrar un elemento que no esta posicionado absolutamente.');
  return;
 }
 var dimElem=elem.getDimensions(), altoCapa=dimElem.height, anchoCapa=dimElem.width;
 var anchoVentana=d.viewport.getWidth(),altoVentana=d.viewport.getHeight(),desplax=0,desplay=0;
  
 if(anchoVentana>anchoCapa) desplax=(Math.floor((anchoVentana-anchoCapa)/2))+d.viewport.getScrollOffsets().left;
 if(altoVentana>altoCapa) desplay=(Math.floor((altoVentana-altoCapa)/2))+d.viewport.getScrollOffsets().top;
 elem.setStyle({left:desplax+"px",top:desplay+"px"});
}

//cad: cadena a sustituir
//array_sus: array con los valores a sustituir
function sus_cad_array(cad, array_sus){
 for(var i=0;i<array_sus.length;i++) cad=cad.gsub(array_sus[i][0], array_sus[i][1]);
 return cad;
}

function marcarDocActual(){
 var eDA;
 for(var i=0;i<d.links.length;i++){
  eDA=d.links[i];
  if(eDA.href.include(docActual) && !eDA.href.include(docActual+"#"))
	 if(Element.hasClassName(Element.ancestors(eDA)[2],"menu")) Element.addClassName(eDA,'doc_actual');
 }
}

function masMenos(objEnlace,idCapa){
 var cad="menos";
 if(Element.visible($(idCapa))) cad="m&aacute;s";
 Element.update(objEnlace,cad);
 Effect.toggle(idCapa, 'slide');
}

function arriba(ref_enlace){
 var re=/(#capa_cabecera)$/;
 if(re.test(d.location)) ref_enlace.href=d.location;
 else ref_enlace.href=d.location+'#capa_cabecera';
}

//selectorCSS: selector CSS que elige los elementos cuyos hijos de texto se quiere convertir a imagen
//formatoSalida: tipo de formato definido en el fichero conffuentes.php
function transTxtImg(selectorCSS,formatoSalida){
 $$(selectorCSS).each(function(s){
  var txt=s.firstChild.nodeValue;
	s.setStyle({
   backgroundImage: 'url('+bloginfo.template_url+'/phps/fuentes.php?etiqueta='+formatoSalida+'&txt='+escape(txt)+')'
  });
	txt=txt.replace(/./g,'&nbsp;');
	s.update(txt);
 });
}

//variables: objeto (json) con los nombres de las variables como propiedades y sus valores.
function depurar(variables){
 var cad="";
 for(var prop in variables) cad+=prop+': '+variables[prop]+'\n';
 alert(cad);
}

function scrollToNI(){
 if(arguments.length==0) $$('a.scrollToNI').invoke('observe', 'click', function(e){
  e.stop();
  with(e.findElement('a')) scrollToNI(href.substring(href.lastIndexOf('#') + 1));
 });
 else Effect.ScrollTo(arguments[0]);
}

//--------------------------------------------------------------------------------------------------------------
//                                            Extensiones nucleo JavaScript
//--------------------------------------------------------------------------------------------------------------

//if(!Array.prototype.in) Array.prototype.in=function(valor){return this.indexOf(valor)>=0};

//##############################################################################################################
//
//                                            Clases ventana
//
//##############################################################################################################

//**********************************************Clases abstractas***********************************************

//----------------------------------------------Clase Superventana----------------------------------------------
//Esta clase abstracta hace de formulario para añadir componentes (nodos) y crear ventanas más completas.
//Las demás ventanas se derivan directa o indirectamente de esta clase.
var Superventana=Class.create({
 initialize:function(){
	this.claseDivSuperventana='superventana';
	this.divSuperventana=new Element('div').addClassName(this.claseDivSuperventana).setStyle({position:'absolute'});
  this.idDivSuperventana=this.divSuperventana.identify();
	Event.observe(window,'load', this.alCargarDoc.bindAsEventListener(this));
	return this;
 },
 
 //código a ejecutar al cargarse el documento.
 alCargarDoc:function(e){
  d.body.appendChild(this.divSuperventana);
	this.ocultar();
	return this;
 },
 
 insertar:function(elem){
  this.divSuperventana.insert(elem);
	return this;
 },
 
 //no se redefine.
 ocultar:function(){
  this.divSuperventana.hide();
	return this;
 },
 
 mostrar:function(){
  this.divSuperventana.show();
	return this;
 },
 
 cerrar:function(){
  this.ocultar();
	return this;
 }
});

//--------------------------------------------fin Clase Superventana--------------------------------------------

//--------------------------------------------Clase VentanaAsociada---------------------------------------------
var VentanaAsociada=Class.create(Superventana, {
 initialize:function($super){
  $super();
	var auxi;
	this.insertar(auxi=new Element('div'));
	this.idDivContenido=auxi.identify();
 }
});

//-------------------------------------------fin Clase VentanaAsociada------------------------------------------

//*********************************************fin Clases abstractas********************************************

//-----------------------------------------------Clase Nota-----------------------------------------------------
// Los elementos mostrarán una nota si se llama explícitamente al objeto nota ó si se pone el contenido de la
// nota en el atributo title y el atributo class="notaNI".
var Nota=Class.create(VentanaAsociada, {
 initialize:function($super){
	this.elemsConNota=[];
	this.elemsConManejadorEvento=[];
  $super();
	this.divSuperventana.addClassName('nota');
 },
 
 alCargarDoc:function($super,e){
  $super().cargarelemsConNota();
 },
 
 cargarelemsConNota:function(){
  var arrayAuxi=$$('.notaNI');
	for(var i=0;i<arrayAuxi.length;i++){
   this.elemsConNota.push({idElem:arrayAuxi[i].identify(),titulo:arrayAuxi[i].title});
   arrayAuxi[i].title="";
	}
	this.elemsConNota.each(function(elem){
	 $(elem.idElem).observe('mouseover', function(event){
	  for(var i=0;i<nota.elemsConNota.length;i++){
		 if(nota.elemsConNota[i].idElem==this.id){
		  nota.mostrar(this,nota.elemsConNota[i].titulo);
		  break;
		 }
		}
   });
	});
	return this;
 },
 
 //mostrar(elemento del cual mostramos una nota, 'mensaje', desplazamiento x, desplazamiento y)
 mostrar:function($super,elem,mensaje){
  var elemManejado=false;
  for(var i=0;i<this.elemsConManejadorEvento.length;i++){
	 if(this.elemsConManejadorEvento[i]==elem.id){
	  elemManejado=true;
		break;
	 }
  }
	if(!elemManejado){
	 this.elemsConManejadorEvento.push(elem.identify());
	 $(elem).observe('mouseout', function(event){nota.cerrar();});
	}
  var desplaX=-100,desplaY=null;
  if(arguments.length==5){
   desplaX+=arguments[3];
	 desplaY+=arguments[4];
  }
  $(this.idDivContenido).update(mensaje);
	desplaY=this.divSuperventana.getDimensions().height+20;
  var pos=$(elem).cumulativeOffset();
	if(pos[0]+desplaX<0) desplaX=10;
  this.divSuperventana.setStyle({left:(pos[0]+desplaX)+"px", top:(pos[1]-desplaY)+"px"});
  $super();
 }
});

//-------------------------------------------fin Clase Nota-----------------------------------------------------

//----------------------------------------Clase MenuDesplegable-------------------------------------------------
var MenuDesplegable=Class.create(VentanaAsociada, {
 initialize:function($super){
  $super();
	this.divSuperventana.addClassName('menudesplegable');
  this.idTemporizador=null;
  this.intervalo=1000;
  this.divSuperventana.onmouseover=function(){menuDesp.limpiarTemporizador();};
  this.divSuperventana.onmouseout=function(){menuDesp.idTemporizador=setTimeout("menuDesp.cerrar()", menuDesp.intervalo);};
 },
 
 //mostrar(elemento del cual mostramos un menú desplegable, 'contenido')
 mostrar:function($super,elem,contenido){
  this.limpiarTemporizador();
	if(arguments.length==5) $super(elem,contenido,arguments[3],arguments[4]);
  else $super(elem,contenido);
  elem.onmouseout=function(){menuDesp.idTemporizador=setTimeout("menuDesp.cerrar()", menuDesp.intervalo);};
 },
 
 cerrar:function($super){
  $super();
  this.idTemporizador=null;
 },
 
 limpiarTemporizador:function(){
  if(this.idTemporizador!=null){
	 clearTimeout(this.idTemporizador);
	 this.idTemporizador=null;
	}
 }
});

//---------------------------------------fin Clase MenuDesplegable----------------------------------------------

//--------------------------------------------Clase Mensaje-----------------------------------------------------
//Tipos mensajes------------------------------------------------------------------------------------------------
// 0 => error
// 1 => bien
// 2 => espera
// 3 => ninguno
// 4 => otros
//--------------------------------------------------------------------------------------------------------------
var Mensaje=Class.create(Superventana, {
 initialize:function($super){
  this.enDoc=false;					 //variable de control:true si mensaje esta cargado en el documento y false si al contrario
	this.contMensaje="";
  $super();
	this.divSuperventana.addClassName('mensaje');
	this.clasesIcono=['icoerror','icobien','icoespera','iconinguno','icootros'];
  this.tipoMensaje=0;
	this.insertar(new Element('div',{className:'cierrev'}).observe('click',function(){mensaje.cerrar();}));
  this.insertar(new Element('div',{className:'iconov'})).insertar(new Element('div',{className:'contenidov'})).ocultar();
  new Draggable(this.divSuperventana);
 },
 
 alCargarDoc:function($super,e){
  $super().enDoc=true;
	if(this.contMensaje!="") this.mostrar(this.contMensaje,this.tipoMensaje);
 },
 
 //mostrar('contenido', tipo de mensaje [0 por defecto])
 //contenido puede ser: cadena con contenido ó id/referencia de elemento del cual coger contenido.
 mostrar:function(){
  var contenido=arguments[0];
	if(!this.enDoc){
	 this.contMensaje=contenido;
	 if(arguments.length==2) this.tipoMensaje=arguments[1];
	 return;
	}
	if($(contenido)!=null) contenido=$(contenido).innerHTML;
	//Un bug de prototype con IE8
  try{
   $(this.idDivSuperventana).select('div.contenidov')[0].update(contenido);
   $(this.idDivSuperventana).select('div.iconov')[0].removeClassName(this.clasesIcono[this.tipoMensaje]);
  }
  catch(e){
   alert(contenido+"\n(Aviso: si usa Internet Explorer 8 pase a Vista de compatibilidad.)");
	 return;
  }
  if(arguments.length==2) this.tipoMensaje=arguments[1];
  else this.tipoMensaje=0;
	$(this.idDivSuperventana).select('div.iconov')[0].addClassName(this.clasesIcono[this.tipoMensaje]);
  centrarElem(this.idDivSuperventana);
  Effect.Appear(this.idDivSuperventana);
 },
 
 cerrar:function(){
  Effect.Fade(this.idDivSuperventana);
 }
});

//----------------------------------------fin Clase Mensaje-----------------------------------------------------

var mensaje=new Mensaje(), nota=new Nota(), menuDesp=new MenuDesplegable();

//##############################################################################################################
//
//                                          fin Clases ventana
//
//##############################################################################################################

//--------------------------------------------Clase Acordeon----------------------------------------------------
//Acordeon(clase CSS aplicada a los paneles[por defecto 'accordion_toggle'])
var Acordeon=Class.create({
 initialize:function(){
  this.clasePaneles=arguments.length==0?'accordion_toggle':arguments[0];		//Esta linea asegura compatibilidad con versiones anteriores
	this.panelesExcluidos=new Hash();
  this.panelesActivos=new Hash();
  this.efecto='Blind';
  this.duracionEfecto=0.3;
	this.setNuevoAcordeon(this.clasePaneles);
	d.observe("dom:loaded", this.inicializarAcordeones);
 },
 
 //Llamar a este método antes de que se cargue el documento
 //setNuevoAcordeon('clase paneles',Array[posiciónexcluido1,posiciónexcluido2,...])
 setNuevoAcordeon:function(nuevaClase){
  this.panelesActivos.set(nuevaClase, null);
	if(arguments.length==2) this.panelesExcluidos.set(nuevaClase, arguments[1]);
 },
 
 inicializarAcordeones:function(){
  var clasesAcordeones=acordeon.panelesActivos.keys(), paneles, excluidos;
	for(var j=0;j<clasesAcordeones.length;j++){
	 paneles=$$('.'+clasesAcordeones[j]);
	 excluidos=acordeon.panelesExcluidos.get(clasesAcordeones[j]);
	 for(var i=0;i<paneles.length;i++){
	  if(excluidos!=undefined && excluidos.indexOf(i)!=-1) continue;
    if(Object.isElement(paneles[i].next())) paneles[i].observe('click', acordeon.alternarPanel).next().hide();
   }
	}
 },
 
 alternarPanel:function(evento){
  var panelEvento=evento.element(), claseActual=acordeon.claseAcordeonPanel(panelEvento), clasesAcordeones=acordeon.panelesActivos.keys(), panelActivo;
	
  if(panelActivo=acordeon.panelesActivos.get(claseActual)){
   if(panelActivo==panelEvento){
    new Effect.toggle(panelActivo.next(),acordeon.efecto,{duration:acordeon.duracionEfecto});
		panelActivo=null;
   }
   else{
    new Effect.toggle(panelActivo.next(),acordeon.efecto,{
		 duration:acordeon.duracionEfecto,
		 afterFinish:function(obj){
      var panelActivo=acordeon.panelesActivos.get(acordeon.claseAcordeonPanel(obj.element.previous()));
      new Effect.toggle(panelActivo.next(),acordeon.efecto,{duration:acordeon.duracionEfecto});
     }
		});
    panelActivo=panelEvento;
   }
	 acordeon.panelesActivos.set(claseActual, panelActivo);
   return;
  }
  new Effect.toggle(panelEvento.next(),acordeon.efecto,{duration:acordeon.duracionEfecto});
  acordeon.panelesActivos.set(claseActual, panelEvento);
 },
 
 //panel:	panel en realidad es la cabecera del panel
 //devuelve la clase del acordeón al que pertenece el panel
 claseAcordeonPanel:function(panel){
  var claseActual=null, clasesAcordeones=acordeon.panelesActivos.keys();
	for(var j=0;j<clasesAcordeones.length;j++){
	 if($(panel).hasClassName(clasesAcordeones[j])){
	  claseActual=clasesAcordeones[j];
		break;
	 }
	}
	return claseActual;
 }
 
});

//--------------------------------------------fin Clase Acordeon------------------------------------------------

var acordeon=new Acordeon();

//-----------------------------------------------Clase Browser--------------------------------------------------
function Browser(){
  var ua=navigator.userAgent,i=null,s="";

  this.isIE=false;
  this.isNS=false;
	this.isFF=false;
	this.isOP=false;
	this.isSF=false;
  this.version=null;
	this.motor="MSIE";
  
  if((i=ua.indexOf(s="MSIE"))!=-1) this.isIE=true;
  else if((i=ua.indexOf(s="Netscape6/"))!=-1) this.isNS=true;
	else if((i=ua.indexOf(s="Firefox"))!=-1) this.isFF=true;
	else if((i=ua.indexOf(s="Opera"))!=-1) this.isOP=true;
	else if((i=ua.indexOf(s="Safari"))!=-1) this.isSF=true;
  this.version=parseFloat(ua.substr(i+s.length));
	if((i=ua.indexOf("Gecko"))!=-1) this.motor="Gecko";
}

var browser=new Browser();

//----------------------------------------------fin Clase Browser-----------------------------------------------