﻿var standardInvalidSelections = new Array();
standardInvalidSelections.push(0);

var currentUser = null;
var userResponses = null;

var bShowEmailBox = true;
var bShowOptinBox = true;

function HideAll()
{
	// Hide all the sections
	for (var i=0; i<=6; i++)
	{
		$get("divPage" + i).style.display  = "none";
	}
	$get("divError").style.display = "none";
	$get("divProgress").style.display = "none";
	$get("divSurveyAvailable").style.display = "none";
	$get("divNoSurveyAvailable").style.display = "none";
	$get("divThankYou").style.display = "none";
}

function pageLoad()
{
	HideAll();
	
    if (GetQueryStringValue("uid").length >0)
    {
	    //  Server method signature:  InitializeUserProfile(int supplierID, int subID, int cid, int uid, string secret)
	    PageMethods.InitializeUser(GetQueryStringValue("sid"), GetQueryStringValue("subid"), GetQueryStringValue("cid"), GetQueryStringValue("uid"), GetQueryStringValue("ampkey"), GetQueryStringValue("SI"), GetQueryStringValue("sn"), OnInitializeUserComplete);
    }
    else
    {
        ShowError("Invalid user!");
    }
}

function OnInitializeUserComplete(result)
 {
	if (result != null)
	{
	    currentUser = result;
	    if (result.SupplierSetting != null) 
        {
            bShowEmailBox = result.SupplierSetting.ShowEmailBox;
            bShowOptinBox = result.SupplierSetting.ShowOptinBox;
	    }
		if (!result.Disqualified)
		{
			if (result.ProfileStep == 7)
			{
				PageMethods.GetSurveyEntry(currentUser, OnGetSurveyEntryComplete);
			}
			else
			{
				DisplayPage(result.ProfileStep);
			}
		}
		else
		{
			HideAll();
			$get("divNoSurveyAvailable").style.display = "";
		}
	}
	else
	{
		$get("divError").innerHTML = "Error initializing user!";
		$get("divError").style.display = "";
	}
}

function GetQueryStringValue(name) 
{
	var qs = document.location.search;
	qs = qs.substr(1, qs.length - 1);
	var retValue = "";
	var values = qs.split("&");
	for (var i = 0; i < values.length; i++) 
	{
		var keyValuePair = values[i].split("=");
		if (keyValuePair[0].toLowerCase() == name.toLowerCase()) 
		{
			if (name == "ampkey") 
			{
				retValue = values[i].substring(7);
			}
			else 
			{
				retValue = keyValuePair[1];
			}
			break;
		}
	}
	return retValue;
}

function ShowWorkProgress(visible)
{
	$get("divProgress").style.display = visible ? "" : "none";
}

function OnGetQuestionAnswersComplete(result, context)
{
	var step = context[0];
	
	switch (step)
	{
		case 2:
			// Populate years for DOB
			var ddlDOBYear = $get("ddlDOBYear");
			for (var i=2007; i>=1910; i--)
			{
				AppendDropdownListOption(ddlDOBYear, i, i);
			}

			// Load questions & answers
			for (var i=0; i<result.length; i++)
			{
				if (result[i].QuestionName == "GENDER" && result[i].AmparioAnswerValue == "F")
				{
					$get("rbGenderFemale").value = result[i].AnswerID;
					$get("spanGenderFemale").innerHTML = result[i].AnswerLabel;
				}
				if (result[i].QuestionName == "GENDER" && result[i].AmparioAnswerValue == "M")
				{
					$get("rbGenderMale").value = result[i].AnswerID;
					$get("spanGenderMale").innerHTML = result[i].AnswerLabel;
				}
				 if (result[i].QuestionName == "DOB")
				 {
					$get("hiddenDOBAnswerID").value = result[i].AnswerID;
				 }
			}
			break;
		case 3:
			for (var i=0; i<result.length; i++)
			{
				if (result[i].QuestionName == "MARITAL")
				{
					AppendDropdownListOption($get("ddlMaritalStatus"), result[i].AnswerLabel, result[i].AnswerID);
				}
				if (result[i].QuestionName == "WORK")
				{
					AppendDropdownListOption($get("ddlWorkStatus"), result[i].AnswerLabel, result[i].AnswerID);
				}

                $get("trGroceryShopper").style.display = currentUser.CountryID !=3 ? "" : "none";
                if (result[i].QuestionName == "GROCERY" && (currentUser.CountryID != 3))
				{
					AppendDropdownListOption($get("ddlGroceryShopper"), result[i].AnswerLabel, result[i].AnswerID);
				}
                $get("trMainShopper").style.display = $get("trMainEarner").style.display = currentUser.CountryID == 3 ? "" : "none";
                if (result[i].QuestionName == "SHOPPER")
				{
					AppendDropdownListOption($get("ddlMainShopper"), result[i].AnswerLabel, result[i].AnswerID);
				}
                if (result[i].QuestionName == "EARNER")
				{
					AppendDropdownListOption($get("ddlMainEarner"), result[i].AnswerLabel, result[i].AnswerID);
				}
			}
			break;
		case 4:
            var tbAnswers = $get("tbEDUAnswers");
            for (var i=0; i<result.length; i++)
			{
                var trAnswer = document.createElement("tr");
                var tdLabel = document.createElement("td");
                tdLabel.style.width = "30%";
                tdLabel.innerHTML = result[i].CategoryLabel == null ? "" :"<u>" + result[i].CategoryLabel + "</u>";
                trAnswer.appendChild(tdLabel);
                var tdAnswer = document.createElement("td");
                tdAnswer.innerHTML = "<input type=\"radio\" name=\"selectEducation\" id=\"rbEducation" + result[i].AnswerID + "\" value=\"" + result[i].AnswerID + "\"  />&nbsp;" + result[i].AnswerLabel;; 
                trAnswer.appendChild(tdAnswer);
                tbAnswers.appendChild(trAnswer);
            }
			break;
        case 5:
            var tbAnswers = $get("tbHHIAnswers");
            var trAnswer = null;
            for (var i=0; i<result.length; i++)
			{
                if (i % 2 ==0)
                {
                    trAnswer = document.createElement("tr");
                }
                var tdAnswer = document.createElement("td");
                tdAnswer.innerHTML = "<input type=\"radio\" name=\"selectIncome\" id=\"rbIncome" + result[i].AnswerID + "\" value=\"" + result[i].AnswerID + "\"  />&nbsp;" + result[i].AnswerLabel;; 
                trAnswer.appendChild(tdAnswer);
                if (i % 2 == 0 && i > 0)
                {
                    tbAnswers.appendChild(trAnswer);
                }
            }
			break;
		case 6:
			$get("trProvince").style.display = currentUser.CountryID == 2 ? "" : "none";
			var sid = GetQueryStringValue("sid");
            bShowOptinBox = bShowOptinBox && !currentUser.UnderAge;

			$get("tdEmailLabel").style.display = $get("tdEmail").style.display = bShowEmailBox ? "" : "none";
            $get("divISayInstruction").style.display = $get("divISayOptin").style.display = bShowOptinBox ? "" : "none";

			for (var i=0; i<result.length; i++)
			{
				if (result[i].QuestionName == "ZIP" || result[i].QuestionName == "POSTAL")
				{
					$get("spanPostCodeQuestion").innerHTML = result[i].QuestionLabel;
					$get("hiddenPostCodeAnswerID").value = result[i].AnswerID;
				}
				if (result[i].QuestionName == "EMAIL")
				{
					$get("hiddenEmailAnswerID").value = result[i].AnswerID;
				}
				if (result[i].QuestionName == "PROVINCE" && currentUser.CountryID == 2) // Canada
				{
					AppendDropdownListOption($get("ddlProvinces"), result[i].AnswerLabel, result[i].AnswerID);
				}
			}
			break;
	}
	$get("divPage"+ step).style.display = "";
	ShowWorkProgress(false);
}


function IsStandardParameter(paramName)
{
	var result = false;
	var standardParameters = ["sid", "cid", "uid", "si", "ampkey", "sha1", "sn"];
	for (var i=0; i<standardParameters.length; i++)
	{
		if (paramName.toLowerCase() == standardParameters[i])
		{
			result = true;
			break;
		}
	}
	return result;
}

function OnGetSurveyEntryComplete(result)
{
	HideAll();

	if (result.length > 0) 
	{
		var qs = document.location.search;
		qs = qs.substr(1, qs.length - 1);

		var values = qs.split("&");
		for (var i = 0; i < values.length; i++) 
		{
			var keyValuePair = values[i].split("=");
			if (!IsStandardParameter(keyValuePair[0])) 
			{
				result += "&" + values[i];
			}
		}

		if ($get("cbOptIn").checked)
		{
			$get("divSurveyAvailableTitle").innerHTML = "Thank you for joining. Be sure to check your email for a confirmation message.";
		}
		else
		{
			$get("divSurveyAvailableTitle").innerHTML = "Good news!  There are surveys that match your profile.";
		}

		$get("divSurveyAvailable").style.display = "";
		var functionName = "LaunchSurvey('" + result + "')";
		$get("imgTakeSurvey").onclick = new Function(functionName);
	}
	else
	{
		$get("divNoSurveyAvailable").style.display = "";
	}
}

function ContinueSession()
{
	PageMethods.GetSurveyEntry(currentUser, OnGetSurveyEntryComplete);
}


function LaunchSurvey(surveyLink)
{
	window.open(surveyLink, "TakeSurvey");
	$get("divSurveyAvailable").style.display = "none";
	$get("divThankYou").style.display = "";
	$get("imgContinue").onclick = new Function("ContinueSession()");
}

function AppendDropdownListOption(ddl, text, value)
{
    ddl.options[ddl.options.length] = new Option(text,value);
}

function DisplayPage(step)
{
	ShowWorkProgress(true);
	HideAll();
	if (step > 1)
	{
		var context = [step];
		PageMethods.GetQuestionAnswers(currentUser.CountryID, step, OnGetQuestionAnswersComplete, null, context, null);
	}
	else
	{
		 $get("divPage"+ step).style.display = "";
		 ShowWorkProgress(false);
	}
}

function nextPage(button)
{
	var step = button.id.replace("btnPage","");
	if (validateUserInputs(step))
	{
		$get("divPage" + step).style.display = "none";
        if (step == 0) // the user needs to see the country page
        {
            DisplayPage(1);
        }
        else if (step == 1) // the user needs to be created first
		{
            ShowWorkProgress(true);
			//currentUser.CountryID = currentUser.CountryID;
			PageMethods.SaveUser(currentUser,OnSaveUserComplete);
		}
		else
		{
			SaveUserResponses(step);
		}
	}
}

function OnSaveUserComplete(result)
{
    ShowWorkProgress(false);
	currentUser = result;
	if (!currentUser.Disqualified)
	{
		DisplayPage(currentUser.ProfileStep);
	}
	else
	{
		HideAll();
		$get("divNoSurveyAvailable").style.display = "";
	}
}

function CreateResponse(answerID, answerText)
{
	return {AnswerText:answerText, AnswerID:answerID, UserID:currentUser.UID};
}

function SaveUserResponses(step)
{
	ShowWorkProgress(true);
	userResponses = new Array();
	
	switch (step)
	{
		case "2":
			// Gender
			var genderAnswerID = $get("rbGenderFemale").checked ? $get("rbGenderFemale").value : $get("rbGenderMale").value;
			userResponses.push(CreateResponse(genderAnswerID, null));
			// DOB
			userResponses.push(CreateResponse($get("hiddenDOBAnswerID").value, $get("ddlDOBYear").value + "/" + $get("ddlDOBMonth").value + "/" + $get("ddlDOBDay").value));
			break;
		case "3":
			// Marital status
			userResponses.push(CreateResponse($get("ddlMaritalStatus").value, null));
			// Work status
			userResponses.push(CreateResponse($get("ddlWorkStatus").value, null));
            // Grocery 
            if (currentUser.CountryID == 3) // UK
			{
                userResponses.push(CreateResponse($get("ddlMainShopper").value, null));
                userResponses.push(CreateResponse($get("ddlMainEarner").value, null));
			}
            else
            {
			    userResponses.push(CreateResponse($get("ddlGroceryShopper").value, null));
            }
			break;
		case "4":
            userResponses.push(CreateResponse(GetRadioButtonsCheckedValue(document.getElementsByName("selectEducation")), null));
			break;
        case "5":
            userResponses.push(CreateResponse(GetRadioButtonsCheckedValue(document.getElementsByName("selectIncome")), null));
			break;
		case "6":
			userResponses.push(CreateResponse($get("hiddenPostCodeAnswerID").value, $get("tbPostalCode").value));
			if ($get("tdEmail").style.display == "")
			{
				userResponses.push(CreateResponse($get("hiddenEmailAnswerID").value, $get("tbEmail").value));
			}
			if ($get("trProvince").style.display == "") // Canada
			{
				userResponses.push(CreateResponse($get("ddlProvinces").value, null));
			}
			break;
		default:
			break;
	}
    currentUser.ProfileStep = step;
	PageMethods.SaveUserResponses(currentUser, userResponses, OnSaveUserResponsesComplete);
}

function OnSaveUserResponsesComplete(result)
{
	ShowWorkProgress(false);

	currentUser = result;

    if (!currentUser.Disqualified)
    {
	    var step = currentUser.ProfileStep;
	    if (step != 7)
	    {
            DisplayPage(step);
	    }
	    else
	    {
		    PageMethods.GetSurveyEntry(currentUser, OnGetSurveyEntryComplete);
		    if ($get("cbOptIn").checked)
		    {
			    PageMethods.PostUserResponses(currentUser, OnPostUserResponsesComplete);
		    }
	    }
    }
    else
	{
		HideAll();
		$get("divNoSurveyAvailable").style.display = "";
	}
}

function OnPostUserResponsesComplete(result)
{
    if (!result)
    {
	    alert("Unfortunately an error occurred when we tried to register your email!");
    }
}

function ValidateRegEx(expression, value)
{
	var objRegExp = new RegExp(expression);
	return objRegExp.test(value);
}

function SelectCountry(rb)
{
	currentUser.CountryID = parseInt(rb.value);
}

function GetRadioButtonsCheckedValue(radioButtons)
{
	for(var i = 0; i < radioButtons.length; i++) 
	{
		if(radioButtons[i].checked) 
		{
			return radioButtons[i].value;
		}
	}
	return "";

}

function validateUserInputs(page)
{
	var valid = true;
	var error = "";
	switch (page)
	{
		case "1":
			if (GetRadioButtonsCheckedValue(document.getElementsByName("selectCountry")) == "")
			{
				valid = false;
				error = "Please select the country in which you live";
			}
			break;
		case "2":
			if (!$get("rbGenderMale").checked && !$get("rbGenderFemale").checked)
			{
				valid = false;
				error = "Please select your gender";
			}
			else if ($get("ddlDOBYear").value == "" || $get("ddlDOBMonth").value == "" || $get("ddlDOBDay").value == "")
			{
				valid = false;
				error = "Please select your date of birth";
			}
			break;
		case "3":
			if ($get("ddlMaritalStatus").value =="")
			{
				valid = false;
				error = "Please select your marital status";
			}
			else if ($get("ddlWorkStatus").value =="")
			{
				valid = false;
				error = "Please select your work status";
			}
            else 
			{
                if (currentUser.CountryID == 3)
                {
				    if ($get("ddlMainShopper").value =="")
				    {
					    valid = false;
					    error = "Please answer the Main Shopper question";
				    }
				    else if ($get("ddlMainEarner").value =="")
				    {
					    valid = false;
					    error = "Please answer the Main Earner question";
				    }
                }
                else
                {
                    if ($get("ddlGroceryShopper").value =="")
				    {
					    valid = false;
					    error = "Please answer the primary grocery shopper question";
				    }
                }
			}
			break;
		case "4":
            if (GetRadioButtonsCheckedValue(document.getElementsByName("selectEducation")) == "")
			{
				valid = false;
				error = "Please select your education level";
			}
			break;
        case "5":
            if (GetRadioButtonsCheckedValue(document.getElementsByName("selectIncome")) == "")
			{
				valid = false;
				error = "Please select your household income";
			}
			break;
		case "6":
			if ($get("tbPostalCode").value.length == 0)
			{
				valid = false;
				error = "Please enter your " + (currentUser.CountryID == 1 ? "zip code" : "postal code");
			}
			else if (!ValidatePostalCode(currentUser.CountryID,$get("tbPostalCode").value))
			{
				valid = false;
				error = "Please enter a valid postal code";
			}
			else if ($get("tdEmail").style.display == "" && $get("tbEmail").value.length == 0)
			{
				valid = false;
				error = "Please enter your email address";
			}
			else if ($get("tdEmail").style.display == "" && !ValidateEmail($get("tbEmail").value))
			{
				valid = false;
				error = "Please enter a valid email address";
			}
			else if (currentUser.CountryID == 2)
			{
				if ($get("ddlProvinces").value == "")
				{
					valid = false;
					error = "Please select your province";
				}
			}
		default:
			break;
	}
	if (!valid)
	{
		ShowError(error);
	}
	return valid;
}

function ValidateEmail(email)
{
	return ValidateRegEx("^[-_a-zA-Z0-9][-_.a-zA-Z0-9]*@[-.a-zA-Z0-9]+(\.[-.a-zA-Z0-9]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|[a-zA-Z]{2})$", email);
}

function ValidatePostalCode(selectedCountry, postalCode)
{
	var regExZipCode = "";
	switch (selectedCountry)
	{
		case 1:
			regExZipCode = "^[0-9]{5}$";
			break;
		case 2:
			regExZipCode = "^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$";
			break;
		case 3:
			regExZipCode = "^([A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\ [0-9][ABD-HJLNP-UW-Z]{2}|(GIR\ 0AA)|(SAN\ TA1)|(BFPO\ (C\/O\ )?[0-9]{1,4})|((ASCN|BBND|[BFS]IQQ|PCRN|STHL|TDCU|TKCA)\ 1ZZ))$";
			break;
		case 4:
			regExZipCode = "^[0-9]{4}$";
			break;
		default:
			break;
	} 
	return ValidateRegEx(regExZipCode, postalCode.toUpperCase());
}

function ShowError(error)
{
	$get("divError").style.display = "";
	$get("divError").innerHTML = error;
}


