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_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_findObj(n, d) { //v4.0
  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 && document.getElementById) x=document.getElementById(n); return x;
}
 
function ponCalendario(strDia,strMes,strAnyo,strFormulario)
{
	strDireccion = "/include/quermes/ASP/ctiCalendario.asp?";
	strDireccion +="txtFormulario=" + strFormulario;
	strDireccion +="&txtCampoDia=" + strDia;
	strDireccion +="&txtCampoMes=" + strMes;
	strDireccion +="&txtCampoAnyo=" + strAnyo;
	var AAA = window.open(strDireccion,"wndCalendario","titlebar=NO,menubar=0,resizable=0,width=300,height=140,scrollbars=NO,toolbar=0,status=0,visible=false");
	//var AAA = window.open(strDireccion,"wndCalendario","");
	
	

}

  function isValidPwd(n,m,f) 
  {
  if(document.forms[f].item(n).value != document.forms[f].item(m).value)
    return false;
  else
    return true;
  }

  function isValidNum(n,f) 
  {
    var cad,lon,z,ch;

    cad = document.forms[f].item(n).value;
    lon = cad.length;  
    for (z=0; z<lon; z++)
    {
      ch = cad.charAt(z)
      if((ch < "0" || "9" < ch) && ch != "-" && ch != "." && ch != ",")
        return false;
    }
    if(document.forms[f].item(n).title == "Money")  //SQL Server no admite ','
      document.forms[f].item(n).value = cad.replace(',','.');
    return true;
  }




  function compruebaMail(objeto) 
  {
    if(objeto.value)
    {
	    var cad;
	    var lon;
	    
	    cad = objeto.value;
	    lon = cad.length;  
	    arroba=0;
	    punto=0;
	    for(z=0;z<lon;z++)
	    {
	      ch = cad.charAt(z)
	      if(ch == '@')
	         arroba=1;   
	      if(ch == '.')   
	         punto=1;
	    }     
	    if(arroba==1 && punto==1)
	    {
	      return true;     
	    }
	    else
	    {
	      alert("Debe introducir una dirección E-Mail correcta.");
	      objeto.value="";
	      objeto.focus();    	
	      return false;     
	    }
    }
 }
 
 function isNif(n,f) 
 {    
    var lon;    
    var nif = document.forms[f].item(n).value;

		if(nif.length==9)
		{
			if( (isNaN(nif.charAt(8))) && !(isNaN(nif.substring(0,8))))
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			return false;			
		}    
 }


  function isValidBool(n,f) 
  {
    return true;
  }
  
  function FechaValida(lafecha) 
  {
  
    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; //obliga a poner el siglo

    var dateStr=lafecha;

    var matchArray = dateStr.match(datePat); // is the format ok?
    if(matchArray == null)
       return false;
    
    day = matchArray[1]; // parse date into variables
    month = matchArray[3];
    year = matchArray[4];

    var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
    if((month < 1 || month > 12) || (day < 1 || day > 31) ||
       ((month==4 || month==6 || month==9 || month==11) && day==31) ||
       ((month == 2) && (day>29 || (day==29 && !isleap))))
      return false;
    else
      return true; 
 }




function Valida()
{
  
  var n, tipo, k, val, cadena, dateVal, error = false;  
  var hayfallo = 0;
  cadena = new String();
  n = document.forms[0].length;  
  var vector = new Array(n);
  var mensaje = "";
  var dia = "";
  var mes = "";
  var anio = "";
  var fecha = "";
  var puesto = 0;
  var strTitulo;
    
  for(i=0; i<n ; i++)
  {
	
	error = false;
	
   	strTitulo = document.forms[0].item(i).title;   	
   	strTitulo = strTitulo.split("#")
  	
  	tipo = strTitulo[0];
  	clase = strTitulo[1];
  	//clase = document.forms[0].item(i).className;
  	cadena  = document.forms[0].item(i).value;		  	
  	
  	nombre = document.forms[0].item(i).name;
  	puesto = 0;

	if(clase != "" && tipo != "Fichero" && tipo != "Imagen")
	{

	
	
	// QUITAMOS LOS ESPACIOS EN BLANCO
   	iteraciones = cadena.length;	   	
   	for(k=0;k<=iteraciones;k++)
   	{
   		
   		if(cadena.charAt(0)==" ")
   		{   			   	
   			cadena = cadena.substring(1,cadena.length);	   			
   			k=0;
   			iteraciones  = cadena.length - 1;
   		}
   		
   		
   	}
   	iteraciones = cadena.length;
   	
   	for(k=0;k<=iteraciones;k++)
   	{
   		if(cadena.charAt(cadena.length-1)==" ")
   		{   		
   			cadena = cadena.substring(0,cadena.length-1);	   		
   			k=0;
   			iteraciones  = cadena.length - 1;
   		}
   	}
   	   	document.forms[0].item(i).value = cadena;
   	}

	
    if(document.forms[0].item(i).value != "" && clase != "" )    
    {
	  
      switch (tipo)
      {
              
	case "Mail":         

						if(isMail(i,0))
						{
							
						}
						else
						{
							mensaje = "Direccion Email no válida.";
							alert(mensaje);
							hayfallo = 1;			
							document.forms[0].item(i).value="";										
							document.forms[0].item(i).focus();
							return false;
						}




       		break;        

 
	case "Numero":         

						if(isValidNum(i,0))
						{
							
						}
						else
						{
							mensaje = "Número Incorrecto";
							alert(mensaje);
							hayfallo = 1;													
							document.forms[0].item(i).value="";										
							document.forms[0].item(i).focus();
							return false;
						}




       		break;               		
       		
	case "DNI":         

						if(isNif(i,0))
						{
							
						}
						else
						{
							mensaje = "DNI Incompleto. 8 cifras y una letra";
							alert(mensaje);
							hayfallo = 1;													
							document.forms[0].item(i).focus();
							return false;
						}




       		break;               		
        case "Fecha":         

						if(FechaValida(cadena ))
						{
							
						}
						else
						{
							mensaje = "Fecha Incorrecta.";
							alert(mensaje);
							hayfallo = 1;													
							document.forms[0].item(i).focus();
							return false;
						}




       		break;        
	  } // Fin Switch
    }
    else
    {		
		if(clase == "1")
		{	
			hayfallo = 1;			
			mensaje = "Campo Obligatorio Vacío"		
			alert(mensaje);
			document.forms[0].item(i).focus();
			return false;
		}			
    }
   
 }


  
  if(hayfallo == 1)
  {
	return(false);
  }
  else
  {
  	return(true);
  }

}










//******************************************************************************************
function esCantidad(txtCampo) 
  {
    var cad,lon,z,ch,contador;
	contador = 0;	
    cad = txtCampo.value;    
    lon = cad.length;  
    for (z=0; z<lon; z++)
    {
      ch = cad.charAt(z)
      if(ch == ",")
		contador++;
      
      if((ch < "0" || "9" < ch) && ch != "-" && ch != "." && ch != ",")
        return false;
        
      if(contador>1)
		return false  
    }
    if(txtCampo.title == "Money")  //SQL Server no admite ','
      txtCampo.value = cad.replace(',','.');
    return true;
  }
  
function esNumeroEntero(txtCampo) 
  {
    var cad,lon,z,ch,contador;
	contador = 0;	
    cad = txtCampo.value;    
    lon = cad.length;  
    for (z=0; z<lon; z++)
    {
      ch = cad.charAt(z)

      
      if((ch < "0" || "9" < ch))
      {
		alert("Debe introducir un número.");
		txtCampo.value = "";
		txtCampo.focus();      
        return false;
	  }       
        

    }

    return true;
  }

function esNumeroEnteroObligatorio(txtCampo) 
  {
    if(txtCampo.value!="")
    {    
		var cad,lon,z,ch,contador;
		contador = 0;	
		cad = txtCampo.value;    
		lon = cad.length;  
		for (z=0; z<lon; z++)
		{
		ch = cad.charAt(z)	      
		if((ch < "0" || "9" < ch))
		  {
			alert("Debe introducir un número.");
			txtCampo.value = "";
			txtCampo.focus();      
		    return false;
		  }       
		    

		}

		return true;
	}
	else
	{
		alert("Campo obligatorio vacío.")
		txtCampo.focus();
	}
  }
  
function formateaCantidad(txtCampo)
{
 var strCadena;
 var largo;
 var grupos = new Array(), ind=0;
 var strEntera ="";
 var strDecimal = ""; 
 var temp;
if (esCantidad(txtCampo))
{
	strCadena = txtCampo.value;

	if(strCadena != "")
	{

		temp = strCadena.split('.');
		while (temp.length > 1)
		{				
			strCadena = strCadena.replace('.','');			
			temp = strCadena.split('.');
		}
		
		while (strCadena.search(',') != -1)
		{	
			strCadena = strCadena.replace(',','.');
		}
		
		
		vVector = strCadena.split('.');
		
		// Comprobamos si habia introducido decimales.
		if(vVector.length > 1)
		{
		largo = vVector[0].length;
		strCadenaEntera = vVector[0];
		}
		else
		{
		largo =strCadena.length;
		strCadenaEntera = strCadena;	
		}
	
		// Ponemos los puntos a los miles.
		largo -=3;
		while ( largo>0 ) 
		{
			grupos[ind] = strCadenaEntera.substr(largo, 3);
			largo -=3;
			ind++;
		}
		grupos[ind] = strCadenaEntera.substr(0, largo+3);
		while ( ind>0 ) 
		{
			strEntera += grupos[ind]+".";
			ind--;
		}
		strEntera+=grupos[0];
	
	
		// Tratamiento de la parte decimal.
		if(vVector.length > 1)
		{
			
			if(vVector[1].length > 2)
			{
				strDecimal = vVector[1].substr(0,2);
			}
			else
				strDecimal = vVector[1]								
			
			if(strDecimal.length == 1)
					strDecimal +="0"
			
		}
		
		if(strDecimal != "")		
			strResultado = strEntera + "," + strDecimal;
		else
			strResultado = strEntera + ",00";		
	
		txtCampo.value = strResultado;

	}
	else
	{
		txtCampo.value = "";
	}
}
else
{
	alert("Cantidad incorrecta.");
	txtCampo.focus();
}
}


function formateaCantidadCadena(txtCampo)
{
 var strCadena;
 var largo;
 var grupos = new Array(), ind=0;
 var strEntera ="";
 var strDecimal = ""; 
 var temp;
if (esCantidad(txtCampo))
{
	strCadena = txtCampo;

	if(strCadena != "")
	{

		temp = strCadena.split('.');
		while (temp.length > 1)
		{				
			strCadena = strCadena.replace('.','');			
			temp = strCadena.split('.');
		}
		
		while (strCadena.search(',') != -1)
		{	
			strCadena = strCadena.replace(',','.');
		}
		
		
		vVector = strCadena.split('.');
		
		// Comprobamos si habia introducido decimales.
		if(vVector.length > 1)
		{
		largo = vVector[0].length;
		strCadenaEntera = vVector[0];
		}
		else
		{
		largo =strCadena.length;
		strCadenaEntera = strCadena;	
		}
	
		// Ponemos los puntos a los miles.
		largo -=3;
		while ( largo>0 ) 
		{
			grupos[ind] = strCadenaEntera.substr(largo, 3);
			largo -=3;
			ind++;
		}
		grupos[ind] = strCadenaEntera.substr(0, largo+3);
		while ( ind>0 ) 
		{
			strEntera += grupos[ind]+".";
			ind--;
		}
		strEntera+=grupos[0];
	
	
		// Tratamiento de la parte decimal.
		if(vVector.length > 1)
		{
			
			if(vVector[1].length > 2)
			{
				strDecimal = vVector[1].substr(0,2);
			}
			else
				strDecimal = vVector[1]								
			
			if(strDecimal.length == 1)
					strDecimal +="0"
			
		}
		
		if(strDecimal != "")		
			strResultado = strEntera + "," + strDecimal;
		else
			strResultado = strEntera + ",00";		
	
		txtCampo.value = strResultado;

	}
	else
	{
		txtCampo.value = "0,00";
	}
}
else
{
	alert("Cantidad incorrecta.");
	txtCampo.focus();
}
}

  
function formateaPorcentaje(txtCampo)
{
 var strCadena;
 var largo;
 var grupos = new Array(), ind=0;
 var strEntera ="";
 var strDecimal = ""; 
 var temp;
if (esCantidad(txtCampo))
{
	strCadena = txtCampo.value;

	if(strCadena != "")
	{
		temp = strCadena.split('.');
		while (temp.length > 1)
		{				
			strCadena = strCadena.replace('.','');			
			temp = strCadena.split('.');
		}

		
		while (strCadena.search(',') != -1)
		{	
			strCadena = strCadena.replace(',','.');
		}
		vVector = strCadena.split('.');
			
		// Comprobamos si habia introducido decimales.
		if(vVector.length > 1)
		{
		largo = vVector[0].length;
		strCadenaEntera = vVector[0];
		}
		else
		{
		largo =strCadena.length;
		strCadenaEntera = strCadena;	
		}

		
		// Ponemos los puntos a los miles.
		largo -=3;
		while ( largo>0 ) 
		{
			grupos[ind] = strCadenaEntera.substr(largo, 3);
			largo -=3;
			ind++;
		}
		grupos[ind] = strCadenaEntera.substr(0, largo+3);
		while ( ind>0 ) 
		{
			strEntera += grupos[ind]+".";
			ind--;
		}
		strEntera+=grupos[0];
	
	
		// Tratamiento de la parte decimal.
		if(vVector.length > 1)
		{
			if(vVector[1].length > 2)
			{
				strDecimal = vVector[1].substr(0,2);
			}
			else			
				strDecimal = vVector[1];

				if(strDecimal.length == 1)
					strDecimal +="0"

		}

		if(strEntera.length > 2 && strEntera != "100")
		{		
			alert("Porcentaje superior a 100");
			txtCampo.value = "";
			txtCampo.focus();
			return false;
		}
		else
		{
		 
		 if(strEntera.length == 3)
		  {
				if(strEntera != "100")
				{
						alert("Porcentaje superior a 100.");
						txtCampo.value = "";
						txtCampo.focus();
						return false;			
				}
				else
				{
					if(strDecimal != "" && strDecimal != "00")
					{
						alert("Porcentaje superior a 100.");
						txtCampo.value = "";
						txtCampo.focus();
						return false;
					}
				}
			}
		}
		if(strDecimal != "")		
			strResultado = strEntera + "," + strDecimal;
		else
			strResultado = strEntera + ",00";		
	
		txtCampo.value = strResultado;

	}
	else
	{
		txtCampo.value = "0,00";
	}
}
else
{
	alert("Cantidad incorrecta.");
	txtCampo.value = "";
	txtCampo.focus();
}
}


function formateaCantidadEntera(txtCampo)
{
 var strCadena;
 var largo;
 var grupos = new Array(), ind=0;
 var strEntera ="";
 var strDecimal = ""; 
 var temp;
if (esCantidad(txtCampo))
{
	strCadena = txtCampo.value;

	if(strCadena != "")
	{

		temp = strCadena.split('.');
		while (temp.length > 1)
		{				
			strCadena = strCadena.replace('.','');			
			temp = strCadena.split('.');
		}
		
		while (strCadena.search(',') != -1)
		{	
			strCadena = strCadena.replace(',','.');
		}
		
		
		vVector = strCadena.split('.');
		
		// Comprobamos si habia introducido decimales.
		if(vVector.length > 1)
		{
		largo = vVector[0].length;
		strCadenaEntera = vVector[0];
		}
		else
		{
		largo =strCadena.length;
		strCadenaEntera = strCadena;	
		}
	
		// Ponemos los puntos a los miles.
		largo -=3;
		while ( largo>0 ) 
		{
			grupos[ind] = strCadenaEntera.substr(largo, 3);
			largo -=3;
			ind++;
		}
		grupos[ind] = strCadenaEntera.substr(0, largo+3);
		while ( ind>0 ) 
		{
			strEntera += grupos[ind]+".";
			ind--;
		}
		strEntera+=grupos[0];
	
	
		// Tratamiento de la parte decimal.
		if(vVector.length > 1)
		{
			
			if(vVector[1].length > 2)
			{
				strDecimal = vVector[1].substr(0,2);
			}
			else
				strDecimal = vVector[1]								
			
			if(strDecimal.length == 1)
					strDecimal +="0"
			
		}
		
		
		//if(strDecimal != "")		
		//	strResultado = strEntera + "," + strDecimal;
		//else
		//	strResultado = strEntera + ",00";		
		strResultado = strEntera;
	
		txtCampo.value = strResultado;

	}
	else
	{
		txtCampo.value = "0,00";
	}
}
else
{
	alert("Cantidad incorrecta.");
	txtCampo.focus = true;
}
}
function longitud(objeto)
{
	if(objeto.value.length > objeto.maxlength)
	{
		alert("El campo debe tener como máximo " + objeto.maxlength + " caracteres.");
		objeto.focus();
	}
}


/*
'***
'* NOMBRE: compruebaCIF
'* TIPO DEVUELTO: Integer
'* FUNCIÓN:  Esta funcion comprueba si la cadena 'CIF' pasada como parametro de entrada
'* cumple con las caracteristicas necesarias para ser un CIF Nacional valido.
'* Dicha funcion devuelve un numero entero con el codigo de error y modifica
'*  la variable booleana resultado de forma que devuelva 'True' si la cadena es
'*  valida y 'False' en caso contrario
'*  ===========================
'*  ==== Codigos de error: ====
'*  ===========================
'*  0 => C.I.F. Correcto
'*  1 => Numero de caracteres del C.I.F. incorrecto
'*  2 => Primer caracter del C.I.F. incorrecto
'*  3 => El ultimo caracter del C.I.F. incorrecto
'*  4 => Alguno de los caracteres del 2 al 8 no es un numero
'*  5 => El ultimo caracter del C.I.F. no es el correspondiente con el valor
'*       introducido
'* PARÁMETROS:
'*      NOMBRE          TIPO            VAL.(V)/REF.(R)     DESCRIPCION
'*      strCIF          String                 (V)          NIF/CIF a comprobar
'*      blnresultado    boolean                (V)          true/false
'***
*/

function compruebaCIF(strCIF)
{
var num1;
var num2;
var num3;
var num4;
var num5;
var num6;
var num7;
var num8;
var str1;
var str2;
var str3;
var str4;
var str5;
var str6;
var str7;
var str8;
var intsuma1;
var intdigito;
var intdigitoaux;
var intdigitoaux2;
var intdigitoaux3;
var intdigitoaux4;

if(strCIF.length != 9)
    return(1);

strN=strCIF.substring(0,1).toUpperCase();
if(strN=='A' || strN=='B' || strN=='C' || strN=='D' || strN=='E' || strN=='F' || strN=='G' || strN=='H' )
{
   
    	//case "A","B": //, 'C', 'D', 'E', 'F', 'G', 'H'):
        //Las unicas letras permitidas para el primer caracter el resto implican CIF incorrecto

        if(!isNaN(strCIF.substr(8,1)))
        {
         
            //case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9:
            //unicos digitos permitidos para el ultimo caracter el resto implica error
                                
                  str1 = strCIF.substr(1,1)
                  str2 = strCIF.substr(2,1)
                  str3 = strCIF.substr(3,1)
                  str4 = strCIF.substr(4,1)
                  str5 = strCIF.substr(5,1)
                  str6 = strCIF.substr(6,1)
                  str7 = strCIF.substr(7,1)
                  str8 = strCIF.substr(8,1)
                  
                  if(isNaN(str1))
                  	return(4);
 		  if(isNaN(str2))
                  	return(4);                  	
		  if(isNaN(str3))
                  	return(4);                  	
		  if(isNaN(str4))
                  	return(4);                  	
		  if(isNaN(str5))
                  	return(4);                  	
		  if(isNaN(str6))
                  	return(4);                  	
		  if(isNaN(str7))
                  	return(4);                  	
		  if(isNaN(str8))
                  	return(4);                  	

                 
                  	                  	                  	                  	                  	                  	                  	                  	                  	                                
                  num2 = strCIF.substr(2,1)//.parseInt();// Left(Right(strCIF, 7), 1)

                  num4 = strCIF.substr(4,1)//.parseInt;// Left(Right(strCIF, 5), 1)
                  
                  num6 = strCIF.substr(6,1)//.parseInt;//Left(Right(strCIF, 3), 1)
                  
                  intsuma1 = parseInt(parseInt(num2) + parseInt(num4) + parseInt(num6))
                  
                  
                  num1 = parseInt(strCIF.substr(1,1));//Left(Right(strCIF, 8), 1)
                  num3 = parseInt(strCIF.substr(3,1));//Left(Right(strCIF, 6), 1)
                  num5 = parseInt(strCIF.substr(5,1));//Left(Right(strCIF, 4), 1)
                  num7 = parseInt(strCIF.substr(7,1));//Left(Right(strCIF, 2), 1)
                  num8 = parseInt(strCIF.substr(8,1));//Right(strCIF, 1)
                  
                  intdigitoaux = num1 * 2
                  intdigitoaux2 = num3 * 2
                  intdigitoaux3 = num5 * 2
                  intdigitoaux4 = num7 * 2
                  
                  if((intdigitoaux+'').length > 1)                  
                    intdigito = parseInt((intdigitoaux+'').substr(0,1))  + parseInt((intdigitoaux+'').substr((intdigitoaux+'').length-1, 1))
                  
                  else
                    intdigito = parseInt(intdigitoaux)
                 
                  

                  if((intdigitoaux2+'').length > 1)                  
                    intdigito = parseInt(intdigito) + parseInt((intdigitoaux2+'').substr(0,1)) + parseInt((intdigitoaux2+'').substr((intdigitoaux2+'').length-1, 1))		
                  else
                    intdigito = parseInt(intdigito) + parseInt(intdigitoaux2)
                   
                    
                  
                  if((intdigitoaux3+'').length > 1 )
                    intdigito = parseInt(intdigito) + parseInt((intdigitoaux3+'').substr(0,1)) + parseInt((intdigitoaux3+'').substr((intdigitoaux3+'').length-1,1))
                  else
                    intdigito = parseInt(intdigito) + parseInt(intdigitoaux3)
                  
                  
                  if((intdigitoaux4+'').length > 1)
                    intdigito = parseInt(intdigito) + parseInt((intdigitoaux4+'').substr(0, 1)) + parseInt((intdigitoaux4+'').substr((intdigitoaux4+'').length-1, 1))
                  else
                    intdigito = parseInt(intdigito) + parseInt(intdigitoaux4)
                  
                  
                  intdigito = parseInt(intdigito) + parseInt(intsuma1)
                  
                  
                  intdigito = intdigito % 10
                  
                  
                  intdigito = 10 - intdigito
                  
                  if(intdigito > 9 )
                    intdigito = 0
                  
                  
                  if (intdigito !=num8)                     
                    return(5)
                  else                   
                    return(0);                  
            
            }             
            //      break;      
            //default:
            else
                return(3);
             //   break;
	
}       
else
{
//	default:
        //CIF Incorrecto en su primer caracter          
   	    
            return(2);
 //           break;
        
 }
}



/*
'***
'* NOMBRE: compruebaCIFOrganismos
'* TIPO DEVUELTO: Integer
'* FUNCIÓN:  Esta funcion comprueba si la cadena 'CIF' pasada como parametro de entrada
'* cumple con las caracteristicas necesarias para ser un CIF de Organismos Estatales y Locales valido.
'* Dicha funcion devuelve un numero entero con el codigo de error y modifica
'* la variable booleana resultado de forma que devuelva 'True' si la cadena es
'* valida y 'False' en caso contrario
'* ===========================
'* ==== Codigos de error: ====
'* ===========================
'*  0 => C.I.F. Correcto
'*  1 => Numero de caracteres del C.I.F. incorrecto
'*  2 => Primer caracter del C.I.F. incorrecto
'*  3 => El caracter 9 del C.I.F. incorrecto es un numero o caracter en blanco
'*  4 => Alguno de los caracteres del 2 al 8 no es un numero
'*  5 => El ultimo caracter del C.I.F. no es el correspondiente con el valor
'*       introducido
'* PARÁMETROS:
'*      NOMBRE          TIPO            VAL.(V)/REF.(R)     DESCRIPCION
'*      strCIF          String                 (V)          NIF/CIF a comprobar
'*      blnresultado    boolean                (V)          true/false
'***
'*****************************************************************************
*/
function compruebaCIFOrganismos(strCIF) 
{
var num1 
var num2 
var num3 
var num4 
var num5 
var num6 
var num7 
var num8 
var str1 
var str2 
var str3 
var str4 
var str5 
var str6 
var str7 
var str8 
var str9 
var intsuma1 
var intdigito 
var intdigitoaux 
var intdigitoaux2 
var intdigitoaux3 
var intdigitoaux4 
 arrletra="0#J#A#B#C#D#E#F#G#H#I".split("#");

/*    arrletra[1] = "J"
    arrletra[2] = "A"
    arrletra[3] = "B"
    arrletra[4] = "C"
    arrletra[5] = "D"
    arrletra[6] = "E"
    arrletra[7] = "F"
    arrletra[8] = "G"
    arrletra[9] = "H"
    arrletra[10] = "I"
*/


    //debe ser de tamaño 9, sino CIF incorrecto
    if (strCIF.length != 9)        
        return(1);

	  str1 = strCIF.substr(0,1)
	  str2 = strCIF.substr(1,1)
	  str3 = strCIF.substr(2,1)
	  str4 = strCIF.substr(3,1)
	  str5 = strCIF.substr(4,1)
	  str6 = strCIF.substr(5,1)
	  str7 = strCIF.substr(6,1)
	  str8 = strCIF.substr(7,1)
	  str9 = strCIF.substr(8,1)	  
                  
    //el primer caracter debe ser S , P , o Q
    if(str1.toUpperCase() != 'S' && str1.toUpperCase() != 'P' && str1.toUpperCase() != 'Q')
        return(2);

    
    // el 9 caracter no puede ser un numero ni caracter en blanco

    if(str9 == " " || !isNaN(str9))
        return(3)
        
    if(isNaN(str2))        
        return(4);

    
    if(isNaN(str3))        
        return(4);
    
    if(isNaN(str4))        
        return(4);
    
    if(isNaN(str5))        
        return(4);
    
    if(isNaN(str6))        
        return(4);
    
    if(isNaN(str7))        
        return(4);
    
    
    num1 = parseInt(strCIF.substr(1,1))
    num2 = parseInt(strCIF.substr(2,1))
    num3 = parseInt(strCIF.substr(3,1))
    num4 = parseInt(strCIF.substr(4,1))
    num5 = parseInt(strCIF.substr(5,1))
    num6 = parseInt(strCIF.substr(6,1))
    num7 = parseInt(strCIF.substr(7,1))

    intsuma1 = parseInt(num2 + num4 + num6)

    intdigitoaux = num1 * 2
    intdigitoaux2 = num3 * 2
    intdigitoaux3 = num5 * 2
    intdigitoaux4 = num7 * 2
    
    if((intdigitoaux+'').length > 1)
      intdigito = parseInt((intdigitoaux).substr(0, 1)) + parseInt((intdigitoaux+'').substr((intdigitoaux+'').length-1, 1))
    else
      intdigito = parseInt(intdigitoaux)
    
    
    if ((intdigitoaux2+'').length > 1)
      intdigito = parseInt(intdigito) + parseInt((intdigitoaux2+'').substr(0, 1)) + parseInt((intdigitoaux2+'').substr((intdigitoaux2+'').length-1, 1))
    else
      intdigito = parseInt(intdigito) + parseInt(intdigitoaux2)
    
    
    if ((intdigitoaux3+'').length > 1)
      intdigito = parseInt(intdigito) + parseInt((intdigitoaux3+'').substr(0, 1)) + parseInt((intdigitoaux3+'').substr((intdigitoaux3+'').length-1, 1))
    else
      intdigito = parseInt(intdigito) + parseInt(intdigitoaux3)
    
    
    if ((intdigitoaux4+'').length > 1)
      intdigito = parseInt(intdigito) + parseInt((intdigitoaux4+'').substr(0, 1)) + parseInt((intdigitoaux4+'').substr((intdigitoaux4+'').length-1, 1))
    else
      intdigito = parseInt(intdigito) + parseInt(intdigitoaux4)
    
    
    intdigito = parseInt(intdigito) + parseInt(intsuma1)
    intdigito = intdigito % 10
    intdigito = 10 - intdigito
    
    if (intdigito > 9)
      intdigito = 0

    
    if (str9.toUpperCase()!= arrletra[intdigito + 1].toUpperCase())         
        return(5);        
    else
        return(0);
        

}
/*
'***
'* NOMBRE: compruebaNIE
'* TIPO DEVUELTO: Integer
'* FUNCIÓN:  Esta funcion comprueba si la cadena 'CIF' pasada como parametro de entrada
'* cumple con las caracteristicas necesarias para ser un N.I.E. valido.
'* Dicha funcion devuelve un numero entero con el codigo de error y modifica
'* la variable booleana resultado de forma que devuelva 'True' si la cadena es
'* valida y 'False' en caso contrario
'* ===========================
'* ==== Codigos de error: ====
'* ===========================
'*  0 => N.I.E. Correcto
'*  1 => Numero de caracteres del N.I.E incorrecto
'*  2 => Primer caracter del N.I.E. incorrecto
'*  3 => Alguno de los caracteres del 2 al 8 no es un numero
'*  4 => El ultimo caracter del N.I.E. no es el correspondiente con el valor
'*       introducido
'* PARÁMETROS:
'*      NOMBRE          TIPO            VAL.(V)/REF.(R)     DESCRIPCION
'*      strCIF          String                 (V)          NIF/CIF a comprobar
'*      blnresultado    boolean                (V)          true/false
'***
*/
function compruebaNIE(strCIF) 
{
var str1 
var str2 
var str3 
var str4 
var str5 
var str6 
var str7 
var str8 
var str9 
var dbldigito 

//vector con las posibles letras del ultimo caracter en el orden especificado
arrletra="0#T#R#W#A#G#M#Y#F#P#D#X#B#N#J#Z#S#Q#V#H#L#C#K#E".split("#");

/*
    arrletra(1) = "T"
    arrletra(2) = "R"
    arrletra(3) = "W"
    arrletra(4) = "A"
    arrletra(5) = "G"
    arrletra(6) = "M"
    arrletra(7) = "Y"
    arrletra(8) = "F"
    arrletra(9) = "P"
    arrletra(10) = "D"
    arrletra(11) = "X"
    arrletra(12) = "B"
    arrletra(13) = "N"
    arrletra(14) = "J"
    arrletra(15) = "Z"
    arrletra(16) = "S"
    arrletra(17) = "Q"
    arrletra(18) = "V"
    arrletra(19) = "H"
    arrletra(20) = "L"
    arrletra(21) = "C"
    arrletra(22) = "K"
    arrletra(23) = "E"
*/
    //debe ser de tamaño 9, sino CIF incorrecto
    if (strCIF.length != 9)
        return(1);

    //almacenamos cada caracter introducido por separado para realizar las operaciones posteriores

    str1 = strCIF.substr(0, 1)
    str2 = strCIF.substr(1, 1)
    str3 = strCIF.substr(2, 1)
    str4 = strCIF.substr(3, 1)
    str5 = strCIF.substr(4, 1)
    str6 = strCIF.substr(5, 1)
    str7 = strCIF.substr(6, 1)
    str8 = strCIF.substr(7, 1)
    str9 = strCIF.substr(8, 1)

    //el primer caracter debe ser uno de los siguientes: 'J,K,L,M,N,X'
    if (str1.toUpperCase() != "J" && str1.toUpperCase()!="K" && str1.toUpperCase() != "L" && str1.toUpperCase() != "M" && str1.toUpperCase() != "N" && str1.toUpperCase() != "X")    
        return(2);

    //los caracteres del 2 al 8 deben ser numeros
    if(isNaN(str2))
        return(3);
    
    if(isNaN(str3))
        return(3);
    
    if(isNaN(str4))
        return(3);
    
    if(isNaN(str5))
        return(3);
    
    if(isNaN(str6))
        return(3);
    
    if(isNaN(str7))
        return(3);
    


    //Empezamos la comprobacion de que el N.I.E es valido
    dbldigito = str2 + str3 + str4 + str5 + str6 + str7 + str8
    dbldigito = dbldigito % 23
    dbldigito = dbldigito + 1

    if(str9.toUpperCase() != arrletra[dbldigito])
    //N.I.E d formato correcto pero invalido 
        return(4)
    else
    //N.I.E de formato correcto y valido      
        return(0)

}

/*
'***
'* NOMBRE: esAlfabetica
'* TIPO DEVUELTO: Boolean
'* FUNCIÓN: Comprueba si una cadena contiene sólo caracteres alfabéticos
'* PARÁMETROS:
'*      NOMBRE          TIPO        VAL.(V)/REF.(R)     DESCRIPCIÓN
'*      strTestString      String            V             Cadena a examinar
'***
*/
function esAlfabetica(strTestString)
{ 
var strTemp
var strChar 
var intLen
var intCtr 
var strCaracter = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"    
strTemp = strTestString
intLen = strTemp.length

//'Cadena de intLongitud > 0
if (intLen > 0)
{
    //Comprobamos cada carácter
    for(intCtr = 0;intCtr<intLen;intCtr++)
    {
        strChar = strTemp.substr(intCtr, 1).toUpperCase();                
        if(strCaracter.search(strChar) == -1)
        	return(false);

    }
    
    return(true);
}
else
    return(false);

}

/*
'***
'* NOMBRE: calculaNif
'* TIPO DEVUELTO: String
'* FUNCIÓN: Realiza el cálculo de la letra de un NIF a partir del número de DNI pasado
'* como parámetro. Se utiliza el siguiente algoritmo:
'*      1.Dividir el DNI por 23 y prescindir de los decimales.
'*      2.Multiplicar el resultado por 23 y restarlo del DNI.
'*      3.El resultado es un número entre 0-23 y se corresponde con la siguiente tabla:
'*      1R 2W 3A 4G 5M 6Y 7F 8P 9D 10X 11B 12N 13J 14Z 15S 16Q 17V 18H 19L 20C 21K 22E 23T 0T
'* PARÁMETROS:
'*      NOMBRE          TIPO        VAL.(V)/REF.(R)     DESCRIPCIÓN
'*      DNI             Long                V           DNI al que se le calcula la letra
'***
*/
function calculaNif(DNI) 
{
return("TRWAGMYFPDXBNJZSQVHLCKE".substr(DNI % 23, 1));
}

/*
'***
'* NOMBRE: comprobarNIF
'* TIPO DEVUELTO: Boolean
'* FUNCIÓN: Comprueba el formato correcto de un NIF según los siguientes criterios:
'*      1. El NIF debe contener 9 cifras.
'*      2. No puede haber ningún espacio en blanco.
'*      3. Sólo se admiten números y una letra al final.
'*      6. La letra debe ser la correcta.
'* PARÁMETROS:
'*      NOMBRE          TIPO            VAL.(V)/REF.(R)     DESCRIPCION
'*      strNIF       String                 (V)            NIF a comprobar
'***
 */
function compruebaNIF(strNIF)
{
var i, longitud, numLetras 
var caracter 


numLetras = 0

//Longitud del NIF/CIF
longitud = strNIF.length;
if (longitud < 9)
    return(false)


//Examinamos cada carácter para ver cuántas letras hay
for(i=0;i<longitud;i++)
{
    caracter = strNIF.substr(i, 1)
    if(esAlfabetica(caracter))    
        numLetras = numLetras + 1     
    else	
        if (isNaN(caracter))
            return(false)
}

//Hay menos o más de 1 letra
if(numLetras != 1)
    return(false);

     //Se coge el último carácter
     caracter = strNIF.substr(8, 1);
     //Se comprueba que sea la letra
     if (esAlfabetica(caracter))
     {
       //Se comprueba que sea la letra correspondiente al NIF
        if(calculaNif(strNIF.substr(0,8)) == caracter.toUpperCase())
            return(true);            
        else //Letra no válida
            return(false);
     }
     else
     //Letra en el interior: error
        return(false);
}

function validaCIF(objCampo)
{
var strCIF = objCampo.value;

if(strCIF != "")
{	
	if(compruebaCIFOrganismos(strCIF)==0 ||compruebaCIF(strCIF) ==0 || compruebaNIE(strCIF)==0 || compruebaNIF(strCIF)==true)
	{		
		objCampo.value=objCampo.value.toUpperCase();
	}
	else
	{	
		alert("Dato introducido incorrecto.\nNo se corresponde con ninguno de los siguientes formatos:\n 1.- N.I.F.\n 2.- C.I.F.\n 3.- N.I.E.\n 4.- C.I.F. de organismos ");
		objCampo.value="";
		objCampo.focus();
		/*
		alert("REsultado (CIFOrganismos):" + compruebaCIFOrganismos(strCIF));		
		alert("REsultado (CIF):" + compruebaCIF(strCIF));
		alert("REsultado (NIE):" + compruebaNIE(strCIF));
		alert("REsultado (NIF):" + compruebaNIF(strCIF));
		*/
	}
}
}


function ValidaFormulario()
{
  
  var n, tipo, k, val, cadena, dateVal, error = false;  
  var hayfallo = 0;
  cadena = new String();
  n = document.forms[0].length;  
  var vector = new Array(n);
  var mensaje = "";
  var dia = "";
  var mes = "";
  var anio = "";
  var fecha = "";
  var puesto = 0;
  var strTitulo;
    
  for(i=0; i<n ; i++)
  {	
	error = false;
	blnVacio = true
   	strObligatorio = document.forms[0].item(i).name.substr(document.forms[0].item(i).name.length-2,2);   	
   	if(strObligatorio == "_1")
   		blnObligatorio = true;
   	else
   		blnObligatorio = false;
   	
	if(blnObligatorio)
	{
	    blnVacio = true;
	    if(document.forms[0].item(i).value == "")    
	    {
	    	blnVacio = true;	
	    }
	    else
	    {		
	    	// MIRAMOS QUE NO TENGA SOLO ESPACIOS EN BLANCO
	   	iteraciones = document.forms[0].item(i).value.length;	   	   	
	   	for(k=0;k<=iteraciones;k++)
	   	{
	   		if(cadena.substr(k,1)!=" ")
	   		{   		
			  blnVacio=false;
			  k=iteraciones;
	   		}
	   	}
	    }
	    if(blnVacio)
	    {
	    	alert("Campo obligatorio vacío.");
	    	document.forms[0].item(i).focus();	
	    	return(false);
	    }
	    	   	
		
	   }
  }
  return(true);	   
}


function validaTamanyo(objCampo,intTamanyo)
{
if (objCampo.value.length !=intTamanyo && objCampo.value != "")
	{	
		alert("El campo debe tener " + intTamanyo +" dígitos.");
		objCampo.value="";
		objCampo.focus();
	}
}

function generaDC(idEm, ref, ctrib, ejerc, remesa, importe, txtDC) 
 {    
    var total;    
    var dc;
    var vCadena;
    var ID;

	if (idEm != '' && ref != '' && ctrib != '' && ejerc != '' && remesa != '' && importe != '')
		{
		ctrib= '000' + ctrib		
		ctrib = ctrib.substring(ctrib.length-3,ctrib.length);
		remesa= '00' + remesa		
		remesa = remesa.substring(remesa.length-2,remesa.length);		
		ejerc= '00' + ejerc		
		ejerc = ejerc.substring(ejerc.length-2,ejerc.length);
		ID = ctrib + '' + ejerc + '' + remesa ;
		importe=importe.replace(',','');
		temp = importe.split('.');
		while (temp.length > 1)
		{				
			importe = importe.replace('.','');			
			temp = importe.split('.');
		}
		dc = ((idEm * 76) + (ref * 9) + (((parseFloat(ID) + parseFloat(importe)) - 1)*55))
		dc = dc / 97;
		dc = dc + ''
		vCadena = dc.split(".")
		temp = vCadena[1].substring(0,2);
		dc = 99 - temp
		dc = '00' + dc;
		dc = dc.substring(dc.length-2,dc.length);
		txtDC.value = dc;
		}
 }
 
 
 
 
 function quitaformateo(inputString) {
 	var temp = inputString;		
 	
 	temp = replaceSubstring(temp,'.','');
 	temp = replaceSubstring(temp,',','.');
 	return temp;
 	
 	
 	
 }
 
 function replaceSubstring(inputString, fromString, toString) {
   // Goes through the inputString and replaces every occurrence of fromString with toString
   var temp = inputString;
   if (fromString == "") {
      return inputString;
   }
   if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } else { // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop
      var midStrings = new Array("~", "`", "_", "^", "#");
      var midStringLen = 1;
      var midString = "";
      // Find a string that doesn't exist in the inputString to be used
      // as an "inbetween" string
      while (midString == "") {
         for (var i=0; i < midStrings.length; i++) {
            var tempMidString = "";
            for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
            if (fromString.indexOf(tempMidString) == -1) {
               midString = tempMidString;
               i = midStrings.length + 1;
            }
         }
      } // Keep on going until we build an "inbetween" string that doesn't exist
      // Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + midString + toTheRight;
      }
      // Next, replace the "inbetween" string with the "toString"
      while (temp.indexOf(midString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(midString));
         var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } // Ends the check to see if the string being replaced is part of the replacement string or not
   return temp; // Send the updated string back to the user
} // Ends the "replaceSubstring" function

function esNumeroEnteroRelleno(txtCampo) 
  {
	
    var cad,lon,z,ch,contador;
	contador = 0;	
    cad = txtCampo.value;    
    lon = cad.length;  
    for (z=0; z<lon; z++)
    {
      ch = cad.charAt(z)

      
      if((ch < "0" || "9" < ch))
      {
		alert("Debe introducir un número.");
		txtCampo.value = "";
		txtCampo.focus();      
        return false;
	  }               
    }
	
	if(txtCampo.value != "")
	{	
		cad = txtCampo.value;
		for(i=txtCampo.value.length;i<txtCampo.maxLength;i++)
			cad = "0" + cad + '';		
		
		txtCampo.value = cad;		
	}
    return true;
  }

function esFechaCorrecta(objDia,objMes,objAnyo)
{
var strFecha ;
strFecha = objDia.value  + "/" + objMes.value + "/" + objAnyo.value ;
if (objDia.value != "" && objMes.value != "" && objAnyo.value != "")
{	
	if (!FechaValida(strFecha))
	{
		alert("Fecha incorrecta");
		objDia.value = "";			
		objMes.value = "";
		objAnyo.value = "";
		objDia.focus();						
		return false;				 
	}
}
	return true;
}

function validaNIF(objCampo)
{
var strCIF = objCampo.value;

if(strCIF != "")
{	
	if(compruebaNIF(strCIF)==true)
	{		
		objCampo.value=objCampo.value.toUpperCase();
	}
	else
	{	
		alert("N.I.F. Incorrecto");
		objCampo.value="";
		objCampo.focus();
	}
}
}

//Formatear cantidades
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