//Validate the whole form
function ValidateForm(FormName, option) {
    var valid = true;
	var RegForm = "";
	
	switch(FormName){
		case "autoform":
			RegForm = document.autoform;
			break;
		case "shipForm":
			RegForm = document.shipForm;
			break;		
	}
	
	//var RegForm = document.FormName;
	 //var RegForm = document.getElementById("frmRegister");
     document.getElementById("generr").innerHTML = "";

	 if(option == 'ship'){
		return true;
	 }	 
	 
	if(!document.getElementById('age16').checked){
		alert('Please Note! To register you must be over the age of 16, please make sure the age box has been selected, if you are over 16'); 
		return false;	
		//return true;
	}
	 
     for(var i=0;i<RegForm.length;i++){
        switch(RegForm[i].name){
            case "name":
				if(!(isValidName(RegForm[i])))
					valid = false;
					break;
            case "surname":
				if(!(isValidName(RegForm[i])))
					valid = false;
					break;
            case "phone":
				if(!(isValidPhone(RegForm[i])))
					valid = false;
					break;	
            case "username":
				if(!(isValidUsrName(RegForm[i])))
					valid = false;
					break;	
            case "password":
				if(!(isValidPassword(RegForm[i])))
					valid = false;
					break;	
            case "email":
				if(!(isValidEmail(RegForm[i])))
					valid = false;
					break;
            case "DrHsNo":
				if(!(isValidDoor(RegForm[i])))
					valid = false;
					break;						
            case "street":
				if(!(isValidStreet(RegForm[i])))
					valid = false;
					break;						
            case "city":
				if(!(isValidCity(RegForm[i])))
					valid = false;
					break; 
            case "postcode":
				if(!(isValidPostcode(RegForm[i])))
					valid = false;
					break;
            case "postcodeS":
				if(!(isValidPostcodeSp(RegForm[i])))
					valid = false;
					break;						
            case "DrHsNoS":
				if(!(isValidDoorSp(RegForm[i])))
					valid = false;
					break;					
            case "streetS":
				if(!(isValShipStr(RegForm[i])))
					valid = false;			
					break;	
            case "cityS":
				if(!(isValShipCity(RegForm[i])))
					valid = false;			
					break;	
            case "phones":
				if(!(isValShipPh(RegForm[i])))
					valid = false;			
					break;		
            case "termsagree":
				if(!isAgreeTerms(RegForm[i]))
					valid = false;			
					break;						
/*	
            case "city":
				if(!(isValidCity(RegForm[i])))
					valid = false;
					break;					
            case "street":
				if(!(isValidStreet(RegForm[i])))
					valid = false;
					break;	
            case "town":
				if(!(isValidTown(RegForm[i])))
					valid = false;
					break;

            case "postcode":
				if(!(isValidPostcode(RegForm[i])))
					valid = false;
					break;

*/					
        }     
     }
	 
     if (!valid){
        document.getElementById("generr").innerHTML = "OOPs! Some required fields are empty or not correct! See below…";
        return false;
     } else {
		return true;	 
	 }     
}

//Check if field is empty
function isfieldEmpty(field){
	with (field){
		if (field.value==null||field.value==""){
			return false;
		}
		else{
			return true;
		}
	}
}

//Returns the error div id for a given field ship_str_err
function errDivId(field, type){
	if(type == "ship"){
		return "reg_ship_"+field.name;
	} else {
		return "reg_"+field.name;	
	}	
}

function isAgreeTerms(field){
	var fErrDiv =  document.getElementById(errDivId(field));
	
	if(field.checked == false ){
		fErrDiv.style.display="block";
        //field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Terms and conditions not accepted!";
        return false;		
	}
	
	return true;
}

//Check if name and surname is valid or not
function isValidName(field){
    var Pattren = /^([a-zA-Z'\s]+)$/; //make checking pattren
	var fieldName = field.name.toTitleCase();
	var fErrDiv =  document.getElementById(errDivId(field));

	//check if field is empty 
    if (isfieldEmpty(field) != true) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* "+fieldName+" is required!";
        return false;
    } else if ((field.value.length < 3)) { //check if field is of correct length
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';  
        fErrDiv.innerHTML = "* "+fieldName+" should be of minimun 3 Charactors! ";
		return false;
    }else if(Pattren.test(field.value) != true){ //check if any unwanted charactors are entered
		fErrDiv.style.display="block";
        fErrDiv.innerHTML = "* "+fieldName+" can only have Alpha Charactors!";
        field.style.background = '#FFE4C4';
        return false;
    }
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';              
    }
    return true;
}

function isValidDoor(field){
    var Pattren = /^([0-9a-zA-Z'\s\/]+)$/;
	var fErrDiv =  document.getElementById(errDivId(field));
           
    if (isfieldEmpty(field) != true) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* The Door No or House Name is required!";
        return false;
    } else if ((field.value.length < 1) || (field.value.length > 60)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';  
       fErrDiv.innerHTML = "* Enter between 1 & 60 Charactors! ";
		return false;
    }
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';              
    }
    return true;
}

function isValidStreet(field){
    var Pattren = /^([0-9a-zA-Z'\s\/]+)$/;
	var fErrDiv =  document.getElementById(errDivId(field));
           
    if (isfieldEmpty(field) != true) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* The Street Address is required!";
        return false;
    } else if ((field.value.length < 2) || (field.value.length > 60)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';  
       fErrDiv.innerHTML = "* Enter between 2 & 60 Charactors! ";
		return false;
    }
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';              
    }
    return true;
}

//check if town entered is correct or not
function isValidTown(field){
    var Pattren = /^([0-9a-zA-Z'\s\/]+)$/
	var fErrDiv =  document.getElementById(errDivId(field));
           
	if(Pattren.test(field.value) != true){
		fErrDiv.style.display="block";
		fErrDiv.innerHTML = "* The town name should have only Alpha Chars";
        field.style.background = '#FFE4C4';
        return false;
    }
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';                 
    }
    return true;
}

function isValidCity(field){	
    var Pattren = /^([0-9a-zA-Z'\s\/]+)$/;
	var fieldName = field.name.toTitleCase();
	var fErrDiv =  document.getElementById(errDivId(field));
           
    if (isfieldEmpty(field) != true) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* "+fieldName+" is required!";
        return false;
    } else if ((field.value.length < 2) || (field.value.length > 60)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';  
       fErrDiv.innerHTML = "* Enter between 2 & 60 Charactors! ";
		return false;
    }else if(Pattren.test(field.value) != true){
		fErrDiv.style.display="block";
        fErrDiv.innerHTML = "* The city name can have only Alpha numaric Chars";
        field.style.background = '#FFE4C4';
        return false;
    }
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';              
    }
    return true;	
}


function isValShipCity(field){	
    var Pattren = /^([0-9a-zA-Z'\s\/]+)$/;
	var fieldName = field.name.toTitleCase();
	var fErrDiv =  document.getElementById(errDivId(field, "ship"));
           
    if (isfieldEmpty(field) != true) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Shipping city name is required!";
        return false;
    } else if ((field.value.length < 2) || (field.value.length > 60)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';  
       fErrDiv.innerHTML = "* Enter between 2 & 60 Charactors! ";
		return false;
    }else if(Pattren.test(field.value) != true){
		fErrDiv.style.display="block";
        fErrDiv.innerHTML = "* The city name can have only Alpha numaric Chars";
        field.style.background = '#FFE4C4';
        return false;
    }
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';              
    }
    return true;	
}

function isValidPostcodeSp(field){
	var fErrDiv =  document.getElementById(errDivId(field, "ship"));
    var pcodePattren = /^([a-zA-Z]){1}([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9]){1}([ ])([0-9][a-zA-z][a-zA-z]){1}$/;
	
    if (isfieldEmpty(field)==false) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Postcode is required!";
        return false;
    } 
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';                
    }
    return true;
}

function isValidPostcode(field){
	var fErrDiv =  document.getElementById(errDivId(field));
    var pcodePattren = /^([a-zA-Z]){1}([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9]){1}([ ])([0-9][a-zA-z][a-zA-z]){1}$/;
	
    if (isfieldEmpty(field)==false) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Postcode is required!";
        return false;
    } 
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';                
    }
    return true;
}

//Validate Phone no
function isValidPhone(field){
	var fErrDiv =  document.getElementById(errDivId(field));		
	var stripped = field.value.replace(/[\(\)\.\-\ ]/g, '');
	var Pattren  = /^([0-9]{9})$/;	
	var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
	
    if (isfieldEmpty(field)==false) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Phone No. required! ";
		return false;
    }	
	else if (objRegExp.test(stripped) == false) {	
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Phone number contains illegal characters! ";
		return false;
	}
	else if (!(stripped.length >= 9)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* The phone number is of wrong length. Make sure to include area code.";
		return false;
	}	
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';          
    }
	return true;
}

function isValShipPh(field){
	var fErrDiv =  document.getElementById(errDivId(field, "ship"));	
	var stripped = field.value.replace(/[\(\)\.\-\ ]/g, '');
	var Pattren  = /^([0-9]{9})$/;
	var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
	
    if (isfieldEmpty(field)==false) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Phone No. required! ";
		return false;
    }	
	else if (objRegExp.test(stripped) == false) {	
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Phone number contains illegal characters! ";
		return false;
	}
	else if (!(stripped.length >= 9)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* The phone number is of wrong length. Make sure to include area code.";
		return false;
	}	
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';          
    }
	return true;
}

//Validate email
function isValidEmail(field) {   
	var fErrDiv =  document.getElementById(errDivId(field));
    var emailPattren = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    var fStyle = field.style;       

    if (isfieldEmpty(field)==false) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Email address is required! ";
		return false;
    }    
	else if (isfieldEmpty(field)!=false) {
		if(emailPattren.test(field.value) != true){
			fErrDiv.style.display="block";
			fStyle.background = '#FFE4C4';
			fErrDiv.innerHTML = "* Email format is not correct!";
			return false;
		}
		else {
			fErrDiv.innerHTML = "";
			fErrDiv.style.display="none";
			field.style.background = '#98FB98';         
		}	
	}else{
			fErrDiv.innerHTML = "";
			fErrDiv.style.display="none";
			field.style.background = 'white';         
		} 
	return true;
}

function isValidUsrName(field){
	var fErrDiv =  document.getElementById(errDivId(field));
    var Pattren = /^([0-9a-zA-Z_]+)$/;
           
    if (isfieldEmpty(field)==false) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Username is required!";
        return false;
    } else if ((field.value.length < 3) || (field.value.length > 30)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';  
        fErrDiv.innerHTML = "* Enter between 3 & 30 Charactors! ";
		return false;
    }else if(Pattren.test(field.value) != true){
		fErrDiv.style.display="block";
        fErrDiv.innerHTML = "* Username must contain only letters, numbers and underscores!";
        field.style.background = '#FFE4C4';
        return false;
    } else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';               
    }
    return true;
}

function isValidPassword(field){
	var fErrDiv =  document.getElementById(errDivId(field));
    var Pattren =   /^([0-9a-zA-Z_]+)$/;
           
    if (isfieldEmpty(field)==false) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Password is required!";
        return false;
    } else if ((field.value.length < 6) || (field.value.length > 30)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4'; 
		field.value = "";
        fErrDiv.innerHTML = "* The password must be between 6 & 30 Charactors! ";
		return false;
    } else if(Pattren.test(field.value) != true){
		fErrDiv.style.display="block";
		fErrDiv.innerHTML = "* The password can only contain alpha numaric and under score";
		field.value = "";        
        field.style.background = '#FFE4C4';
        return false;
    }
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';               
    }
    return true;
}

function isValidDoorSp(field){
    var Pattren = /^([0-9a-zA-Z'\s\/]+)$/;
	var fErrDiv =  document.getElementById(errDivId(field, "ship"));
           
    if (isfieldEmpty(field) != true) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* The Door No or House Name is required!";
        return false;
    } else if ((field.value.length < 1) || (field.value.length > 60)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';  
       fErrDiv.innerHTML = "* Enter between 1 & 60 Charactors! ";
		return false;
    }
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';              
    }
    return true;
}

function isValShipStr(field){
    var Pattren = /^([0-9a-zA-Z'\s\/]+)$/;
	var fErrDiv =  document.getElementById(errDivId(field, "ship"));
           
    if (isfieldEmpty(field) != true) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';
        fErrDiv.innerHTML = "* Shipping Street Address is required!";
        return false;
    } else if ((field.value.length < 2) || (field.value.length > 60)) {
		fErrDiv.style.display="block";
        field.style.background = '#FFE4C4';  
       fErrDiv.innerHTML = "* Enter between 2 & 60 Charactors! ";
		return false;
    }
    else {
        fErrDiv.innerHTML = "";
		fErrDiv.style.display="none";
        field.style.background = '#98FB98';              
    }
    return true;
}

/*
ship_str_err
else if(document.getElementsByName("country")[0].value == "1"){
		if(pcodePattren.test(field.value) != true){
			fErrDiv.style.display="block";
			fErrDiv.innerHTML = "* Not valid UK postcode";
			field.style.background = '#FFE4C4';
			return false;			
		} else {
			fErrDiv.innerHTML = "";
			fErrDiv.style.display="none";
			field.style.background = '#98FB98';   		
		}
    }
*/

//Added from http://www.thewatchmakerproject.com/blog/really-simple-javascript-totitlecase-implementation/
String.prototype.toTitleCase = function () {
	var A = this.split(' '), B = [];
	for (var i = 0; A[i] !== undefined; i++) {
		B[B.length] = A[i].substr(0, 1).toUpperCase() + A[i].substr(1);
	}
	return B.join(' ');
}
