var formHandler = function() {
	var priv = {
		currentForm : null,
		errorDivId : null,
		successDivId : null,
		successCallback : null,
		success : function(data, textStatus, XMLHttpRequest) {
			$('#form_loader').hide();
			$('.button_link').show();
		
			jQuery('#' + priv.currentForm.id + ' div[class = "error"]')
					.html("").hide();
			jQuery('#' + priv.errorDivId).hide();
			if (data.errors) {
				jQuery('#' + priv.errorDivId).show();
				for ( var name in data.errors) {
					var errorDivId = name + '_error';
					if (!document.getElementById(errorDivId)) {
						jQuery(
								'#' + priv.currentForm.id + ' [name = "' + name
										+ '"]').before(
								"<div id='" + errorDivId
										+ "' class='error'><\/div>");
					}
					jQuery('#' + errorDivId).html(data.errors[name]).show();
				}
			} else if (data.success) {
				if(priv.successCallback != null) {
					priv.successCallback();
				}
				jQuery('#' + priv.currentForm.id).remove();
				jQuery('#' + priv.successDivId).show();
				
				//stats tracking 
				if (pageTracker && priv.currentForm.id == 'contactform'){
					pageTracker._setCustomVar(2, 'functionality', 'contact request', 3);
					pageTracker._trackPageview();
				}
			} else {
				alert("Server error. Please try again later");
			}
		}
	};
	return {
		submitForm : function(id) {
			var formObj = document.getElementById(id);
			priv.currentForm = formObj;

			if (formObj) {
				var formData = {};
				for ( var i in formObj.elements) {
					
					if (formObj.elements[i] != null) {
						if(formObj.elements[i].type == 'checkbox') {
							if(formObj.elements[i].checked) {
								formData[formObj.elements[i].name] = formObj.elements[i].value;
							}	
						} else {
							formData[formObj.elements[i].name] = formObj.elements[i].value;
						}
					}
				}
				
				$('#form_loader').show();
				$('.button_link').hide();
				jQuery.ajax( {
					type : 'POST',
					url : formObj.action,
					data : formData,
					dataType : 'json',
					success : priv.success
				});
			}
		},
		setErrorDivId : function(errorDivId) {
			priv.errorDivId = errorDivId;
		},
		setSuccessDivId : function(successDivId) {
			priv.successDivId = successDivId;
		},
		setSuccessCallback : function(successCallback) {
			priv.successCallback = successCallback;
		}
	};
}();

