// Validate the form
function validateForm(thisform){
	// Remove any errors
	removeErrors('.input');

	// Result of each of the vailidations
	var r = true;

	// Rules
	// This could be in a loop
	if(!validateRequired(thisform.CustomerFirstname)){
		r = false;
	}
	if(!validateRequired(thisform.CustomerLastname)){
		r = false;
	}
	if(!validateEmail(thisform.CustomerEmail)){
		r = false;
	}
	if(!validatePhoneNumber(thisform.CustomerTelephone)){
		r = false;
	}
	if(!validateRequired(thisform.AffiliateName)){
		r = false;
	}
	if(!validateRequired(thisform.AffiliateDescription)){
		r = false;
	}
	if(!validateURL(thisform.AffiliateLink)){
		r = false;
	}
	if(document.getElementById('AffiliateDedicatedContent')){
		if(!validateRequired(thisform.AffiliateDedicatedContent)){
			r = false;
		}
	}
	if(document.getElementById('AffiliateReciprocalurl')){
		if(!validateURL(thisform.AffiliateReciprocalurl)){
			r = false;
		}
	}
	if(!vailidateLists('foundCategories','categories')){
		r = false;
	}
	if(document.getElementById('AffiliateSeotitle')){
		if(!validateRequired(thisform.AffiliateSeotitle)){
			r = false;
		}
	}
	if(document.getElementById('AffiliateSeokeywords')){
		if(!validateRequired(thisform.AffiliateSeokeywords)){
			r = false;
		}
	}
	if(document.getElementById('AffiliateSeodescription')){
		if(!validateRequired(thisform.AffiliateSeodescription)){
			r = false;
		}
	}
	
	return r;
}
// Display the error in the passed element
function displayError(message,element){
	var errorClass = "error";
	// Add error class to element
	$(element).addClassName(errorClass);

	// Append element with error message
	$(element).insert({
	'bottom' : message
	})
}
// Remove any error messages
// and any error boxes
function removeErrors(containerClass){
	var nodes = $$(containerClass);
	var e = $$('.errorMsg');
	$(e).each(Element.remove);
	$(nodes).each(function(n){
		$(n).removeClassName('error');
	});
}
function vailidateLists(container,errorElement){

	// Vailidate the categories
	var catList = $(container).childElements();
	var foundCats = $(catList[0]).childElements();
	catLen = foundCats.length;
	// The positon of the sting may be grater in other browsers due to tabbing
	// So check for a positon that is greater or equal to 0
	if(foundCats[0].innerHTML.indexOf("None selected") >= 0){
		error = "<div class=\"errorMsg\">A Category must be choosen.</div>";
		displayError(error, errorElement);
		return false;
	}
	return true;
}

// Validate a required field
function validateRequired(fieldId){
	var error ="";
	var parentId =	fieldId.parentNode;
	if (fieldId.value==null || fieldId.value==""){
		error = "<div class=\"errorMsg\">Field is required</div>";
		displayError(error, parentId);
		return false;
	}
	return true;
}

// Validate a required field
function validateEmail(fieldId){
	var error ="";
	var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ;
	var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/ ;
	var parentId =	fieldId.parentNode;

	// First make sure there is anything in there
	var requiredCheck = validateRequired(fieldId);
	// There is a value.
	// Check for a valid email
	if(requiredCheck){
		if(!emailFilter.test(fieldId.value)){
			error = "<div class=\"errorMsg\">A vaild email address is needed</div>";
			displayError(error, parentId);
			return false;
		}
	}else{
		return false;
	}
	return true;
}
function validateURL(fieldId){
	var error ="";
	var parentId =	fieldId.parentNode;
	var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;

	// First make sure there is anything in there
	var requiredCheck = validateRequired(fieldId);
	if(requiredCheck){
		if(!RegExp.test(fieldId.value)){

			error = "<div class=\"errorMsg\">A vaild URL is required</div>";
			displayError(error, parentId);
			return false;
		}
	}else{
		return false;
	}
	return true;
}
function validatePhoneNumber(fieldId){
	var error ="";
	var parentId =	fieldId.parentNode;
	var stripped = fieldId.value.replace(/[\(\)\.\-\ ]/g, '');

	// First make sure there is anything in there
	var requiredCheck = validateRequired(fieldId);
	// There is a value.
	// Check for a valid email
	if(requiredCheck){
		if(isNaN(parseInt(stripped))) {
			error = "<div class=\"errorMsg\">The phone number contains illegal characters.</div>";
			displayError(error, parentId);
			return false;
		} else if (!(stripped.length >= 10)) {
			error = "<div class=\"errorMsg\">The phone number is the wrong length. Make sure you included an area code.</div>";
			displayError(error, parentId);
			return false;
		}

	}else{
		return false;
	}
	return true;
}