
/* Limita el numero de caracteres de un TextArea */
function maximaLongitudTextArea(texto,maxlong) {
	var tecla, in_value, out_value;

	if (texto.value.length > maxlong) {
		in_value = texto.value;
		out_value = in_value.substring(0,maxlong);
		texto.value = out_value;
		return false;
	}
	return true;
}





/****

	Muestra o oculta un span o div con ID.

	Solo para IE. Respeta el texto. Tablas completas.

*****/



function showHideData(id) {

	if (document.all[id].style.display == '') 

		document.all[id].style.display = 'none'

	else

	   document.all[id].style.display = '';

}



function showData(id) {

	document.getElementById(id).style.display = '';

}



function hideData(id) {

	document.getElementById(id).style.display = 'none';

}

/** No es genérica **/

function hideAllData() {

	hideData('sm1_1');

	hideData('sm2_1');

	hideData('sm4_1');

}



function confirma(mensaje,destino) {

	if ( confirm(mensaje) ) { 

		self.location =destino;

	}

}



function colorea(obj,color) {

	if (document.all || document.getElementById)

		obj.style.backgroundColor=color;

	else if (document.layers)

		obj.bgColor=color

}





function openWinClean(fichero,nombre,tam) {

	ventana=window.open(fichero,nombre,tam+",toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=yes");	

}

function openWinScroll(fichero,nombre,tam) {

	ventana=window.open(fichero,nombre,tam+",toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars,resizable=no,copyhistory=yes");	

}



function openWin(fichero,nombre,tam) {

	ventana=window.open(fichero,nombre,tam+",toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,copyhistory=yes");	

}



function irA(destino) {

	self.location =destino;

}



/**  MATEMATICAs **/
function fmtPrice(price) 
{
   string = "" + price;
   number = string.length - string.indexOf('.');
   if (string.indexOf('.') == -1)
      return string + '.00';
   if (number == 1)
      return string + '00';
   if (number == 2)
      return string + '0';
   if (number > 3)
      return string.substring(0,string.length-number+3);
return string;
}

function calculaIVA(campoBI, campoIVA, campoTotal) {
	var baseImp = document.all[campoBI].value;
	var iva = baseImp * 0.16;
	document.all[campoIVA].value=fmtPrice(iva);
	document.all[campoTotal].value=fmtPrice(eval(iva)+eval(baseImp));
}

function calculaTotal(campoBI, campoIVA, campoTotal) {
	var baseImp = document.all[campoBI].value;
	var iva = document.all[campoIVA].value;
	document.all[campoTotal].value=fmtPrice(eval(iva)+eval(baseImp));
}

/** 
	Valida un float, para Euro. 5 (pasa a 5.00), 5.5 (pasa a 5.50), 5.55 
	5.429999999 (pasa a 5.43)
**/
function cent(amount) {
// returns the amount in the .99 format
    amount -= 0;
    return (amount == Math.floor(amount)) ? amount + '.00' : (  (amount*10 == Math.floor(amount*10)) ? amount + '0' : amount);
}

function _esEuro(campo) {
	var validos = "0123456789.";
	var cadena = new String(campo.value);	
	var cadenaFinal = new String('');	
	var posPunto=0;
	var numPuntos=0;

	//Cambiamos comas por puntos
	for (var i=0; i < cadena.length; i++) {
		if (cadena.charAt (i)==',') {
			cadenaFinal+='.'
		}
		else
			cadenaFinal+=cadena.charAt (i)
	}
	cadena=cadenaFinal;

	//Comprobamos que no hay caracteres distintos de 0-9 y .
	for (var i=0; i < cadena.length; i++) {
		carac = cadena.charAt (i);
		posic  = validos.indexOf (carac);
		if (posic<0) {
			alert ('Caracter no válido');
			campo.value='';
			return 0;
		}
	}	

	//Comprobamos el numero de puntos y la posicion del mismo
	for (var i=0; i < cadena.length; i++) {
		carac = cadena.charAt (i);
		if (carac=='.') {
			numPuntos++;
			posPunto=i;
		}
	}	

	// Comprobamos que no haya más de un punto
	if (numPuntos>1) {
		alert ('Demasiados puntos, sólo uno.');
		campo.value='';
		return 0;
	}
	
	// Parche para cuando ponen solo un .
	if (numPuntos==1 && cadena.length==1) {
		cadena='0'+cadena;
	}	
	//Reiniciamos valor del campo
	campo.value='';
	//Arreglamos el float
	cadena=cent(cadena);
	//Cortamos a dos cecimales
	cadenaFinal='';
	punto=false;
	llevo=0;
	//Cambiamos comas por puntos
	cadenaFinal='';

	cadena = cadena + '';
	var i = cadena.indexOf('.');
	var t = cadena.substring(0, i + 3);
	campo.value=(t);
}



function calculaIVA(campoBI, campoIVA, campoTotal) {
	var baseImp = document.all[campoBI].value;
	var iva = baseImp * 0.16;
	document.all[campoIVA].value=fmtPrice(iva);
	document.all[campoTotal].value=fmtPrice(eval(iva)+eval(baseImp));
}

function calculaTotal(campoBI, campoIVA, campoTotal) {
	var baseImp = document.all[campoBI].value;
	var iva = document.all[campoIVA].value;
	document.all[campoTotal].value=fmtPrice(eval(iva)+eval(baseImp));
}




function esEuro(campo) {

	caracter=campo.value.charAt(campo.value.length-1);

	pat = /[\*,\+,\(,\),\?,\\,\$,\[,\],\^]/;
	valor = campo.value;
	largo = valor.length;
	crtr = true;
	
	if (valor.charAt(0)=="-") {
		esNegativo=true;
	}
	
	if(isNaN(caracter) || pat.test(caracter) == true) {
		if (pat.test(caracter)==true){
			caracter = "\\" + caracter;
		}
		carcter = new RegExp(caracter,"g");
		valor = valor.replace(carcter,"");
		donde.value = valor;
		crtr = false;
	} else	{
		var nums = new Array();
		cont = 0;
		for(m=0;m<largo;m++){
			if(valor.charAt(m) == "." || valor.charAt(m) == " " || valor.charAt(m) == ","){
				continue;
			} else {
				nums[cont] = valor.charAt(m);
				cont++;
			}
		}
	}

	ctdd = 1; nmrs = 3;

	var cad1="",cad2="",cad3="",tres=0;
	if(largo > nmrs && crtr == true) {
		for (k=nums.length-ctdd;k>=0;k--){
			cad1 = nums[k];
			cad2 = cad1 + cad2;
			tres++;
			if((tres%3) == 0){
				if(k!=0){
					cad2 = "." + cad2;
				}
			}
		}
		cad2 = cad2.replace("-.","-");
		campo.value = cad2;
		
	}
	//campo.focus();
}


/******************************************/

function _suma(destino, campos) {

	var largo = campos.length;
	var valor=0;
	var i;
	var cadena;

	for(i = 0; i < largo; i++)   {

		var cadena = campos[i].value;

		// SI es numero
		if (isNumeric(cadena)) {
			var varaux = "";  
			varaux = cadena;
			valor += parseFloat(varaux);

		// NO es numero
		} else {
			valor += 0;
		}
	}
	destino.value= valor;
}



function suma(destino, campos) {

	var largo = campos.length;
	var valor=0;
	var i;
	var cadena;

	for(i = 0; i < largo; i++)   {
		var cadena = new String(campos[i].value);

		// SI es numero
		if (isNumeric(cadena)) {
			var varaux = "";  
			for(n=0; n<cadena.length; n++) {
				if ((cadena.charAt(n)!=".") && (cadena.charAt(n)!=",")) {
					 varaux += cadena.charAt(n);
				}
			}
			valor += parseInt(varaux);

		// NO es numero
		} else {
			if (cadena.charAt(0)=="-") {
				var varaux = "";  
				for(n=1; n<cadena.length; n++) {
					if ((cadena.charAt(n)!=".") && (cadena.charAt(n)!=",")) {
						 varaux += cadena.charAt(n);
					}
				}
				if (isNumeric(varaux)) {
					valor -= parseInt(varaux);
				}
				else {
					valor += 0;
				}
				
			}
			else {
				valor += 0;
			}
		}
	}
	destino.value= valor;
}


function isNumeric(cadena) {

	var caracteresvalidos = "0123456789.,";
	var varaux;
	var resultado = true;

	if (cadena.length == 0) return false;

	//miramos caracteres de la cadena
	for (i = 0; i < cadena.length && resultado == true; i++) {
		varaux = cadena.charAt(i);
		if (caracteresvalidos.indexOf(varaux) == -1) {
			resultado = false;
		}
	}
	return resultado;
}

function isEntero(cadena) {

	var caracteresvalidos = "0123456789";
	var varaux;
	var resultado = true;

	if (cadena.length == 0) return false;

	//miramos caracteres de la cadena
	for (i = 0; i < cadena.length && resultado == true; i++) {
		varaux = cadena.charAt(i);
		if (caracteresvalidos.indexOf(varaux) == -1) {
			resultado = false;
		}
	}
	return resultado;
}

function comp_edad(campo) {

	if (isEntero(campo.value)) {
		return true;
	}
	else  {
		alert ('Edad no válida (sólo números)');
		campo.value='';
		return false;
	}

}


// Función para dar formatear números
// Pensada para llamar al onblur de un campo de texto pasándole this como parámetro
function formatNumero(obj){
  var valor = obj.value;
  if (valor != ""){
    var valid = "0123456789,.";    
    var allValid = true;  
    for (n=0;  n<valor.length; n++){
      for (m=0;  m<valid.length; m++){
      	if (valor.charAt(n) == valid.charAt(m)){ 
      	  break;
      	}
      }	
      if (m == valid.length){ 
      	allValid = false; 
      	break;
      }      
    }    
    if (!allValid){
      return;
    }
// si no hay puntos ni comas  
    if ((valor.indexOf(".")==-1) && (valor.indexOf(",")==-1)){
      obj.value = processIntPart(valor);
      return;
    }
// si hay punto pero no hay coma
    if ((valor.indexOf(".")!=-1) && (valor.indexOf(",")==-1)){
      pos = valor.lastIndexOf(".");
      intPart = processIntPart(valor.substring(0,pos));
      decPart = processDecPart(valor.substring(pos+1,valor.length));
      obj.value = intPart+ ","+ decPart; 
      return;
    }  
// si hay coma pero no hay punto
    if ((valor.indexOf(".")==-1) && (valor.indexOf(",")!=-1)){
      pos = valor.lastIndexOf(",");
      intPart = processIntPart(valor.substring(0,pos));
      decPart = processDecPart(valor.substring(pos+1,valor.length));
      obj.value = intPart+ ","+ decPart; 
      return;
    }
// si hay puntos y comas
    if ((valor.indexOf(".")!=-1) && (valor.indexOf(",")!=-1)){
      posComa = valor.lastIndexOf(",");
      posPunt = valor.lastIndexOf(".");
      pos = posComa>posPunt? posComa:posPunt;
      intPart = processIntPart(valor.substring(0,pos));
      decPart = processDecPart(valor.substring(pos+1,valor.length));
      obj.value = intPart+ ","+ decPart; 
      return;
    }         
  }
}

// Función para formatear números decimales
// Pone una coma y un cero en caso de que no los haya, 
// Pensada para llamar al onblur de un campo de texto pasándole this como parámetro
function formatNumeroDecimal(obj){
  var valor = obj.value;
  if (valor != ""){
    var valid = "0123456789,.";    
    var allValid = true;  
    for (n=0;  n<valor.length; n++){
      for (m=0;  m<valid.length; m++){
      	if (valor.charAt(n) == valid.charAt(m)){ break; }
      }	
      if (m == valid.length){ allValid = false; break; }      
    }    
    if (!allValid){
      alert("Por favor introduzca un valor numérico");
      obj.focus();
      return;
    }
// si no hay puntos ni comas  
    if ((valor.indexOf(".")==-1) && (valor.indexOf(",")==-1)){
      obj.value = processIntPart(valor) + ",0";
      return;
    }
// si hay punto pero no hay coma
    if ((valor.indexOf(".")!=-1) && (valor.indexOf(",")==-1)){
      pos = valor.lastIndexOf(".");
      intPart = processIntPart(valor.substring(0,pos));
      decPart = processDecPart(valor.substring(pos+1,valor.length));
      obj.value = intPart+ ","+ decPart; 
      return;
    }  
// si hay coma pero no hay punto
    if ((valor.indexOf(".")==-1) && (valor.indexOf(",")!=-1)){
      pos = valor.lastIndexOf(",");
      intPart = processIntPart(valor.substring(0,pos));
      decPart = processDecPart(valor.substring(pos+1,valor.length));
      obj.value = intPart+ ","+ decPart; 
      return;
    }
// si hay puntos y comas
    if ((valor.indexOf(".")!=-1) && (valor.indexOf(",")!=-1)){
      posComa = valor.lastIndexOf(",");
      posPunt = valor.lastIndexOf(".");
      pos = posComa>posPunt? posComa:posPunt;
      intPart = processIntPart(valor.substring(0,pos));
      decPart = processDecPart(valor.substring(pos+1,valor.length));
      obj.value = intPart+ ","+ decPart; 
      return;
    }         
  }
}

// Función para formatear fechas
// Compureba que la fecha tenga separadores. Si no los tiene, los pone. Si hay 7 caracteres, se añade un 0 al dia
// Pensada para llamar al onblur de un campo de texto pasándole this como parámetro
function formatearFecha(obj){
  var cad = obj.value;
  var separador = "/";
  var format = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
  var match = cad.match(format);
  if (match == null){
    cad = toDigits(cad);
    if ((cad.length != 6) && (cad.length != 7) && (cad.length != 8)){ return; }
    if (cad.length == 8){
      var dia = cad.charAt(0) + cad.charAt(1);
      var mes = cad.charAt(2) + cad.charAt(3);
      var anyo = cad.charAt(4) + cad.charAt(5) + cad.charAt(6) + cad.charAt(7);
      obj.value = dia + separador + mes + separador + anyo;
    }
    if (cad.length == 7){
      var mes = cad.charAt(1) + cad.charAt(2);
      var numMes = 0;
      if (cad.charAt(1) == "0"){
        numMes = parseInt(cad.charAt(2));
      } else {
        numMes = parseInt(mes);
      } 
      if (numMes <= 12){
        var dia = "0" + cad.charAt(0);
        var anyo = cad.charAt(3) + cad.charAt(4) + cad.charAt(5) + cad.charAt(6);
        obj.value = dia + separador + mes + separador + anyo;
      } else {
        var dia = cad.charAt(0) + cad.charAt(1);
        var numDia = parseInt(dia)
        if (numDia <= 31){
          var mes = "0" + cad.charAt(2);
          var anyo = cad.charAt(3) + cad.charAt(4) + cad.charAt(5) + cad.charAt(6);
          obj.value = dia + separador + mes + separador + anyo;
        }
      }
    }
    if (cad.length == 6){
      var dia = "0" + cad.charAt(0);
      var mes = "0" + cad.charAt(1);
      var anyo = cad.charAt(2) + cad.charAt(3) + cad.charAt(4) + cad.charAt(5);
      obj.value = dia + separador + mes + separador + anyo;
    }
  }
}

// Funciones privadas
function toDigits(str){
  cad = "";
  for (n=0; n<str.length; n++){
    car = str.charAt(n);
    if (!isNaN(parseInt(car))){	
      cad += car;	
    } 	
  }
  return cad;	
}

function processIntPart(valor){
  if (valor==""){
    valor = "0";
  }
// quitar los puntos y comas
  valor = trimPointers(valor);  
// quitar los ceros a la izquierda
  valor = trimLeftZeroes(valor);
// añadir los puntos dando la vuelta  
  var valor1 = "";
  var cont = 0;
  for(n=valor.length; n>=0; n--){
    valor1 += valor.charAt(n);
    if (cont == 3){
      cont = 0;
      valor1 += ".";
    }
    cont ++;
  }
// dar la vuelta
  valor1 = reverse(valor1);
// si hay un punto inicial lo quitamos  
  if (valor1.charAt(0)=="."){
    valor1 = valor1.substring(1,valor1.length);
  }  
  return valor1;  
}

function processDecPart(valor){
  if (valor==""){
    valor = "0";
  }
  valor = trimPointers(valor);
  valor = trimRightZeroes(valor);
  return valor;
}

function reverse(valor){
  var valor1 = "";
  for(n=valor.length; n>=0; n--){
    valor1 += valor.charAt(n);
  }
  return valor1;
}

function trimPointers(valor){
  var valor1 = "";  
  for(n=0; n<valor.length; n++){
    if ((valor.charAt(n)!=".") && (valor.charAt(n)!=",")){
      valor1 += valor.charAt(n);
    }
  }
  return valor1;
}

function trimLeftZeroes(valor){
  var valor1 = "";
  var trimer = true;
  for(n=0; n<valor.length; n++){
    if (!((valor.charAt(n)=="0") && (trimer))){
      valor1 += valor.charAt(n);
      trimer = false;
    }
  }
  if (valor1==""){
    valor1 = "0";
  }
  return valor1;
}

function trimRightZeroes(valor){
  var valor1 = "";
  var trimer = true;
  for(n=valor.length-1; n>=0; n--){
    if (!((valor.charAt(n)=="0") && (trimer))){
      valor1 += valor.charAt(n);
      trimer = false;
    }
  }
  valor1 = reverse(valor1);
  if (valor1==""){
    valor1 = "0";
  }  
  return valor1;
}