////////////////////////////////////////////
// ELFH Page Functions
//
// Navigation and content controls 
//
// Version: 0.3
// Date: 20/02/2009
////////////////////////////////////////////
//
var is_complete = false;
var is_submitted = false;
var user_name = null;
var user_score = null;
//
// INIT LMS
function initLMS() {
	var is_connected = loadPage();
	//
	// if not connected provide alert for user
	if(!is_connected) {
		document.getElementById('lms_conn').innerHTML = INTRO_LMS_ERROR;	
	} 
}
//
/***********GLOBAL QUESTION CONSTANTS*************/
var LMS_ITEM_MAX_LENGTH = 700;
var ASSESS_WEIGHTED_MARKS = 10;
//
var NAV_PREV_OFF = '<a id="nav-prev-off" class="btn-disabled"><span><div class="btn-icon">&nbsp;</div>Previous</span></a>';
var NAV_NEXT_OFF = '<a id="nav-next-off" class="btn-disabled"><span>Next<div class="btn-icon">&nbsp;</div></span></a>';
var RESOURCES_LINK = '<a class="link_tools" id="tools_resources" title="Open resources for this session" href="resources.html" target="_blank">Resources</a>';
var CREDITS_LINK = '<a class="link_tools" id="tools_credits" title="View acknowledgements for this session" href="credits.html" target="_blank">Acknowledgements</a>';
//
// LMS connection error
var INTRO_LMS_ERROR = '<p class="warning"><strong>LMS Connection Error</strong><br/>Could not connect to Learning Management System. Your score will not be saved. <em>Please contact an administrator.</em></p>';
// menu marking
var ASSESS_IMG_TICK = '<img src="../common/images/assess_tick.gif" class="status2" width="14" height="14" alt="Correct"/>';
var ASSESS_IMG_CROSS = '<img src="../common/images/assess_cross.gif" class="status0" width="14" height="14" alt="Incorrect"/>';
var ASSESS_IMG_PARTIAL = '<img src="../common/images/assess_partial.gif" class="status1" width="14" height="14" alt="Partially Correct"/>';
// menu feedback
var ASSESS_FEED_NOT = '<img src="../common/images/assess_feed0.gif" class="status0" width="14" height="14" alt="Not attempted"/>';
var ASSESS_FEED_INC = '<img src="../common/images/assess_feed1.gif" class="status0" width="14" height="14" alt="Incomplete"/>';
var ASSESS_FEED_ATT = '<img src="../common/images/assess_feed2.gif" class="status0" width="14" height="14" alt="Attempted"/>';
// review feedback
var REVIEW_COMPLETE_HTML = '<p><strong>All questions attempted.</strong></p><p>You can return to individual questions to make changes.</p><p><span class="instr">When you\'re happy with your answers, click submit opposite.</span></p>';
var REVIEW_INCOMPLETE_HTML = '<p><strong>Unfinished questions.</strong></p><p><span class="instr">Click on missed or incomplete questions on the menu before submitting.</span></p>'
//
var SUBMIT_INCOMPLETE_CONFIRM = 'Submit with unfinished questions?\n\nClick OK to submit anyway or Cancel to return';
var RESULTS_LMS_ERROR = '<p class="warning"><strong>LMS Connection Error</strong><br/>Could not connect to Learning Management System. Your score was not saved. <em>Please contact an administrator.</em></p>';
var RESULTS_SCORE_ERROR = '<p class="warning"><strong>Error Saving Score</strong><br/>Your score may not have saved to the Learning Management System. <em>Please contact an administrator.</em></p>';

/*************************************************/
//
// loads first screen
function initNav() {
	loadScreen('intro');	
}

function confirmExit() {
	if(!is_submitted) {
		return confirm("You have not submitted your answers.\n\nExit assessment?");
	}
	return true;
}

function loadScreen(id) {
	var prev_div = document.getElementById('nav-prev-td');
	var next_div = document.getElementById('nav-next-td');
	var pos_div = document.getElementById('page-pos');
	var title_div = document.getElementById('page-title');
	//
	for (i=0; i<Pages.length; i++) {
		var this_id = Pages[i][0];
		// if selected screen update I) prev II) next III) position IV) title
		if(this_id == id) {
			// I) previous
			if(Pages[i-1]) prev_div.innerHTML = '<a id="nav-prev" accesskey="3" class="btn" href="#'+Pages[i-1][0]+'" onclick="loadScreen(\''+Pages[i-1][0]+'\')" title="Previous Page"><span><div class="btn-icon">&nbsp;</div>Previous</span></a>';	
			else prev_div.innerHTML = NAV_PREV_OFF;
			//
			// II) next
			if(Pages[i+1] && !((Pages[i+1][0]=='results') && !is_submitted)) {
				var review_func = (Pages[i+1][0]=='review')? 'updateReview();': '';
				next_div.innerHTML = '<a id="nav-next" accesskey="4" class="btn" href="#'+Pages[i+1][0]+'" onclick="'+review_func+'loadScreen(\''+Pages[i+1][0]+'\')" title="Next Page"><span>Next<div class="btn-icon">&nbsp;</div></span></a>';
			} else {
				next_div.innerHTML = NAV_NEXT_OFF;	
			}
			//
			// III) pos + IV) title
			if(Pages[i][3]) { 
				pos_div.innerHTML = '<span class="page-num">'+Pages[i][2]+'</span>&nbsp;/&nbsp;'+(qTot); 
				title_div.innerHTML = '<h2 class="section">Questions</h2><h3>'+unescape(Pages[i][1])+'</h3>';
			} else { 
				pos_div.innerHTML = '<span class="page-num">'+Pages[i][2]+'</span>'; 
				title_div.innerHTML = '<h2>'+unescape(Pages[i][1])+'</h2>';
			}
			//
			// menu
			updateMenu(id);
		}
		//
		// show/hide current screen
		showDiv(this_id,(this_id==id));
	}	
}

function updateMenu(id) {
	var menu = document.getElementById('menuContainer');
	var menu_lis = menu.getElementsByTagName('li');
	//
	// for each li get first child (link):
	// - selected if href == id
	// - unselect if href != id
	for(var i=0; i<menu_lis.length; i++) {
		var li_a = menu_lis[i].getElementsByTagName('a');		
		var this_id = li_a[0].getAttribute('href').split('#')[1]; // get internal link from href
		//
		if(this_id!='') {
			var this_class_split = menu_lis[i].className.split('Sel');	// split li class (1 item if not selected; 2 if selected)
			var this_class_sel = (this_class_split[1]!=undefined);	
			if(this_id==id) menu_lis[i].className = (!this_class_sel)? this_class_split[0]+'Sel': menu_lis[i].className; // add 'Sel' to root
			else menu_lis[i].className = (this_class_sel)? this_class_split[0]: menu_lis[i].className; // use root class only
		}
	}	
}

function updateMenuQuestion(id,complete) {
	var this_span = document.getElementById(id+'_feed');
	if(this_span) {
		switch(complete) {
			case "0": this_span.innerHTML = ASSESS_FEED_NOT; break;
			case "1": this_span.innerHTML = ASSESS_FEED_INC; break; 
			case "2": this_span.innerHTML = ASSESS_FEED_ATT; break;
		}
	}
}

function updateReview() {
	var this_div = document.getElementById('review_body');
	is_complete = true;
	var arr_complete = new Array(0,0,0); // not attempted - incomplete - attempted
	//
	// process questions
	for(id in Questions) {
		switch(Questions[id][3]) {
			case("0"): arr_complete[0]=arr_complete[0]+1; is_complete = false; break;
			case("1"): arr_complete[1]=arr_complete[1]+1; is_complete = false; break;
			case("2"): arr_complete[2]=arr_complete[2]+1; break;
			default: is_complete = false; break;
		}
	}
	// build review HTML
	var review_HTML = '';
	//
	if(is_complete) {
		review_HTML += REVIEW_COMPLETE_HTML;
	} else {
		review_HTML += REVIEW_INCOMPLETE_HTML;
		review_HTML += '<table class="review_table">';
		if(arr_complete[0]!=0) review_HTML += '<tr><th class="review0">Not Attempted</th><td>'+arr_complete[0]+'</td></tr>';
		if(arr_complete[1]!=0) review_HTML += '<tr><th class="review1">Incomplete</th><td>'+arr_complete[1]+'</td></tr>';
		if(arr_complete[2]!=0) review_HTML += '<tr><th class="review2">Attempted</th><td>'+arr_complete[2]+'</td></tr>';
		review_HTML += '</table>';
	}
	//
	this_div.innerHTML = review_HTML;	
}

function processResults() {
	//
	// if unfinished, ask for confirmation
	if(!is_complete) {
		var exit_process = confirm(SUBMIT_INCOMPLETE_CONFIRM);
		if(!exit_process) return;
	}
	//
	// get form params
	var params = getFormParams();
	if(params==null) return;
	//
	// disable global submit
	var submit_div = document.getElementById('submit_div');
	submit_div.className = "btn-disabled";
	submit_div.onclick = "";
	submit_div.innerHTML = "<span>Submitted</span>";
	//
	// disable form inputs
	var form_inputs = document.review_form.getElementsByTagName('input');
	for(var i=0; i<form_inputs.length; i++) {
		form_inputs[i].disabled = true;			
	}
	var region_sel = document.review_form.region;
	region_sel.disabled = true;
	//
	// scoring variables
	var user_marks = 0;
	var total_marks = 0;
	//
	// build results table (+show menu marking)
	var results_table = '<table width="100%"><tr><th>Question Title</th><th>Marks</th></tr>';
	var row=0;

	for(id in Questions) {
		// scoring counts
		var um = (IS_EQUAL_WEIGHTING)? (Math.round((Questions[id][5]/Questions[id][2])*ASSESS_WEIGHTED_MARKS*100)/100): Questions[id][5];
		var tm = (IS_EQUAL_WEIGHTING)? ASSESS_WEIGHTED_MARKS: Questions[id][2];
		user_marks+=um;
		total_marks+=tm;
		//
		// mark and disable question
		markQuestion(id,Questions[id][1]);
		//
		// scoring table row		 
		var zs = (row%2!=0)? 'e': 'o'; // zebra striping
		results_table += '<tr class="'+zs+'"><td>'+unescape(Questions[id][0])+'</td><td class="qr"><span>'+um+'</span>&nbsp;/&nbsp;'+tm+'</td></tr>';
		row++;
		//
		// menu marking scheme
		var this_span = document.getElementById(id+'_feed');
		switch(Questions[id][4]) {
			case "0": this_span.innerHTML = ASSESS_IMG_CROSS; break;
			case "1": this_span.innerHTML = ASSESS_IMG_PARTIAL; break; 
			case "2": this_span.innerHTML = ASSESS_IMG_TICK; break;
		}		
	}
	//
	// score calc
	user_score = Math.round((user_marks/total_marks)*100);
	results_table += '<tr class="qt"><th>Total</th><td>'+user_score+'%</td></tr></table>';
	//
	// FORM SUBMIT
	var post_success = postMethod("score="+user_score+"&"+params);
	if(post_success!=true) alert("WARNING: User data was not stored.\n\nContinuing to results...");
	//
	// set default LMS values (if e.g. LMS unavailable)
	display_user_name = (user_name==null || user_name=='')? "[Enter name]": user_name;
	//
	// build results screen report
	var results_HTML = '<p style="float:right">Date: <strong>'+getStrDate()+'</strong></p><p>Name: <strong>'+display_user_name+'</strong><br/>Total Score: <strong>'+user_score+'%</strong></p>';
	results_HTML += results_table;
	//
	var this_div = document.getElementById('results_body');
	this_div.innerHTML = results_HTML;
	//
	is_submitted = true;
	//
	// show feedback / collapse question images
	var all_divs = document.getElementsByTagName('div');	
	for(var i=0; i<all_divs.length; i++) {
		if(all_divs[i].id.indexOf("feedOK") != -1 && all_divs[i].id.indexOf("content") == -1) {
			showDiv(all_divs[i].id,true);
		} else if (all_divs[i].id.indexOf("qImage") != -1 ) {
			if(SHOW_ANSWERS) box_toggle(all_divs[i].id,false);
		}
	}	
	//
	// redirect to results screen and show on menu
	loadScreen('results');
	showDiv('results_li',true);
}

function getStrDate() {
	var now = new Date();
	var day = (now.getDate() < 10)? "0"+now.getDate(): now.getDate();
	var month = ((now.getMonth()+1) < 10)? "0"+(now.getMonth()+1): (now.getMonth()+1);
	var year = (navigator.appName.indexOf("Netscape")!=-1)? 1900 + now.getYear(): now.getYear();
	var hours = (now.getHours() < 10)? "0"+now.getHours(): now.getHours();
	var mins = (now.getMinutes() < 10)? "0"+now.getMinutes(): now.getMinutes();
	return day + "/" + month + "/" + year + " "+hours + ":" + mins;
}
//
function toggleSubMenu(id) {
	var thisSub = document.getElementById(id);
	if(thisSub.className == 'section') thisSub.className = 'sectionSel';
	else thisSub.className = 'section';
}
//
function getHelpLink() {
	return '<a class="link_tools" id="tools_help" title="Open help page" href="'+helpURL+'" target="_blank">Help</a>';	
}
//
function openCertificate() {
   var params="width=740,height=1024,resizable=yes,toolbar=yes,scrollbars=yes";
   var winid = window.open("certificate.html","certificate",params);		
}
//
//
////////////////////////////////////////
// AJAX FORM POST
////////////////////////////////////////
//
function getHTTPObject() {
	var http = false;
	//Use IE's ActiveX items to load the file.
	if(typeof ActiveXObject != 'undefined') {
		try {http = new ActiveXObject("Msxml2.XMLHTTP");}
		catch (e) {
			try {http = new ActiveXObject("Microsoft.XMLHTTP");}
			catch (E) {http = false;}
		}
	//If ActiveX is not available, use the XMLHttpRequest of Firefox/Mozilla etc. to load the document.
	} else if (XMLHttpRequest) {
		try {http = new XMLHttpRequest();}
		catch (e) {http = false;}
	}
	return http;
}

var http = getHTTPObject();

function getFormParams() {
	// isTest
	var ft = document.review_form.isTest.value;	
	var params = 'isTest='+ft+'&';
	var err = '';
	//
	// name
	var fn = document.review_form.name.value;
	if(fn==null||fn=='') err+="- Name\n";
	else user_name = fn;	
	//
	// profession
	var fp = document.review_form.profession.value;
	if(fp==null||fp=='') err+="- Profession\n";
	else params+="profession="+escape(fp)+"&";
	//
	// region
	var fa = document.review_form.region.value;
	if(fa==0) err+="- Region\n";
	else params+="region="+fa+"&";
	//
	// rating
	var fr = getCheckedValue(document.review_form.rating);
	if(fr==null) err+="- Rating\n";
	else params+="rating="+fr+"&";
	//
	// comments
	var fc = document.review_form.comments.value;
	params+="comments="+fc;
	//
	// errors
	if(err!='') {
		var cf=confirm("Form elements incomplete:\n\n"+err+"\nTo submit anyway click OK.");
		if(!cf) return null;
	}
	//
	return params;
}

function getCheckedValue(obj) {
	if(!obj) return null;
	var len = obj.length;
	if(len == undefined) {
		if(obj.checked) return obj.value;
		else return null;
	}
	for(var i = 0; i < len; i++) {
		if(obj[i].checked) return obj[i].value;
	}
	return null;
}


function handler() {//Call a function when the state changes.
	if(http.readyState == 4 && http.status == 200) {
		//$("txt_response").value = http.responseText;
		//alert(http.responseText);
	}
}

function getMethod() {
	http.open("GET", url+"?"+params, true);
	http.onreadystatechange = handler;
	http.send(null);
}

function postMethod(params) {
	//alert(params);
	var url = "../../../../data/submit.php";
	//
	try {
		http.open("POST", url, true);
		
		//Send the proper header infomation along with the request
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length", params.length);
		http.setRequestHeader("Connection", "close");
		//
		http.onreadystatechange = handler;
		
		http.send(params);
	} catch(e) {
		return false; // error posting data
	}
	//
	return true;
	//
}
//
////////////////////////////////////////
// CONTENT CONTROL
////////////////////////////////////////
//
//
function showDiv(id,bool) {
	var thisDiv = document.getElementById(id);
	if(thisDiv && bool) { 
		thisDiv.style.visibility = "visible";
		thisDiv.style.display = "block";
	} else if (thisDiv) {
		thisDiv.style.visibility = "hidden";
		thisDiv.style.display = "none";
	}
}
//
////////////////////////////////////////
// Slideshow
////////////////////////////////////////
//
function showSlide(id,pos) {
	var NUM_IMAGES = eval('NUM_IMAGES_'+id);
	//
	// disable previous/next links if necessary
	var prevLnk = document.getElementById("slidePrev_"+id);
	var nextLnk = document.getElementById("slideNext_"+id);
	if(prevLnk) prevLnk.className = "slidePrev";
	if(nextLnk) nextLnk.className = "slideNext";
	if(pos==1) {			
		if(prevLnk) prevLnk.className = "slidePrev_off";
	} else if(pos==NUM_IMAGES) {
		if(nextLnk) nextLnk.className = "slideNext_off";	
	}
	//
	for(var i = 1; i <= NUM_IMAGES; i++) {
		var idStr = "slide_"+id+"_"+i;
		var linkStr = "slideLink_"+id+"_"+i;
		var node = document.getElementById(idStr);
		var lnk = document.getElementById(linkStr);
		if(node && i==pos) {
			node.style.display='block';		
			node.style.visibility='visible';
			if(lnk)	{
				if(lnk.className == 'gallLink') lnk.className = 'gallLinkSel';
				else if(lnk.className == 'slideLink') lnk.className = 'slideLinkSel';
			}
			eval('currentImage_'+id+' = '+i);
		} else if(node) {
			node.style.display='none';
			node.style.visibility='hidden';
			if(lnk)	{
				if(lnk.className == 'gallLinkSel') lnk.className = 'gallLink';
				else if(lnk.className == 'slideLinkSel') lnk.className = 'slideLink';				
			} 
		}		
	}
}
//
function hideSlide(id) {
	var NUM_IMAGES = eval('NUM_IMAGES_'+id);
	for(var i = 1; i <= NUM_IMAGES; i++) {

		var idStr = "slide_"+id+"_"+i;
		var node = document.getElementById(idStr);
		if(node) {
			node.style.display='none';
			node.style.visibility='hidden';
		}		
	}		
}
//
function showNext(id) {
	var currentImage = eval('currentImage_'+id);
	var NUM_IMAGES = eval('NUM_IMAGES_'+id); 
	if(currentImage < (NUM_IMAGES)) {
	showSlide(id,currentImage + 1);	
	}   
}
//
function showPrev(id) {
	var currentImage = eval('currentImage_'+id);
	if(currentImage > 1) {
	showSlide(id,currentImage - 1);
	}
}
//
////////////////////////////////////////
// LMS Functions
////////////////////////////////////////
//
function bookmark() {
	//
	// calls scorm bookmarking function
	if(isSession) doBookmark();
	//
}
