var participantId, eventId, position = 0, msgCount = 0;
var oldText = "";
var oldMessage = "";
var hitInterval, wordInterval, textInterval;
var textReq = null;
var textBuffer = "";
var wordBuffer;
var pnlEvent, lblCap, lblTime, tbMessage, formMain, pnlControl, ddlFontSize, lblTitle, btnTrans, tdEvent, pnlTitle;
var tdControl, tdTitle, tdMessage;
var ddlFontName, ddlFontColor, ddlBackColor, ddlNewText, pnlMessage, ddlInterval;
var wpm = 250;
var log = "";
var eventComplete = false;  // is event Status 'Complete'
var lastStatus = '';        // keep track of status
var debug = false; 		   
var lastDelay;
var activeSS = "MO";        // for style sheet switching
var is_fox = false;
var is_foxthree = false;
var fox_version;
var is_chrome = false;
var is_safari = false;
var rowEmbedMC;
var btnEMCViewTrans;
var btnSend;
var btnEMCSend;
var tbTwoWay;
var pnlMessageCenter;
// new Embed related vars
var queue;          // queue to hold new Text objects with timestamps
var embed = false;  // is the event viewer configured as embedded
var embedDelay = 0; // the delay (in seconds) before new Text is displayed
var showEmbedToolbar = false;   // display (or not) the toolbar to stop scrolling and view Transcript
var embedScroll = true;         // whether (or not) the embed page should scroll to new Text
var btnEmbedViewTranscript;

function OnLoad()
{
    setActiveStyleSheet(activeSS);

    var agt=navigator.userAgent.toLowerCase();
    is_fox  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)
                && (agt.indexOf('android')==-1));   
    
	if (is_fox == true)
	{
		is_foxthree = (agt.indexOf('firefox/3.')!=-1);
        var idx = agt.indexOf('firefox/');
        fox_version = agt.substring(idx+8, idx+9);
	}

	is_chrome = (agt.indexOf('chrome/') != -1);

	is_safari = (agt.indexOf('safari/') != -1);		

	pnlEvent = document.getElementById("pnlEvent");
	lblCap = document.getElementById("lblCaptionerStatus");
	lblTime = document.getElementById("lblTime");
	tbMessage = document.getElementById("tbMessage");
	formMain = document.getElementById("formMain");
	pnlControl = document.getElementById("pnlControl");
	pnlMessage = document.getElementById("pnlMessage");
	ddlFontSize = document.getElementById("ddlFontSize");
	ddlFontName = document.getElementById("ddlFontName");
	ddlFontColor = document.getElementById("ddlFontColor");
	ddlBackColor = document.getElementById("ddlBackColor");
	ddlNewText = document.getElementById("ddlNewText");
	ddlInterval = document.getElementById("ddlInterval");
	tbFontName = document.getElementById("tbFontName");
	tbFontSize = document.getElementById("tbFontSize");
	tbFontColor = document.getElementById("tbFontColor");
	tbBackColor = document.getElementById("tbBackColor");
	tbNewText = document.getElementById("tbNewText");
	tbPosition = document.getElementById("tbPosition");
	lblTitle = document.getElementById("lblTitle");
	btnTrans = document.getElementById("btnTrans");
	tdEvent = document.getElementById("tdEvent");
	pnlTitle = document.getElementById("pnlTitle");
	tdControl = document.getElementById("tdControl");
	tdTitle = document.getElementById("tdTitle");
	rowEmbedMC = document.getElementById("rowEmbedMC");
    btnEMCViewTrans = document.getElementById("btnEMCViewTrans");
	btnSend = document.getElementById("btnSend");
	btnEMCSend = document.getElementById("btnEMCSend");
	tdMessage = document.getElementById("tdMessage");
    btnEmbedViewTranscript = document.getElementById("btnEmbedViewTranscript");
    
	// set this OnLoad
	pnlEvent.style.backgroundColor = tbBackColor.value;

    // Set TwoWay
    tbTwoWay = document.getElementById("tbTwoWay");
	pnlMessageCenter = document.getElementById("pnlMessageCenter");

	// remove the imgOptions button if embedded
    embed = QueryString("Embedded");
    if (embed == null) embed = false;
	if(embed == "True" || embed == "true")
	{	
        // Hide MessageCenter
        if (pnlMessageCenter != null)
        {
            pnlMessageCenter.className = "OneWay";
        }
        	
	    if (document.getElementById("imgOptions") != null)
	        document.getElementById("imgOptions").style.display="none";	        

        // remove the imgMsgs button if not TwoWay
	    if (document.getElementById("imgMsgs") != null)
	    {
	        document.getElementById("imgMsgs").style.display = "none";
        }
        
        // grab the Embed Delay value, if exists
        queue = new Queue();
        var ed = QueryString("EmbedDelay");
        if (ed != null)
        {
            // comes in as seconds, set it to milliseconds
            embedDelay = ed * 1000;
        }
        
        // show/hide the embed toolbar
        //  (defaults to false)
        var etb = document.getElementById("rowEmbedToolbar");
        var stb = QueryString("ShowEmbedToolbar");
        if (stb != null)
        {
            if (stb.toLowerCase() == "true")
            {
                // should the Embed toolbar be shown
                showEmbedToolbar = true;
                
                // make it visible here
        	    if (etb != null)
        	    {
        	        // set className
        	        etb.className = "ShowEmbedToolbar";
        	    }
            }
        }
	}
    else
    {	
	    SetTwoWay();
	}
		
	wordBuffer = new Array();
	position = tbPosition.value;
	participantId = QueryString("ParticipantId");
	eventId = parseInt(QueryString("EventId"));
	formMain.onSubmit = OnSubmit();
	hitInterval = setInterval("GetText()", 1500);
	var interval = 1000;
	if(ddlInterval != null) interval = ddlInterval.value;
	textInterval = setInterval("AddText()", interval);
	var d = QueryString("Debug");
	if (d != null)
	{
		if(d == "True" || d == "true") debug = true;
	}	
							
    // check to see if CCART is flagged
    var cCART = QueryString("CCART");

    // if CCART is in QueryString...
    if (cCART != null)
    {
        // if there is a non-empty value (should be CCART userName)...
        if (cCART.length > 0)
        {
            // set css class on some elements
            if (pnlMessage != null)
                pnlMessage.className = "CCART";
            if (btnSend != null)
                btnSend.className = "CCART";
            if (tbMessage != null)
                tbMessage.className = "CCART";
            
            // if for some reason a CCART event is not TwoWay, adjust layout
            if (pnlMessage != null)
            {
                rowEmbedMC.className = "CCART";
            }
            else
            {                            
                rowEmbedMC.className = "CCART OneWay";
                btnEMCSend.className = "OneWay";
            }
        }
    }
    
	// to prevent easy copy/paste of transcript    
    document.onselectstart = function () { return false; } // ie
    //document.onmousedown = function () { return false; } // mozilla - this creates problem for message center
    document.getElementById("pnlEvent").onmousedown = function() {return false;} // mozilla	
    
    // and to prevent select all from context menu, shut it off
    //document.oncontextmenu = function () { return false; } // 
    //document.getElementById("pnlEvent").style.MozUserSelect = "none";       

        if(is_foxthree == true)
        {
	    //  Fix the top and bottom, so we can calc. size of text area

	    //tdControl.style.height = "79px";
	    //tdTitle.style.height = "20px";

	    //pnlTitle.style.height = "18px";
	    //pnlTitle.style.minHeight = "18px";
	    //pnlTitle.style.maxHeight = "18px";
	    //pnlTitle.style.overflow = "hidden";
	    //pnlControl.style.height = "79px";
	    //pnlControl.style.minHeight = "79px";
	    //pnlControl.style.maxHeight = "79px";
	    //pnlControl.style.overflow = "auto";
        
        document.body.onresize = resizeEventArea;
        }

	if(is_fox || is_chrome || is_safari ) 
	{
        tdEvent.style.paddingRight = "16px";
        tdTitle.style.paddingRight = "2px";
        
        // fix for new embed scroll functionality
        pnlEvent.style.width = "100%";
	}

}

function SendMessage(complete)
{
	var text = tbMessage.value;
	text = text.replace(/\r/g, "");
	text = text.replace(/\n/g, "");
	
	// do not allow empty messages to go thru
	text = text.trim();
    if (text.length == 0)
        return;
        
	if(complete) tbMessage.value = "";
	var request = GetHttpRequest();
	var url = "WebService.aspx?Method=SendMessage";
	url += "&ParticipantId=" + participantId;
	url += "&EventId=" + eventId;
	url += "&Complete=" + complete;
	request.open('POST', url, true);
	request.send(text);
	LogWrite('sent message');
}

function TextChange()
{
	var text = tbMessage.value;
	if(text.length > 0)
	{
		var lastKey = text.charAt(text.length - 1);
		if(lastKey == ' ') SendMessage(false);
		if(lastKey == '\n')	SendMessage(true);
	}
	else SendMessage(false);
}
	
function GetText()
{
	// Initialize
	LogWrite('*** Getting Text ***');
	clearInterval(hitInterval);		
	textReq = GetHttpRequest();
	textReq.onreadystatechange = ProcessText;
	var url = "WebService.aspx?Method=GetState";
	url += "&ParticipantId=" + participantId;
	url += "&EventId=" + eventId;
	url += "&Offset=" + position;
	url += "&MessagePos=" + msgCount;
	textReq.open('POST', url, true);
	textReq.send("");
}

function AddWords(text)
{
	while(text.length != 0)
	{
		var spaceIndex = text.indexOf(' ');
		var tagIndex = text.indexOf('<');
		var endIndex = spaceIndex;
		if(tagIndex < endIndex && tagIndex != -1) endIndex = tagIndex;
		if(tagIndex == 0) endIndex = text.indexOf('>') + 1;
		if(endIndex == 0) endIndex++;
		if(endIndex == -1) endIndex = text.length;

		var word = text.substring(0, endIndex);	
		text = text.substring(endIndex);	
		if(word != " ")	wordBuffer[wordBuffer.length] = word;
	}	
}

function AddWord()
{
	var word = wordBuffer.shift();	
	if(word == null) return;
	textBuffer += word + " ";
}

function AddText()
{
	if(textBuffer == "") return;
            
	// Set controls	
	pnlEvent.style.backgroundColor = tbBackColor.value;
	pnlEvent.style.fontFamily = tbFontName.value;
	pnlEvent.style.color = tbFontColor.value;
	pnlEvent.style.fontSize = tbFontSize.value + "pt";	

    // leave FF3 code as is
    if(is_foxthree == true)
    {
        //  Give a hard height to the event panel
        if (pnlEvent.style.maxHeight != tdEvent.offsetHeight + "px")
        {        
            pnlEvent.style.maxHeight = tdEvent.offsetHeight + "px";
        }    
    }

    // new FF4+ code to fix scrolling issue for pnlEvent and (possibly) pnlMessage 
    if (fox_version >= 4)
    {
        //  Give a hard height to the event panel
        // compute the height -- adj : 106
        var heightAdjust = 106;
        if (embed) heightAdjust = 6; // this value if toolbar not shown
        if (showEmbedToolbar) heightAdjust = 32; // this value if toolbar shown
        
        var cH = document.body.clientHeight - heightAdjust;
        
        if (tdEvent.offsetHeight <= cH)
        {            
            pnlEvent.style.maxHeight = tdEvent.offsetHeight + "px";
        }
        else
        {
            pnlEvent.style.maxHeight = cH + "px";
        }
        
        // Give a hard height to the message panel, if it is a 2way event
        if ((tdMessage != null) && (pnlMessage != null))
        {
            if (tdMessage.offsetHeight <= cH)
            {
                pnlMessage.style.maxHeight = tdMessage.offsetHeight + "px";
            }
            else
            {
                pnlMessage.style.maxHeight = cH + "px";
            }
        }        
    }
	
	// ***********************************************************************************
	// new code to handle a possible EmbedDelay
	if (embedDelay > 0)
	{
	    // Q item
	    var item;
	    // current timestamp
	    var timeNow;
	    // timestamp, milliseconds 
	    var dNow;
	    var dText
	    // difference in timestamps, in milliseconds
	    var diff;
	    
	    // new it up
	    var textObject = new TextObject(textBuffer);
	    
	    // clear out the textBuffer
	    textBuffer = "";
	    
	    // Q it up
	    queue.enqueue(textObject);
	    
	    // check to see if need to deQ
	    var qLen = queue.getLength();
	    for (var i = 0; i < qLen; i++) {
	    
	        // peek at the end Q item
	        item = queue.peek();
	        
	        // get a current timestamp
	        timeNow = new Date();
	        
	        // grab the milliseconds since 1/1/1970 for each timestamp
	        dNow = timeNow.getTime();
	        dText = item.timestamp.getTime();
	        
	        // compute the difference between the timestamps
	        diff = dNow - dText;
	        
	        // if the difference exceeds the embedDelay setting...
	        if (diff > embedDelay)
	        {
	            // deQ the end item
	            item = queue.dequeue();
	            
	            // append the new text
	            pnlEvent.innerHTML = oldText + "<font style='background-color: " + tbNewText.value + ";'>" + 
	                item.text + "</font><br><a id=bottom>" + "<hr style=\"visibility:hidden\"/>";
	                            	    
	            oldText += item.text;	            
            	
	            // scroll to the new text
	            var objBottom = document.getElementById("bottom");
	            if(objBottom != null)
	            {
	                // new ability to toggle scrolling in embed page
	                if (embedScroll)
	                {    	            
	                    //objBottom.scrollIntoView(! is_fox);
	                    //$("#pnlEvent").scrollTo(document.getElementById("bottom"));
	                    $("#pnlEvent").scrollTo($("#bottom"));

                        // NOTE: for Safari 5, a new problem... all is well if there is a <hr> on screen.
                        //       once the screen is absent an <hr>, then the scrolling is broken until an <hr> reappears?
                        //if (is_chrome) objBottom.scrollIntoView(true);
                    }
	            }	            
	        }
	        else 
	        {
	            // if the end item in the Q isn't ready to deQ, then we're done
	            break;
	        }
	    }
	}
	else
	{
	    // append the new text
	    pnlEvent.innerHTML = oldText + "<font style='background-color: " + tbNewText.value + ";'>" + 
	        textBuffer + "</font><br><a id=bottom>" + "<hr style=\"visibility:hidden\"/>";
    	    
	    oldText += textBuffer;
	    textBuffer = "";	
    	
	    // scroll to the new text
	    var objBottom = document.getElementById("bottom");
	    if(objBottom != null)
	    {
	        // new ability to toggle scrolling in embed page
	        if (embedScroll)
	        {
	            //objBottom.scrollIntoView(! is_fox);
	            //$("#pnlEvent").scrollTo(document.getElementById("bottom"));
	            $("#pnlEvent").scrollTo($("#bottom"));
            }
            
            // NOTE: for Safari 5, a new problem... all is well if there is a <hr> on screen.
            //       once the screen is absent an <hr>, then the scrolling is broken until an <hr> reappears?
            //if (is_chrome) objBottom.scrollIntoView(true);
	    }
	}
    // ***********************************************************************************	
}

// create a new TextObject for use in queueing up for Embed Delay
// takes the new Text and then timestamps it
function TextObject(text) {
    this.text = text;
    this.timestamp = new Date();
}

// function to toggle scrolling on/off
// called from the embed toolbar, if shown
function ToggleScroll() {

    // grab the button, need to toggle the label
    var btnToggleScroll = document.getElementById("btnToggleScroll");
    
    // toggle it
    if (embedScroll)
    {
        embedScroll = false;
        if (btnToggleScroll != null)
        {
            btnToggleScroll.value = "Resume Scrolling";
        }
    }
    else
    {
        embedScroll = true;
        if (btnToggleScroll != null)
        {
            btnToggleScroll.value = "Pause Scrolling";
        }        
    }
}

function ProcessText()
{
	if(textReq == null) return;
	if(textReq.readyState != 4) return;

	// Error handling
    if (textReq.status != 200) {
	    LogWrite('HTTP ERROR ' + textReq.status);
	    hitInterval = setInterval("GetText()", 2500);
	    textReq = null;
	    return;	        
	}

	LogWrite('Got response');
	var xml = textReq.responseText;

	// Reset event
	var eventInfo = GetElements("EventInfo", xml)[0];
	LogWrite('Xml Parsed');
	if(eventInfo == null)
	{
    	LogWrite('Invalid XML ' + xml);
		hitInterval = setInterval("GetText()", 2500);
		textReq = null;
		return;
	}
	
    LogWrite('Valid XML');	
	var oldPosition = position;		
	position = GetInt("Position", eventInfo);
	if(position < oldPosition)
	{
    	LogWrite('Clear Screen');
		pnlEvent.innerHTML = "";
		textBuffer = "";
		wordBuffer = new Array();
		oldText = "";
	}
	
	// Interpret
	LogWrite('Parsing XML attributes');
	var SslRequired = (GetString("SSLRequired", eventInfo) == "True");
	if(SslEnabled() == false && SslRequired == true) GoSsl();
	var wantTwoWay = (GetString("TwoWay", eventInfo) == "True");	
	
	var isTwoWay = false;
	if ((pnlMessageCenter != null) && (pnlMessageCenter.className.indexOf("TwoWay") != -1))
	{	
	    isTwoWay = true;
	}
	
	embed = QueryString("Embedded");
	if (embed == null) embed = false;
	if(embed == "True" || embed == "true") wantTwoWay = false;

    // check to see if CCART is flagged
    var cCART = QueryString("CCART");
    var messageColor = "blue";
    var messageSource = "";

    // resolve wantTwoWay conflict of "Embedded=true" and "CCART=true"
    // if CCART is in QueryString...
    if (cCART != null)
    {
        // and the value is non-empty...
        if (cCART.length > 0)
        {
            // CCART=userName means they may want TwoWay
            // re-fetch this value from eventInfo
            wantTwoWay = (GetString("TwoWay", eventInfo) == "True");
                                       
            // set css class on some elements
            if (pnlMessage != null)
                pnlMessage.className = "CCART";
            if (btnSend != null)    
                btnSend.className = "CCART";
            if (tbMessage != null)
                tbMessage.className = "CCART";            
            
            // if for some reason a CCART event is not TwoWay, adjust layout
            if (pnlMessage != null)
            {
                rowEmbedMC.className = "CCART";
            }
            else
            {                
                rowEmbedMC.className = "CCART OneWay";
                btnEMCSend.className = "OneWay";
            }
            
            messageColor = "#fbae17";
            messageSource = cCART;
        }        
    }

    // if the event TwoWay setting is different than what the page is configured for...
    //if(wantTwoWay != isTwoWay) window.location.reload();
    if(wantTwoWay != isTwoWay)
    {
        tbTwoWay.value = wantTwoWay;
        SetTwoWay();
    }        
        
	var text = GetString("Text", eventInfo);
	var delay = GetInt("Interval", eventInfo);    
	if (delay == 0) delay = 100;
	if (lastDelay == null || delay != lastDelay)  
	{
	    clearInterval(textInterval);
	    var txtInterval = 1000;
	    if(ddlInterval != null) txtInterval = ddlInterval.value;
	    textInterval = setInterval("AddText()", txtInterval);
	}
	lastDelay = delay;
	
    var title = GetString("Title", eventInfo);
    if(title == "") title = "Event #" + eventId; 
    if (lblTitle != null) lblTitle.innerHTML = title;
    var viewTranscript = (GetString("Trans", eventInfo) == "True");
    if (btnTrans != null) btnTrans.disabled = (! viewTranscript);
    
    // for new embed toolbar
    if (btnEmbedViewTranscript != null) 
    {
        btnEmbedViewTranscript.disabled = (! viewTranscript);
        btnEmbedViewTranscript.style.visibility = (viewTranscript) ? "visible" : "hidden";
    }
    
    // enable or disable Transcript button in Embedded Message Center
    if (btnEMCViewTrans != null) btnEMCViewTrans.disabled = (! viewTranscript);
        
	LogWrite('text:<B>' + text + '</B>');	
    
    // if the ICS event delay and the Refresh values are the same, set the overrideDelay = 0
    var overrideDelay = delay;
	if ((ddlInterval != null) && (delay == ddlInterval.value)) {
		overrideDelay = 1;
    } else {
 		overrideDelay = 0;
	}
	
	// check the Event status
	var status = GetString("Status", eventInfo);
		
	// store current status
	if (lastStatus == '')
	{
	    lastStatus = status;
	}
	else
	{
	    // if status has changed (for example from InProgress to Complete)
	    if (lastStatus != status)
	    {
	        lastStatus = status;
            pnlEvent.innerHTML = oldText + 
                     "<hr style=\"border-style: dotted;\">" +
                     "<font style='background-color: " + tbNewText.value + ";'>" + text + "</font><br><a id=bottom>";	        
	    }
	}
	
	eventComplete = (status == "Event is Completed");
	
	if(lblCap != null)
	{
		var cap = GetString("ActiveCaptioner", eventInfo);
		lblCap.innerHTML = "Captioner is ";
		if(cap == "N") lblCap.innerHTML += "<font color=black>not present</font>";
		else lblCap.innerHTML += "<font color=green>present</font>";
		var status = GetString("Status", eventInfo);
		var time = GetString("Time", eventInfo);		
		if(status != null && time != null) lblTime.innerHTML = status + ": " + time;
	}

	textReq = null;

	if(position > oldPosition)
	{
		window.defaultStatus = "Last received text: " + new Date();
		//text = text.replace(/>>>/g, "<hr style=\"border-style: dotted;\">");
		// this fixes a problem with IE9:
		text = text.replace(/>>>/g, "<hr style=\"border-style: dotted; color: White;\">");
		text = text.replace(/>>/g, "<hr>");
		//text = text.replace(/>>/g, "<hr style=\"border-style: solid; color: " + tbFontColor.value + ";\">");		
	
		if (overrideDelay == 0) 
		{
			if (eventComplete)
			{			
				// add the 'Event is Complete' message	  	    
				clearInterval(textInterval);
				clearInterval(wordInterval);
				for(var index = 0; index < wordBuffer.length; index++) AddWord();
	    		pnlEvent.innerHTML = oldText + textBuffer + 
                    "<hr style=\"border-style: dotted;\">" +
        		    "<font style='background-color: " + tbNewText.value + ";'>" + text + "</font><br><a id=bottom>";
			} else {
                clearInterval(wordInterval);
                //clearInterval(textInterval);
			    AddWords(text);
			    
			    var interval = delay / wordBuffer.length;
	            if(interval == 0) interval = 10;
            	wordInterval = setInterval("AddWord()", interval);			
			}			
		} else {
		    clearInterval(wordInterval);
			clearInterval(textInterval);
			
			if (wordBuffer.length > 0)
			{
				AddWords(text);
				for(var index = 0; index < wordBuffer.length; index++) AddWord();

			} else {
				textBuffer=text+" ";
			}
			AddText();
		}
	}

	// Messages
	var messages = GetElements("Message", xml);
	for(var i = 0; i < messages.length; i++)
	{
		var message = messages[i];
		var mId = GetInt("MessageId", message);
		var source = GetString("Source", message);
		if (source == "Anonymous" && messageSource.length > 0)
		    source = messageSource;
		var text = GetString("Text", message);
		if(mId > msgCount)
		{
			msgCount = mId;
			//newMessage = "<font color=blue>" + source + " says:</font><br>" + text + "<hr>";
			newMessage = "<font color=" + messageColor + ">" + source + " says:</font><br>" + text + "<hr>";
			if(pnlMessage != null) pnlMessage.innerHTML = oldMessage + newMessage + "<a id=mbottom>";
			oldMessage += newMessage;
			
			// scroll to the new message
			var objBottom = document.getElementById("mbottom");
			if(objBottom != null)
			{   
			    $("#pnlMessage").scrollTo(document.getElementById("mbottom"));
			    //$("#pnlMessage").scrollTo($("#mbottom"));
			}
		}
	}
					
	if (!eventComplete) {
	   hitInterval = setInterval("GetText()", delay);	           
	}
	LogWrite('Leaving ProcessText()...');	
}

function SetTwoWay()
{
    // adjust elements based on Two Way setting
    if ((tbTwoWay.value == "True") || (tbTwoWay.value == "true"))
    {
        // Show MessageCenter
        if (pnlMessageCenter != null)
        {
            // only change if it is OneWay (not TwoWay Hide)
            if (pnlMessageCenter.className == "OneWay")
            {
                pnlMessageCenter.className = "TwoWay";
            }
        }
        
        // show the imgMsgs button if TwoWay
	    if (document.getElementById("imgMsgs") != null)
	    {
	        document.getElementById("imgMsgs").style.display = "block";

            // need to check className and set appropriately
            if (pnlMessageCenter.className == "TwoWay")
            {
                activeSS = "M" + activeSS.charAt(1);
                document.getElementById("imgMsgs").src = "../Images/Options/HideMsgs.gif";
                document.getElementById("imgMsgs").title = "Hide Message Center";
            }
            else if (pnlMessageCenter.className == "TwoWay Hide")
            {
                activeSS = "X" + activeSS.charAt(1);
                document.getElementById("imgMsgs").src = "../Images/Options/ShowMsgs.gif";
                document.getElementById("imgMsgs").title = "Show Message Center";
            }
            
            setActiveStyleSheet(activeSS);
        }
    }
    else
    {
        // Hide MessageCenter
        if (pnlMessageCenter != null)
        {
            pnlMessageCenter.className = "OneWay";
        }
        
        // remove the imgMsgs button if not TwoWay
	    if (document.getElementById("imgMsgs") != null)
	    {
	        document.getElementById("imgMsgs").style.display = "none";
        }
    }
}

function LogWrite(line)
{
    if (debug)
    {
	    var dDate = new Date();
    	log = log + dDate.getHours() +':' + checkTime(dDate.getMinutes()) +':'+ checkTime(dDate.getSeconds()) + '.'+ checkTimeMsec(dDate.getMilliseconds());    	
	    log = log + ' - ' + line + '<BR>';
    	
	    if(pnlMessage != null) pnlMessage.innerHTML = log + "<a id=mbottom>";
    	var objBottom = document.getElementById("mbottom");
    	if(objBottom != null) objBottom.scrollIntoView(false);

    	if (log.length > 20000) log='Clearing Log';
    }
}

function ShowLog()
{
  if (debug)
  {
       clearInterval(hitInterval);
       clearInterval(wordInterval);
       clearInterval(textInterval);
       LogWrite('**Refresh Broswer to resume**');
  }
}

// log helper function
function checkTime(i)
{
    if (i<10) 
        i="0" + i;
    return i;
}

// log helper function
function checkTimeMsec(i)
{
    if (i<100 && i>10) 
        i="0" + i;
    else if (i<10) 
        i="00" + i;
    return i;
}

function QueryString(key)
{
	var url = window.location.href;
	var index = url.indexOf("?");
	var queryString = url.substr(index + 1);
	var url = url.substr(0, index + 1);
	var pairs = queryString.split("&");
	for(index = 0; index < pairs.length; index++)
	{
		var term = pairs[index];
		var pair = term.split("=");
		if(pair[0].toLowerCase() == key.toLowerCase())
		{
			return pair[1];
		}
	}
}

// Toggle the MessageCenter on/off
function ToggleMessages()
{
    if (activeSS.charAt(0) == "M")
    {
        activeSS = "X" + activeSS.charAt(1);
        document.getElementById("imgMsgs").src = "../Images/Options/ShowMsgs.gif";
        document.getElementById("imgMsgs").title = "Show Message Center";
        
        // set the MC className
        pnlMessageCenter.className = "TwoWay Hide";
    }
    else
    {
        activeSS = "M" + activeSS.charAt(1);
        document.getElementById("imgMsgs").src = "../Images/Options/HideMsgs.gif";
        document.getElementById("imgMsgs").title = "Hide Message Center";         
        
        // set the MC className
        pnlMessageCenter.className = "TwoWay";        
    }    

    setActiveStyleSheet(activeSS);
}

// Toggle the (Options) ControlPanel on/off
function ToggleOptions()
{
    if (activeSS.charAt(1) == "O")
    {    
        activeSS = activeSS.charAt(0) + "X";
        document.getElementById("imgOptions").src = "../Images/Options/ShowFonts.gif";
        document.getElementById("imgOptions").title = "Show Options";        
    }
    else
    {
        activeSS = activeSS.charAt(0) + "O";
        document.getElementById("imgOptions").src = "../Images/Options/HideFonts.gif";
        document.getElementById("imgOptions").title = "Hide Options";        
    }
    
    setActiveStyleSheet(activeSS);
}

// set the mouseover/mouseout images
function ToggleMsgsImage(enter)
{
    if (activeSS.charAt(0) == "M")
    {
        if (enter)
        {
            document.getElementById("imgMsgs").src = "../Images/Options/HideMsgs_mo.gif";
        }
        else
        {
            document.getElementById("imgMsgs").src = "../Images/Options/HideMsgs.gif";
        }
    }
    else
    {
        if (enter)
        {
            document.getElementById("imgMsgs").src = "../Images/Options/ShowMsgs_mo.gif";        
        }
        else
        {
            document.getElementById("imgMsgs").src = "../Images/Options/ShowMsgs.gif";        
        }
    }  
}

// set the mouseover/mouseout images
function ToggleOptionsImage(enter)
{
    if (activeSS.charAt(1) == "O")
    {
        if (enter)
        {
            document.getElementById("imgOptions").src = "../Images/Options/HideFonts_mo.gif";
        }
        else
        {
            document.getElementById("imgOptions").src = "../Images/Options/HideFonts.gif";
        }
    }
    else
    {
        if (enter)
        {
            document.getElementById("imgOptions").src = "../Images/Options/ShowFonts_mo.gif";        
        }
        else
        {
            document.getElementById("imgOptions").src = "../Images/Options/ShowFonts.gif";        
        }
    }  
}

// Enable/Set the active style sheet based on 'title' parameter 
function setActiveStyleSheet(title) 
{
   var i, a, main;
   for(i=0; (a = document.getElementsByTagName("link")[i]); i++) 
   {     
     if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) 
     {
       a.disabled = true;
       if(a.getAttribute("title") == title) 
       {
          a.disabled = false;
       }
     }
   }
}

// to prevent easy copy/paste of transcript
function disableCtrlKeyCombination(e)
{
        //list all CTRL + key combinations you want to disable
        var forbiddenKeys = new Array('a', 'c', 'x', 'v');
        var key;
        var isCtrl;

        if(window.event)
        {
                key = window.event.keyCode;     //IE
                if(window.event.ctrlKey)
                        isCtrl = true;
                else
                        isCtrl = false;
        }
        else
        {
                key = e.which;     //firefox
                if(e.ctrlKey)
                        isCtrl = true;
                else
                        isCtrl = false;
        }

        //if ctrl is pressed check if other key is in forbidenKeys array
        if(isCtrl)
        {
                for(i=0; i<forbiddenKeys.length; i++)
                {
                        //case-insensitive comparation
                        if(forbiddenKeys[i].toLowerCase() == String.fromCharCode(key).toLowerCase())
                        {
//                                alert('Key combination CTRL + ');
//                                        + String.fromCharCode(key)
//                                        + ' has been disabled.');
                                return false;
                        }
                }
        }
        return true;
}

function GetHttpRequest()
{
	var xmlhttp;
	try
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(ex)
	{
		try
		{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(except)
		{
			xmlhttp = false;
		}
	}
	if(!xmlhttp && typeof XMLHttpRequest != 'undefined')
	{
		xmlhttp = new XMLHttpRequest( );
	}
	return xmlhttp;
}

function OnSubmit()
{
	return false;
}

function SslEnabled()
{
	var chr = window.location.href.substr(4, 1).toLowerCase();
	return (chr == 's');
}

function GoSsl()
{
	var url = window.location.href.substring(8);
	url = "https://" + url;
	window.location.href = url;
}

function IntervalChanged()
{
	clearInterval(textInterval);
	textInterval = setInterval("AddText()", ddlInterval.value);
}

function GetInt(attributeName, element)
{
	var text = GetString(attributeName, element);
	return parseInt(text);
}

function GetString(attributeName, element)
{
	var startIndex = element.indexOf(attributeName + '="');
	if(startIndex != -1)
	{
		startIndex += attributeName.length + 2;
		var endIndex = element.indexOf('"', startIndex);
		if(endIndex != -1)
		{
			var val = element.substring(startIndex, endIndex);
			val = HtmlDecode(val);
			return val;
		}
	}
}

function GetElements(elementName, xml)
{
	var elements = new Array();
	var startIndex = xml.indexOf('<' + elementName);
	while(startIndex != -1)
	{
		var endIndex = xml.indexOf('>', startIndex);
		if(endIndex != -1)
		{
			var element = xml.substring(startIndex, endIndex + 1);
			elements[elements.length] = element;
		}
		var startIndex = xml.indexOf('<' + elementName, endIndex);
	}
	return elements;
}

function HtmlDecode(s)
{
	var out = "";
	if (s==null) return;

	var l = s.length;
	for (var i=0; i<l; i++)
	{
		var ch = s.charAt(i);
		
		if (ch == '&') 
		{
			var semicolonIndex = s.indexOf(';', i+1);
			
            if (semicolonIndex > 0) 
            {
				var entity = s.substring(i + 1, semicolonIndex);
				if (entity.length > 1 && entity.charAt(0) == '#') 
				{
					if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X')
						ch = String.fromCharCode(eval('0'+entity.substring(1)));
					else
						ch = String.fromCharCode(eval(entity.substring(1)));
				}
		        else 
			    {
					switch (entity)
					{
						case 'quot': ch = String.fromCharCode(0x0022); break;
						case 'amp': ch = String.fromCharCode(0x0026); break;
						case 'lt': ch = String.fromCharCode(0x003c); break;
						case 'gt': ch = String.fromCharCode(0x003e); break;
						case 'nbsp': ch = String.fromCharCode(0x00a0); break;
						case 'iexcl': ch = String.fromCharCode(0x00a1); break;
						case 'cent': ch = String.fromCharCode(0x00a2); break;
						case 'pound': ch = String.fromCharCode(0x00a3); break;
						case 'curren': ch = String.fromCharCode(0x00a4); break;
						case 'yen': ch = String.fromCharCode(0x00a5); break;
						case 'brvbar': ch = String.fromCharCode(0x00a6); break;
						case 'sect': ch = String.fromCharCode(0x00a7); break;
						case 'uml': ch = String.fromCharCode(0x00a8); break;
						case 'copy': ch = String.fromCharCode(0x00a9); break;
						case 'ordf': ch = String.fromCharCode(0x00aa); break;
						case 'laquo': ch = String.fromCharCode(0x00ab); break;
						case 'not': ch = String.fromCharCode(0x00ac); break;
						case 'shy': ch = String.fromCharCode(0x00ad); break;
						case 'reg': ch = String.fromCharCode(0x00ae); break;
						case 'macr': ch = String.fromCharCode(0x00af); break;
						case 'deg': ch = String.fromCharCode(0x00b0); break;
						case 'plusmn': ch = String.fromCharCode(0x00b1); break;
						case 'sup2': ch = String.fromCharCode(0x00b2); break;
						case 'sup3': ch = String.fromCharCode(0x00b3); break;
						case 'acute': ch = String.fromCharCode(0x00b4); break;
						case 'micro': ch = String.fromCharCode(0x00b5); break;
						case 'para': ch = String.fromCharCode(0x00b6); break;
						case 'middot': ch = String.fromCharCode(0x00b7); break;
						case 'cedil': ch = String.fromCharCode(0x00b8); break;
						case 'sup1': ch = String.fromCharCode(0x00b9); break;
						case 'ordm': ch = String.fromCharCode(0x00ba); break;
						case 'raquo': ch = String.fromCharCode(0x00bb); break;
						case 'frac14': ch = String.fromCharCode(0x00bc); break;
						case 'frac12': ch = String.fromCharCode(0x00bd); break;
						case 'frac34': ch = String.fromCharCode(0x00be); break;
						case 'iquest': ch = String.fromCharCode(0x00bf); break;
						case 'Agrave': ch = String.fromCharCode(0x00c0); break;
						case 'Aacute': ch = String.fromCharCode(0x00c1); break;
						case 'Acirc': ch = String.fromCharCode(0x00c2); break;
						case 'Atilde': ch = String.fromCharCode(0x00c3); break;
						case 'Auml': ch = String.fromCharCode(0x00c4); break;
						case 'Aring': ch = String.fromCharCode(0x00c5); break;
						case 'AElig': ch = String.fromCharCode(0x00c6); break;
						case 'Ccedil': ch = String.fromCharCode(0x00c7); break;
						case 'Egrave': ch = String.fromCharCode(0x00c8); break;
						case 'Eacute': ch = String.fromCharCode(0x00c9); break;
						case 'Ecirc': ch = String.fromCharCode(0x00ca); break;
						case 'Euml': ch = String.fromCharCode(0x00cb); break;
						case 'Igrave': ch = String.fromCharCode(0x00cc); break;
						case 'Iacute': ch = String.fromCharCode(0x00cd); break;
						case 'Icirc': ch = String.fromCharCode(0x00ce); break;
						case 'Iuml': ch = String.fromCharCode(0x00cf); break;
						case 'ETH': ch = String.fromCharCode(0x00d0); break;
						case 'Ntilde': ch = String.fromCharCode(0x00d1); break;
						case 'Ograve': ch = String.fromCharCode(0x00d2); break;
						case 'Oacute': ch = String.fromCharCode(0x00d3); break;
						case 'Ocirc': ch = String.fromCharCode(0x00d4); break;
						case 'Otilde': ch = String.fromCharCode(0x00d5); break;
						case 'Ouml': ch = String.fromCharCode(0x00d6); break;
						case 'times': ch = String.fromCharCode(0x00d7); break;
						case 'Oslash': ch = String.fromCharCode(0x00d8); break;
						case 'Ugrave': ch = String.fromCharCode(0x00d9); break;
						case 'Uacute': ch = String.fromCharCode(0x00da); break;
						case 'Ucirc': ch = String.fromCharCode(0x00db); break;
						case 'Uuml': ch = String.fromCharCode(0x00dc); break;
						case 'Yacute': ch = String.fromCharCode(0x00dd); break;
						case 'THORN': ch = String.fromCharCode(0x00de); break;
						case 'szlig': ch = String.fromCharCode(0x00df); break;
						case 'agrave': ch = String.fromCharCode(0x00e0); break;
						case 'aacute': ch = String.fromCharCode(0x00e1); break;
						case 'acirc': ch = String.fromCharCode(0x00e2); break;
						case 'atilde': ch = String.fromCharCode(0x00e3); break;
						case 'auml': ch = String.fromCharCode(0x00e4); break;
						case 'aring': ch = String.fromCharCode(0x00e5); break;
						case 'aelig': ch = String.fromCharCode(0x00e6); break;
						case 'ccedil': ch = String.fromCharCode(0x00e7); break;
						case 'egrave': ch = String.fromCharCode(0x00e8); break;
						case 'eacute': ch = String.fromCharCode(0x00e9); break;
						case 'ecirc': ch = String.fromCharCode(0x00ea); break;
						case 'euml': ch = String.fromCharCode(0x00eb); break;
						case 'igrave': ch = String.fromCharCode(0x00ec); break;
						case 'iacute': ch = String.fromCharCode(0x00ed); break;
						case 'icirc': ch = String.fromCharCode(0x00ee); break;
						case 'iuml': ch = String.fromCharCode(0x00ef); break;
						case 'eth': ch = String.fromCharCode(0x00f0); break;
						case 'ntilde': ch = String.fromCharCode(0x00f1); break;
						case 'ograve': ch = String.fromCharCode(0x00f2); break;
						case 'oacute': ch = String.fromCharCode(0x00f3); break;
						case 'ocirc': ch = String.fromCharCode(0x00f4); break;
						case 'otilde': ch = String.fromCharCode(0x00f5); break;
						case 'ouml': ch = String.fromCharCode(0x00f6); break;
						case 'divide': ch = String.fromCharCode(0x00f7); break;
						case 'oslash': ch = String.fromCharCode(0x00f8); break;
						case 'ugrave': ch = String.fromCharCode(0x00f9); break;
						case 'uacute': ch = String.fromCharCode(0x00fa); break;
						case 'ucirc': ch = String.fromCharCode(0x00fb); break;
						case 'uuml': ch = String.fromCharCode(0x00fc); break;
						case 'yacute': ch = String.fromCharCode(0x00fd); break;
						case 'thorn': ch = String.fromCharCode(0x00fe); break;
						case 'yuml': ch = String.fromCharCode(0x00ff); break;
						case 'OElig': ch = String.fromCharCode(0x0152); break;
						case 'oelig': ch = String.fromCharCode(0x0153); break;
						case 'Scaron': ch = String.fromCharCode(0x0160); break;
						case 'scaron': ch = String.fromCharCode(0x0161); break;
						case 'Yuml': ch = String.fromCharCode(0x0178); break;
						case 'fnof': ch = String.fromCharCode(0x0192); break;
						case 'circ': ch = String.fromCharCode(0x02c6); break;
						case 'tilde': ch = String.fromCharCode(0x02dc); break;
						case 'Alpha': ch = String.fromCharCode(0x0391); break;
						case 'Beta': ch = String.fromCharCode(0x0392); break;
						case 'Gamma': ch = String.fromCharCode(0x0393); break;
						case 'Delta': ch = String.fromCharCode(0x0394); break;
						case 'Epsilon': ch = String.fromCharCode(0x0395); break;
						case 'Zeta': ch = String.fromCharCode(0x0396); break;
						case 'Eta': ch = String.fromCharCode(0x0397); break;
						case 'Theta': ch = String.fromCharCode(0x0398); break;
						case 'Iota': ch = String.fromCharCode(0x0399); break;
						case 'Kappa': ch = String.fromCharCode(0x039a); break;
						case 'Lambda': ch = String.fromCharCode(0x039b); break;
						case 'Mu': ch = String.fromCharCode(0x039c); break;
						case 'Nu': ch = String.fromCharCode(0x039d); break;
						case 'Xi': ch = String.fromCharCode(0x039e); break;
						case 'Omicron': ch = String.fromCharCode(0x039f); break;
						case 'Pi': ch = String.fromCharCode(0x03a0); break;
						case 'Rho': ch = String.fromCharCode(0x03a1); break;
						case 'Sigma': ch = String.fromCharCode(0x03a3); break;
						case 'Tau': ch = String.fromCharCode(0x03a4); break;
						case 'Upsilon': ch = String.fromCharCode(0x03a5); break;
						case 'Phi': ch = String.fromCharCode(0x03a6); break;
						case 'Chi': ch = String.fromCharCode(0x03a7); break;
						case 'Psi': ch = String.fromCharCode(0x03a8); break;
						case 'Omega': ch = String.fromCharCode(0x03a9); break;
						case 'alpha': ch = String.fromCharCode(0x03b1); break;
						case 'beta': ch = String.fromCharCode(0x03b2); break;
						case 'gamma': ch = String.fromCharCode(0x03b3); break;
						case 'delta': ch = String.fromCharCode(0x03b4); break;
						case 'epsilon': ch = String.fromCharCode(0x03b5); break;
						case 'zeta': ch = String.fromCharCode(0x03b6); break;
						case 'eta': ch = String.fromCharCode(0x03b7); break;
						case 'theta': ch = String.fromCharCode(0x03b8); break;
						case 'iota': ch = String.fromCharCode(0x03b9); break;
						case 'kappa': ch = String.fromCharCode(0x03ba); break;
						case 'lambda': ch = String.fromCharCode(0x03bb); break;
						case 'mu': ch = String.fromCharCode(0x03bc); break;
						case 'nu': ch = String.fromCharCode(0x03bd); break;
						case 'xi': ch = String.fromCharCode(0x03be); break;
						case 'omicron': ch = String.fromCharCode(0x03bf); break;
						case 'pi': ch = String.fromCharCode(0x03c0); break;
						case 'rho': ch = String.fromCharCode(0x03c1); break;
						case 'sigmaf': ch = String.fromCharCode(0x03c2); break;
						case 'sigma': ch = String.fromCharCode(0x03c3); break;
						case 'tau': ch = String.fromCharCode(0x03c4); break;
						case 'upsilon': ch = String.fromCharCode(0x03c5); break;
						case 'phi': ch = String.fromCharCode(0x03c6); break;
						case 'chi': ch = String.fromCharCode(0x03c7); break;
						case 'psi': ch = String.fromCharCode(0x03c8); break;
						case 'omega': ch = String.fromCharCode(0x03c9); break;
						case 'thetasym': ch = String.fromCharCode(0x03d1); break;
						case 'upsih': ch = String.fromCharCode(0x03d2); break;
						case 'piv': ch = String.fromCharCode(0x03d6); break;
						case 'ensp': ch = String.fromCharCode(0x2002); break;
						case 'emsp': ch = String.fromCharCode(0x2003); break;
						case 'thinsp': ch = String.fromCharCode(0x2009); break;
						case 'zwnj': ch = String.fromCharCode(0x200c); break;
						case 'zwj': ch = String.fromCharCode(0x200d); break;
						case 'lrm': ch = String.fromCharCode(0x200e); break;
						case 'rlm': ch = String.fromCharCode(0x200f); break;
						case 'ndash': ch = String.fromCharCode(0x2013); break;
						case 'mdash': ch = String.fromCharCode(0x2014); break;
						case 'lsquo': ch = String.fromCharCode(0x2018); break;
						case 'rsquo': ch = String.fromCharCode(0x2019); break;
						case 'sbquo': ch = String.fromCharCode(0x201a); break;
						case 'ldquo': ch = String.fromCharCode(0x201c); break;
						case 'rdquo': ch = String.fromCharCode(0x201d); break;
						case 'bdquo': ch = String.fromCharCode(0x201e); break;
						case 'dagger': ch = String.fromCharCode(0x2020); break;
						case 'Dagger': ch = String.fromCharCode(0x2021); break;
						case 'bull': ch = String.fromCharCode(0x2022); break;
						case 'hellip': ch = String.fromCharCode(0x2026); break;
						case 'permil': ch = String.fromCharCode(0x2030); break;
						case 'prime': ch = String.fromCharCode(0x2032); break;
						case 'Prime': ch = String.fromCharCode(0x2033); break;
						case 'lsaquo': ch = String.fromCharCode(0x2039); break;
						case 'rsaquo': ch = String.fromCharCode(0x203a); break;
						case 'oline': ch = String.fromCharCode(0x203e); break;
						case 'frasl': ch = String.fromCharCode(0x2044); break;
						case 'euro': ch = String.fromCharCode(0x20ac); break;
						case 'image': ch = String.fromCharCode(0x2111); break;
						case 'weierp': ch = String.fromCharCode(0x2118); break;
						case 'real': ch = String.fromCharCode(0x211c); break;
						case 'trade': ch = String.fromCharCode(0x2122); break;
						case 'alefsym': ch = String.fromCharCode(0x2135); break;
						case 'larr': ch = String.fromCharCode(0x2190); break;
						case 'uarr': ch = String.fromCharCode(0x2191); break;
						case 'rarr': ch = String.fromCharCode(0x2192); break;
						case 'darr': ch = String.fromCharCode(0x2193); break;
						case 'harr': ch = String.fromCharCode(0x2194); break;
						case 'crarr': ch = String.fromCharCode(0x21b5); break;
						case 'lArr': ch = String.fromCharCode(0x21d0); break;
						case 'uArr': ch = String.fromCharCode(0x21d1); break;
						case 'rArr': ch = String.fromCharCode(0x21d2); break;
						case 'dArr': ch = String.fromCharCode(0x21d3); break;
						case 'hArr': ch = String.fromCharCode(0x21d4); break;
						case 'forall': ch = String.fromCharCode(0x2200); break;
						case 'part': ch = String.fromCharCode(0x2202); break;
						case 'exist': ch = String.fromCharCode(0x2203); break;
						case 'empty': ch = String.fromCharCode(0x2205); break;
						case 'nabla': ch = String.fromCharCode(0x2207); break;
						case 'isin': ch = String.fromCharCode(0x2208); break;
						case 'notin': ch = String.fromCharCode(0x2209); break;
						case 'ni': ch = String.fromCharCode(0x220b); break;
						case 'prod': ch = String.fromCharCode(0x220f); break;
						case 'sum': ch = String.fromCharCode(0x2211); break;
						case 'minus': ch = String.fromCharCode(0x2212); break;
						case 'lowast': ch = String.fromCharCode(0x2217); break;
						case 'radic': ch = String.fromCharCode(0x221a); break;
						case 'prop': ch = String.fromCharCode(0x221d); break;
						case 'infin': ch = String.fromCharCode(0x221e); break;
						case 'ang': ch = String.fromCharCode(0x2220); break;
						case 'and': ch = String.fromCharCode(0x2227); break;
						case 'or': ch = String.fromCharCode(0x2228); break;
						case 'cap': ch = String.fromCharCode(0x2229); break;
						case 'cup': ch = String.fromCharCode(0x222a); break;
						case 'int': ch = String.fromCharCode(0x222b); break;
						case 'there4': ch = String.fromCharCode(0x2234); break;
						case 'sim': ch = String.fromCharCode(0x223c); break;
						case 'cong': ch = String.fromCharCode(0x2245); break;
						case 'asymp': ch = String.fromCharCode(0x2248); break;
						case 'ne': ch = String.fromCharCode(0x2260); break;
						case 'equiv': ch = String.fromCharCode(0x2261); break;
						case 'le': ch = String.fromCharCode(0x2264); break;
						case 'ge': ch = String.fromCharCode(0x2265); break;
						case 'sub': ch = String.fromCharCode(0x2282); break;
						case 'sup': ch = String.fromCharCode(0x2283); break;
						case 'nsub': ch = String.fromCharCode(0x2284); break;
						case 'sube': ch = String.fromCharCode(0x2286); break;
						case 'supe': ch = String.fromCharCode(0x2287); break;
						case 'oplus': ch = String.fromCharCode(0x2295); break;
						case 'otimes': ch = String.fromCharCode(0x2297); break;
						case 'perp': ch = String.fromCharCode(0x22a5); break;
						case 'sdot': ch = String.fromCharCode(0x22c5); break;
						case 'lceil': ch = String.fromCharCode(0x2308); break;
						case 'rceil': ch = String.fromCharCode(0x2309); break;
						case 'lfloor': ch = String.fromCharCode(0x230a); break;
						case 'rfloor': ch = String.fromCharCode(0x230b); break;
						case 'lang': ch = String.fromCharCode(0x2329); break;
						case 'rang': ch = String.fromCharCode(0x232a); break;
						case 'loz': ch = String.fromCharCode(0x25ca); break;
						case 'spades': ch = String.fromCharCode(0x2660); break;
						case 'clubs': ch = String.fromCharCode(0x2663); break;
						case 'hearts': ch = String.fromCharCode(0x2665); break;
						case 'diams': ch = String.fromCharCode(0x2666); break;
						default: ch = ''; break;
					}
				}
				i = semicolonIndex; 
			}
		}
		
		out += ch;
	}

	return out;
	
}

function HtmlEncode(s)
{
	var out = s;
	out = s.replace(/"/g, "&quot;");
	out = s.replace(/&/g, "&amp;");
	out = s.replace(/</g, "&lt;");
	out = s.replace(/>/g, "&gt;");
	out = s.replace(/'/g, "&qout;");
	return out;
}


function resizeEventArea()
{
    if (pnlEvent.style.maxHeight != tdEvent.offsetHeight + "px")
    {
        pnlEvent.style.maxHeight = tdEvent.offsetHeight + "px";
    }
}

// javascript trim
String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, "");
}

// allow font size changes for the embedded Message Center configuration
function ChangeEMCFont()
{    
    var fontSize = pnlEvent.style.fontSize;    
    var newFont;
    
    // cycle thru a set of pre-defined font sizes
    switch (fontSize)
    {
        case "12pt":
            newFont = "18";
            break;
        case "18pt":
            newFont = "24";
            break;
        case "24pt":
            newFont = "32";
            break;
        case "32pt":
            newFont = "12";
            break;
        default:
            newFont = "12";
    }
 
    // update the values
    tbFontSize.value = newFont;
    pnlEvent.style.fontSize = newFont + "pt";
}
