/*
	functions.forms.js
	JQuery / DOM Form Functions
	Created: 
	Creator: Matt Kircher
*/

function setupForm(){
	$('form').each(function(){
		
		//recaptcha: remove logo from puzzle
		if($('#recaptcha_table').length){
			$('#recaptcha_table tbody tr').each(function(){ $(this).find('td:last').remove(); });
		}
	});
}

function validateForm(f){
	
	var specificForm = ($.trim(f) == "")?'form':f;
	
	//setup valid object
	var valid = { status:true, response:'', element:null };
	
	//remove classes, go through and check for non-values
	$(specificForm+' .select_required_attention').remove();
	$(specificForm+' .required')
	.removeClass('required_attention')
	.each(function(){
		if(($(this).val() == "" || $(this).val() == null)){
			$(this).addClass('required_attention');
			valid.status = false;
			valid.response = 'One or more required fields have not been completed. Please complete them and resubmit the form.';
			if(valid.element == null){ valid.element = $(this); }
			
			if($(this).get(0).nodeName == "SELECT"){
				$(this).after('<span class="select_required_attention">&lsaquo;&mdash;</span>');
			}
		}
	});
	
	//if email is not of the form 'name@email.com', don't validate
	if(valid.status){
		$(specificForm+' input.required[name="email"]').each(function(){				
			if(!validateEmail($(this).val())){
				$(this).addClass('required_attention');
				valid.status = false;
				valid.response = 'Please supply a valid email address.';
				valid.element = $(this);
			}
		});
	}
	
	//display alert, focus on first non-valued field
	if(!valid.status){ alert(valid.response); $(valid.element).focus(); }
	return valid.status;
}

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


/* CONSULTATION FORM */

/* errors */
function removeErrorFieldset(form){
	$(form).find('fieldset.errors').remove();
}
function addErrorFieldset(form, mssg){
	mssg 	= (mssg == null)?'':mssg;
	$(form).prepend('<fieldset class="errors">'+ mssg + '</ul></fieldset>');
	$(form).find('fieldset.errors').fadeIn(500);
}
function getErrorCountMessage(error_count){
	var message = (error_count == 1)
		? 'You missed or incorrectly input 1 field. It has been highlighted below'
		: 'You missed or incorrectly input ' + error_count + ' fields.  They have been highlighted below';
		
	return message;
}

/* confirmations */
function addConfirmationFieldset(form, html){
	html = (html == null)?'':html;
	
	$(form).prepend('<fieldset class="confirmation">' + html + '</fieldset>');
	Cufon.refresh();
	$(form).find('fieldset').not('.confirmation, .controls').fadeOut(500, function(){
		$(form).find('fieldset').not('.confirmation, .controls').slideUp(700, function(){
			$(form).find('fieldset.confirmation').fadeIn(500);
		});
	});
}

//-----------------
function setupConsultationsForm(){
	
	//validation
	$('#consultationsForm').validate({
		rules: {
			name: "required",
			phone: "required",
			email: { required:true, email:true },
			date: "required"
		},
		messages: {
			name: "Name is required!",
			phone: "Phone # is required!",
			email: { 
				required:"Email is required!", 
				email:"Valid email required!" 
			},
			date: "Date is required!"
		},
		ignore: ".ignore"
	});
	
	//ajax form submission setup 
	$('#consultationsForm').ajaxForm({
		dataType:  	'json',
		type:		'POST',
		beforeSubmit: function(){
			removeErrorFieldset('#consultationsForm');
			return $('#consultationsForm').valid();			
		},
		success: completeConsultationsForm
	})
}

function completeConsultationsForm(data){
	
	if(data.status == 'OK'){
		$('#consultationsForm').hide().html(data.thank_you);
		$('#consultationsForm').fadeIn(500);
		
	} else if(data.status == 'ERROR'){
		addErrorFieldset('#consultationsForm', data.error_message);
	}
}
