$(document).ready(function(){
		
		/*** Call back form  variables ******************************************************/
		var name = $("#callback #name");
		var email = $("#callback #email");
		var phone = $("#callback #phone");
		var errorname = 'Please enter your full name.';
		var errorphone = 'Please enter a full valid phone number, or';
		var erroremail = 'Please enter a valid email address.';
		
		/*** ON CALLBACK FORM SUBMIT ******************************************************/
		$("#callback").submit(function(){
			
			var validName = validateName();
			var validEmail = validateEmail();
			var validTel = validateTel();
			
			if(validTel || validEmail){
				
				$("#errorphone").text("");
				$("#erroremail").text("");
				
				phone.removeClass("error");
				email.removeClass("error");
			}
			
			//if a valid name and telephone or email is given.
			if(validName && (validTel || validEmail)){
				return true;
			}else{
				return false;
			}
		});
		/*** CALLBACK NAME FIELD VALIDATION ************************************************/
		function validateName(){
			
			//if it's NOT valid  
			if(name.val().length < 1){
				
				if(!name.hasClass("error")){
					
					name.addClass("error");
					$("#errorname").text(errorname);
				}
				
				return false;  

			}else{
				
				//if it's valid
				if(name.hasClass("error")){
					
					name.removeClass("error");
					$("#errorname").text("");
				}
				
				return true;  
				
			}
		}
		/*** CALLBACK FORM PHONE VALIDATION ************************************************/
		function validateTel(){
			
			//testing regular expression
			var a = $("#phone").val();
			var filter =  /^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$/; 
			
			//if it's valid phone number
			if(filter.test(a)){
				
				phone.removeClass("error");
				return true;
				
			}else{
				
				if(!phone.hasClass("error")){

					//if it's NOT valid
					phone.addClass("error");
					$("#errorphone").text(errorphone);
					
				}
				
				return false;
				
			}
		}
		/*** CALLBACK FORM EMAIL VALIDATION ************************************************/
		function validateEmail(){
			
			//testing regular expression
			var a = $("#callback #email").val();
			var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
			
			//if it's valid email
			if(filter.test(a)){
				
				email.removeClass("error");
				return true;
				
			}else{
				
				if(!email.hasClass("error")){
					
					//if it's NOT valid
					email.addClass("error");
					$("#erroremail").text(erroremail);
				
				}
				return false;
				
			}
		}
		
		/*** ESTIMATOR FORM VALIDATION *******************************************************/
		/*** ON CALLBACK FORM SUBMIT ******************************************************/
		$("#form1").submit(function(){
			
			var $fixedinputs = $("#form1 .Plan-Input input");
			var $dynamicinputs = $("#form1 .Dynamic-Input input");
			var $error = false;
			var validnumbers = true;
			var validtransport = true;
			
			var errorbadnumbers = "Please check your values and enter only whole round numbers in Millimetres.";
			var errorbadtransport = "Please select your installation location.";
			
			$("#Error").text(""); //reset any previous error messages.
			$("#ErrorTransport").text(""); //reset any previous error messages.
			
			//Check all fixed input texts
			for(var i = 0; i < $fixedinputs.length; i++){
				
				if(!(validateNumber($fixedinputs[i])))validnumbers = false;
				
			}
			//Check all dynamic input texts.
			for(var i = 0; i < $dynamicinputs.length; i++){
				
				if(!(validateNumber($dynamicinputs[i])))validnumbers = false;
				
			}
			
			if(!validnumbers){
				$("#Error").text(errorbadnumbers);
				goToByScroll("Error");
			}
			
			var transportVal = $("#Transport-Select").val();
			if(transportVal == 'Select'){
				
				validtransport = false;
				$("#ErrorTransport").text(errorbadtransport);
				$("#Transport-Select").addClass("error");
				
			}else{
				$("#Transport-Select").removeClass("error");
			}

			if(!validnumbers || !validtransport) $error = true;
			
			if($error){
				
				return false;
				
			}else{
				return true;
			}

		});
		/*** SCROLL TO A CERTAIN ELEMENT ************************************************/
		function goToByScroll(id){
     		$('html,body').animate({scrollTop: $("#"+id).offset().top},'slow');
		}
		/*** ESTIMATOR FORM VALIDATION ************************************************/
		function validateNumber($input){
			
			var isnumber = !(isNaN(parseInt($($input).val(), 10)));
			var value = 0;
						
			if(isnumber)value = parseInt($($input).val(), 10);
			
			//if it's 0.
			if(value <= 0){
								
				$($input).addClass("error");
				
				return false;  

			}else{
				
				//if it's valid
				$($input).removeClass("error");
							
				return true;  
				
			}
		}
});	
