// JavaScript Document
(function($){
    $.fn.valida = function(settings){
		
        var opts = $.extend({}, $.fn.valida.defaults, settings);
		
		return this.each(function(settings){
			var conf = $.extend({}, opts, $(this).data());
			var elem = $(this);
			if(conf.required){
				validar(elem);
			}else{
				if($(elem).val()!=''){
					validar(elem);
				}else{
					$(elem).addClass(conf.classValid);
					$(elem).removeClass(conf.classError);
				}
			}
			if(conf.lcapital){
				txt=ucWords($(this).val())
				$(this).val(txt.trim());
			}
			
			
			
		elem.keypress(function(e){
			
			switch(conf.rulers){
				case 1: // 1: alfanumerico completo
					if(e.which!=0 && e.which!=8 && e.which!=13 && e.which!=32  &&  e.which!=35 &&  e.which!=40 &&  e.which!=41 &&  e.which!=95
					 && (e.which<44 ||  e.which>46)  && (e.which<48 || e.which>90) && (e.which<97 || e.which>122)  && e.which!=170 && (e.which<176 ||  e.which>179) && (e.which<185 ||  e.which>186) && (e.which<188 ||  e.which>191) && e.which!=193 
					  && e.which!=201 && e.which!=205 && e.which!=209 && e.which!=211 && e.which!=218 && e.which!=220 && e.which!=225 && e.which!=233 
					  && e.which!=237 && e.which!=241 && e.which!=243 && e.which!=250 && e.which!=252){	return false }
				break;
				
				case 2: // 2: solo letras
					if(e.which!=0 && e.which!=8 && e.which!=13 && e.which!=32 && (e.which<65 || e.which>90) && (e.which<97 || e.which>122) && e.which!= 164 && e.which!=165 && e.which!=193 && e.which!=201 && e.which!=205 && e.which!=209 && e.which!=211 && e.which!=218 && e.which!=220 && e.which!=225 
					  && e.which!=233 && e.which!=237 && e.which!=241 && e.which!=243 && e.which!=250 && e.which!=252){	return false }
				
				break;
				
				case 3:  //3: solo numeros
					if(e.which!=0 && e.which!=8 && e.which!=13 && (e.which<48 || e.which>57) ){ 
						return false	
					}
				break;
				
				case 4:  // 4: solo numeros y letras
					if(e.which!=0 && e.which!=8 && e.which!=13 && e.which!=32 && (e.which<65 || e.which>90) && (e.which<97 || e.which>122)  
					  && e.which!=193 && e.which!=201 && e.which!=205 && e.which!=209 && e.which!=211 && e.which!=218 && e.which!=220 && e.which!=225 
					  && e.which!=233 && e.which!=237 && e.which!=241 && e.which!=243 && e.which!=250 && e.which!=252 && (e.which<48 || e.which>57)){	return false }
				break;
			}
		})
		
		elem.keyup(function(){
			if(conf.required){
				validar($(this));
			}else{
				if($(this).val()!=''){
					validar($(this));
				}else{
					$(elem).addClass(conf.classValid);
					$(elem).removeClass(conf.classError);
				}
			}
		})	
		
	function validar(elem){	
		var valor=$(elem).val().trim()
		if(valor.length<conf.mincar){
			$(elem).addClass(conf.classError);
			$(elem).removeClass(conf.classValid);
		}else{
			op=conf.tipo.toLowerCase()			
			switch(op){
				case 'em':
					if(valor!=''){
						if((/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test($(elem).val()))){
							$(elem).addClass(conf.classValid);
							$(elem).removeClass(conf.classError);		
						}else{
							$(elem).addClass(conf.classError);
							$(elem).removeClass(conf.classValid);
						}
					}else{
						$(elem).addClass(conf.classValid);
						$(elem).removeClass(conf.classError);		
					}
					
				break;
				
				case 'f': // tipo dato fecha
					var RegExPattern=/^\d{2,4}\-\d{1,2}\-\d{1,2}$/
					if (!valor.match(RegExPattern)) {
						$(elem).addClass(conf.classError);
						$(elem).removeClass(conf.classValid);
					}
					else {
						$(elem).addClass(conf.classValid);
						$(elem).removeClass(conf.classError);
					}
				break;
				
				case 'fh': // tipo dato fecha hora
					var RegExPattern=/^\d{2,4}\-\d{1,2}\-\d{1,2}\ \d{1,2}\:\d{1,2}\:{0,1}\d{0,2}$/
					if (!valor.match(RegExPattern)) {
						$(elem).addClass(conf.classError);
						$(elem).removeClass(conf.classValid);
					}
					else {
						$(elem).addClass(conf.classValid);
						$(elem).removeClass(conf.classError);
					}
				break;
				case '0':
					$(elem).addClass(conf.classValid);
					$(elem).removeClass(conf.classError);
				break;
				default:
					$(elem).addClass(conf.classValid);
					$(elem).removeClass(conf.classError);
				}
		}
	}
		
		elem.focusout(function(){	
			if(conf.lcapital){ 
				txt=ucWords($(this).val())
				$(this).val(txt.trim());
			}
		})
	
		
});// fin this.each
function ucWords(string){
	var arrayWords;
	var returnString = "";
	var len;
	arrayWords = string.split(" ");
	len = arrayWords.length;
	for(i=0;i < len ;i++){
		if(i != (len-1)){
			returnString = returnString+ucFirst(arrayWords[i])+" ";
		}else{
			returnString = returnString+ucFirst(arrayWords[i]);
		}
	}
 return returnString;
}
		
function ucFirst(string){
	return string.substr(0,1).toUpperCase()+string.substr(1,string.length).toLowerCase();
}
}
	$.fn.valida.defaults = {
		mincar:1,
		classError:'campos_error',
		classValid:'campos',
		rulers:1, // 1: alfanumerico completo, 2: solo letras, 3: solo numeros, 4: solo numeros y letras  
		tipo: '0', // 0: sin formato , em: email , fh Fecha Hora, f: fecha, 
		lcapital:true, // determina si la primera letra de cada palabra es mayusculas
		required:true
	}

})(jQuery);		
	

//---------------------------------------------------------------------------------------------------------------
function valfechahora(value, colname) {
	var RegExPattern=/^\d{2,4}\-\d{1,2}\-\d{1,2}\ \d{1,2}\:\d{1,2}\:{0,1}\d{0,2}$/
	value=value.trim()
	if (!value.match(RegExPattern)) 
	   return [false,colname +": Introduza una fecha correcta - (Y-m-d hh:mm) "];
	else 
	   return [true,""];
}