var MAX_LESSONS = 24;
var ALL_LESSONS_COMPLETE = 		0x0000FFFF;
var BIT_FEEDBACK_SUBMITTED = 	0x01000000;
var BIT_UPS_SERVER_DOWN =		0x04000000;
var BIT_SETTINGS_DIRTY = 		0x40000000;
var BIT_TOU_ACCEPTED =	 		0x08000000;

var CH_NODE_CLOSED = '0';
var CH_NODE_OPEN = '1';
var CH_NODE_EXPANDER_OPEN = '2';
var ciMaxQuestionsPerTest = 10;
var ciMaxTestCount = 8;
var g_fInitializeCourse = false;
var g_preloadDone = false;
var g_practLaunchInProgress = false;
var g_fFlashRewindFocus = false;

var MAX_COMMENT_LENGTH = 850;
var MAX_COMMENT_COOKIE_SIZE = 3000;	

var TCD_E_ACTIVEX_INSTALL_ERROR = 1;
var TCD_E_NON_IE_BROWSER = 2;
var TCD_E_NOT_INSTALLED = 3;
var TCD_E_BUSY = 4;
var TCD_E_INVALID_TEMPLATE = 5;
var TCD_E_EXPLOIT = 6;
var TCD_E_SIGNATURE_REQUIRED = 7;
var TCD_E_DISK_FULL = 8;
var TCD_E_CANNOT_RUN = 9;
var TCD_E_AUTHENTICATE_FAILED = 10;
var TCD_E_DOWNLOAD_FAILED = 11;
var TCD_E_SERVER_UNAVAILABLE = 12;
var TCD_S_ALREADY_UNPACKED = 13;
var TCD_E_UNSUPPORTED_OS = 14;
var TCD_E_INVALID_CONFIG_FILE = 15;
var TCD_E_OUTOFMEMORY = 16;
var TCD_E_BAD_PATH = 17;
var TCD_E_ABORT = 18;

var COURSE_COOKIE_NAME = "COURSE_ATTRIBS";

var wmp6 = 0;
var wmp7 = 0;

function SetCourseCookie(strCookieName, strValue)
{
	var strCourseCookie = GetCookie(COURSE_COOKIE_NAME);
	if (strCourseCookie != null && strCourseCookie != "")
	{
		var iStart = strCourseCookie.indexOf(strCookieName);
		if (iStart >= 0)
		{
			var iEnd = strCourseCookie.indexOf(" ", iStart + 1);
			var strEnd = iEnd > 0 ? strCourseCookie.substr(iEnd) : "";
			var strCookie = strValue == null ? "" : strCookieName + ":" + strValue;
			strCourseCookie = strCourseCookie.substring(0, iStart) +
				strCookie + strEnd;
		}
		else if (strValue != null)
		{
			strCourseCookie += " " + strCookieName + ":" + strValue;
		}
	}
	else
	{
		strCourseCookie = strCookieName + ":" + strValue;
	}

	mSetCookie(COURSE_COOKIE_NAME, strCourseCookie);

}

function DeleteCourseCookie(strCookieName)
{
	SetCourseCookie(strCookieName, null);
}

function GetCourseCookie(strCookieName)
{
	var strCourseCookie = GetCookie(COURSE_COOKIE_NAME);
	if (strCourseCookie != null && strCourseCookie != "")
	{
		var iStart = strCourseCookie.indexOf(strCookieName);
		if (iStart >= 0)
		{
			iStart = strCourseCookie.indexOf(":", iStart + 1);
			if (iStart > 0)
			{
				iStart++;
				var iEnd = strCourseCookie.indexOf(" ", iStart + 1);
				if (iEnd == -1)
				{
					return strCourseCookie.substr(iStart);
				}
				else
				{
					return strCourseCookie.substring(iStart, iEnd);
				}
			}
		}
	}
	return "";
}

function LessonPagePreLoad()
{
	if (g_preloadDone == true)
		return;

	var strQueryString = location.search;
	if (strQueryString.indexOf("ReturnFromPractHelp") != -1)
	{

		if (typeof(DCTRL) != 'undefined' && typeof(DCTRL.BringHostToFront) != 'undefined')
			DCTRL.BringHostToFront();
	}

	if (strQueryString.indexOf("AxInstalled") != -1)
	{

		if (GetCourseCookie("AxInstalled") == "1" || IsPracticePage() == false)
		{
			DeleteCourseCookie("AxInstalled");
			location.replace("training.aspx?AssetID=" + GetPageID());
			return;
		}

		else
		{
			SetCourseCookie("AxInstalled", "1");
			LaunchPractice();
		}
	}

	window.name=GetCourseID();

	if (g_strLessonBits != null && g_strLessonBits.length > 0)
	{
		var iLessonBits = parseInt(g_strLessonBits);
		SetLessonBits(iLessonBits);
		if ((iLessonBits & BIT_UPS_SERVER_DOWN) > 0)
		{
			var errorMsgObj = GetPageElementTraining("ErrorMsg");
			if (errorMsgObj != null)
			{
				var strServerError = GetCookie("ServerError");
				errorMsgObj.innerText = strServerError;
			}
		}
	}

	g_fInitializeCourse = g_strInitializeCourse == "true" ? true : false;
	InitializeExpanderState(g_fInitializeCourse);
	InitializeRequests();

	var fReset = false;
	InitializeToc(fReset);
	FormatWrapupPage();
	FormatCourseRating();
	FormatAppliesTo();

	if (g_strSupportsOntPageTemplate != "True")
	{
		FormatOldPages();
	}

	UpdateHLIDLinks();

	g_preloadDone = true;
}

function LessonPageLoad(wmp6, wmp7)
{

	ResetDocumentTitle();

	if (g_fInitializeCourse)
	{

		mDeleteCookie("RATING_COMMENTS");
		DeleteCourseCookie("RATING_OVERALL");
		DeleteCourseCookie("RATING_MATERIAL");
		DeleteCourseCookie("RATING_EXAMPLES");
		DeleteCourseCookie("RATING_CONCEPTS");
		DeleteCourseCookie("RATING_TRAININGFAN");
	}

	SetPageFocus();
	InitializeAudio();
}

function LessonPageUnLoad()
{
	RememberAudioState();
	RememberFeedbackState();
}

function PracticeHelpLoad()
{
	window.focus();
}

function PracticeHelpUnload()
{

}

function ResetDocumentTitle()
{

	document.title = g_strBrowserTitle;
}

function InitializeToc(fReset)
{
	if (g_strSupportsToc != "True")
	{

		return;
	}

	var strExpanderState = GetStateOfAllExpanders();
	var iLessonIndex = 1;
	var iCurrentLessonIndex = GetCurrentLessonIndex();
	while (true)
	{
		var ExpanderObj = GetTocExpander(iLessonIndex);
		if (ExpanderObj != null)
		{
			if (strExpanderState.charAt(iLessonIndex) == CH_NODE_OPEN || 
				strExpanderState.charAt(iLessonIndex) == CH_NODE_EXPANDER_OPEN ||
				iLessonIndex == iCurrentLessonIndex)
			{
				ExpandCollapseTocNode(iLessonIndex, true, false);
			}
		}
		else
		{

			if (iLessonIndex > 1)
				break;
		}
		iLessonIndex++;
	}

	var lessonLinkObj = GetCurrentTocLink();
	if (lessonLinkObj != null)
	{
		if (g_strSupportsOntPageTemplate == "True")
		{
			var tocRowObj = GetPageElementTraining(g_strCurrRowID);
			if (tocRowObj != null)
			{
				tocRowObj.className = "cdTrnSelectedItem";
			}

			lessonLinkObj.style.color = "#F2A31B";
		}
		else
		{

			lessonLinkObj.style.color = "red";
			lessonLinkObj.style.fontWeight = "bold";
		}
	}

	InitializeLessonCheckmarks();

}

function MainFormSubmit()
{

	return false;
}

function FormatCourseRating()
{
	var objRatingDiv = GetPageElementTraining("RatingDiv");

	if (objRatingDiv == null)
		return;

	if (g_strImageUrl.length > 0)
	{
		objRatingDiv.innerHTML = 
			"<b>" + g_strRatingLabel + "&nbsp</b><img id='RatingStars' src='" + g_strImageUrl + "'" +
			"alt='" + g_strAlternateText + "'>" +
			"&nbsp" + g_strVotesText;
	}
	else
		objRatingDiv.innerHTML = "<b>" + g_strRatingLabel + "&nbsp</b>" + g_strRatingEmpty;
}

function FormatAppliesTo()
{
	var divAppliesTo = GetPageElementTraining("AppliesToDiv");

	if (divAppliesTo == null || g_strAppliesToLabel.length <= 0)
		return;

	divAppliesTo.innerHTML = "<b>" + g_strAppliesToLabel + "</b>&nbsp;" + g_strAppliesToText;
}

function FormatWrapupPage()
{

	var SubmitFeedbackTag = GetPageElementTraining("SubmitFeedbackSection");
	if (SubmitFeedbackTag != null)
	{
		var CourseCompleteTag = GetPageElementTraining("CourseCompleteSection");
		var CourseNotCompleteTag = GetPageElementTraining("CourseNotCompleteSection");

		var iLessonBits = GetLessonBits();
		if ((iLessonBits & BIT_FEEDBACK_SUBMITTED) > 0)
		{
			var ThanksFeedbackTag = GetPageElementTraining("ThanksFeedbackSection");
			ThanksFeedbackTag.className = "content";
			SubmitFeedbackTag.className = "fbCollapsed";
			CourseCompleteTag.className = "fbCollapsed";
			CourseNotCompleteTag.className = "fbCollapsed";
		}
		else if (FIsCourseComplete() == false)
		{
			if (CourseCompleteTag != null && CourseNotCompleteTag != null)
			{
				CourseNotCompleteTag.className = "content";
				CourseCompleteTag.className = "fbCollapsed";
			}
		}
		PopulateFeedbackResponses();
	}
}

function GetCourseID()
{
	return g_strCourseID;
}

function GetPageID()
{
	return g_strPageID;
}

function GetCurrentLessonOverviewTitle()
{
	var iLessonIndex = GetCurrentLessonIndex();
	var strLessonID = "TocLesson" + iLessonIndex + "Overview";
	var LessonObj = GetPageElementTraining(strLessonID);
	if (LessonObj != null)
	{
		var LessonAnchorObj = GetPageElementTraining(LessonObj.LessonAssetID + "-" + iLessonIndex);
		if (LessonAnchorObj != null)
		{
			return LessonAnchorObj.innerText;
		}
	}
}

function GetCurrentLessonIndex()
{
	if (g_strSupportsOntPageTemplate == "True")
	{
		return g_strCurrLessonID;
	}
	else
	{

		return GetLessonIndexFromTocLink(GetCurrentTocLink());
	}
	return "0";
}

function GetLessonIndexFromTocLink(linkObj)
{
	if (g_strSupportsOntPageTemplate == "True")
	{
		var strLinkID = linkObj.id;
		return parseInt(strLinkID.charAt(strLinkID.length - 1));

	}
	else
	{

		if (linkObj != null)
		{
			var parentObj = linkObj.parentElement;
			while (true)
			{
				if (parentObj == null)
				{
					return 0;
				}

				if (parentObj.LessonID != null && parentObj.LessonID != "")
				{
					return parseInt(parentObj.LessonID);
				}
				parentObj = parentObj.parentElement;
			}
		}
	}
	return 0;
}

function GetCurrentTocLink()
{
	var strTocLinkID = GetPageID();
	if (g_strSupportsOntPageTemplate == "True")
	{

		strTocLinkID += "-" + GetCurrentLessonIndex();
	}
	var lessonLinkObj = GetPageElementTraining(strTocLinkID);
	return lessonLinkObj;
}

function GetLessonCheckmark(iLessonIndex)
{
	return GetPageElementTraining("LessonCheck" + iLessonIndex);
}

function GetTocExpander(iLessonIndex)
{
	return GetPageElementTraining("TocExpander" + iLessonIndex);
}

function GetPracticeButton()
{
	return GetPageElementTraining("LaunchPracticeButton");
}

function LaunchPractice()
{
	var objPractButton = GetPracticeButton();
	if (objPractButton != null)
	{
		objPractButton.click();
	}
}

function IsPracticePage()
{
	return GetPracticeButton() == null ? false : true;
}

function SetPageFocus()
{

	var strLastFocusID = "";
	if (g_fInitializeCourse == true)
	{
		mDeleteCookie("FOCUS_CTRL");
	}
	else
	{
		strLastFocusID = GetCookie("FOCUS_CTRL");
	}

	var focusObj = GetPageElementTraining(strLastFocusID);
	if (focusObj == null)
	{

		if (strLastFocusID == "NextButtonTop" || strLastFocusID == "NextButtonTop_Text")
			strLastFocusID = "PrevButtonTop";

		else if (strLastFocusID == "PrevButtonTop")
			strLastFocusID = "NextButtonTop";

		else if (strLastFocusID == "NextButtonBottom" || strLastFocusID == "NextButtonBottom_Text")
			strLastFocusID = "PrevButtonBottom";

		else if (strLastFocusID == "PrevButtonBottom")
			strLastFocusID = "NextButtonBottom";

		focusObj = GetPageElementTraining(strLastFocusID);
		if (focusObj == null)
		{

			var arrFocusID = new Array(4);
			arrFocusID[0] = "QRC_Close_Top";
			arrFocusID[1] = "NextButtonTop";
			arrFocusID[2] = "PrevButtonTop";
			arrFocusID[3] = "";
			var index = 0;
			while (arrFocusID[index] != "")
			{
				focusObj = GetPageElementTraining(arrFocusID[index++]);
				if (focusObj != null)
				{
					break;
				}
			}
		}
	}
	else
	{

		var str = focusObj.onclick + "cast";
		if (str.indexOf("TocLessonUrlClick") != -1)
		{
			if (focusObj.id != GetPageID())
			{
				focusObj = GetPageElementTraining(GetPageID());
			}
		}
	}
	if (focusObj != null && typeof(focusObj.focus) != "undefined")
	{

	}
}

function GetPageElementTraining(strElementID)
{
	var obj;
	if (document.all)
	{
		return document.all[strElementID];
	}
	else if (document.getElementById)
	{
		return document.getElementById(strElementID);
	}
	else if (document.layers)
	{

		if (strElementID == "AwsCourseID")
		{
			obj = document.MainForm.AwsCourseID;
		}
		if (strElementID == "AwsPageID")
		{
			obj = document.MainForm.AwsPageID;
		}
		else if (strElementID == "LessonBits")
		{
			obj = document.MainForm.LessonBits;
		}
		else if (strElementID == "AwsReload")
		{
			obj = document.MainForm.AwsReload;
		}
		else if (strElementID == "ErrorMsg")
		{
			obj = document.MainForm.ErrorMsg;
		}
		else if (strElementID == "MuteControl")
		{
			obj = document.MainForm.MuteControl;
		}
		else if (strElementID == "TocExpander1")
		{
			obj = document.MainForm.TocExpander1;
		}
		else if (strElementID == "TocExpander2")
		{
			obj = document.MainForm.TocExpander2;
		}
		else if (strElementID == "MediaPlayer")
		{
			obj = document.MainForm.MediaPlayer;
		}

		return obj;
	}
	return null;
}

function GetTrainingFeedbackForm()
{
	var frmTraining = GetPageElementTraining("MainForm");
	if ('undefined' == typeof(frmTraining) || null == frmTraining)
		if (document.forms.length > 1)
			frmTraining = document.forms[1];

	return frmTraining;
}

function InitializeAudio()
{
	var objMediaPlayer = GetPageElementTraining("MediaPlayer");
	var wmp = document.getElementById("wmp");
	var strVolume = GetCourseCookie("VOLUME");
	var strMute = GetCourseCookie("MUTE");

	if (objMediaPlayer != null)
	{

		if (strVolume != null && strVolume.length > 0)
		{
			SetAudioVolume(strVolume);
		}
		if (g_fInitializeCourse == false && strMute == "1")
		{
			MuteAudio(true);
		}
		MediaPlay();
	}
	else if (wmp != null)
	{

		if (strVolume != null && strVolume.length > 0)
			wmp.settings.volume = strVolume;
		if ((strMute == "1") != wmp.settings.mute)
				wmpMuteToggle();
		wmpVolumeRender();
		wmpPlay();
	}
}

function RememberAudioState()
{
	if (GetPageElementTraining("MediaPlayer") != null)
	{

		SetCourseCookie("MUTE", IsMuted() == true ? "1" : "0");

		SetCourseCookie("VOLUME", GetAudioVolume());
	}
	else if ((wmp = document.getElementById('wmp')) != null)
	{

		SetCourseCookie("MUTE", wmp.settings.mute == true ? "1" : "0");
		SetCourseCookie("VOLUME", wmp.settings.volume);
	}
}

function GetAudioVolume()
{

	if (wmp7 == 1)
	{
		return document.MediaPlayer.Settings.volume;
	}
	else if (wmp6 == 1)
	{
		return document.MediaPlayer.volume;
	}
}

function SetAudioVolume(intVolume)
{

	if (wmp7 == 1)
	{
		document.MediaPlayer.Settings.volume = intVolume;
	}
	else if (wmp6 == 1)
	{
		document.MediaPlayer.volume = intVolume;
	}
}

function MediaPlay()
{
	if (IsMutePersisted() == false)
	{
		{
			if (wmp7 == 1)
			{
				document.MediaPlayer.Controls.Play();
			}
			else if (wmp6 == 1)
			{
				if (navigator.appName != "Netscape" && document.MediaPlayer.IsSoundCardEnabled() == true)
				{
					document.MediaPlayer.Play();
				}
			}
		}
	}
}

function IsMuted()
{

	if (wmp7 == 1)
	{
		return document.MediaPlayer.Settings.mute;
	}
	else if (wmp6 == 1)
	{
		return document.MediaPlayer.mute;
	}
}

function MuteAudio(fState)
{

	if (wmp7 == 1)
	{
		document.MediaPlayer.Settings.mute = fState;
	}
	else if (wmp6 == 1)
	{
		document.MediaPlayer.mute = fState;
	}

}

function IsMutePersisted()
{

	return GetCourseCookie("MUTE") == "1" ? true : false;
}

function IsAudioEnabled()
{
	if (navigator.appName == "Netscape")
	{
		var strAudioState = GetCourseCookie("AUDIO_STATE");
		if (strAudioState == null || strAudioState == "")
		{
			strAudioState = confirm(g_strAudioQuery) == true ? "1" : "0";	
		}
		SetCourseCookie("AUDIO_STATE", strAudioState);
		return  strAudioState == "1" ? true : false;
	}
	else
	{
		return true;
	}
}

function GetFlashPlayer()
{
	return navigator.appName == "Netscape" ? window.document.embeds.namedItem("FlashPlayer") : GetPageElementTraining("FlashPlayer");

}

function FlashPlay()
{
	var objFlash = GetFlashPlayer();
	if (objFlash)
	{
		objFlash.Rewind();
		objFlash.Play();
	}

	ResetDocumentTitle();
}

function FlashRewind()
{
	var objFlash = GetFlashPlayer();
 	if (objFlash) objFlash.Rewind();
}

function FlashRewindBlur()
{
	g_fFlashRewindFocus = true;
}

function FlashFocus(objFlash)
{

	var fLocalFlashRewindFocus = g_fFlashRewindFocus;
	g_fFlashRewindFocus = false;

	if (navigator.appName == "Netscape")
	{
		if (fLocalFlashRewindFocus == false)
		{
			var objFlashRewind = GetPageElementTraining("FlashRewindControl");
			objFlashRewind.focus();
		}
		else
		{
			var iBackLinkIndex = 0;
			var i = 0;
			while (typeof(document.links[i]) != "undefined")
			{
				var objLink = document.links[i];
				var strLinkHtml = objLink.innerHTML;
				if (strLinkHtml.indexOf("back.gif") != -1)
				{
					iBackLinkIndex++;
					if (iBackLinkIndex == 2)
					{
						objLink.focus();
						return;
					}
				}
				i++;
			}
		}
	}

	else
	{

		var objFlashPlay = GetPageElementTraining("FlashPlayControl");
		if (objFlashPlay)
		{
			objFlashPlay.focus();
			FlashPlay();
		}
	}
}

function FlashHover(flashControlObj)
{
	flashControlObj.style.cursor="hand";
}

function GetLessonBits()
{
	var strLessonBits = GetCourseCookie("LESSONBITS");
	if (strLessonBits != null && strLessonBits != "")
	{
		return parseInt(strLessonBits);
	}

	return 0;
}

function SetLessonBits(iLessonBits)
{
	SetCourseCookie("LESSONBITS", iLessonBits);
}

function ToggleLessonBitFlag(iLessonBitFlag)
{
	var iLessonBits = GetLessonBits();
	iLessonBits ^= iLessonBitFlag;
	iLessonBits |= BIT_SETTINGS_DIRTY;
	SetLessonBits(iLessonBits);
}

function InitializeLessonCheckmarks()
{
	var iLessonBits = GetLessonBits();
	var iLessonIndex = 1;
	var iBit = 1;
	while (iLessonIndex <= MAX_LESSONS)
	{
		var checkmarkObj = GetLessonCheckmark(iLessonIndex);
		if (checkmarkObj != null)
		{
			if ((iLessonBits & iBit) > 0)
			{
				ShowLessonCheckmark(checkmarkObj);
			}
		}
		else
		{

			if (iLessonIndex > 1)
				return;
		}

		iLessonIndex++;
		iBit <<= 1;
	}
}

function FIsCourseComplete()
{
	var iLessonBits = GetLessonBits();
	if ((iLessonBits & ALL_LESSONS_COMPLETE) == ALL_LESSONS_COMPLETE)
		return true;

	var iLessonIndex = 1;
	while (iLessonIndex <= MAX_LESSONS)
	{
		var checkmarkObj = GetLessonCheckmark(iLessonIndex);
		if (checkmarkObj != null)
		{
			if (IsLessonChecked(checkmarkObj) == false)
			{
				return false;
			}
		}
		else
		{

			if (iLessonIndex > 1)
				return true;
		}

		iLessonIndex++;
	}
	return true;
}

function J_LessonLinkHover(expanderObj)
{
	expanderObj.style.cursor="hand";
}

function TocLessonUrlClick(anchorObj)
{

	var iLessonIndex =GetLessonIndexFromTocLink(anchorObj);
	if (iLessonIndex > 0)
	{
		SetExpanderNode(iLessonIndex, CH_NODE_EXPANDER_OPEN);
	}

	SetCourseCookie("FOCUS_CTRL", anchorObj.id);
	PrepareRequest("PAGE_REQUEST");
}

function InitializeExpanderState(fInitializingCourse)
{
	var strExpanderState = "0000000000000000";
	if (fInitializingCourse == false)
	{
		var strCookieState = GetCourseCookie("EXPANDER_STATE");
		if (strCookieState != null && strCookieState != "")
			strExpanderState = strCookieState;
	}
	SetCourseCookie("EXPANDER_STATE", strExpanderState);
	return strExpanderState;
}

function GetStateOfAllExpanders()
{
	var strExpanderState = GetCourseCookie("EXPANDER_STATE");
	if (strExpanderState == null || strExpanderState == "")
		return InitializeExpanderState(false);

	return strExpanderState;
}

function SetExpanderNode(index, chState)
{
	var strExpanderState = GetStateOfAllExpanders();
	strExpanderState = strExpanderState.substring(0, index) + chState + strExpanderState.substring(index + 1);
	SetCourseCookie("EXPANDER_STATE", strExpanderState);
}

function GetExpanderIndex(expanderObj)
{
	var strExpanderID = expanderObj.id;
	return parseInt(strExpanderID.charAt(strExpanderID.length - 1));
}

function J_ExpanderClick(expanderObj)
{

	ExpandCollapseTocNode(GetExpanderIndex(expanderObj), false, true, CH_NODE_EXPANDER_OPEN);
}

function J_ExpanderKeyPress(expanderObj)
{

	ExpandCollapseTocNode(GetExpanderIndex(expanderObj), false, true, CH_NODE_EXPANDER_OPEN);
	return false;	
}

function ExpandCollapseTocNode(iLessonID, fExpandOnly, rememberExpansion)
{
	ExpandCollapseTocNode(iLessonID, fExpandOnly, rememberExpansion, CH_NODE_OPEN);
}

function ExpandCollapseTocNode(iLessonID, fExpandOnly, rememberExpansion, trueValue)
{
	if (iLessonID > 0)
	{
		if (g_strSupportsOntPageTemplate != "True")
		{
			ExpandCollapseNonOntTocNode(iLessonID, fExpandOnly, rememberExpansion, trueValue);
			return;
		}

		var iPage = 1;
		var rowObj;
		var fExpanded = false;

		while ((rowObj = GetPageElementTraining("TocLesson" + iLessonID + "Page" + iPage)) != null)
		{
			if (rowObj.className == "collapsed")
			{
				rowObj.className = (rowObj.id == g_strCurrRowID) ? "cdTrnSelectedItem" : "cdONLBkColor";
				fExpanded = true;
			}
			else if (fExpandOnly == false)
			{
				rowObj.className = "collapsed";
				fExpanded = false;
			}
			iPage++;
		}

		rowObj = GetPageElementTraining("LessonSpacer" + iLessonID);
		if (rowObj != null)
		{
			if (rowObj.className == "collapsed")
			{
				rowObj.className = "cdONLBkColor";
				fExpanded = true;
			}
			else if (fExpandOnly == false)
			{
				rowObj.className = "collapsed";
				fExpanded = false;
			}		
		}

		var expanderObj = GetTocExpander(iLessonID);
		if (fExpanded == true)
		{
			var regexp = /plus.gif/;
			var src = expanderObj.src;
			expanderObj.src = src.replace(regexp,"minus.gif");
		}
		else
		{
			var regexp = /minus.gif/;
			var src = expanderObj.src;
			expanderObj.src = src.replace(regexp,"plus.gif");
		}

		if (rememberExpansion == true)
		{
			var chExpandValue = fExpanded == true ? trueValue : CH_NODE_CLOSED;
			SetExpanderNode(iLessonID, chExpandValue);
		}

	}
}

function ExpandCollapseNonOntTocNode(iLessonID, expandOnly, rememberExpansion, trueValue)
{
	var expanderObj = GetTocExpander(iLessonID);
	var strPanelID = expanderObj.MySection;
	var panelObj = GetPageElementTraining(strPanelID);
	if (strPanelID != null)
	{
		if (expanderObj.expanded == "false")
		{
			panelObj.className = "expanded";
			expanderObj.expanded = "true";
			var regexp = /collapsed.gif/;
			var src = expanderObj.src;
			expanderObj.src = src.replace(regexp,"expanded.gif");
			if (rememberExpansion == true)
			{
				SetExpanderNode(GetExpanderIndex(expanderObj), trueValue);
			}
		}
		else if (expanderObj.expanded == "true" && expandOnly == false)
		{
			panelObj.className = "collapsed";
			expanderObj.expanded = "false";
			var regexp = /expanded.gif/;
			var src = expanderObj.src;
			expanderObj.src = src.replace(regexp,"collapsed.gif");
			if (rememberExpansion == true)
				SetExpanderNode(GetExpanderIndex(expanderObj), CH_NODE_CLOSED);
		}
	}
}

function J_NextPrevClick(strClickObj, strTarget)
{

	SetCourseCookie("FOCUS_CTRL", strClickObj.id);
	PrepareRequest("PAGE_REQUEST");
}

function GetReloadValue()
{
	if (g_strSupportsOntPageTemplate == "True")
	{
		return g_strReload;
	}
	else
	{
		var ReloadObj = GetPageElementTraining("AwsReload");
		return ReloadObj == null ? "" : ReloadObj.value;
	}
}

function InitializeRequests()
{

	SetCourseCookie("REQUEST_TYPE", "PAGE_REQUEST");
	ClearDirtyFlag();

	SetCourseCookie("RELOAD", GetReloadValue());
	SetCourseCookie("COURSE_ID", GetCourseID());
}

function PrepareRequest(strRequestType)
{
	RememberAudioState();
	SetCourseCookie("REQUEST_TYPE", strRequestType);
}

function SendRequest(strRequestType, strTargetAsset)
{
	PrepareRequest(strRequestType);
	window.location.href = "training.aspx?AssetID=" + strTargetAsset + "&CTT=98";
}

function SetDirtyFlag()
{
	var iLessonBits = GetLessonBits();
	iLessonBits |= BIT_SETTINGS_DIRTY;
	SetLessonBits(iLessonBits);
}

function ClearDirtyFlag()
{
	var iLessonBits = GetLessonBits();
	iLessonBits &= ~BIT_SETTINGS_DIRTY;
	SetLessonBits(iLessonBits);
}

function PrintQuickRef(qrFilename)
{

	var qrUrl = qrFilename.replace("xml","htm");
	window.open(qrUrl,'app',arguments);
}

function OpenCertCompletion(qrFilename, arguments)
{

}

function ReloadCourse(ReloadButton)
{

	var strTarget = ReloadButton.OverviewID;
	SendRequest("RELOAD_COURSE", strTarget);
}

function IsLessonChecked(checkmarkObj)
{
	return (checkmarkObj.style.visibility == "visible") ? true : false;
}

function ShowLessonCheckmark(checkmarkObj)
{
	checkmarkObj.style.visibility = "visible";
}

function PopulateAssessmentBoxEx(strAnswerBox, strAnswerText)
{
	var answerBox = GetPageElementTraining(strAnswerBox);
	answerBox.value = strAnswerText;

}

function GetAssessmentID()
{
	if (g_strSupportsOntPageTemplate == "True")
	{
		return g_strAssessTestID == "" ? 0 : parseInt(g_strAssessTestID);
	}
	else
	{

		var assessIDObj = GetPageElementTraining("AssessTestID");
		if (assessIDObj != null && assessIDObj.value != "")
			return parseInt(assessIDObj.value);
		else
			return 0;
	}
}

function J_AssessRadioClickEx(radioObj, strAnswerElement)
{
	var strAnswerBox = "textfield" + strAnswerElement.charAt(0);

	if (strAnswerElement.length > 1)
		{
		var chr = strAnswerElement.charAt(1);
		if ('0' <= chr && chr <= '9')
			strAnswerBox += chr;
		}

	var answerElement = GetPageElementTraining(strAnswerElement);
	var strAnswerText = answerElement.value;

	PopulateAssessmentBoxEx(strAnswerBox, strAnswerText);
	SetDirtyFlag(); 

	var checkmarkObj = GetLessonCheckmark(GetCurrentLessonIndex());
	if (IsLessonChecked(checkmarkObj) == false)
	{
		ShowLessonCheckmark(checkmarkObj);
		var iLessonBits = GetLessonBits();
		if (FIsCourseComplete() == true)
		{
			iLessonBits |= ALL_LESSONS_COMPLETE; 
		}
		else
		{
			var iCurrentLessonIndex = GetCurrentLessonIndex();
			iLessonBits |= 1 << (iCurrentLessonIndex - 1);
		}

		SetLessonBits(iLessonBits);

	}
}

function J_AssessRadioClick(radioObj)
{
	var answerBox = GetPageElementTraining(radioObj.answerBox);
	answerBox.value = radioObj.answerText;
}

function PopulateFeedbackResponses()
{
	var frmTraining = GetTrainingFeedbackForm();
	SetRadioGroupValue(frmTraining.CourseRating, GetCourseCookie("RATING_OVERALL"));
	SetRadioGroupValue(frmTraining.CourseMaterial, GetCourseCookie("RATING_MATERIAL"));
	SetRadioGroupValue(frmTraining.CourseExamples, GetCourseCookie("RATING_EXAMPLES"));
	SetRadioGroupValue(frmTraining.CourseConcepts, GetCourseCookie("RATING_CONCEPTS"));
	SetRadioGroupValue(frmTraining.CourseFan, GetCourseCookie("RATING_TRAININGFAN"));
	var commentBox = GetPageElementTraining("CourseComments");
	if (commentBox != null)
	{
		commentBox.value = GetCookie("RATING_COMMENTS");
		DisplayCommentCharsRemaining();
	}
}

function RememberFeedbackState()
{
	var commentBox = GetPageElementTraining("CourseComments");
	var fValid = false;

	if (commentBox != null)
	{
		var strFeedbackComments = escape(commentBox.value);
		if (strFeedbackComments == null)
		{
			strFeedbackComments = "";
		}

		if (strFeedbackComments.length > MAX_COMMENT_COOKIE_SIZE)
		{
			mDeleteCookie("RATING_COMMENTS");
		}
		else
		{
			mSetCookie("RATING_COMMENTS", strFeedbackComments);
		}

		if (strFeedbackComments != "")
		{
			fValid = true;
		}
		var feedbackGroups = new Array(5);

		var frmTraining = GetTrainingFeedbackForm();	
		feedbackGroups[0] = frmTraining.CourseRating;
		feedbackGroups[1] = frmTraining.CourseMaterial;
		feedbackGroups[2] = frmTraining.CourseExamples;
		feedbackGroups[3] = frmTraining.CourseConcepts;
		feedbackGroups[4] = frmTraining.CourseFan;

		var feedbackValues = new Array(5);
		feedbackValues[0] = "RATING_OVERALL";
		feedbackValues[1] = "RATING_MATERIAL";
		feedbackValues[2] = "RATING_EXAMPLES";
		feedbackValues[3] = "RATING_CONCEPTS";
		feedbackValues[4] = "RATING_TRAININGFAN";
		for (var i = 0; i < feedbackGroups.length; i++)
		{
			if (feedbackGroups[i] != null)
			{
				var strValue = GetRadioGroupValue(feedbackGroups[i]);
				if (strValue != "")
				{
					SetCourseCookie(feedbackValues[i], strValue);
					fValid = true;
				}
			}
		}
	}

	return fValid;
}

function ForgetFeedback(SubmitButton)
{
	var commentBox = GetPageElementTraining("CourseComments");

	if (commentBox != null)
	{
		commentBox.value = "";

		var frmTraining = GetTrainingFeedbackForm();	
		SetRadioGroupValue(frmTraining.CourseRating, "");
		SetRadioGroupValue(frmTraining.CourseMaterial, "");
		SetRadioGroupValue(frmTraining.CourseExamples, "");
		SetRadioGroupValue(frmTraining.CourseConcepts, "");
		SetRadioGroupValue(frmTraining.CourseFan, "");
		mDeleteCookie("RATING_COMMENTS");
		DeleteCourseCookie("RATING_OVERALL");
		DeleteCourseCookie("RATING_MATERIAL");
		DeleteCourseCookie("RATING_EXAMPLES");
		DeleteCourseCookie("RATING_CONCEPTS");
		DeleteCourseCookie("RATING_TRAININGFAN");
	}
}

function GetFeedbackErrorString(iTotal, iLimit)
{
	var strPasteError = g_strFeedbackOverLimit;
	strPasteError = strPasteError.replace("{0}", iTotal);
	strPasteError = strPasteError.replace("{1}", iLimit);
	return strPasteError;
}

function DisplayCommentCharsRemaining()
{
	var objCommentBox = GetPageElementTraining("CourseComments");
	if (objCommentBox)
		{
		var strComments = objCommentBox.value;
		var iCharsRemaining = MAX_COMMENT_LENGTH - strComments.length;
		var objCommentCounter = GetPageElementTraining("CommentCounter");
		if (objCommentCounter)
			{
			var fFoundButton = false;
			var btnFeedback = document.getElementById('SubmitButton');
			if ('undefined' != typeof(btnFeedback) && null != btnFeedback)
				fFoundButton = true;

			var strCharsRemaining = StrReplace(strGoDisplayCountOK, "{0}", "<B>" + iCharsRemaining + "</B>");
			if (iCharsRemaining < 0)
				{
				var strPasteError = GetFeedbackErrorString(strComments.length, MAX_COMMENT_LENGTH);
				objCommentCounter.innerHTML = '<SPAN CLASS="FeedbackWizCounterStar">' + g_strFeedbackOverLimitStar +
					'</SPAN><SPAN CLASS="FeedbackWizCounterOverText">' + strPasteError + '</SPAN>'

				if (fFoundButton)
					btnFeedback.disabled = true;
				}
			else
				{
				objCommentCounter.innerHTML = strCharsRemaining;

				if (fFoundButton)
					btnFeedback.disabled = false;
				}
			}
		}
}

function CommentChange(objCommentBox)
{
	DisplayCommentCharsRemaining();
	return true;
}

function CommentKeyPress(objCommentBox, evt)
{
	DisplayCommentCharsRemaining();
	return true;
}

function CommentKeyUp(objCommentBox)
{
	DisplayCommentCharsRemaining();
	return true;
}

function CommentPaste(objCommentBox)
{
	DisplayCommentCharsRemaining();
	return true;
}

function CommentFocus(objCommentBox)
{

}

function CommentBlur(objCommentBox)
{

}

function CommentKeyDown(objCommentBox)
{

	return true;
}

function ValidateAndSubmitFeedback(SubmitButton)
{
	DisplayCommentCharsRemaining();

	if (RememberFeedbackState() == false)
	{
		alert(g_strValidateFeedback);
	}
	else
	{
		var commentBox = GetPageElementTraining("CourseComments");
		var strFeedbackComments = commentBox == null ? "" : commentBox.value;
		if (strFeedbackComments == null)
		{
			strFeedbackComments = "";
		}

		if (strFeedbackComments.length > MAX_COMMENT_LENGTH)
		{
			alert(GetFeedbackErrorString(strFeedbackComments.length, MAX_COMMENT_LENGTH));
		}
		else
		{

			strFeedbackComments = escape(strFeedbackComments);
			var fallbackCommentField = GetFallbackCommentsField();
			if (strFeedbackComments.length <= MAX_COMMENT_COOKIE_SIZE)
			{

				fallbackCommentField.value = "";
				SendRequest("SUBMIT_FEEDBACK", GetPageID());
			}
			else
			{

				fallbackCommentField.value = strFeedbackComments;
				PrepareRequest("SUBMIT_FEEDBACK");
				var mainForm = GetPageElementTraining("MainForm");
				mainForm.submit(); 

			}
		}
	}
}

function ClearFeedback(SubmitButton)
{
	ForgetFeedbackState();
}

function GetFallbackCommentsField()
{

	return GetPageElementTraining(g_strSupportsOntPageTemplate == "True" ? "FallbackComments" : "AssessTestID");
}

function GetRadioGroupValue(radioGroup)
{
	if (radioGroup != null)
	{
		for (var i = 0; i < radioGroup.length; i++)
		{
			if (radioGroup[i].checked == true)
			{
				return radioGroup[i].value;
			}
		}
	}
	return "";
}

function SetRadioGroupValue(radioGroup, strValue)
{
	if (radioGroup != null)
	{
		for (var i = 0; i < radioGroup.length; i++)
		{
			if (radioGroup[i].value == strValue)
			{
				radioGroup[i].checked = true;
				return;
			}
			else if (strValue == "")
			{
				radioGroup[i].checked = false;
			}
		}
	}
}

function ResetFeedback(ResetButton)
{
	SendRequest("RESET_FEEDBACK", GetPageID());
}

function ClosePage(closeButton)
{
	window.close();
}

function LaunchPracticeSessionEx(practLink, strApp, strTemplateAssetID, strInstructionAssetID)
{

	StartPracticeSession(strApp, 11, strTemplateAssetID, strInstructionAssetID);
}

function LaunchPracticeSessionVer(practLink, strApp, nVer, strTemplateAssetID, strInstructionAssetID)
{
	StartPracticeSession(strApp, nVer, strTemplateAssetID, strInstructionAssetID);
}

function LaunchPracticeSession(practLink)
{
	var strTemplateAssetID = practLink.TemplateAssetID;
	var strInstructionAssetID = practLink.InstructionAssetID;
	var strApp = practLink.App;
	var nVer = 11; 

	if ('undefined' != typeof(practLink.Ver) && null != practLink.Ver)
	{
		var nVerFromContent = parseInt(practLink.Ver);
		if (!isNaN(nVerFromContent))
			nVer = nVerFromContent;
	}

	StartPracticeSession(strApp, nVer, strTemplateAssetID, strInstructionAssetID);
}

function IsTemplateAsset(strAssetID)
{
	if (strAssetID.charAt(0) == "R" && strAssetID.charAt(1) == "T")
		return true;
	else
		return false;
}

function StartPracticeSession(strApp, nVer, strTemplateAssetID, strInstructionAssetID)
{
	if (g_practLaunchInProgress == false)
	{
		if (strTemplateAssetID == null) strTemplateAssetID = "";
		if (strInstructionAssetID == null) strInstructionAssetID = "";
		if (strApp == null) strApp = "";
		if (strApp == "" || (strTemplateAssetID == "" && strInstructionAssetID == ""))
		{
			alert(g_strDirectDownloadGenericServerError);
			return;
		}

		var fLaunched;

		if (IsTemplateAsset(strTemplateAssetID) == true && IsTemplateAsset(strInstructionAssetID) == true)
		{
			fLaunched = StartEditTraining(strTemplateAssetID, "", strApp, nVer);
			if (fLaunched == true)
			{

				setTimeout("StartEditTraining(" + "\"" + strInstructionAssetID + "\", \"\", \"" + strApp + "\", " + nVer +  ")", 1000);
			}
		}
		else
		{
			fLaunched = StartEditTraining(strTemplateAssetID, strInstructionAssetID, strApp, nVer);
		}

		if (fLaunched == true)
		{
			g_practLaunchInProgress = true;
			setTimeout("EndPracticeLockout()", 1000);
		}
	}
}

function EndPracticeLockout()
{
	g_practLaunchInProgress = false;
}

function StartEditTraining(strTemplateAssetID, strInstructionAssetID, strApp, nVer)
{
	if (typeof(FRedirectIfOfficeRestriction) != 'undefined')
		if (FRedirectIfOfficeRestriction(2))
			return true;

	var iLessonBits = GetLessonBits();
	if ((iLessonBits & BIT_TOU_ACCEPTED) == 0)
	{
		SendRequest("CHECK_PRACTICE_EULA", GetPageID());
		return true;
	}

	if(!FInstallActiveX())
	{
		if (fInstallingActiveX)
		{
			return true;
		}

		var fIsIE = true;
		if (typeof(navigator) != 'undefined' &&
			null != navigator &&
			typeof(navigator.appName) != 'undefined' &&
			null != navigator.appName &&
			navigator.appName.indexOf('Internet Explorer') < 0)
		{
			fIsIE = false;
		}

		var iError = TCD_E_ACTIVEX_INSTALL_ERROR;
		if (!FIsSupportedWindows())
			iError = TCD_E_UNSUPPORTED_OS;
		else if (!fIsIE)
			iError = TCD_E_NON_IE_BROWSER;

		GotoDirectDownloadURLTraining(strTemplateAssetID, "", strApp, 0, iError);
		return true;
	}

	if (strApp == "excel")
		strApp = "XL";

	if (strApp == "outlook")
		strApp = "OL";

	if (strApp == "IP")
		{
		strApp == "XD";
		}

	var iResult = 0;
	var strDisplayTitle = GetCurrentLessonOverviewTitle();

	if (strTemplateAssetID.length == 4)
		strTemplateAssetID = "";

	OpenProgressWindow();

	if (typeof(DCTRL.StartEditEx) != 'undefined')
		{
		iResult = DCTRL.StartEditEx(
			strDisplayTitle,
			strTemplateAssetID.toUpperCase(),
			strInstructionAssetID,
			strApp,
			g_strMetrics,
			nVer,
			false);
		}
	else
		{
		iResult = DCTRL.StartEdit(
			strDisplayTitle,
			strTemplateAssetID.toUpperCase(),
			strInstructionAssetID,
			strApp,
			g_strMetrics,
			nVer);
		}

	CloseProgressWindow();

	if (TCD_E_ABORT == iResult)
		return false;

	if (iResult != 0)
	{

		if (iResult == TCD_E_SIGNATURE_REQUIRED)
		{
			alert(g_strDirectDownloadGenericServerError);
			return false;
		}
		else
		{
			GotoDirectDownloadURLTraining(strTemplateAssetID, "", strApp, nVer, iResult);
		}
	}
	return true;
}

function GotoDirectDownloadURLTraining(strAsset, strQuery, strApp, iVersion, iResult)
{
	if (null == strAsset)
		strAsset = "";

	if (null == strQuery)
		strQuery = "";

	if (null == strApp)
		strApp = "";

	var strAxVer = GetCookie("AWS_ActivexVersion_Perm");
	if ("undefined" != strAxVer && null != strAxVer && strAxVer.length > 0)
		strAxVer = "&axver=" + StrEncodeUrlComponent(strAxVer);
	else
		strAxVer = "";

	window.location.href  = g_strDirectDownloadUrl +
		"?AssetID=" + strAsset +
		"&QueryID=" + strQuery +
		"&Application=" + strApp +
		"&Result=" + iResult +
		"&Version=" + iVersion +
		"&Context=Training" +
		"&QueryString=" + escape(location.search) +
		strAxVer;
    	return;
}

function StrAddLineBreaks(strPara, iLineLength)
{
	if (strPara == null || strPara == "")
		return "";

	var strLines = "";
	var iLineStart = 0;
	var iLineEnd = 0;
	var iParaLen = strPara.length;
	while (true)
	{
		if (iLineStart > 0)
			strLines = strLines + "\n";

		iLineEnd = iLineStart + iLineLength;
		if (iLineEnd > iParaLen)
			iLineEnd = iParaLen;

		while (iLineEnd < iParaLen && strPara.charAt(iLineEnd) != " ")
		{
			iLineEnd++;
		}
		strLines = strLines + strPara.substring(iLineStart, iLineEnd);
		if (iLineEnd >= (iParaLen - 1))
			return strLines;

		iLineStart = iLineEnd + 1;
	}

}

function FormatOldPages()
{

	var officeLogoObj = GetPageElementTraining("OfficeHome");
	if (officeLogoObj != null)
	{
		officeLogoObj.href = g_strOfficeHomeUrl;
	}

	var TrainingHomeObj = GetPageElementTraining("TrainingHome");
	if (TrainingHomeObj != null)
	{
		TrainingHomeObj.href = g_strTrainingHomeUrl;
	}

	var objHiddenFooter = GetPageElementTraining("HiddenFooter");
	if (objHiddenFooter != null)
	{
		var objStandardFooter = GetPageElementTraining("StandardFooter");
		if (objStandardFooter != null)
		{
			var strFooter = objHiddenFooter.innerHTML;
			objStandardFooter.innerHTML = strFooter;
		}
	}
}

function UpdateHLIDLinks()
{

	var FeedbackTrainingHomeObj = GetPageElementTraining("FeedbackTrainingHome");
	if (FeedbackTrainingHomeObj != null)
	{
		FeedbackTrainingHomeObj.href = g_strTrainingHomeUrl;
	}
}

function TrainingCreateWMPObject()
{

	try
		{
		WMP7Obj = new ActiveXObject("WMPlayer.OCX.7");
		}
	catch(e)
		{

		}

	try
		{
		if (typeof(WMP7Obj) == "object") 
			{
			wmp7 = 1;
			document.write('<OBJECT ID="MediaPlayer" WIDTH="225" HEIGHT="40" CLASSID="CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6">');
			document.write('<PARAM name="url" VALUE="' + document.MainForm.AudioPath.value + '">');
			document.write('<PARAM NAME="enablecontextmenu" VALUE="false">');
			document.write('<PARAM NAME="uimode" VALUE="mini">');
			document.write('<PARAM NAME="autostart" VALUE="false">');
			document.write('</OBJECT>');
			}
		else if (IsAudioEnabled() == true) 
			{
			wmp6 = 1;
			document.write('<OBJECT ID="MediaPlayer" WIDTH="225" HEIGHT="40" CLASSID="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95">');
			document.write('<PARAM name="filename" VALUE="' + document.MainForm.AudioPath.value + '">');
			document.write('<PARAM NAME="animationatstart" VALUE="true">');
			document.write('<PARAM NAME="autorewind" VALUE="true">');
			document.write('<PARAM NAME="autostart" VALUE="false">');
			document.write('<PARAM NAME="showaudiocontrols" VALUE="true">');
			document.write('<PARAM NAME="showpositioncontrols" VALUE="false">');
			document.write('<PARAM NAME="showstatusbar" VALUE="false">');
			document.write('<EMBED TYPE="application/x-mplayer2"');
			document.write('	PLUGINSPAGE = "http://www.microsoft.com/Windows/MediaPlayer/"');
			document.write('	SRC="' + document.MainForm.AudioPath.value + '"');
			document.write('	NAME="MediaPlayer"');
			document.write('	WIDTH="225"');
			document.write('	HEIGHT="40"');
			document.write('	ANIMATIONATSTART="true"');
			document.write('	AUTOREWIND="true"');
			document.write('	AUTOSTART="true"');
			document.write('	SHOWAUDIOCONTROLS="true"');
			document.write('	SHOWPOSITIONCONTROLS="false"');
			document.write('	SHOWSTATUSBAR="true">');
			document.write('</EMBED>');
			document.write('</OBJECT>');
			}
		}
	catch(e)
		{
		alert(e);
		}
}

function TrainingCheckPrem()
{
	if (typeof(ofcstatus) == 'undefined')
		return;

	if (ofcstatus)
	{	
		var divs = document.getElementsByTagName("div");

		for (i = 0; i < divs.length; i++)
		{
			if (divs[i].id == "divPremium")
			{
				divs[i].style.display = "block";
			}	
			else if (divs[i].id == "divNonPremium")
			{
				divs[i].style.display = "none";
			}
		}
	}		
}
