jQuery.noConflict();

jQuery(document).ready(function() {
	jQuery("#postal_code1").keyup(function(){
		if (jQuery(this).val().length == 5){
			jQuery('#postal_code2').focus();
		}
	});
	
	validators = new Array ('equal','numeric', 'string', 'email', 'cpf', 'telf');
	jQuery('input[class*="validator"]').bind('input keyup keydown change', function(){
		validateElement(jQuery(this));
	});
	
	jQuery('input[class*="required"]').focusout(function(){
		match = !jQuery(this).next().hasClass('error');
		//match &= validateElement(jQuery(this));
		match &= requireValidator(jQuery(this).val());
		validatorLabel(jQuery(this), match);
	});
	
	jQuery('form[class*="validator"]').submit(function(event){
		stop = false;
		jQuery(this + ':input').each(function(){
			if (jQuery(this).is(':visible')){
				if (jQuery(this).hasClass('required')){
					match = validateElement(jQuery(this));
					match &= requireValidator(jQuery(this).val());
					validatorLabel(jQuery(this), match);
				}
				if (jQuery(this).next().hasClass('error')){
				stop = true;
				}
			}
		});
		if (stop){
			event.preventDefault();
		}
	});

	function validateElement(element){		
		classes = element.attr('class').split(' ');				
		match = true;
		seed = false;
		validators_length = validators.length;
		classes_length = classes.length;
		for (v=0; v<validators_length; v++){
			for (c=0; c<classes_length; c++){
				pattern = new RegExp(validators[v]);
				if (pattern.test(classes[c])){
					tofind = validators[v];
					tofind_length = (tofind.length)+1;
					tomatch = element.val();
					param = classes[c].substr(classes[c].indexOf(tofind)+tofind_length);
					if (tofind == 'equal' && element.hasClass('master')){
						seed = param;
					} else	{						
						match &= eval(tofind+'Validator("'+tomatch+'","'+param+'")');
					}	
				}
			}
		}
		validatorLabel(element, match);
		if (seed != false){
			slave = jQuery('input[class*="equal_'+seed+' slave"]');
			validateElement(slave);
		}		
		return match;
	}
	function validatorLabel (element, match, bInfo){
		classname = (bInfo)?'info':(match == true)?'ok':'error';
		bclass = element.next().hasClass('validator');
		if (! bclass){
			container = createInsigniaContainer(element, classname);
			element.after(container);
		}
		else{
			container = element.next();
			updateInsigniaContainer(element, container, classname);
		}
	}

	function createInsigniaContainer (element, classname){
		return '<div class="validator ticket '+classname+'"><div>';
	}
	
	function updateInsigniaContainer(element, container, classname){
		container.attr('class', 'validator ticket '+classname);
		//if (classname == 'ok'){
		//	container.empty();
		//}
		//else{
			//if (container.is(':empty')){
			//	description = document.createElement('span');
			//	container.append(description);
			//}
			//container.children().html('texto_ejemplo');
		//}
	}
	
	function numericValidator (tomatch, numNums){
		regex = (numNums != 0)
					?new RegExp("^[0-9]{"+numNums+"}$")
					:/^[0-9]+$/;			
		return regex.test(tomatch);
	}
	function telfValidator (tomatch, param){			
			regex = /^\([0-9]{2}\)[0-9]{4}[-]+[0-9]{4}$/;
			return regex.test(tomatch);
		}
	function stringValidator (tomatch, allowWhiteSpace){
		regex = (allowWhiteSpace == 0)
					?/^[\w\s]+$/
					:/^[\w]+$/;
		return regex.test(tomatch);
	}
	function cpfValidator (tomatch, param){
		regex = /^[0-9]{3}[.]?[0-9]{3}[.]?[0-9]{3}[-]?[0-9]{2}$/;
		return regex.test(tomatch);
		if (regex.test(tomatch)){
			cpf = tomatch;
			cpf = cpf.split('.').join('');
			cpf = cpf.split('-').join('');

			soma = 0;
			if (cpf.length != 11){
				return false;
			}	
			for (i = 0; i < 9; i++) {
				soma += ((i+1) * cpf[i]);
			}
			d1 = (soma % 11);
			if (d1 == 10) {
					d1 = 0;
			}

			soma = 0;
			for (i = 9, j = 0; i > 0; i--, j++) {
				soma += (i * cpf[j]);
			}
			d2 = (soma % 11);
			if (d2 == 10) {
				d2 = 0;
			}
			if (d1 == cpf[9] && d2 == cpf[10]) {
				return true;
			}
			else {
				return false;
			}
		} else {
			return false;
		}
	}
	function emailValidator (tomatch, param){
		regex = /^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9]{2,4})+$/;
		return regex.test(tomatch);
	}
	function equalValidator (tomatch, type){
		equal_elements = jQuery('input[class*=equal_'+type+']');
		str1 = equal_elements[0].value;
		str2 = equal_elements[1].value;
		return (str1 == str2)?(str1 != '')?true:false:false;
	}
	function requireValidator(tomatch){
		return (tomatch.length > 0)?true:false;
	}

});
