(function($) {

$.fn.extend({
	validateForm: function() {
		this.each(function() {
			$(this).find(':submit').each(function() { this.disabled = true; });	
			$(this).find(':text, textarea')
				.data('isValid', true)
				.keyup(function() {
					var validatedForm = $(this).parents('form')[0];
					$(validatedForm).executeValidation();
				})
				.focus(function() { $(this).css('color', '#000000'); })
				.blur(function() { if ($(this).data('isValid') != true) $(this).css('color', '#FF0000'); });
			$(this).executeValidation();
		});
	},
	executeValidation: function() {
		var formIsValid = 
			this.find(':text.text-validation, textarea.text-validation').validateText() & 
			this.find(':text.email-validation').validateEmail() &
			this.find(':text.number-validation').validateNumber();
		if (formIsValid) {
			this.find(':submit').each(function() { this.disabled = false; $(this).addClass('active'); });
		}
		else {
			this.find(':submit').each(function() { this.disabled = true; $(this).removeClass('active'); });
		}

	},
	validateText: function() {
		var valid = true;
		this.each(function() { 	
			//var text = $.trim(this.value);		
			var text=this.value;
			$(this).data('isValid', (text.length > 1 && text[0]!=' '));
			valid = valid && $(this).data('isValid'); 
		});
		return valid;
	},
	validateEmail: function() {
		var valid = true;
		var rx = new RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/);
		this.each(function() { 
			var matches = rx.exec(this.value);
			$(this).data('isValid',  (matches != null && this.value == matches[0]));			
			valid = valid && $(this).data('isValid'); 
		});
		return valid;
	},
	validateNumber: function() {
		var valid = true;
		this.each(function() { 
			$(this).data('isValid', !isNaN(Number(this.value))); 
			valid = valid && $(this).data('isValid');
		});
		return valid;
	}	
});

})(jQuery);

jQuery(function($) {
	$('form.needs-validation').validateForm();
});