function replace_str(texto,s1,s2){
	return texto.split(s1).join(s2);
}

function createError(element, error){
	ident = element.attr('name').replace('[]',"");
	ident = replace_str(ident,' ','_');
	ident = replace_str(ident,'/','_');
	
	if(error){
		element.parents('li').addClass('error');
		if($('.'+ident+'_p').size()>0){
			$('.'+ident+'_p').remove();
		}
		element.parents('li').createPrepend('p', { 'class' : ident+'_p typeError'}, error);
	}
	else{
		element.parents('li').removeClass('error');	
		$('.'+ident+'_p').remove();
	}
				 
}

$(document).ready(function() {
	//Verificador de Ids para los Formularios.
	var formId = 0;
	var values = new Array();
	$('form').each(function(){
		if(!$(this).attr('id')){
			$(this).attr('id', 'form_'+formId);
			formId++;
		}
	});					  	   
		
	//Control para los label for=""	
	$('label[for]').each(function(){
		var form = $(this).parents('form');	
		var oldValue = $(this).attr('for');
		$(this).attr('for', $("#"+form.attr('id')+" input[id^='"+oldValue+"'], #"+form.attr('id')+" select[id^='"+oldValue+"'], #"+form.attr('id')+" textarea[id^='"+oldValue+"']").attr('id'));
	});
		
	//Validación
	$(':submit, :image').click(function(){
		var form = $(this).parents('form');
		var gloError = 0;
		
		$('#'+form.attr('id')+' input, #'+form.attr('id')+' select, #'+form.attr('id')+' textarea').each(function(){
			if($(this).is(':visible')){
				var info = $(this).attr('id').split('.');
				info.splice(0,1);
				
				if($(this).is(':text')|| $(this).is(':select') || $(this).is(':textarea')){
					var error = "";
					for(var type in info){
						switch(info[type]){
							case 'r':
								if(!$(this).val() || $(this).val() == ''){
									error = "El campo no puede estar vacio";	
									gloError++;
									
								}
							break;
							case 'x':
								var objRegExp  = /(^[a-zA-Z0-9]{9})$/;
								if(!objRegExp.test($(this).val()) && $(this).val() && !error){
									error = "No es un CIF/NIF valido";
									gloError++;
								}
							break;
							case 'm':
								if($(this).val().length > 200){
									error = "Max 200 caracteres";
									gloError++;
								}
							break;
							case 'n':
								var objRegExp  = /(^[0-9]*)$/;
								if(!objRegExp.test($(this).val()) && $(this).val() && !error){
									error = "Campo numérico";
									gloError++;
								}
							break;
							case 'e':
								var objRegExp  = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
								if(!objRegExp.test($(this).val()) && $(this).val() && !error){
									error = "El email no es correcto";
									gloError++;
								}
							break;
							
							case 'c':
								var objRegExp  = /(^([0-9]{5,5}))$/;
								if(!objRegExp.test($(this).val()) && $(this).val() && !error){
									error = "El código postal es erroneo";
									gloError++;
								}
							break;
							case 'p':
								var objRegExp  = /(^([0-9]{9,9}))$/;
								if(!objRegExp.test($(this).val()) && $(this).val() && !error){
									error = "El numero de teléfono es erroneo";
									gloError++;
								}
							break;
							

						}
						if(info[type].indexOf('>')>=0 && !error){
							longuitud = info[type].replace('>',"");
							error = "El campo no puede sobrepasar de "+longuitud+" caracteres";
							gloError++;
						}
						if(info[type].indexOf('(<')>=0 && !error){
							longuitud = info[type].replace('<',"")
							error = "El campo debe contener minimo "+longuitud+" caracteres";
							gloError++;
						}
						
					}
					if(info.length > 0)createError($(this), error);
					
				}
				
				if($(this).is(':radio') || $(this).is(':checkbox')){
					if($(this).is(':visible') && $(this).is('[id]')){
						var info = $(this).attr('id').split('.');
						values[$(this).attr('name')] = $("input[name='"+$(this).attr('name')+"']:checked").size();
						var error = "";
						for(var type in info){
							switch(info[type]){
								case 'r':
									if ($("input[name='"+$(this).attr('name')+"']").is(':checked')){
										createError($(this), error);
									}
									else{
										error = "selecciona una opcion";
										createError($(this), error);
										gloError++;
									}
								break;
							}
							
							if(info[type].indexOf('m')>=0 && !error){
								longuitud = info[type].replace('m',"");	
								if(longuitud > values[$(this).attr('name')]){
									error = "El campo debe contener minimo "+longuitud+" caracteres";
									createError($(this), error);
									gloError++;
								}
								else{
									createError($(this), error);
								}							
							}
						}
					}
				}
				
				
				
				
			}
		});
		if(gloError){
			return false;
		}
		else{
			return true;	
		}
		
	
	});
});
