var whitespace = " \t\n\r"; 

/*********************************************************************************/
/*********************************************************************************/
/********************FUNCIONES DEL "TWOLIST"**************************************/
/*********************************************************************************/
/*********************************************************************************/

function MoveItem(nameForm, nameComboIni, nameComboFin)
/*
	Descripción:
		
		Pasa un item del ComboIni al ComboFin
*/
{
	combo1 = eval('document.' + nameForm + '.' + nameComboIni)
	combo2 = eval('document.' + nameForm + '.' + nameComboFin)
	for(var i = combo1.options.length-1; i > -1; i--){
		if(combo1.options(i).selected){
			combo2.add(new Option(combo1.options(i).text,combo1.options(i).value));
			combo1.remove(i);
	   }   
	}
}

function depurarCombos(nameForm, nameComboIni, nameComboFin)
/*
	Descripción:
	
		Aconsejable usarlo en el ONLOAD() de una página, sirve para eliminar
		los items de la izda. que estén en la dcha.	
*/
{
	var combo1 = eval('document.' + nameForm + '.' + nameComboIni)
	var combo2 = eval('document.' + nameForm + '.' + nameComboFin)

	for(var i = combo1.options.length-1; i > -1; i--){
		for(var j = combo2.options.length-1; j > -1; j--){
			if(combo2.options(j).value == combo1.options(i).value)
			{
				combo1.remove(i);
				break;
			}
		}
	}
}

function AddToPost(nameForm, nameCombo)
/*
	Descripción:
		
		Añade los items elegidos al POST o GET del formulario. Poniendo todos como seleccionados.
		Debe usarse antes del evento SUBMIT.	
*/
{
	combo1 = eval('document.' + nameForm + '.' + nameCombo);
	for(var i = combo1.options.length-1; i > -1; i--)
	{
		combo1.options(i).selected = true;
	}
}



/*para verificar si tiene instalado el Acrobat reader*/

function TieneAcrobat()
{
var acrobat=new Object();
// Set some base values
acrobat.installed=false;
acrobat.version='0.0';
if (navigator.plugins && navigator.plugins.length)
     {
     for (x=0; x<navigator.plugins.length; x++)
          {
          if (navigator.plugins[x].description.indexOf('Adobe Acrobat') != -1)
               {
               acrobat.version=parseFloat(navigator.plugins[x].description.split('Version ')[1]);
               if (acrobat.version.toString().length == 1) acrobat.version+='.0';
               acrobat.installed=true;
               break;
               }
          }
     }
else if (window.ActiveXObject)
     {
     for (x=2; x<10; x++)
          {
          try
               {
               oAcro=eval("new ActiveXObject('PDF.PdfCtrl."+x+"');");
               if (oAcro)
                    {
                    acrobat.installed=true;
                    acrobat.version=x+'.0';
                    }
               }
          catch(e) {}
          }
          try
               {
               oAcro4=new ActiveXObject('PDF.PdfCtrl.1');
               if (oAcro4)
               {
               acrobat.installed=true;
               acrobat.version='4.0';
               }
          }
          catch(e) {}
     }
acrobat.ver4=(acrobat.installed && parseInt(acrobat.version) >= 4) ? true:false;
acrobat.ver5=(acrobat.installed && parseInt(acrobat.version) >= 5) ? true:false;
acrobat.ver6=(acrobat.installed && parseInt(acrobat.version) >= 6) ? true:false;
acrobat.ver7=(acrobat.installed && parseInt(acrobat.version) >= 7) ? true:false;
acrobat.ver8=(acrobat.installed && parseInt(acrobat.version) >= 8) ? true:false;
acrobat.ver9=(acrobat.installed && parseInt(acrobat.version) >= 9) ? true:false;
	return (acrobat.installed);
}

/**********Funciones Comunes**********/


/*Funcion que sirve para ocultar/mostraR un TR*/
function Mostrar_OcultarTR(obj)
{
	if (obj.style.display=='')
	{
		obj.style.display='None';
	}
	else
	{
		obj.style.display='';
	}
}

// crea un array con un largo de "n" y un valor por campo de 0
function MakeArray(n){
	this.length = n;
	for (var i = 1; i <= n; i++) {
		this[i] = 0
	}
	return this
}

/**********
Funciones de trabajo con decimales				
Accion: onBlur									
Parametros: 										
	obj: objeto en el que devolvera el numero	
	numero: el valor numerico a procesar			
**********/

//elimina los decimales de un numero
function NoDecimales(obj,numero)
{
	var snumero;
	var punto;
	var snumerodec;

	snumero = new String();
	snumero = numero.toString();
	snumero = snumero.replace(',','.');
	punto = snumero.indexOf('.');
	if (punto > 0){
		snumerodec = snumero.substr(0, punto);
	} else {
		snumerodec = snumero;
	}
	obj.value=snumerodec;
}

function nDecimales(obj,numero,decimales)
{
	var snumero;
	var punto;
	var snumerodec;

	snumero = new String();
	snumero = numero.toString();
	snumero = snumero.replace('.',',');
	punto = snumero.indexOf(',');
	if (punto > 0){
		snumerodec = snumero.substr(0, punto + decimales+1);
	} else {
		snumerodec = snumero;
	}
	obj.value=snumerodec;
}

//REDONDEAMOS UN NUMERO CON LOS DECIMALES QUE DESEEMOS
function RedondeaN(obj,num,numerodecimales) { 

	var n_mas_uno = 10;
	var n = 10;
	
	for (var j=1;j<numerodecimales;j++) {
		n = n * 10; //
	}
	for (var j=1;j<numerodecimales+1;j++) {
		n_mas_uno = n_mas_uno * 10 ;
	}	
	
	if (isNaN(num)){ 
		obj.value=0;
	} else { 
	    num = parseInt(num * n_mas_uno) 
	    var resto=(num % 10);
	    if (resto<5){ 
	    	num=num/n_mas_uno;
	    } else { 
	    	num=(num+10)/n_mas_uno 
	    } 
	    //Quito el n_mas_uno decimal 
	    num=parseInt(num*n);
	    num=num/n; 
	    obj.value=num;
	} 
}


/**********Funciones de Desplegables**********/

/*
obtiene el valor de un select
Parametro:
	obj: Desplegable a obtener el valor
*/
function GetValue_Select(obj)
{
	for (var n=0;n<obj.options.length;n++)
	{
		if ( obj.options[n].selected == true ) {
			if ( (""+obj.options[n].className) != "") {
				ValueSelect = ""+obj.options[n].className;
			} else {
				ValueSelect = ""+obj.options[n].value;
			}
			break;
		}	
	}
}

/* 
Nos desactiva todos los valores de un desplegable
Parametro:
	obj: Desplegable a obtener el valor
*/
function DesactivaSeleccion(obj)
{
	var num_options = obj.options.length;
	for (var n=0;n<num_options;n++) {
		if (obj.options[n].selected == true) {
			obj.options[n].selected = false;
		}
	}	
}

/*
Trabaja conjuntamente con la funcion ASP ArrayCombo.
Maneja la dependencia de dos desplegables. 
Se usa en el Onchange del desplegable parent.
Se le pasa como Parametros:
	parent			=	el Valor del Padre en que esta seleccionado
	child			=	el Objeto "SELECT" que sera el hijo
	selected_child	=	el valor seleciconado del hijo en la recarga
*/
function CambiarDependiente(parent,child,selected_child)
{
	var campos_child = child.options;
	if (""+SelectArray.length!=0)
	{
		if (parent=="" && selected_child!="")
		{
			for (i=0; i<SelectArray.length;i++) {if (SelectArray[i][1]==selected_child) parent=SelectArray[i][0];}
		}
		for (var q=child.options.length;q>=1;q--)
		{
			child.options[q]=null;
		}
		if (parent!=0)
		{
			for (i=0; i<SelectArray.length;i++)
			{
				if (SelectArray[i][0]==parent)
				{
					newElem = new Option(SelectArray[i][2],SelectArray[i][1]);
					child[child.options.length]=newElem;
					if (SelectArray[i][1]==selected_child)
					{
						child.options[child.options.length-1].selected = true;
					}
				}
			}
		}
	}
	else
	{
		newElem = new Option("No existen Elementos...","0");
		child[0]=newElem;	
	}
} 

/**********Funciones de Validacion**********/
/*Recoje toda la ruta del fichero, y devuelve el nombre del mismo*/
function GetNombreFichero(strRutaFichero)
{
	var cont,posi;
	 cont=0;
	 posi=0;

	 while (strRutaFichero.indexOf("\\")!=-1 )
	 {   
	  cont=cont+1;
	  strRutaFichero=strRutaFichero.substr(posi+1,strRutaFichero.length-posi);
	  posi=strRutaFichero.indexOf("\\");
	 }
	 
	 return(strRutaFichero);
}

/*Valida que el nombre del fichero no tengo caracteres extraños.
no se permiten ficheros con caracteres en su nombre con acentos ni con &
*/
function ValidaNombreFichero(obj)
{
 var fich;
 fich=GetNombreFichero(obj.value);
 /*ahora busco que el fichero no tenga acentos ni &*/
	if (fich.indexOf('á')!=-1 || fich.indexOf('é')!=-1 || fich.indexOf('í')!=-1 || fich.indexOf('ó')!=-1 || fich.indexOf('ú')!=-1 || fich.indexOf('Á')!=-1 || fich.indexOf('É')!=-1 || fich.indexOf('Í')!=-1 || fich.indexOf('Ó')!=-1 || fich.indexOf('Ú')!=-1 || fich.indexOf('&')!=-1)
	{
		return(false);
	}
	else
	{
		return(true);
	}
}

/*Valida un Campo de fichero para saber si es correcta la extension del mismo, si es permitida o no.
 -TamanoNombre Me dice la cantidad de Caracteres maximo que puede tener el fichero
 -TiposFichero me trae los tipos de ficheros con este formato ASP|INC...
 -Permite si es false me restringe los TiposFichero, si es true solo deben ser de esos tipos
*/
function ValidaFichero(obj,TamanoNombre,TiposFichero,Permite)
{
 //Primero valido el tamano del nombre
 var fich,posi,cont,J,result;
 fich=GetNombreFichero(obj.value);    

 if (fich.length>TamanoNombre)
 {
  return(false);
 }

 //ahora valido que sea un fichero permitido
 
 var TipoActual=obj.value.substr(obj.value.length - 3);
 var TiposFichero=TiposFichero.split("|");
 if (!Permite)
 {  
  result=true;
  for (J = 0; J < TiposFichero.length; J++)
  {
   if (TiposFichero[J].toUpperCase()==TipoActual.toUpperCase())/*EL fichero ingresado esta entre los restringidos*/
   {
    result=false;
   }
  }
 }
 if (Permite)
 {
  result=false;
  for (J = 0; J < TiposFichero.length; J++)
  {
   if (TiposFichero[J].toUpperCase()==TipoActual.toUpperCase()) /*en fichero esta dentro de los permitidos*/
   {
    result=true;
   }
  }
 } 
 return(result);
}

//verifica si un valor es diferente de blanco y se existe el campo
function EsValido(obj){
	if ( (""+obj.value != "") && (""+obj != "null") && (""+obj != "undefined") )
	{
		return true;
	} else {
		return false;
	}
}
//verifica que el valor del campo es fecha
//verifica que el valor del campo es fecha
function verificaFecha(field){
var checkstr = "0123456789";
var DateField = field;
var Datevalue = "";
var DateTemp = "";
var seperator = "/";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;
   err = 0;
   DateValue = DateField.value;
   /* Delete all chars except 0..9 */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
   /* Validation of month*/
   month = DateValue.substr(2,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   /* Validation of day*/
   day = DateValue.substr(0,2);
   if (day < 1) {
     err = 22;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }
   /* if 00 ist entered, no error, deleting the entry */
   if ((day == 0) && (month == 0) && (year == 00)) {
      err = 0; day = ""; month = ""; year = ""; seperator = "";
   }
   /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   if (err == 0) {
      DateField.value = day + seperator + month + seperator + year;
	  return(true);
   }
   /* Error-message if err != 0 */
   else {
      /*alert("Date is incorrect!");
      DateField.select();
	  DateField.focus();*/
	  return(false);
   }
}

//Evalua el valor mail y verifica que sea un e-mail
function evaluaMail(mail){
   /*Se verifica que contenga arroba*/
   if(mail.indexOf("@")!=-1)
   {
      var mailsplit = mail.split("@");
      if (mailsplit[0]!= "" && mailsplit[1]!="")
      {
         var desparroba = mailsplit[1].split(".");
		 if (mailsplit[1].indexOf(".")==-1)
		 {
		 	return false;
		 }
         if(desparroba[1]!="")
         {
            return true;
         }
         else
         {
            return false;
         }  
      }
      else
      {
         return false;
      }
   }
   else
   {
      return false;
   }
   return true;
}

//Evalua el valor mail y verifica que sea un e-mail o un string de mails separado con coma 
function EvaluaMailString(mail)
{
	var incorrecto = "";
	var repeaterr = 0;
	if (mail.indexOf(",")!=-1) mail = mail.split(",");
	if (typeof(mail)=="object")
	{
		for (var i=0; i<mail.length; i++)
		{
			if (!evaluaMail(mail[i])) {if (repeaterr!=0) incorrecto += ", ";incorrecto += mail[i];}
			repeaterr++;
		}
	}
	else
	{
			if (!evaluaMail(mail)) incorrecto = mail;
	}
	if (incorrecto!="") 
	{
	 	return (incorrecto);
	}
	else
	{
		return (1);
	}
}

/*Validacion de URL*/
function ValidoURL(Objeto)
{
	if (Objeto.value.substring(0,7).toLowerCase() != 'http://' )
	{
		if (Objeto.value.substring(0,4).toLowerCase() == 'http' )
		{	
			Objeto.value=Objeto.value.substring(0,4) + '://' + Objeto.value.substring(6,Objeto.value.length);
		}
		else
		{
			Objeto.value='http://' + Objeto.value;
		}
	}
}

//verifica que el nif en el objeto "obj" sea correcto
function CompruebaNIF(obj)
{
	var correcto=true;
	var nif=quitablancos(""+obj.value);
	var nif_numero= nif.substring( 0,nif.length-1 ) ;
	var letra=nif.substring( nif.length-1,nif.length );
	var letras;
	if (nif.length < 3)
	{
		correcto=false;
	}
	else
	{
			letras=letraNIF(nif_numero);
			if (letras != letra.toUpperCase())
			{
				correcto=false;
			}
	}
	return correcto;
}

//le pasas el numero y la funcion te devuelve la letra
function letraNIF( numNIF )
{
	numNIF = Number(numNIF);
	if	( isNaN(numNIF) )
		return "";
	else	{
		var tabla = "TRWAGMYFPDXBNJZSQVHLCKEF";
		return tabla.charAt( parseInt(numNIF) % 23 );
	}
}

//verifica que el nif en el objeto "obj" sea correcto
function CompruebaCIF (obj)
{
	var correcto = true;
	var cif=quitablancos(""+obj);
	//alert (cif);
	Ncarnet = cif;
	if ((Ncarnet.length < 3) || (Ncarnet.length > 9))
	{
		correcto = false
	}
	else
	{
		var carnet = Ncarnet
		var auxiliar = ""
		while (carnet.indexOf(" ",0)!= -1)
		{
		auxiliar = carnet.substring(0,carnet.indexOf(" ",0))
		carnet = auxiliar + carnet.substring(carnet.indexOf("",0)+1,carnet.length)
		}
		while (carnet.indexOf("-",0)!= -1)
		{
		auxiliar = carnet.substring(0,carnet.indexOf("-",0))
		carnet = auxiliar + carnet.substring(carnet.indexOf("-",0)+1,carnet.length)
		}
		while (carnet.indexOf("/",0)!= -1)
		{
		auxiliar = carnet.substring(0,carnet.indexOf("/",0))
		carnet = auxiliar + carnet.substring(carnet.indexOf("/",0)+1,carnet.length)
		}
		if (carnet.substring(0,1).toUpperCase() != "A" && carnet.substring(0,1).toUpperCase() != "B" &&
carnet.substring(0,1).toUpperCase() != "C" && carnet.substring(0,1).toUpperCase() != "D" &&
carnet.substring(0,1).toUpperCase() != "E" && carnet.substring(0,1).toUpperCase() != "F" &&
carnet.substring(0,1).toUpperCase() != "G" && carnet.substring(0,1).toUpperCase() != "H" &&
carnet.substring(0,1).toUpperCase() != "S" && carnet.substring(0,1).toUpperCase() != "P" &&
carnet.substring(0,1).toUpperCase() != "Q")
		{
			correcto = false
		}

		var ri = 0;
		var rp = 0;
		var wi = 0;
		if (isNaN(carnet.substring(carnet.length-1,carnet.length)))
		{
			if(isNaN(carnet.substring(1,carnet.length-1)))
			{
			correcto = false
			}
			else
			{
				var letra = carnet.substring(carnet.length-1,carnet.length).toUpperCase()
				carnet = carnet.substring(1,carnet.length-1)
				for (i=0;i+carnet.length<9;i++)
					carnet = "0" + carnet.substring(0,carnet.length)
				rp = parseInt(carnet.substring(3,4)) + parseInt(carnet.substring(5,6)) + parseInt(carnet.substring(7,8))
				wi = parseInt(carnet.substring(2,3)) * 2
				if (wi < 10)
					ri = ri + (wi%10)
				else
					ri = ri + (parseInt(wi/10)) + (wi%10)
				wi = parseInt(carnet.substring(4,5)) * 2
				if (wi < 10)
					ri = ri + (wi%10)
				else
					ri = ri + (parseInt(wi/10)) + (wi%10)
				wi = parseInt(carnet.substring(6,7)) * 2
				if (wi < 10)
					ri = ri + (wi%10)
				else
					ri = ri + (parseInt(wi/10)) + (wi%10)
				wi = parseInt(carnet.substring(8,carnet.length)) * 2
				if (wi < 10)
					ri = ri + (wi%10)
				else
					ri = ri + (parseInt(wi/10)) + (wi%10)
				rp = (rp + ri)%10
				rp = 10 - rp
				switch(rp)
				{
				case 1:
				if ("A" != letra)
				{
					correcto = false
				}
				case 2:
				if ("B" != letra)
				{
					correcto = false
				}
				case 3:
				if ("C" != letra)
				{
					correcto = false
				}
				case 4:
				if ("D" != letra)
				{
					correcto = false
				}
				case 5:
				if ("E" != letra)
				{
					correcto = false
				}
				case 6:
				if ("F" != letra)
				{
					correcto = false
				}	
				case 7:
				if ("G" != letra)
				{
					correcto = false
				}
				case 8:
				if ("H" != letra)
				{
					correcto = false
				}
				case 9:
				if ("I" != letra)
				{
					correcto = false
				}
				case 0:
				if ("J" != letra)
				{
					correcto = false
				}
			}
		}
	}
	else
    {
		if(isNaN(carnet.substring(1,carnet.length)))
		{
			correcto = false
		}
		else
		{
		carnet = carnet.substring(1,carnet.length)
		for (i=0;i+carnet.length<9;i++)
			carnet = "0" + carnet.substring(0,carnet.length)
		rp = parseInt(carnet.substring(2,3)) + parseInt(carnet.substring(4,5)) + parseInt(carnet.substring(6,7))
		wi = parseInt(carnet.substring(1,2)) * 2
		if (wi < 10)
			ri = ri + (wi%10)
		else
			ri = ri + (parseInt(wi/10)) + (wi%10)
		wi = parseInt(carnet.substring(3,4)) * 2
		if (wi < 10)
			ri = ri + (wi%10)
		else
			ri = ri + (parseInt(wi/10)) + (wi%10)
		wi = parseInt(carnet.substring(5,6)) * 2
		if (wi < 10)
			ri = ri + (wi%10)
		else
			ri = ri + (parseInt(wi/10)) + (wi%10)
		wi = parseInt(carnet.substring(7,8)) * 2
		if (wi < 10)
			ri = ri + (wi%10)
		else
			ri = ri + (parseInt(wi/10)) + (wi%10)
		rp = (rp + ri)%10
		if (rp==0) rp=10
		rp = 10 - rp
		if (parseInt(carnet.substring(8,carnet.length)) != rp)
		{
			correcto = false
		}
	}
	}
	}
	return(correcto);
}

//Funciones para validar un CCC (Numero de cuenta) 

function obtenerDigito(valor){
  valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
  control = 0;
  for (i=0; i<=9; i++)
    control += parseInt(valor.charAt(i)) * valores[i];
  control = 11 - (control % 11);
  if (control == 11) control = 0;
  else if (control == 10) control = 1;
  return control;
}


function validarCuenta(f,entidad,oficina,dc,numero) {
  if (entidad == ""  || oficina == "" || dc == "" || numero == "") {  
	return false;
  } else {
    if (entidad.length != 4 || oficina.length != 4 || dc.length != 2 || numero.length != 10) {
	  return false;
    } else {
        if (!(obtenerDigito("00" + entidad + oficina) == parseInt(dc.charAt(0))) || !(obtenerDigito(numero) == parseInt(dc.charAt(1)))) {
		  return false;
	    } else {
		  return true;
		}
      }
  	}	
}
// Fin funciones validacion CCC 

//Verifica que un valor sea mayor que uno dado
function EsMayorQue(numero,ValorComparacion) {
	numero = parseFloat(numero);
	ValorComparacion = parseFloat(ValorComparacion);
	if ( numero > ValorComparacion ) {
		return true;
	} else {
		return false;
	}
}

/**********Funciones de Control de Escritura**********/

// Comprueba en el evento onkeypress que se están introduciendo dígitos correctos
// COMPROBACIONES: Sólo digitos, signo y sólo comas
function solonumeros(obj,permitirNegativos){
	
	var valor = ""+obj.value;	// Valor anterior al nuevo dígito introducido
   	var longitud = valor.length;	// Nº de dígitos existentes antes 
	
	// SIGNO
	if (window.event.keyCode == 45) {// Comprobamos si el usuario ha introducido el símbolo de menor
		if (longitud!=0) {
			window.event.keyCode=0;	// Si existe ya algún dígito no permitimos cambiar signo
		}
		else if (permitirNegativos==false) {
			window.event.keyCode=0;	// Si no se permitir introducir négativos.
		}
	}
	
	// Comprobamos que sea dígito
	if ((window.event.keyCode<48 || window.event.keyCode>57) && (window.event.keyCode!=45)) {
		// NO ES DÍGITO
		if(window.event.keyCode==44 || window.event.keyCode==46) {
			if ((obj.value.indexOf(",")!=-1) || longitud == 0)  {
				window.event.keyCode=0; // Sólo permitimos un simbolo decimal
			}
			else {
				window.event.keyCode = 44; // Forzamos a la coma
			}
		}
		else {
			window.event.keyCode = 0;	// Es letra
		}
	}

}		
//--- funcion que metida en evento onkeypress de una caja de texto no te dejara meter valores alfabeticos
//--- solo numeros positivos sin decimales
function solonumerospositivos(obj){
   if(window.event.keyCode<48 || window.event.keyCode>57)
   {
      if(window.event.keyCode==44 || window.event.keyCode==46)
      {
         if(window.event.keyCode==46 || window.event.keyCode==44) //Símbolo del punto o de la coma
         {
            //window.event.keyCode=44; //Símbolo de la coma
			window.event.keyCode=0;
         }
         
         if(cuentacomas(obj)>=1)
         {
            window.event.keyCode=0;
         }
      }
      else
      {
         window.event.keyCode=0;
      }
   } 
}

//--- funcion que metida en el evento onkeypress de una caja de texto solo dejara meter numeros, excepto en la primera
//--- posicion que dejara meter el signo negativo
function solonumerosYNegativos(obj){
	
	var valor = ""+obj.value;
   	var longitud = valor.length;

	if (obj.value.charAt(0)==".") {
		obj.value = "0" + valor;
	}
	
	if (window.event.keyCode == 46 || window.event.keyCode == 44) {
		if (obj.value.indexOf(".")!=-1) {
			window.event.keyCode=0;
		}
	}
   
   if ( (longitud == 0 && window.event.keyCode == 46) == true ) {
			window.event.keyCode=0;	
   } else {
   	   if ( (longitud == 0 && window.event.keyCode == 45) == true ) {
	   	
		//alert ("Bien");
	   
	   } else {
		   if(window.event.keyCode<48 || window.event.keyCode>57)
		   {
		      if(window.event.keyCode==44 || window.event.keyCode==46)
		      {
		         if(window.event.keyCode==46) //Símbolo del punto
		         {
		            window.event.keyCode=44; //Símbolo de la coma
		         }
		         
		         if(cuentacomas(obj)>=1)
		         {
		            window.event.keyCode=0;
		         }
		      }
		      else
		      {
		         window.event.keyCode=0;
		      }
		   } 
	   }
	}
}	
/*
permite la escritura de numeros con guiones y espacios (valores no numericos)
establece un estandar, asi si se inicia la divicion con espacios solo se podran usar espacios
*/	
function sNum(obj){
	var valor = ""+obj.value;
	//45= "-"
	//32= " "
	if (window.event.keyCode == 45 || window.event.keyCode == 32 || window.event.keyCode == 46) {
		if (valor.indexOf(" ")!=-1) window.event.keyCode=32;
		if (valor.indexOf("-")!=-1) window.event.keyCode=45;
		if (valor.indexOf(".")!=-1) window.event.keyCode=46;
	}
	else if(window.event.keyCode==47) window.event.keyCode=47; 
	else if(window.event.keyCode<48 || window.event.keyCode>57) window.event.keyCode=0; 

}
function sEntero(){
	if(window.event.keyCode<48 || window.event.keyCode>57) window.event.keyCode=0; 
}

/**********Funciones de Formularios**********/

/*
Envia por post a un destino especificado los parametros de qstring
Parametros:
	formulario = objeto de formulario que va a ser enviado
	url_accion = accion del formulario que se va a enviar, si esta en blanco se envia a la que tiene el formulario definida
	qstring = parametros que se le agrgan al formulario al iniciar la accion el formato es:
			"PARAMETRO1|VALOR1|PARAMETRO2|VALOR2..."
			- PARAMETRO1 Y PARAMETRO2 = NOMBRE DEL CAMPO A ENVIAR Y A RECIBIR (REQUEST("PARAMETRO1") Y REQUEST("PARAMETRO2"))
			- VALOR1 Y VALOR1 = VALOR DEL CAMPO A ENVIAR Y A RECIBIR
*/
function EnviarPost(formulario,url_accion,qstring) {

	var dat="";
	//alert(""+formulario);
	var args=EnviarPost.arguments;
	var destino="";
	var codificacion=0;
	if (args.length>=4) 
	{
		destino=args[3];
	}
	if (args.length>=5) 
	{
		codificacion=args[4];
	}
	if (""+formulario!="[object]") 
	{
		var forma = document.createElement("FORM");
		forma.method ="POST";
		forma.name =formulario;		
		document.body.insertBefore(forma);
	}
	else
	{
		var forma = formulario;
	}
	if (url_accion!="") forma.action=url_accion;
	if (destino!="") forma.target =destino;
	
	switch (codificacion)
	{
		case 1 :
			forma.encoding="application/x-www-form-urlencoded";
		case 2 :
			forma.encoding="multipart/form-data";
		case 3 :
			forma.encoding="text/plain";
	}
	if (qstring!="")
	{
		var qstring=qstring.split("|");
		for (J = 0; J < qstring.length-1; J++)
		{
			val=Math.floor(J/2);
			if (val==(J/2))
			{
				var campo = document.createElement("<INPUT TYPE='HIDDEN' NAME='" + qstring[J] + "' ID='" + qstring[J] + "' VALUE='" + qstring[J+1] + "'>");
				forma.insertBefore(campo);
			}
		}
	}
	forma.submit();
}
//copia el valor de un objeto a otro (incluye combo)
function SetValue(objorigen,objdestino){

	if (EsValido(objorigen.options[objorigen.selectedIndex].id)) {
		objdestino.value = objorigen.options[objorigen.selectedIndex].id;
	} else {
		objdestino.value = objorigen.value;
	}	
	//alert(objorigen.options[objorigen.selectedIndex].id);		
}
/**********Funciones de Fecha**********/

//Compara si obj2 es mayor que obj1 si es cierto devuelve true si es falso devuelve false y si msg tiene valor, muestra un alert con el texto de msg en caso de false
function comprueba_fecha(obj1,obj2,msg) {
   if(""+obj1!='undefined' && ""+obj2!='undefined') {
      var fecha1=obj1.value;
      var fecha2=obj2.value;
	  if(fecha2!="" && fecha1!="") {
		  fecha1 = fecha1.split("/");
		  fecha2 = fecha2.split("/");
	 
		  var fech1 = fecha1[2] + fecha1[1] + fecha1[0];
		  var fech2 = fecha2[2] + fecha2[1] + fecha2[0];
	 
		  if(fech2 > fech1) {
			 return(true);
		  }
		  else {
			if (msg!="") alert(msg);
			 return(false);
		  }
		}
		else{
			 return(true);
		}
   }
   else{
	 return(true);
   }
}


//Funcion que pone un cero delante de otro numero, util para que en los formateos de fecha, los dias o los meses tengan dos digitos

function fechatonum(fech) {// cambia el formato de fecha de dd/mm/yyyy a yyyymmdd
	fech = fech.split ("/");
	anno = fech[2];
	mes = fech[1];
	dia = fech[0];
	return  (anno + mes + dia );
}

function fechaadd(fech,x) {// aumenta el valor de la fecha un numero de meses x
	anno = new Number(fech.slice (0,4));
	mes = new Number(fech.slice (4,6));
	dia = new Number(fech.slice (6,8));
	x = new Number (x)
	mes =mes + x;
	if (mes > 12 ) {
		mab=(mes/12);
		mab = new Number(mab)
		mab=Math.floor(mab)
		anno= anno +mab;
		mes=mes - (12 * mab);
		if (mes==0) {
			anno=anno-1
			mes=12
		}
	}
	if (mes < 10) {
	mes="0"+mes
	}else{
	mes=""+mes;
	}
	if (dia < 10) {
	dia="0"+dia
	}else{
	dia=""+dia;
	}
	return  (anno + mes + dia );//alert
}

function cutfecha(fech) {// cambia el formato de fecha de dd/mm/yyyy a yyyy/mm/dd
	fech = fech.split ("/");
	anno = fech[2];
	mes = fech[1];
	dia = fech[0];
	mes = new Number(mes);
	anno = new Number(anno);
	dia = new Number(dia);
	return  (anno +"/"+ mes +"/"+ dia );
}

/**********Funciones de Tratado de Numeros**********/

function SetCero(valor){
	var valornew = "";
	valor = ""+valor;
	if (valor.length == 1) {
		valornew = "0"+valor;
	} else {
		valornew = valor;
	}
	return valornew;
}

function EsCero(numero) {
	var wnumero = quitablancos(""+numero);
	if ( numero == "0") {
		return true;
	} else {
		return false;
	}
} 

function isNum(inputVal) {	
// Retorna True si la cadena contiene sólo números positivos
	inputStr = "" + inputVal;			
	return (!isNaN(inputStr))
}

// Introduce los puntos de miles en una cadena pasada como parámetro
function puntosMiles(cadena) { 
	
		//Por si nos llega un numero negativo
		var bEsnNegativo = false;
		
		if ( isNaN(cadena) == false ) {
			var cadena_number = parseFloat(cadena)
			if (cadena_number < 0) {
				cadena_number = Math.abs(cadena_number); 
				bEsnNegativo = true;
			} else {
				cadena_number = cadena_number;
			}
		}
		
		cadena = ""+cadena_number;
		
        var largo = cadena.length; 
        var grupos = new Array(), ind=0; 
        var res =""; 
        largo -=3; 
        while ( largo>0 ) { 
                grupos[ind] = cadena.substr(largo, 3); 
                largo -=3; 
                ind++; 
        } 
        grupos[ind] = cadena.substr(0, largo+3); 
        while ( ind>0 ) { 
				res += grupos[ind]+"."; 
                ind--; 
        } 
        res+=grupos[0]; 
        //alert (res) 
		
		if ( bEsnNegativo == true ) {
			res = "-"+res;
		}		
        return res; 
} 

// Formatear correctamente un número en el evento onblur 
function formatearNumeroOut(obj,numeroDecimales) {
	
	var strNumero;
	var punto;
	var strNumerodec;
	var comienzo;
	
	strNumero = new String();
	strNumero = obj.value.toString();
	
	if ( strNumero == "" ) { strNumero = "0" }
	
	strNumero = strNumero.replace('.',','); // Si tiene coma, la convertimos en punto
	punto = strNumero.indexOf(',');
	
	// Comprobamos si es negativo o positivo para contar el carácter de - a la hora de poner puntos en los miles
	if (strNumero.charAt(0)=="-"){
		comienzo = 1;	// El primer caracter es el simbolo de -
		strNumerodec = "-";
	} else {
		comienzo = 0;
		strNumerodec = "";
	}
	
	if (numeroDecimales==0 && strNumero.indexOf(',')!=-1) { // No queremos decimales
		punto = -1;
		strNumero = strNumero.substr(comienzo,strNumero.indexOf(',')); // Quitamos todo lo q haya a la derecha de la coma
	}
	
	if (punto > 0){
		strNumerodec = strNumerodec + puntosMiles(strNumero.substr(comienzo,punto-comienzo)) + strNumero.substr(punto,numeroDecimales+1);
	}
	else if (punto==0) {
		strNumerodec = "0" + strNumero.toString();
	} 
	else {
		strNumerodec = puntosMiles(strNumero);
	}
	obj.value=strNumerodec;
}

// Formatear correctamente un número en el evento focus
function formatearNumeroIn(obj) {
	var strNumero;
	var punto;
	var strNumerodec;

	strNumero = new String();
	strNumero = obj.value.toString();
	while (strNumero.indexOf(".")!="-1") {
		strNumero = strNumero.replace('.','');
	}
	obj.value = strNumero;
}

// Devuelve un número formateado para operar con él
function desformatear(numeroFormateado) {
	var strNumero;
	var punto;
	var strNumerodec;
	strNumero = new String();
	strNumero = numeroFormateado.toString();
	while (strNumero.indexOf(".")!="-1") {
		strNumero = strNumero.replace('.','');//Quitamos todos los puntos de los millares
	}
	return strNumero.replace(',','.');
}


/**********Funciones de Tratado de Strings**********/

//elimina un caracter "s" dentro de un string "bag"
function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";
    
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}
//elimina caracteres en blanco dentro de una cadena
function quitablancos ( cadena )
{
	return stripCharsInBag (cadena, whitespace)
}



//cuenta el numero de comas en el valor de un objeto
function cuentacomas(obj){
   var contador=0;
   for(var i=0;i<obj.value.length;i++)
   {
      if(obj.value.charAt(i)==',')
      {
         contador++;
      }
   }
   return contador;
}
/**********Funciones de Calculo**********/

//Resta los dos valores que le mandamos y deja el resultado en el objeto indicado
function CalculaDifFormateados(value1,value2,objdestino,decimales)
{
	valor1 = desformatear(value1);
	valor2 = desformatear(value2);
	
	if ( (""+valor1) == "0") { valor1 = "" ;}
	if ( (""+valor2) == "0") { valor2 = "" ;}

	var Diferencia = 0 ;
	
	if ( (EsValido(valor1)) && (EsValido(valor2)) ) {
		if (parseFloat(valor2) != 0) {
			if (isNaN(valor2) == true ) {
				var valor2_abs = 1; 
			} else {
				var valor2_abs = Math.abs(valor2); 
			}
			valor1 = parseFloat(valor1);
			valor2 = parseFloat(valor2);
			//alert (valor2_abs)
			Diferencia = ( (valor1 - valor2) / valor2_abs) * 100 ;
		} else {
			Diferencia = 0
		}
	}	
	//Diferencia = parseFloat(Diferencia);
	objdestino.value = Diferencia;
	formatearNumeroOut(objdestino,decimales);
}
// Resta los dos valores que le mandamos y deja el resultado en el objeto indicado
function CalculaDif(valor1,valor2,objdestino)
{
	if ( (""+valor1) == "0") { valor1 = "" ;}
	if ( (""+valor2) == "0") { valor2 = "" ;}
	
	var Diferencia = 0 ;
	if ( (EsValido(valor1)) && (EsValido(valor2)) ) {
		if (parseFloat(valor2) != 0) {
			if (isNaN(valor2) == true ) {
				var valor2_abs = 1; 
			} else {
				var valor2_abs = Math.abs(valor2); 
			}		
			Diferencia = ( (valor1 - valor2) / valor2_abs) * 100 ;
		} else {
			Diferencia = 0
		}
	}	
	Diferencia = ""+Diferencia;
	var pos_punto = Diferencia.indexOf('.');
	//alert (Diferencia+ "/" +pos_punto);
	if ( pos_punto != -1 ) {	
		var Diferencia_format = Diferencia.substring(0, pos_punto + 3);
		Diferencia = parseFloat(Diferencia_format);	
		//alert (Diferencia_format + "/" + Diferencia);
	}
	objdestino.value = Diferencia;
	//objdestino.blur();
}

/**********Funciones DHTL**********/

// Desactiva si esta activo y Activara si esta desactivo un objeto HTML
function ActivaDesactivaObj(formulario,cadenaobj,bactivar) {
	
	var arrayobj = cadenaobj.split(",");
	
	for ( var n=0;n<=arrayobj.length;n++) {
		var obj = eval(""+formulario+"."+arrayobj[n]);
		if ( bactivar == true )  {
			obj.disabled=false;	
		} else {
			obj.disabled=true;	
		}
		
	}		
}
//cambia el estado de invisible o no de un opjeto
function ShowHidden(wid,valor)
{
	var obj = document.getElementById(wid);
	//alert (wid);
	//obj.style.visibility="visible";
	if ( valor == "S" ) {
		obj.style.display = "inline";
	} else {
		obj.style.display = "none";
	}
}	

function contraetr(tr, obj){
   var miarray=tr.split(',');
   if(obj.nameProp=='mas.gif')
   {
      obj.src='../img/menos.gif'
  if(document.all)
  {
	  for(var i=0;i<miarray.length;i++)
	  {
        document.all('tr'+miarray[i]).style.display='inline';
      }
  }
  else
  {
      for(var i=0;i<miarray.length;i++)
  	  {
        document['tr'+miarray(i)].style.display='inline';
      }
  }
   }
   else
   {
      obj.src='../img/mas.gif';
  if(document.all)
  {
  for(var i=0;i<miarray.length;i++)
  {
        document.all('tr'+miarray[i]).style.display='none';
      }
  }
  else
  {
      for(var i=0;i<miarray.length;i++)
  {
        document['tr'+miarray(i)].style.display='none';
      }

  }
   }

}

function SelTodo(parent,child)
{
	if (parent.checked) 
	{
		if (child)
		{
			if (""+child.length!="undefined") for (var i=0; i<child.length; i++) child[i].checked = true;
			else child.checked = true;
		}
	}
	else 
	{
		if (child)
		{
			if (""+child.length!="undefined") for (var i=0; i<child.length; i++) child[i].checked = false;
			else child.checked = false;
		}
	}
}

