function validateSignupForm(theForm) {
	with (theForm) {		
		sof('firstNameField');
		sof('lastNameField');		
		sof('emailField');
		sof('countryField');
		sof('usernameField');
		sof('passwordField');
		sof('passwordConfirmField');
		sof('captchaField');

      	if (!clen(firstName, 1, 32, 'firstNameField')) {
         	alert("Please enter a name between 1 and 32 characters.");
      		return false;
      	}

      	if (!clen(lastName, 1, 48, 'lastNameField')) {
         	alert("Please enter a name between 1 and 48 characters.");
      		return false;
      	}

      	if (!clen(postcode, 1, 10, 'postcodeField')) {
         	alert("Please enter a postal/ZIP code between 1 and 10 characters.");
      		return false;
      	}

      	if (!clen(emailAddr, 6, 100, 'emailField')) {
 			alert("Please enter a valid email address.");
         	return false;
      	}

      	atPos  = emailAddr.value.indexOf('@');
      	dotPos = emailAddr.value.lastIndexOf('.');

      	if (atPos < 1 || dotPos < 4 || (dotPos - atPos) < 2) {
         	alert("Please enter a valid email address.");
			sef('emailField');
         	emailAddr.focus();
         	return false;
      	}
		
		if (!clen(userName, 2, 32, 'usernameField')) {
			alert("Please enter a username between 2 and 32 characters.");			
			return false;
		}
				
		if (!isalpha(userName.value)) {
			sef('usernameField');
			userName.focus();
			alert("Usernames must only contain alphanumeric characters and no spaces.");
			return false;
		}
		
		if (!clen(password, 6, 20, 'passwordField')) {
			alert("Please enter a password between 6 and 20 characters.");			
			return false;
		}

		if (!clen(passwordConfirm, 6, 20, 'passwordConfirmField')) {
			alert("Please enter a password between 6 and 20 characters.");
			return false;			
		}
		
		if (password.value != passwordConfirm.value) {
			alert("Your passwords do not match, please ensure they are the same.");			
			sef('passwordConfirmField');
			passwordConfirm.focus();
			return false;
		}
		
		if (!clen(captcha, 4, 4, 'captchaField')) {
			alert("Please enter the displayed validation code.");			
			return false;
		}
		
		if (document.getElementById('acceptTOS').checked == false) {
			alert("You must accept the Mealopedia Terms of Service to sign up.");
			return false;
		}
	}
	
	return true;
}

function validateSMSForm(p) {
	sof('nField');
		
	if (!clen(document.getElementById('n'), 10, 10, 'nField')) {
		alert('Please enter a 10 digit mobile phone number.');
		return false;
	}
		
	if (!isint(document.getElementById('n').value)) {
		alert('Please enter a numeric mobile phone number.');
		document.getElementById('n').focus();
		sef('nField');
		return false;
	}

	if (p.indexOf('?') < 0)
		document.location=p + '?c=s&g=1&n=' + document.getElementById('n').value;
	else
		document.location=p + '&c=s&g=1&n=' + document.getElementById('n').value;
}

function validateSubmitRecipeForm(theForm) {
	with (theForm) {		
		sof('nameField');
		sof('servesField');		
		sof('prepTimeField');
		sof('cookTimeField');
		sof('shortDescField');
		sof('ingredientsField');
		sof('instructField');

      	if (!clen(recipeName, 6, 192, 'nameField')) {
         	alert("Please enter a name between 6 and 192 characters.");
      		return false;
      	}

      	if (!clen(recipePrepTime, 1, 3, 'prepTimeField') || !isint(recipePrepTime.value) || (recipePrepTime.value > 240)) {
         	alert("Please enter a preparation time between 1 and 240 minutes.");
      		return false;
      	}
      
      	if (!clen(recipeCookTime, 1, 3, 'cookTimeField') || !isint(recipeCookTime.value) || (recipeCookTime.value > 300)) {
         	alert("Please enter a cooking time between 1 and 300 minutes.");
      		return false;
      	}
      
      	if (recipeDesc.value.length > 80) {
      		sef(recipeDesc);
      		recipeDesc.focus();
      		alert("Please enter a recipe description less than 15 words long.");
      		return false;
      	}

      	if (!clen(recipeIngredients, 32, 2048, 'ingredientsField')) {
 			alert("Please enter the ingredients for your recipe.");
         	return false;
      	}

      	if (!clen(recipeInstructions, 24, 2048, 'instructField')) {
 			alert("Please enter the instructions for preparing and cooking your recipe.");
         	return false;
      	}		
	}
	
	return true;
}

function validateStoreForm(theForm) {
	with (theForm) {		
		sof('nameField');
		sof('suburbField');		
		sof('stateField');
		sof('pcField');
		sof('countryField');

      	if (!clen(storeName, 4, 96, 'nameField')) {
         	alert("The store name is too long or short.");
      		return false;
      	}

      	if (!clen(storeSuburb, 2, 32, 'suburbField')) {
         	alert("The store suburb is too long or short.");
      		return false;
      	}
      
      	if (!clen(storeState, 2, 32, 'stateField')) {
         	alert("The store state is too long or short.");
      		return false;
      	}
      
      	if (!clen(storePC, 2, 7, 'pcField')) {
 			alert("The store postcode is too long or short.");
         	return false;
      	}

		if (country.selectedIndex == 0) {
 			alert("Please select a valid country.");
         	return false;
      	}
	}
	
	return true;
}

function validateProfileForm(theForm) {
	with (theForm) {		
		sof('emailField');
		sof('countryField');
		sof('postcodeField');
		sof('passwordField');
		sof('passwordConfirmField');

      	if (!clen(emailAddr, 6, 100, 'emailField')) {
 			alert("Please enter a valid email address.");
         	return false;
      	}

      	atPos  = emailAddr.value.indexOf('@');
      	dotPos = emailAddr.value.lastIndexOf('.');

      	if (atPos < 1 || dotPos < 4 || (dotPos - atPos) < 2) {
         	alert("Please enter a valid email address.");
			sef('emailField');
         	emailAddr.focus();
         	return false;
      	}

      	if (!clen(postcode, 1, 10, 'postcodeField')) {
         	alert("Please enter a postal/ZIP code between 1 and 10 characters.");
      		return false;
      	}
	      	      	
      	if (!isalpha(postcode.value))	{
         	alert("Please enter a postal/ZIP code between 1 and 10 characters.");
      		return false;
      	}
      	
		if (password.value != '' || passwordConfirm.value != '')
		{
			if (!clen(password, 6, 20, 'passwordField')) {
				alert("Please enter a password between 6 and 20 characters.");			
				return false;
			}
	
			if (!clen(passwordConfirm, 6, 20, 'passwordConfirmField')) {
				alert("Please enter a password between 6 and 20 characters.");
				return false;			
			}
			
			if (password.value != passwordConfirm.value) {
				alert("Your passwords do not match, please ensure they are the same.");			
				sef('passwordConfirmField');
				passwordConfirm.focus();
				return false;
			}		
		}
	}
	
	return true;
}

function clen(field, min, max, fieldId) {
	if (field.value == null || field.value == '' || field.value.length < min || field.value.length > max) {
		if (fieldId.length != 0)
			sef(fieldId);
	
		field.focus();
		return false;
	}
	
	return true;
}

function sof(fieldId) {
	document.getElementById(fieldId).className = 'okField';
}

function sef(fieldId) {
	document.getElementById(fieldId).className = 'errField';
}

function isint(str) {
	var v = "0123456789";
 
   	for (i=0; i<str.length; i++) { 
      	if (v.indexOf(str.charAt(i),0) == -1) 
			return false;
	}
	
   return true;
}

function isalpha(str) {
	var v = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  	for (i=0; i<str.length; i++) {
    	if (v.indexOf(str.charAt(i),0) == -1) 
    		return false;
  	}
  	return true;
}