var timeout;

function validate(form_id, element_id, feedback_id, type, min, max, message) {
    clearTimeout(timeout);
    timeout = setTimeout(function() {	
		
		var display_message = false;
		var value = $("#" + form_id + "_" + element_id).val();
		
		// No point in trying to validate if we don't have any text!
		if (value) {
			
			// Minimum length validation
			if (min && (value.length < min)) 
				display_message = 'Must be ' + min + ' characters or more';
			
			// Maximum length validation
			if (max && (value.length > max)) 
				display_message = 'Must be ' + max + ' characters or less';		
			
			// Alphanumeric Validation
			if (type == "alnum") {
				if (!message) message = 'Must contain no invalid characters';
				if (value.match(/([^a-zA-Z0-9/._-])/)) display_message = message;
			}			
			
			// Alpha Validation
			if (type == "alpha") {
				if (!message) message = 'Must contain no numbers or invalid characters';
				if (value.match(/([^a-zA-Z/._-])/)) display_message = message;
			}
	
			// Number Validaiton
			if (type == "num") {
				if (!message) message = 'Must be a number';
				if (value.match(/\D+/)) display_message = message;
			}
			
			// Email Validation
			if (type == "email") {
				if (!message) message = 'Must be a valid email address';
				if (!value.match(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i)) display_message = message;
			}	
			
			// Update the element
			if (display_message) {
				$("#" + form_id + "_" + "feedback_" + feedback_id).html(display_message).fadeIn();
			}
				
		}
		
		if (!value || !display_message) {
			$("#" + form_id + "_" + "feedback_" + feedback_id).fadeOut();
		}
	}, 500);
}

function required(form_id, element_id) {
	var value = $("#" + form_id + "_" + element_id).val();
	if (!value) $("#" + form_id + "_" + "feedback_" + element_id).hide().html('Please fill in this field').fadeIn();
	else $("#" + form_id + "_" + "feedback_" + element_id).fadeOut();
}

function password_strength(element_id, password) {
	if (!password) return;

	var description = new Array();
	description[0] = "<span style=\"color:#676767\"><b>Too Short</b></span>";
	description[1] = "<span style=\"color:#AA0033\"><b>Weak</b></span>";
	description[2] = "<span style=\"color:#FFCC33\"><b>Fair</b></span>";
	description[3] = "<span style=\"color:#6699CC\"><b>Good</b></span>";	
	description[4] = "<span style=\"color:#008000\"><b>Strong</b></span>";
	var score = 0;

	// If password has both lower and uppercase letters
	if ((password.match(/[a-z]/)) && (password.match(/[A-Z]/))) score++;

	// If password has a number
	if (password.match(/\d+/)) score++;

	// If password has a special character
	if (password.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,(,)]/) ) score++;
	
	// If password length is eight letters or more
	if (password.length > 7) score++;
	else score = 0;
	
	// Update the elements
	$("#password_description_" + element_id).html(description[score]);
	$("#password_strength_" + element_id).attr("class", "password_strength_" + score);
}