//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function email(cadena, otros){

    var i, j;                          // indice en cadena
    var es_email = 0 < cadena.length;  // cadena es email o no

    i = salta_alfanumerico(cadena, 0, otros); // INICIO

	if(es_email = 0 < i)               // lee "alfanum*"
      if(es_email = (i < cadena.length))
        if(es_email = cadena.charAt(i) == '@') // lee "alfanum@*"
        {
            i++;
            j = salta_alfanumerico(cadena, i, otros);
            if(es_email = i < j)       // lee "alfanum@alfanum*"
              if(es_email = j < cadena.length)
                if(es_email = cadena.charAt(j) == '\.')
                  {                    // lee "alfanum@alfanum.*"
                    j++;
                    i = salta_alfanumerico(cadena, j, otros);
                    if(es_email = j < i) // lee "alfanum@alfanum.alfanum*"

						while(es_email && (i < cadena.length))
                        	if(es_email = cadena.charAt(i) == '\.') {
     	                       i++;
        	                    j = salta_alfanumerico(cadena, i, otros);
            	                if(es_email = i < j) // lee "alfanum@alfanum.alfanum[.alfanum]*"
                	              i = j;
	                        }
	            }

         }
    return(es_email);
}



/* salta caracteres alfanumericos y otros a partir de  cadena[i]  y  da  si- */
/* guiente posicion                                                          */

function salta_alfanumerico(cadena, i, otros){ 
// DECLARACION DE VARIABLES
    var j;                             // indice en cadena
    var car;                           // caracter de cadena
    var alfanum;                       // cadena[j] es alfanumerico u otros

	for(j = i, alfanum = true; (j < cadena.length) && alfanum; j++){ // INICIO
		
		car = cadena.charAt(j);
        alfanum = alfanumerico(car) || (otros.indexOf(car) != -1);
    }

	if(!alfanum)                       // lee "alfanumX"
      j--;

    return(j);
}

  

/* dice si car es alfanumerico */
function alfanumerico(car){

    return(alfabetico(car) || numerico(car));
}


/* dice si car es alfabetico  */
function alfabetico(car){     
// DECLARACION DE CONSTANTES
// caracteres alfabeticos

    var alfa = "ABCDEFGHIJKLMNOPQRSTUWXYZabcdefghijklmnopqrstuvxyz";
    return(alfa.indexOf(car) != - 1);  // INICIO
}





/* dice si car es numerico */
function numerico(car){ 
// DECLARACION DE CONSTANTES

    var num = "0123456789";            // caracteres numericos
    return(num.indexOf(car) != - 1);   // INICIO
}

  
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


/* Comprueba que un email es correcto: tiene el simbolo @, tiene un punto y algo detrás, 
y no hay dos puntos seguidos... */
function mail(texto){ 

    var mailres = true;             
    var cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ1234567890@._-"; 
     
    var arroba = texto.indexOf("@",0); 
    if ((texto.lastIndexOf("@")) != arroba) arroba = -1; 
     
    var punto = texto.lastIndexOf("."); 
                 
     for (var contador = 0 ; contador < texto.length ; contador++){ 
        if (cadena.indexOf(texto.substr(contador, 1),0) == -1){ 
            mailres = false; 
            break; 
     } 
    } 

    if ((arroba > 1) && (arroba + 1 < punto) && (punto + 1 < (texto.length)) && (mailres == true) && (texto.indexOf("..",0) == -1)) 
     mailres = true; 
    else 
     mailres = false; 
                 
    return mailres; 
} 

function checkemail(email){ 

	var ind1, ind2, ind3; 

	ind1 = email.indexOf('@'); 
	ind2 = email.indexOf('.'); 
	ind3 = email.lastIndexOf('@'); 

	if ((ind1<=0) || (ind2<ind1) || (ind3 != ind1)) 
      return false; 
	else 
     return true;
}


//Comprueba que una cadena es correcta y sigue el planteamiento nombre@dominio.

function checkemail2(cadena) {

	var plant = /[^\w^@^\.^-]+/gi
	var valor = true

	if (plant.test(cadena))
		valor = false;
	else{
	     plant =/(^\w+)(@{1})([\w\.-]+$)/i
	     if (plant.test(cadena))
		 	valor = true;
	     else 
		 	valor = false;
	} 
}



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Verifica que la longitud de un campo se encuentra entre un mínimo y un máximo
function verifyLength(field, minLength, maxLength){
	var texto = field.value;
	if (texto.length<minLength || texto.length>maxLength) {
		alert("Valor no permitido");
		field.value = "";
		if (field.focus) field.focus();
		return false;
	}
	return true;
}


//Verifica que solo e introduzca numeros. Mejora el problema de parseInt y parseFloat, los cuales tragan con
//números como 9A832, o 0382 (al cual quita el 0)
function verifyNumbers(field){
	var numero = field.value;
	for (var i=0; i<numero.length; i++)
		if ("1234567890".indexOf(numero.charAt(i))==-1) {
			alert("Valor no permitido");
			field.value = "";
			if (field.focus) field.focus();
			return false;
		}
		return true;
}


//Verifica que no existen espacios en un campo
function verifyNoSpaces(field){
	var texto = field.value;
	
	if (texto.indexOf(" ")!=-1) {
		alert("Valor no permitido");
		field.value = "";
		if (field.focus) field.focus();
		return false;
	}
	return true;
}

//Verifica que no existan campos vacíos en un formulario. Estos campos tendrán la etiqueta input obligatoriamente
function verifyNoGap(form){
	var array;
	var bien = true;
	
	if (form.getElementsByTagName)
		array = form.getElementsByTagName('input');
	else if (form.elements)
		array = form.elements;
	
	for (var i=0; i<array.length; i++)
		if (!array[i].value)
			bien = false;
	
	if (!bien) alert('Hay campos vacios');
	return bien;
}


//Verifica que únicamente se introduzcan números enteros
function numbersIntegersonly(e){
	return numbersonly(e, false);
}

//Verifica que unicamente haya números enteros
function numbersDecimalonly(e){
	return numbersonly(e, true);
}

function numbersonly(e, decimal) {
	if (!e) e = window.event;///Para resolver las diferencias entre IE y el standard
	var valor;

	if (e.target) valor = e.target.value;
	else 
		if (e.srcElement) valor = e.srcElement.value;

	var key;
	if (e.keyCode) key = e.keyCode;///
	else 
		if (e.which) key = e.which;

	var keychar = String.fromCharCode(key);
	// control keys
	if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27))
		return true;
	// numbers
	else 
		if (("0123456789").indexOf(keychar) != -1)
			return true;
	// decimal point jump
		else 
			if (decimal && (keychar == ".") && valor.indexOf('.')==-1) {
				if (e.target) field = e.target;//Gecko y Opera
				else 
					if (e.srcElement) field = e.srcElement;//IE
				if (field.nodeType == 3) // defeat Safari bug (!=1)
					field = tarfieldg.parentNode;
				if (document.focus){
					var i;
					for(i=0; i<field.form.elements.length; i++)
						if (field.form.elements[i]==field){
							field.form.elements[i+1].focus();
							break;
						}
				}
				return false;
			}
	return false;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function validarEmail(){
	var msg = ""
		
	if ($F('nombre')==""){
		msg += " Nombre: campo obligatorio \n"
	}
	if (($F('telefono')=="") && ($F('email')=="")){
		msg += " Email o Teléfono: indique uno de los campos"
	}
	
	if (($F('email')!="")&&(mail($F('email'))==false)){
		msg += " Email: valor no correcto "
	}
	if (msg!="") alert ("Errores: \n\n" + msg) 
	return (msg == "")
}



