/******************************************************************************
* funcionesFormulario.js     Natra                                            *
*                                                                             *
* Funciones basicas para la validacion de formularios                         *
* Ultima modificacion: 27/7/00                                                *
*                                                                             *
******************************************************************************/


function eliminacaracteres (str, lista)
{   
	var i;
    var cadenafinal = "";

    // Buscar por el string, si el caracter no esta en "lista", 
    // agregarlo a returnString
    
    for (i = 0; i < str.length; i++)
    {   
		var aux = str.charAt(i);
        if (lista.indexOf(aux) == -1) cadenafinal += aux;
    }

    return cadenafinal;
}

	

var telChar = "()-+ "; // caracteres admitidos en numeros de telefono
// s es numero de telefono valido
//Autor: Jose Vicente Ruiz
function esNumeroTelefono (str)
{   
	var aux;
    aux = eliminacaracteres( str, telChar );
    return (esEntero(aux))
}


function cambiaDias(f1,nombre){
//	f1=document.formulario;
	nombred='d'+nombre;
	nombrem='m'+nombre;
	nombrea='a'+nombre;
	comboDia=eval('f1.'+nombred);
	comboMes=eval('f1.'+nombrem);
	comboAnyo=eval('f1.'+nombrea);
	var bloque31= new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
	var diaSeleccionado=eval('f1.'+nombred+'.'+'options[f1.'+nombred+'.selectedIndex].value')-1;
	var mesSeleccionado=eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value');
	var anyoSeleccionado=eval('f1.'+nombrea+'.'+'options[f1.'+nombrea+'.selectedIndex].value');
	
	if (eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==4||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==6||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==9||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==11){
		diaMax=30;
	}
	if (eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==0||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==1||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==3||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==5||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==7||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==8||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==10||eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==12){
		diaMax=31;
	}
	if (eval('f1.'+nombrem+'.'+'options[f1.'+nombrem+'.selectedIndex].value')==2){
		if (anyoSeleccionado%4==0){
			diaMax=29;
		}
		else{
			diaMax=28;
		}
	}


	for (var i=0; i < diaMax; i++){
		eval('f1.'+nombred+'.options')[i]=new Option(eval("bloque31")[i],eval("bloque31")[i],true,true);
		selectedArray=new Array(diaMax);
	}
	if (diaSeleccionado>diaMax){
		diaSeleccionado=diaMax-1;
	}
	comboDia.selectedIndex=diaSeleccionado;

	while (selectedArray.length < eval('f1.'+nombred+'.length')) {
		eval('f1.'+nombred+'.'+'options')[eval('(f1.'+nombred+'.options.length - 1)')] = null;
	}

	if (eval('f1.'+nombred+'.options')[0].value == '') {
		eval('f1.'+nombred+'.options')[0]= null;
		if ( navigator.appName == 'Netscape') {
			if (parseInt(navigator.appVersion) < 4) {
				window.history.go(0);
			}
			else {   	
				if (navigator.platform == 'Win32' || navigator.platform == 'Win16') {
					window.history.go(0);
	            }
        	}
		}
	}

}



function esVacio(str)
  //comprueba si el valor que se le pasa como argumento es vacio
  //Autor: Jose Ferrer
  {
  return ((str == null) || (str.length == 0))
  }


function IsAlpha( str )
  //comprueba si el valor que se le pasa como argumento es un texto
  //Autor: Jose Ferrer
	{
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;
	var isValid = true;
	str += "";	// convert to a string for performing string comparisons.
  	for (i = 0; i < str.length; i++) {
		// Alpha must be between "A"-"Z", or "a"-"z"
		if ( !( ((str.charAt(i) >= "a") && (str.charAt(i) <= "z")) ||
      			((str.charAt(i) >= "A") && (str.charAt(i) <= "Z")) ) ) {
         				isValid = false;
         				break;
      			}
   		}

	return isValid;
	}



function esEntero(str)
  //comprueba si el valor que se le pasa como argumento es un entero
  //Autor: Jose Ferrer
  {
  var err = 0
  var valid = "0123456789"
  var ok = "yes";
  var temp;

  for (var i=0; i< str.length; i++)
    {
	temp = "" + str.substring(i, i+1);
	if (valid.indexOf(temp) == "-1") err = 1;
	}
  
  if (err==1)
		return (false);
  else
		return (true);
  }  // end esEntero
  
function IsInt(str)
  //comprueba si el valor que se le pasa como argumento es un entero
  //Autor: Jose Ferrer
  {
  var err = 0
  var valid = "0123456789"
  var ok = "yes";
  var temp;

  for (var i=0; i< str.length; i++)
    {
	temp = "" + str.substring(i, i+1);
	if (valid.indexOf(temp) == "-1") err = 1;
	}
  
  if (err==1)
		return (false);
  else
		return (true);
  }  // end esEntero  
  
 function esDecimal(str)
  //comprueba si el valor que se le pasa como argumento es un entero
  //Autor: Jose Ferrer
  {
  var err = 0
  var valid = "0123456789.,"
  var ok = "yes";
  var temp;

  if (str=="")
		err=1;
	else
		for (var i=0; i< str.length; i++)
    {
			temp = "" + str.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") err = 1;
		}
  
  if (err==1)
	{
	return (false);
	}
  else
    {
	return (true);
	}
  }  // end esEntero 
  
function esReal(str)
  //comprueba si el valor que se le pasa como argumento es un real
  //es igual que la función esEntero solo que admite la ","
  //Autor: Jose Ferrer
  {
  var err = 0
  var valid = "0123456789,"
  var ok = "yes";
  var temp;

  for (var i=0; i< str.length; i++)
    {
	temp = "" + str.substring(i, i+1);
	if (valid.indexOf(temp) == "-1") err = 1;
	}
  
  if (err==1)
	{
	return (false);
	}
  else
    {
	return (true);
	}
  }  // end esEntero  
 /* 
Auto center window script- Eric King (http://redrival.com/eak/index.shtml)
Permission granted to Dynamic Drive to feature script in archive
For full source, usage terms, and 100's more DHTML scripts, visit http://dynamicdrive.com
*/

var win = null;
function NewWindow(mypage,myname,w,h,scroll){
LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
settings =
'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',toolbar'
win = window.open(mypage,myname,settings)
if(win.window.focus){win.window.focus();}
}



function abreControl(strURLVentana)
{

//abre la ventana auxiliar de control que lista las actividades tareas etc... del proyecto actual

w=475;
h=330;

LeftPosition = (screen.width) ? (screen.width-w-10) : 0;
//TopPosition = (screen.height) ? (screen.height-h) : 0;
TopPosition = 10;

var winopts =
        'toolbar=no,titlebar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,top='+TopPosition+',left='+LeftPosition+',width='+w+',height='+h

//var winopts='alwaysRaised=1,dependent=1,height=' + h + ',location=0,menubar=0,personalbar=0,systembar=0,scrollbars=0,status=0,toolbar=0,width=' + w + ',resizable=0,nobar,nobars'
		
CtrlWin = window.open(strURLVentana,"CtrlWin",winopts);
//CtrlWin.IMAWin = this.window;
}



var defaultEmptyOK = false;
//var reEmail = /^[A-Z, a-z, 0-9,_]+\.{0,1}[A-Z, a-z, 0-9,_]+\@[A-Z, a-z, 0-9,_]+\.[A-Z, a-z, 0-9,_]+$/;
var reEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w+)+$/;
function comprueba_email (str)
  {
	if (!reEmail.test(str))
	  {
	  return (false);
	  }
	else
	  {
	  return (true);
	  }
  }


  
  
function comprueba_dni(frm)
{
//al ser un texto de 15 cuando compruebo para español solo puede tener 9
//8 numeros y 1 letra

string1 = frm.tDNI.value
if (string1.length!=9)
    {
	alert('El DNI introducido no es correcto');
	frm.tDNI.focus();
	return (false);
	}


numerosDNI = string1.substring(0, 8) // numeros dni
letrasDNI = string1.substring(8, 9) // letras dni
//alert(numerosDNI);
//alert(letrasDNI);

if (!comprueba_nDNI(numerosDNI)) return (false);
if (!comprueba_lDNI(letrasDNI)) return (false);
//if (!valida_DNI(numerosDNI,letrasDNI)) return (false);
return (true);
}

function comprueba_nDNI(strValor) /* comprueba los numeros del DNI*/
{
  string = strValor
  //alert(string);
  if (string == "")
    {
    alert('Introduzca los números del DNI del alumno');
	return (false);
	}
  else
	{
	//alert(string);
	if (!IsInt(string))
      {
      alert('La primera parte del DNI sólo puede contener números');
      return (false);
      }
    else
	  {
      if (string.length!=8)
        {
        alert('La primera parte del DNI debe tener 8 números');
        return (false);
        }
	  else
        {
        return (true);
        }
      }
	}
}


function comprueba_lDNI(strValor) /* comprueba los numeros del DNI*/
{
  string = strValor
  //string = frm.lDNI.value
  if (string == "")
    {
    alert('Introduzca la letra del DNI del alumno');
	return (false);
	}
  else
	{
	if (!IsAlpha(string))
      {
      alert('La segunda parte del DNI sólo puede contener una letra');
      return (false);
      }
  else
      {
      return (true);
      }
    }
}

function valida_DNI(numeros_DNI,letra_DNI) /* comprueba que la letra se corresponde con los numeros del DNI*/
{
//entrada: los numeros del DNI y la letra del DNI
//para validar el DNI hay que coger el numero en
//cuestion y dividirlo entre 23. Al resultado de esa division se le quitan los decimales (sin redondear) y se vuelve a multiplicar por 23,
//con lo que se conseguira un numero entre 0 y 23 unidades mas bajo que el DNI original. Solamente hay que restarlo y, consultando
//la tabla ya se tiene la letra.
letra_DNI=letra_DNI.toUpperCase()
numeros_DNI=parseInt(numeros_DNI)
aux=Math.floor(numeros_DNI/23)
aux=aux*23
res=numeros_DNI-aux

//obtengo la letra que se corresponde en teoria con los numeros
if (res==0) {letra_correcta="T"}
else if (res==1) {letra_correcta="R"}
else if (res==2) {letra_correcta="W"}
else if (res==3) {letra_correcta="A"}
else if (res==4) {letra_correcta="G"}
else if (res==5) {letra_correcta="M"}
else if (res==6) {letra_correcta="Y"}
else if (res==7) {letra_correcta="F"}
else if (res==8) {letra_correcta="P"}
else if (res==9) {letra_correcta="D"}
else if (res==10) {letra_correcta="X"}
else if (res==11) {letra_correcta="B"}
else if (res==12) {letra_correcta="N"}
else if (res==13) {letra_correcta="J"}
else if (res==14) {letra_correcta="Z"}
else if (res==15) {letra_correcta="S"}
else if (res==16) {letra_correcta="Q"}
else if (res==17) {letra_correcta="V"}
else if (res==18) {letra_correcta="H"}
else if (res==19) {letra_correcta="L"}
else if (res==20) {letra_correcta="C"}
else if (res==21) {letra_correcta="K"}
else if (res==22) {letra_correcta="E"}
else if (res==23) {letra_correcta="T"}

//compruebo la letra introducida
if (letra_DNI==letra_correcta)
  {
  return (true);
  }
else
  {
  alert('El DNI introducido no es correcto');
  return (false);
  }
}  
