// Comprobacion automatica de un formulario
var extVideo = ["swf"];
var extAudio = ["mp3"];
var extImagen = ["jpg","gif"];

function getForm(nameForm) {
	return (document.all) ? eval("document.forms."+nameForm) : document.forms[nameForm];
}

function checkForm(nameForm, enviar) {
	var f = getForm(nameForm);
	var msg = "";
	
	if (enviar == null) {
		var enviar = false;
	}
	
	//if ((f == null) || (f == 'undefined')) {
		//return true;
	//}

	//alert(f.length);
	for (i=0; i<f.length; i++) {

		var nombre = getProperty(f[i].lang,'nombre');
		var tipo = f[i].type;
		//alert(nombre+" - "+tipo);
		if ((tipo == "text")
				|| (tipo == "textarea")
				|| (tipo == "select")
				|| (tipo == "select-one")
				|| (tipo == "select-multiple")
				|| (tipo == "password")
				|| (tipo == "file")
				|| (tipo == "radio")
				|| (tipo == "checkbox")
				|| (tipo == "hidden")
				) {
//alert(tipo+" - "+nombre);
			if ((tipo == "select-one") || (tipo == "select") || (tipo == "select-multiple")) {
				//alert(f[i].selectedIndex);
				if (f[i].selectedIndex >= 0) {
					var valor = f[i].options[f[i].selectedIndex].text;
				} else {
					var valor = "";
				}
			} else if (tipo == "radio") {
				var valor = "";
				var name = f[i].name;
				eval("var len = f."+name+".length");
				for (j=0; j<len; j++) {
					if (eval("f."+name+"["+j+"].checked")) {
						valor = "1";
						break;
					}
				}
			} else {
				var valor = f[i].value;
			}
			
			// Compruebo si es obligatorio
			if (((getProperty(f[i].lang,'nulo') == "1")) && (valor == "") && (!f[i].disabled)) {
				
				var ko = true;
				if (tipo == "file") {
					var o = f.elements['check_delete_'+f[i].name];
					if (typeof o == "object" && !(o.checked)) {
						ko = false;
					}
				}
				
				if (ko) {
					var nombreCampo = '';
					if (nombre != undefined && nombre != '') {
						nombreCampo = ": "+nombre;
					}
					msg = "Faltan campos obligatorios"+nombreCampo;
					break;
				}
			}
			
			// Compruebo si existe una longitud maxima
			if ((tipo == 'textarea') && (f[i].longitud != undefined) && (f[i].longitud != '')) {
				if (f[i].value.length > f[i].longitud) {
					msg = "Hay campos que exceden longitudes máximas";
					break;
				}
			}
			
			// Hago comprobacion de tipo segun nombre
			var chk = f[i].name;
			// Mail
			if (chk == "email") {
				if ((valor != "") && (!checkEmail(valor))) {
					msg = "El Mail tiene un formato incorrecto";
					break;
				}
			// Password
			} else if ((chk == "password") || (tipo == "password")) {
				if (valor.length < 0) {
					msg = "La contraseña debe contener mas de 6 letras";
					break;
				}
			// Username
			} else if (chk == "username") {
				if (valor.length < 0) {
					msg = "El username debe contener mas de 6 letras";
					break;
				}
			// Ficheros
			} else if ((chk == "file") || (tipo == "file")) {
				var extension = valor.split(".");
				extension = extension[extension.length-1];
				extension = extension.toLowerCase();
				if (extension != "") {
						if (chk == "imagen") {
					    	msg = "La imagen no corresponde a uno de los formatos aceptados.\nFormatos: ";
					    	msg = checkFile(extImagen, extension, msg);
						}
				}
			}
			
		}
	}
	
	if (msg == "") {
		if (enviar) {
			f.submit();
		}
		return true;
	} else {
		if (!f[i].disabled && tipo != "hidden") {
			f[i].focus();
		}
		alert(msg);
		return false;
	}
}

// Comprueba la extension de un fichero
function checkFile(extFile, extension, msg) {
	for (j=0; j<extFile.length; j++) {
		if (extension == extFile[j]) {
			msg = ""; 
			break;
		}
		if ((j + 1) == extFile.length) {
			msg += extFile[j]+".";
		} else {
			msg += extFile[j]+", ";
		}
	}
	return msg;
}

// Comprobacion de un email
function checkEmail(email) {
	 var a= email.indexOf('@'), p=email.lastIndexOf('.'), l=email.length;
		 if (a<1 || a>l-5 || a>p-2 || p<l-5 || p>l-3) return false;
	 var especial=true;
	 for (var i=a+1; i<l; i++) {
	     var c= email.charAt(i).toLowerCase();
     if ((c>='0' && c<='9') || (c>='a' && c<='z')) especial=false;
    	 else if (c=='-' || c=='.') {
       if (especial) return false;
       especial= true;
     }
    	 else return false;
	 }
	 if (especial) return false;
	  return true;
}

// Funcion que comprueba un numero
function checkNumber(myfield, e, dec, neg) {
	var key;
	var keychar;
	
	if (window.event)
	   key = window.event.keyCode;
	else if (e)
	   key = e.which;
	else
	   return true;
	keychar = String.fromCharCode(key);
	
	// control keys
	var ok = false;
	if ((key==null) || (key==0) || (key==8) || 
	    (key==9) || (key==13) || (key==27) ) {
	   ok = true;
	
	} else {
		// valores restringidos
   	ok = true;
		if (!(("-.0123456789").indexOf(keychar) > -1)) {
			ok = false;
		}
   	if (("-" == keychar) && (myfield.value.indexOf(keychar) > -1)) {
			ok = false;
   	}
   	if (("." == keychar) && (myfield.value.indexOf(keychar) > -1)) {
			ok = false;
   	}
   	if (!dec && (".").indexOf(keychar) > -1) {
   		ok = false;
   	}
   	if (!neg && ("-").indexOf(keychar) > -1) {
   		ok = false;
   	}
	}
	return ok;
}


// Funcion que solo acepta decimales
function decimalsonly(myfield, e) {
	return checkNumber(myfield, e, true, true);
}

// Funcion que solo acepta numeros
function numbersonly(myfield, e) {
	return checkNumber(myfield, e, false, true);
}

function getProperty(valor, clave) {
	var selector = valor.split('::');
	for (var i = 0, j = selector.length; i < j; i++) {
		var pro = selector[i].split(':');
		if (pro[0] == clave) {
			return pro[1];
		} 
	}
	return ''; 
}
