
// Copyright (C)2001 Interactive Intelligence Inc.
// All rights reserved, for use only by i3 customers
//
// $Archive:  $
// $Date:  $
// $Revision:    $
// $Author:    $

// Requires Config_Variables.js be included first

var ENDL = "\n";
var chatStarted = false;
var collabStarted = false;

//DSR linked list code for AJAX http req
function xmlReqNode(identifier, msgType, xmlHttpReq)
{
    this.id = identifier;
    this.messageType = msgType;
    this.xmlReqObj = xmlHttpReq;
    this.next = null;
}

var firstXmlReqNode=null;

function insertXmlReqNode(node)
{
    //DebugPrintWindow(parent.frames['chatText'].document, "insertXmlReqNode: Node:" + node.messageType + " node.id:" + node.id);
    node.next = firstXmlReqNode;
    firstXmlReqNode = node;
}

function PrintXmlReqNodeList()
{
    var tempNode = firstXmlReqNode;
    //DebugPrintWindow(parent.frames['chatText'].document, "PrintXmlReqNodeList");
    while(null != tempNode)
    {
        //DebugPrintWindow(parent.frames['chatText'].document, "PrintXmlReqNodeList: tempNode:" + tempNode.messageType + " tempNode.id:" + tempNode.id);
        tempNode = tempNode.next;
    }
}

function removeXmlReqNode(identifier)
{
    var tempNode = firstXmlReqNode;
    var tempNodePrev = null;
    //DebugPrintWindow(parent.frames['chatText'].document, "removeXmlReqNode: identifier" + identifier);
    PrintXmlReqNodeList();

    while(null != tempNode)
    {
        if(tempNode.id == identifier)
        {
            //found it, remove
            if(firstXmlReqNode == tempNode)
            {
                //remove from front
                firstXmlReqNode = tempNode.next;
            }
            else
            {
                tempNodePrev.next = tempNode.next;
            }
            delete tempNode;
            PrintXmlReqNodeList();
            return true;
        }
        else
        {
            tempNodePrev = tempNode;
            tempNode = tempNode.next;
        }
    }
    //DebugPrintWindow(parent.frames['chatText'].document, "removeXmlReqNode: didn't find node to remove returning false");
    return false;
}

function findXmlReqNode(identifier)
{
    //DebugPrintWindow(parent.frames['chatText'].document, "findXmlReqNode: find xmlReqNode identifier:" + identifier);
    var tempNode = firstXmlReqNode;
    while(null != tempNode)
    {
        if(tempNode.id == identifier)
        {
            //found it, return
            //DebugPrintWindow(parent.frames['chatText'].document, "findXmlReqNode: foundNode:" + tempNode.messageType + " tempNode.id:" + tempNode.id);
            return tempNode;
        }
        else
        {
            tempNode = tempNode.next;
        }
    }
    //DebugPrintWindow(parent.frames['chatText'].document, "findXmlReqNode: didn't find node, return false");
    return false;
}
////DSR end linked list code for AJAX http req

//DSR adding AJAX request code
//var xmlHttp = [];

var xmlReqIdCounter = 0;

function GetXmlHttpObject()
{
    var xmlHttp = null;
    try
    {
        xmlHttp = new XMLHttpRequest();
    }
    catch(e)
    {
        try
        {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e)
        {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;

}

function ExecuteAjaxScript(params, url, asynchFlag)
{
    //var tempCurNumOfHttpReqs = xmlHttp.length;
    //xmlHttp[tempCurNumOfHttpReqs] = GetXmlHttpObject()

    var reqMsgType = null;
    if(-1 != params.indexOf("queryStatus"))
    {
        reqMsgType = "queryStatus";
    }
    else
    {
        reqMsgType = "Other";
    }

    DebugPrintWindow(parent.frames['chatText'].document, "ExecuteAjaxScript: reqMsgType:" + reqMsgType + " xmlReqIdCounter:" + xmlReqIdCounter);

    insertXmlReqNode(new xmlReqNode(xmlReqIdCounter++, reqMsgType, GetXmlHttpObject()) );
    var ajaxReq = findXmlReqNode(xmlReqIdCounter - 1);

    DebugPrintWindow(parent.frames['chatText'].document, "ExecuteAjaxScript: found ajaxReq:" + ajaxReq.messageType + " ajaxReq.id:" + ajaxReq.id);

    ajaxReq.xmlReqObj.onreadystatechange = function()
    {
        if(4 == ajaxReq.xmlReqObj.readyState)
        {
            var responseTxt = ajaxReq.xmlReqObj.responseText;

            DebugPrintWindow(parent.frames['chatText'].document, "StateChanged processing response for obj:"+ajaxReq.id + " msgType:" + ajaxReq.messageType);

            loadFormData(responseTxt, ajaxReq.messageType);

            removeXmlReqNode(ajaxReq.id);
        }

    }

    ajaxReq.xmlReqObj.open("POST",url,asynchFlag);
    ajaxReq.xmlReqObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
    ajaxReq.xmlReqObj.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    ajaxReq.xmlReqObj.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
    ajaxReq.xmlReqObj.setRequestHeader("Pragma","no-cache");
    ajaxReq.xmlReqObj.setRequestHeader("Content-length", params.length);
    ajaxReq.xmlReqObj.setRequestHeader("Connection", "close");
    ajaxReq.xmlReqObj.send(params);

}

////DSR end adding AJAX request code

function getFormValue(name, text)
{

    var startIndex = text.indexOf("<INPUT ");
    var valueStr = text;
    //alert("begin while startIndex:" + startIndex);
    while(-1 != startIndex)
    {
        var valueStr = valueStr.substr(startIndex);
        //alert("valueStr:" + valueStr);
        var valueIndex = valueStr.indexOf("id=");
        valueStr = valueStr.substr(valueIndex+4);
        //alert("valueStr:" + valueStr);
        var nameEndIndex = valueStr.indexOf("\"");
        var nameValue = valueStr.substring(0, nameEndIndex);
        //alert("name:" + name + " nameValue:" + nameValue);
        if(name == nameValue)
        {
            var endInputNodeIndex = valueStr.indexOf(">");
            var valueDataStr = valueStr.substring(nameEndIndex, endInputNodeIndex);
            var valueStartIndex = valueDataStr.indexOf("value=");
            //alert("valueStartIndex:" + valueStartIndex);
            //alert("valueDataStr:" + valueDataStr);
            if(-1 != valueStartIndex)
            {
                valueDataStr = valueDataStr.substr(valueStartIndex + 7);
                //alert(" inside value= valueDataStr:" + valueDataStr);
                var valueEndIndex = valueDataStr.indexOf("\"");
                //alert("valueEndIndex:" + valueEndIndex);
                var value = "";
                value = valueDataStr.substring(0,valueEndIndex);
                //alert("value:" + value);
                return value;
            }
            else
            {
                return "";
            }
        }

        startIndex = valueStr.indexOf("<INPUT ");
    }
    return "";
}

function loadFormData(responseTxt, msgType)
{
    var chatHistoryDocument = parent.frames['chatHistory'].document;
    var formStartIndex = responseTxt.indexOf("<FORM");

    if(-1 != formStartIndex)
    {
        var text = responseTxt.substr(formStartIndex);

        var webSessionIdStr = getFormValue("webSessionId", text);
        chatHistoryDocument.getElementById("webSessionId").value = webSessionIdStr;
        var interactionIdStr = getFormValue("interactionId", text);
        chatHistoryDocument.getElementById("interactionId").value = interactionIdStr;
        var qStr = getFormValue("q", text);
        chatHistoryDocument.getElementById("q").value = qStr;
        var pushURLStr = getFormValue("pushURL", text);
        chatHistoryDocument.getElementById("pushURL").value = pushURLStr;
        var pushFileStr = getFormValue("pushFile", text);
        chatHistoryDocument.getElementById("pushFile").value = pushFileStr;
        var ctxIdStr = getFormValue("ctxId", text);
        chatHistoryDocument.getElementById("ctxId").value = ctxIdStr;
        var embeddedStr = getFormValue("embedded", text);
        chatHistoryDocument.getElementById("embedded").value = embeddedStr;
        var statusStr = getFormValue("status", text);
        chatHistoryDocument.getElementById("status").value = statusStr;
        var statusCodeStr = getFormValue("statusCode", text);
        chatHistoryDocument.getElementById("statusCode").value = statusCodeStr;
        var chatHistoryTextStr = getFormValue("chatHistoryText", text);
        chatHistoryDocument.getElementById("chatHistoryText").value = chatHistoryTextStr;
        var partiesStr = getFormValue("parties", text);
        chatHistoryDocument.getElementById("parties").value = partiesStr;
        var partyColorsStr = getFormValue("partyColors", text);
        chatHistoryDocument.getElementById("partyColors").value = partyColorsStr;
        var partySelectedStr = getFormValue("partySelected", text);
        chatHistoryDocument.getElementById("partySelected").value = partySelectedStr;
        var partiesChangedStr = getFormValue("partiesChanged", text);
        chatHistoryDocument.getElementById("partiesChanged").value = partiesChangedStr;
        var userIdStr = getFormValue("userId", text);
        chatHistoryDocument.getElementById("userId").value = userIdStr;
        var userNameStr = getFormValue("userName", text);
        chatHistoryDocument.getElementById("userName").value = userNameStr;
        var tempFileStr = getFormValue("tempFile", text);
        chatHistoryDocument.getElementById("tempFile").value = tempFileStr;
        var typingIndicatorStr = getFormValue("typingIndicator", text);
        chatHistoryDocument.getElementById("typingIndicator").value = typingIndicatorStr;
        var userTypingIndicatorStr = getFormValue("userTypingIndicator", text);
        chatHistoryDocument.getElementById("userTypingIndicator").value = userTypingIndicatorStr;
        var lastUserTypingIndicatorStr = getFormValue("lastUserTypingIndicator", text);
        chatHistoryDocument.getElementById("lastUserTypingIndicator").value = lastUserTypingIndicatorStr;
        var dotNetStr = getFormValue("dotNet", text);
        chatHistoryDocument.getElementById("dotNet").value = dotNetStr;
        var customInfoStr = getFormValue("customInfo", text);
        chatHistoryDocument.getElementById("customInfo").value = customInfoStr;
        var xICInteractionIDStr = getFormValue("xICInteractionID", text);
        chatHistoryDocument.getElementById("xICInteractionID").value = xICInteractionIDStr;
        var debugStr =" Updating data: webSessionIdStr:" + webSessionIdStr + ", interactionIdStr:" + interactionIdStr + ", qStr:" + qStr + ", pushURLStr:" + pushURLStr + ", pushFileStr:" + pushFileStr + ", ctxIdStr:";
        debugStr += ctxIdStr + ", embeddedStr:" + embeddedStr + ", statusStr:" + statusStr + ", statusCodeStr:" + statusCodeStr + ", chatHistoryTextStr:" + chatHistoryTextStr + ", partiesStr:";
        debugStr += partiesStr + ", partyColorsStr:" + partyColorsStr + ", partySelectedStr:" + partySelectedStr + ", partiesChangedStr:" + partiesChangedStr + ", userIdStr:" + userIdStr + ", userNameStr:";
        debugStr += userNameStr + ", tempFileStr:" + tempFileStr + ", typingIndicatorStr:" + typingIndicatorStr + ", userTypingIndicatorStr:" + userTypingIndicatorStr + ", lastUserTypingIndicatorStr:" + lastUserTypingIndicatorStr + ", dotNetStr:";
        debugStr += dotNetStr + ", customInfoStr:" + customInfoStr + ", xICInteractionIDStr:" + xICInteractionIDStr;

        DebugPrintWindow(parent.frames['chatText'].document, "loadFormData:"+debugStr);
    }
    else
    {
        //alert("formStartIndex:" + formStartIndex);
        DebugPrintWindow(parent.frames['chatText'].document, "loadFormData formStartIndex:"+formStartIndex);
    }
    ChatHistoryHtmlUpdateData(msgType);
}

//DSR code for querystatus AJAX call (lives here because the legacy code rebuilds chatHistory.html from the response)
function QueryAjax()
{
    var insertParams;

    DebugPrintWindow(parent.frames['chatText'].document, "ChatHistory.html QueryAjax: doing query");
    var chatHistoryDocument = parent.frames['chatHistory'].document;
    //if (chatHistoryDocument.frmInteraction.interactionId.value    != "" && chatHistoryDocument.frmInteraction.interactionId.value !=    "0")
    //{
        if (chatHistoryDocument.frmInteraction.statusCode.value !=    "4")
        {
            if (parent.frames['chatText'] != null)
            {
                chatHistoryDocument.frmInteraction.userTypingIndicator.value = parent.frames['chatText'].document.frmChat.userTypingIndicator.value;
            }

            var messageStr = "";//document.getElementById("message").value; //use chat form not chat history form for message

            var webSessionIdStr = chatHistoryDocument.getElementById("webSessionId").value;
            var interactionIdStr = chatHistoryDocument.getElementById("interactionId").value;
            var qStr = chatHistoryDocument.getElementById("q").value;
            var pushURLStr = chatHistoryDocument.getElementById("pushURL").value;
            var pushFileStr = chatHistoryDocument.getElementById("pushFile").value;
            var ctxIdStr = chatHistoryDocument.getElementById("ctxId").value;
            var embeddedStr = chatHistoryDocument.getElementById("embedded").value;
            var statusStr = chatHistoryDocument.getElementById("status").value;
            var statusCodeStr = chatHistoryDocument.getElementById("statusCode").value;
            var chatHistoryTextStr = chatHistoryDocument.getElementById("chatHistoryText").value;
            var partiesStr = chatHistoryDocument.getElementById("parties").value;
            var partyColorsStr = chatHistoryDocument.getElementById("partyColors").value;
            var partySelectedStr = chatHistoryDocument.getElementById("partySelected").value;
            var partiesChangedStr = chatHistoryDocument.getElementById("partiesChanged").value;
            var userIdStr = chatHistoryDocument.getElementById("userId").value;
            var userNameStr = chatHistoryDocument.getElementById("userName").value;
            var tempFileStr = chatHistoryDocument.getElementById("tempFile").value;
            var typingIndicatorStr = chatHistoryDocument.getElementById("typingIndicator").value;
            var userTypingIndicatorStr = chatHistoryDocument.getElementById("userTypingIndicator").value;
            var lastUserTypingIndicatorStr = chatHistoryDocument.getElementById("lastUserTypingIndicator").value;
            var dotNetStr = chatHistoryDocument.getElementById("dotNet").value;
            var customInfoStr = chatHistoryDocument.getElementById("customInfo").value;
            var xICInteractionIDStr = chatHistoryDocument.getElementById("xICInteractionID").value;

            insertParams = "a=queryStatus"+"&webSessionId="+webSessionIdStr+"&interactionId="+interactionIdStr+"&q="+qStr;
            insertParams += "&pushURL="+pushURLStr+"&pushFile="+pushFileStr+"&ctxId="+ctxIdStr+"&embedded="+embeddedStr;
            insertParams += "&status="+statusStr+"&statusCode="+statusCodeStr+"&chatHistoryText="+chatHistoryTextStr+"&parties="+partiesStr;
            insertParams += "&partyColors="+partyColorsStr+"&partySelected="+partySelectedStr+"&partiesChanged="+partiesChangedStr+"&type=html"+"&userId="+userIdStr;
            insertParams += "&userName="+userNameStr+"&message="+messageStr+"&tempFile="+tempFileStr+"&typingIndicator="+typingIndicatorStr+"&userTypingIndicator="+userTypingIndicatorStr;
            insertParams += "&lastUserTypingIndicator="+lastUserTypingIndicatorStr+"&dotNet="+dotNetStr+"&customInfo="+customInfoStr+"&xICInteractionID="+xICInteractionIDStr;

            var url = REL_SERVLET_PATH + "/chat";

            ExecuteAjaxScript(insertParams, url, true);

            DebugPrintWindow(parent.frames['chatText'].document, "ChatHistory.html QueryAjax: sent ajax request");

            if (chatHistoryDocument.frmInteraction.xICInteractionID.value != "0")
            {
                parent.frames['chatText'].document.frmChat.xICInteractionID.value = chatHistoryDocument.frmInteraction.xICInteractionID.value;
            }

            return false;
        }
    //}
    chatHistoryDocument.frmInteraction.message.value =    "";
}
//DSR end code for querystatus AJAX call

//chatHistory.html scripts
var chatHistoryHtmlUpdateDataTries = 0;
var queryTimer = null;

function ClearQueryTimer()
{
    if(null != queryTimer)
    {
        clearTimeout(queryTimer);
        //clearInterval(queryTimer);
        queryTimer = null;
        DebugPrintWindow(parent.frames['chatText'].document, "ClearQueryTimer()");
    }
}

function StartQueryTimer()
{
    //queryTimer = setInterval('query()', parent.POLL_RATE);
    queryTimer = setTimeout('query()', parent.POLL_RATE);
    DebugPrintWindow(parent.frames['chatText'].document, "StartQueryTimer()");
}

function updateChatHistoryWindow()
{
    var chatHistoryDocument = parent.frames['chatHistory'].document;
    DebugPrintWindow(parent.frames['chatText'].document, "ChatHistory.html:updateChatHistoryWindow()");

    // Update the chat parties' color index.
    var chatPartiesAndIndexes = chatHistoryDocument.frmInteraction.partyColors.value;

    chatPartiesAndIndexes = chatPartiesAndIndexes.substring(1, (chatPartiesAndIndexes.length - 1));
    var chatPartiesAndIndexesArray = chatPartiesAndIndexes.split("|");

    if(chatPartiesAndIndexesArray.length > 0)
    {
        var chatParties = new Array();

        for(count1 = 0; count1 < chatPartiesAndIndexesArray.length; count1++)
        {
            if(chatPartiesAndIndexesArray[count1] == null)
            {
                break;
            }
            else
            {
                var delimiterIndex = chatPartiesAndIndexesArray[count1].indexOf("=");

                if(delimiterIndex > -1)
                {
                   var chatParty = chatPartiesAndIndexesArray[count1].substring(0, delimiterIndex);

                   if(chatParty.charAt(0) == ' ')
                   {
                      chatParty = chatParty.substring(1);
                   }
                   var chatPartyIndex = chatPartiesAndIndexesArray[count1].substring((delimiterIndex + 1), chatPartiesAndIndexesArray[count1].length);

                   chatParties[chatPartyIndex] = chatParty;
                }
            }
        }

        DebugPrintWindow(parent.frames['chatText'].document, "ChatHistory.html:updateChatHistoryWindow() - chatParties: " + chatParties.toString());

        // Now, display the text in the appropriate color.
        var updatedChatHistory = '<table cellpadding=1 cellspacing=1 width=100% ID="Table1">';
        var chatHistoryTextLines = chatHistoryDocument.frmInteraction.chatHistoryText.value.split('\n');
        chatHistoryDocument.frmInteraction.chatHistoryText.value ="";

        for(count2 = 0; count2 < chatHistoryTextLines.length; count2++)
        {
            var chatHistoryTextLine = chatHistoryTextLines[count2].split(':');
            var chatPartyInTextLine = chatHistoryTextLine[0];

            for(count3 = 0; count3 < chatParties.length; count3++)
            {
                if(chatPartyInTextLine == chatParties[count3])
                {
                    break;
                }
            }
            if(count3 < chatParties.length)
            {
                updatedChatHistory += '<tr><td><span id="LINE' + count2 + '" class="DHTML_CHAT_USER_COLOR' + count3 + '">' + chatHistoryTextLines[count2] + '</span></td></tr>';
            }
            else
            {
                // updatedChatHistory += '<tr><td><span id="LINE' + count2 + '">' + chatHistoryTextLines[count2] + '</span></td></tr>';
                updatedChatHistory += '<tr><td><span id="LINE' + count2 + '" class="DHTML_CHAT_USER_COLOR1">' + chatHistoryTextLines[count2] + '</span></td></tr>';
            }
        }
        updatedChatHistory += '</table>';
        if(parent.frames['chatHistoryText'] != null)
        {
            if(parent.frames['chatHistoryText'].document.body != null)
            {
                parent.frames['chatHistoryText'].document.body.innerHTML += updatedChatHistory;
                parent.frames['chatHistoryText'].window.scrollTo(0, parent.frames['chatHistoryText'].document.body.scrollHeight);
            }
        }

        // Update the typing indicator.
        chatHistoryDocument.frmInteraction.userTypingIndicator.value = "false";
        chatHistoryDocument.frmInteraction.lastUserTypingIndicator.value = "false";
    }
}

function initParams()
{
    var chatHistoryDocument = parent.frames['chatHistory'].document;

    chatHistoryDocument.frmInteraction.q.value = "";
    if (parent.QUEUE !=    null)
    {
        chatHistoryDocument.frmInteraction.q.value = parent.QUEUE;
    }

    chatHistoryDocument.frmInteraction.userId.value = "";
    if (parent.USERID != null)
    {
        chatHistoryDocument.frmInteraction.userId.value = parent.USERID;
    }

    chatHistoryDocument.frmInteraction.userName.value = "";
    if (parent.PARTY_NAME != null)
    {
        chatHistoryDocument.frmInteraction.userName.value = parent.PARTY_NAME;
    }

    chatHistoryDocument.frmInteraction.customInfo.value = "";
    if (parent.CUSTOM_INFO != null)
    {
        chatHistoryDocument.frmInteraction.customInfo.value = escape(parent.CUSTOM_INFO);
    }

    if (isNET)
    {
        chatHistoryDocument.frmInteraction.dotNet.value = "true";
    }
    else
    {
        chatHistoryDocument.frmInteraction.dotNet.value = "false";
    }

    if (parent.WEBSESSIONID != null && parent.WEBSESSIONID != "0")
    {
        chatHistoryDocument.frmInteraction.webSessionId.value = parent.WEBSESSIONID;
    }

    if (parent.INTERACTIONID != null && parent.INTERACTIONID != "0")
    {
        chatHistoryDocument.frmInteraction.interactionId.value = parent.INTERACTIONID;
    }
}

function initParties()
{
    var chatHistoryDocument = parent.frames['chatHistory'].document;

    if (parent.frames['chatParties'] != null)
    {
        if (parent.frames['chatParties'].document.frmParties != null)
        {
            var partyItems = parent.frames['chatParties'].document.frmParties.parties.options;

            for (i = 0; i < partyItems.length; i++)
            {
                partyItems[i] = null;
            }

            var str = chatHistoryDocument.frmInteraction.parties.value;
            str = str.substring(1, str.length-1);
            var partyArray = str.split("|");
            var key = "";
            var value = "";

            for (i = 0; i < partyArray.length; i++)
            {
                if (partyArray[i] == null) {
                    break;
                }

                var k = partyArray[i].indexOf("=");
                if (k > -1)
                {
                    key = partyArray[i].substring(0, k);
                    value = partyArray[i].substring(k+1, partyArray[i].length);

                    ++partyItems.length;
                    partyItems[i].value = key;
                    partyItems[i].text = value;

                    if (value == document.frmInteraction.partySelected.value) {
                        partyItems[i].selected = true;
                    }
                }
            }

            if (parent.frames['chatAgent'] != null)
            {
                parent.frames['chatAgent'].document.location = parent.frames['chatAgent'].document.location;
            }
        }
    }
}

function query()
{
    //DSR ajax query called from previous query function
    QueryAjax();
}

function uploadFile()
{
    var chatHistoryDocument = parent.frames['chatHistory'].document;
    chatHistoryDocument.frmInteraction.a.value = "uploadFile";
    chatHistoryDocument.frmInteraction.action = REL_SERVLET_PATH + "/chat?a=uploadFile";
    chatHistoryDocument.frmInteraction.submit();
}

function pushFile(ref)
{
    var chatHistoryDocument = parent.frames['chatHistory'].document;
    if (ref != null && ref != "")
    {
        ref = "http://" + chatHistoryDocument.domain + "/" + ref;
        windowFeatures = "width=800,height=440,dependent=no,toolbar=yes,location=yes,directories=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes";
        window.open(ref, "URLWindow", windowFeatures);
    }
}

function pushURL(ref)
{
    if (ref != null && ref != "")
    {
        windowFeatures = "width=800,height=440,dependent=no,toolbar=yes,location=yes,directories=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes";
        window.open(ref, "URLWindow", windowFeatures);
    }
}

function ChatHistoryHtmlUpdateData(messageType)
{
    DebugPrintWindow(parent.frames['chatText'].document, "ChatHistoryHtmlUpdateData");

    var chatHistoryDocument = parent.frames['chatHistory'].document;

    //DSR upon startup update form action to reference appropriate websvc tomcat directory
    if(null != chatHistoryDocument.frmInteraction.action)
    {
        chatHistoryDocument.frmInteraction.action= REL_SERVLET_PATH + "/chat?a=queryStatus";
    }

    try
    {
        if (chatHistoryDocument.frmInteraction.webSessionId.value == "") {
            initParams();
        }

        var statusCode = chatHistoryDocument.frmInteraction.statusCode.value;

        var chatFrame = null;
        if (parent.frames['chatText'] != null)
        {
            if (parent.frames['chatText'].document.frmChat != null)
            {
                chatFrame = parent.frames['chatText'].document.frmChat
            }
        }

        if (chatFrame != null)
        {
            if (statusCode.length == 0)
            {
                statusCode = "0";
            }

            // NOCONNECTION
            if (statusCode == "0" || statusCode == "")
            {
                chatFrame.submit1.disabled = true;
                chatFrame.submit2.disabled = true;
            }

            // CONNECTING
            if (statusCode == "1")
            {
                chatFrame.submit1.disabled = false;
                chatFrame.submit2.disabled = true;
            }

            // ALERTING
            if (statusCode == "2")
            {
                chatFrame.submit1.disabled = false;
                chatFrame.submit2.disabled = false;
            }

            // CONNECTED
            if (statusCode == "3")
            {
                chatFrame.submit1.disabled = false;
                chatFrame.submit2.disabled = false;
            }

            // DISCONNECTED
            if (statusCode == "4")
            {
                chatFrame.submit1.disabled = true;
                chatFrame.submit2.disabled = true;
                ClearQueryTimer();
                if (parent.END_URL != null)
                {
                    chatHistoryDocument.frmInteraction.pushURL.value = "http://" + parent.END_URL;
                }

            }

            chatHistoryDocument.frmInteraction.statusCode.value = statusCode;
            chatHistoryDocument.frmInteraction.status.value = getStatusText(statusCode);

            var partyColorKey = null;
            var partyColorValue = null;

            if ((chatHistoryDocument.frmInteraction.parties.value != "") && (chatHistoryDocument.frmInteraction.partiesChanged.value == "true"))
            {
                initParties();
            }

            if ((chatHistoryDocument.frmInteraction.chatHistoryText !=    null) && (chatHistoryDocument.frmInteraction.chatHistoryText.value.length > 0))
            {
                updateChatHistoryWindow();
            }

            pushURL(chatHistoryDocument.frmInteraction.pushURL.value);

            if (chatHistoryDocument.frmInteraction.pushFile.value != "")
            {
                pushFile(chatHistoryDocument.frmInteraction.pushFile.value);
                chatHistoryDocument.frmInteraction.pushFile.value = "";
                chatHistoryDocument.frmInteraction.tempFile.value = "";
            }

            if (chatHistoryDocument.frmInteraction.interactionId.value != "")
            {
                chatFrame.webSessionId.value = chatHistoryDocument.frmInteraction.webSessionId.value;
                chatFrame.interactionId.value = chatHistoryDocument.frmInteraction.interactionId.value;
                chatFrame.q.value = chatHistoryDocument.frmInteraction.q.value;
                chatFrame.statusCode.value = statusCode;
            }

            if (parent.frames['chatStatus'] != null)
            {
                parent.frames['chatStatus'].document.location = parent.frames['chatStatus'].document.location;
            }

            if (parent.frames['chatIndicator'] != null)
            {
                parent.frames['chatIndicator'].document.location = parent.frames['chatIndicator'].document.location;
            }

            if (statusCode == "0")
            {
                //DSR removed for ajax change document.frmInteraction.submit();
                //DebugPrintWindow(parent.frames['chatText'].document, "doing query status code: 0");
                //document.frmInteraction.submit();
                //query();
                StartQueryTimer();
            }
            else if (chatHistoryDocument.frmInteraction.tempFile.value != "")
            {
                uploadFile();
            }
            else if (statusCode != "4")
            {
                //DebugPrintWindow(parent.frames['chatText'].document, "setTimeout for query");

                if("queryStatus" == messageType)
                {
                    StartQueryTimer();
                }
            }
        }
        else
        {
            DebugPrintWindow(parent.frames['chatText'].document, "startup - chatFrame == null");
            ReTry();
        }
    }
    catch(ex)
    {
        DebugPrintWindow(parent.frames['chatText'].document, "startup - caught exception: " + ex.message);
        ReTry();
    }
}


function ReTry()
{
    DebugPrintWindow(parent.frames['chatText'].document, "retry");

    if (chatHistoryHtmlUpdateDataTries < 5)
    {
        //++tries;
        setTimeout('ChatHistoryHtmlUpdateData()', 3000);
    }
    else
    {
        alert("Unable to contact server");
    }
}
/////end chatHistory.html scripts


//DSR added for testing purposes
//
//DSR added generic create div function for use with debug window prints
function CreateDiv(root, divName, divClass, styleString, innerHTML)
{

    newDiv = root.getElementById(divName);

    if(null == newDiv)
    {
        newDiv = root.createElement("div");
        newDiv.className = divClass;
        newDiv.id = divName;
        newDiv.style.cssText = styleString;
        if(null != innerHTML)
        {
            newDiv.innerHTML = innerHTML;
        }

        root.body.appendChild(newDiv);

        var addedDiv = root.getElementById(newDiv.id);

        return addedDiv;
    }
    else
    {
        if(null != innerHTML)
        {
            newDiv.innerHTML += "<br>" + innerHTML;
        }
        return newDiv;
    }

}
//
//DSR call this function with the root of the page you want the debug print window to be on
function DebugPrintWindow(root, text)
{
    if(-1 == parent.name.indexOf("Debug")) //check if debug mode enabled by html debug check box
    {
        return;
    }
    var styleString = "position:absolute;left:450px;top:5px;z-index:10;width:350px;height:130px;";
    styleString += "border:1px solid rgb(194,225,254);font: bold 8px verdana;background-color:rgb(0,0,0);text-align:left;";
    styleString += "color:rgb(255,225,255);padding:0px;overflow:auto;";

    var outputDiv = CreateDiv(root, "DebugOutput", "className", styleString, text);
}
//
//
function ChatQuery()
{
    DebugPrintWindow(parent.document, "ChatHistory.html: doing query");
    //return;

    if (parent.frames['chatHistory'].document.frmInteraction.interactionId.value    != "" && parent.frames['chatHistory'].document.frmInteraction.interactionId.value !=    "0")
    {
        if (parent.frames['chatHistory'].document.frmInteraction.statusCode.value !=    "4")
        {
            if (document != null)
            {
                parent.frames['chatHistory'].document.frmInteraction.userTypingIndicator.value = document.frmChat.userTypingIndicator.value;
            }
            parent.frames['chatHistory'].document.frmInteraction.action= REL_SERVLET_PATH + "/chat?a=queryStatus";
            parent.frames['chatHistory'].document.frmInteraction.submit();

            if (parent.frames['chatHistory'].document.frmInteraction.xICInteractionID.value != "0")
            {
                document.frmChat.xICInteractionID.value = parent.frames['chatHistory'].document.frmInteraction.xICInteractionID.value;
            }

            return false;
        }
    }
    parent.frames['chatHistory'].document.frmInteraction.message.value =    "";
}
//end DSR add

// ==========================================================
// Emulates a "sleep" method.  We need to do this to give the
// other frames some time to load, otherwise, we might get a
// permission denied error.
// ==========================================================
function timeout(milliseconds)
{
    var initialDate = new Date();
    var currentDate = new Date();
    while ((currentDate-initialDate)<milliseconds)
    {
        currentDate = new Date();
    }
}

// ==========================================================
// Replaced the old disconnectChat() with this function on
// 10/7/2010 for Issue IC-75225.
// ==========================================================
function disconnectChatAjax(form) {
    var webSessionIdStr = form.webSessionId.value;    
    var interactionIdStr = form.interactionId.value;    
    var qStr = form.q.value;    
    var xICInteractionIDStr = form.xICInteractionID.value;
          
    insertParams = "a=disconnect"+"&webSessionId="+webSessionIdStr+"&interactionId="+interactionIdStr+"&q="+qStr+"&type=html&xICInteractionID="+xICInteractionIDStr;
        
    form.submit1.disabled = true;
        
    var url = REL_SERVLET_PATH + "/chat";
   
    ExecuteAjaxScript(insertParams, url, true);
}

//////////////////////////////////////////////////////////
function getStatusText(statusCode)
{
    var status = "";

    if (statusCode.length == 0)
    {
        statusCode = "0";
    }

    // NOCONNECTION
    if (statusCode == "0")
    {
        status = parent.NOCONNECTION_TEXT;
    }

    // CONNECTING
    if (statusCode == "1")
    {
        status = parent.CONNECTING_TEXT;
    }

    // ALERTING
    if (statusCode == "2")
    {
        status = parent.ALERTING_TEXT;
    }

    // CONNECTED
    if (statusCode == "3")
    {
        status = parent.CONNECTED_TEXT;
    }

    // DISCONNECTED
    if (statusCode == "4")
    {
        status = parent.DISCONNECTED_TEXT;
    }

    return status;
}

//////////////////////////////////////////////////////////
function getStatusImage(statusCode)
{
    // NOCONNECTION
    if (statusCode == "0" || statusCode == "")
    {
        image = "/I3Root/Images/DisconnectedStatic.gif";
    }

    // ALERTING
    if (statusCode == "2")
    {
        image = "/I3Root/Images/ConnectingDynamic.gif";
    }

    // CONNECTING
    if (statusCode == "1")
    {
        image = "/I3Root/Images/ConnectingDynamic.gif";
    }

    // CONNECTED
    if (statusCode == "3")
    {
        image = "/I3Root/Images/ConnectingStatic.gif";
    }

    // DISCONNECTED
    if (statusCode == "4")
    {
        image = "/I3Root/Images/DisconnectedStatic.gif";
    }

    return image;
}

//////////////////////////////////////////////////////////
function setUpPolling()
{
    setTimeout('querySession()', POLL_RATE);
}

//////////////////////////////////////////////////////////
function querySession()
{
    var startChat = getCookie(PUSHCHAT_KEY);
    var startCollab = getCookie(PUSHCOLLAB_KEY);

    var pushURL = getCookie(PUSHURL_KEY);
    var pushMsg = getCookie(PUSHMSG_KEY);

    if (startChat == "true" && !chatStarted)
    {
        var interactionId = getCookie(INTERACTIONID_KEY);
        var target = getCookie(TARGET_KEY);
        var sessionId = getCookie(SESSIONID_KEY);

        var html = genHTML_chat("User Queue:"+target, "0", sessionId, false, false, false, true);
        windowFeatures = "width=800,height=440,dependent=no,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes";
        var win = window.open("", "Chat", windowFeatures);
        win.document.write(html);

        setCookie(PUSHCHAT_KEY, "", "/");
        startChat = "";
        chatStarted = true;
    }

    if (startCollab == "true" && !collabStarted)
    {
        var interactionId = getCookie(INTERACTIONID_KEY);
        var target = getCookie(TARGET_KEY);
        var sessionId = getCookie(SESSIONID_KEY);
        var launchURL = getCookie(LAUNCHURL_KEY);

        var html = genHTML_trackerCollaboration("User Queue:"+target, sessionId, launchURL);
        windowFeatures = "width=500,height=40,dependent=no,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no";
        var win = window.open("", "Collaboration", windowFeatures);
        win.document.write(html);

        setCookie(PUSHCOLLAB_KEY, "", "/");
        startCollab = "";
        collabStarted = true;
    }

    if (pushURL != null && pushURL.length > 0)
    {
        if (pushURL.indexOf("http") == -1)
        {
            pushURL = "http://" + pushURL;
        }

        windowFeatures = "width=800,height=440,dependent=no,toolbar=yes,location=yes,directories=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes";
        var win = window.open(pushURL, "URL", windowFeatures);

        setCookie(PUSHURL_KEY, "", "/");
        pushURL = null;
    }

    if (pushMsg != null && pushMsg !="") {
        alert( pushMsg );
        setCookie(PUSHMSG_KEY, "", "/");
        pushMsg = null;
    }

    document.images['tracker'].src = REL_SERVLET_PATH + "/tracker?a=queryStatus";
    eval(document.images['tracker'].src);
    setUpPolling();
}

//////////////////////////////////////////////////////////
function loadTracker(page,queue)
{
    var userId = getCookie(LOGINNAME_KEY);
    if (userId == null)
    {
        userId = "";
    }

    var dotNet = "false";
    if (isNET)
    {
        dotNet = "true";
    }

    var retVal = "";

    var src = "";

    src = REL_SERVLET_PATH + "/tracker?a=trackPage&page=" + page + "&queue="+ queue + "&poll=" + POLLING + "&userId=" + userId + "&dotNet=" + dotNet;

    retVal += '<html>' + ENDL;
    retVal += '<img src=' + src + ' width=1 length=1 id=tracker>' + ENDL;
//  retVal += '        <!misc HTML code goes here -->' + ENDL;
    retVal += '</html>';

    document.write(retVal);

    if (POLLING == "true") setUpPolling();
}

function showCookies()
{
    alert( "image onLoad cookies - " + document.cookie );
}


//////////////////////////////////////////////////////////
function genHTML_trackerCollaboration (p_qname, p_sessionId, p_launchURL)
{
    var retVal = "";
    var index = navigator.appVersion.indexOf("MSIE ");

    //DSR added for scr #:43921
    if (isLoggedIn ())
    {
        PARTY_NAME = getLoginId();
    }
    else
    {
        PARTY_NAME = "Chat User";
    }

    if (index > -1)
    {
        if (parseInt(navigator.appVersion.substring(index)) < 6)
        {
            retVal += '<HTML>BODY><br><br>&nbsp;&nbsp;Version 6.0 or later of Internet Explorer is required to run Collaboration.</BODY></HTML>';
            return retVal;
        }
    }

    var postUrl = "http://" + parent.location.host + REL_SERVLET_PATH + "/";
    var cabVersion = "1,0,0,8";

    if (p_launchURL.length == 0) {
        p_launchURL = LAUNCHURL;
    }

    retVal = '<HTML>' + ENDL;

    retVal += '<script type="text/JavaScript"><!--' + ENDL;
    retVal += 'function closeIt() { window.close(); }' + ENDL;
    retVal += '//--></script>' + ENDL;

    retVal += '<BODY style="margin:0px;" scroll="no">' + ENDL;

    retVal += '<OBJECT id="Downloader" ';
    retVal += 'codebase="AxDownloader.cab#version='+cabVersion+'"';
    retVal += 'style="WIDTH: 100%; HEIGHT: 100%" ';
    retVal += 'classid="clsid:A01F3506-7399-43CD-941E-C12EEC37E030" >' + ENDL;

    retVal += '<param name="LAUNCHURL" value=/LAUNCHURL="' + p_launchURL + '">' + ENDL;
    retVal += ('<param name="NOCHAT" value=/NOCHAT="' + NOCHAT + '">') + ENDL;
    retVal += ('<param name="NOCOLLAB" value=/NOCOLLAB="' + NOCOLLAB + '">') + ENDL;
    retVal += '<param name="PARTY_NAME" value=/PARTY_NAME="' + removeSpaces(PARTY_NAME) + '">' + ENDL;
    retVal += ('<param name="QUEUE" value=/QUEUE="' + removeSpaces(p_qname) + '">') + ENDL;
    retVal += ('<param name="POSTURL" value=/POSTURL="' + postUrl + '">') + ENDL;
    retVal += '<param name="USERID" value=/USERID="' + removeSpaces(USERID) + '">' + ENDL;
    retVal += ('<param name="USER_COLOR0" value=/USER_COLOR0="' + DOT_NET_CHAT_USER_COLOR0 + '">') + ENDL;
    retVal += ('<param name="USER_COLOR1" value=/USER_COLOR1="' + DOT_NET_CHAT_USER_COLOR1 + '">') + ENDL;
    retVal += ('<param name="USER_COLOR2" value=/USER_COLOR2="' + DOT_NET_CHAT_USER_COLOR2 + '">') + ENDL;
    retVal += ('<param name="USER_COLOR3" value=/USER_COLOR3="' + DOT_NET_CHAT_USER_COLOR3 + '">') + ENDL;
    retVal += ('<param name="USER_COLOR4" value=/USER_COLOR4="' + DOT_NET_CHAT_USER_COLOR4 + '">') + ENDL;
    retVal += '</OBJECT>';

    retVal += '</BODY></HTML>';

    // Removing because it looks like the browser window is
    // closing before the control has a chance to start.
    // SCR 40622.  -Jared Alford
    // retVal += '<script type="text/JavaScript"><!--' + ENDL;
    // retVal += 'setTimeout("closeIt()", 60000)' + ENDL;
    // retVal += '//--></script>' + ENDL;

    return retVal;
}

//////////////////////////////////////////////////////////
function genHTML_collaboration (p_qname)
{
    var retVal = "";
    var index = navigator.appVersion.indexOf("MSIE ");
    if (index > -1)
    {
        if (parseInt(navigator.appVersion.substring(index)) < 6)
        {
            retVal += '<HTML>BODY><br><br>&nbsp;&nbsp;Version 6.0 or later of Internet Explorer is required to run Collaboration.</BODY></HTML>';
            return retVal;
        }
    }

    //DSR added for scr #:43921
    if (isLoggedIn ())
    {
        PARTY_NAME = getLoginId();
    }
    else
    {
        PARTY_NAME = "Chat User";
    }

    var postUrl = "http://" + parent.location.host+ REL_SERVLET_PATH + "/";
    var cabVersion = "1,0,0,8";

    retVal = '<HTML>' + ENDL;

    retVal += '<script type="text/JavaScript"><!--' + ENDL;
    retVal += 'function closeIt() { window.close(); }' + ENDL;
    retVal += '//--></script>' + ENDL;

    retVal += '<BODY style="margin:0px;" scroll="no">' + ENDL;

    retVal += '<OBJECT id="Downloader" ';
    retVal += 'codebase="AxDownloader.cab#version='+cabVersion+'"';
    retVal += 'style="WIDTH: 100%; HEIGHT: 100%" ';
    retVal += 'classid="clsid:A01F3506-7399-43CD-941E-C12EEC37E030" >' + ENDL;

    retVal += '<param name="LAUNCHURL"    value=/LAUNCHURL="'    + LAUNCHURL            + '">' + ENDL;
    retVal += ('<param name="NOCHAT"    value=/NOCHAT="'    + NOCHAT            + '">') + ENDL;
    retVal += ('<param name="NOCOLLAB"    value=/NOCOLLAB="'    + NOCOLLAB            + '">') + ENDL;
    retVal += '<param name="PARTY_NAME"    value=/PARTY_NAME="'    + removeSpaces(PARTY_NAME)    + '">' + ENDL;
    retVal += ('<param name="QUEUE"        value=/QUEUE="'        + removeSpaces(p_qname)        + '">') + ENDL;
    retVal += ('<param name="POSTURL"    value=/POSTURL="'    + postUrl            + '">') + ENDL;
    retVal += '<param name="USERID"        value=/USERID="'    + removeSpaces(USERID)        + '">' + ENDL;
    retVal += ('<param name="USER_COLOR0"    value=/USER_COLOR0="'    + DOT_NET_CHAT_USER_COLOR0    + '">') + ENDL;
    retVal += ('<param name="USER_COLOR1"    value=/USER_COLOR1="'    + DOT_NET_CHAT_USER_COLOR1    + '">') + ENDL;
    retVal += ('<param name="USER_COLOR2"    value=/USER_COLOR2="'    + DOT_NET_CHAT_USER_COLOR2    + '">') + ENDL;
    retVal += ('<param name="USER_COLOR3"    value=/USER_COLOR3="'    + DOT_NET_CHAT_USER_COLOR3    + '">') + ENDL;
    retVal += ('<param name="USER_COLOR4"    value=/USER_COLOR4="'    + DOT_NET_CHAT_USER_COLOR4    + '">') + ENDL;
    retVal += '</OBJECT>';

    retVal += '</BODY></HTML>';

    // Removing because it looks like the browser window is
    // closing before the control has a chance to start.
    // SCR 40622.  -Jared Alford
    // retVal += '<script type="text/JavaScript"><!--' + ENDL;
    // retVal += 'setTimeout("closeIt()", 60000)' + ENDL;
    // retVal += '//--></script>' + ENDL;

    return retVal;
}

//////////////////////////////////////////////////////////
function genHTML_instant_question(p_qname, p_useDebug, p_usePopup)
{
    var retVal = "";

    retVal = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"' + ENDL;
    retVal += '"http://www.w3.org/TR/html4/strict.dtd">' + ENDL;
    retVal += genHTMLHeader(IQ_NAME, "0", "0", p_useDebug, p_qname, p_usePopup);
    retVal += '    <frameset cols="*,150">' + ENDL;
    retVal += '        <frameset rows="1,*,30">' + ENDL;
    retVal += '            <frame src="/I3Root/IQQuery.html" name="iqQuery" id="iqQuery" frameborder="1" marginwidth="0" marginheight="0" scrolling="no">' + ENDL;
    retVal += '            <frame src="/I3Root/IQAnswer.html" name="iqAnswer" id="iqAnswer" frameborder="1" marginwidth="0" marginheight="0" scrolling="no">' + ENDL;
    retVal += '            <frame src="/I3Root/IQ.html" name="iq" id="iq" frameborder="1" marginwidth="0" marginheight="0" scrolling="no">' + ENDL;
    retVal += '        </frameset>' + ENDL;
    retVal += '        <frameset rows="150,*">' + ENDL;
    retVal += '            <frame src="/I3Root/Logo.html" name="iqLogo" id="iqLogo" frameborder="1" marginwidth="0" marginheight="0" scrolling="no">' + ENDL;
    retVal += '            <frame src="/I3Root/IQConnection.html" name="iqConnection" id="iqConnection" frameborder="1" marginwidth="0" marginheight="0" scrolling="auto">' + ENDL;
    retVal += '        </frameset>' + ENDL;
    retVal += '    </frameset>' + ENDL;
    retVal += '</html>' + ENDL;

    return retVal;
}

//////////////////////////////////////////////////////////
function genHTML_callback(p_qname, p_useDebug, p_usePopup)
{
    var retVal = "";

    retVal = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"' + ENDL;
    retVal += '"http://www.w3.org/TR/html4/strict.dtd">' + ENDL;
    retVal += genHTMLHeader(CB_NAME, "0", "0", p_useDebug, p_qname, p_usePopup);
    retVal += '    <frameset cols="*,180">' + ENDL;
    retVal += '        <frameset rows="1,300,*" >' + ENDL;
    retVal += '            <frame src="/I3Root/CBResponse.html" name="cbResponse" id="cbResponse" frameborder="1" scrolling="yes">' + ENDL;
    retVal += '            <frame src="/I3Root/CBInfo.html" name="cbInfo" id="cbInfo" frameborder="1" scrolling="no">' + ENDL;
    retVal += '            <frame src="/I3Root/CBResponseText.html" name="cbResponseText" id="cbResponseText" frameborder="1" scrolling="yes">' + ENDL;
    retVal += '        </frameset>' + ENDL;
    retVal += '        <frameset rows="*">' + ENDL;
    retVal += '            <frame src="/I3Root/Logo.html" name="iqLogo" id="iqLogo" frameborder="1" scrolling="no">' + ENDL;
    retVal += '        </frameset>' + ENDL;
    retVal += '    </frameset>' + ENDL;
    retVal += '</html>' + ENDL;

    return retVal;
}

//////////////////////////////////////////////////////////
function genHTML_chat(p_qname, p_interactionId, p_sessionId, p_useDebug, p_usePopup, p_useApplet, p_usehtml)
{
    var retVal = "";

    //DSR added for scr #:43921
    if(isLoggedIn())
    {
        PARTY_NAME = getLoginId();
    }
    else
    {
        PARTY_NAME = "Chat User";
    }
    if(!p_usehtml && !p_useApplet)
    {
        var postUrl = "http://" + parent.location.host+ REL_SERVLET_PATH + "/";
        var cabVersion = "1,0,0,7";
        var noChat = "false";
        var noCollab = "true";

        retVal = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' + ENDL;
        retVal += '<html>' + ENDL;
        retVal += '    <head>' + ENDL;
        retVal += '        <meta name="author" content="Interactive Intelligence">' + ENDL;
        retVal += '        <meta http-equiv="content-type" content="text/html; charset=utf-8">' + ENDL;
        retVal += '        <meta http-equiv="cache-control" content="no-cache">' + ENDL;
        retVal += '        <meta http-equiv="expires" content="0">' + ENDL;
        retVal += '        <title>' + CHAT_NAME + '</title>' + ENDL;
        retVal += '        <script type="text/javascript">' + ENDL;
        retVal += '        function closeIt()' + ENDL;
        retVal += '        {' + ENDL;
        retVal += '            window.close();' + ENDL;
        retVal += '        }' + ENDL;
        retVal += '        </script>' + ENDL;
        retVal += '        <style type="text/css">' + ENDL;
        retVal += '            body.c2 {margin:0px;}' + ENDL;
        retVal += '            object.c1 {WIDTH: 100%; HEIGHT: 100%}' + ENDL;
        retVal += '        </style>' + ENDL;
        retVal += '    </head>' + ENDL;
        retVal += '    <body class="c2">' + ENDL;
        retVal += '        <object id="Downloader" codebase="AxDownloader.cab#version=' + cabVersion + '" class="c1" classid="clsid:A01F3506-7399-43CD-941E-C12EEC37E030">' + ENDL;
        retVal += '            <param name="WEBSESSIONID" value=/WEBSESSIONID="' + p_sessionId + '">' + ENDL;
        retVal += '            <param name="INTERACTIONID" value=/INTERACTIONID="' + p_interactionId + '">' + ENDL;
        retVal += '            <param name="NOCHAT" value=/NOCHAT="' + noChat + '">' + ENDL;
        retVal += '            <param name="NOCOLLAB" value=/NOCOLLAB="' + noCollab + '">' + ENDL;
        retVal += '            <param name="PARTY_NAME" value=/PARTY_NAME="' + removeSpaces(PARTY_NAME) + '">' + ENDL;
        retVal += '            <param name="QUEUE" value=/QUEUE="' + removeSpaces(p_qname) + '">' + ENDL;
        retVal += '            <param name="POSTURL" value=/POSTURL="' + postUrl + '">' + ENDL;
        retVal += '            <param name="USERID" value=/USERID="' + removeSpaces(USERID) + '">' + ENDL;
        retVal += '            <param name="USER_COLOR0" value=/USER_COLOR0="' + DOT_NET_CHAT_USER_COLOR0 + '">' + ENDL;
        retVal += '            <param name="USER_COLOR1" value=/USER_COLOR1="' + DOT_NET_CHAT_USER_COLOR1 + '">' + ENDL;
        retVal += '            <param name="USER_COLOR2" value=/USER_COLOR2="' + DOT_NET_CHAT_USER_COLOR2 + '">' + ENDL;
        retVal += '            <param name="USER_COLOR3" value=/USER_COLOR3="' + DOT_NET_CHAT_USER_COLOR3 + '">' + ENDL;
        retVal += '            <param name="USER_COLOR4" value=/USER_COLOR4="' + DOT_NET_CHAT_USER_COLOR4 + '">' + ENDL;
        retVal += '            <param name="LAUNCHURL" value=/LAUNCHURL="' + LAUNCHURL + '">' + ENDL;
        retVal += '        </object>' + ENDL;
        retVal += "    </body>" + ENDL;
        retVal += "</html>" + ENDL;

        // Removing because it looks like the browser window is
        // closing before the control has a chance to start.
        // SCR 40622.  -Jared Alford
        // retVal += '<script type="text/javascript"><!--' + ENDL;
        // retVal += 'setTimeout("closeIt()", 10000)' + ENDL;
        // retVal += '//--></script>' + ENDL;
    }
    else if(p_useApplet)
    {
        retVal = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' + ENDL;
        retVal += '<html>' + ENDL;
        retVal += '    <head>' + ENDL;
        retVal += '        <meta name="author" content="Interactive Intelligence">' + ENDL;
        retVal += '        <meta http-equiv="content-type" content="text/html; charset=utf-8">' + ENDL;
        retVal += '        <meta http-equiv="cache-control" content="no-cache">' + ENDL;
        retVal += '        <meta http-equiv="expires" content="0">' + ENDL;
        retVal += '        <title>' + CHAT_NAME + '</title>' + ENDL;
        retVal += '    </head>' + ENDL;
        retVal += '    <body>' + ENDL;
        if(navigator.appVersion.indexOf("MSIE")!=-1)
        {
            retVal += genIEHeader(CHAT_NAME,
                                  CHAT_CODE,
                                  CHAT_CODEBASE,
                                  CHAT_ARCHIVE,
                                  CHAT_WIDTH,
                                  CHAT_HEIGHT,
                                  p_useDebug,
                                  p_qname,
                                  p_usePopup);
            retVal += '            <param name="POLL_RATE" value="' + POLL_RATE + '">' + ENDL;
            retVal += '            <param name="PROTOCOL" value="' + PROTOCOL + '">' + ENDL;
            retVal += '            <param name="USE_DOUBLE_BYTE" value="' + USE_DOUBLE_BYTE + '">' + ENDL;
            retVal += '            <param name="PARTY_EMAIL" value="' + PARTY_EMAIL + '">' + ENDL;
            retVal += '            <param name="PARTY_PHONE" value="' + PARTY_PHONE + '">' + ENDL;
            retVal += '            <param name="PARTY_NAME" value="' + PARTY_NAME + '">' + ENDL;
            retVal += '            <param name="USER_COLOR0" value="' + JAVA_APPLET_CHAT_USER_COLOR0 + '">' + ENDL;
            retVal += '            <param name="USER_COLOR1" value="' + JAVA_APPLET_CHAT_USER_COLOR1 + '">' + ENDL;
            retVal += '            <param name="USER_COLOR2" value="' + JAVA_APPLET_CHAT_USER_COLOR2 + '">' + ENDL;
            retVal += '            <param name="USER_COLOR3" value="' + JAVA_APPLET_CHAT_USER_COLOR3 + '">' + ENDL;
            retVal += '            <param name="USER_COLOR4" value="' + JAVA_APPLET_CHAT_USER_COLOR4 + '">' + ENDL;
            retVal += '            You must install the Java runtime environment in order to use Java chat' + ENDL;
            retVal += '        </object>' + ENDL;
        }
        else
        {
            retVal += genHeader(CHAT_NAME,
                                CHAT_CODE,
                                CHAT_CODEBASE,
                                CHAT_ARCHIVE,
                                CHAT_WIDTH,
                                CHAT_HEIGHT,
                                p_useDebug,
                                p_qname,
                                p_usePopup);
            retVal += '            <param name="POLL_RATE" value="' + POLL_RATE + '">' + ENDL;
            retVal += '            <param name="PROTOCOL" value="' + PROTOCOL + '">' + ENDL;
            retVal += '            <param name="USE_DOUBLE_BYTE" value="' + USE_DOUBLE_BYTE + '">' + ENDL;
            retVal += '            <param name="PARTY_EMAIL" value="' + PARTY_EMAIL + '">' + ENDL;
            retVal += '            <param name="PARTY_PHONE" value="' + PARTY_PHONE + '">' + ENDL;
            retVal += '            <param name="PARTY_NAME" value="' + PARTY_NAME + '">' + ENDL;
            retVal += '            <param name="USER_COLOR0" value="' + JAVA_APPLET_CHAT_USER_COLOR0 + '">' + ENDL;
            retVal += '            <param name="USER_COLOR1" value="' + JAVA_APPLET_CHAT_USER_COLOR1 + '">' + ENDL;
            retVal += '            <param name="USER_COLOR2" value="' + JAVA_APPLET_CHAT_USER_COLOR2 + '">' + ENDL;
            retVal += '            <param name="USER_COLOR3" value="' + JAVA_APPLET_CHAT_USER_COLOR3 + '">' + ENDL;
            retVal += '            <param name="USER_COLOR4" value="' + JAVA_APPLET_CHAT_USER_COLOR4 + '">' + ENDL;
            retVal += '            You must install the Java runtime environment in order to use Java chat' + ENDL;
            retVal += '        </applet>' + ENDL;
        }
        retVal += "    </body>" + ENDL;
        retVal += "</html>" + ENDL;
    }
    else
    {
        retVal = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"' + ENDL;
        retVal += '"http://www.w3.org/TR/html4/strict.dtd">' + ENDL;
        retVal += genHTMLHeader(CHAT_NAME, p_sessionId, p_interactionId, p_useDebug, p_qname, p_usePopup);
        retVal += '    <frameset cols="*,150">' + ENDL;

        //DSR added to make room for debug window
        if(true == p_useDebug)
        {
            retVal += '        <frameset rows="*,150,20">' + ENDL;
        }
        else
        {
            retVal += '        <frameset rows="*,60,20">' + ENDL;
        }
        //End DSR add
        retVal += '            <frame src="/I3Root/ChatHistoryText.html" name="chatHistoryText" id="chatHistoryText" frameborder="1" marginwidth="0" marginheight="0" scrolling="yes">' + ENDL;
        retVal += '            <frame src="/I3Root/Chat.html" name="chatText" id="chatText" frameborder="1" marginwidth="0" marginheight="0" scrolling="no" noresize="noresize">' + ENDL;
        retVal += '            <frame src="/I3Root/ChatIndicator.html" name="chatIndicator" id="chatIndicator" frameborder="1" marginwidth="0" marginheight="0" scrolling="no" noresize="noresize">' + ENDL;
        retVal += '        </frameset>' + ENDL;
        retVal += '        <frameset rows="150,100,*,60,1">' + ENDL;
        retVal += '            <frame src="/I3Root/Logo.html" name="chatLogo" id="chatLogo" frameborder="1" marginwidth="0" marginheight="0" scrolling="no" noresize="noresize">' + ENDL;
        retVal += '            <frame src="/I3Root/ChatParties.html" name="chatParties" id="chatParties" frameborder="1" marginwidth="0" marginheight="0" scrolling="auto">' + ENDL;
        retVal += '            <frame src="/I3Root/ChatAgent.html" name="chatAgent" id="chatAgent" frameborder="1" marginwidth="0" marginheight="0" scrolling="auto" noresize="noresize">' + ENDL;
        retVal += '            <frame src="/I3Root/ChatStatus.html" name="chatStatus" id="chatStatus" frameborder="1" marginwidth="0" marginheight="0" scrolling="no" noresize="noresize">' + ENDL;
        retVal += '            <frame src="/I3Root/ChatHistory.html" name="chatHistory" id="chatHistory" frameborder="1" marginwidth="0" marginheight="0" scrolling="no">' + ENDL;
        retVal += '        </frameset>' + ENDL;
        retVal += '    </frameset>' + ENDL;
        retVal += '</html>' + ENDL;
    }

    return retVal;
}

//////////////////////////////////////////////////////////
function genParam (p_name, p_value){
    return '<param name="'+p_name+'" value="'+p_value+'"> ' + ENDL;
}

//////////////////////////////////////////////////////////
function genIEHeader (p_name, p_code, p_codebase, p_jarName, p_w, p_h, p_debug, p_queue, p_usePopup)
{
    var retVal = '        <object id="' + p_name + '" codebase="http://java.sun.com/update/1.4.2/jinstall-1_4-windows-i586.cab#Version=1,4,0,0" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" ';

    if(p_usePopup)
    {
        retVal += 'width="1" height="1" name="' + p_name + '">' + ENDL;
    }
    else
    {
        retVal += 'width="' + p_w + '" height="' + p_h + '" name="' + p_name + '">' + ENDL;
    }
    if(p_debug)
    {
        retVal += '            ' + genParam('TRACELEVEL', '15');
    }
    retVal += '            ' + genParam('archive', p_jarName);
    retVal += '            ' + genParam('codebase', p_codebase);
    retVal += '            ' + genParam('code', p_code);
    if(p_usePopup)
    {
        retVal += '            ' + genParam('IS_EMBEDDED', 'false');
    }
    else
    {
        retVal += '            ' + genParam('IS_EMBEDDED', 'true');
    }
    retVal += '            ' + genParam('WEBFILTER_PATH', REL_SERVLET_PATH);
    retVal += '            ' + genParam('QUEUE', p_queue);

    return retVal;
}

//////////////////////////////////////////////////////////
function genHeader (p_name, p_code, p_codebase, p_jarName, p_w, p_h, p_debug, p_queue, p_usePopup)
{
    var retVal = '        <applet id="' + p_name + '" code="' + p_code + '" archive="' + p_jarName + '" codebase="' + p_codebase + '" ';

    if(p_usePopup)
    {
        retVal += 'width="1" height="1" name="' + p_name + '">' + ENDL;
    }
    else
    {
        retVal += 'width="' + p_w + '" height="' + p_h + '" name="' + p_name + '">' + ENDL;
    }
    if(p_debug)
    {
        retVal += '            ' + genParam('TRACELEVEL', '15');
    }
    if(p_usePopup)
    {
        retVal += '            ' + genParam('IS_EMBEDDED', 'false');
    }
    else
    {
        retVal += '            ' + genParam('IS_EMBEDDED', 'true');
    }
    retVal += '            ' + genParam('WEBFILTER_PATH', REL_SERVLET_PATH);
    retVal += '            ' + genParam('QUEUE', p_queue);

    return retVal;
}

//////////////////////////////////////////////////////////
function genHTMLHeader(p_name, p_sessionId, p_interactionId, p_debug, p_queue, p_usePopup)
{
    var retVal = "";

    //DSR added for scr #:43921
    if(isLoggedIn())
    {
        PARTY_NAME = getLoginId();
    }
    else
    {
        PARTY_NAME = "Chat User";
    }
    //retVal = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"' + ENDL;
    //retVal += '"http://www.w3.org/TR/html4/strict.dtd">' + ENDL;
    retVal = '<html>' + ENDL;
    retVal += '    <head>' + ENDL;
    retVal += '        <meta name="author" content="Interactive Intelligence">' + ENDL;
    retVal += '        <meta http-equiv="content-type" content="text/html; charset=utf-8">' + ENDL;
    retVal += '        <meta http-equiv="cache-control" content="no-cache">' + ENDL;
    retVal += '        <meta http-equiv="expires" content="0">' + ENDL;
    retVal += '        <base target="top">' + ENDL;
    retVal += '        <link rel="stylesheet" type="text/css" href="/I3Root/Styles/Text.css">' + ENDL;
    retVal += '        <title>' + p_name + '</title>' + ENDL;
    retVal += '        <script type="text/javascript">' + ENDL;
    retVal += '            document.cookie = "cookies=true";' + ENDL;
    retVal += '            if(document.cookie == "")' + ENDL;
    retVal += '            {' + ENDL;
    retVal += '                document.write("Web Interactions cannot be run without session cookies enabled.  If you are using IE 6.x, select Tools|Internet Options from the browser menu.  Select the Privacy tab, then the Advanced button.  Make sure the <u>Always allow session cookies<\/u> option is enabled.  This does not write any cookies to your machine, but allows a particular web session to pass cookies back and forth.");' + ENDL;
    retVal += '                document.close();' + ENDL;
    retVal += '            }' + ENDL;
    if(p_debug)
    {
        retVal += '            var TRACELEVEL=15;' + ENDL;
    }
    else
    {
        retVal += '            var TRACELEVEL=1;' + ENDL;
    }
    retVal += '            var WEBSESSIONID="' + p_sessionId + '";' + ENDL;
    retVal += '            var INTERACTIONID="' + p_interactionId + '";' + ENDL;
    retVal += '            var POLL_RATE="' + POLL_RATE + '";' + ENDL;
    retVal += '            var PROTOCOL="' + PROTOCOL + '";' + ENDL;
    retVal += '            var QUEUE="' + p_queue + '";' + ENDL;
    retVal += '            var I3PATH="' + I3PATH + '";' + ENDL;
    retVal += '            var LAUNCHURL="' + LAUNCHURL + '";' + ENDL;
    retVal += '            var PARTY_NAME="' + PARTY_NAME + '";' + ENDL;
    retVal += '            var PARTY_EMAIL="' + PARTY_EMAIL + '";' + ENDL;
    retVal += '            var PARTY_PHONE="' + PARTY_PHONE + '";' + ENDL;
    retVal += '            var USERID="' + USERID + '";' + ENDL;
    retVal += '            var CUSTOM_INFO="' + CUSTOM_INFO + '";' + ENDL;
    retVal += '            var IMG_ROOT="' + IMG_ROOT + '";' + ENDL;
    retVal += '            var IMG_SUFFIX="' + IMG_SUFFIX + '";' + ENDL;
    retVal += '            var IMG_DEFAULT="' + IMG_DEFAULT + '";' + ENDL;
    retVal += '            var IMG_LOGO_ACTIVE="' + IMG_LOGO_ACTIVE + '";' + ENDL;
    retVal += '            var TYPING_INDICATOR_TEXT="' + TYPING_INDICATOR_TEXT + '";' + ENDL;
    retVal += '            var NOCONNECTION_TEXT="' + NOCONNECTION_TEXT + '";' + ENDL;
    retVal += '            var CONNECTING_TEXT="' + CONNECTING_TEXT + '";' + ENDL;
    retVal += '            var ALERTING_TEXT="' + ALERTING_TEXT + '";' + ENDL;
    retVal += '            var CONNECTED_TEXT="' + CONNECTED_TEXT + '";' + ENDL;
    retVal += '            var DISCONNECTED_TEXT="' + DISCONNECTED_TEXT + '";' + ENDL;
    retVal += '            var USER_COLOR0="' + JAVA_APPLET_CHAT_USER_COLOR0 + '";' + ENDL;
    retVal += '            var USER_COLOR1="' + JAVA_APPLET_CHAT_USER_COLOR1 + '";' + ENDL;
    retVal += '            var USER_COLOR2="' + JAVA_APPLET_CHAT_USER_COLOR2 + '";' + ENDL;
    retVal += '            var USER_COLOR3="' + JAVA_APPLET_CHAT_USER_COLOR3 + '";' + ENDL;
    retVal += '            var USER_COLOR4="' + JAVA_APPLET_CHAT_USER_COLOR4 + '";' + ENDL;
    retVal += '        </script>' + ENDL;
    retVal += '    </head>' + ENDL;

    return retVal;
}

//////////////////////////////////////////////////////////
function getFrame(p_name, p_qname, p_interactionId, p_sessionId, p_useDebug, p_usePopup, p_useApplet, p_usehtml)
{
    var retVal = "";
    var frameName = "frameit";

    //DSR add debug check
    var startIndex = p_name.indexOf("Debug")

    if(-1 != startIndex)
    {
        p_name = p_name.substr(0, startIndex);
        frameName +="Debug";
    }
    //End DSR check

    retVal = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"' + ENDL;
    retVal += '"http://www.w3.org/TR/html4/loose.dtd">' + ENDL;
    retVal += genHTMLHeader(p_name, p_sessionId, p_interactionId, p_useDebug, p_qname, p_usePopup);
    retVal += '    <body>' + ENDL;
    if(p_name == "chat")
    {
        retVal += '        <iframe src="/I3Root/ChatFrame.html" frameborder="0" name="'+ frameName + '" id="frameit" class="IFrameStyle"';
        retVal += ' height="' + CB_HEIGHT + '"';
        retVal += ' width="' + CB_WIDTH + '"';
    }
    else if (p_name == "instantquestion")
    {
        retVal += '        <iframe src="/I3Root/IQFrame.html" frameborder="0" name="frameit" id="frameit" class="IFrameStyle"';
        retVal += ' height="' + CB_HEIGHT + '"';
        retVal += ' width="' + CB_WIDTH + '"';
    }
    else if (p_name == "callback")
    {
        retVal += '        <iframe src="/I3Root/CBFrame.html" frameborder="0" name="frameit" id="frameit" class="IFrameStyle"';
        retVal += ' height="' + CB_HEIGHT + '"';
        retVal += ' width="' + CB_WIDTH + '"';
    }
    retVal += '>' + ENDL;
    retVal += '        </iframe>' + ENDL;
    retVal += "    </body>" + ENDL;
    retVal += "</html>" + ENDL;

    return retVal;
}

//////////////////////////////////////////////////////////
function removeSpaces(p_string)
{
    p_string = p_string.replace(" ", "^");
    return p_string;
}

//////////////////////////////////////////////////////////
function getColors(p_parties)
{
}

