
/********************** FUNCIONES PARA PODER MOVER CAPAS **********************************/

function Browser() {

  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}

var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;

function dragStart(event, id) {

  var el;
  var x, y;

  // If an element id was given, find it. Otherwise use the element being
  // clicked on.

  if (id)
    dragObj.elNode = document.getElementById(id);
  else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target;

    // If this is a text node, use its parent element.

    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  }

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",	dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}

function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.

  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",	dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,	true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}

/********************************************************/

function menuFamilia(nameForm, idFamilia, action){

	var form = MM_findObj(nameForm);
	form.action=action;
	form.accion.value="mostrar";
	if(idFamilia==0)
		form.accion.value="buscar";
	form.id.value=idFamilia;
	form.submit();
}

//Vector de imagenes a modo de cache, para que el cambio de imagenes sea mas rapido
var vImagenes = new Array();

function DameImagen(idImagen){
	
	var resultado;
	if(vImagenes[idImagen]!=null){
		resultado = vImagenes[idImagen];
		alert("La imagen estaba cacheada");
		return resultado;
	}

	resultado = "MostrarImagen?idImagen="+idImagen;
	vImagenes[idImagen]=resultado;
	return resultado;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_nbGroup(event, grpName) { //v6.0
  var i,img,nbArr,args=MM_nbGroup.arguments;
  if (event == "init" && args.length > 2) {
    if ((img = MM_findObj(args[2])) != null && !img.MM_init) {
      img.MM_init = true; img.MM_up = args[3]; img.MM_dn = img.src;
      if ((nbArr = document[grpName]) == null) nbArr = document[grpName] = new Array();
      nbArr[nbArr.length] = img;
      for (i=4; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
        if (!img.MM_up) img.MM_up = img.src;
        img.src = img.MM_dn = args[i+1];
        nbArr[nbArr.length] = img;
    } }
  } else if (event == "over") {
    document.MM_nbOver = nbArr = new Array();
    for (i=1; i < args.length-1; i+=3) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = (img.MM_dn && args[i+2]) ? args[i+2] : ((args[i+1])? args[i+1] : img.MM_up);
      nbArr[nbArr.length] = img;
    }
  } else if (event == "out" ) {
    for (i=0; i < document.MM_nbOver.length; i++) {
      img = document.MM_nbOver[i]; img.src = (img.MM_dn) ? img.MM_dn : img.MM_up; }
  } else if (event == "down") {
    nbArr = document[grpName];
    if (nbArr)
      for (i=0; i < nbArr.length; i++) { img=nbArr[i]; img.src = img.MM_up; img.MM_dn = 0; }
    document[grpName] = nbArr = new Array();
    for (i=2; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = img.MM_dn = (args[i+1])? args[i+1] : img.MM_up;
      nbArr[nbArr.length] = img;
  } }
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function PNG_loader() { 
   for(var i=0; i<document.images.length; i++) { 
      var img = document.images[i]; 
      var imgName = img.src.toUpperCase(); 
      if (imgName.substring(imgName.length-3, imgName.length) == "PNG") { 
         var imgID = (img.id) ? "id='" + img.id + "' " : ""; 
         var imgClass = (img.className) ? "class='" + img.className + "' " : ""; 
         var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "; 
         var imgStyle = "display:inline-block;" + img.style.cssText; 
         if (img.align == "left") imgStyle += "float:left;"; 
         if (img.align == "right") imgStyle += "float:right;"; 
         if (img.parentElement.href) imgStyle += "cursor:hand;"; 
         var strNewHTML = "<span " + imgID + imgClass + imgTitle 
            + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";" 
            + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" 
            + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"; 
         img.outerHTML = strNewHTML; 
         i--; 
      } 
   } 
} 

//M?todo utilizado para comprobar si hay algun campo check activado de un formulario que pasamos como parametro
	
  function comprobarCheck(form){
      for(var i=0;i<form.elements.length;i++){
            if(form.elements[i].type=="checkbox" && form.elements[i].checked){
               return true;
             }
      }
	      
	  return false; // Indica que no hay ninguno seleccionado
  	
  }
  
  var color = "#FFBF00";
  
  //Devuelve false si hay alguno vacio y true si todos tiene valor distinto de "".
  function comprobarNoVacios(listaInputs){
    var inputsNames = listaInputs.split("|");
    var inputs = new Array(inputsNames.length);
	var variosBlancos = /[ ]+/g
    var valido = true;
    for (i=0; i < inputsNames.length; i++){
        inputs[i] = MM_findObj(inputsNames[i]);
        inputs[i].style.backgroundColor="white";
        valor = inputs[i].value.replace(variosBlancos,"");
        if(inputs[i].value==null || inputs[i].value=="" || valor==""){
        	inputs[i].style.backgroundColor=color;
        	valido=false;
        }
    }
    
    return valido;
  }

function comprobarEmail(email){
	var patron = /^[A-Z, a-z, 0-9,_,-]+\.{0,1}[A-Z, a-z, 0-9,_,-]+\@[A-Z, a-z, 0-9,_,-]+\.[A-Z, a-z, 0-9,_,-]+/;
	return patron.test(email);
}

function quitarColorObligatorios(form){  
      
      for(var i=0;i<form.elements.length;i++){
            if(form.elements[i].type=="text"){
               form.elements[i].style.backgroundColor="white";
             }
      }
}      
  

  //Funcion utilizada para dejar solo escribir numeros en el input
  function soloNumeros(){
		if (event.keyCode < 48 || event.keyCode > 57){ 
			//alert("Solo se permiten valores numericos");
			event.returnValue = false;  
		}
  }

//Funcion similar a la anterior pero acepta (.)
  function soloDecimales(){
		if (event.keyCode != 46 && (event.keyCode < 48 || event.keyCode > 57)){ 
			//alert("Solo se permiten valores numericos y decimales");
			event.returnValue = false;  
		}
  }
  
/***********************************************************************************************
*	Redondea Decimales:
*		Par?metros:
*			- iNumero: Le pasa el n?mero completo con todos los decimales
*     		- iNumDec: Es el n?mero de decimales que va a tener el n?mero final
*		Autor: Jose A. Jimenez
***********************************************************************************************/
function redondeoDecimales(iNumero,iNumDec) { 
	var importe = Math.pow(10,iNumDec) 
	return Math.round(iNumero*importe)/importe
}
  
  
var ie45,ns6,ns4,dom;
if (navigator.appName=="Microsoft Internet Explorer") {
  ie45=parseInt(navigator.appVersion)>=4;
} else if (navigator.appName=="Netscape") {
  ns6=parseInt(navigator.appVersion)>=5;
  ns4=parseInt(navigator.appVersion)<5;
}
dom=ie45 || ns6;

function showhide(id) {
  el = document.all ? document.all[id] : 
    dom ? document.getElementById(id) : 
    document.layers[id];
  els = dom ? el.style : el;
  if (dom){
    if (els.display == "none")
      els.display = "";
    else els.display = "none";
  } else if (ns4){
    if (els.display == "show")
      els.display = "hide";
    else els.display = "show";
  }
}

function show(id) {
  el = document.all ? document.all[id] :
    dom ? document.getElementById(id) :
    document.layers[id];
  els = dom ? el.style : el;
  if (dom){
      els.display = "";
  } else if (ns4){
      els.display = "show";
  }
}

function hide(id) {
  el = document.all ? document.all[id] :
    dom ? document.getElementById(id) :
    document.layers[id];
  els = dom ? el.style : el;
  if (dom){
     els.display = "none";
  } else if (ns4){
      els.display = "hide";
  }
}

function desclicar(objeto){
	if(objeto.checked)
		objeto.checked=false;
}


function getHTTPObject() {        
	try {                
		objetus = new ActiveXObject("Msxml2.XMLHTTP");        
	} catch (e) {
		try {                        
			objetus= new ActiveXObject("Microsoft.XMLHTTP");                
		} catch (E) {                        
			objetus= false;                
		}        
	}        
	if (!objetus && typeof XMLHttpRequest!='undefined') {                
		objetus = new XMLHttpRequest();        
	}        
	return objetus;
}

function votarMensaje(botonVotar, idMensaje){

	var http = getHTTPObject();
	//Especificamos la URL a hacer el pedido, usando el id ingresado en el form
	var destino = "ControlAccion";
	var params="accion=votar_msg&idMensaje="+idMensaje;
	http.open("POST", destino, true);
	http.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); //Importante para que funcione con POST
  
  	http.onreadystatechange = function() {

      //Mostrar los datos una vez obtenida la respuesta del servidor
      if (http.readyState == 4) {
      		var objVotos = MM_findObj("numVotos"+idMensaje);
      		var numVotos = objVotos.innerHTML;
      		numVotos++;
      		objVotos.innerHTML=numVotos;
      		botonVotar.onclick="";
      		botonVotar.onmouseover="";
      		botonVotar.onmouseout="";
      		botonVotar.className="votarOFF";
      		botonVotar.innerHTML="OK!!";
      }
  }

  http.send(params);

}


function incAccesosGaleria(idGaleria){
	var http = getHTTPObject();
	//Especificamos la URL a hacer el pedido, usando el id ingresado en el form
	var destino = "ControlAccion";
	var params="accion=acceso_galeria&idGaleria="+idGaleria;
	http.open("POST", destino, true);
	http.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); //Importante para que funcione con POST
  
  	http.onreadystatechange = function() {}

	http.send(params);

}


//Funcion utilizada para mostrar el cuadro de busqueda...
function buscarDatos(campo, tabla, campos, filtro){
	var div = MM_findObj('divBusqueda');
	show('divBusqueda');
	div.innerHTML="Cargando datos...";
	
	http = getHTTPObject();

  //Especificamos la URL a hacer el pedido, usando el id ingresado en el form
  var destino = 'BuscarResultados?campo='+campo+'&tabla='+tabla+'&campos='+campos+'&filtro='+filtro;
  http.open("GET", destino, true);

http.onreadystatechange = function() {
      //Mostrar los datos una vez obtenida la respuesta del servidor
      if (http.readyState == 4) {
         div.innerHTML = http.responseText;
      }  

 }

  http.send(null);
}

function toHtml(datos){
	
	var salto="\n";
	var espacio=" ";
	while(datos.indexOf(salto) != -1)
		datos = datos.replace(salto,"<br>");
	while(datos.indexOf(espacio) != -1)
		datos = datos.replace(espacio,"&nbsp;");
		
	return datos+"&nbsp;";
}
  
  
//Funciones para controlar los popUp
var pop = null    
var winCount = 0 
var winNameIni = "PGi2" 

function popUp(winURL, winFeatures, izquierda, arriba, ancho, alto){ 

  winName = winNameIni + winCount++; 
  closePopWin();           
    
  if(popUp.arguments.length > 2){
	  var left = (izquierda-ancho)/2;
	  var top = (arriba-alto)/2;
  	
  	winFeatures+=",left="+left+",top="+top;	
  }
  //Si indican el ancho y largo de la ventana tmb lo metemos
  if(popUp.arguments.length > 4){
  	winFeatures+=",width="+ancho+",height="+alto;

  }

  pop = window.open(winURL, winName, winFeatures); 
} 

function closePopWin(){     
  if (navigator.appName != "Microsoft Internet Explorer"  
      || parseInt(navigator.appVersion) >=4)  
    if(pop != null) if(!pop.closed) pop.close()  
} 

//Importante que los campos del formulario se llamen moneda y cambio
function FijarCambio(){

	var moneda = MM_findObj("moneda");
	var cambio = MM_findObj("cambio");
	if(moneda.value=="EUR"){
		cambio.value="1.0";
		cambio.readOnly=true;
	}else{
		cambio.value="";
		cambio.readOnly=false;
	}
	
}


/*----------------------------FUNCIONES PARA EL STRING TOKENIZER-------------------------------------------------*/

String.prototype.tokenize = tokenize;

function tokenize()
  {
     var input             = "";
     var separator         = " ";
     var trim              = "";
     var ignoreEmptyTokens = true;

     try {
       String(this.toLowerCase());
     }
     catch(e) {
       //window.alert("Tokenizer Usage: string myTokens[] = myString.tokenize(string separator, string trim, boolean ignoreEmptyTokens);");
       return;
     }

     if(typeof(this) != "undefined")
       {
          input = String(this);
       }

     if(typeof(tokenize.arguments[0]) != "undefined")
       {
          separator = String(tokenize.arguments[0]);
       }

     if(typeof(tokenize.arguments[1]) != "undefined")
       {
          trim = String(tokenize.arguments[1]);
       }

     if(typeof(tokenize.arguments[2]) != "undefined")
       {
          if(!tokenize.arguments[2])
            ignoreEmptyTokens = false;
       }

     var array = input.split(separator);

     if(trim)
       for(var i=0; i<array.length; i++)
         {
           while(array[i].slice(0, trim.length) == trim)
             array[i] = array[i].slice(trim.length);
           while(array[i].slice(array[i].length-trim.length) == trim)
             array[i] = array[i].slice(0, array[i].length-trim.length);
         }

     var token = new Array();
     if(ignoreEmptyTokens)
       {
          for(var i=0; i<array.length; i++)
            if(array[i] != "")
              token.push(array[i]);
       }
     else
       {
          token = array;
       }

     return token;
  }
  
  //Funci?n utilizada para devolver el elemento en la posicion n de una cadena token, hay que indicar el elemento a obtener
  //y el separador de los tokens
  function getTokenN(texto, pos, separador){
  	var trim = true;
	var ignoreEmptyTokens = false;
  	var salida = texto.tokenize(separador, trim, ignoreEmptyTokens);
  	var valor = salida[pos];
  	if(valor==null)
  		valor="";
  	return valor;
  }


/*----------------------------FIN DE FUNCIONES PARA EL STRING TOKENIZER-------------------------------------------------*/


/*---------------- FUNCIONES PARA EL RESIZE DE IMAGEN --------------------*/

	function ResizeImagen(imagen, maxAncho, maxAlto){
		var ancho = imagen.width;
		var alto = imagen.height;
		if(ancho > alto && ancho > maxAncho){
			//alert("Sobrepasa el ancho");
			var reduc = ancho/maxAncho; 
			imagen.width=maxAncho;
			imagen.height=alto/reduc;
		}//Comprobamos si el alto no est? por encima de lo permitido
		else if(alto > maxAlto){
			//alert("Sobrepasa el alto");
			imagen.height=maxAlto;
			var reduc = alto/maxAlto; 
			imagen.width=ancho/reduc;
		}//si no se pasa ni de ancho ni de alto lo dejamos con su tama?o original
	}	

	function ResizeAllImagenes(ancho){
      for(var i=0;i<document.images.length;i++){
      	var imagen = document.images[i];
      	ResizeImagen(imagen, ancho, ancho);
      }
      
      //Hacemos tambien el resize de objetos embeds
      for(var i=0;i<document.embeds.length;i++){
      	var embed = document.embeds[i];
		if(embed.width > 450)
			embed.width = 450;
      }
      
    }  
	
	//Copia las propiedasdes y el src de una imagen a otra.
	function CopiarImagen(origen, destino){
		destino.width=origen.width;
		destino.height=origen.height;
		//Por ultimo cambiamos la imagen
		destino.src = origen.src;
		
	}

	

/*-------------------- OBJETO PARA FORMATEAR UN NUMERO, CON DECIMALES Y POSIONES CE MILES ----------------*/
//Objeto oNumero
function oNumero(numero)
{
//Propiedades 
this.valor = numero || 0
this.dec = -1;
//M?todos 
this.formato = numFormat;
this.ponValor = ponValor;
//Definici?n de los m?todos 
function ponValor(cad)
{
if (cad =='-' || cad=='+') return
if (cad.length ==0) return
if (cad.indexOf(',') >=0)
    this.valor = parseFloat(cad);
else 
    this.valor = parseInt(cad);
} 
function numFormat(dec, miles)
{
var num = this.valor, signo=3, expr;
var cad = ""+this.valor;
var ceros = "", pos, pdec, i;
for (i=0; i < dec; i++)
ceros += '0';
pos = cad.indexOf(',')
if (pos < 0)
    cad = cad+","+ceros;
else
    {
    pdec = cad.length - pos -1;
    if (pdec <= dec)
        {
        for (i=0; i< (dec-pdec); i++)
            cad += '0';
        }
    else
        {
        num = num*Math.pow(10, dec);
        num = Math.round(num);
        num = num/Math.pow(10, dec);
        cad = new String(num);
        }
    }
pos = cad.indexOf(',')
if (pos < 0) pos = cad.lentgh
if (cad.substr(0,1)=='-' || cad.substr(0,1) == '+') 
       signo = 4;
if (miles && pos > signo)
    do{
        expr = /([+-]?\d)(\d{3}[\,\*]\d*)/
        cad.match(expr)
        cad=cad.replace(expr, RegExp.$1+'.'+RegExp.$2)
        }
while (cad.indexOf('*') > signo)
    if (dec<0) cad = cad.replace(/\,/*'')
        return cad;
}
}//Fin del objeto oNumero:

/*************** Función para evitar enviar formularios con Enter **************/
function stopRKey(evt) {
    var evt = (evt) ? evt : ((event) ? event : null);
    var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
    if ((evt.keyCode == 13) && (node.type=="text")) {return false;}
}


