/**********************************************************************************************
Form validation (requires jQuery)
***********************************************************************************************/

// error message text
var emailMissing = "Please enter your email address";
var emailInvalid = "Please enter a valid email address";

var phoneMissing = "Please enter your phone number";
var phoneInvalid = "Phone number must only contain digits";

var postcodeMissing = "Please enter your postcode";
var postcodeInvalid = "Postcode must be 4 numbers";

var requiredMissing = "This field is required";

/*******************************
onFocus field clearers
********************************/
$(document).ready(function(){
						   
/** Email **/
	$('.email input').focus(function(){
				if($(this).val() == emailMissing || $(this).val() == emailInvalid){
					$(this).val('');
				}
	});
	
/** Postcode **/
	$('.postcode input').focus(function(){
				if($(this).val() == postcodeMissing || $(this).val() == postcodeInvalid){
					$(this).val('');
				}
	});

});


//Addtional functionality for radio buttons
$('#call').focus(function(){
	
	
	alert("clicked");
	
});


// function to validate the form fields
function validate(){
	
	
	if($('#call').attr("checked")){
		$('.phone').addClass("required");
		$('.req').hide();
		$('.phone label').append(" <small class=\"req\">(required)</small>");
	} else {
		$('.phone').removeClass("required");
		$('.req').hide();
	}
	
var alertChecks = false;
var i = 0;

$('span.formerror').css("display", "none");
$('.form .form-item input').removeClass("error");
$('.form .form-item select').removeClass("error");
$('.form .form-item textarea').removeClass("error");

while(i < $('.form .form-item').length) {
	
formItem = $('.form-item:eq('+i+')');

if(formItem.hasClass('email')){
	
/*******************************
Email validation
********************************/

		var email = $('.form .form-item:eq('+i+') input');
		
		//if email is required or is not empty, then check if it is empty(if required) and validate it
		if(formItem.hasClass("required") || email.val() != ''){
			if(alertChecks){ alert("checking email on form item "+i+".."); }
			
			//check if email has missing error msg or if it is empty
			if(email.val() == ''){
				email.addClass("error");
				$('<span class="formerror">'+emailMissing+'</span>').insertAfter(email);
				email.focus();
				return false;
			}
		
			//check if email is valid
			var emailCheck = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/.test(email.val());
			if (!emailCheck) {
				email.addClass("error");
				$('<span class="formerror">'+emailInvalid+'</span>').insertAfter(email);
				email.focus();
				return false;
			}
			
			if(alertChecks){ alert("checked email on form item "+i); }
			
			
			
		}
		
} else if(formItem.hasClass('phone')) {
/*******************************
Phone number validation
********************************/

		var phone = $('.form .form-item:eq('+i+') input');
		
		//if email is required or is not empty, then check if it is empty(if required) and validate it
		if(formItem.hasClass("required") || phone.val() != ''){
			if(alertChecks){ alert("checking phone on form item "+i+".."); }
						
			//check if phone number is missing error msg or if it is empty
			if(phone.val() == ''){
				phone.addClass("error");
				$('<span class="formerror">'+phoneMissing+'</span>').insertAfter(phone);
				phone.focus();
				return false;
			}
			
			//check if phone number is valid
			
			var phoneCheck = /^([+]{1}[0-9\s]*)?([(]{1}[0-9]{2,3}[)]{1})?[0-9\s-]*$/.test(phone.val());
			if (!phoneCheck) {
				phone.addClass("error");
				$('<span class="formerror">'+phoneInvalid+'</span>').insertAfter(phone);
				phone.focus();
				return false;
			}
		}			
			
			
			if(alertChecks){ alert("checked email on form item "+i); }
		
} else if(formItem.hasClass('postcode')) {
/*******************************
Postcode validation
********************************/


		var postcode = $('.form .form-item:eq('+i+') input');
		
		//if email is required or is not empty, then check if it is empty(if required) and validate it
		if($(formItem).hasClass("required") || postcode.val() != ''){
			if(alertChecks){ alert("checking post on form item "+i+".."); }
			
			//check if email has missing error msg or if it is empty
			if(postcode.val() == ''){
				postcode.addClass("error");
				$('<span class="formerror">'+postcodeMissing+'</span>').insertAfter(postcode);
				postcode.focus();
				return false;
			}
			
			//check if it is only numbers
			var postCheck = /^\d{4}$/.test(postcode.val());
			if (!postCheck) {
				postcode.addClass("error");
				$('<span class="formerror">'+postcodeInvalid+'</span>').insertAfter(postcode);
				postcode.focus();
				return false;
			}
			
			if(alertChecks){ alert("checked post on form item "+i); }
			
		}
		
} else if(formItem.hasClass('required')) {
/*******************************
Blank item check (if required)
********************************/

$input = $('.form .form-item:eq('+i+') input');
$select = $('.form .form-item:eq('+i+') select');
$textarea = $('.form .form-item:eq('+i+') textarea');

		if($select.length > 0){
			var required = $('.form .form-item:eq('+i+') select');
		} 
		
		if($textarea.length > 0){
			var required = $('.form .form-item:eq('+i+') textarea');
		}
		
       if($input.length > 0){
			var required = $('.form .form-item:eq('+i+') input');	 
		} 
		
					
			//check if email has missing error msg or if it is empty
			if(required.val() == '' || required.val() == 'Please select'){
				required.addClass("error");
				$('<span class="formerror">'+requiredMissing+'</span>').insertAfter(required);
				required.focus();
				return false;
			}
			
					
}

if(alertChecks){ alert("item "+i+" checked"); }
i++
if(i >= $('.form .form-item').length){
	return true;
}//end length check

}//end while loop 

	
}//end function
