function twitterMore(id) {
        Effect.toggle('twitterSmall_'+id, 'blind', { queue: 'end' });
        Effect.toggle('twitterLarge_'+id, 'blind', { queue: 'end' });
        return false;
}

function twitterLess(id) {
        Effect.toggle('twitterLarge_'+id, 'blind', { queue: 'end' });
        Effect.toggle('twitterSmall_'+id, 'blind', { queue: 'end' });
        return false;
}

function validateArticleForm() {
	var error = '';
	if ($F('articleTitle') == '') {
		error += "Please enter title.\n";
	}
	if ($F('libraryContent') == '') {
		error += "Please enter the text.\n";
	} 
	if (error != '') {
		alert(error);
		return false;
	}
	$('articleForm').submit();
	return true;
}
function validateVoucherForm() {
	var error = '';
	if ($F('voucherToName') == '') {
		error += "Please enter the recipient's name.\n";
	}
	if ($F('voucherToEmail') == '') {
		error += "Please enter the recipient's email address.\n";
	} else {
		var emailRegEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if (!$F('voucherToEmail').match(emailRegEx)) {
			error += "Please enter a valid email address.\n";
		}
	}
	if (error != '') {
		alert(error);
		return false;
	}
	$('voucherForm').submit();
	return true;
}

function updateProductPricing() {
	var checked = $('productForm').getInputs('radio','productTypeSelect').find(
		function(re) { return re.checked; }
	);
	if (!checked) {
		$('salePriceHolder').update('N/A');
		$('retailPriceHolder').update('N/A');
		$('savingHolder').update('N/A');
		$('savingHolder').up('tr').hide();
	} else {
		$('salePriceHolder').update($(checked).getAttribute('salePrice'));
		$('retailPriceHolder').update($(checked).getAttribute('retailPrice'));
		$('savingHolder').update($(checked).getAttribute('saving').gsub("Save ", ""));
		if ($(checked).getAttribute('saving') != '') {
			$('savingHolder').up('tr').show();
		} else {
			$('savingHolder').up('tr').hide();
		}		
	}
	
}

function initialiseTabs() {
	$$('div.tab-content').each(function (elem) {
		if ($(elem).getAttribute('id') != 'tabContentDescription') {
			$(elem).hide();
		}
	});
	$$('div#tabbed-info li a').each(function (link) {
		$(link).observe("focus", function () {
			this.blur();
		});
	});
	$$('li.tab')[0].addClassName('tab-active');
}

function switchTab(link) {
	var active = $(link).up().getAttribute("id").gsub("tab", "");
	$$("div#tabbed-info div.tab-content").each(function (elem) {
		if ($(elem).getAttribute("id") == "tabContent"+active) {
			$(elem).show();
		} else {
			$(elem).hide();
		}
	});
	$$("div#tabbed-info li.tab").each(function (tab) {
		if ($(tab).getAttribute("id") == "tab"+active) {
			$(tab).addClassName('tab-active');
		} else {
			$(tab).removeClassName('tab-active');
		}
	});
	return false;
}

function validateSearchBox(f) {
	var term = f.searchKeywords.value;
	term = term.replace(/^\s+|\s+$/g, '');
	if (!term || term == '') {
		if (f.searchManufacturerID.selectedIndex != 0) {
			var url = '/search?goManufacturer=';
			url += f.searchManufacturerID.options[f.searchManufacturerID.selectedIndex].value;
			document.location.href = url;
			return false;
		} else {
			alert('Please enter one or more search keywords or select a manufacturer.');
			return false;
		}
	}
	return true;
}


function showVoucherBox() {
  if (!document.getElementById('voucherBox') || !document.getElementById('voucherPrompt')) {
    alert("Sorry, an error occurred. Please try refreshing the page.");
    return false;
  }
  document.getElementById('voucherBox').style.display = '';
  document.getElementById('voucherPrompt').style.display = 'none';
}

function validateVoucherCode(f) {
  if (!f.voucherCode) {
    alert("Sorry, an error occurred. Please try refreshing the page.");
    return false;
  } else if (f.voucherCode.value.length < 13 || f.voucherCode.value.length > 14) {
    alert("Invalid voucher code - please ensure your code is 7 numbers followed by 6 letters, with a hyphen in between.");
    return false;
  }
  f.formAction.value = 'validateVoucher';
  f.submit();
}

function setStarRating(r) {
        if (r < 1) {
                r = 1;
        } else if (r > 5) {
                r = 5;
        }
        for (var i=1; i <= r; i++) {
                document.getElementById('starRating' + i).src='/webicons/star_yellow.gif';
        }
        for (var i=r+1; i <= 5; i++) {
                document.getElementById('starRating' + i).src='/webicons/star_grey.gif';
        }
        document.getElementById('starRatingValue').value=r;
        document.getElementById('starRatingLabel').innerHTML=r;
}

function validateReview(f) {
        if (f.ratingValue.value=='0') {
                alert("Please select a rating for this product.");
                return false;
        }
        if (f.reviewComments.value=='') {
                alert("Please enter your comments for this product.");
                return false;
        }
        if (!f.acceptGuidelines.checked) {
                alert("Please confirm you have read and accept the review guidelines.");
                return false;
        }
        f.formAction.value = 'addReview';
        f.submit();
        return true;
}


function validateLoginForm(f) {

	if (f.username.value == '' || f.password.value == '') {
		alert("Please enter your username and password.");
		if (f.username.value == '') {
			f.username.focus();
		} else {
			f.password.focus();
		}
		return false;
	}

	f.submit();

	return false;
}

function submitLogin(f) {
	if (f.username.value == '' || f.password.value == '') {
		alert("Please enter your username and password to login.");
	} else {
		f.formAction.value = 'doLogin';
		f.action = '/login.php';
		f.submit();
	}
}

function updatePasswordField(e) {
	if (e.name == 'passwordDummy') {
		e.style.display = 'none';
		e.form.password.style.display = '';
		e.form.password.value = '';
		e.form.password.focus();
	} else if (e.name == 'password' && e.value == '') {
		e.style.display = 'none';
		e.form.passwordDummy.style.display = '';
	} else {
		return false;
	}
}

function validateChangePassword(f) {
	if (f.currentPassword.value == '' || f.newPassword.value == '' || f.newPassword2.value == '') {
		alert("Please complete all fields.");
		return false;
	}

	if (f.newPassword.value != f.newPassword2.value) {
		alert("New password & confirmation value do not match. Please check.");
		return false;
	} else if (f.newPassword.value.length < 5) {
		alert("Your password must be at least 5 characters long.");
		return false;
	}

	f.submit();
	return true;
}

function numeralsOnly(evt) {
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : ((evt.which) ? evt.which : 0));
	if (charCode > 31 && (charCode < 48 || charCode > 57)) {
		return false;
	}
	return true;
}

function validateBasketQty(f) {
	if (f.value == '' || isNaN(f.value) || f.value < 1) {
		alert("Please enter a numerical quantity between 1 and 20.");
		return false;
	} else if (f.value > 20) {
		f.value = 20;
		alert("Please contact us to order more than 20 items.");
		return false;
	}
}

function addLoadEvent(func) {
	var oldOnLoad = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldOnLoad();
			func();
		}
	}
}

function validateNutritionForm(f) {
	var errorState = 0;
	var requiredFields = new Array("userName", "userEmail", "userGender", "userDOB",
		"userSmokes", "userPregnant", "userBreastFeeding", "userSeeingGP", "userMedication",
		"userSupplements", "userQuestion");
		
	var v = new wizbitFormValidator(f);
	v.errorClass = 'error';
	v.standardClass = '';
	v.validate(requiredFields);
	if (!v.formIsValid) {
		alert("Please ensure you have completed all fields.");
		return false;
	}
	
	f.formAction.value = 'sendQuestion';
	f.submit();
	
}

function validatePaymentForm(f) {
	
	var errorState = 0;
	var requiredFields = new Array("userFirstName", "emailAddress", "userLastName",
		"userTelephone", "userAddr1", "userPostCode", "userCountry");
	
	var v = new wizbitFormValidator(f);
	
	v.errorClass = 'error';
	v.standardClass = ''; 
	
	v.validate(requiredFields); 
	if (!v.formIsValid) {
		alert("Please complete the highlighted fields.");
		return false;
	}
	
	if (!f.tcAccept.checked) {
		alert("Please tick the box to confirm you have read and accepted our terms and conditions.");
		return false;
	}
	
	f.formAction.value = 'proceedToPayment';
	f.submit();
	
}

function validateEmailPageForm(f) {
	var errorState = 0;
	var requiredFields = new Array("senderName", "senderEmail", "rcptName", "rcptEmail");
		
	var v = new wizbitFormValidator(f);
	v.errorClass = 'error';
	v.standardClass = '';
	v.validate(requiredFields);
	if (!v.formIsValid) {
		alert("Please complete all fields before proceeding.");
		return false;
	}
	
	f.formAction.value = 'sendPageLink';
	f.submit();
	
}

function validateRegistrationForm(f) {
	var errorState = 0;
	var requiredFields = new Array("userEmail", "userFirstName", "userLastName",
		"userAddr1", "userCountry", "userPostCode", "userTelephone",
		"userPassword", "userPasswordConfirm");
		
	var v = new wizbitFormValidator(f);
	v.errorClass = 'error';
	v.standardClass = '';
	v.validate(requiredFields);
	if (!v.formIsValid) {
		alert("Please correct the highlighted fields.");
		return false;
	}

	if (f.userPassword.value != f.userPasswordConfirm.value) {
		alert("Your password entries do not match!");
		return false;
	} else if (f.userPassword.value.length < 5) {
		alert("Please ensure your password is at least 5 characters long.");
		return false;
	}
	
	if (!f.userHealthProf.checked) {
        alert("Please confirm that you are a healthcare professional .");
        return false;
}
	
	f.formAction.value = 'processRegistration';
	f.submit();
}

function validateUserData(f) {
	var errorState = 0;
	var requiredFields = new Array("userEmail", "userFirstName", "userLastName",
		"userAddr1", "userCountry", "userPostCode", "userTelephone");
	
	var v = new wizbitFormValidator(f);
	v.errorClass = 'error';
	v.standardClass = '';
	v.validate(requiredFields);
	
	if (!v.formIsValid) {
		alert("Please complete the highlighted fields.");
		return false;
	}
	
	f.formAction.value = 'updateUserData';
	f.submit();
}

function updateAddressBookAction(f) {
	var action = '';
	for (var i = 0; i < f.formAction.length; i++) {
		if (f.formAction[i].checked) {
			action = f.formAction[i].value;
		}
	}
	
	if (action == 'addNewAddress') {
		Effect.Shrink('findButton');
		f.userInfoID.disabled = true;
		f.reset();
	} else {
		f.userInfoID.disabled = false;
		f.reset();
		f.formAction[1].checked = true;
	}
}

function validateChangePassword(f) {
	if (f.currentPassword.value == '' || f.newPassword.value == '' || f.newPassword2.value == '') {
		alert("Please complete all fields.");
		return false;
	}

	if (f.newPassword.value != f.newPassword2.value) {
		alert("New password & confirmation value do not match. Please check.");
		return false;
	} else if (f.newPassword.value.length < 5) {
		alert("Your password must be at least 5 characters long.");
		return false;
	}

	f.submit();
	return true;
}

function addProductToCart(f) {
	if (!f.productTypeSelect) {
		alert("This product is currently unavailable.");
		return false;
	}
	
	var found = false;
	
	if (f.productTypeSelect.length) {
		for (var i = 0; i < f.productTypeSelect.length; i++) {
			if (f.productTypeSelect[i].checked) {
				found = true;
			}
		}
	} else {
		if (f.productTypeSelect.checked) found = true;
	}
	
	if (!found) {
		alert("Please select a product option to continue.");
		return false;
	}
	
	if (f.itemQuantity.value == '' || f.itemQuantity.value < 1 || isNaN(f.itemQuantity.value)) {
		alert("Please enter a numerical quantity between 1 and 20.");
		return false;
	} else if (f.itemQuantity.value > 20) {
		alert("Please contact us to order more than 20 items.");
		return false;
	}
	
	f.formAction.value = 'addToCart';
	f.submit();
}

function deleteBasketItem(id) {
	if (!document.getElementById('basketQty_' + id) || (!document.getElementById('shoppingBasketForm') && !document.getElementById('checkoutForm'))) {
		alert("Sorry, an error occurred.\n\nPlease try refreshing the page.");
		return false;
	}
	
	document.getElementById('basketQty_' + id).value = 0;
	var f = document.getElementById('shoppingBasketForm');
	if (!f) var f = document.getElementById('checkoutForm'); 
	f.formAction.value = 'updateBasket';
	
	f.submit();
}

function updateShoppingBasket() {
	var f = document.getElementById('shoppingBasketForm');
	if (!f) {
		var f = document.getElementById('checkoutForm');
		if (!f) {
		alert("Sorry, an error occurred.\n\nPlease try refreshing the page.");
		return false;
		}
	}
	
	f.formAction.value = 'updateBasket';
	f.submit();
}


/**
 * Form validation functions
 *
 **/

wizbitFormValidator = function(f) {
	this.form = f;
}

wizbitFormValidator.prototype.form = null;
wizbitFormValidator.prototype.formIsValid = true;
wizbitFormValidator.prototype.highlightErrors = true;
wizbitFormValidator.prototype.errorClass = 'adminFormError';
wizbitFormValidator.prototype.standardClass = 'adminForm';

wizbitFormValidator.prototype.validate = function(req) {
	for (var i = 0; i < req.length; i++) {
		if (!this.form.elements[req[i]]) {
			alert('Field ' + req[i] + ' not found!');
			this.formIsValid = false;
			return false;
		}
		with (this.form.elements[req[i]]) {
			if (this.highlightErrors) {
				className = this.standardClass;
			}
			switch (tagName) {
				case 'INPUT':
					switch (type) {
						case 'text':
						case 'password':
							if (value == '') {
								this.formIsValid = false;
								if (this.highlightErrors) {
									className = this.errorClass;
								}
							}
							break;
					}
					break;
				case 'TEXTAREA':
					if (value == '') {
						this.formIsValid = false;
						if (this.highlightErrors) {
							className = this.errorClass;
						}
					}
					break;
				case 'SELECT':
					if (multiple) {
						var madeSelection = false;
						for (var j = 0; j < options.length; j++) {
							if (options[j].selected) {
								madeSelection = true;
							}
						}
						if (!madeSelection) {
							this.formIsValid = false;
							if (this.highlightErrors) {
								className = this.errorClass;
							}
						}
					} else {
						if (options[selectedIndex].value == '') {
							this.formIsValid = false;
							if (this.highlightErrors) {
								className = this.errorClass;
							}
						}
					}
					break;	
			}
		}
	}
}

