$(document).ready(function(){
	$(":input").bind("blur", function(e){
		error_msg = "";
		$('.' + $(this).attr("name") + '_form_error_text').remove();
		error_msg = validate_element(this);
		if (error_msg != "") {
			error = true;
			$(this).addClass("form_error");
			$(this).parent().append('<div class="form_error_text '+$(this).attr("name") + '_form_error_text">'+error_msg+'</div>');
		} else {
			$(this).removeClass("form_error");
		}
	});
});


function validate_form() {
	first_element = null; // Define the first element to focus after the alert is given
	error = false;
	
	$(".form_error_text").remove();
	
	fields = $(":input");
	for (var i = 0; i < fields.length; i++) {
		error_msg = "";

		error_msg = validate_element(fields[i]);
		if (error_msg != "") {
			if (!error) {
				first_element = fields[i]; // Define the first element to focus after the alert is given
			}
			error = true;
			$(fields[i]).addClass("form_error");
			$(fields[i]).parent().append('<div class="form_error_text '+$(fields[i]).attr("name") + '_form_error_text">' + error_msg + '</div>');
		} else {
			$(fields[i]).removeClass("form_error");		
		}

	}
	if (error == true) {
		alert("There are some errors with your form submission. Please make sure you enter all required fields to continue.");
		$.scrollTo($(first_element),800);
		return false;
	} else {
		$(":submit").attr("disabled", "disabled");
		return true;
	}
}

function validate_element(element) {
	error_msg = "";
	//Required Text Fields
	if ($(element).hasClass("v_required") && !$(element).attr("value")) {
		error_msg += "This field is required<br />";
	}

	//Required Checkbox and Radio fields
	if ($(element).hasClass("v_required") && ($(element).attr("type")=="radio" || $(element).attr("type")=="checkbox")) {
		//Get a lit of all classes with the same v_group_*** class
		group_expression = /v_group_.*/;
		classes = $(element).attr("class").split(" ");
		group = null;

		for (var j = 0; j < classes.length; j++) {
			if (!group) {
				group = group_expression.exec(classes[j]);
			}
		}
		checked = false;
		groups = $('.'+group);
		for (var j = 0; j < groups.length; j++) {
			if ($(groups[j]).attr("checked") == true) {
				checked = true;
			}
		}
		if (checked == false) {
			error_msg += "This field is required<br />";
		}
	}
	
	//Email Addresses
	if ($(element).hasClass("v_email")) {
		if (!validate_email($(element).attr("value"))) {
			error_msg += "Please enter a valid email address<br />";
		}
	}
	return error_msg;
}



function validate_email(email) {
	if (email != "" && email != null) {
		var emailFilter=/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
		return emailFilter.test(email);
	} else {
		return true;
	}
}


