var ua = navigator.userAgent.toLowerCase();
//var isLMSRefreshAllowed = true; // THIS IS FROM PASSKEY
var shouldUnloadHandlerCloseLP = true;
var lpWindowRef = null;
var mhpdWindowRef = null;
var previewWindowRef = null;
var primaryTimerID = 0;
var secondaryTimerID = 0;
var primaryTimeLimit = 660000;
var secondaryTimeLimit = 60000;
//var primaryTimeLimit = 10000;
//var secondaryTimeLimit = 5000;
var sessionAlertDiv = "sessionalert";
var mainPageDiv = "mainpagediv";
var logoutURL = "/lms/Logout.do";
var sessionTestURL = "/lms/SessionCheckFromLP.do"
//var logoutURL = "/passkeylocal/index.html";
//var sessionTestURL = "/passkeylocal/ajaxtest.html"


//JRN - Student Logout: javascript:window.top.userLogOut();
//JRN - Student Cancel: top.sessionAlertOkClickedInLMS();
//JRN - Student Ok    : top.sessionAlertCancelClickedInLMS();
//PAS - Student Logout: javascript:window.top.userLogOut()
//PAS - Student Cancel: top.sessionAlertOkClickedInLMS();
//PAS - Student Ok    : top.sessionAlertCancelClickedInLMS();
//
//JRN - Teacher Logout: javascript:window.top.userLogOut(); // should this be removed????
//JRN - Teacher Cancel: top.sessionAlertCancelClickedInLMS();
//JRN - Teacher Ok    : top.sessionAlertOkClickedInLMS();
//PAS - Teacher Logout: Nothing.... weird
//PAS - Teacher Cancel: top.sessionAlertCancelClickedInLMS();
//PAS - Teacher Ok    : top.sessionAlertOkClickedInLMS();
  
 
 
 
/*************************************************************/
/* SESSION TIMER METHODS */
/*************************************************************/


function sessionPrimaryTimerStart() {
	sessionPrimaryTimerStop();
	primaryTimerID = setTimeout("sessionPrimaryTimerHandler()", primaryTimeLimit);
}

function sessionPrimaryTimerStop() {
	clearTimeout(primaryTimerID);
}

function sessionPrimaryTimerRestart() {
	sessionPrimaryTimerStop();
	sessionPrimaryTimerStart();
}

function sessionSecondaryTimerStart() {
	secondaryTimerID = setTimeout("sessionSecondaryTimerHandler()", secondaryTimeLimit);
}

function sessionSecondaryTimerStop() {
	clearTimeout(secondaryTimerID);
}

function sessionSecondaryTimerRestart() {
	sessionSecondaryTimerStop();
	sessionSecondaryTimerStart();
}

function sessionPrimaryTimerHandler() {
	sessionPrimaryTimerStop();
	sessionShowLMSAlert();
	sessionShowLPAlert();
	sessionSecondaryTimerStart();	
}

function sessionSecondaryTimerHandler() {
	sessionSecondaryTimerStop();
	sessionHideLMSAlert();
	
	//isLMSRefreshAllowed = false;
	shouldUnloadHandlerCloseLP = false;
	
	if (isLPOpen()) {
		try {
			lpWindowRef.sessionExpired();
		} catch (err) {}
	}
	
	window.location = logoutURL; 
}


/*************************************************************/
/* SESSION ALERTS */
/*************************************************************/


function sessionShowLMSAlert() {
	top.lms.document.getElementById(sessionAlertDiv).style.visibility = "visible";
	top.lms.document.getElementById(mainPageDiv).className = "greydiv";
}

function sessionHideLMSAlert() {
	top.lms.document.getElementById(sessionAlertDiv).style.visibility = "hidden";
	top.lms.document.getElementById(mainPageDiv).className = "";
}

function sessionShowLPAlert() {
	if (isLPOpen()) {
		try {
			lpWindowRef.sessionShowLPAlert();
		} catch (err) {}
	}
}

function sessionHideLPAlert() {
	if (isLPOpen()) {
		try {
			lpWindowRef.sessionHideLPAlert();
		} catch (err) {}
	}
}

function sessionAlertOkClickedInLMS() {
	validateSession("sessionAlertOkClickedInLMSHandler");
}

function sessionAlertOkClickedInLMSHandler(originalRequest, JSON) {
	sessionSecondaryTimerStop();
	sessionPrimaryTimerStart();
	sessionHideLMSAlert();
		
	if (isLPOpen()) {
		try {
			lpWindowRef.sessionAlertOkClickedInLMS();
		} catch (err) {}
	}
		
	if (!isSessionActive(originalRequest.responseText)) {
		sessionSecondaryTimerHandler();
	}
}

function sessionAlertCancelClickedInLMS() {
	 	sessionSecondaryTimerStop();
		sessionHideLMSAlert();
		 
	 //	isLMSRefreshAllowed = false;
	 	
	 	top.window.location = logoutURL; 
}

function sessionAlertOkClickedInLP() {
	validateSession("sessionAlertOkClickedInLPHandler");
}

function sessionAlertOkClickedInLPHandler(originalRequest, JSON) {
	sessionSecondaryTimerStop();
	sessionPrimaryTimerStart();
	sessionHideLMSAlert();
		
	if (!isSessionActive(originalRequest.responseText)) {
		sessionSecondaryTimerHandler();
	}
}

function sessionAlertCancelClickedInLP() {
	sessionSecondaryTimerStop();
	sessionHideLMSAlert();
	
	shouldUnloadHandlerCloseLP = false;
	
	window.location = logoutURL; 
}

/*************************************************************/
/* SESSION MANAGEMENT */
/*************************************************************/


function isSessionActive(responseText) {
	if (responseText == "SessionValid") {
		//alert("session validated: " + responseText);
		return true;
	} else {
		//alert("session not validated: " + responseText);
		return false;
	}
}

function validateSession(callBack) {
  var timestamp = "?ts=" + new Date().getTime();
  var url = sessionTestURL + timestamp;
  var myAjax = new Ajax.Request(
		url, 
		{
              asynchronous: 'true',
	          method: 'get', 
              requestHeaders: {Accept: 'text/html'}, 
	          onComplete: eval(callBack)
	     });
}

function sessionRefreshUserSession() { //change name of this
	validateSession("sessionRefreshUserSessionHandler");
}

function sessionRefreshUserSessionHandler() {
	sessionPrimaryTimerRestart();
	
	if (!isSessionActive(originalRequest.responseText)) {
		sessionSecondaryTimerHandler();
	}
	
}


/*************************************************************/
/* LMS MANAGEMENT */
/*************************************************************/


function userLogOut() {
	sessionPrimaryTimerStop();
	sessionSecondaryTimerStop();
	top.loadBlank(); 
	localUnloadHandler();
}

function localUnloadHandler() {
	// Determine if LP window is open before attempting to close
	if (isLPOpen()) {
		try {
			if (shouldUnloadHandlerCloseLP) {
				top.blank.isLogOut = true; 
				lpWindowRef.onLMSClosed();
			} 
		} catch (err) {
			//alert("localUnloadHandler: unable to close LP: " + err);
		}
		//alert("LP WINDOW WAS OPEN");
	} else {
		top.loadBlank(); 
		//alert("LP WINDOW WAS NOT OPEN");
	}
	if (isMhpdOpen()) {
		mhpdWindowRef.close();
	}
	shouldUnloadHandlerCloseLP = true;
	mhpdWindowRef = null;
	lpWindowRef = null;
}

function lmsBrowserWindowClosed() {
	localUnloadHandler();
}

function displayMessage() {
	if(eval(top.lms.document.getElementById("startspan")) && eval(top.lms.document.getElementById("start"))) {
	
		var temp = top.lms.document.getElementById('start').parentNode.parentNode;
		temp.className = "assignment";
		temp.style.height="36px";
		temp.innerHTML = "Please wait while the system updates.";
	}
} 

function loadBlank() { 
	top.blank.window.location.href='/content/html/blank.html';
}

function loadMonitor() {
	var timestamp = "ts=" + new Date().getTime();
	var txt = top.blank.window.location + "";
	if (txt.match("blank") != null) {
		top.blank.window.location.href='/content/lp/monitor.html?'+timestamp;
	}
}

// CALLED BY THE LP WINDOW TO DISABLE THE RELOADING OF THE LMS.
// A RELOAD IS NOT NEEDED WHEN THE LP IS NOT IN "normal" MODE.
function disableReloadOfLMS() {
	top.blank.window.allowReloadOfLMS = false;
}

function isMhpdOpen() {
	if (mhpdWindowRef == null || mhpdWindowRef.closed) {
		return false;
	} else {
		return true;
	}
}
/*************************************************************/
/* LP MANAGEMENT */
/*************************************************************/

function isLPOpen() {
	if (lpWindowRef == null || lpWindowRef.closed) {
		return false;
	} else {
		return true;
	}
}

function isPreviewWindowOpen() {
	if (previewWindowRef == null || previewWindowRef.closed) {
		return false;
	} else {
		return true;
	}
}

function onLPClosed(scoID) {
	//alert("in onLPClosed");
	lpWindowRef = null;

	sessionSecondaryTimerStop();
	sessionPrimaryTimerStart();
	
	displayMessage(); 
	
	//alert("LMS Refresh Allowed: " + isLMSRefreshAllowed);
//	if (isLMSRefreshAllowed) {
//		if (eval(window.lms.document.ReloadForm)) {
//			window.lms.document.ReloadForm.submit();
//		} 
//	} else {
//		isLMSRefreshAllowed = true;
//	}
	top.blank.window.rewriteMonitorDiv(scoID);  // DOES THIS REFRESH THE LMS?
}

function LPNotClosedProperlyAlert() {
	alert('The window has been closed improperly.  Please wait while your data is saved.');
}		
			
