
var triviaQuestionsEnd=false;
var triviaSubmitting=false;
var trivNextFriendsEnd=2;//0=notend,1=end,2=unstarted
var revscicnt=0;
var firstLoad=1;
var curCampaign=0; // if sponsored question, shows campaign id
var depermutedPercentages = new Array();
var trivPassedCount=1;


function trivAns(answerid){
//	rotateAd();
	if(triviaSubmitting)
		return false;
	var percentageWrapper = $('pollfriends_wrapper');
	if(percentageWrapper!=null)
		percentageWrapper.style.display='none';
	var question=$('mod_trivia_q').innerHTML;
//	var answers=document.getElementById("mod_trivia").getElementsByClassName("answer");

	var correct=Math.round(Math.random());
	var curscore=parseInt($("trivpts").innerHTML);
	triviaSubmitting=true;
	var qid = $("mod_trivia_q").getAttribute("name");

	var ajaxfile = 'trivAns.php';
	if (!loggedin){
		ajaxfile = 'anonTrivAns.php';
	} else {
		if (hassponsors && curCampaign){
			ajaxfile = 'sponsorTrivAns.php';
		}
	}
	var params= Object.clone(g_ajaxparams);
	params.points = curscore;
	params.qid = qid;
	params.trivQuestion = question;
	params.correct = correct;
//	params.showmapid = showmapid;
	params.showname = showname;
	params.campaignid = curCampaign;
	params.aid = answerid;
	params.cans = triviaQuestionsALoc;
	new Ajax.Request(g_ajaxpath+'ajax/'+ajaxfile+g_ajaxsuffix, {
		method:'post',
		parameters: params,
		onSuccess: function(transport){
			var rslt=eval('('+transport.responseText+')');
			if(rslt.ok){
				if (hassponsors && curCampaign){
					lastsponsorqaid=qid;
				}
				trivDispStats(answerid,rslt.correct, rslt.permutator);
				//answers[answerid-1].checked=false;

				// Adjusting the score display stuff
				if(parseInt(rslt.curpts)!=curscore)
					changescore=1;
				else
					changescore=0;
			
				curscore=parseInt(rslt.curpts);
				if(curscore>0){
					var oldLv = $("mod_trivia_levelname");

					if (oldLv.innerHTML != rslt.data){  			// level up!
						Effect.Puff("mod_trivia_level", 
							{afterFinish: function(){
								$("mod_trivia_levelname").innerHTML=rslt.data;
								Effect.SlideDown("mod_trivia_level", {duration: 1} );
							 }
							}
						);
						$("mod_trivia_levelnameupsell").innerHTML=rslt.data;

						if (!loggedin){
							triviaModal(curscore, rslt.data);
						}

					}
				}

				if(changescore==1){
					$("trivpts").innerHTML=curscore;
					$("trivptsupsell").innerHTML=curscore;

					var trivPercent = curscore*100 / (curscore + rslt.pts);
					$('trivbarslider').style.left = (Math.round(397*trivPercent/100)+3) + 'px';
					$('trivbarslider').innerHTML = Math.round(trivPercent) + '%';
					$('trivbarfilled').style.width = (Math.round(400*trivPercent/100)) + 'px';

					var tp=$("trivTeamPts");
					if(tp)
						tp.innerHTML=parseInt(tp.innerHTML)+10;
					tp=$("trivTeamIdvPts");
					if(tp)
						tp.innerHTML=curscore;
				}
				$("mod_trivia_lvlnxt").innerHTML=rslt.pts; 
				$("mod_trivia_lvlnxtupsell").innerHTML=rslt.pts; 

/* No notification system yet for website
				if(trivNextFriends && curscore>trivNextFriends[0][1])
					trivPassFriend();
*/

				if(triviaQuestions.length>0){
					trivGenQ();
				} else if(!triviaQuestionsEnd){ // changed to no longer check if logged in, since logged out can also get questions now
					trivGetQs(true);
				} else {
					endTrivia();
				}

/* No need to manually update profile score, I think
				$("mod_trivia_updateScore").innerHTML='<input type="button" value="Update Score on Profile" style="display: inline; float: none; font-weight: bold; font-size: 16px;" class="buttonFB" onclick="trivUpdateBadge(this);"/>';
*/
			}
			pageTracker._trackPageview('/ajax/'+ajaxfile+g_ajaxsuffix);
		},
		onFailure: function(){}
	});
}



function depermutePercentages(permutator){
	var result = new Array();
	var answers=$("mod_trivia").getElementsByClassName("answer");

	for(var i = 0; i<4; i++){
		var index = (permutator + i)%4;
		if (answers[index].getStyle('display')!='none'){
			result[index] = triviaPercentages.splice(0,1);
		} else {
			result[index] = null;
		}
	}
	depermutedPercentages = result;
	return result;
}

function trivDispStats(answerid,corloc,permutator){
	if (depermutedPercentages.length == 0){
		depermutePercentages(permutator);
	}
	var answers=$("mod_trivia").getElementsByClassName("answer");
	var statsbody='';

	if(answerid!=corloc){
		$('correctmsg').style.display = 'none';
		$('incorrectmsg').style.display = '';
	} else {
		$('incorrectmsg').style.display = 'none';
		$('correctmsg').style.display = '';
	}
	var choices = $('mod_trivia_stats').getElementsByClassName('choice');	
	
	var showpct=false;
	for(var i=0;i<answers.length;i++){
		if(answers[i].getStyle('display')!='none'){
			if(depermutedPercentages[i]>0){
				showpct=true;
				break;
			}
		}
	}
	for(var i=0;i<answers.length;i++){
		var curChoice = choices[i];

		if(answers[i].getStyle('display')!='none'){
			if((i+1)==corloc){
				curChoice.className='choice correctanswer';
			} else {
				curChoice.className='choice';
			}
			if ((i+1) == answerid){
				curChoice.className = curChoice.className + ' chosen';
			}
			var aloc=answers[i];
			var choicetxt = aloc.innerHTML;
			if((i+1)==answerid){
				choicetxt = "<b>&gt</b>"+choicetxt;
				if(answerid!=corloc){
					curChoice.className='choice incorrectanswer';
				}
			}
			if(showpct){
				choicetxt += ' ('+depermutedPercentages[i]+'%) ';
			}
			curChoice.innerHTML = choicetxt;
			curChoice.style.display='';
		} else {
			curChoice.style.display='none';
		}
	}
	for ( ; i < 4; i++){
		choices[i].style.display='none';
	}
	if(triviaExplain.length>0){
		$('explaintoggle').style.display='';
	} else {
		$('explaintoggle').style.display='none';
	}
	var loggedin = $('loggedin').innerHTML;
	if(parseInt(triviaQuestionLock)==0 && !(hassponsors && curCampaign) && loggedin==1){ // do not display Report link if it's a sponsored question
		$('reportlink').style.display='';
		$('reportlink').innerHTML="<a href='#' onclick='reportAssetModal(\"question\", "+$("mod_trivia_q").getAttribute("name")+", \"reportlink\");return false;'>report question</a>";
	} else {
		$('reportlink').style.display='none';
	}
	$('mod_trivAns_exp').style.display='none';
	$('mod_trivAns_exp_txt').innerHTML = triviaExplain;
	$("mod_trivia_stats").style.display="block";
}


function trivGetQs(dogen){
	var ajaxfile = 'trivGetQs.php';
	if (!loggedin){
		ajaxfile = 'anonTrivGetQs.php';
	}
	var params= Object.clone(g_ajaxparams);
	params.questionid = $("mod_trivia_q").getAttribute("name");

	new Ajax.Request(g_ajaxpath+'ajax/'+ajaxfile+g_ajaxsuffix, {
		method:'post',
		parameters: params,
		onSuccess: function(transport){
			var rslt=eval('('+transport.responseText+')');
			if(rslt.ok){
				if (loggedin){
					updateLifelines(rslt.lifelines);
				}
				triviaQuestions=rslt.data;
				// TEMP force of hassponsors to skip case
				// Kenny, Delete
				hassponsors = false;
				if(triviaQuestions.length==0){
					triviaQuestionsEnd=true;
					endTrivia();
					return false;
				} else {
					if (!hassponsors || !loggedin){	// typical case
						if(triviaQuestions.length<10){
							triviaQuestionsEnd=true;
						} else if (firstLoad){ // If this is a first load and there are at least 10 questions left, only go through 9 questions (Q2~Q10) to not delay the next Lifeline check
							triviaQuestions.splice(9,1);
							firstLoad = 0;
						}
						if(dogen){
							trivGenQ();
						}
					} else {		// Special case: has sponsor trivia questions (and is logged in)
						sponsoredTrivGetQs(dogen);		
					}
				}

			}
		},
		onFailure: function(){}
	});
}

function trivGenQ(){
	var curq=triviaQuestions.shift();

	var providerVerb = 'Created';
	if (hassponsors){
		curCampaign = curq[12]; // 0 for non-sponsored questions
		if (curCampaign){
			$("mod_trivia_tbody").className = "sponsored";
			providerVerb = 'Sponsored';
		} else {
			$("mod_trivia_tbody").className = "";
		}
	}

	rotateAd(curCampaign, curq[1]);
	$("mod_trivia_q").innerHTML=curq[0];
	$("mod_trivia_q").setAttribute("name",curq[1]);
	if(curq[2].strip()==""){
		$("mod_trivia_creator").style.visibility="hidden";
	} else{
		var a=$("mod_trivia_creator");
		a.style.visibility="visible";
		if (curq[3].strip() == '') { /* if no link available, like if sponsor didn't have a link for us*/
			a.innerHTML= providerVerb + ' by <b>'+curq[2]+'</b>';
		} else {
			a.innerHTML= providerVerb + ' by <a href="'+curq[3]+'">'+curq[2]+'</a>';
		}
	}
	for(var i=5;i<9;i++){
		if(curq[i].strip().length>0){
			var a=$("mod_trivia_a"+(i-4));
			a.style.display="";
			a.style.visibility=""; // reset against any use of Pool Fans lifeline
			//a.getElementsByTagName("div")[0].innerHTML=curq[i];
			a.innerHTML=curq[i];
		}
		else{
			$("mod_trivia_a"+(i-4)).style.display="none";
		}
	}
	triviaQuestionsALoc=curq[4];
	if(curq[9].strip().length>0){
		$("mod_trivia_img_pic").src = curq[9];
		$("mod_trivia_img").style.display="";
	}
	else {
		$("mod_trivia_img").style.display="none";
	}
	triviaSubmitting=false;
	triviaQuestionsRpt=curq[10];
	triviaExplain=curq[11];
	triviaQuestionLock=curq[16];

	triviaPercentages = curq[17];
	depermutedPercentages = new Array(); // blanking it out
}

/*
function trivDispStatsExplain(tgt){
	tgt.getElementsByTagName("img")[0].src="img/dnArrow.gif";
	$("mod_trivAns_exp").style.display="block";
}
*/
function trivDispStatsExplain(tgt){
	$("mod_trivAns_exp").style.display='';
}

function rotateAd(spon_id, spon_qid){
	var ifrm=document.getElementsByTagName("iframe");
	if(ifrm){
		/*
		if(!triviaAdSeed){
			try{
				ifrm[0].src=ifrm[0].src+"&rsnd=" + new Date().getTime();
				triviaAdSeed=true;
			}catch(e){}
		}
		else{
		*/
			try{
				var x=ifrm[0].src.split("&");

				x[x.length-3] = 'spon_id='+spon_id;
				x[x.length-2] = 'spon_qid='+spon_qid;

				revscicnt++;
				x[x.length-1]="rsnd=" + new Date().getTime()+"rs"+revscicnt;

				ifrm[0].src=x.join("&");
			}catch(e){}
		//}
	}
}


function endTrivia(){
/*
	for(var i=1;i<5;i++){
		$("mod_trivia_a"+i).style.display="none";
	}
*/
	/*$("mod_trivia_a1").parentNode.getElementsByClassName("btnRow")[0].style.display="none";*/
	//$("mod_trivia_img").style.display="none";
	//$("mod_trivia_q").innerHTML="<center>You have answered all the questions!</center><br/><center>Try to stump other fans by creating your own trivia question!</center>";
	if (loggedin){
		$("mod_trivia_tbody").innerHTML="<center>You have answered all the questions!</center><br/><center>Try to stump other fans by creating your own trivia question!</center>";
	} else {
//		$("mod_trivia_tbody").innerHTML="<center>Please <a $loginmodalOnclick>log in or create an account</a> to continue taking trivia questions and save your score!</center>";
		$('mod_trivia_tbody_outer').style.display='none';
		$("mod_trivia_loginprompt_title").innerHTML=$("mod_trivia_levelname").innerHTML;
		$("mod_trivia_loginprompt_points").innerHTML=$("trivpts").innerHTML;
		$("mod_trivia_loginprompt").style.display='block';
	}
	$("mod_trivia_lifelines").style.display='none';
}

//////////////////////////////////////////////////////////////////////////////


















/////////////////////////////////////////////////////////////////////////////

function trivSeeExplanation(tgt){
	tgt.style.display="none";
	$("triviaExplainDiv").style.display="block";
}


function trivAskFriend(tgt){
	top.location.href=tgt.getAttribute("href")+"&qid="+$("mod_trivia_q").getAttribute("name");
}

function trivUpdateBadge(tgt){
	rotateAd();
	var curscore=$('trivpts').innerHTML;

	var params= Object.clone(g_ajaxparams);
	params.points = curscore;
	new Ajax.Request(g_ajaxpath+'ajax/updateTrivia.php'+g_ajaxsuffix, {
		method:'post',
		parameters: params,
		onSuccess: function(transport){
			tgt.parentNode.innerHTML="Profile Updated!";
			urchinTracker("ajax/updateTrivia.php");
		},
		onFailure: function(){}
	});
}



function trivPassFriend(){
	var getmore=0;
	if(trivNextFriendsEnd==2){
		if(trivNextFriends.length<5)
			trivNextFriendsEnd=1;
		else
			trivNextFriendsEnd=0;
	}
	if(trivNextFriends.length==1 && trivNextFriendsEnd!=1)
		getmore=1;
	var x=trivNextFriends.splice(0,1);
	if(trivNextFriends.length==0 && trivNextFriendsEnd==1)
		trivNextFriends=null;

        var params= Object.clone(g_ajaxparams);
	params.friendid = x[0][0];
	params.getmore = getmore;
	params.score = parseInt($("trivpts").innerHTML);
	params.notify = trivPassedCount;
	new Ajax.Request(g_ajaxpath+'ajax/trivPassFriend.php'+g_ajaxsuffix, {
		method:'post',
		parameters: params,
		onSuccess: function(transport){
			var rslt=eval('('+transport.responseText+')');
			if(rslt.ok){
				trivPassedCount++;
				if(getmore==1){
					trivNextFriends=rslt.data;
					if(trivNextFriends && trivNextFriends.length<5)
						trivNextFriendsEnd=1;
				}
				if(trivNextFriends && x[0][1]==trivNextFriends[0][1])
					trivPassFriend();
			}
		},
		onFailure: function(){}
	});
}



function trivAnsSkip(){
//	rotateAd();
	if(triviaSubmitting)
		return false;
	//var curscore="";
	//var curscore=$('mod_trivia').getElementsByClassName("score")[0].getElementsByTagName("span")[0].innerHTML;
	var answers=document.getElementById("mod_trivia").getElementsByTagName("input");
	var answerid=null;
	for(var i=0;i<answers.length;i++){
		if(answers[i].checked){
			answerid=i+1;
			break;
		}
	}
	//var scoreElm=$('mod_trivia').getElementsByClassName("score")[0].getElementsByTagName("span")[0];
	//var curscore=parseInt(scoreElm.innerHTML);
	var curscore=parseInt($("trivpts").innerHTML);
	var rpttxt="";

	var correct=Math.round(Math.random());
	triviaSubmitting=true;

	var params= Object.clone(g_ajaxparams);
	params.points = curscore;
	params.qid = $("mod_trivia_q").getAttribute("name");
	params.correct = correct;
	//params.showmapid = showmapid;
	params.aid = 0;
	params.cans = triviaQuestionsALoc;
	new Ajax.Request(g_ajaxpath+'ajax/trivAns.php'+g_ajaxsuffix, {
		method:'post',
		parameters: params,
		onSuccess: function(transport){
			var rslt=eval('('+transport.responseText+')');
			if(rslt.ok){
				trivDispStats(0,rslt.correct);
				/*
				if(answerid)
					answers[answerid-1].checked=false;
				*/
				if(parseInt(rslt.curpts)>0)
					$("mod_trivia_level").innerHTML="Level: "+rslt.data;
				//$("mod_trivia_msg").getElementsByTagName("div")[0].innerHTML=coranstxt;
				$("mod_trivia_lvlnxt").innerHTML="("+rslt.pts+" points til next level)";
//rpt 1=reported 0=not reported
				//$("mod_trivia_msg").style.display="";
				if(triviaQuestions.length>0)
					trivGenQ();
				else if(!triviaQuestionsEnd)
					trivGetQs(true);
				else
					endTrivia();
				$("mod_trivia_updateScore").innerHTML='<input type="button" value="Update Score on Profile" style="display: inline; float: none; font-weight: bold; font-size: 16px;" class="buttonFB" onclick="trivUpdateBadge(this);"/>';
				urchinTracker("ajax/trivAns.php");
			}
		},
		onFailure: function(){}
	});
}


// firstLoad is a variable initially set to 1 when the page first loaded,
// to account for the fact that the user has already see 1 question before
// calling getQs.  This is to keep the timing of lifeline and sponsored 
// questions correct. It's set to 0 after user has answered a question,
// and stays 0 unless the user reloads the page. 
function sponsoredTrivGetQs(dogen){
	var params= Object.clone(g_ajaxparams);
	params.questionid = lastsponsorqaid;
	new Ajax.Request(g_ajaxpath+'ajax/sponsorTrivGetQs.php'+g_ajaxsuffix, {
		method:'post',
		parameters: params,
		onSuccess: function(transport){
			var rslt=eval('('+transport.responseText+')');
			if(rslt.ok){
				//updateLifelines(rslt.lifelines);
				var sponsortriviaQuestions=rslt.data;

				// triviaQuestions is gaurenteed to be at least size 1 or this function wouldn't be called
				if (sponsortriviaQuestions.length > 0){
					triviaQuestions.splice(1-firstLoad,0, sponsortriviaQuestions[0]);
				}
				if (sponsortriviaQuestions.length > 1 && triviaQuestions.length >= 6){
					triviaQuestions.splice(6-firstLoad,0,sponsortriviaQuestions[1]);
				}

				while (triviaQuestions.length > (10-firstLoad)){
					triviaQuestions.pop();
				}
				
				if(triviaQuestions.length< (10-firstLoad)){
					triviaQuestionsEnd=true;
				}

				firstLoad=0;

				if(dogen){
					trivGenQ();
				}
			}
		},
		onFailure: function(){}
	});
}

function updateLifelines(lifelinesData){
	if (lifelinesData == undefined || lifelinesData == null || lifelinesData == false || lifelinesData == true){
		return;
	}
	// Implicit else: assume lifelinesData is an array
	checkLLChanges(lifelinesData,0);
	checkLLChanges(lifelinesData,1);
	//checkLLChanges(lifelinesData,2);
}
function checkLLChanges(lifelinesData, index){
	var DOMnode = $("LL"+index+"_val").getElementsByTagName('span')[0];
	var stockIndex = "LL"+index+"_stock";
//	alert('stock index is: '+ stockIndex + '\n new data is: ' + lifelinesData[stockIndex]);
	if (lifelinesData[stockIndex] == DOMnode.innerHTML+1){
		// any congradulatory message/action for earning a new lifeline goes here
	}
	DOMnode.innerHTML = lifelinesData[stockIndex];
}

function useLifeLine(LL, expert){

	var DOMnode = $("LL"+LL+"_val");
	if (DOMnode.getElementsByTagName('span')[0].innerHTML == '0'){
		// used up lifelines
		return;
	}	
	if (LL==1){
		var sumPercentages = 0;
		for (var i=0; i<4; i++){
			if (triviaPercentages[i]==null || triviaPercentages[i]=='N/A'){
				//triviaPercentages[i]='N/A';
			} else {
				sumPercentages += triviaPercentages[i];
			}
		}
		if (!sumPercentages){
			LLdisplayPercentages(0);
			return;
		}
	}
	var answers=$("mod_trivia").getElementsByClassName("answer");
	var a = new Array();
	for(var i = 0; i<4; i++){
		if (answers[i].getStyle('display')!='none'){
			a[i] = 1;
		} else {
			a[i] = 0;
		}
	}
	var params= Object.clone(g_ajaxparams);
	params.questionid = $("mod_trivia_q").getAttribute("name");
	params.cans = triviaQuestionsALoc;
	params.lifeline = LL;
	params.a0 = a[0];
	params.a1 = a[1]; 
	params.a2 = a[2];
	params.a3 = a[3];
	params.expert = expert;
	new Ajax.Request(g_ajaxpath+'ajax/trivUseLL.php'+g_ajaxsuffix, {
		method:'post',
		parameters: params,
		onSuccess: function(transport){
			var rslt=eval('('+transport.responseText+')');
			if(rslt.ok){
				updateLifelines(rslt.lifelinesData);
				switch(LL){
				case 0:		// 50/50
					LLhighlightAnswers(rslt.data);
					break;
				case 1:		// Poll
					LLdisplayPercentages(rslt.data);
					break;
				case 2:  // Ask an Expert - on hold for now
					// Create a modal for emailing
					var message = "I'm playing the trivia challenge in " + showname + ".";
					message += " I've used a lifeline to ask your help.%0A";

					var question = $('mod_trivia_q').innerHTML;
					message += escape(question);
					message += "%0A";

					for(var i = 0; i<4; i++){
						if (answers[i].getStyle('display')!='none'){
							message += "  ";
							message += escape(answers[i].innerHTML);
							message += "%0A";
						}
					}
					//var popupURL = rslt.url + '=' + expert + '&subject=' + rslt.showname + ' trivia help&message=' + message;
					//window.open(popupURL, 'Ask an Expert', 'toolbar=0,location=0,menubar=0,width=800,height=600');
					
					break;
				}
			} else {
			}
		},
		onFailure: function(){
		}
	});
}

// Given an array of answer choices (1~4), highlight those choices.
function LLhighlightAnswers(answerChoices){
	for (var i=1; i<=4; i++){
		var curId = 'mod_trivia_a'+ i;
		$(curId).style.visibility = 'hidden';
	}
	for (var i =0; i< answerChoices.length; i++){
		var curId = 'mod_trivia_a'+ answerChoices[i];
		$(curId).style.visibility = 'visible';
	}
	return;
}

function LLdisplayPercentages(permutator){
	depermutedPercentages = depermutePercentages(permutator);
	//alert('The percentages in correct order are: '+ depermutedPercentages);

	var percentageWrapper = $('pollfriends_wrapper');
	percentageWrapper.innerHTML="";
	for (var i=1; i<=4; i++){
		var curAnswer = $('mod_trivia_a'+ i );
		var curPercentage = depermutedPercentages[i-1];

		if ( curAnswer.style.display != 'none' && curAnswer.style.display != 'hidden' ){
			var newDiv = document.createElement('DIV');
			newDiv.id = 'perstat' + i;
			newDiv.innerHTML = curPercentage + '%';
			percentageWrapper.appendChild(newDiv);
		}
	}
	percentageWrapper.style.display='';
	var percentageOffset = $("mod_trivia_a1").offsetTop + 10; 
	percentageWrapper.style.top=percentageOffset+'px';
	return;
}

function LLpickExpert(){
	var DOMnode = $("LL2_val");
	if (DOMnode.getElementsByTagName('span')[0].innerHTML == '0'){
		// used up lifelines
		return;
	}
	var modalContent = $('AskExpertModal').innerHTML;
	modalOpen(modalContent,400,300);
}
function cancelLL2(){
	$('AskExpertModal').style.display='none';
}

/**  pops up level up modal **/
function triviaModal(score, level) {
  var loginContent = '<div class="triviamodal"><div class="railstyle"><div class="modu_head"><h1>Track Your Progress</h1></div></div><div class="congrats">Congratulations!</div><div class="pointbar"><div class="points"><b>'+ score +'</b> pts</div><div class="levelname">'+ level +'</div></div><div class="loginbar clearfix"><a href="/register.php?anondata=true&dest='+ top.location.href +'" class="buttonTV"><span>Sign Up</span></a><div class="logintext"> to save your score! <b><a href="#" onclick="modalClose();loginModal();return false;" >Login</a></b> to to play where you left off.</div></div><div class="nothanks"><a onclick="modalClose();return false;" href="#">No Thanks, continue playing</a></div></div>';
  modalOpen(loginContent,505,260);
}
		
