function GetPositionY(elem) {
	var posY = 0;
	while (elem) {
		posY += elem.offsetTop;
		elem = elem.offsetParent;
	}
	return posY;
}

function ShowProgress(suffix) {
	if (navigator.appName.indexOf("Explorer") != -1) {
		var progress = $('ProgressIE'+suffix);
		if (progress) {
			progress.innerHTML = progressHTML;
		}
	}
	else {
		var progress = $('Progress'+suffix);
		if (progress) {
			progress.style.display = 'inline';
		}
	}
}

function HideProgress(suffix) {
	if (navigator.appName.indexOf("Explorer") != -1) {
		var progress = $('ProgressIE'+suffix);
		if (progress) {
			progress.innerHTML = "";
		}
	}
	else {
		var progress = $('Progress'+suffix);
		if (progress) {
			progress.style.display = 'none';
		}
	}
}

function IsDate(value) {
	var date = value.split("/");
	if (date.length != 3) {
		var date = value.split("-");
		if (date.length != 3) {
			var date = value.split(":");
			if (date.length != 3) {
				return false;
			}
		}
	}
	
	if (!IsNumeric(date[0]) || !IsNumeric(date[1]) || !IsNumeric(date[2])) {
		return false;
	}

	var year = parseInt(date[2], 10);
	var month = parseInt(date[0], 10) - 1;
	var day = parseInt(date[1], 10);

	if (year < 1800) {
		return false;
	}

	var today = new Date();
	var d = new Date();
	d.setYear(year);
	d.setMonth(month);
	d.setDate(day);
	if (d > today) {
		return false;
	}

	if (d.getDate() != day || d.getMonth() != month || d.getFullYear() != year) {
		return false;
	}
	return true;
}

function IsZipCode(value) {
	var zip = value.split("-");
	if (zip.length > 2) {
		return false;
	}
	if (zip[0].length != 5) {
		return false;
	}
	if (!IsNumeric(zip[0])) {
		return false;
	}
	if (zip.length > 1) {
		if (zip[1].length != 4) {
			return false;
		}
		if (!IsNumeric(zip[1])) {
			return false;
		}
	}
	return true;
}

function IsTelephone(value) {
	if (value.length < 10) {
		return false;
	}
	var digits = 0;
	var validNums = "0123456789";
	var validOther = "()-xX ";
	for (ii = 0; ii < value.length; ii++) { 
		if (validNums.indexOf(value.charAt(ii)) >= 0) {
			digits++;
		}
		else if (validOther.indexOf(value.charAt(ii)) == -1) {
			return false;
		}
	}
	return digits >= 10;
}

function IsEmail(value) {
	var email = value.split("@");
	if (email.length != 2) {
		return false;
	}
	if (!IsValid(email[0], '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.!#$%&*+-~_')) {
		return false;
	}
	if (!IsValid(email[1], '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-')) {
		return false;
	}
	return email[1].indexOf(".") != -1;
}

function IsValid(value, validChars) {
	if (value == '') {
		return false;
	}
	for (ii = 0; ii < value.length; ii++) { 
		if (validChars.indexOf(value.charAt(ii)) == -1) {
			return false;
		}
	}
	return true;
}

function ContainsChars(value, validChars) {
	if (value == '') {
		return false;
	}
	for (ii = 0; ii < value.length; ii++) { 
		if (validChars.indexOf(value.charAt(ii)) >= 0) {
			return true;
		}
	}
	return false;
}

function IsNumeric(value) {
	return IsValid(value, "0123456789");
}

function IsNumeric2(value) {
	return IsValid(value, "0123456789-");
}

var passwordStrength = new Array(
	  "<span style=\"background-color:#F44;\">&nbsp;Too Short&nbsp;</span>"
	, "<span style=\"background-color:#F44;\">&nbsp;Very Low&nbsp;</span>"
	, "<span style=\"background-color:yellow;\">&nbsp;Low&nbsp;</span>"
	, "<span style=\"background-color:yellow;\">&nbsp;Medium&nbsp;</span>"
	, "<span style=\"background-color:#4F4;\">&nbsp;High&nbsp;</span>"
	, "<span style=\"background-color:#4F4;\">&nbsp;Very High&nbsp;</span>"
);

function GetPasswordStrength(value) {
	if (value.length < 6) {
		return 0;
	}
	
	var containsLC = ContainsChars(value, "abcdefghijklmnopqrstuvwqyz");
	var containsUC = ContainsChars(value, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
	var containsNum = ContainsChars(value, "0123456789");
	var containsPunctuation = ContainsChars(value, "`~!@#$%^&*()_+-={}[]|\\:;'\",./<>?");
	
	var count = 0;
	if (value.length >= 8) count++;
	if (containsLC) count++;
	if (containsUC) count++;
	if (containsNum) count++;
	if (containsPunctuation) count++;
	
	return count;
}

function CheckSetNewPasswordFormBase(update) {
	var password = $('new_password').value;
	var confirmPassword = $('confirm_new_password').value;

	if (update && password.length == 0 && confirmPassword.length == 0) {
		$('new_password_Message').innerHTML = '';
		$('confirm_new_password_Message').innerHTML = '';
		return true;
	}

	var isOK = true;

	if (password.length < 6) {
		$('new_password_Message').innerHTML = '<span class="error_message">please enter 6 characters min.</span>';
		isOK = false;
	}
	else {
		UpdatePasswordStrength();
	}

	if (password != confirmPassword) {
		$('confirm_new_password_Message').innerHTML = '<span class="error_message">passwords do not match.</span>';
		isOK = false;
	}
	else {
		UpdatePasswordMatch();
	}

	return isOK;
}

function CheckSetNewPasswordForm() {
	var isOK = CheckSetNewPasswordFormBase(false);

	if (isOK) {
		var haveJS = $('havejs');
		if (haveJS) {
			haveJS.value = '1';
		}
		ShowProgress('');
	}
	
	return isOK;
}

function UpdatePasswordStrength() {
	var strength = GetPasswordStrength($('new_password').value);
	$('new_password_Message').innerHTML = "Password strength: " + passwordStrength[strength];
	UpdatePasswordMatch();
}

function UpdatePasswordMatch() {
	if ($('new_password').value.length > 0 && ($('new_password').value == $('confirm_new_password').value)) {
		$('confirm_new_password_Message').innerHTML = "passwords match !";
	}
	else {
		$('confirm_new_password_Message').innerHTML = "";
	}
}

function CheckSetNewEmailForm(update) {
	var email = $('new_email').value;
	var confirm_email = $('confirm_email').value;

	if (update && email == $('new_email').defaultValue && confirm_email == $('confirm_email').defaultValue) {
		$('emailMessage').innerHTML = '';
		$('confirmEmailMessage').innerHTML = '';
		return true;
	}

	var isOK = true;

	if (IsEmail(email)) {
		$('emailMessage').innerHTML = "";
	}
	else if (email == '') {
		$('emailMessage').innerHTML = '<span class="error_message">please enter an e-mail address</span>';
		isOK = false;
	}
	else {
		$('emailMessage').innerHTML = '<span class="error_message">invalid e-mail address</span>';
		isOK = false;
	}

	if (email == confirm_email) {
		UpdateEmailMatch();
	}
	else {
		$('confirmEmailMessage').innerHTML = '<span class="error_message">e-mails do not match.</span>';
		isOK = false;
	}

	return isOK;
}

function UpdateEmailMatch() {
	if ($('new_email').value.length > 0 && ($('new_email').value == $('confirm_email').value)) {
		$('confirmEmailMessage').innerHTML = "e-mails match !";
	}
	else {
		$('confirmEmailMessage').innerHTML = "";
	}
}

var gOriginalMessages = new Array();

function RestoreMessage(id) {
	if (typeof(gOriginalMessages[id]) != 'undefined') {
		$(id).innerHTML = gOriginalMessages[id];
	}
}

function ShowErrorMessage(id, message) {
	if (typeof(gOriginalMessages[id]) == 'undefined') {
		gOriginalMessages[id] = $(id).innerHTML;
	}
	$(id).innerHTML = '<span class="errorMessageR">'+message+'</span>';
}

function CheckAddressFormCore(prefix, requireAddress) {
	var isOK = true;

	if ($(prefix+'name').value.length == 0) {
		ShowErrorMessage(prefix+'nameMessage', "Value required.");
		isOK = false;
	}
	else {
		RestoreMessage(prefix+'nameMessage');
	}

	if (requireAddress && $(prefix+'address').value.length == 0) {
		ShowErrorMessage(prefix+'addressMessage', "Value required.");
		isOK = false;
	}
	else {
		RestoreMessage(prefix+'addressMessage');
	}

	if (requireAddress && $(prefix+'city').value.length == 0) {
		ShowErrorMessage(prefix+'cityMessage', "Value required.");
		isOK = false;
	}
	else {
		RestoreMessage(prefix+'cityMessage');
	}

	var zipCode = $(prefix+'zip').value;

	if (requireAddress && zipCode.length == 0) {
		ShowErrorMessage(prefix+'zipCodeMessage', "Value required.");
		isOK = false;
	}
	else if (zipCode.length > 0 && !IsZipCode(zipCode)) {
		ShowErrorMessage(prefix+'zipCodeMessage', "Invalid zip code");
		isOK = false;
	}
	else {
		RestoreMessage(prefix+'zipCodeMessage');
	}

	var dayPhone = $(prefix+'dayPhone').value;
	var eveningPhone = $(prefix+'eveningPhone').value;
	var cellPhone = $(prefix+'cellPhone').value;

	if (dayPhone.length > 0 && !IsTelephone(dayPhone)) {
		ShowErrorMessage(prefix+'dayPhoneMessage', "Invalid telephone.");
		isOK = false;
	}
	else {
		RestoreMessage(prefix+'dayPhoneMessage');
	}

	if (eveningPhone.length > 0 && !IsTelephone(eveningPhone)) {
		ShowErrorMessage(prefix+'eveningPhoneMessage', "Invalid telephone.");
		isOK = false;
	}
	else {
		RestoreMessage(prefix+'eveningPhoneMessage');
	}

	if (cellPhone.length > 0 && !IsTelephone(cellPhone)) {
		ShowErrorMessage(prefix+'cellPhoneMessage', "Invalid telephone.");
		isOK = false;
	}
	else {
		RestoreMessage(prefix+'cellPhoneMessage');
	}
	
	return isOK;
}

function CheckAddressForm_(prefix) {
	var isOK = CheckAddressFormCore(prefix, true);

	var dayPhone = $(prefix+'dayPhone').value;
	var eveningPhone = $(prefix+'eveningPhone').value;
	var cellPhone = $(prefix+'cellPhone').value;

	if (dayPhone.length > 0 || eveningPhone.length > 0 || cellPhone.length > 0) {
		RestoreMessage(prefix+'phoneMessage');
	}
	else {
		ShowErrorMessage(prefix+'phoneMessage', "Please enter at least one phone number.");
		isOK = false;
	}
	return isOK;
}

function CheckAddressForm() {
	var isOKs = CheckAddressForm_('s');
	var isOKb = CheckAddressForm_('b');

	if (isOKs && isOKb) {
		ShowProgress('');
	}
	return isOKs && isOKb;
}

function CheckEmergencyContactForm() {
	var isOK = CheckAddressFormCore('', false);

	var dayPhone = $('dayPhone').value;
	var eveningPhone = $('eveningPhone').value;
	var cellPhone = $('cellPhone').value;
	var email = $('email').value;

	if (dayPhone.length > 0 || eveningPhone.length > 0 || cellPhone.length > 0) {
		RestoreMessage('phoneMessage');
	}
	else {
		ShowErrorMessage('phoneMessage', "Please enter at least one phone number.");
		isOK = false;
	}

	if (email.length == 0 || IsEmail(email)) {
		RestoreMessage('emailMessage');
	}
	else {
		ShowErrorMessage('emailMessage', "Invalid email address.");
		isOK = false;
	}
	
	if ($('relationship').value.length > 0) {
		RestoreMessage('relationshipMessage');
	}
	else {
		ShowErrorMessage('relationshipMessage', "Please enter relationship.");
		isOK = false;
	}

	if (isOK) {
		ShowProgress('');
	}
	return isOK;
}

function GetElementsByClassName(classname) {
	var node = document.getElementsByTagName("body")[0];
	var regex = new RegExp('\\b' + classname + '\\b');
	var allElements = node.getElementsByTagName("*");

	var result = new Array();
	for (var ii in allElements) {
		if (regex.test(allElements[ii].className)) {
			result.push(allElements[ii]);
		}
	}
	return result;
}


function GenderUpdated() {
	var female = $('gender_f').checked;

	var form = $('new_customer');
	form.pregnant[0].disabled = !female;
	form.pregnant[1].disabled = !female;
	form.pregnant[2].disabled = !female;

	form.nursing[0].disabled = !female;
	form.nursing[1].disabled = !female;

	var toGrey = GetElementsByClassName("WomenOnlyGrey");
	for (var ii = 0 ; ii < toGrey.length ; ii++) {
		if (female) {
			toGrey[ii].style.color = '#000';
		}
		else {
			toGrey[ii].style.color = '#999';
		}
	}
	$('womenOnlyMessage').innerHTML = "";
}

function CheckPersonalInformationForm() {
	var isOK = true;

	var firstName = $('cFirstName').value;
	var lastName = $('cLastName').value;

	if (firstName.length == 0 && lastName.length == 0) {
		$('nameMessage').innerHTML = "Please enter your name.";
		isOK = false;
	}
	else if (firstName.length == 0) {
		$('nameMessage').innerHTML = "Please enter your first name.";
		isOK = false;
	}
	else if (lastName.length == 0) {
		$('nameMessage').innerHTML = "Please enter your last name.";
		isOK = false;
	}
	else {
		$('nameMessage').innerHTML = "";
	}

	var birthday = $('birthday').value;
	if (IsDate(birthday)) {
		$('birthdayMessage').innerHTML = "";
	}
	else if (birthday.length > 0) {
		$('birthdayMessage').innerHTML = "Invalid birthday";
		isOK = false;
	}
	else {
		$('birthdayMessage').innerHTML = "Please enter your birthday";
		isOK = false;
	}

	if ($('gender_m').checked || $('gender_f').checked) {
		$('genderMessage').innerHTML = "";
	}
	else {
		$('genderMessage').innerHTML = "Please select a gender";
		isOK = false;
	}

	var needPregnant = $('gender_f').checked && !$('pregnant_y').checked && !$('pregnant_n').checked && !$('pregnant_u').checked;
	var needNursing = $('gender_f').checked && !$('nursing_y').checked && !$('nursing_n').checked;

	if (needPregnant && needNursing) {
		$('womenOnlyMessage').innerHTML = "Please specify if you're pregnant and/or nursing";
		isOK = false;
	}
	else if (needPregnant) {
		$('womenOnlyMessage').innerHTML = "Please specify if you're pregnant";
		isOK = false;
	}
	else if (needNursing) {
		$('womenOnlyMessage').innerHTML = "Please specify if you're nursing";
		isOK = false;
	}
	else {
		$('womenOnlyMessage').innerHTML = "";
	}

	var emergencyContactMessage = $('emergencyContactMessage');
	if (emergencyContactMessage) {
		if ($('name').value.length == 0 || $('dayPhone').value.length == 0 || $('relationship').value.length == 0) {
			emergencyContactMessage.innerHTML = "Please specify emergency contact";
			isOK = false;
		}
		else {
			emergencyContactMessage.innerHTML = "";
		}
	}

	if (isOK) {
		ShowProgress('');
	}

	return isOK;
}

function CheckMedicalHistoryForm(idQ) {
	var isOK = true;

	if (isOK) {
		ShowProgress('');
	}
	return isOK;
}

function CheckSummaryForm() {
	ShowProgress('');
	ShowProgress('2');
	return true;
}

function CheckPurchaseOrderForm() {
	ShowProgress('');
	return true;
}

function CheckLoginForm() {
	var haveJS = $('havejs');
	if (haveJS) {
		haveJS.value = '1';
	}
	var haveJS0 = $('havejs0');
	if (haveJS0) {
		haveJS0.value = '1';
	}
	ShowProgress('');
	return true;
}

function CheckPaymentInformationForm() {
	var isOK = true;

	var ccNumberDigits = 0;
	var ccSecCodeDigits = 0;

	var ccType = $('ccName').value;
	if (ccType == "AMEX") {
		ccNumberDigits = 15;
		ccSecCodeDigits = 4;
	}
	else {
		ccNumberDigits = 16;
		ccSecCodeDigits = 3;
	}

	var ccNumber = $('ccNumber').value;
	if (ccNumber.length == 0) {
		$('ccNumberMessage').innerHTML = "Please enter your credit card number";
		isOK = false;
	}
	else if (!IsNumeric(ccNumber)) {
		$('ccNumberMessage').innerHTML = "Value must be numeric, without spaces or dashes";
		isOK = false;
	}
	else if (ccNumber.length != ccNumberDigits) {
		$('ccNumberMessage').innerHTML = "Please enter " + ccNumberDigits + " digits";
		isOK = false;
	}
	else {
		$('ccNumberMessage').innerHTML = "";
	}

	var ccSecCode = $('ccSecCode').value;
	if (ccSecCode.length == 0) {
		$('ccSecurityCodeMessage').innerHTML = "Please enter your security code";
		isOK = false;
	}
	else if (!IsNumeric(ccSecCode)) {
		$('ccSecurityCodeMessage').innerHTML = "Value must be numeric";
		isOK = false;
	}
	else if (ccSecCode.length != ccSecCodeDigits) {
		$('ccSecurityCodeMessage').innerHTML = "Please enter " + ccSecCodeDigits + " digits";
		isOK = false;
	}
	else {
		$('ccSecurityCodeMessage').innerHTML = "";
	}

	var ccExpMonth = 0;
	var ccExpYear = 0;
	if (IsNumeric($('ccExpMonth').value)) {
		ccExpMonth = parseInt($('ccExpMonth').value, 10);
	}
	if (IsNumeric($('ccExpYear').value)) {
		ccExpYear = parseInt($('ccExpYear').value, 10);
	}
	var today = new Date();
	if (ccExpYear == 0 || ccExpMonth == 0) {
		$('ccExpirationMessage').innerHTML = "Please enter expiration date";
		isOK = false;
	}
	else if (ccExpYear < today.getFullYear() || (ccExpYear == today.getFullYear() && ccExpMonth < today.getMonth())) {
		$('ccExpirationMessage').innerHTML = "The expiration period is invalid";
		isOK = false;
	}
	else {
		$('ccExpirationMessage').innerHTML = "";
	}

	if (isOK) {
		ShowProgress('');
	}
	return isOK;
}

function CheckResetPasswordForm() {
	var isOK = true;

	if (!IsEmail($('email').value)) {
		$('emailMessage').innerHTML = "Invalid email address";
		isOK = false;
	}

	if (isOK) {
		ShowProgress('');
	}
	return isOK;
}

function CheckChangeEmailOrPasswordForm() {
	var isOK = true;
	if ($('curr_pass').value.length == 0) {
		$('curr_pass_Message').innerHTML = "Please enter current password.";
		isOK = false;
	}
	if ($('curr_pass').value.length < 6) {
		$('curr_pass_Message').innerHTML = "Your current password needs at least 6 characters.";
		isOK = false;
	}
	else {
		$('curr_pass_Message').innerHTML = "";
	}

	if (!CheckSetNewEmailForm(true)) {
		isOK = false;
	}
	
	if (!CheckSetNewPasswordFormBase(true)) {
		isOK = false;
	}

	if (isOK) {
		ShowProgress('');
	}
	return isOK;
}

function CheckCreateAccountForm() {
	var isOK = true;

	if (!CheckSetNewEmailForm(false)) {
		isOK = false;
	}

	if ($('termsAndConditions').checked) {
		$('termsAndConditionsMessage').innerHTML = "";
	}
	else {
		isOK = false;
		$('termsAndConditionsMessage').innerHTML = '<span class="error_message">please check accept</span>';
	}
	
	if (!CheckSetNewPasswordFormBase(false)) {
		isOK = false;
	}

	if (isOK) {
		$('havejs2').value = '1';
		ShowProgress('2');
	}
	return isOK;
}

function CheckAcceptTermsForm() {
	var isOK = true;

	if ($('termsAndConditions').checked) {
		$('termsAndConditionsMessage').innerHTML = "";
	}
	else {
		isOK = false;
		$('termsAndConditionsMessage').innerHTML = '<span class="error_message">please check accept</span>';
	}

	if (isOK) {
		ShowProgress('');
	}
	return isOK;
}

function SetPleaseFill(itemId, doSet) {
	var item = $(itemId);
	if (item) {
		if (doSet) {
			$(item).className = $(item).className.replace('Alternate', 'PleaseFill');
		}
		else {
			$(item).className = $(item).className.replace('PleaseFill', 'Alternate');
		}
	}
}

function CheckFeedbackForm() {
	var isOK = true;
	var setString = '';

	var requireAllFeedback = true;
	//var requireAllFeedback = !$('feedback').checked;

	for (var ii = 0 ; ii < items.length ; ii++) {
		var idItem = items[ii];

		var feedback0 = $('feedback_' + idItem + '_0');
		var feedback1 = $('feedback_' + idItem + '_1');
		var feedback2 = $('feedback_' + idItem + '_2');
		var feedback3 = $('feedback_' + idItem + '_3');
		
		if (   feedback0.checked
			|| feedback1.checked
			|| feedback2.checked
			|| feedback3.checked
			) 
		{
			if (setString.length > 0) {
				setString += '_';
			}
			var idItem = items[ii];
			if (feedback0.checked) {
				setString += idItem + 'x0';
			}
			else if (feedback1.checked) {
				setString += idItem + 'x1';
			}
			else if (feedback2.checked) {
				setString += idItem + 'x2';
			}
			else if (feedback3.checked) {
				setString += idItem + 'x3';
			}

			SetPleaseFill('feedback_container_' + idItem + '_0', false);
			SetPleaseFill('feedback_container_' + idItem + '_1', false);
			SetPleaseFill('feedback_container_' + idItem + '_2', false);
			SetPleaseFill('feedback_container_' + idItem + '_3', false);

			$('feedback_message').innerHTML = "";
		}
		else if (requireAllFeedback) {
			SetPleaseFill('feedback_container_' + idItem + '_0', true);
			SetPleaseFill('feedback_container_' + idItem + '_1', true);
			SetPleaseFill('feedback_container_' + idItem + '_2', true);
			SetPleaseFill('feedback_container_' + idItem + '_3', true);
			$('feedback_message').innerHTML = "Please provide feedback for all symptoms";
			isOK = false;
		}
		else {
			$('feedback_message').innerHTML = "";
		}
	}

	if (isOK) {
		$('set').value = setString;
	}

	return isOK;
}
