//Regular version of the test

var xmlhttp;
var i=-1;
var questionsArray = [];
var typesArray = [0,0,0,0,0,0,0,0,0];
var typeNameArray = [];
var answerTo13 = 0;
var question13Position = 0;
var answerTo14 = 0;
var primaryRoleNum = 0;
var secondaryRoleNum = 0;
var imgArray = new Array();
var progressBarArray = new Array();
var resultsQueryString = "";

//Clearspring API code
var kernelUrl = getKernelUrl(gup("store"));
var kernel;

function getKernelUrl(storeName) {
	switch (storeName) {
		case "bookschristian":
			return "http://widgets.clearspring.com/o/4aa173e459d38c69/4aa173e459d38c69/-/-TRK/1/lib.v3.js?onLoad=onLibLoad";  
		case "chapters":
			return "http://widgets.clearspring.com/o/4aa179ff73b7f977/4aa179ff73b7f977/-/-TRK/1/lib.v3.js?onLoad=onLibLoad";
		case "christianbook":
			return "http://widgets.clearspring.com/o/4aa17a589570b2e4/4aa17a589570b2e4/-/-TRK/1/lib.v3.js?onLoad=onLibLoad";
		case "family":
			return "http://widgets.clearspring.com/o/4aa17a876c89d2b3/4aa17a876c89d2b3/-/-TRK/1/lib.v3.js?onLoad=onLibLoad";
		case "mardel":
			return "http://widgets.clearspring.com/o/4aa17aa5bbc76207/4aa17aa5bbc76207/-/-TRK/1/lib.v3.js?onLoad=onLibLoad";
		case "parable":
			return "http://widgets.clearspring.com/o/4aa17ad2b237b720/4aa17ad2b237b720/-/-TRK/1/lib.v3.js?onLoad=onLibLoad";
		default:
			return "";
	}
}

function onLibLoad(k)
{
	kernel = k;
    kernel.track.event('Kernel loaded');
}

document.write('<scr'+'ipt type="text/javascript" src="' + kernelUrl + '"></scr'+'ipt>');



//This function reads the URL query string.
function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function GetXmlHttpObject()
{
	if (window.XMLHttpRequest)
  	{
  		// code for IE7+, Firefox, Chrome, Opera, Safari
  		return new XMLHttpRequest();
  	}
	if (window.ActiveXObject)
  	{
  		// code for IE6, IE5
  		return new ActiveXObject("Microsoft.XMLHTTP");
  	}
	return null;
}

function loadXML(url) {

	xmlhttp = GetXmlHttpObject();
		
	if (xmlhttp!=null)
	{
		xmlhttp.onreadystatechange=state_Change;
	  	xmlhttp.open("GET",url,true);
	  	xmlhttp.send(null);
	}
	else
  	{
  		alert("Your browser does not support XMLHTTP.");
  	}

}

function first_Page() {
	imgArray[0] = new Image();
	imgArray[0].src = "images/bg/first_bg.jpg";
	imgArray[1] = new Image();
	imgArray[1].src = "images/bg/questions_bg.jpg";
	progressBarArray[0] = new Image();
	progressBarArray[0].src = "images/progressbar/strengths_dna_mockup_JQ_1.jpg";
	
	document.body.style.backgroundImage = 'url(' + imgArray[0].src + ')';

	document.getElementById("show").innerHTML = "<div id='frontClick'><a href='" + getStoreLink() + "' target='_blank'><img src='images/images/front_invisible_btn.gif' alt='store link' border='0'/></a></div>";
	
	if (kernelUrl == "") {
		document.getElementById("nav").innerHTML = "<div id='frontPageButtonPosition'><input type='button' class='styledButton' value='Start' onClick='next();'></div>";
	}
	else {
		document.getElementById("nav").innerHTML = "<div id='frontPageButtonPositionKernel'><input type='button' class='styledButton' value='Start' onClick='next();'></div>";
	}
}

function state_Change()
{
	if (xmlhttp.readyState==4)
	{// 4 = "loaded"
	  	if (xmlhttp.status==200)
	    {// 200 = "OK"
	
			var xmlResponse = xmlhttp.responseXML;
			questionsArray = xmlResponse.documentElement.getElementsByTagName("question");
			typeNameArray = xmlResponse.documentElement.getElementsByTagName("type");
			
			var txt = "";

			id = questionsArray[i].getAttribute("id");
			qtext = questionsArray[i].getElementsByTagName("question_text")[0].childNodes[0].nodeValue;
			txt += "<div id='question'>" + qtext + "</div>";

			var choices = questionsArray[i].getElementsByTagName("choice");
			txt += "<div id='choices'>";
			txt += "<table id='choiceTable'>"
			for (var j=0; j < choices.length; j++) {
				var choiceTxt = choices[j].childNodes[0].nodeValue;
				//Make it impossible to choose the same answer for 13 and 14. Checkmark the choice on #14
				if ((id==14) && (j == question13Position))	{
					txt += ("<tr><td class='radioButton'>");
					txt += ("<div id='disabledChoice'>");
					txt += ("<img src='images/images/checkmark.png' alt='You already chose this' /> ");
					txt += ("</td>");		
					txt += ("<td class='buttonText'>" + choiceTxt + "</td></tr>");						
				}			
				else {
					txt += ("<tr><td class='radioButton'>");
					txt += ("<input type='radio' name='");
					txt += ("question_"+id+"_choices");
					txt += ("' value='");
					txt += (choices[j].getAttribute("val_type"));
					txt += ("'></td>");
					txt += ("<td class='buttonText'>" + choiceTxt + "</td></tr>");
				}
			}
			txt += "</table></div>";
			document.getElementById("show").innerHTML=txt;
			document.getElementById("show").scrollTop=0;
			
		}
		else
		{
			alert("Problem retrieving XML data:" + xmlhttp.statusText);
		}
	}

} 
function status_Change()
{			

	var checklistName = document.getElementsByTagName("input")[0].getAttribute("name");
	var questionText = "";
	
	//Write which question number is under consideration
	questionText += "Question " + (i+1) + " of 23"; 
	document.getElementById("status").innerHTML=questionText;
		
	//Get which radio button is checked, and add that to the array of type values.
	if (i > 0) {
		var checklistLength = document.getElementsByName(checklistName).length;
		
		for (k=0; k < checklistLength; k++){
			var currRadioBtn = document.getElementsByName(checklistName)[k];
			
			if (currRadioBtn.checked==true){
				var selectedValue = currRadioBtn.getAttribute("value");
				
				if (selectedValue != "null") {
					//This adds to the query string for the database.
					resultsQueryString += "q" + i + "=" + typeNameArray[selectedValue].getAttribute("id") + "&";
									
					//Question 14 is only tallied when there is a tie in the secondary.
					if (i!=14) typesArray[selectedValue] += 1;
					
					//Question 14's answer should be saved nevertheless in case of tie.
					if (i==14) answerTo14 = selectedValue;
					
					//Question 13 is used as a tiebreaker for primary, so save its value
					if (i==13) { 
						answerTo13 = selectedValue;
						question13Position = k;
					}
				}
			}
		}
	}
}

function progress_Change() {
	var progressText = "";
	
	//Display progress bar graphics depending on the value of i
	for (var z=0; z < (i+1); z++) {
		var imgFileName = progressBarArray[z].src;
		progressText += "<img src='" + imgFileName + "' alt='' />";
	}
	
	//Preload next progress bar segment.
	progressBarArray[i+1] =  new Image();
	progressBarArray[i+1].src = "images/progressbar/strengths_dna_mockup_JQ_" + (i+2) + ".jpg";
	
	document.getElementById("progress").innerHTML=progressText;
}

function debug() {
	//This results table is for debugging purposes only
	
	var statusTxt="<table border='1px' cellpadding='5px'>";
	statusTxt += "<tr><td>Advisor</td><td>" + typesArray[0]*10 + "</td></tr>";
	statusTxt += "<tr><td>Caretaker</td><td>" + typesArray[1]*10 + "</td></tr>";
	statusTxt += "<tr><td>Connector</td><td>" + typesArray[2]*10 + "</td></tr>";
	statusTxt += "<tr><td>Creator</td><td>" + typesArray[3]*10 + "</td></tr>";
	statusTxt += "<tr><td>Equalizer</td><td>" + typesArray[4]*10 + "</td></tr>";
	statusTxt += "<tr><td>Influencer</td><td>" + typesArray[5]*10 + "</td></tr>";
	statusTxt += "<tr><td>Motivator</td><td>" + typesArray[6]*10 + "</td></tr>";
	statusTxt += "<tr><td>Pioneer</td><td>" + typesArray[7]*10 + "</td></tr>";
	statusTxt += "<tr><td>Teacher</td><td>" + typesArray[8]*10 + "</td></tr></table>";

	document.getElementById("debug").innerHTML=statusTxt;
}

function showResults() {
	var primaryMaxTally = 0;
	var secondaryMaxTally = 0;
	var resultsTxt="";
	var xmlResponse = xmlhttp.responseXML;
	var typeNameArray = xmlResponse.documentElement.getElementsByTagName("type");

	//Change button to "order"
	document.getElementById("nav").innerHTML="<input type='button' class='styledButton' value='Done'>";
	document.getElementById("status").innerHTML="Your Lead and Supporting Roles";
	
	//Gets the primary role by finding the highest tally in the array
	for (var j=0; j < 9; j++) {
		if (typesArray[j] > primaryMaxTally ){
			primaryMaxTally = typesArray[j];
			primaryRoleNum = j;
		}
	} 
	//Gets the secondary role by finding the highest tally, excluding the primaryRoleNum.
	for (var j=0; j < 9; j++) {
		if ((typesArray[j] > secondaryMaxTally) && (j != primaryRoleNum)) {
			secondaryMaxTally = typesArray[j];
			secondaryRoleNum = j;
		}
	} 
	
	//Check and resolve tie in the primary role. Primary role becomes the answer to question #13.
	for (var j=0; j < 9; j++) {
		if ((typesArray[j] == primaryMaxTally) && (j != primaryRoleNum))
			primaryRoleNum = answerTo13;
	} 
	
	//Check and resolve tie in the secondary role. Secondary role becomes the answer to question #14.
	for (var j=0; j < 9; j++) {
		if ((typesArray[j] == secondaryMaxTally) && (j != secondaryRoleNum))
			secondaryRoleNum = answerTo14;
	}
	
	//Final tiebreaker condition: if after all that primary and secondary are the same, we pick the first secondary result from the ties.
	if (primaryRoleNum == secondaryRoleNum) {
		secondaryMaxTally = 0;
		for (var j=0; j < 9; j++) {
			if ((typesArray[j] > secondaryMaxTally) && (j != primaryRoleNum)) {
				secondaryMaxTally = typesArray[j];
				secondaryRoleNum = j;
			}	
		}
	} 				

	resultsQueryString += "lead=" + typeNameArray[primaryRoleNum].getAttribute("id") + "&support=" + typeNameArray[secondaryRoleNum].getAttribute("id");

		
	document.getElementById("show").style.width = '187px';
	document.getElementById("show").style.height = '281px';
	if (navigator.appName != "Microsoft Internet Explorer") {
		if (kernelUrl != "")
			document.getElementById("show").style.marginTop = '77px';
		else
			document.getElementById("show").style.marginTop = '88px';		
	}
	else
		document.getElementById("show").style.marginTop = '70px';


	document.body.style.backgroundImage = 'url(' + imgArray[2].src + ')';
	
	if (gup("store") != "") {
		document.getElementById("nav").style.marginLeft = '5px';
		document.getElementById("nav").style.marginRight = '11px';
		document.getElementById("nav").style.marginTop = '10px';
		document.getElementById("nav").innerHTML = "<div style='width:175px; height:44px;'><a href='" + getStoreLink() + "' target='_blank' style='text-decoration:none; border:none'><img src='images/images/invisible_button.gif' border=0 alt='Click here' /></a></div>";
	}
	else {
		document.getElementById("nav").style.margin = "0";
		document.getElementById("nav").innerHTML = "<div style='width:200px; height:60px;'><a href='http://amzn.com/1400202361' target='_blank' style='text-decoration:none; border:none'><img src='images/images/invisible_btn_left.gif' border=0 alt='Amazon link' /></a><a href='http://search.barnesandnoble.com/Find-Your-Strongest-Life/Marcus-Buckingham/e/9781400202362/?itm=1&USRI=Find+Your+Strongest+Life' target='_blank' style='text-decoration:none; border:none'><img src='images/images/invisible_btn_right.gif' border=0 alt='Barnes and Noble link' /></a></div>";
	}
	document.getElementById("status").innerHTML ="";
	document.getElementById("progress").innerHTML ="";
	
	
	//Make invisible links for the tabs, which never change
	var topNavTxt = "<div style='width:190px;'>";
	topNavTxt = "<table cellspacing=0 style='padding:0; height:10px; width:187px; font-size:7.5pt; font-weight:bold;'><tr>";
	topNavTxt += "<td width='18px'><i style='visibility:hidden'>.</i></td><td style='text-align:left;'><a href='#' style='text-decoration:none' onclick='printRoles(" + primaryRoleNum + ", false);'><i style='visibility:hidden;'>Lead Role</i></a></td> ";
	topNavTxt += "<td style='text-align:left;'><a href='#' style='text-decoration:none' onclick='printRoles(" + secondaryRoleNum + ", true);'><i style='visibility:hidden;'>Supporting Role</i></a></td>";
	topNavTxt += "</tr></table></div>";
	document.getElementById("toptabs").innerHTML = topNavTxt;

	printRoles(primaryRoleNum, false);
}

function getStoreLink() {
	switch (gup("store")) {
		case "amazon":
			return "http://amzn.com/1400202361";	  		
		case "bn":
			return "http://search.barnesandnoble.com/booksearch/isbninquiry.asp?box=9781400202362&pos=-1&EAN=9781400202362";
		case "bookschristian":
			return "http://www.bookschristian.com/sys/product.php?PRODUCT=576566&affcode=Buckingham";  		
		case "borders":
			return "http://www.borders.com/online/store/TitleDetail?sku=1400202361";
		case "chapters":
			return "http://www.chapters.indigo.ca/books/CU-Find-Your-Strongest-Life-Marcus-Buckingham/9780718026752-item.html";	  		
		case "christianbook":
			return "http://www.christianbook.com/Christian/Books/product?item_no=026752&p=1150134";
		case "family":
			return "http://www.familychristian.com/shop/product.asp?prodID=58940";
		case "mardel":
			return "http://www.mardel.com/store/item.aspx?ItemId=391886";
		case "parable":
			return "http://www.parable.com/parable/item.Find-Your-Strongest-Life-What-the-Happiest-and-Most-Successf.9781400202362.htm";
		default:
			return "http://amzn.com/1400202361";
	}
	
}

function printRoles(roleNum, isSupportingRole) {

	var resultsTxt ="";
	
	//change tab styles depending on primary or secondary role selected
	if (isSupportingRole==true) 
		document.getElementById("toptabs").style.background = 'url(images/nav/supportingHot.gif) no-repeat';
	else
		document.getElementById("toptabs").style.background = 'url(images/nav/leadHot.gif) no-repeat';
	
	//Print out the icon and role description
	if (navigator.appName == "Microsoft Internet Explorer")
		resultsTxt +="<br />"
	if (!isSupportingRole) resultsTxt += "<h4 style='color:#8eb7c7; text-transform:uppercase; font-size:7pt' align='center'>Your<br />Lead Role<br />";
	else resultsTxt += "<h4 style='color:#8eb7c7; text-transform:uppercase; font-size:7pt' align='center'>Your<br/>Supporting Role<br />";
	resultsTxt += "<span style='font-size:12pt; color:#114170;'>" + typeNameArray[roleNum].getAttribute("name") + "</span></h4>";
	
	//Print out the left or right arrow and the icon
	resultsTxt += "<div id='iconBlock'>";
	if (isSupportingRole) resultsTxt += "<a href='#' style='text-decoration:none; width:30px;' onclick='printRoles(" + primaryRoleNum + ",false);'><img border=0 id='leftResultButton' src='images/nav/left_arrow.gif' alt='' /></a>";
	else resultsTxt += "<a href='#' style='text-decoration:none;' onclick='printRoles(" + secondaryRoleNum + ",true);'><img border=0 id='rightResultButton' src='images/nav/right_arrow.gif' alt='' /></a>";

	resultsTxt += "<img border=0 class='icon' src='" + typeNameArray[roleNum].getAttribute("icon") + "'alt='" + typeNameArray[roleNum].getAttribute("name") + "' />";
	resultsTxt += "</div>"
	
	//Print out "You begin by asking..."
	resultsTxt +="<p style='color:black;'><b>You begin by asking:</b><br />'" + typeNameArray[roleNum].getElementsByTagName("asking")[0].childNodes[0].nodeValue + "'</p>";

	//Print out CTA block
	resultsTxt += "<div id='ctaBlock'>";
	resultsTxt += "<p>To learn how to make the most of your<br /><span style='text-transform:uppercase;'><b>" + typeNameArray[roleNum].getAttribute("name") + "</b></span><br />role, <a href='" + getStoreLink() + "' target='_blank'>buy <i>Find Your Strongest Life</i></a>.</p></div>";
		
	//Print out description
	resultsTxt += "<p style='color:black;'>" + typeNameArray[roleNum].getElementsByTagName("description")[0].childNodes[0].nodeValue + "</p>";

	//Print out "your best quality is..."
	resultsTxt += "<p style='color:black;'><b>Your best quality:</b><br />" + typeNameArray[roleNum].getElementsByTagName("quality")[0].childNodes[0].nodeValue + "</p>";
	
	//Print out "Always:" 
	resultsTxt += "<p style='color:black;'><b>Always:</b><br />" + typeNameArray[roleNum].getElementsByTagName("always")[0].childNodes[0].nodeValue + "</p>";
	
	//Print out "Be careful you:"
	resultsTxt += "<p style='color:black;'><b>Be careful you:</b><br />" + typeNameArray[roleNum].getElementsByTagName("careful")[0].childNodes[0].nodeValue + "</p>";
	
	//Print out "Your smartest career move is:"
	resultsTxt += "<p style='color:black;'><b>Your smartest career move:</b><br />" + typeNameArray[roleNum].getElementsByTagName("career")[0].childNodes[0].nodeValue + "</p>";

	//Show links to next role
	if (isSupportingRole) resultsTxt += "<p><a href='#' style='text-decoration:none;' onclick='printRoles(" + primaryRoleNum + ",false);'>Show me my Lead Role</a></p><br />";
	else resultsTxt += "<p><a href='#' style='text-decoration:none;' onclick='printRoles(" + secondaryRoleNum + ",true);'>Show me my Supporting Role</a></p><br />";
		
	document.getElementById("show").innerHTML = resultsTxt;	

}

function adjustForQuestions() {
	document.body.style.backgroundImage = 'url(' + imgArray[1].src + ')';
	document.getElementById("nav").innerHTML = "<input type='button' class='styledButton2' value='Next' onClick='next();'>";
	if (navigator.appName != "Microsoft Internet Explorer") {
		if (kernelUrl != "")
			document.getElementById("show").style.marginTop = '66px';
		else
			document.getElementById("show").style.marginTop = '75px';
			
	}
	else
		document.getElementById("show").style.marginTop = '59px';
		
	document.getElementById("show").style.marginLeft = '0px';
}

function next()
{
	//Check to make sure one of the radio buttons is checked.
	var checkedOption = false;
	var checklistName = document.getElementsByTagName("input")[0].getAttribute("name");

	if (i!=-1) {
		for (k=0; k < document.getElementsByName(checklistName).length; k++){
			var currRadioBtn = document.getElementsByName(checklistName)[k];
			if (currRadioBtn.checked==true) checkedOption = true;					
		}
	}

	//First condition: moving past the start/splash page
	if (i==-1) {
		i++;
		loadXML('quiz_questions.xml');
		adjustForQuestions();
		state_Change();
		status_Change();
		progress_Change();
		//debug();

	}
	//Second condition: for all other questions. 
	else if ((i < questionsArray.length-1) && (checkedOption == true))
  	{
  		//Preload last background on the last question
  		if (i == questionsArray.length-2) {
  			imgArray[2] = new Image();
  			//Different images and links depending on retailer.
  			
  			switch (gup("store")) {
		  		case "amazon":
		  			imgArray[2].src = "images/bg/results_amazon.jpg";
					break;	  		
  				case "bn":
		  			imgArray[2].src = "images/bg/results_bn.jpg";
		  			break;
		  		case "bookschristian":
		  			imgArray[2].src = "images/bg/results_bookschristian.jpg";
					break;	  		
		  		case "borders":
		  			imgArray[2].src = "images/bg/results_borders.jpg";
					break;	  		
		  		case "chapters":
		  			imgArray[2].src = "images/bg/results_chapters.jpg";
					break;	  		
		  		case "christianbook":
		  			imgArray[2].src = "images/bg/results_christianbook.jpg";
					break;	  		
		  		case "family":
		  			imgArray[2].src = "images/bg/results_family.jpg";
					break;	  		
		  		case "mardel":
		  			imgArray[2].src = "images/bg/results_mardel.jpg";
					break;	  		
		  		case "parable":
		  			imgArray[2].src = "images/bg/results_parable.jpg";
					break;	  
				default:
					imgArray[2].src = "images/bg/results_bg.jpg";
					break;
  			}
					  			
  			imgArray[3] = new Image();
  			imgArray[3].src = "images/nav/leadHot.gif";
  			imgArray[4] = new Image();
  			imgArray[4].src = "images/nav/supportingHot.gif";
  			imgArray[5] = new Image();
  			imgArray[5].src = "images/nav/left_arrow.gif";
  			imgArray[6] = new Image();
  			imgArray[6].src = "images.nav/right_arrow.gif";
  		}
  		
  		i++;
  		status_Change();
  		progress_Change();
  		state_Change();
  		//debug();
  	}
  	//If we are at the end of the quiz, show results.
  	else if ((i == questionsArray.length-1) && (checkedOption == true))
  	{
  		i++;
  		status_Change();
  		progress_Change();
		showResults();		
		//debug();	
		sendDataToDB(resultsQueryString);
  	}
  	else
  	{
  		alert("Please select an option.");
  	}
}

function sendDataToDB(queryStringToSend) {
	xmlhttp = GetXmlHttpObject();
	if (xmlhttp!=null)
	{
		var url = "sendToDB.php?" + resultsQueryString + "&store=" + getStoreID();
		//alert(url);
		xmlhttp.onreadystatechange=sendToDB_Change;
	  	xmlhttp.open("GET",url,true);
	  	xmlhttp.send(null);
	}
	else {
  		alert("Your browser does not support XMLHTTP.");	
	}
}

function sendToDB_Change() {
	if (xmlhttp.readyState==4)
	{
		
	}	
}

function getStoreID() {
    switch (gup("store")) {
    	case "amazon":
			return "1";
	    case "bn":
    		return "2";
    	case "bookschristian":
 			return "3";
    	case "borders":
			return "4";
    	case "chapters":
			return "5";
    	case "christianbook":
			return "6";
    	case "family":
			return "7";
    	case "iphone":
			return "8";
    	case "mardel":
			return "9";
    	case "narrow":
			return "10";
    	case "parable":
			return "11";
    	default:
			return "12";
    }


}
