$(document).ready(function(){

	liveValidate('name', 'input');
	liveValidate('email', 'input');
	liveValidate('message', 'textarea');
	
	$("#contactLink").click(function(){
		if ($("#contactForm").is(":hidden")) {
			$("#contactForm").slideDown("slow");
		}
		else {
			$("#contactForm").slideUp("slow");
		}
	});
	
	$('#sendMail').click(function(){
		$("#sendWrapper").addClass('loading');
		$(this).parents("form:first").ajaxSubmit({
			dataType: 'json',
			beforeSubmit: validate,
			success: processJson,
			complete: function(){
				$("#sendWrapper").removeClass('loading');
			}
		});
		return false;
	});
	
});

function processJson(data){
	// 'data' is the json object returned from the server
	$("#statusMessage").hide("slow");
	$("#statusMessage").text(data.responseText);
	$("#statusMessage").css("color", (data.responseCode == 1) ? "green" : "red");
	$("#statusMessage").show("slow");
	
	if (data.responseCode == 1) {
		setTimeout('$("#statusMessage").hide();$("#contactForm").slideUp("slow")', 4000);
		setTimeout('$("#contactForm").clearForm()', 6000);
	}
}

function validate(formData, jqForm, options){
	var namevalid = sendValidate('name', 'input');
	var emailvalid = sendValidate('email', 'input');
	var messagevalid = sendValidate('message', 'textarea');
	var valid = namevalid && emailvalid && messagevalid;
	if (!valid) 
		setTimeout('$("#sendWrapper").removeClass("loading")', 1000);
	return valid;
}

function sendValidate(field, fieldtype){
	var selector = fieldtype + "[@name='data[" + field + "]']";
	$("#" + field).removeClass("error");
	
	if ($(selector).attr("value").length == 0) {
		$("#" + field).addClass("error");
		return false;
	}
	//validate email
	if (field == 'email') {
		if (!emailValidate($(selector).attr("value"))) {
			$("#" + field).addClass("error");
			return false;
		}
	}
	return true;
}

function liveValidate(field, fieldtype){
	var selector = fieldtype + "[@name='data[" + field + "]']";
	$(selector).keyup(function(){
		if ($(selector).attr("value").length == 0) {
			$("#" + field).addClass("error");
		}
		else {
			$("#" + field).removeClass("error");
		}
	});
}

function emailValidate(email){
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(email);
}

$.fn.clearForm = function(){
	// iterate each matching form
	return this.each(function(){
		// iterate the elements within the form
		$(':input', this).each(function(){
			var type = this.type, tag = this.tagName.toLowerCase();
			if (type == 'text' || type == 'password' || tag == 'textarea') 
				this.value = '';
			else 
				if (type == 'checkbox' || type == 'radio') 
					this.checked = false;
				else 
					if (tag == 'select') 
						this.selectedIndex = -1;
		});
	});
};

