	//tipos de validacion
		var TIPO_INTEGER = 0;
		var TIPO_INTEGER_SIGNADO = 1;
		var TIPO_FLOAT = 2;
		var TIPO_FLOAT_SIGNADO = 3;
		var TIPO_MAIL = 4;
		var TIPO_OBLIGATORIO = 5;
		var TIPO_CODIGO_POSTAL = 6;
		var TIPO_DNI = 7;
		var TIPO_LIMITES = 8;
		var TIPO_DIA = 9;
		var TIPO_MES = 10;
		var TIPO_ANYO = 11;
		var TIPO_TELEFONO = 12;
		var TIPO_FECHA = 13;
		var TIPO_PRIVACIDAD = 14;
		var TIPO_STRING = 15
	//expresiones de validacion
		var patrones = new Array();
			patrones[0] = /(^(\d{1,3}){1}([.](\d{3}))*$)|^\d+$|^$/
			patrones[1] = /(^(?:\+|-)?(\d{1,3}){1}([.](\d{3}))*$)|^(?:\+|-)?\d+$|^$/
			patrones[2] = /(^(\d{1,3}){1}([.](\d{3}))*([,]\d+)?$)|^\d+([,]\d+)?$|^$/
			patrones[3] = /(^(?:\+|-)?(\d{1,3}){1}([.](\d{3}))*([,]\d+)?$)|^(?:\+|-)?\d+([,]\d+)?$|^$/
			patrones[4] = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$|^$/
			patrones[5] = /^$/
			patrones[6] = /^([1-9]{2}|[0-9][1-9]|[1-9])[0-9]{3}$|^$/
			patrones[7] = /^(\d{8}([a-z]|[A-Z]))$|^$/
			patrones[8] = /^$/
			patrones[9] = /^(0[1-9]|1\d|2\d|3[0-1]|[1-9])?$|^$|dd/
			patrones[10] = /^(0[1-9]|1[0-2]|[1-9])?$|^$|mm/
			patrones[11] = /^(1[0-9][0-9][0-9]|2[0-9][0-9][0-9]|3[0-9][0-9][0-9])?$|^$|aaaa/
			patrones[12] = /^[6,9]{1}[0-9]{8}$|^$/
			patrones[13] = /^$/
			patrones[14] = /^$/
			patrones[15] = /^$/
	//mensajes de validacion incorrecta	
		var aceptadosCA = new Array();
			aceptadosCA[0] = "El camp $campo és incorrecte. \n\tFormats vàlids:   \t#.###   ####";
			aceptadosCA[1] = "El camp $campo és incorrecte. \n\tFormats vàlids:   \t#.###   ####   +#.###   -#.###   +####   -####";			
			aceptadosCA[2] = "El camp $campo és incorrecte. \n\tFormats vàlids:   \t#.###,##   ####,##   ###";
			aceptadosCA[3] = "El camp $campo és incorrecte. \n\tFormats vàlids:   \t#.###,##   ####,##   ###   +#.###,##   +####,##   +###   -#.###,##   -####,##   -###";
			aceptadosCA[4] = "El camp $campo és incorrecte.";
			aceptadosCA[5] = "És necessari complimentar el camp $campo";
			aceptadosCA[6] = "El camp $campo és incorrecte.";
			aceptadosCA[7] = "El camp $campo és incorrecte.";
			aceptadosCA[8] = "";
			aceptadosCA[9] = "El camp $campo és incorrecte";
			aceptadosCA[10] = "El camp $campo és incorrecte";
			aceptadosCA[11] = "El camp $campo és incorrecte";
			aceptadosCA[12] = "El camp $campo és incorrecte";
			aceptadosCA[13] = "La data de naixement és incorrecta.";
			aceptadosCA[14] = "És necessari que indiqui que ha llegit i accepta la Política de protecció de dades de caràcter personal";
			aceptadosCA[15] = "El camp $campo és incorrecte";
		var aceptadosES = new Array(); 
			aceptadosES[0] = "El campo $campo es incorrecto. \n\tFormatos válidos:   \t#.###   ####";
			aceptadosES[1] = "El campo $campo es incorrecto. \n\tFormatos válidos:   \t#.###   ####   +#.###   -#.###   +####   -####";			
			aceptadosES[2] = "El campo $campo es incorrecto. \n\tFormatos válidos:   \t#.###,##   ####,##   ###";
			aceptadosES[3] = "El campo $campo es incorrecto. \n\tFormatos válidos:   \t#.###,##   ####,##   ###   +#.###,##   +####,##   +###   -#.###,##   -####,##   -###";
			aceptadosES[4] = "El campo $campo es incorrecto.";
			aceptadosES[5] = "Es necesario cumplimentar el campo $campo";
			aceptadosES[6] = "El campo $campo es incorrecto.";
			aceptadosES[7] = "El campo $campo es incorrecto.";
			aceptadosES[8] = "";
			aceptadosES[9] = "El campo $campo es incorrecto";
			aceptadosES[10] = "El campo $campo es incorrecto";
			aceptadosES[11] = "El campo $campo es incorrecto";
			aceptadosES[12] = "El campo $campo es incorrecto";
			aceptadosES[13] = "La fecha de nacimiento es incorrecta.";
			aceptadosES[14] = "Es necesario que indique que ha leído y acepta la Política de protección de datos de carácter personal.";
			aceptadosCA[15] = "El campo $campo es incorrecto";
		
	//funciones
		function isValid(dato, tipo, numDecimales){
			if(tipo == TIPO_OBLIGATORIO || tipo == TIPO_PRIVACIDAD){
				if (dato.trim() == ""){
					return false;
				}
				return true;
			}else if(tipo == TIPO_FECHA){
				try{
					fechaAux = dato.replaceAll("/","");
					if (fechaAux.length == 0){return true;}
					if (fechaAux == "ddmmaaaa"){return true;}
					if(fechaAux.length != 8){ return false;}
					dia = fechaAux.substring(0,2);
					mes = parseInt(fechaAux.substring(2,4),10)-1;
					anyo = fechaAux.substring(4,8);
					myFecha = new Date(anyo,mes,dia);
					if (isNaN(myFecha)){
						return false;
					}
					if (dia != myFecha.getDate() || mes != myFecha.getMonth() || anyo != myFecha.getFullYear()){
						return false;
					}
					return true;
				}catch(e){
					return false;
				}
			}
			return patrones[tipo].test(dato);
		}
		function validarDatoConMensaje(dato, nombreCampo, tipo, idioma){
			if (!isValid(dato, tipo, idioma)){
				alert(getValoresAceptados(nombreCampo,tipo, idioma));
				return false;
			}
			return true;
		}
		function getValoresAceptados(nombreCampo, tipo, idioma){
			nombreCampo = nombreCampo.replaceAll(":","");
			if(aceptadosCA[tipo].split("$campo").length > 1){
				if (idioma == "CA"){
					return aceptadosCA[tipo].split("$campo")[0] + "\"" + nombreCampo + "\"" + aceptadosCA[tipo].split("$campo")[1];
				}
				return aceptadosES[tipo].split("$campo")[0] + "\"" + nombreCampo + "\"" + aceptadosES[tipo].split("$campo")[1];
			}else{
				if (idioma == "CA"){
					return aceptadosCA[tipo]
				}
				return aceptadosES[tipo];
			}
		}
	//funciones auxiliares
		String.prototype.trim = function(){
			return this.replace( /^\s+|\s+$/, "" );
		}
		String.prototype.replaceAll = function(pcFrom, pcTo){
			var i = this.indexOf(pcFrom);
			var c = this;
			while (i > -1){
				c = c.replace(pcFrom, pcTo);
				i = c.indexOf(pcFrom);
			}
			return c;
		} 