// JavaScript Document
$(document).ready(function() {  
  $("#contact_form #submit").click(function(event){
	  var gotErrors = 0;
	  if(checkInput($('#firstname'), $('#firstnameError')) == false) {
		gotErrors++;
	  }
	  if(checkEmail($('#email'), $('#emailError')) == false) {
		gotErrors++;
	  }	
	  if(checkInput($('#message'), $('#messageError')) == false) {
		gotErrors++;
	  }
	  if((gotErrors) != 0) {
		  return false;
	  } else {
		  // set form_sent value
		  $('#form_sent').val() = '1';
		  return true;
	  }
  });
 // $('input').focusout(function () {
  $('input').change(function () {
		var gotErrors = 0;
		if($(this).attr("type") =='radio') 
		{
			errorDiv = $(this).parent().next('div');
			if(checkRadio($(this), errorDiv) == false) {
				gotErrors++;
			}
		} else {
			if($(this).attr("type") =='checkbox') {
				errorDiv = $(this).parent().next('div').next('div');
				if(checkCheck($(this), errorDiv) == false) {
					gotErrors++;
				}
			} else {
				whichOne($(this));
			}
		}
	});
   $('textarea').focusout(function () {
		whichOne($(this));
	});
	// select boxes
	$('select').change(function () {
		var gotErrors = 0;
		errorDiv = $(this).parent().next('div');
		if(checkSelect($(this), errorDiv) == false) {
			gotErrors++;
		}
	});
	
	function whichOne(obj) {
		var errorDiv;	
		var gotErrors = 0;
		errorDiv = obj.next('div');
		switch (obj.attr('title')) 
		{
			case 'name':
				if(checkInput(obj, errorDiv) == false) {
					gotErrors++;
				}
				break;
			case 'email':
				if(checkEmail(obj, errorDiv) == false) {
					gotErrors++;
				}
				break;
			case 'phone':
				if(checkPhone(obj, errorDiv) == false) {
					gotErrors++;
				}
				break;
			case 'number':
				if(checkNumber(obj, errorDiv) == false) {
					gotErrors++;
				}
				break;
			}
		}
  
/**** validation functions **************/
	
	function checkInput(obj, errorDiv) {
		if(obj.val().length == 0) {
			displayError(1, errorDiv);
			return false;
		} else {
			displayError(0, errorDiv)
			return true;
		}
	}
	function checkSelect(obj, errorDiv) {
		if(obj.attr('selectedIndex') == 0) {
			displayError(1, errorDiv);
			return false;
		} else {
			displayError(0, errorDiv)
			return true;
		}
	}
	function checkRadio(obj, errorDiv) {
		//alert("in radio");
		if(!obj.attr('checked')) {
			displayError(1, errorDiv);
			return false;
		} else {
			displayError(0, errorDiv)
			return true;
		}
	}
	function checkEmail(obj, errorDiv) {
		var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;	
		if (filter.test(obj.val())) {
			//alert(obj.val());
			displayError(0, errorDiv);
			return true;
		} else {
			displayError(1, errorDiv)
			return false;
		}
	}
	function checkNumber(obj, errorDiv) {
		var invalid = 0;
		//strip out spaces
		var stripped = obj.val().replace(/^\s+|\s+$/g, '');
		if (isNaN(parseInt(stripped))) {
			invalid = 1;
		}
		if (invalid == 1) {
			displayError(1, errorDiv);
			return false;
		} else {
			displayError(0, errorDiv)
			return true;
		}
	}
	function checkPhone(obj, errorDiv) {
		var invalid = 0;
		// UK phone number format
		var filter  =  /^(0|44)[1278]\d{9}$/;
		//strip out acceptable non-numeric characters
		var stripped = obj.val().replace(/[\(\)\.\-\ ]/g, '');
		if (isNaN(parseInt(stripped))) {
			invalid = 1;
		} else {
			// now check format
			if (filter.test(stripped)) {
				invalid = 0;
			} else {
				invalid = 1;
			}
		}
		if (invalid == 1) {
			//alert(obj.val());
			displayError(1, errorDiv);
			return false;
		} else {
			displayError(0, errorDiv)
			return true;
		}
	}
	function checkMobile(obj, errorDiv) {
		var invalid = 0;
		// UK mobile phone number format
		var filter  =  /07\d{9}/;
		//strip out acceptable non-numeric characters
		var stripped = obj.val().replace(/[\(\)\.\-\ ]/g, '');
		if (isNaN(parseInt(stripped))) {
			invalid = 1;
		} else {
			// now check format
			if (filter.test(stripped)) {
				invalid = 0;
			} else {
				invalid = 1;
			}
		}	
		if (invalid == 1) {
			displayError(1, errorDiv);
			return false;
		} else {
			displayError(0, errorDiv)
			return true;
		}
	}
	function checkPhoneOrMobile(obj, errorDiv) {
		if(checkPhone(obj, ErrorDiv) == false) {
			if(checkMobile(obj, ErrorDiv) == false) {
				displayError(1, errorDiv);
				return false;
			}
		} else {
			displayError(0, errorDiv);
			return true;
		}
	}
	function checkCheck(obj, errorDiv) {
		if(obj.attr('checked') == false) {
			displayError(1, errorDiv);
			return false;
		} else {
			displayError(0, errorDiv)
			return true;
		}
	}
	function displayError(num, errorDiv) {
		if(num == 1) {
			$(errorDiv).removeClass('hideError');
			$(errorDiv).addClass('showError');
			//return false;
		} else {
			$(errorDiv).removeClass('showError');
			$(errorDiv).addClass('hideError');
			//return true;
		}
	}
});
