
	function hide(element) {
		element.style.display = "none";
	}
	
	function show(element) {
		element.style.display = "block";
	}

	function showInline(element) {
		element.style.display = "inline";
	}
	
	//TODO should be called onload in case the page loads from an error state or otherwise with the userIsParticipant box checked already
	function setUserInfoVisibility() {
		var userIsParticipant = document.getElementById("isUserParticipantTrue").checked;
		var userIsNotParticipant = document.getElementById("isUserParticipantFalse").checked;
		var genericNamesList = getElementsByClassName(document,"*","name-generic");
		var myNamesList = getElementsByClassName(document,"*","first-pers-pronoun");
		
		
		if (userIsParticipant) {
			for (i=0; i<myNamesList.length; i++){
				show(myNamesList[i]);
			}
			for (i=0; i<genericNamesList.length; i++){
				hide(genericNamesList[i]);
			}				
		}
		
		if (userIsNotParticipant) {
			for (i=0; i<genericNamesList.length; i++){
				show(genericNamesList[i]);
			}
			for (i=0; i<myNamesList.length; i++){
				hide(myNamesList[i]);
			}			
		}
		
		//if neither is checked, load the page with info box hidden
	}
	
	
	//This method is working correctly; I now need to change when it gets called
	//TODO use DOM to append event handlers rather than onclick/onchange in html
	function setFormElementsEnabled() {
		if (document.getElementById("participantGenderMale")) {
			var participantGenderMale = document.getElementById("participantGenderMale").checked;
 			displayTestInfo(participantGenderMale);	
		}		
	}
	
	function displayTestInfo(showMale) {
		if (showMale) {
			hide(document.getElementById("test-choice-info-female"));
			show (document.getElementById("test-choice-info-male"));
		} else {
			hide(document.getElementById("test-choice-info-male"));
			show (document.getElementById("test-choice-info-female"));
		}	
	}
	
	function hideTestInfo() {
		hide(document.getElementById("test-choice-info-male"));
		hide(document.getElementById("test-choice-info-female"));
	}

	//This method is working correctly; I now need to change when it gets called
	//TODO use DOM to append event handlers rather than onclick/onchange in html
	function setAddToCartEnabled() {
	
		//alert ("checking whether to enable button");
		var radioList =	getElementsByClassName(document,"input","test-list-input");
		var enableButton = false;
		
	    for (var i=0; i<radioList.length; i++){
			if (radioList[i].checked) {
				enableButton = true;
			}
	    }

		var singleTestCheckbox = document.getElementById("p_checkbox");
		
		if (singleTestCheckbox && singleTestCheckbox.checked){
			enableButton = true;
		}
		
		if (enableButton) {
			enableElement (document.getElementById("add-to-cart-button"));
		} else {
			disableElement (document.getElementById("add-to-cart-button"));
		
		}
		
			
	}
	
	function getElementsByClassName(oElm, strTagName, strClassName){
		var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	    var arrReturnElements = new Array();
	    strClassName = strClassName.replace(/\-/g, "\\-");
	    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++){
	        oElement = arrElements[i];
	        if(oRegExp.test(oElement.className)){
	            arrReturnElements.push(oElement);
	        }
	    }
	    return (arrReturnElements)
	}
	
	function disableElement (element) {	
		element.disabled = true;
		addClass (element, "disabled");

	}
		
	function enableElement (element) {
		element.disabled = false;
		removeClass (element, "disabled");
	}	
	
	
	function removeClass (element, className) {
		var elementClass = "";
		var otherClasses = element.className.split(className);
		for (i=0; i< otherClasses.length; i++) {
			elementClass += otherClasses[i];
			//alert (otherClasses[i]);
		}
		element.className = elementClass;
	}
	
	function addClass (element, className) {
			//alert (element.className);
			
		if (element.className.indexOf(className) < 0) {
			element.className  += " " + className;
		}
			//alert (element.className);
		
	}
	
	function selectAndSubmit(productId) {
		selectAndSubmitDynamic(productId,productId,"");
	}

	
	function selectAndSubmitDynamic(productId,cartProductId,price) {
		var form = document.getElementById("add-to-cart-form");
		form["acom_product_code"].value = cartProductId;
		form["product"].value = productId;
		form["displayPrice"].value = price;
		form.submit();
	}
	
	function setOffermaticaCookie(offerCode) {
		setCookie("aDnaOfferCode",offerCode);
	}

	function getOffermaticaCookie() {
		getCookie("aDnaOfferCode");
	}
	
	/* js cookie management from w3schools.com/js/js_cookies.asp */
	function setCookie(c_name,value,expiredays)
	{
		var exdate=new Date();
		exdate.setDate(exdate.getDate()+expiredays);
		document.cookie=c_name+ "=" +escape(value)+
		((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
	}
	
	/* js cookie management from w3schools.com/js/js_cookies.asp */
	function getCookie(c_name)
	{
		if (document.cookie.length>0)
		  {
		  c_start=document.cookie.indexOf(c_name + "=");
		  if (c_start!=-1)
		    { 
		    c_start=c_start + c_name.length+1; 
		    c_end=document.cookie.indexOf(";",c_start);
		    if (c_end==-1) c_end=document.cookie.length;
		    return unescape(document.cookie.substring(c_start,c_end));
		    } 
		  }
		return "";
	}
	
	function addToAncestryCart() {
		var form = document.getElementById("add-to-cart-form");
		var participantFirstName = document.getElementById("participantFirstNameMe").value;
		var participantLastName = document.getElementById("participantLastNameMe").value;
		var participantGender = document.getElementById("participantGender").value;	
		var userIsParticipant = document.getElementById("isUserParticipantTrue").checked;	
		var userId = document.getElementById("participantId").value;	

	//	var privacyPreference = document.getElementById("privacyPreference").checked; 
		

		if (!userIsParticipant) {
			participantFirstName = document.getElementById("participantFirstNameOther").value;
			participantLastName = document.getElementById("participantLastNameOther").value;
			userId = "-1";
		} else if (userId.length == 0) {
			userId = "0"; // if userid is unknown, explicitly set it to 0
		}

		if (participantFirstName == "" || participantLastName == "") {
			return showErrorMessage();
		}
		
		var selectedId = form["product"].value;
		form["p"].value = "mfsku" + selectedId + "(shops)";
		
		var cfds = "<cfds>";
		cfds = cfds + "<cfd><name>First Name</name><sku>" + selectedId + "</sku><values><value>" + participantFirstName + "</value></values></cfd>";
		cfds = cfds + "<cfd><name>Last Name</name><sku>" + selectedId + "</sku><values><value>" + participantLastName + "</value></values></cfd>";
		cfds = cfds + "<cfd><name>GenderMaleOrFemale</name><sku>" + selectedId + "</sku><values><value>" + participantGender + "</value></values></cfd>";
//TODO add Privacy tag		cfds = cfds + "<cfd><name>Privacy</name><sku>" + selectedId + "</sku><values><value>" + privacyPreference + "</value></values></cfd>";//
//TODO uncomment the line below to send participant id data to the cart
		cfds = cfds + "<cfd><name>participantId</name><sku>" + selectedId + "</sku><values><value>" + userId + "</value></values></cfd>";		
		cfds = cfds + "</cfds>";
		form["cfds"].value = cfds;
		form.submit();
	}
	
	function showErrorMessage() {
		var errorsList = getElementsByClassName (document,"tr","error");
		for (i=0; i<errorsList.length; i++){
			showInline(errorsList[i]);
		}
		
	}