// JavaScript Document
	function obligatorios(){
		/*Comprueba que los campos obligatorios hayan sido rellenados
		Los argumentos deben ser cadenas de texto y llevar la siguiente estructura:
		Argumento 0: Nombre de formulario
		Argumento 1: Nombre de campo
		Argumento 2: Tipo de dato del campo anterior
		Argumento 3: Nombre de campo
		Argumento 4: Tipo de dato del campo anterior
		...
		Los tipos de datos posibles son:
		'texto','select','checkbox'*/
		args=obligatorios.arguments;
		formulario=document.forms[args[0]];
		//alert(args.length);
		for (i=1;i<args.length;i+=2){
		//alert(args[i]+"="+args[i+1]);
		//alert(formulario[args[i]].value);
			switch(args[i+1]){
				case "checkbox":
					if(!formulario[args[i]].checked){
						alert("Marque la casilla '"+args[i]+"' para continuar.")
						return false;
					}
					break;
				default:
					if(formulario[args[i]].value==""){
						alert("El campo '"+args[i]+"' es obligatorio.")
						return false;
					}
					break;
			}
		}
		return true;
	}
	
	function comprobarCampos (){
		/*Comprueba los campos de un formulario que se han pasado como argumentos
		Los argumentos deben ser cadenas de texto y llevar la siguiente estructura:
		Argumento 0: Nombre de formulario
		Argumento 1: Nombre de campo
		Argumento 2: Tipo de dato del campo anterior
		Argumento 3: Nombre de campo
		Argumento 4: Tipo de dato del campo anterior
		...
		Los tipos de datos posibles son:
		'entero','flotante','email'*/
		args=comprobarCampos.arguments;
		formulario=document.forms[args[0]];
		for (i=1;i<args.length;i+=2){
		//alert(args[i]+"="+args[i+1]);
			switch(args[i+1]){
			
				case "entero":
					if (! allValidChars(formulario[args[i]].value,args[i+1])) {  
						alert("El campo '"+args[i]+"' solo puede contener n&uacute;meros")
						return false;
					};
					break;
				case "float":
					if (! allValidChars(formulario[args[i]].value,args[i+1])) {  
						alert("El campo '"+args[i]+"' solo puede contener n&uacute;meros decimales. \nUse el car&aacute;cter coma como separador decimal.")
						return false;
					};
					break;
				case "email":
					if (! isValidEmail(formulario[args[i]].value,true)) {
        				alert("Email incorrecto");
        				return false;
					}
					break;
				case "hora":
        				hora=formulario[args[i]].value;
						if (hora.length>4) {alert("muy largo");return}
						if (hora.length!=4) {alert("introducir HHMM");return}
						a=hora.charAt(0)
						b=hora.charAt(1)
						c=hora.charAt(2)
						if (a>=2 && b>3) {alert("hora mal :(");return}
						if (c>5) {alert("minutos mal :(");return}
						alert("hora bien. :)")

					break;
				case "foto":
					var foto=formulario[args[i]].value;				
					if (foto!=""){
						if (foto.lastIndexOf('.jpg')==-1 && foto.lastIndexOf('.gif')==-1 && foto.lastIndexOf('.jpeg')==-1 && foto.lastIndexOf('.JPG')==-1 && foto.lastIndexOf('.JPEG')==-1 && foto.lastIndexOf('.GIF')==-1){
						alert("Formato de imagen no valido");
        				return false;
						}
					}
					break;
				case "documento":
					var foto=formulario[args[i]].value;				
					if (foto!=""){
						if (foto.lastIndexOf('.pdf')==-1 && foto.lastIndexOf('.doc')==-1 && foto.lastIndexOf('.xls')==-1 && foto.lastIndexOf('.PDF')==-1 && foto.lastIndexOf('.DOC')==-1 && foto.lastIndexOf('.XLS')==-1 && foto.lastIndexOf('.ppt')==-1 && foto.lastIndexOf('.PPT')==-1){
						alert("Formato de documento no valido");
        				return false;
						}
					}
					break;
				case "documento_pdf":
					var foto=formulario[args[i]].value;				
					if (foto!=""){
						if (foto.lastIndexOf('.pdf')==-1 && foto.lastIndexOf('.PDF')==-1 ){
						alert("Formato de documento no valido, tiene que ser un pdf");
        				return false;
						}
					}
					break;
				case "fecha": //recibe una fecha en formato español y ha de comprobar si es un valor válido
					if (! allValidChars(formulario[args[i]].value,args[i+1])) {  
						alert("El campo '"+args[i]+"' solo puede contener fechas del formato dd/mm/aaaa")
						return false;
					}else{
						var RealFecha= new Date()	// Para sacar la fecha de hoy
						// Cadena Año
						var Ano_inicio= new String(formulario[args[i]].value.substring(formulario[args[i]].value.lastIndexOf("/")+1,formulario[args[i]].value.length))
						// Cadena Mes
						var Mes_inicio= new String(formulario[args[i]].value.substring(formulario[args[i]].value.indexOf("/")+1,formulario[args[i]].value.lastIndexOf("/")))
						// Cadena Día
						var Dia_inicio= new String(formulario[args[i]].value.substring(0,formulario[args[i]].value.indexOf("/")))
						if (isNaN(Ano_inicio) || Ano_inicio.length<4 || parseFloat(Ano_inicio)<1900){
							alert('Formato de fecha inv&aacute;lido dd/mm/aaaa - A&nacute;o inv&aacute;lido')
							formulario[args[i]].value="";
							return false;
						}else if (isNaN(Mes_inicio) || parseFloat(Mes_inicio)<1 || parseFloat(Mes_inicio)>12){
							alert('Formato de fecha inv&aacute;lido dd/mm/aaaa - Mes inv&aacute;lido')
							formulario[args[i]].value="";
							return false;
						}else if (isNaN(Dia_inicio) || parseInt(Dia_inicio, 10)<1 || parseInt(Dia_inicio, 10)>31){
							alert('Formato de fecha inv&aacute;lido dd/mm/aaaa - D&iacute;a inv&aacute;lido')
							formulario[args[i]].value="";
							return false;
						}else if ((Mes_inicio==4 || Mes_inicio==6 || Mes_inicio==9 || Mes_inicio==11 || Mes_inicio==2) && (Mes_inicio==2 && Dia_inicio > 28 || Dia_inicio>30)) {
							alert('Formato de fecha inv&aacute;lido dd/mm/aaaa - D&iacute;a inv&aacute;lido')
							formulario[args[i]].value="";
							return false;
						}
	
					}
					break;
			}
		}
		return true;
	}
	
	function isValidEmail(email, required) {
		if (required==undefined) {   // if not specified, assume it's required
			required=true;
		}
		if (email==null) {
			if (required) {
				return false;
			}
			return true;
		}
		if (email.length==0) {  
			if (required) {
				return false;
			}
			return true;
		}
		if (! allValidChars(email,"email")) {  // check to make sure all characters are valid
			return false;
		}
		if (email.indexOf("@") < 1) { //  must contain @, and it must not be the first character
			return false;
		} else if (email.lastIndexOf(".") <= email.indexOf("@")) {  // last dot must be after the @
			return false;
		} else if (email.indexOf("@") == email.length) {  // @ must not be the last character
			return false;
		} else if (email.indexOf("..") >=0) { // two periods in a row is not valid
		return false;
		} else if (email.indexOf(".") == email.length) {  // . must not be the last character
		return false;
		}
		return true;
	}
	
	function allValidChars(str,type) {
	  var parsed = true;
	  switch(type){
	  case "email":
	  	var validchars = "abcdefghijklmnopqrstuvwxyz0123456789@.-_";
	  	break;
	  case "entero":
	  	var validchars = "0123456789";
	  	break;
	  case "float":
	  	var validchars = "0123456789,";
	  	break;
	case "fecha":
	  	var validchars = "0123456789/";
	  	break;
	  }
	  for (var i=0; i < str.length; i++) {
		var letter = str.charAt(i).toLowerCase();
		if (validchars.indexOf(letter) != -1)
		  continue;
		parsed = false;
		break;
	  }
	  return parsed;
	}
	

function comprobarCampossinformulario (){
		/*Comprueba los campos de un formulario que se han pasado como argumentos
		Los argumentos deben ser cadenas de texto y llevar la siguiente estructura:
		Argumento 1: Nombre de campo
		Argumento 2: Tipo de dato del campo anterior
		Argumento 3: Nombre de campo
		Argumento 4: Tipo de dato del campo anterior
		...
		Los tipos de datos posibles son:
		'entero','flotante','email'*/
		args=comprobarCampossinformulario.arguments;
		for (i=0;i<args.length;i+=2){
		//alert(args[i]+"="+args[i+1]);
			switch(args[i+1]){
			
				case "entero":
					if (! allValidChars(args[i],args[i+1])) {  
						alert("El campo '"+args[i]+"' solo puede contener n&uacute;meros")
						return "ko";
					};
					break;
				case "float":
					if (! allValidChars(args[i],args[i+1])) {  
						alert("El campo '"+args[i]+"' solo puede contener n&uacute;meros decimales. \nUse el car&aacute;cter coma como separador decimal.")
						return "ko";
					};
					break;
				case "email":
					if (! isValidEmail(args[i],true)) {
        				alert("Email incorrecto");
        				return "ko";
					}
					break;
				case "foto":
					var foto=args[i];				
					if (foto!=""){
						if (foto.lastIndexOf('.jpg')==-1 && foto.lastIndexOf('.gif')==-1 && foto.lastIndexOf('.jpeg')==-1 && foto.lastIndexOf('.JPG')==-1 && foto.lastIndexOf('.JPEG')==-1 && foto.lastIndexOf('.GIF')==-1){
						alert("Formato de imagen no valido");
        				return "ko";
					}
					}
					break;
			}
		}
		return "ok";
	}
	

function comprobar_largos (campo,largo_maximo,ancho_caja,alto_minimo){
		var d=campo;
		ancho_caja=ancho_caja-7;
		var nuevo_alto=alto_minimo;
		if (campo.value.length>ancho_caja){
			nuevo_alto=(campo.value.length/ancho_caja)+3;
			//alert(campo.value.length+"alto="+nuevo_alto);
			if (nuevo_alto>=alto_minimo){
					campo.rows=nuevo_alto;
					//alert(nuevo_alto);
			}
		}
		
		if (campo.value.length>largo_maximo) {
			alert("El valor para el campo no puede superar "+largo_maximo+" caracteres.");
			campo.value=campo.value.substr(0, largo_maximo)
		}
	}


function agrandar(campo,columnas,filas){
	var d=campo;
	d.cols=columnas;
	d.rows=filas;
	//recalculamos en caso que el contenido sea mayor
	ancho_caja=columnas-7;
	if (campo.value.length>ancho_caja){
			nuevo_alto=(campo.value.length/ancho_caja)+3;
			//alert(campo.value.length+"alto="+nuevo_alto);
			if (nuevo_alto>=filas){
					campo.rows=nuevo_alto;
					//alert(nuevo_alto);
			}
		}
}

function achicar(campo,columnas,filas){
	var d=campo;
	d.cols=columnas;
	d.rows=filas;
	
}

