var ERROR_MSG='There are errors with the form. Please fill in all required fields correctly and make sure emails are formatted correctly.';
var PROCESS_ERROR='Sorry, but there was an error processing your request. Please refresh the page and try again. ';
var TIMEOUT_ERROR='Sorry, but your request timed out. Please refresh the page and try again. ';
var ERROR_MSG_CLASS='.errorMessage';
var SUCCESS_MSG_CLASS='.successMessage';
var ERROR_CLASS='error';
var SUCCESS_CLASS='success';
var POST_PAGE='/forms/';

function checkForm(id){
	var canSubmit=true;
	$(id + ' .required').each(function(e){
		if (this.value == '' || !validateEmail(this)) {
			//ML-6-12-09
			document.getElementById("buttonDiv").innerHTML="<div id=\"buttonDiv\"><a class=\"button\" href=\"javascript:void(0);\" onclick=\"this.innerHTML='Processing...'; submitForm('#pageForm','submit'); return false;\">Submit</a></div>";
			canSubmit = false;
			$(this).addClass(ERROR_CLASS);
			throwError(ERROR_MSG, id);
		}
	});
	return canSubmit;
}
function clearError(e){
	$(this).removeClass(ERROR_CLASS);
}
function submitForm(formId, action){
	if(!checkForm(formId)) return false;
	$.ajax({type:'POST', 
		url:POST_PAGE+action, 
		data:$(formId).serialize(), 
		dataType:'json', 
		success: function(e){ onSubmitComplete(e, formId) },
		timeout: function(e){ onTimeOut(e, formId) },
		error: function(e){ onError(e, formId) }
	});
}
function throwError(msg, formId){
	$(formId + ' ' + ERROR_MSG_CLASS).addClass(ERROR_CLASS);
	$(formId + ' ' + ERROR_MSG_CLASS).text(msg);
}
function validateEmail(field) {
	if(field.id.indexOf('email') < 0) return true;
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test($.trim(field.value))) return true;
	return false;
}
function validateField(e){
	if ($.trim(this.value) == '' || !validateEmail(this)) $(this).addClass(ERROR_CLASS);
}
//event handlers
function onError(e){
	throwError(PROCESS_ERROR+e.message)
}
function onSubmitComplete(e, formId){
	if (e.success == 1) {
		$(formId).children().each(function(){ $(this).toggle(); })
		$(formId + ' ' + SUCCESS_MSG_CLASS).addClass(SUCCESS_CLASS);
		$(formId + ' ' + SUCCESS_MSG_CLASS).html(e.message);
		$(formId + ' ' + SUCCESS_MSG_CLASS).toggle();
	} else throwError(e.message, formId);
}
function onTimeOut(e, formId){throwError(TIMEOUT_ERROR, formId);}

$(document).ready(function (){
	if($(".secure").length<=0) return false; //don't go through if there's no form
	$.get(POST_PAGE+'token', function(txt){
		$(".secure").append('<input type="hidden" name="ts" value="'+txt+'">');
	});
	$('.required').each(function(e){
		$(this).bind('blur', validateField);
		$(this).bind('focus', clearError);
	});
});
