/**
 * @author BenBrygger
 */
$(document).ready(function() {
	
	//Changes notice to error state
	function setError( item ) {
		var nextItem = $( item ).next();
		nextItem.removeClass( "valid" );
		nextItem.addClass( "error" );
		nextItem.text("pardon?");
		return false;
	}
	
	//Changes notice to neutral state
	function setNeutral( item ) {
		var nextItem = $( item ).next();
		nextItem.removeClass( "valid" );
		nextItem.removeClass( "error" );
		nextItem.text("required");
		return null;
	}
	
	//Changes notice to valid state
	function setValid( item ) {
		var nextItem = $( item ).next();
		nextItem.removeClass( "error" );
		nextItem.addClass( "valid" );
		nextItem.text("thanks!");
		return true;
	}
	
	//Checks general forms
	function generalChecker( item )
	{
		if( $(item).val().length < 2 && $(item).val().length > 0 ) {
			return setError( item );
			
		} else if( $(item).val().length === 0  ) {
			return setNeutral( item );
			
		} else {
			return setValid( item );
		}	
	}
	
	//Checks email form
	function emailChecker( item )
	{
		var emailRegEx = new RegExp( /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/ );
		if( emailRegEx.test($(item).val()) === false && $(item).val().length > 0 ) {
			return setError( item );
			
		} else if( $(item).val().length === 0 ) {
			return setNeutral( item );
			
		} else {
			return setValid( item );
		}
	}
	
	//Checks phone form
	function phoneChecker( item )
	{
		var phoneRegEx = new RegExp( /([\(]?([0-9]{3})[\)]?)?[ \.\-]?([0-9]{3})[ \.\-]([0-9]{4})/ );
		if( phoneRegEx.test($(item).val()) === false && $(item).val().length > 0 ) {
			return setError( item );
			
		} else if ( $(item).val().length === 0 ) {
			return setNeutral( item );
			
		} else {
			return setValid( item );
		}
	}
	
	//Delegates checking to appropriate functions
	function quickCheck( item )
	{	
		if( item == "#email" )
			return emailChecker( item );
		/*else if( item == "#phone" )
			return phoneChecker( item );*/
		else
			return generalChecker( item );
	}
	
	//Sets blur events
	function blurSet( item )
	{
		$( item ).blur( checkAll );
	}
	
	//Checks EVERYTHING
	function checkAll()
	{
		quickCheck("#name");
		quickCheck("#company");
		quickCheck("#email");
		quickCheck("#phone");
		quickCheck("#city");
		quickCheck("#state");
		quickCheck("#postal");
	}
	
	//Checks EVERYTHING ONE LAST TIME
	function finalCheckAll()
	{
		if(
				quickCheck("#name") &&
				quickCheck("#company") &&
				quickCheck("#email") &&
				quickCheck("#phone") &&
				quickCheck("#city") &&
				quickCheck("#state") &&
				quickCheck("#postal")
		)
		{
			return true;
		}
		else
		{
			alert( "Some required fields are empty or invalid" );
			return false;
		}
	}
	
	//Set blurs
	blurSet( "#name" );
	blurSet( "#company" );
	blurSet( "#email" );
	blurSet( "#phone" );
	blurSet( "#city" );
	blurSet( "#state" );
	blurSet( "#postal" );
	//blurSet( "#message" );
	
	//Final check on submit
	$( "#contactForm" ).submit( finalCheckAll );
	
	//prevent enter from submitting the form accidentally
	
	textBoxes = $( ".field" );
	/* The following browser distinction appears unnecessary
	if( $.browser.mozilla ) {
		$( textBoxes ).keypress( inputKeyDownHandler );
		
	} else {
		$( textBoxes ).keydown( inputKeyDownHandler );
		
	}*/
	$( textBoxes ).keydown( inputKeyDownHandler );
	
	function inputKeyDownHandler(evt) {
		if (evt.keyCode == 13) {
			currentBoxNumber = textBoxes.index(this);
			//Mozilla will go to next field even when trying to select a previously entered value with the enter fix.
			//It's simply disabled to prevent aggravation.
			if (textBoxes[currentBoxNumber + 1] != null) {
				if ($.browser.mozilla) {
					evt.preventDefault();
					return false;
					
				} else {
					//$(":submit").attr( "disabled", "disabled" );
					//currentBoxNumber = textBoxes.index( this );
					
					nextBox = textBoxes[currentBoxNumber + 1];
					nextBox.focus();
					nextBox.select();
					evt.preventDefault();
					return false;
						
				}
			}
		}
	}
		
});
