//////////////////////////////////////////////////////////////////////////////////////////////////
// utilities.js
// Created by Kevin Paxton
// For Generic Templates and project based upon
// Last updates: 25th January 2006
/////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////
// function get(sObjectId)
// Shorthand version of the document.getElementById() method
// NOTE : Updated to return elements from IFRAME documents.
// Returns: The object matching the id name, or null if none
/////////////////////////////////////////////////////////////////////////////////////////////////
function get(sObjectId) {
	// Search document
	if (eval(document.getElementById(sObjectId))) {
		return eval(document.getElementById(sObjectId));
	}
	
	// Search Parent
	if (eval(parent.document.getElementById(sObjectId))) {
		return eval(parent.document.getElementById(sObjectId));
	}
	
	// Search frames
	for (var nFrame = 0; nFrame < document.frames.length; nFrame++) {
		var oFrame = document.frames[nFrame];
		if (eval(oFrame.document.getElementById(sObjectId)))
			return eval(oFrame.document.getElementById(sObjectId));
	}
	
	// Report error if not found
	if (BYG.debugMode) {
		alert("Cannot 'get' object id '" + sObjectId + "'!");
	}
	return null;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function insertText(sPlaceholderID, sText)
// Used to insert text into the specified placeholder 
// Returns: None
/////////////////////////////////////////////////////////////////////////////////////////////////
function insertText(sPlaceholderID, sText) {
	get(sPlaceholderID).innerHTML = replaceCustomTags(sText);
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function insertGraphic(sPlaceholderID, sFileName, nWidth, nHeight)
// Used to insert an <img /> or <embed /> object into the specified placeholder
// Returns: None
/////////////////////////////////////////////////////////////////////////////////////////////////
function insertGraphic(sPlaceholderID, sFileName, nWidth, nHeight, sGraphicID) {

	if (null == sGraphicID)
		sGraphicID = "oImage";
	
	if (null == nWidth || null == nHeight) {
		nWidth = 100;
		nHeight = 100;
		alert("Developer Note: The graphic did not have a width and height specified. Please use the function:\r\ninsertGraphic(<PlaceholderID>, <FileName>, <Width>, <Height>)");
	}
	
	if (sFileName.length == 0) {
		return;
	}

	var sGraphicHtml;
	var bIsFlash = (sFileName.indexOf(".swf") == (sFileName.length - 4));
//alert(bIsFlash);
	if (bIsFlash) {
		
		// NOTE : No longer using "wmode" attribute as doesn't work on HBOS platform.
		sGraphicHtml 
			= "<embed "
			+ " src='" + sFileName + "'"
			+ " width='" + nWidth + "'"
			+ " height='" + nHeight + "'"
			+ " quality='high'"
			+ " wmode='transparent'"
			+ " pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'"
			+ " type='application/x-shockwave-flash'"
			+ ">"
			+ "</embed>";
			
	} else {
		
		sGraphicHtml
			= "<img"
			+ " src='../../images/page/" + sFileName + "'"
			+ " alt=''"
			+ " title=''"
			+ " width='" + nWidth + "'"
			+ " height='" + nHeight + "'"
			+ " />";
	}
	get(sPlaceholderID).style.display = "block";
	get(sPlaceholderID).innerHTML = sGraphicHtml;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function insertFlashTemplate(sPlaceholderID, sID, sFileName, nWidth, nHeight)
// Used to insert an <embed /> object into the specified placeholder for a flash template
// Returns: None
/////////////////////////////////////////////////////////////////////////////////////////////////
function insertFlashTemplate(sPlaceholderID, sID, sFileName, nWidth, nHeight) {
	
	if (null == nWidth || null == nHeight) {
		nWidth = 100;
		nHeight = 100;
		alert("Developer Note: The flash template did not have a width and height specified. Please use the function:\r\ninsertGraphic(<PlaceholderID>, <FileName>, <Width>, <Height>)");
	}

	// NOTE : No longer using "wmode" attribute as doesn't work on HBOS platform.
	var sFlashTemplateHtml
			= "<embed "
			+ " id='" + sID + "'"
			+ " name='" + sID + "'"
			+ " src='../../flash/" + sFileName + "'"
			+ " width='" + nWidth + "'"
			+ " height='" + nHeight + "'"
			+ " quality='high'"
			+ " wmode='transparent'"
			+ " pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'"
			+ " type='application/x-shockwave-flash'"
			+ ">"
			+ "</embed>";

	get(sPlaceholderID).innerHTML = sFlashTemplateHtml;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function replaceCustomTags(sText)
// Used to replace the BYG custom tags with valid HTML tags
// Returns: String
/////////////////////////////////////////////////////////////////////////////////////////////////
function replaceCustomTags(sText) {
	
	var oRegExp = new RegExp("\\[\\s*link\\s+href\\s*=\\s*[\"']([^\\[\\]\"']*)[\"']\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<a href='#' onclick='onClickLink(\"$1\")'>");
	
	var oRegExp = new RegExp("\\[/\\s*link\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "</a>");
	
	var oRegExp = new RegExp("\\[\\s*doc\\s+file\\s*=\\s*[\"']([^\\[\\]\"']*)[\"']\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<a href='#' onclick='onClickDocument(\"$1\")'>");
	
	var oRegExp = new RegExp("\\[/\\s*doc\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "</a>");
		
	var oRegExp = new RegExp("\\[\\s*leader\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<div class=\"leaderText\">");
	
	var oRegExp = new RegExp("\\[/\\s*leader\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "</div>");
	
	var oRegExp = new RegExp("\\[\\s*instruction\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<div class=\"instruction\">");
	
	var oRegExp = new RegExp("\\[/\\s*instruction\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "</div>");
	
   var oRegExp = new RegExp("\\[\\s*panel\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<div class=\"panel\">");
	
	var oRegExp = new RegExp("\\[/\\s*panel\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "</div>");
	
	var oRegExp = new RegExp("\\[\\s*panelquotes\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<table style='margin-top:10px; margin-bottom:10px' width=353 border=0 cellpadding=0 cellspacing=0><tr><td valign='top'><img src='../../images/common/quotes-left.jpg' /></td><td><div class=\"panelquotes\">");
	
	var oRegExp = new RegExp("\\[/\\s*panelquotes\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "</div></td><td valign='bottom'><img src='../../images/common/quotes-right.jpg' /></td></tr></table>");
	
	var oRegExp = new RegExp("\\[\\s*popuplink\\s+text\\s*=\\s*[\"']([^\\[\\]\"']*)[\"']\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<a href='#' onclick='onClickPopupLink(\"$1\", false)'>");

	var oRegExp = new RegExp("\\[\\s*linkpopup\\s+label\\s*=\\s*[\"']([^\\[\\]\"']*)[\"']\\s+graphic\\s*=\\s*[\"']([^\\[\\]\"']*)[\"']\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<a href='javascript:void(0)' onClick='onClickPopUpLink(this)'><span id='oLinkPopUpLabel'>$1</span><span id='oLinkPopUpGraphic' style='display: none;'>$2</span><span id='oLinkPopUpText' style='display: none;'>");
	
	var oRegExp = new RegExp("\\[/\\s*linkpopup\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "</span></a>");
	
	var oRegExp = new RegExp("\\[\\s*popuplink\\s+num\\s*=\\s*[\"']([^\\[\\]\"']*)[\"']\\s+print\\s*=\\s*[\"']([^\\[\\]\"']*)[\"']\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<a href='#' onclick='onClickPopupLink(\"$1\", $2)'>");	
	
	var oRegExp = new RegExp("\\[/\\s*popuplink\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "</a>");
	
	var oRegExp = new RegExp("\\[\\s*jargon\\s*\\]([^\\[\\]\"']*)\\[/\\s*jargon\\s*\\]", "gi");
	sText = sText.replace(oRegExp, "<a href='#' onclick='onClickJargonLink(\"$1\")' class='jargonLink'>$1</a>");
	
	return sText;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function onClickPopUpLink(oLink, sGraphic, sAudio)
// Used to display the pop up text, graphic and audio for [linkpopup] tags
// Returns: None
/////////////////////////////////////////////////////////////////////////////////////////////////
function onClickPopUpLink(oLink) {
	
	var sPopUpLabel = oLink.all.oLinkPopUpLabel.innerHTML;	
	var sGraphic = oLink.all.oLinkPopUpGraphic.innerHTML;	
	var sPopUpText = oLink.all.oLinkPopUpText.innerHTML;	
	
	
	showPopUp(sPopUpLabel, sPopUpText, sGraphic, "");
}

/*
/////////////////////////////////////////////////////////////////////////////////////////////////
// function onClickPopUpLink(oLink, sGraphic)
// Used to display the pop up text and graphic for [linkpopup] tags
// Returns: None
/////////////////////////////////////////////////////////////////////////////////////////////////
function onClickPopupLink(nNumber, bPrintBtn) {
	if (oPage.variableExists("PopupLinkText_" + nNumber)) {			
		var sPopUpLinkText = oPage.getVarValue("PopupLinkText_" + nNumber);
		if (sPopUpLinkText.length > 0) {
			showPopUp("", sPopUpLinkText, "", "", null, bPrintBtn);
		}
	}
}
*/

/////////////////////////////////////////////////////////////////////////////////////////////////
// function isIE()
// Used to determine the browser the user is using
// Returns: True if the client browser is Internet Explorer
/////////////////////////////////////////////////////////////////////////////////////////////////
function isIE() {
	var sAppName = navigator.appName;
	return (sAppName.toUpperCase().indexOf("INTERNET EXPLORER") != -1);
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function getHTMLString(sText)
// Replaces non-html fomatting with HTML tags, eg \n becomes <br>
// Returns: The HTML formatted string
/////////////////////////////////////////////////////////////////////////////////////////////////
function getHTMLString(sText) {

	var sReturnString = sText;

	var sRegExp = "\\n";
	var oReplaceExpression = new RegExp(sRegExp, "gi");
	sReturnString = sReturnString.replace(oReplaceExpression, "<br>");

	return sReturnString;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function onClickLink(sLinkUrl)
// Used with the [link][/link] custom tags to handle link clicks
/////////////////////////////////////////////////////////////////////////////////////////////////
function onClickLink(sLinkUrl) {
	alert ("in homePageFlashUtilities.js");
	window.open(sLinkUrl, "_blank", "fullscreen=0,toolbar=1,location=1,status=1,menubar=1,resizable=1,width=750,height=550");
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function onClickDocument(sFileName)
// Used with the [doc][/doc] custom tags to handle link clicks
/////////////////////////////////////////////////////////////////////////////////////////////////
function onClickDocument(sFileName) {
	window.open("../../documents/" + sFileName,  "_blank", "fullscreen=0,toolbar=1,location=1,status=1,menubar=1,width=750,height=550");
}


/////////////////////////////////////////////////////////////////////////////////////////////////
// function onClickJump(sBookmarkName)
// Used with the [jump][/jump] custom tags to handle bookmark clicks
/////////////////////////////////////////////////////////////////////////////////////////////////
function onClickJump(sBookmarkName) {
	if (aBookmarkNames[sBookmarkName].length > 0) {
		window.location = "CDE-" + aBookmarkNames[sBookmarkName] + ".htm";
	} else {
		alert("The bookmark '" + sBookmarkName + "' does not exist");
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function getRandomNumber(nMaximum)
// Generates a random number between 0 and \intMaximum
// Returns: A random number integer
/////////////////////////////////////////////////////////////////////////////////////////////////
function getRandomNumber(nMaximum) {
	var nRandom = Math.floor(Math.random() * nMaximum);
	return nRandom;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function getTwoDigitNumber( strNumber )
// Adds a leading zero to single digit numbers
// Returns: A two character string representation of the number
/////////////////////////////////////////////////////////////////////////////////////////////////
function getTwoDigitNumber(sNumber) {
	var sReturnNumber = sNumber;
	if (parseInt( sNumber ) < 10) sReturnNumber = "0" + sNumber;
	return sReturnNumber;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function mySplice(oArray, nRemoveIndex)
// Custom splice function which removes the \nRemoveIndex index from the array \oArray
// Returns: The spliced array
/////////////////////////////////////////////////////////////////////////////////////////////////
function mySplice(oArray, nRemoveIndex) {
	var oTempArray = new Array();
	for (var i = 0; i < nRemoveIndex; i++ ) {
		oTempArray[oTempArray.length] = oArray[i];
	}
	if (nRemoveIndex < (oArray.length - 1)) {
		for( var i = nRemoveIndex + 1; i < oArray.length; i++ ) {
			oTempArray[oTempArray.length] = oArray[i];
		}
	}
	return oTempArray;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function getFirstIndexInArray(oArray, sString)
// Gets the first index in an array which matched \sString
// Returns: The 0 based index in the array, or -1 if not found
/////////////////////////////////////////////////////////////////////////////////////////////////
function getFirstIndexInArray(oArray, sString) {
	for (var i = 0; i < oArray.length; i++) {
		if (oArray[i] == sString) return i;
	}
	return -1;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function shuffleArray(oArray)
// Shuffles the array \oArray in a random order
// Returns: The shuffled array
/////////////////////////////////////////////////////////////////////////////////////////////////
function shuffleArray(oArray) {
	var nArrayLength = oArray.length;
	var oReturnArray = new Array();
	for (var i = 0; i < nArrayLength; i++) {
		var nRandom = getRandomNumber(nArrayLength - i);
		oReturnArray[oReturnArray.length] = oArray[nRandom];
		oArray = mySplice(oArray, nRandom);
	}
	return oReturnArray;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function onRolloverImage(oImg)
// Used for rollover states of an image
// Note: Relies on the image naming convention of:
// <image>_a for normal state
// <image>_b for rollover state
// <image>_c for disabled state
/////////////////////////////////////////////////////////////////////////////////////////////////
function onRolloverImage(oImg) {
	var sImageUrl = oImg.src;
	var sImageExtension = sImageUrl.split(".")[sImageUrl.split(".").length - 1];
	var sImageUrlPrefix = sImageUrl.substring(0, (sImageUrl.length - 6));
	if (sImageUrl.indexOf("_a." + sImageExtension) != -1 && sImageUrl.indexOf("_c." + sImageExtension) == -1) {
		oImg.src = sImageUrlPrefix + "_b." + sImageExtension;
	} else if (sImageUrl.indexOf("-a." + sImageExtension) != -1 && sImageUrl.indexOf("-c." + sImageExtension) == -1) {
		oImg.src = sImageUrlPrefix + "-b." + sImageExtension;
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function onRolloutImage(oImg)
// Used for rollover states of an image
// Note: Relies on the image naming convention of:
// <image>_a for normal state
// <image>_b for rollover state
// <image>_c for disabled state
/////////////////////////////////////////////////////////////////////////////////////////////////
function onRolloutImage(oImg) {
	var sImageUrl = oImg.src;
	var sImageExtension = sImageUrl.split(".")[sImageUrl.split(".").length - 1];
	var sImageUrlPrefix = sImageUrl.substring(0, (sImageUrl.length - 6));
	if (sImageUrl.indexOf("_b." + sImageExtension) != -1 && sImageUrl.indexOf("_c." + sImageExtension) == -1) {
		oImg.src = sImageUrlPrefix + "_a." + sImageExtension;
	} else if (sImageUrl.indexOf("-b." + sImageExtension) != -1 && sImageUrl.indexOf("-c." + sImageExtension) == -1) {
		oImg.src = sImageUrlPrefix + "-a." + sImageExtension;
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function onRolloverButton(oButton)
// Used for rollover states of a button
/////////////////////////////////////////////////////////////////////////////////////////////////
function onRolloverButton(oButton) {
	if (oButton.className != "buttonDisabled") {
		oButton.className = "buttonOver"
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// function onRolloutButton(oButton)
// Used for rollover states of a button
/////////////////////////////////////////////////////////////////////////////////////////////////
function onRolloutButton(oButton) {
	if (oButton.className != "buttonDisabled") {
		oButton.className = "button"
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// Function getObjectString(oObject)
// Converts objects to strings for cookies, etc.
// String can be converted back to object via "eval"
// Returns: Object string
/////////////////////////////////////////////////////////////////////////////////////////////////
function getObjectString(oObject) {
	if (oObject == null)
		return "null";
	else {
		if (oObject.constructor == Array) {
			var sString = "[";
			for (var nItem = 0; nItem < oObject.length; nItem++) {
				var oItem = oObject[nItem];
				sString += getObjectString(oItem);
				if (nItem < oObject.length - 1)
					sString += ",";
			}
			sString += "]";
			return sString;
		} else if (oObject.constructor == String) {
			return "\"" + oObject + "\"";
		} else
			return oObject.toString();
	}
}
//===============================================================
// Function : setBygTimeout
//
// Purpose : Executes timeout code, with arguments.
//
// Parameters:
//    sCode           Code to be executed. Can contain argument references $1, $2 etc.
//    nMilliseconds   Number of milliseconds to wait.
//    sLanguage       Language of sCode.
//    vArgument1, vArgument2 ... vArgumentN
//        Arguments for sCode.
//
// Returns: None
//===============================================================
var oBygTimeouts = new Array();
function setBygTimeout() {

	var sCode = arguments[0];
	var nMilliseconds = arguments[1];
	var sLanguage = arguments[2];
	var oBygTimeout = new Object;
	oBygTimeout.oArguments = new Array();
	var nBygTimeout = oBygTimeouts.length;
	oBygTimeouts[nBygTimeout] = oBygTimeout;
	for (var nArgument = 3; nArgument < arguments.length; nArgument++) {
		var vArgument = arguments[nArgument];
		var nBygTimeoutArgument = oBygTimeout.oArguments.length;
		oBygTimeout.oArguments[nBygTimeoutArgument] = vArgument;
		var sArgumentFind = "\\$" + (nArgument - 2);
		var sArgumentReplace = "oBygTimeouts[" + nBygTimeout + "].oArguments[" + nBygTimeoutArgument + "]";
		sCode = sCode.replace(new RegExp(sArgumentFind, "gi"), sArgumentReplace);
	}
	oBygTimeout.sCode = sCode;
	setTimeout("executeBygTimeout(" + nBygTimeout + ")", nMilliseconds, sLanguage);
}
function executeBygTimeout(nBygTimeout) {
	var oBygTimeout = oBygTimeouts[nBygTimeout];
	var sCode = oBygTimeout.sCode;
	eval(sCode);
	oBygTimeouts[nBygTimeout] = null;
}