var StatusManager = {
	isPageChangeUnderway: false,
	isWarningShowing: false,
	currentMessageText: null,
	maxLoadingTimeoutIntervalSeconds: 17,
	secondsToBeginLoadingPageMessage: 0.75,
	currentLoadingCheckReference: null,
	currentLoadingStartReference: null,
	permalink: null,
	
	noLockPageChangeInitiated: function(permalinkUrl)
	{
		if (permalinkUrl != undefined
			&& permalinkUrl != null
			&& permalinkUrl.indexOf('http://') != -1)
		{
			StatusManager.permalink = permalinkUrl;
		}
		else
		{
			StatusManager.permalink = null;
		}

		StatusManager.isPageChangeUnderway = true;		
		StatusManager.currentLoadingCheckReference = window.setTimeout(StatusManager.checkPageChangeStatus, (StatusManager.maxLoadingTimeoutIntervalSeconds * 1000));
		StatusManager.currentLoadingStartReference = window.setTimeout(function() { StatusManager.displayLoadingMessage("Loading, please wait.")}, (StatusManager.secondsToBeginLoadingPageMessage * 1000));			
	},
	
	checkPageChangeStatus: function()
	{
		if (StatusManager.isPageChangeUnderway == true)
		{
			if (StatusManager.permalink != null
				&& StatusManager.permalink.indexOf('http://') >= 0)
			{
				window.location = StatusManager.permalink;	
			}
			else
			{
				StatusManager.displayLoadingMessage('<b>The page you requested appears to be taking an unusually long amount of time to load. Please <span style="text-decoration: underline;">refresh the page</span>.</b>');	
			}
		}
		else
		{
			window.clearTimeout(StatusManager.currentLoadingCheckReference);
		}
	},
	
	pageChangeCompleted: function()
	{
		window.clearTimeout(StatusManager.currentLoadingStartReference);
		StatusManager.permalink = null;
		StatusManager.isPageChangeUnderway = false;
		StatusManager.hideMessage();
	},
	
	hideMessage: function()
	{
		if (document.getElementById("ajaxq-status-manager-message-wrapper") != null
			&& document.getElementById("ajaxq-status-manager-message-wrapper") != undefined
			&& document.getElementById("ajaxq-status-manager-message-wrapper-center") != null
			&& document.getElementById("ajaxq-status-manager-message-wrapper-center") != undefined
			&& StatusManager.isWarningShowing == false)
		{
			document.getElementById("ajaxq-status-manager-message-wrapper").className = "ajaxq-element-disabled";
			document.getElementById("ajaxq-status-manager-message-wrapper-center").className = "ajaxq-element-disabled";
			window.clearTimeout(StatusManager.currentLoadingStartReference);
			StatusManager.currentMessageText = null;
		}
	},
	
	hideWarning: function()
	{
		StatusManager.isWarningShowing = false;
		StatusManager.hideMessage();
	},
	
	getTextOfCurrentMessage: function()
	{
		return StatusManager.currentMessageText;
	},
	
	displayWarningMessage: function(message)
	{
		StatusManager.doMessageSetup();
		StatusManager.isWarningShowing = true;
		var imgUrl = '../global/images/icons/warning.png';
		var displayHtml = '<img src="' + imgUrl + '" alt="" height="16" width="16" /> ';
		displayHtml += message;
		displayHtml += '&nbsp;<a href="#" onclick="StatusManager.hideWarning(); return false;">Close</a>';
		
		StatusManager.currentMessageText = message;
		
		document.getElementById("ajaxq-status-manager-message-contents").innerHTML = displayHtml;
		document.getElementById("ajaxq-status-manager-message-contents").className = "ajaxq-status-manager-warning-contents-enabled";		
	},
	
	displayInitialLoadingMessage: function()
	{
		StatusManager.isPageChangeUnderway = true;
		StatusManager.displayLoadingMessage("Loading Page. Please Wait.");
	},
	
	displayLoadingMessage: function(message)
	{
		if (StatusManager.isWarningShowing == true)
		{
			return false;
		}
		
		StatusManager.doMessageSetup();
		if (message == null
			|| message == undefined
			|| message.length == 0)
		{
			message = "Loading, please wait.";
		}
		
		StatusManager.currentMessageText = message;
		
		var imgUrl = '../global/images/icons/loading.gif';
		document.getElementById("ajaxq-status-manager-message-contents").innerHTML = '<img src="' + imgUrl + '" alt="" height="16" width="16" /> ' + message;
		document.getElementById("ajaxq-status-manager-message-contents").className = "ajaxq-status-manager-message-contents-enabled";
	},
	
	doMessageSetup: function()
	{
		if (document.getElementById("ajaxq-status-manager-message-wrapper") == null
			|| document.getElementById("ajaxq-status-manager-message-wrapper") == undefined)
		{
			 var wrapper = document.createElement("div");
			 wrapper.setAttribute("id", "ajaxq-status-manager-message-wrapper");
			 var parent  = document.getElementById("ajaxq-dom-sandbox");
			 parent.appendChild(wrapper);
		}
		
		document.getElementById("ajaxq-status-manager-message-wrapper").className = "ajaxq-status-manager-message-wrapper-enabled";
	
		if (document.getElementById("ajaxq-status-manager-message-wrapper-center") == null
				|| document.getElementById("ajaxq-status-manager-message-wrapper-center") == undefined)
		{
			 var wrapper = document.createElement("div");
			 wrapper.setAttribute("id", "ajaxq-status-manager-message-wrapper-center");
			 var parent  = document.getElementById("ajaxq-dom-sandbox");
			 parent.appendChild(wrapper);
		}
		
		document.getElementById("ajaxq-status-manager-message-wrapper-center").className = "ajaxq-status-manager-message-wrapper-center-enabled";
		
		if (document.getElementById("ajaxq-status-manager-message-contents") == null
			|| document.getElementById("ajaxq-status-manager-message-contents") == undefined)
		{
			 var contents = document.createElement("div");
			 contents.setAttribute("id", "ajaxq-status-manager-message-contents");
			 document.getElementById("ajaxq-status-manager-message-wrapper-center").appendChild(contents);
		}
	}
};

var TestCreatorOptions = {
	expandMoreOptions: function()
	{
		document.getElementById("max_verbal_questions_options").className = "ajaxq-element-block";
		document.getElementById("max_quant_questions_options").className = "ajaxq-element-block";
		document.getElementById("max_verbal_seconds_options").className = "ajaxq-element-block";
		document.getElementById("max_quant_seconds_options").className = "ajaxq-element-block";
		document.getElementById("test-more-options-text").innerHTML = "Hide additional test options";
		document.getElementById("test-more-options-image").src = AJAX.getAbsoluteRootPath() + "global/images/icons/collapse.png?20081226";
	},
	
	collapseMoreOptions: function()
	{
		document.getElementById("max_verbal_questions_options").className = "ajaxq-element-disabled";
		document.getElementById("max_quant_questions_options").className = "ajaxq-element-disabled";
		document.getElementById("max_verbal_seconds_options").className = "ajaxq-element-disabled";
		document.getElementById("max_quant_seconds_options").className = "ajaxq-element-disabled";
		document.getElementById("test-more-options-text").innerHTML = "More test options";
		document.getElementById("test-more-options-image").src = AJAX.getAbsoluteRootPath() + "global/images/icons/expand.png?20081226";
	},
	
	verifySubmission: function()
	{
		var maxQuantQuestionsNum = document.getElementById("qc_nt_max_quant_questions").value;
		var maxVerbalQuestionsNum = document.getElementById("qc_nt_max_verbal_questions").value;
		var maxQuantMinutes = document.getElementById("qc_nt_max_quant_seconds").value;
		var	maxVerbalMinutes = document.getElementById("qc_nt_max_verbal_seconds").value;

		var maxQuantQuestionNumPattern = new RegExp("^[0-9]{1,2}$");
		var isMaxQuantQuestionValid = maxQuantQuestionNumPattern.test(maxQuantQuestionsNum);
		if (!isMaxQuantQuestionValid)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "The maximum number of quantitative questions must be a number.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;			
		}
		else if (maxQuantQuestionsNum < 5)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "A test must have at least 5 quantitative questions.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;
		}
		else if (maxQuantQuestionsNum > 37)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "A test can have at most 37 quantitative questions.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;			
		}
		
		var maxQuantQuestionNumPattern = new RegExp("^[0-9]{1,2}$");
		var isMaxVerbalQuestionValid = maxQuantQuestionNumPattern.test(maxVerbalQuestionsNum);
		if (!isMaxVerbalQuestionValid)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "The maximum number of verbal questions must be a number.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;			
		}
		else if (maxVerbalQuestionsNum < 5)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "A test must have at least 5 verbal questions.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;
		}
		else if (maxVerbalQuestionsNum > 41)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "A test can have at most 41 verbal questions.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;			
		}
		
		var maxQuantMinutesPattern = new RegExp("^[0-9]{1,3}$");
		var ismaxQuantMinutesValid = maxQuantMinutesPattern.test(maxQuantMinutes);
		if (!ismaxQuantMinutesValid)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "The time for the quantative section must be a number.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;			
		}
		else if (maxQuantMinutes < 1)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "The quantitative section must alot at least a minute.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;
		}
		else if (maxQuantMinutes > 120)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "The quantitative section can alot at most 120 minutes.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;			
		}
		
		var maxVerbalMinutesPattern = new RegExp("^[0-9]{1,3}$");
		var isMaxVerbaMinutesValid = maxVerbalMinutesPattern.test(maxVerbalMinutes);
		if (!isMaxVerbaMinutesValid)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "The time for the verbal section must be a number.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;			
		}
		else if (maxVerbalMinutes < 1)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "The verbal section must alot at least a minute.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;
		}
		else if (maxVerbalMinutes > 120)
		{
			document.getElementById("qc-nt-message-notification-contents").innerHTML = "The verbal section can alot at most 120 minutes.";
			document.getElementById("qc-nt-message-notification-contents").className = "ajaxq-inline-error-message";
			return false;			
		}

		myAjaxNtCreatorHandler.receiveLaunchNewTestButtonClick();
	},
	
	handleOnClick: function()
	{
		if (document.getElementById("max_verbal_questions_options").className == "ajaxq-element-block")
		{
			TestCreatorOptions.collapseMoreOptions();
		}
		else
		{
			TestCreatorOptions.expandMoreOptions();
		}
			
	}
};

var is_ie6 = ('ActiveXObject' in window && !('XMLHttpRequest' in window));
if (is_ie6)
{
	StatusManager.displayWarningMessage("You are using Internet Explorer 6, which has a number of bugs that cause some features on this website to fail. We recommend <a href=\"http://www.google.com/chrome\">downloading the Google Chrome browser</a> for a faster and more stable Internet experience.");
}

var GlobalDownloadStatus = {
		MY_QC_HISTORY_DOWNLOADED: false,
		ALL_ADMIN_LISTS_DOWNLOADED: false,
		GLOBAL_DOWNLOAD_GROUP_STATUS: new Array(),
		_STATUS_DOWNLOAD_NOT_BEGUN: 0,
		_STATUS_DOWNLOAD_IN_PROCESS: 1,
		_STATUS_PARTLY_DOWNLOADED: 2,
		_STATUS_DOWNLOAD_COMPLETE: 3
};

GlobalDownloadStatus.GLOBAL_DOWNLOAD_GROUP_STATUS["QUESTION_CONTEXT"] = new Array();

/*
* Store the id of Question Lists and the download state of these lists.
* Derive the Question List Ids from Question Contexts.
*/

GlobalDownloadStatus.GLOBAL_DOWNLOAD_GROUP_STATUS["QUESTION_LIST"] = new Array();
GlobalDownloadStatus.GLOBAL_DOWNLOAD_GROUP_STATUS["QUESTION_LIST"]["QUESTIONS"] = new Array();
GlobalDownloadStatus.GLOBAL_DOWNLOAD_GROUP_STATUS["QUESTION_LIST"]["META_DATA"] = new Array();

/*
* Store the id of Question Contexts and the download state of the interactions associated with these contexts.
*/
GlobalDownloadStatus.GLOBAL_DOWNLOAD_GROUP_STATUS["QUESTION_INTERACTION"] = new Array();
GlobalDownloadStatus.GLOBAL_DOWNLOAD_GROUP_STATUS["MARKED_QUESTION"] =  new Array();
GlobalDownloadStatus.GLOBAL_DOWNLOAD_GROUP_STATUS["MARKED_QUESTION"]["DOWNLOAD_STATUS"] = GlobalDownloadStatus._STATUS_DOWNLOAD_NOT_BEGUN;

GlobalDownloadStatus.GLOBAL_DOWNLOAD_GROUP_STATUS["COOKIE_TEST"] =  new Array();
GlobalDownloadStatus.GLOBAL_DOWNLOAD_GROUP_STATUS["COOKIE_TEST"]["DOWNLOAD_STATUS"] = GlobalDownloadStatus._STATUS_DOWNLOAD_NOT_BEGUN;