/*
*
* Global Variables
*
*/

var g_bHasClientEventSystem = false;
var g_objActiveElement = null;
var g_bExceptionThrown = false;
var g_arrLoadPageDelegates = null; //new Array();
var g_Width = null;
var g_Height = null;
var g_bPostInitializePage = false;
var g_bWaiting = false;
var g_bSubmitted = false;
var g_bValidationFailed = false;
var g_objSrcElement = null;
var g_objExecutingHidderTriggerReq = null;
var g_bIsExecutingHidderTrigger = false;
var g_hExecutingHidderTriggerTimeout = null;
var g_bValueChanging = false;
var g_hWindowHandle = null;
var g_objFloatingWindowSrc = null;
var g_bToggleAllCheckboxes = true;
var g_IsResizing = false;
var g_IsInSubMenu = false;
var g_arrSubMenuItems = new Array();
var g_arrPins = new Array();
var g_HorizontalMenuTabCollection = null;
var g_strHomepageSrc = null;
var g_strLastExpandedID = null;
var g_arrMenues = new Array();
var g_bOverMenu = false;
var g_objDivLastSelectedSubMenu = null;
var g_bWaitWindow = false;
var g_bSuppressWaitWindow = false;
var g_objWaitWindow = null;
var g_arrSortDataTableReverse = new Array();
var g_MessageWindow = null;
var g_FloadingWindowIsSelected = false;
var g_nFloadingWindowX, g_nFloadingWindowY;
var g_nFloadingWindow_MouseDownX, g_nFloadingWindow_MouseDownY;
var g_objPageDataTableReq = null;
var g_bIsPageDataTable = false;
var g_hPageDataTableTimeout = null;
var g_objCalendarWindow = null;
var g_objFloatingWindow = null;
var g_objFocusedElement = null;
var g_arrDelayRepeatedExecutionCalls = new Array();
var g_arrIsPostInitializePageReady = new Array();
var g_bUnloaded = false;
var g_strLastKnownFunctionCall = null;
var g_arrFunctionCallLog = new Array();
var g_strTargetValue = null;
var g_bPausedEventService = false;
var g_arrCCE = new Array(); /* Cacheable Control Elements */

/*
*
* Classes
*
*/

function AutomationArray(arrValues)
{
    if (arrValues == null || arrValues == undefined)
        arrValues = new Array();

    this.Values = arrValues;
    this.length = arrValues.length;
    this.Length = arrValues.length;
}

AutomationArray.prototype.GetValue = function(nIndex)
{
    return this.Values[nIndex];
}

AutomationArray.prototype.GetItem = function(nIndex) 
{
    try
    {
        return this.Values[nIndex];
    }
    catch (e) {
        throw new Error(0, "AutomationArray.prototype.GetItem() - " + e.message);
    }
}

AutomationArray.prototype.SetItem = function(objValue)
{
    this.Values[this.Values.length] = objValue;
    this.length = this.Values.length;
    this.Length = this.Values.length;
}

AutomationArray.prototype.toString = function()
{
    return "AutomationArray";
}

function FunctionInfo(str)
{
    this.Parse(str);
}

FunctionInfo.prototype.toString = function()
{
    var strParams = "";

    for (var i = 0; i < this.Parameters.length;  i++)
    {
        if (strParams != "")
            strParams += ",";

        strParams += this.Parameters[i];
    }

    return this.Name + "(" + strParams + ")";
}

FunctionInfo.prototype.Parse = function(str)
{
    this.Name = null;
    this.Parameters = new Array();

    if (str != null)
    {
        var nPosStart = str.indexOf("(");
        var nPosEnd = str.indexOf(")", nPosStart);

        if (nPosStart > -1 && nPosEnd > -1)
        {
            this.Name = str.substring(0, nPosStart);
            
            var arr = str.substring(nPosStart + 1, nPosEnd).split(',');
            for (var i = 0; i < arr.length; i++)
            {
                if (arr[i] != "")
                    this.Parameters[this.Parameters.length] = new String(arr[i]);
            }
        }
        else
            this.Name = str;
    }
}

/*
*
* Functions
*
*/

function AddFunctionCallLog(str)
{
    g_arrFunctionCallLog[g_arrFunctionCallLog.length] = str;
}

function RemoveFunctionCallLog(str)
{
    g_arrFunctionCallLog.splice(g_arrFunctionCallLog.length - 1, 1);
}

window.onerror = GlobalExceptionSink;

function GlobalExceptionSink(strMsg, strUrl, strLine)
{
    HideWaitWindow();

    var strCallStack = "";
    for (var i = 0; i < g_arrFunctionCallLog.length; i++)
    {
        strCallStack += "\n::" + g_arrFunctionCallLog[i];
    }

    alert("JavaScript exception occured in '" + document.title + "'\n\nUrl : " + strUrl + "\nLine Number : " + strLine + "\nCall Stack : " + strCallStack + "\nMessage : " + strMsg);

    g_arrFunctionCallLog = new Array();

    return false;
}

function SetActiveElement()
{
    AddFunctionCallLog("SetActiveElement");

    if (navigator.appName == "Microsoft Internet Explorer")
    {
        try
        {
            window.top.g_objActiveElement = event.srcElement;
        }
        catch (e)
        {

            g_objActiveElement = event.srcElement;
        }
    }

    RemoveFunctionCallLog();
}

function AddLoadPageDelegate(ptrFunction) {
    
    AddFunctionCallLog("AddLoadPageDelegate");

    if (g_arrLoadPageDelegates == null)
        g_arrLoadPageDelegates = new Array();

    g_arrLoadPageDelegates[g_arrLoadPageDelegates.length] = ptrFunction;

    RemoveFunctionCallLog();
}

function RemoveLoadPageDelegate(ptrFunction)
{
    AddFunctionCallLog("RemoveLoadPageDelegate");

    for (var i = 0; i < g_arrLoadPageDelegates.length; i++)
    {
        if (g_arrLoadPageDelegates[i] == ptrFunction)
        {
            g_arrLoadPageDelegates.splice(i, 1);
            RemoveFunctionCallLog();
            return;
        }
    }

    RemoveFunctionCallLog();
}

function ExecuteLoadPageDelegates()
{
    AddFunctionCallLog("ExecuteLoadPageDelegates");

    if (g_arrLoadPageDelegates != null && g_arrLoadPageDelegates != undefined)
    {
        for (var i = 0; i < g_arrLoadPageDelegates.length; i++)
        {
            g_arrLoadPageDelegates[i]();
        }
    }

    RemoveFunctionCallLog();
}

function InitializePage()
{
    AddFunctionCallLog("InitializePage");

    if (g_arrLoadPageDelegates == null)
        g_arrLoadPageDelegates = new Array();
    
    if (document.cookie.indexOf("SupportsFlash=") == -1) {
        
        // Detect Flash
        if (DetectFlashVer(9, 0, 0))
            document.cookie = "SupportsFlash=True;";
        else
            document.cookie = "SupportsFlash=False;";
    }

    PreloadWaitWindow();

    /*var objEventService = GetEventService();

	if (!g_bPostInitializePage && (objEventService == null || objEventService.Mode != "Loading"))
    {
    g_bPostInitializePage = true;
    PostInitializePage();
    }*/

    TryPostInitializePage();

    RemoveFunctionCallLog();
}

function AddPostInitializePageDelay(strID)
{
    AddFunctionCallLog("AddPostInitializePageDelay");

    g_arrIsPostInitializePageReady[g_arrIsPostInitializePageReady.length] = new Array(strID, false);

    RemoveFunctionCallLog();
}

function SetPostInitializePageDelay(strID, bReady)
{
    AddFunctionCallLog("SetPostInitializePageDelay");

    for (var i = 0; i < g_arrIsPostInitializePageReady.length; i++)
    {
        if (g_arrIsPostInitializePageReady[i][0] == strID)
        {
            g_arrIsPostInitializePageReady[i][1] = bReady;
            break;
        }
    }

    RemoveFunctionCallLog();
}

var g_hTryPostInitializePageTimeout = null;
function TryPostInitializePage()
{
    AddFunctionCallLog("TryPostInitializePage");

    var bReady = true;

    for (var i = 0; i < g_arrIsPostInitializePageReady.length; i++)
    {
        if (!g_arrIsPostInitializePageReady[i][1])
        {
            bReady = false;
            break;
        }
    }

    if (bReady)
        PostInitializePage();
    else
        g_hTryPostInitializePageTimeout = setTimeout(TryPostInitializePage, 333);

    RemoveFunctionCallLog();
}

// This should be called after the event system is loaded if it exists
// otherwise, it'll be executed right after InitializeLoad()
function PostInitializePage()
{
    AddFunctionCallLog("PostInitializePage");

    try 
    {
        //ResumeEventService();
        if (window.CustomLoadPage != undefined)
            window.CustomLoadPage();

        ExecuteLoadPageDelegates();

        window.status = "Done";

        if (navigator.appName == "Microsoft Internet Explorer")
            document.body.onclick = SetActiveElement;

        ResizePage();
    }
    catch (e)
    {
        //alert(e.message);
    }

    RemoveFunctionCallLog();
}

function UnloadPage(bDontCloseFloatingWindow)
{
    AddFunctionCallLog("UnloadPage");

    if (!g_bUnloaded)
    {
        g_bUnloaded = true;

        //PauseEventService();
      
        try
        {
            if (navigator.appName != "Microsoft Internet Explorer" && bDontCloseFloatingWindow != true && frameElement != null && frameElement != undefined && frameElement.id != "IFrameFloatingWindow" && frameElement.getAttribute("IFrameFloatingWindow") != "True")
                CloseFloatingWindow();
        }
        catch (e)
        {
        }

        CloseCalendarWindow();

        if (g_hWindowHandle != null)
            g_hWindowHandle.close();

        var objObjects = document.getElementsByTagName("OBJECT");
        for (var i = 0; i < objObjects.length; i++)
        {
            try
            {
                objObjects[i].Unload();
            }
            catch (e)
            {
            }
        }

        try
        {
            if (window.CustomUnloadPage != null && window.CustomUnloadPage != undefined)
                window.CustomUnloadPage();
        }
        catch (e)
        {
        }

        var objElements = document.getElementsByTagName("iframe");
        for (var i = 0; i < objElements.length; i++)
        {
            try
            {
                if (objElements[i].id != "IFrameFloatingWindow" && objElements[i].id != "IFrameCalendar" && objElements[i].id != "IFrameFloatingWindow_Wait")
                    objElements[i].contentWindow.UnloadPage();
            }
            catch (e)
            {

            }
        }
    }

    RemoveFunctionCallLog();
}

function ResizePage()
{
    AddFunctionCallLog("ResizePage");

    try
    {
        if (navigator.appName == "Microsoft Internet Explorer")
            document.getElementById("divOutput").style.width = document.body.clientWidth;

        if (document.body.clientWidth < document.getElementById("WorkflowForm").offsetWidth)
            document.body.style.overflowX = "scroll";
        else
            document.body.style.overflowX = "hidden";

        if (navigator.appName == "Microsoft Internet Explorer")
            document.getElementById("divOutput").style.height = document.body.clientHeight;

        if (document.body.clientHeight < document.getElementById("WorkflowForm").offsetHeight)
            document.body.style.overflowY = "scroll";
        else
            document.body.style.overflowY = "hidden";
    }
    catch (e)
    {
    }

    var objElements = document.getElementsByTagName("frames");
    for (var i = 0; i < objElements.length; i++)
    {
        try
        {
            objElements[i].ResizePage();
        }
        catch (e)
        {
        }
    }

    /*objElements = document.getElementsByTagName( "iframe" );
    for( var i = 0; i < objElements.length; i++ )
    {
    try
    {
    if (objElements[i].id != "IFrameFloatingWindow" && objElements[i].id != "IFrameCalendar" && objElements[i].id != "IFrameFloatingWindow_Wait")
    objElements[i].contentWindow.ResizePage();
    }
    catch( e )
    {
		    
    }
    }*/

    objElements = document.getElementsByTagName("object");
    for (var i = 0; i < objElements.length; i++)
    {
        try
        {
            if (objElements[i].AllowLayoutUpdates == undefined)
            {
                eval(objElements[i].getAttribute("ResizeSink"));
            }
            else if (objElements[i].AllowLayoutUpdates)
            {
                objElements[i].UpdateLayout(objElements[i].offsetTop + window.screenTop, objElements[i].offsetLeft + window.screenLeft);
            }
        }
        catch (e)
        {
        }
    }

    RemoveFunctionCallLog();
}

function ShowSpecialCharacterWindow(strElementID, strSpecialCharacterTitleCSS, strSpecialCharacterCloseSrcPin, strSpecialCharacterAddCSS, strSpecialCharacterMouseOverColor)
{
    throw new Error(0, "ShowSpecialCharacterWindow() - This function is now deprecated");
    /*document.getElementById( "IFrameFloatingWindow" ).style.top = event.y;
    document.getElementById( "IFrameFloatingWindow" ).style.left = event.x;
    document.getElementById( "IFrameFloatingWindow" ).src = "/FloatingWindow_SpecialCharacters.aspx?SourceElementID=" + escape( strElementID ) + "&SpecialCharacterTitleCSS=" + escape( strSpecialCharacterTitleCSS ) + "&SpecialCharacterCloseSrcPin=" + escape( strSpecialCharacterCloseSrcPin ) + "&SpecialCharacterAddCSS=" + escape( strSpecialCharacterAddCSS ) + "&SpecialCharacterMouseOverColor=" + escape( strSpecialCharacterMouseOverColor ) ;
    document.getElementById( "IFrameFloatingWindow" ).style.display = "block";*/
}

function ShowSpellCheckerWindow(strElementID, strTitleCSS, strCloseSrcPin)
{
    throw new Error(0, "ShowSpellCheckerWindow() - This function is now deprecated");
    /*document.getElementById( "IFrameFloatingWindow" ).style.top = event.y;
    document.getElementById( "IFrameFloatingWindow" ).style.left = event.x;
	
	var strTextToBeChecked = "";
	
	if( document.getElementById( strElementID ).tagName == "INPUT" )
    {
    strTextToBeChecked = document.getElementById( strElementID ).value;
    }
    else if( document.getElementById( strElementID ).tagName == "TEXTAREA" )
    {
    strTextToBeChecked = GetInnerText( document.getElementById( strElementID ) );
    }
	
	document.getElementById( "IFrameFloatingWindow" ).src = "/FloatingWindow_SpellChecker.aspx?SourceElementID=" + escape( strElementID ) + "&Body=" + escape( strTextToBeChecked ) + "&TitleCSS=" + escape( strTitleCSS ) + "&CloseSrcPin=" + escape( strCloseSrcPin );
    document.getElementById( "IFrameFloatingWindow" ).style.display = "block";*/
}

function OnBeforePrintPage()
{
    /*g_strLastKnownFunctionCall = "OnBeforePrintPage";
    try
    {
        g_Width = document.body.clientWidth;
        g_Height = document.body.clientHeight;

        window.resizeTo(700, 960);
    }
    catch (e)
    {
    }

    if (document.getElementById("WorkflowForm").scrollHeight > 960)
    {
        document.getElementById("WorkflowForm").style.height = 960;
        document.getElementById('divOutput').style.height = 960;
    }

    document.getElementById('divOutput').style.overflow = 'hidden';
    document.body.scroll = 'yes';*/
}

function RemovePrintSetup()
{
    /*g_strLastKnownFunctionCall = "RemovePrintSetup";
    try
    {
        window.resizeTo(g_Width, g_Height);
    }
    catch (e)
    {
    }

    document.getElementById('divOutput').style.overflow = 'auto';
    document.body.scroll = 'no';

    ResizePage();*/
}

function OnAfterPrintPage()
{
    /*g_strLastKnownFunctionCall = "OnAfterPrintPage";
    // For some reason, we need to give it time
    setTimeout("RemovePrintSetup();", 5000);*/
}

function FormSubmit(objSrcElement, strValidateForm, strSrcElement, strProcessForm)
{
    AddFunctionCallLog("FormSubmit");

    if (g_bExceptionThrown)
    {
        RemoveFunctionCallLog();
        return false;
    }

    if (g_bWaiting)
    {
        RemoveFunctionCallLog();
        return false;
    }

    g_bValidationFailed = false;

    if (!g_bSubmitted)
    {
        if (!g_bWaitWindow)
        {
            setTimeout(ShowWaitWindow, 1500);
            var objTop = GetTopLevelWindow();
            objTop.g_bSuppressWaitWindow = false;
        }
        
        //document.forms[0].style.cursor = "wait";
        window.status = "Processing data ...";

        var bValidate = true;

        if ((objSrcElement != null && objSrcElement.ValidateForm == "False") || strValidateForm == "False")
            bValidate = false;

        if (bValidate)
            window.status = "Validating/Processing data ...";

        var bProcess = true;

        if (strProcessForm == "False")
            bProcess = false;

        if (bProcess)
        {
            //if (!bValidate)
              //  PauseEventService();
            
            for (var i = 0; i < document.WorkflowForm.elements.length; i++)
            {
                if (document.WorkflowForm.elements[i].getAttribute("type") == "hidden")
                    continue;

                g_objSrcElement = document.WorkflowForm.elements[i];

                // Validation
                if (bValidate)
                {
                    if (document.WorkflowForm.elements[i].getAttribute("ValueRequired") == "True")
                    {
                        if ((document.WorkflowForm.elements[i].tagName == "SELECT" || document.WorkflowForm.elements[i].tagName == "TEXTAREA" || document.WorkflowForm.elements[i].type == "text" || document.WorkflowForm.elements[i].type == "file" || document.WorkflowForm.elements[i].type == "password") && document.WorkflowForm.elements[i].value == "")
                        {
                            document.forms[0].style.cursor = "default";
                            window.status = "Done";
                            try
                            {
                                document.WorkflowForm.elements[i].focus();
                            }
                            catch (e)
                            {
                            }
                            if (document.WorkflowForm.elements[i].getAttribute("DisplayName") != null)
                                MessageWindow(null, document.WorkflowForm.elements[i].getAttribute("DisplayName") + " is required.", 'False', null, null, "True");
                            else
                                MessageWindow(null, document.WorkflowForm.elements[i].getAttribute("Description") + " is required.", 'False', null, null, "True");
                            HideWaitWindow();
                            RemoveFunctionCallLog();
                            return false;
                        }
                        else if (document.WorkflowForm.elements[i].type == "checkbox" && document.WorkflowForm.elements[i].checked == false)
                        {
                            document.forms[0].style.cursor = "default";
                            window.status = "Done";
                            try
                            {
                                document.WorkflowForm.elements[i].focus();
                            }
                            catch (e)
                            {
                            }
                            if (document.WorkflowForm.elements[i].getAttribute("DisplayName") != null)
                                MessageWindow(null, document.WorkflowForm.elements[i].getAttribute("DisplayName") + " is required.", 'False', null, null, "True");
                            else
                                MessageWindow(null, document.WorkflowForm.elements[i].getAttribute("Description") + " is required.", 'False', null, null, "True");
                            HideWaitWindow();
                            RemoveFunctionCallLog();
                            return false;
                        }
                        else if (document.WorkflowForm.elements[i].type == "radio" && document.WorkflowForm.elements[document.WorkflowForm.elements[i].name].checked == false)
                        {
                            document.forms[0].style.cursor = "default";
                            window.status = "Done";
                            try
                            {
                                document.WorkflowForm.elements[i].focus();
                            }
                            catch (e)
                            {
                            }
                            if (document.WorkflowForm.elements[i].getAttribute("DisplayName") != null)
                                MessageWindow(null, document.WorkflowForm.elements[i].getAttribute("DisplayName") + " is required.", 'False', null, null, "True");
                            else
                                MessageWindow(null, document.WorkflowForm.elements[i].getAttribute("Description") + " is required.", 'False', null, null, "True");
                            HideWaitWindow();
                            RemoveFunctionCallLog();
                            return false;
                        }
                    }

                    if (document.WorkflowForm.elements[i].getAttribute("onsubmit") != undefined)
                    {
                        eval(document.WorkflowForm.elements[i].getAttribute("onsubmit"));

                        if (g_bValidationFailed)
                        {
                            document.forms[0].style.cursor = "default";
                            window.status = "Done";
                            HideWaitWindow();
                            RemoveFunctionCallLog();
                            return false;
                        }
                    }
                }
                

                if (document.WorkflowForm.elements[i].type == "checkbox" && document.WorkflowForm.elements[i].getAttribute("BaseName") != undefined)
                {
                    if (document.WorkflowForm.elements[i].getAttribute("ismulticheckbox") != "True")
                    {
                        if (!document.WorkflowForm.elements[i].checked)
                        {
                            AddPin(document.WorkflowForm.elements[i].getAttribute("BaseName") + "ValuePin", "False", true);
                        }
                        else
                        {
                            document.WorkflowForm.elements[i].value = "True";
                        }
                    }
                }
                else if (document.WorkflowForm.elements[i].type == "radio" && document.WorkflowForm.elements[i].getAttribute("BaseName") != undefined)
                {
                    if (!document.WorkflowForm.elements[i].checked)
                        AddPin(document.WorkflowForm.elements[i].getAttribute("BaseName") + "ValuePin", "False");
                    else
                    {
                        AddPin(document.WorkflowForm.elements[i].getAttribute("BaseName") + "ValuePin", "True");
                    }
                }
                else if (document.WorkflowForm.elements[i].tagName == "SELECT" && document.WorkflowForm.elements[i].getAttribute("BaseName") != undefined && document.WorkflowForm.elements[i].selectedIndex > -1)
                {
                    if (document.WorkflowForm.elements[i].multiple == true)
                    {
                        var index = 0;
                        for (var j = 0; j < document.WorkflowForm.elements[i].options.length; j++)
                        {
                            if (document.WorkflowForm.elements[i].options[j].selected == true)
                            {
                                AddPin(document.WorkflowForm.elements[i].getAttribute("BaseName").replace("ListBox:", "MultiSelectListBox:ListBox:") + "SelectedValuePin:" + index, document.WorkflowForm.elements[i].options[j].value);
                                AddPin(document.WorkflowForm.elements[i].getAttribute("BaseName").replace("ListBox:", "MultiSelectListBox:ListBox:") + "SelectedTextPin:" + index++, document.WorkflowForm.elements[i].options[j].text);
                            }
                        }

                        // I'm supprised this works, but we do need to "remove" this element from the form POST
                        document.WorkflowForm.elements[i].name = "";
                    }
                    else
                    {
                        if (document.WorkflowForm.elements[i].options[document.WorkflowForm.elements[i].selectedIndex].text != "")
                            AddPin(document.WorkflowForm.elements[i].getAttribute("BaseName") + "SelectedTextPin", document.WorkflowForm.elements[i].options[document.WorkflowForm.elements[i].selectedIndex].text);
                    }
                }
                else if (document.WorkflowForm.elements[i].getAttribute("BaseName") != undefined && document.WorkflowForm.elements[i].Value != undefined)
                {
                    document.WorkflowForm.elements[i].value = "";

                    for (var idx = 0; idx < document.WorkflowForm.elements[i].Value.length; idx++)
                        document.WorkflowForm.elements[i].value += WrapIntoDataItem(document.WorkflowForm.elements[i].Value[idx]);

                    document.WorkflowForm.elements[i].value = "<Pin>" + document.WorkflowForm.elements[i].value + "</Pin>";

                    document.WorkflowForm.elements[i].name = "Pin:" + document.WorkflowForm.elements[i].name;
                }
                
                if (document.WorkflowForm.elements[i].getAttribute("IDPin") != undefined && document.WorkflowForm.elements[i].getAttribute("IDPin") != "" && document.WorkflowForm.elements[i].getAttribute("IDPin") != null)
                    AddPin(document.WorkflowForm.elements[i].getAttribute("BaseName") + "IDPin", document.WorkflowForm.elements[i].getAttribute("IDPin"));

                if (document.WorkflowForm.elements[i].disabled)
                    document.WorkflowForm.elements[i].disabled = false;

                if (document.WorkflowForm.elements[i].readonly)
                    document.WorkflowForm.elements[i].readonly = false;
            }

            // moved this code into the above loop
            /*for( var i = 0; i < document.WorkflowForm.elements.length; i++ )
            {
            if( document.WorkflowForm.elements[i].getAttribute( "type" ) == "hidden" )
            continue;
					
				if( document.WorkflowForm.elements[i].disabled )
            document.WorkflowForm.elements[i].disabled = false;
					
				if( document.WorkflowForm.elements[i].readonly )
            document.WorkflowForm.elements[i].readonly = false;
            }*/

            /* -- better to use a client side task Add Pin then do this
            var objArr = document.getElementsByTagName( "SPAN" );
            for( var i = 0; i < objArr.length; i++ )
            {
            if( objArr[i].IDPin != undefined && objArr[i].IDPin != "" )
            AddPin( objArr[i].BaseName + "IDPin", objArr[i].IDPin );
            }
            */
        }
        
        if (objSrcElement != null && objSrcElement != undefined && objSrcElement.getAttribute != undefined)
        {
            if (objSrcElement.getAttribute("BaseName") == undefined)
            {
                document.forms[0].style.cursor = "default";
                window.status = "Done";
                MessageWindow(null, "Element is disabled, no BaseName attribute found.", 'False', null, null, "True");
                HideWaitWindow();
                RemoveFunctionCallLog();
                return false;
            }
            else if (objSrcElement.getAttribute("BaseName").indexOf("DataTable:DataTable:Paging") == 0)
            {
                var arrPath = objSrcElement.getAttribute("BaseName").split(":");
                AddPin(arrPath[4] + ":" + arrPath[5] + ":" + arrPath[6] + ":FormSubmit", "True");
            }
            else
            {
                AddPin(objSrcElement.getAttribute("BaseName") + "FormSubmit", "True");
            }
        }
        else if (strSrcElement != null && strSrcElement != undefined)
            AddPin(strSrcElement + "FormSubmit", "True");

        AddPin("Page:Position:X", document.body.scrollLeft);
        AddPin("Page:Position:Y", document.body.scrollTop);
        AddPin("Toreion:RequestTimestamp", (new Date()).getTime());
        
        g_bSubmitted = true;
        window.status = "Waiting for response ...";
        document.getElementById("WorkflowForm").submit();

        RemoveFunctionCallLog();
        return true;
    }
}

function FormReset()
{
    g_strLastKnownFunctionCall = "FormReset";

    document.getElementById("WorkflowForm").reset();

    var arrObjects = document.WorkflowForm.getElementsByTagName("OBJECT")

    for (var i = 0; i < arrObjects.length; i++)
    {
        if (arrObjects[i].getAttribute("ObjectType") == "FileUploadCtl")
        {
            arrObjects[i].Reset();
        }
    }
}

function Postback(strPostbackURL)
{
    g_strLastKnownFunctionCall = "Postback";

    document.WorkflowForm.action = strPostbackURL;
    document.WorkflowForm.submit();
}

function SaveFocus()
{
    g_strLastKnownFunctionCall = "SaveFocus";

    if (navigator.appName == "Microsoft Internet Explorer")
    {
        window.event.srcElement.setAttribute("SelectX", window.event.x);
        window.event.srcElement.setAttribute("SelectY", window.event.y);
    }
}

function SaveFocusByKeyPress()
{
    g_strLastKnownFunctionCall = "SaveFocusByKeyPress";

    if (navigator.appName == "Microsoft Internet Explorer")
    {
        var objTextRange = document.selection.createRange();

        window.event.srcElement.setAttribute("SelectX", objTextRange.offsetLeft);
        window.event.srcElement.setAttribute("SelectY", objTextRange.offsetTop);
    }
}

function SaveSelection()
{
    g_strLastKnownFunctionCall = "SaveSelection";

    if (navigator.appName == "Microsoft Internet Explorer")
    {
        var objTextRange = document.selection.createRange();

        if (objTextRange.text == "")
            SaveFocus();

        window.event.srcElement.setAttribute("Selection", objTextRange.text);
        window.event.srcElement.setAttribute("SelectionOffsetLeft", objTextRange.offsetLeft);
        window.event.srcElement.setAttribute("SelectionOffsetTop", objTextRange.offsetTop);
    }
}

function PopulatePin(strPinName, strPinValue)
{
    g_strLastKnownFunctionCall = "PopulatePin";

    var objElement = GetElementByDescription(strPinName);

    if (objElement != null && objElement != undefined)
    {
        if (objElement.tagName == "TEXTAREA")
        {
            var objTextRange = objElement.createTextRange();
            var strValue = "";
            if (strPinValue.indexOf(".") > -1)
            {
                var nPosStart = -1;
                var nPosEnd = -1;
                var strElem = "";
                var objForm = document.getElementById("WorkflowForm");

                do
                {
                    nPosStart = strPinValue.indexOf(".", nPosStart + 1);
                    nPosEnd = strPinValue.indexOf(".", nPosStart + 1);

                    if (nPosStart > -1 && nPosEnd > -1)
                    {
                        strValue = "";
                        strElem = strPinValue.substring(nPosStart + 1, nPosEnd);

                        for (var i = 0; i < objForm.elements.length; i++)
                        {
                            if (objForm.elements[i].getAttribute("Description") == strElem && objForm.elements[i].getAttribute("BaseName") != undefined && objForm.elements[i].getAttribute("BaseName").indexOf(":DataItemIndex:") == -1)
                            {
                                if (objForm.elements[i].tagName == "SELECT")
                                {
                                    if (objForm.elements[i].selectedIndex > -1 && objForm.elements[i].options[objForm.elements[i].selectedIndex].value != "")
                                    {
                                        if (strValue != "")
                                            strValue += ",";

                                        strValue += objForm.elements[i].options[objForm.elements[i].selectedIndex].value;
                                    }
                                }
                                if (objForm.elements[i].tagName == "TEXTAREA")
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    if (objElement.getAttribute("Selection") != null)
                                        strValue += objElement.getAttribute("Selection");
                                }
                                else if (objForm.elements[i].value != "")
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    strValue += objForm.elements[i].value;
                                }
                            }
                        }
                    }
                }
                while (nPosStart > -1)

                if (strValue != "")
                {
                    strPinValue = strPinValue.replace("." + strElem + ".", strValue);

                    if (objElement.getAttribute("SelectionOffsetLeft") != null)
                    {
                        objTextRange.moveToPoint(parseInt(objElement.getAttribute("SelectionOffsetLeft")), parseInt(objElement.getAttribute("SelectionOffsetTop")));
                        objTextRange.findText(strValue);
                        objTextRange.select();
                        objTextRange.execCommand("Paste", "false", strPinValue);
                    }
                    else
                    {
                        objTextRange.moveEnd("textedit");
                        objElement.value += strPinValue;
                        objTextRange.findText(strPinValue);
                        objTextRange.select();
                    }
                }
                else
                {
                    if (objElement.getAttribute("SelectX") != null)
                    {
                        objTextRange.moveToPoint(parseInt(objElement.getAttribute("SelectX")), parseInt(objElement.getAttribute("SelectY")));
                        objTextRange.execCommand("Paste", "false", strPinValue);
                        objTextRange.collapse();
                        objTextRange.moveToPoint(parseInt(objElement.getAttribute("SelectX")), parseInt(objElement.getAttribute("SelectY")));
                    }
                    else
                    {
                        objTextRange.moveEnd("textedit");
                        objElement.value += strPinValue;
                    }

                    objTextRange.findText(strPinValue);
                    objTextRange.select();
                }
            }
            else
            {
                try
                {
                    objTextRange.moveToPoint(parseInt(objElement.getAttribute("SelectX")), parseInt(objElement.getAttribute("SelectY")));
                }
                catch (e)
                {
                }
                objTextRange.execCommand("Paste", "false", strPinValue);
            }
        }
        else
            objElement.value = strPinValue;
    }

    return false;
}

function AddPin(strPinName, strPinValue, bForceAdd, bDontPopulate, strDescription, strAppend, strUnappend, objEvent, objElem)
{
    g_strLastKnownFunctionCall = "AddPin";
    try {
        
        if (strPinName == undefined)
            return;
        
        if (bDontPopulate != "False" && bDontPopulate != 'false' && bDontPopulate != false)
        {
            strPinValue = GetVariable(strPinValue, objEvent, objElem, false, true);
        }

        if (strDescription != null && strDescription.length > 2 && strDescription.charAt(0) == '$' && strDescription.charAt(strDescription.length - 1) == '$')
        {
            strPinName = strDescription = strDescription.substr(1, strDescription.length - 2);
            
            if (strPinName.indexOf("Cookie:") == 0)
            {
                document.cookie = strPinName.substr(7) + "=" + strPinValue + ";";
                return;
            }
        }

        var objInput = document.WorkflowForm.elements[strPinName];

        if (objInput == null || objInput == undefined || bForceAdd)
        {
            if (navigator.appName == "Microsoft Internet Explorer")
                objInput = document.createElement("<INPUT name=\"" + strPinName + "\"/>");
            else
                objInput = document.createElement("INPUT");

            if (objInput.name == undefined)
                objInput = document.createElement("INPUT");

            objInput.type = "hidden";
            objInput.name = strPinName;

            objInput.setAttribute("BaseName", strPinName);

            if (strDescription != null && strDescription != "")
                objInput.setAttribute("Description", strDescription);

            document.getElementById("WorkflowForm").appendChild(objInput);

            if (typeof (strPinValue) == "object" && strPinValue.length > 1)
                objInput.Value = strPinValue;
            else
                objInput.value = strPinValue;
                
                
        }
        else
        {
            if (strAppend == "True")
            {
                if (typeof (strPinValue) == "object")
                    objInput.Value[objInput.Value.length] = strPinValue;
                else
                {
                    if (objInput.value == "")
                        objInput.value = " ";

                    objInput.value += "," + strPinValue;
                }
            }
            else if (strUnappend == "True")
            {
                if (typeof (strPinValue) == "object")
                {
                    alert('This feature still needs to be implemented!');
                }
                else
                {
                    var arr = objInput.value.split(',');

                    if (arr.length > 0)
                    {
                        objInput.value = "";
                        for (var i = 0; i < arr.length; i++)
                        {
                            if (objInput.value != "")
                                objInput.value += ",";

                            if (arr[i] != strPinValue)
                                objInput.value += arr[i];
                        }
                    }
                }
            }
            else
            {
                if (typeof (strPinValue) == "object" && strPinValue.length > 1)
                    objInput.Value = strPinValue;
                else
                    objInput.value = strPinValue;
                   
                   
            }
            
        }
    }
    catch (e)
    {
        throw new Error(0, "AddPin() - " + e.message);
    }
}

function RemovePin(strPinName)
{
    g_strLastKnownFunctionCall = "RemovePin";
    for (var i = 0; i < document.getElementById("WorkflowForm").elements.length; i++)
    {
        if (document.getElementById("WorkflowForm").elements[i].getAttribute("type") == "hidden" && document.getElementById("WorkflowForm").elements[i].getAttribute("name").indexOf(":" + strPinName) > -1)
        {
            document.getElementById("WorkflowForm").removeChild(document.getElementById("WorkflowForm").elements[i]);
        }
    }
}

// START - Data Table Client Side Tasks

function AddDataTableRow(strObjectID, strObjectIDPin, objEvent, strLocation, strAutoScroll, strTargetNotUnique)
{
    g_strLastKnownFunctionCall = "AddDataTableRow";
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            /*strObjectIDPin = GetVariable(strObjectIDPin, objEvent, null, false, false);
            objTarget = new Array();
            var objArr = GetElementsByObjectID(strObjectID);

            if (objArr == undefined || objArr == null)
                objArr = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

            for (var i = 0; i < objArr.length; i++)
            {
                if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                    objTarget[objTarget.length] = objArr[i];
            }*/

            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);
            
            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                if (objTmp != null)
                {
                    objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                    if (objArr == undefined || objArr == null || objArr.length == 0)
                        objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                }
                /*
                objArr = GetElementsByObjectID(strObjectID);

	            if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }
            

            if (objTarget != null && objArr != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            objTarget = GetElementsByObjectIDAndTag(strObjectIDPin, "TABLE");
        }
        else
        {
            objTarget = GetElementsByObjectIDAndTag(strObjectID, "TABLE");

            if (objTarget == undefined || objTarget == null || objTarget.length == 0)
            {
                objTarget = GetElementsByObjectIDAndTag(strObjectID, "DIV");

                /*if( objTarget != undefined && objTarget != null && objTarget.length > 0 )
                {
                for (var i = 0; i < objTarget.length; i++)
                objTarget[i] = objTarget[i].childNodes[0];
                }*/
            }
        }
        
        if (objTarget != undefined)
        {
            var nTemplateRowCount = 0;
            var nTemplateRowStart = 0;
            var objTemplateTR = null;
            var objTR = null;
            var objTD = null;
            var objClonedTDTemplate = null;
            var objArrViewVariables = null;
            var nUBoundTmp = 0;
            var nUBound = 0;
            var strHTML = "";
            var objEmptyTR = null;
            var arrImg = null;
            var strAttr = null;
            var strDirection = null;

            for (var i = 0; i < objTarget.length; i++)
            {
                if (objTarget[i].childNodes.length > 0 && objTarget[i].childNodes[0].tagName == "TABLE")
                    objTarget[i] = objTarget[i].childNodes[0];

                nTemplateRowCount = parseInt(objTarget[i].getAttribute("TemplateRowCount"));
                nTemplateRowStart = parseInt(objTarget[i].getAttribute("TemplateRowStart"));
                strDirection = objTarget[i].getAttribute("Direction");

                // Get template row
                for (var j = 0; j < objTarget[i].rows.length; j++)
                {
                    if (objTarget[i].rows[j].id.indexOf("wdttr_") == 0)
                    {
                        objTemplateTR = objTarget[i].rows[j];
                        break;
                    }
                }
                //objTemplateTR = objTarget[i].rows[ nTemplateRowStart + ((objTarget[i].rows.length - nTemplateRowCount - nTemplateRowStart ) % nTemplateRowCount) ];

                nUBound = 0;

                for (var j = 0; j < objTemplateTR.cells.length; j++)
                {
                    nUBoundTmp = objEvent.GetViewVariablesUBound(objTemplateTR.cells[j].innerHTML);

                    if (nUBound < nUBoundTmp)
                        nUBound = nUBoundTmp;
                }

                if (nUBound > 0)
                {
                    if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
                    {

                        var objArrObjectIDPin = null;

                        if (objEvent != null && IsEventVariable(strObjectIDPin))
                            objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
                        else
                            strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                        var objArr = null;

                        var obj = GetElementByObjectID("wdter_" + strObjectID);

                        if (obj != undefined)
                        {
                            objArr = new Array();
                            objArr[objArr.length] = obj;
                        }

                        if (objArr != null)
                        {
                            for (var i = 0; i < objArr.length; i++)
                            {
                                if (objArrObjectIDPin != null)
                                {
                                    for (var j = 0; j < objArrObjectIDPin.length; j++)
                                    {
                                        if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                            objEmptyTR = objArr[i];
                                    }
                                }
                                else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                                    objEmptyTR = objArr[i];
                            }
                        }
                    }
                    else
                    {
                        objEmptyTR = GetElementByObjectID("wdter_" + strObjectID);
                    }

                    if (objEmptyTR != null && objEmptyTR != undefined)
                        objEmptyTR.style.display = "none";
                }

                if (strDirection == "Horizontal")
                {
                    objTR = objTarget[i].insertRow(-1);
                    
                    MergeAttributes(objTemplateTR, objTR);
                    objTR.removeAttribute("id");
                    objTR.removeAttribute("Description");

                    if (navigator.appName == "Microsoft Internet Explorer")
                        objTR.style.display = "block";
                    else
                        objTR.style.display = "table-row";

                    if (objTR.getAttribute("IDPin") != null && objTR.getAttribute("IDPin").charAt(0) == "@" && objTR.getAttribute("IDPin").charAt(objTR.getAttribute("IDPin").length - 1) == "@")
                        objTR.setAttribute("IDPin", objEvent.RenderViewVariablesByIndex(objTR.getAttribute("IDPin"), 0));

                    for (var nAttr = 0; nAttr < objTR.attributes.length; nAttr++)
                    {
                        if (objTR.attributes.item(nAttr).specified && objTR.attributes.item(nAttr).nodeValue != null && objTR.attributes.item(nAttr).nodeValue.charAt(0) == "@" && objTR.attributes.item(nAttr).nodeValue.charAt(objTD.attributes.item(nAttr).nodeValue.length - 1) == "@")
                        {
                            objTR.setAttribute(objTR.attributes.item(nAttr).nodeName, objEvent.RenderViewVariablesByIndex(objTR.attributes.item(nAttr).nodeValue, idx));
                        }
                    }

                    for (var idx = 0; idx < nUBound; idx++)
                    {
                        objTD = objTR.insertCell(-1);

                        MergeAttributes(objTemplateTR.cells[0], objTD);

                        if (objTemplateTR.cells[0].innerHTML != "")
                            strHTML = objEvent.RenderViewVariablesByIndex(objTemplateTR.cells[0].innerHTML.replace(/%40/g, "@"), idx);

                        strHTML = strHTML.replace(/:DataItemIndex:/g, ":" + (nTemplateRowStart + nTemplateRowCount + idx) + ":");
                        strHTML = strHTML.replace(/:dataitemindex:/g, ":" + (nTemplateRowStart + nTemplateRowCount + idx) + ":");
                        strHTML = strHTML.replace(/ObjectID="/g, "id=\"");
                        strHTML = strHTML.replace(/objectid="/g, "id=\"");
                        strHTML = strHTML.replace(/TemplateDescription="/g, "Description=\"");
                        strHTML = strHTML.replace(/templatedescription="/g, "Description=\"");

                        objTD.innerHTML = strHTML;

                        for (var nAttr = 0; nAttr < objTD.attributes.length; nAttr++)
                        {
                            if (objTD.attributes.item(nAttr).specified && objTD.attributes.item(nAttr).nodeValue != null && objTD.attributes.item(nAttr).nodeValue.charAt(0) == "@" && objTD.attributes.item(nAttr).nodeValue.charAt(objTD.attributes.item(nAttr).nodeValue.length - 1) == "@")
                            {
                                objTD.attributes.item(nAttr).value = objEvent.RenderViewVariablesByIndex(objTD.attributes.item(nAttr).nodeValue, idx);
                            }
                        }

                        arrImg = objTD.getElementsByTagName("IMG");

                        for (var idxImg = 0; idxImg < arrImg.length; idxImg++)
                        {
                            arrImg[idxImg].onerror = OnErrorUrl(arrImg[idxImg]);

                            if (arrImg[idxImg].ResizeWidth != null || arrImg[idxImg].ResizeHeight != null)
                                arrImg[idxImg].src = "/ResizeImage.aspx?ImagePath=" + escape(arrImg[idxImg].Url) + "&Width=" + arrImg[idxImg].ResizeWidth + "&Height=" + arrImg[idxImg].ResizeHeight;
                            else if (arrImg[idxImg].Url != null)
                                arrImg[idxImg].src = arrImg[idxImg].Url;

                            if (arrImg[idxImg].ClientVisible == "False")
                                arrImg[idxImg].style.display = "none";
                            else if (arrImg[idxImg].ClientVisible == "True")
                                arrImg[idxImg].style.display = "inline-block";
                        }
                    }
                }
                else
                {
                    for (var idx = 0; idx < nUBound; idx++)
                    {
                        if (strLocation == "Beginning")
                            objTR = objTarget[i].insertRow(nTemplateRowStart + nTemplateRowCount);
                        else
                        {
                            if(objTarget[i].rows[objTarget[i].rows.length - 1].getAttribute("id").indexOf("wdtpr_") > -1)
                                objTR = objTarget[i].insertRow(objTarget[i].rows.length - 1);
                            else
                                objTR = objTarget[i].insertRow(-1);
                        }

                        MergeAttributes(objTemplateTR, objTR);
                        objTR.removeAttribute("id");
                        objTR.removeAttribute("Description");
                        
                        if (navigator.appName == "Microsoft Internet Explorer")
                            objTR.style.display = "block";
                        else
                            objTR.style.display = "table-row";

                        if (objTR.getAttribute("IDPin") != null && objTR.getAttribute("IDPin").charAt(0) == "@" && objTR.getAttribute("IDPin").charAt(objTR.getAttribute("IDPin").length - 1) == "@")
                            objTR.setAttribute("IDPin", objEvent.RenderViewVariablesByIndex(objTR.getAttribute("IDPin"), idx));

                        for (var nAttr = 0; nAttr < objTR.attributes.length; nAttr++)
                        {
                            if (objTR.attributes.item(nAttr).specified && objTR.attributes.item(nAttr).nodeValue != null && objTR.attributes.item(nAttr).nodeValue.charAt(0) == "@" && objTR.attributes.item(nAttr).nodeValue.charAt(objTD.attributes.item(nAttr).nodeValue.length - 1) == "@")
                            {
                                objTR.setAttribute(objTR.attributes.item(nAttr).nodeName, objEvent.RenderViewVariablesByIndex(objTR.attributes.item(nAttr).nodeValue, idx));
                            }
                        }

                        for (var j = 0; j < objTemplateTR.cells.length; j++)
                        {
                            objTD = objTR.insertCell(j);

                            MergeAttributes(objTemplateTR.cells[j], objTD);

                            if (objTemplateTR.cells[j].innerHTML != "")
                                strHTML = objEvent.RenderViewVariablesByIndex(objTemplateTR.cells[j].innerHTML.replace(/%40/g, "@"), idx);

                            strHTML = strHTML.replace(/:DataItemIndex:/g, ":" + (nTemplateRowStart + nTemplateRowCount + idx) + ":");
                            strHTML = strHTML.replace(/:dataitemindex:/g, ":" + (nTemplateRowStart + nTemplateRowCount + idx) + ":");
                            strHTML = strHTML.replace(/ObjectID="/g, "id=\"");
                            strHTML = strHTML.replace(/objectid="/g, "id=\"");
                            strHTML = strHTML.replace(/TemplateDescription="/g, "Description=\"");
                            strHTML = strHTML.replace(/templatedescription="/g, "Description=\"");

                            objTD.innerHTML = strHTML;
                            
                            for (var nAttr = 0; nAttr < objTD.attributes.length; nAttr++)
                            {
                                if (objTD.attributes.item(nAttr).specified && objTD.attributes.item(nAttr).nodeValue != null && objTD.attributes.item(nAttr).nodeValue.charAt(0) == "@" && objTD.attributes.item(nAttr).nodeValue.charAt(objTD.attributes.item(nAttr).nodeValue.length - 1) == "@")
                                {
                                    objTD.attributes.item(nAttr).value = objEvent.RenderViewVariablesByIndex(objTD.attributes.item(nAttr).nodeValue, idx);
                                }
                            }

                            arrImg = objTD.getElementsByTagName("IMG");

                            for (var idxImg = 0; idxImg < arrImg.length; idxImg++)
                            {
                                arrImg[idxImg].onerror = OnErrorUrl(arrImg[idxImg]);

                                if (arrImg[idxImg].ResizeWidth != null || arrImg[idxImg].ResizeHeight != null)
                                    arrImg[idxImg].src = "/ResizeImage.aspx?ImagePath=" + escape(arrImg[idxImg].Url) + "&Width=" + arrImg[idxImg].ResizeWidth + "&Height=" + arrImg[idxImg].ResizeHeight;
                                else if (arrImg[idxImg].Url != null)
                                    arrImg[idxImg].src = arrImg[idxImg].Url;

                                if (arrImg[idxImg].ClientVisible == "False")
                                    arrImg[idxImg].style.display = "none";
                                else if (arrImg[idxImg].ClientVisible == "True")
                                    arrImg[idxImg].style.display = "inline-block";
                            }
                        }
                    }

                    if (strAutoScroll == "New Data Row" && objTR != null && objTR != undefined)
                        objTR.scrollIntoView(false);
                    else if (strAutoScroll == "Top")
                        objTarget[i].scrollIntoView(true);
                    else if (strAutoScroll == "Bottom")
                        objTarget[i].rows[objTarget[i].rows.length - 1].scrollIntoView(false);
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "AddDataTableRow() - " + e.message);
    }
}

function OnErrorUrl(objImg, strUrl)
{
    g_strLastKnownFunctionCall = "OnErrorUrl";
    return function()
    {
        try
        {
            objImg.onerror = null;
            objImg.src = objImg.ErrorUrl;
        }
        catch (Err)
        {
        }
    };
}

function RemoveDataTableRow(strObjectID, strObjectIDPin, objEvent, strAll, strRowIDPin, strTargetNotUnique)
{
    g_strLastKnownFunctionCall = "RemoveDataTableRow";
    var objTarget = null;

    if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
    {
        /*strObjectIDPin = PopulateViewVariables(strObjectIDPin);
        objTarget = new Array();
        var objArr = GetElementsByObjectIDAndTag(strObjectID, "TABLE");

        if (objArr == undefined || objArr == null)
            objArr = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

        for (var i = 0; i < objArr.length; i++)
        {
            if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                objTarget[objTarget.length] = objArr[i];
        }*/

        var objArrObjectIDPin = null;

        if (objEvent != null && IsEventVariable(strObjectIDPin))
            objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
        else
            strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

        var objArr = null;
        objTarget = new Array();

        if (strTargetNotUnique == "True")
        {
            var objTmp = GetElementByObjectID(strObjectID);

            if (objTmp != null)
            {
                objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objArr == undefined || objArr == null || objArr.length == 0)
                    objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
            }
            /*
            objArr = GetElementsByObjectID(strObjectID);

	            if( objArr == undefined || objArr == null || objArr.length == 0 )
            objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
        }
        else
        {
            var obj = GetElementByObjectID(strObjectID);

            if (obj == undefined || obj == null)
                obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

            if (obj != undefined)
            {
                objArr = new Array();
                objArr[objArr.length] = obj;
            }
        }


        if (objTarget != null && objArr != null)
        {
            for (var i = 0; i < objArr.length; i++)
            {
                if (objArrObjectIDPin != null)
                {
                    for (var j = 0; j < objArrObjectIDPin.length; j++)
                    {
                        if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                            objTarget[objTarget.length] = objArr[i];
                    }
                }
                else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                    objTarget[objTarget.length] = objArr[i];
            }
        }
    }
    else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
    {
        objTarget = GetElementsByObjectIDAndTag(strObjectIDPin, "TABLE");
    }
    else
    {
        var objArr = GetElementsByObjectIDAndTag(strObjectID, "TABLE");
        var objArr2 = GetElementsByObjectIDAndTag(strObjectID, "DIV");

        objTarget = new Array();

        if (objArr != null)
        {
            for (var i = 0; i < objArr.length; i++)
                objTarget[objTarget.length] = objArr[i];
        }

        if (objArr2 != null)
        {
            for (var i = 0; i < objArr2.length; i++)
                objTarget[objTarget.length] = objArr2[i].childNodes(0);
        }
    }

    var objRowIDPin = null;
    var objRow = null;
    var objTmp = null;

    if (strRowIDPin != null && strRowIDPin != undefined && strRowIDPin != '')
    {
        if (objEvent != null && IsEventVariable(strRowIDPin))
        {
            objRowIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strRowIDPin));

            if (objRowIDPin != null)
            {
                objRow = new Array();

                for (var i = 0; i < objRowIDPin.length; i++)
                {
                    objTmp = GetElementByIDPinAndTag(objRowIDPin.GetValue(i), "TR");

                    if (objTmp != undefined)
                        objRow[objRow.length] = objTmp;
                }
            }
        }
        else
        {
            strRowIDPin = GetVariable(strRowIDPin, objEvent, null, false);
            objRow = GetElementByIDPinAndTag(strRowIDPin, "TR");
        }
    }

    var bFoundRow = false;
    var objEmptyRow = null;

    if (objTarget != undefined)
    {
        for (var i = 0; i < objTarget.length; i++)
        {
            if (strAll == "True")
            {
                for (var j = 0; j < objTarget[i].rows.length; j++)
                {
                    if (objTarget[i].rows[j].id.indexOf("wdter_") == -1 && objTarget[i].rows[j].id.indexOf("wdthr_") == -1 && objTarget[i].rows[j].id.indexOf("wdttr_") == -1)
                    {
                        objTarget[i].deleteRow(j);
                        j--;
                    }
                    else if (objTarget[i].rows[j].id.indexOf("wdter_") > -1)
                    {
                        objTarget[i].rows[j].style.display = "block";
                    }
                }
            }
            else
            {
                if (objRow != undefined && objRow.length > 0)
                {
                    for (var r = 0; r < objRow.length; r++)
                    {
                        if (objTarget[i].rows.length > objRow[r].rowIndex)
                        {
                            objTarget[i].deleteRow(objRow[r].rowIndex);
                        }
                    }

                    for (var j = 0; j < objTarget[i].rows.length; j++)
                    {
                        if (objTarget[i].rows[j].id != "wdter_" + objTarget[i].id && objTarget[i].rows[j].id != "wdthr_" + objTarget[i].id && objTarget[i].rows[j].id != "wdttr_" + objTarget[i].id)
                        {
                            bFoundRow = true;
                        }
                        else if (objTarget[i].rows[j].id == "wdter_" + objTarget[i].id)
                        {
                            objEmptyRow = objTarget[i].rows[j];
                        }
                    }

                    if (!bFoundRow && objEmptyRow != null && objEmptyRow != undefined)
                        objEmptyRow.style.display = "block";
                }
                else if (objRow != undefined && objTarget[i].rows.length > objRow.rowIndex && objTarget[i].rows[objRow.rowIndex].IDPin == strRowIDPin)
                {
                    objTarget[i].deleteRow(objRow.rowIndex);

                    for (var j = 0; j < objTarget[i].rows.length; j++)
                    {
                        if (objTarget[i].rows[j].id != "wdter_" + objTarget[i].id && objTarget[i].rows[j].id != "wdthr_" + objTarget[i].id && objTarget[i].rows[j].id != "wdttr_" + objTarget[i].id)
                        {
                            bFoundRow = true;
                        }
                        else if (objTarget[i].rows[j].id == "wdter_" + objTarget[i].id)
                        {
                            objEmptyRow = objTarget[i].rows[j];
                        }
                    }

                    if (!bFoundRow && objEmptyRow != null && objEmptyRow != undefined)
                        objEmptyRow.style.display = "block";
                }
            }
        }
    }
}

// END - Data Table Client Side Tasks

// START - Chart Client Side Tasks

function IncrementChartValue(objEvent, strObjectID, strValueType, strIncrementBy, strSerieIDPin, strAxis, strOppositeAxisCompareValue, strOppositeAxisCompareIDPin, strSliceLabel)
{
    
    g_strLastKnownFunctionCall = "IncrementChartValue";
    try
    {
        if (strValueType == "")
            strValueType = "int";

        var objElement = GetElementByObjectIDAndTag(strObjectID, "OBJECT");

        if (objElement == undefined)
            objElement = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

        if (objElement == undefined)
        {
            objElement = document.getElementsByName("ctl_" + strObjectID.replace(/-/g, ""));

            if (objElement != undefined)
                objElement = objElement[0];
        }
        
        if (objElement != undefined)
        {
            ChartCtlIncrementChartValue(objEvent, objElement, strIncrementBy, strSerieIDPin, strAxis, strOppositeAxisCompareValue, strOppositeAxisCompareIDPin, strSliceLabel);
        }
    }
    catch (e)
    {
        throw new Error(0, "IncrementChartValue() - " + e.message);
    }
}

function DecrementChartValue(objEvent, strObjectID, strValueType, strDecrementBy, strSerieIDPin, strAxis, strOppositeAxisCompareValue, strOppositeAxisCompareIDPin, strSliceLabel)
{
    g_strLastKnownFunctionCall = "DecrementChartValue";
    try
    {
        if (strValueType == "")
            strValueType = "int";

        var objElement = GetElementByObjectIDAndTag(strObjectID, "OBJECT");

        if (objElement == undefined)
            objElement = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

        if (objElement == undefined)
        {
            objElement = document.getElementsByName("ctl_" + strObjectID.replace(/-/g, ""));

            if (objElement != undefined)
                objElement = objElement[0];
        }

        if (objElement != undefined)
        {
            ChartCtlDecrementChartValue(objEvent, objElement, strDecrementBy, strSerieIDPin, strAxis, strOppositeAxisCompareValue, strOppositeAxisCompareIDPin, strSliceLabel);
        }
    }
    catch (e)
    {
        throw new Error(0, "DecrementChartValue() - " + e.message);
    }
}

function FocusChart(strObjectID, strIDPin)
{
    g_strLastKnownFunctionCall = "FocusChart";
    try
    {
        var objElement = GetElementByObjectIDAndTag(strObjectID, "OBJECT");

        if (objElement == undefined)
            objElement = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

        if (objElement != undefined)
        {
            try
            {
                if (objElement.type == "FlashChartElement") 
                {
                    objElement.Focus(new String(strIDPin));
                }
                else
                {
                    if (objElement.Pie != undefined)
                        objElement.Pie.Serie.Focus(strIDPin);

                    objElement.BaseChart.Reset();
                }
            }
            catch (e) 
            {
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "FocusChart() - " + e.message);
    }
}

function ClearFocusChart(strObjectID)
{
    g_strLastKnownFunctionCall = "ClearFocusChart";
    try
    {
        var objElement = GetElementByObjectIDAndTag(strObjectID, "OBJECT");

        if (objElement == undefined)
            objElement = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

        if (objElement != undefined)
        {
            try
            {
                if (objElement.type == "FlashChartElement")
                {
                    objElement.ClearFocus();
                }
                else
                {
                    if (objElement.Pie != undefined)
                        objElement.Pie.Serie.ClearFocus();
                }

                objElement.BaseChart.Reset();
            }
            catch (e)
            {
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "ClearFocusChart() - " + e.message);
    }
}

// END - Chart Client Side Tasks

function NumberToStringWithDigitSeperator(str)
{
    g_strLastKnownFunctionCall = "NumberToStringWithDigitSeperator";
    var nDigitSepPos = -1;
    var strReturn = str;
    var nDecimalPos = -1;
    var strDecimal = "";
    var strIntegers = "";

    if ((nDecimalPos = str.indexOf(".")) > -1)
    {
        strDecimal = str.substr(nDecimalPos);
        strIntegers = str.substr(0, nDecimalPos);
    }

    if (strIntegers.length > 3)
    {
        strReturn = "";
        var i = strIntegers.length % 3;

        if (i > 0)
        {
            strReturn += strIntegers.substr(0, i);
        }

        for (; i < strIntegers.length; i += 3)
        {
            if (i > 0)
                strReturn += ",";

            strReturn += strIntegers.substr(i, 3);
        }

        strReturn += strDecimal;
    }

    return strReturn;
}

// START - Label Client Side Tasks

function IncrementValue(strSrcElement, objEvent, strValueType, strIncrementBy, strObjectID, strObjectIDPin)
{
    g_strLastKnownFunctionCall = "IncrementValue";
    try
    {
        if (strValueType == "")
            strValueType = "int";

        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            strObjectIDPin = GetVariable(strObjectIDPin, objEvent, null, false);

            objTarget = new Array();
            var objArr = GetElementsByObjectID(strObjectID);

            if (objArr == undefined || objArr == null)
                objArr = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

            for (var i = 0; i < objArr.length; i++)
            {
                if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                    objTarget[objTarget.length] = objArr[i];
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            objTarget = GetElementsByIDPin(strObjectIDPin);
        }
        else
        {
            objTarget = document.getElementById(strSrcElement);
        }

        if (objTarget == undefined)
        {
            var strAttribute = objEvent.GetParameter("IDPin");
            objTarget = GetElementByIDPin(strAttribute);
        }

        if (objTarget != undefined && objTarget != null)
        {
            if (strIncrementBy.length > 2 && strIncrementBy.charAt(0) == "!" && strIncrementBy.charAt(strIncrementBy.length - 1) == "!")
                strIncrementBy = objEvent.GetParameter(strIncrementBy.substr(1, strIncrementBy.length - 2));

            if (strIncrementBy == undefined)
                strIncrementBy = "";

            var strPrependDollarSign = "";
            var bHasDigitSeperator = false;
            var strTotal = "";
            var fTotal;
            var strLeftOperand = "";

            if (objTarget.length == undefined)
            {
                strLeftOperand = GetInnerText(objTarget);

                if (strLeftOperand.indexOf("$") == 0)
                {
                    strPrependDollarSign = "$";
                    strLeftOperand = strLeftOperand.replace('$', '');
                    bHasDigitSeperator = true;
                }

                if (strLeftOperand.indexOf(",") > -1)
                {
                    strLeftOperand = strLeftOperand.replace(/,/g, '');
                    bHasDigitSeperator = true;
                }

                if (strValueType == "int")
                {
                    var nIncrementBy = parseInt(strIncrementBy);

                    fTotal = parseFloat(strLeftOperand) + nIncrementBy;

                    if (bHasDigitSeperator)
                        strTotal = NumberToStringWithDigitSeperator(fTotal.toString());
                    else
                        strTotal = fTotal;

                    SetInnerText(objTarget, strPrependDollarSign + fTotal);
                }
                else
                {
                    var fIncrementBy = parseFloat(strIncrementBy);

                    fTotal = parseFloat(strLeftOperand) + fIncrementBy;
                    fTotal = fTotal.toFixed(2);

                    if (bHasDigitSeperator)
                        strTotal = NumberToStringWithDigitSeperator(fTotal.toString());
                    else
                        strTotal = fTotal;


                    SetInnerText(objTarget, strPrependDollarSign + strTotal);
                }
            }
            else
            {
                for (var i = 0; i < objTarget.length; i++)
                {
                    strPrependDollarSign = "";
                    bHasDigitSeperator = false;
                    strTotal = "";
                    fTotal;
                    strLeftOperand = GetInnerText(objTarget[i]);

                    if (strLeftOperand.indexOf("$") == 0)
                    {
                        strPrependDollarSign = "$";
                        strLeftOperand = strLeftOperand.replace('$', '');
                        bHasDigitSeperator = true;
                    }

                    if (strLeftOperand.indexOf(",") > -1)
                    {
                        strLeftOperand = strLeftOperand.replace(/,/g, '');
                        bHasDigitSeperator = true;
                    }

                    if (strValueType == "int")
                    {
                        var nIncrementBy = parseInt(strIncrementBy);

                        fTotal = parseFloat(strLeftOperand) + nIncrementBy;

                        if (bHasDigitSeperator)
                            strTotal = NumberToStringWithDigitSeperator(fTotal.toString());
                        else
                            strTotal = fTotal;

                        SetInnerText(objTarget[i], strPrependDollarSign + fTotal);
                    }
                    else
                    {
                        var fIncrementBy = parseFloat(strIncrementBy);

                        fTotal = parseFloat(strLeftOperand) + fIncrementBy;
                        fTotal = fTotal.toFixed(2);

                        if (bHasDigitSeperator)
                            strTotal = NumberToStringWithDigitSeperator(fTotal.toString());
                        else
                            strTotal = fTotal;


                        SetInnerText(objTarget[i], strPrependDollarSign + strTotal);
                    }
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "IncrementValue() - " + e.message);
    }
}

function DecrementValue(strSrcElement, objEvent, strValueType, strDecrementBy)
{
    g_strLastKnownFunctionCall = "DecrementValue";
    try
    {
        var nDecrementBy;

        if (strValueType == "")
            strValueType = "int";

        try
        {
            nDecrementBy = parseInt(strDecrementBy);
        }
        catch (e)
        {

        }

        var objElement = document.getElementById(strSrcElement);

        if (objElement == undefined)
        {
            var strAttribute = objEvent.GetParameter("IDPin");
            objElement = GetElementByIDPin(strAttribute);
        }

        if (objElement != undefined)
        {
            var fTotal = parseFloat(GetInnerText(objElement)) - nDecrementBy;

            if (strValueType == "dec")
                SetInnerText(objElement, fTotal.toFixed(2));
            else
                SetInnerText(objElement, fTotal);
        }
    }
    catch (e)
    {
        throw new Error(0, "DecrementValue() - " + e.message);
    }
}

function GetElementByObjectIDAndTag(strID, strTag)
{
    g_strLastKnownFunctionCall = "GetElementByObjectIDAndTag";
    var arr = document.getElementsByTagName(strTag);

    for (var i = 0; i < arr.length; i++)
    {
        if (arr[i].getAttribute("id") == strID)
        {
            return arr[i];
        }
        else if (arr[i].getAttribute("ObjectID") == strID)
        {
            return arr[i];
        }
    }
}

function GetElementsByObjectIDAndTag(strID, strTag)
{
    g_strLastKnownFunctionCall = "GetElementsByObjectIDAndTag";
    var objArr = new Array();

    var arr = document.getElementsByTagName(strTag);
    for (var i = 0; i < arr.length; i++)
    {
        if (arr[i].getAttribute("id") == strID)
        {
            objArr[objArr.length] = arr[i];
        }
        /*else if( arr[i].getAttribute( "ObjectID" ) == strID )
        {
        objArr[objArr.length] = arr[i];
        }*/
    }

    return objArr;
}

function GetElementByObjectID(strID)
{
    g_strLastKnownFunctionCall = "GetElementByObjectID";
    var obj = document.getElementById(strID);

    return obj;

    /*
    alert( strID + " " + obj );
	
	if( obj != undefined )
    return obj;
	
	for( var i = 0; i < document.all.length; i++ )
    {
    if( document.all(i).getAttribute( "id" ) == strID )
    {
    return document.all(i);
    }
    else if( document.all(i).getAttribute( "ObjectID" ) == strID )
    {
    return document.all(i);
    }
    }*/
}

function GetElementsByObjectID(strID)
{
    g_strLastKnownFunctionCall = "GetElementsByObjectID";
    var objArr = new Array();

    for (var i = 0; i < document.all.length; i++)
    {
        if (document.all(i).getAttribute("id") == strID)
        {
            objArr[objArr.length] = document.all(i);
        }
        else if (document.all(i).getAttribute("ObjectID") == strID)
        {
            objArr[objArr.length] = document.all(i);
        }
    }

    return objArr;
}

function GetElementByIDPin(strID)
{
    g_strLastKnownFunctionCall = "GetElementByIDPin";
    strID = PopulateViewVariables(strID);

    if (navigator.appName == "Microsoft Internet Explorer")
    {
        for (var i = 0; i < document.all.length; i++)
        {
            if (document.all(i).getAttribute("IDPin") == strID)
            {
                return document.all(i);
            }
        }
    }
    else
    {
        return RecursiveGetElementByIDPin(strID, document.body);
    }
}

function GetElementByIDPinAndTag(strID, strTag)
{
    g_strLastKnownFunctionCall = "GetElementByIDPinAndTag";
    strID = PopulateViewVariables(strID);

    var arr = document.getElementsByTagName(strTag);

    for (var i = 0; i < arr.length; i++)
    {
        if (arr[i].getAttribute("IDPin") == strID)
        {
            return arr[i];
        }
    }
}

function RecursiveGetElementByIDPin(strID, obj)
{
    g_strLastKnownFunctionCall = "RecursiveGetElementByIDPin";
    var objReturn = null;

    for (var i = 0; i < obj.childNodes.length; i++)
    {
        if (obj.childNodes[i].tagName != undefined && obj.childNodes[i].tagName != null)
        {
            if (obj.childNodes[i].getAttribute("IDPin") == strID)
            {
                objReturn = obj.childNodes[i];
                break;
            }
            else
            {
                objReturn = RecursiveGetElementByIDPin(strID, obj.childNodes[i]);

                if (objReturn != null)
                    break;
            }
        }
    }

    return objReturn;
}

function GetElementsByIDPin(strID)
{
    g_strLastKnownFunctionCall = "GetElementsByIDPin";
    var objArr = new Array();

    strID = PopulateViewVariables(strID);

    if (navigator.appName == "Microsoft Internet Explorer")
    {
        for (var i = 0; i < document.all.length; i++)
        {
            if (document.all(i).getAttribute("IDPin") == strID)
            {
                objArr[objArr.length] = document.all(i);
            }
        }
    }
    else
    {
        objArr = RecursiveGetElementsByIDPin(strID, document.body);
    }

    return objArr;
}

function RecursiveGetElementsByIDPin(strID, obj)
{
    g_strLastKnownFunctionCall = "RecursiveGetElementsByIDPin";
    var objArr = new Array();
    var objReturn = null;

    for (var i = 0; i < obj.childNodes.length; i++)
    {
        if (obj.childNodes[i].tagName != undefined && obj.childNodes[i].tagName != null)
        {
            if (obj.childNodes[i].getAttribute("IDPin") == strID)
            {
                objArr[objArr.length] = obj.childNodes[i];
            }
            else
            {
                objReturn = RecursiveGetElementByIDPin(strID, obj.childNodes[i]);

                for (var j = 0; j < objReturn.length; j++)
                    objArr[objArr.length] = objReturn[j];
            }
        }
    }

    return objArr;
}

function GetElementByBaseName(strBaseName)
{
    for (var i = 0; i < document.all.length; i++)
    {
        if (document.all(i).getAttribute("BaseName") == strBaseName)
        {
            return document.all(i);
        }
    }
}

function GetElementByDescription(strDesc)
{
    for (var i = 0; i < document.all.length; i++)
    {
        if (document.all(i).getAttribute("Description") == strDesc)
        {
            return document.all(i);
        }
    }
}

function TimedHighlight(strSrcElement, objEvent, strHighlightColor, strHighlightTimeout, strObjectID, strObjectIDPin)
{
    g_strLastKnownFunctionCall = "TimedHighlight";
    try
    {
        if (strHighlightColor == "")
            strHighlightColor = "black";

        if (strHighlightTimeout == "")
            strHighlightTimeout = 3000;

        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            strObjectIDPin = GetVariable(strObjectIDPin, objEvent, null, false);

            objTarget = new Array();
            var objArr = GetElementsByObjectID(strObjectID);

            if (objArr == undefined || objArr == null)
                objArr = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

            for (var i = 0; i < objArr.length; i++)
            {
                if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                    objTarget[objTarget.length] = objArr[i];
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != '')
        {
            objTarget = GetElementsByObjectID(strObjectID);
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            objTarget = GetElementsByIDPin(strObjectIDPin);
        }
        else
        {
            objTarget = new Array();
            objTarget[objTarget.length] = document.getElementById(strSrcElement);
        }

        if (objTarget == undefined)
        {
            var strAttribute = objEvent.GetParameter("IDPin");
            objTarget = new Array();
            objTarget[objTarget.length] = GetElementByIDPin(strAttribute);
        }

        if (objTarget != undefined && objTarget != null)
        {
            var strOldStyle = "";

            for (var i = 0; i < objTarget.length; i++)
            {
                strOldStyle = objTarget[i].style.cssText.replace(/'/g, '\\\'');

                objTarget[i].style.fontWeight = "bold";
                objTarget[i].style.color = strHighlightColor;

                nTimedHighlightID = setTimeout("UnHightlightText( '', '" + strObjectIDPin + "', '" + strObjectID + "', '" + strOldStyle + "' );", strHighlightTimeout);
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "TimedHighlight() - " + e.message);
    }
}

function UnHightlightText(strSrcElement, strObjectIDPin, strObjectID, strOldStyle)
{
    g_strLastKnownFunctionCall = "UnHightlightText";
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            objTarget = new Array();
            var objArr = GetElementsByObjectID(strObjectID);

            if (objArr == undefined || objArr == null)
                objArr = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

            for (var i = 0; i < objArr.length; i++)
            {
                if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                    objTarget[objTarget.length] = objArr[i];
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != '')
        {
            objTarget = GetElementsByObjectID(strObjectID);
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            objTarget = GetElementsByIDPin(strObjectIDPin);
        }
        else
        {
            objTarget = new Array();
            objTarget[objTarget.length] = document.getElementById(strSrcElement);
        }

        if (objTarget != undefined && objTarget != null)
        {
            for (var i = 0; i < objTarget.length; i++)
            {
                objTarget[i].style.fontWeight = "normal";
                objTarget[i].style.cssText = strOldStyle;
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "UnHightlightText() - " + e.message);
    }
}

// END - Label Client Side Tasks

function ExecuteHiddenTrigger_Finished(obj, strMode, hExecutingHidderTriggerTimeout)
{
    AddFunctionCallLog("ExecuteHiddenTrigger_Finished");
    try
    {
        if (strMode == "Ajax")
        {
            if (obj != null && obj.readyState == 4)
            {
                HideWaitWindow();

                if (obj.status != 200)
                {
                    switch (obj.status)
                    {
                        case 12029:
                            MessageWindow(null, "Error : <span style=\"color:#CC0000\">The attempt to connect to the server failed.</span>", 'False', null, null, "True");
                            break;
                        default:
                            if (obj.statusText == "Unknown")
                                MessageWindow(null, "Error : <span style=\"color:#CC0000\">Could not connect to the server. Code[ " + obj.status + " ]</span>", 'False', null, null, "True");
                            else
                                MessageWindow(null, "Error : <span style=\"color:#CC0000\">" + obj.statusText + " Code[ " + obj.status + " ]</span>", 'False', null, null, "True");
                            break;
                    }
                }
                else
                {
                    //var dtEnd = new Date();
                    //alert("Execute Hidden Trigger : " + (dtEnd - g_dtExecuteHiddenTriggerStart));
                    if (obj.responseXML != null && obj.responseXML.documentElement != null)
                    {
                        var objException = obj.responseXML.documentElement.getElementsByTagName("Exception");
                        
                        if (objException != null && objException.length > 0)
                        {
                            var objExceptionMsg = objException[0].getElementsByTagName("Message");
                            var strExceptionMsg = "Unknown exception has occured.";

                            if (navigator.userAgent.indexOf("Firefox") != -1)
                                strExceptionMsg = objExceptionMsg[0].textContent;
                            else if (navigator.userAgent.indexOf("Safari") != -1)
                                strExceptionMsg = objExceptionMsg[0].childNodes[0].nodeValue;
                            else
                                strExceptionMsg = objExceptionMsg[0].text;

                            MessageWindow(null, "Error : <span style=\"color:#CC0000\">" + strExceptionMsg + "</span>", 'False', null, null, "True");
                        }

                        var objEvents = obj.responseXML.documentElement.getElementsByTagName("Events");

                        if (objEvents != null && objEvents.length > 0)
                        {
                            var objEventService = GetEventService();
                            objEventService.ParseXml(objEvents, RecursiveGetTabGuid());
                        }
                    }
                }
            }
        }
        else
        {
            HideWaitWindow();

            if (obj != undefined && obj != null)
            {
                obj.contentWindow.document.XMLDocument = obj.contentWindow.document.getElementById("xXml");
                if (obj.contentWindow.document.XMLDocument != undefined)
                {
                    var objException = obj.contentWindow.document.XMLDocument.documentElement.getElementsByTagName("Exception");
                    
                    if (objException != null && objException.length > 0)
                    {
                        var objExceptionMsg = objException[0].getElementsByTagName("Message");
                        var strExceptionMsg = "Unknown exception has occured.";

                        if (navigator.userAgent.indexOf("Firefox") != -1)
                            strExceptionMsg = objExceptionMsg[0].textContent;
                        else
                            strExceptionMsg = objExceptionMsg[0].text;

                        MessageWindow(null, "Error : <span style=\"color:#CC0000\">" + strExceptionMsg + "</span>", 'False', null, null, "True");
                    }

                    var objEvents = obj.contentWindow.document.XMLDocument.documentElement.getElementsByTagName("Events");

                    if (objEvents != null && objEvents.length > 0)
                    {
                        var objEventService = GetEventService();

                        objEventService.ParseXml(objEvents, RecursiveGetTabGuid());
                    }
                }

                document.body.removeChild(obj);
            }

            g_bIsExecutingHidderTrigger = false;
        }
    }
    catch (e)
    {
        throw new Error(0, "ExecuteHiddenTrigger_Finished() - " + e.message);
    }

    RemoveFunctionCallLog();
}

function ExecuteHiddenTrigger_Timeout()
{
    AddFunctionCallLog("ExecuteHiddenTrigger_Timeout");
    if (g_hExecutingHidderTriggerTimeout != null)
    {
        clearTimeout(g_hExecutingHidderTriggerTimeout);
        g_hExecutingHidderTriggerTimeout = null;
    }

    if (g_bIsExecutingHidderTrigger && g_objExecutingHidderTriggerReq != null)
    {
        HideWaitWindow();

        MessageWindow(null, "Error : <span style=\"color:#CC0000\">Your request has timed out.</span>", 'False', null, null, "True");

        g_bIsExecutingHidderTrigger = false;
    }

    RemoveFunctionCallLog();
}

var g_dtExecuteHiddenTriggerStart = null;

function ExecuteHiddenTrigger(objEvent, strTriggerWorkflowGuid, arrQueryStringPins, strNewTokenGuid, strUseAjax) {
    AddFunctionCallLog("ExecuteHiddenTrigger");
    if (!g_bIsExecutingHidderTrigger || strUseAjax != "True")
    {
        try
        {
            var strQueryString = "";
            var strForm = "";

            var objXMLHttpRequest = GetXMLHttpRequest();

            if (objXMLHttpRequest != null && strUseAjax == "True")
            {
                var objTop = GetTopLevelWindow();
                objTop.g_bSuppressWaitWindow = false;
                setTimeout(ShowWaitWindow, 1500);
            }

            if (objXMLHttpRequest != null && strUseAjax == "True")
            {
                //g_dtExecuteHiddenTriggerStart = new Date();

                if (arrQueryStringPins != undefined)
                {
                    var arr = null;
                    for (var i = 0; i < arrQueryStringPins.length; i++)
                    {
                        if (strForm != "")
                            strForm += "&";

                        if (typeof (arrQueryStringPins[i][1]) == "object")
                        {
                            if (arrQueryStringPins[i][1].length == 1)
                            {
                                //strForm += escape(arrQueryStringPins[i][0]) + "=" + escape(GetVariable(arrQueryStringPins[i][1][0], objEvent, null, true));

                                strForm += escape(arrQueryStringPins[i][0]) + "=";
                                arrQueryStringPins[i][1] = GetVariable(arrQueryStringPins[i][1][0], objEvent, null, false, true);
   
                                if (typeof (arrQueryStringPins[i][1]) == "object" && (arrQueryStringPins[i][1].length == undefined || arrQueryStringPins[i][1].length > 1))
                                {
                                    var strXml = "";
                                    for (var j = 0; j < arrQueryStringPins[i][1].length; j++)
                                    {
                                        if (arrQueryStringPins[i][1][j] == undefined)
                                            strXml += WrapIntoDataItem("");
                                        else
                                            strXml += WrapIntoDataItem(arrQueryStringPins[i][1][j]);
                                    }
                                    
                                    strForm += encodeURIComponent(strXml);
                                }
                                else
                                {
                                    strForm += encodeURIComponent(arrQueryStringPins[i][1]);
                                }
                            }
                            else
                            {
                                strForm += encodeURIComponent(arrQueryStringPins[i][0]) + "=" + encodeURIComponent(GetVariable(arrQueryStringPins[i][1], objEvent, null, true));
                                arrQueryStringPins[i][1] = GetVariable(arrQueryStringPins[i][1], objEvent, null, false, true);
                            }
                        }
                        else
                        {
                            strForm += encodeURIComponent(arrQueryStringPins[i][0]) + "=" + encodeURIComponent(GetVariable(arrQueryStringPins[i][1], objEvent, null, true));
                            arrQueryStringPins[i][1] = GetVariable(arrQueryStringPins[i][1], objEvent, null, false);
                        }
                    }
                }

                //var dtEnd = new Date();
                //alert("Execute Hidden Trigger : " + (dtEnd - g_dtExecuteHiddenTriggerStart));
                g_dtExecuteHiddenTriggerStart = new Date();

                var hExecutingHidderTriggerTimeout = setTimeout(ExecuteHiddenTrigger_Timeout, 20000);
                objXMLHttpRequest.onreadystatechange = function() { ExecuteHiddenTrigger_Finished(objXMLHttpRequest, "Ajax", hExecutingHidderTriggerTimeout); };

                objXMLHttpRequest.open("POST", "/TriggerWorkflow.aspx?WorkflowModuleGUID=" + escape(strTriggerWorkflowGuid) + "&KeepSession=True&TokenGuid=" + GenerateGuid() + "&ReturnWorkflowContext=True&AjaxRequest=True", true);
                objXMLHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

                objXMLHttpRequest.send(strForm);

                // Execute Trigger Viewer code
                var objEventService = GetEventService();

                if (objEventService != null && objEventService.Mode == "Flash")
                {
                    try
                    {
                        objEventService.ExecuteTrigger(strTriggerWorkflowGuid, arrQueryStringPins);
                    }
                    catch (e)
                    {
                        
                    }
                }
            }
            else
            {
                var iframe = null;

                if (navigator.appName == "Microsoft Internet Explorer")
                {
                    /*
                    iframe = document.createElement("<iframe onload=\"ExecuteHiddenTrigger_Finished(this);\" style=\"display:none;\" src=\"/TriggerWorkflow.aspx?WorkflowModuleGUID=" + escape( strTriggerWorkflowGuid ) + strQueryString + "&KeepSession=True&TokenGuid=" + GenerateGuid() + "&ReturnWorkflowContext=True\"></iframe>");
        	       
	                iframe.setAttribute( "id", GenerateGuid() );
                    iframe.setAttribute( "onload", "ExecuteHiddenTrigger_Finished(this);" );
        	        
	                document.body.appendChild(iframe);    */
                    iframe = document.createElement("<iframe id=\"f_" + GenerateGuid() + "\" onload=\"ExecuteHiddenTrigger_Finished(this);\" src=\"blank.asp\"></iframe>");

                    document.body.appendChild(iframe);

                    var iframe2 = document.frames(iframe.id);
                    //var iframe2 = document.frames(document.frames.length-1);

                    var objBody = iframe2.document.createElement("BODY");
                    iframe2.document.appendChild(objBody);

                    var objForm = iframe2.document.createElement("FORM");
                    objForm.id = "WorkflowForm";
                    objForm.name = "WorkflowForm";

                    iframe2.document.body.appendChild(objForm);

                    if (arrQueryStringPins != undefined)
                    {
                        var objInput = null;
                        for (var i = 0; i < arrQueryStringPins.length; i++)
                        {
                            objInput = iframe2.document.createElement("<input name=\"" + arrQueryStringPins[i][0] + "\" type=\"hidden\" />");

                            if (typeof (arrQueryStringPins[i][1]) == "object")
                            {
                                if (arrQueryStringPins[i][1].length == 1)
                                {
                                    objInput.value = GetVariable(arrQueryStringPins[i][1][0], objEvent, null, true);
                                }
                                else
                                {
                                    objInput.value = GetVariable(arrQueryStringPins[i][1], objEvent, null, true);
                                }
                            }
                            else
                            {
                                objInput.value = GetVariable(arrQueryStringPins[i][1], objEvent, null, true);
                            }

                            //objInput.value = GetVariable( arrQueryStringPins[i][1], objEvent, null, true );
                            objForm.appendChild(objInput);
                        }
                    }

                    objForm.action = "TriggerWorkflow.aspx?WorkflowModuleGUID=" + escape(strTriggerWorkflowGuid) + "&KeepSession=True&TokenGuid=" + GenerateGuid() + "&ReturnWorkflowContext=True";
                    objForm.method = "POST";

                    objForm.submit();

                    iframe.style.display = "none";
                }
                else
                {
                    if (arrQueryStringPins != undefined)
                    {
                        for (var i = 0; i < arrQueryStringPins.length; i++)
                        {
                            strQueryString += "&" + escape(arrQueryStringPins[i][0]) + "=" + escape(GetVariable(arrQueryStringPins[i][1], objEvent, null));
                            arrQueryStringPins[i][1] = GetVariable(arrQueryStringPins[i][1], objEvent, null, false);
                        }
                    }

                    iframe = document.createElement("iframe");

                    document.body.appendChild(iframe);

                    iframe.setAttribute("onload", "ExecuteHiddenTrigger_Finished(this);");
                    iframe.setAttribute("style", "display:none;");
                    iframe.setAttribute("id", GenerateGuid());

                    iframe.setAttribute("src", "/TriggerWorkflow.aspx?WorkflowModuleGUID=" + escape(strTriggerWorkflowGuid) + strQueryString + "&KeepSession=True&TokenGuid=" + GenerateGuid() + "&ReturnWorkflowContext=True");
                }
            }
        }
        catch (e)
        {
            g_bIsExecutingHidderTrigger = false;
            alert("ExecuteHiddenTrigger() - " + e.message);
            throw new Error(0, "ExecuteHiddenTrigger() - " + e.message);
        }
    }

    RemoveFunctionCallLog();
}

function ValueTypeValidation(objSrcElement, strValueType, strMin, strMax)
{
    g_strLastKnownFunctionCall = "ValueTypeValidation";
    switch (strValueType)
    {
        case "int":
            /*if (objSrcElement.value != "" && (objSrcElement.value.charCodeAt(objSrcElement.value.length - 1) < 48 || objSrcElement.value.charCodeAt(objSrcElement.value.length - 1) > 57))
            {
            if (objSrcElement.value.length > 1)
            objSrcElement.value = objSrcElement.value.substring(0, objSrcElement.value.length - 1)
            else
            objSrcElement.value = "";
            }*/
            if (objSrcElement.value != "")
            {
                var value = "";
                var found = false;
                for (var i = 0; i < objSrcElement.value.length; i++)
                {
                    if (objSrcElement.value.charCodeAt(i) >= 48 && objSrcElement.value.charCodeAt(i) <= 57)
                    {
                        value += objSrcElement.value.charAt(i);
                    } else
                    {
                        found = true; 
                    }
                }
                
                if (found)
                    objSrcElement.value = value;
            }

            try
            {
                if (strMin != "" && parseInt(objSrcElement.value) <= parseInt(strMin))
                {
                    MessageWindow(null, "Value must be greater than <font style=\"color:#CC0000\">" + strMin + "</font>.", 'False', null, null, "True");
                    if (objSrcElement.value.length > 1)
                        objSrcElement.value = objSrcElement.value.substring(0, objSrcElement.value.length - 1)
                    else
                        objSrcElement.value = "";
                }
            }
            catch (e)
            {
            }

            try
            {
                if (strMax != "" && parseInt(objSrcElement.value) >= parseInt(strMax))
                {
                    MessageWindow(null, "Value must be less than <font style=\"color:#CC0000\">" + strMax + "</font>.", 'False', null, null, "True");
                    if (objSrcElement.value.length > 1)
                        objSrcElement.value = objSrcElement.value.substring(0, objSrcElement.value.length - 1)
                    else
                        objSrcElement.value = "";
                }
            }
            catch (e)
            {
            }
            break;
        case "float":
            var nPeriodPos = objSrcElement.value.indexOf(".");

            if (
				(
					objSrcElement.value.charCodeAt(objSrcElement.value.length - 1) < 48
					|| objSrcElement.value.charCodeAt(objSrcElement.value.length - 1) > 57
            /*||
            (  
            nPeriodPos > -1 
            && objSrcElement.value.length - nPeriodPos > 3
            )*/
				)
				&&
				(
					objSrcElement.value.charCodeAt(objSrcElement.value.length - 1) != 46
					||
					(
						nPeriodPos > -1
						&& objSrcElement.value.indexOf(".", nPeriodPos + 1) > -1
					)
				)
			)
            {
                if (objSrcElement.value.length > 1)
                    objSrcElement.value = objSrcElement.value.substring(0, objSrcElement.value.length - 1)
                else
                    objSrcElement.value = "";
            }
            break;
        case "cur":

            var nPeriodPos = objSrcElement.value.indexOf(".");

            if (
				(
					objSrcElement.value.charCodeAt(objSrcElement.value.length - 1) < 48
					|| objSrcElement.value.charCodeAt(objSrcElement.value.length - 1) > 57
					||
					(
						nPeriodPos > -1
						&& objSrcElement.value.length - nPeriodPos > 6
					)
				)
				&&
				(
					objSrcElement.value.charCodeAt(objSrcElement.value.length - 1) != 46
					||
					(
						nPeriodPos > -1
						&& objSrcElement.value.indexOf(".", nPeriodPos + 1) > -1
					)
				)
			)
            {
                if (objSrcElement.value.length > 1)
                    objSrcElement.value = objSrcElement.value.substring(0, objSrcElement.value.length - 1)
                else
                    objSrcElement.value = "";
            }

            try
            {
                if (strMin != "" && parseFloat(objSrcElement.value) <= parseFloat(strMin))
                {
                    MessageWindow(null, "Value must be greater than <font style=\"color:#CC0000\">" + strMin + "</font>.", 'False', null, null, "True");
                    if (objSrcElement.value.length > 1)
                        objSrcElement.value = objSrcElement.value.substring(0, objSrcElement.value.length - 1)
                    else
                        objSrcElement.value = "";
                }
            }
            catch (e)
            {
            }

            try
            {
                if (strMax != "" && parseFloat(objSrcElement.value) >= parseFloat(strMax))
                {
                    MessageWindow(null, "Value must be less than <font style=\"color:#CC0000\">" + strMax + "</font>.", 'False', null, null, "True");
                    if (objSrcElement.value.length > 1)
                        objSrcElement.value = objSrcElement.value.substring(0, objSrcElement.value.length - 1)
                    else
                        objSrcElement.value = "";
                }
            }
            catch (e)
            {
            }
            break;
        case "email":
            var nAtPos = objSrcElement.value.indexOf("@");

            if (nAtPos > -1)
            {
                if (objSrcElement.value.length == 1)
                    objSrcElement.value = "";
                else if (objSrcElement.value.indexOf("@", nAtPos + 1) > -1)
                    objSrcElement.value = objSrcElement.value.substring(0, objSrcElement.value.length - 1);
            }

            break;
    }
}

function ValueSizeValidation(objSrcElement, strMinSize, strMaxSize)
{
    g_strLastKnownFunctionCall = "ValueSizeValidation";
    if (objSrcElement == undefined || objSrcElement.tagName == undefined)
        objSrcElement = g_objSrcElement;

    if (strMinSize != "" && objSrcElement.value.length > 0 && objSrcElement.value.length < parseInt(strMinSize))
    {
        if (objSrcElement.getAttribute("DisplayName") != null)
            MessageWindow(null, objSrcElement.getAttribute("DisplayName") + " must be a minimum of " + strMinSize + " characters.", 'False', null, null, "True");
        else
            MessageWindow(null, objSrcElement.getAttribute("Description") + " must be a minimum of " + strMinSize + " characters.", 'False', null, null, "True");
        g_bValidationFailed = true;
        return;
    }

    if (strMaxSize != "" && objSrcElement.value.length > 0 && objSrcElement.value.length > parseInt(strMaxSize))
    {
        if (objSrcElement.getAttribute("DisplayName") != null)
            MessageWindow(null, objSrcElement.getAttribute("DisplayName") + " cannot be larger than of " + strMaxSize + " characters.", 'False', null, null, "True");
        else
            MessageWindow(null, objSrcElement.getAttribute("Description") + " cannot be larger than of " + strMaxSize + " characters.", 'False', null, null, "True");
        g_bValidationFailed = true;
        objSrcElement.value = objSrcElement.value.substring(0, strMaxSize);
        return;
    }
}

function OpenWindow(objSrcElement, strUrl, strTarget, strFeatures, strLeft, strTop, strWidth, strHeight, strNewTokenGuid, strNewInstance, objEvent)
{
    AddFunctionCallLog("OpenWindow");
    strUrl = PopulateEvents(strUrl, objEvent);
    strUrl = PopulateUrlViewVariables(strUrl);

    //objEvent

    if (g_hWindowHandle != null)
    {
        g_hWindowHandle.close();
    }

    if (strLeft != "")
    {
        if (strFeatures != "")
            strFeatures += ",";

        strFeatures += "left=" + strLeft;
    }

    if (strTop != "")
    {
        if (strFeatures != "")
            strFeatures += ",";

        strFeatures += "top=" + strTop;
    }

    if (strWidth != "")
    {
        if (strFeatures != "")
            strFeatures += ",";

        strFeatures += "width=" + strWidth;
    }

    if (strHeight != "")
    {
        if (strFeatures != "")
            strFeatures += ",";

        strFeatures += "height=" + strHeight;
    }

    if (strTarget == "FloatingWindowContainer")
    {
        var objTop = GetTopLevelWindow();
        var id = "floating_iframe_" + GenerateGuid().replace(/-/g, "");

        if (strNewInstance == "True")
        {
            var iframe = null;
            var objArrIFrame = objTop.document.getElementsByTagName("IFRAME");

            for (var i = 0; i < objArrIFrame.length; i++)
            {
                if (objArrIFrame[i].getAttribute("id") == id)
                {
                    iframe = objArrIFrame[i];
                    break;
                }
            }

            if (iframe == null)
            {
                if (navigator.appName == "Microsoft Internet Explorer")
                {
                    iframe = objTop.document.createElement("<iframe id=\"" + id + "\" name=\"" + id + "\" frameborder=\"0\" border=\"0\" src=\"" + strUrl + "\" TabGuid=\"" + RecursiveGetTabGuid() + "\"></iframe>");

                    objTop.document.body.appendChild(iframe);
                }
                else
                {
                    iframe = objTop.document.createElement("iframe");
                    objTop.document.body.appendChild(iframe);

                    iframe.setAttribute("frameborder", "0");
                    iframe.setAttribute("border", "0");
                    iframe.setAttribute("id", id);
                    iframe.setAttribute("name", id);
                    iframe.setAttribute("TabGuid", RecursiveGetTabGuid());
                    iframe.setAttribute("src", strUrl);
                }

                iframe.setAttribute("IFrameFloatingWindow", "True");
            }
            else
            {
                iframe.setAttribute("src", strUrl);
                iframe.style.display = "block";
            }

            iframe.style.zIndex = 5;
            iframe.style.position = "absolute";
            iframe.style.top = (objTop.document.body.clientHeight / 2) - (strHeight / 2);
            iframe.style.left = (objTop.document.body.clientWidth / 2) - (strWidth / 2);

            if (strHeight != "")
                iframe.style.height = strHeight;

            if (strWidth != "")
                iframe.style.width = strWidth;
        }
        else
        {
            if (objTop.g_objFloatingWindow == null)
            {
                if (navigator.appName == "Microsoft Internet Explorer")
                {
                    objTop.g_objFloatingWindow = objTop.document.createElement("<iframe id=\"" + id + "\" name=\"" + id + "\" frameborder=\"0\" border=\"0\" TabGuid=\"" + RecursiveGetTabGuid() + "\"></iframe>");
                    objTop.document.body.appendChild(objTop.g_objFloatingWindow);
                }
                else
                {
                    objTop.g_objFloatingWindow = objTop.document.createElement("iframe");
                    objTop.document.body.appendChild(objTop.g_objFloatingWindow);

                    objTop.g_objFloatingWindow.setAttribute("frameborder", "0");
                    objTop.g_objFloatingWindow.setAttribute("border", "0");
                    objTop.g_objFloatingWindow.setAttribute("id", id);
                    objTop.g_objFloatingWindow.setAttribute("name", id);
                    objTop.g_objFloatingWindow.setAttribute("TabGuid", RecursiveGetTabGuid());

                }

                objTop.g_objFloatingWindow.setAttribute("src", strUrl);
                objTop.g_objFloatingWindow.style.zIndex = "3";
                objTop.g_objFloatingWindow.style.position = "absolute";
                objTop.g_objFloatingWindow.setAttribute("IFrameFloatingWindow", "True");
            }
            else
            {
                objTop.g_objFloatingWindow.setAttribute("src", strUrl);
                objTop.g_objFloatingWindow.style.display = "block";
            }

            objTop.g_objFloatingWindow.setAttribute("TabGuid", RecursiveGetTabGuid());
            //top.document.getElementById( "IFrameFloatingWindow" ).src = strUrl;

            objTop.g_objFloatingWindow.style.top = (objTop.document.body.clientHeight / 2) - (strHeight / 2);
            objTop.g_objFloatingWindow.style.left = (objTop.document.body.clientWidth / 2) - (strWidth / 2);

            if (strHeight != "")
                objTop.g_objFloatingWindow.style.height = strHeight;

            if (strWidth != "")
                objTop.g_objFloatingWindow.style.width = strWidth;

            objTop.g_objFloatingWindow.style.display = "block";

            //objTop.g_objFloatingWindowSrc = objSrcElement.ownerDocument.parentWindow;
            objTop.g_objFloatingWindowSrc = window;
        }
    }
    else if (strTarget == "_self")
    {
        //PauseEventService();
        document.forms[0].style.cursor = "wait";

        window.status = "Waiting for response ...";

        if (!g_bWaitWindow)
        {
            setTimeout(ShowWaitWindow, 1500);
            var objTop = GetTopLevelWindow();
            objTop.g_bSuppressWaitWindow = false;
        }

        if (location.href.indexOf("KeepSession=True") > -1 && location.href.indexOf("TokenGuid=") > -1 && strUrl.indexOf("KeepSession=True") == -1 && strUrl.indexOf("http") != 0)
        {
            var nStart = location.href.indexOf("TokenGuid=");
            var nEnd = location.href.indexOf("&", nStart);

            if (nEnd == -1)
                nEnd = location.href.length;

            strUrl += "&KeepSession=True&" + location.href.substring(nStart, nEnd);
        }
        else if (strFeatures.indexOf("reusetoken=yes") > -1)
        {
            if (strUrl.indexOf("?") != -1)
                strUrl += "&ReuseToken=True";
            else
                strUrl += "?ReuseToken=True";
        }
        else if (strUrl.charAt(0) == '/' && strUrl.indexOf("&ReuseToken=") == -1 && strUrl.indexOf("&TokenGuid=") == -1 && strUrl.indexOf("&KeepSession=") == -1)
        {
            // local page, force reuse of token
            if (strUrl.indexOf("?") != -1)
                strUrl += "&ReuseToken=True";
            else
                strUrl += "?ReuseToken=True";
        }

        if (strUrl.indexOf("ReuseToken=True") > -1 && strUrl.indexOf("&TokenGuid=") == -1)
        {
            strUrl += "&TokenGuid=" + gTokenGuid;
        }

        location.href = strUrl;
    }
    else if (strFeatures.indexOf("modal=yes") > -1)
    {
        var strNewFeatures = "help:no;scoll:no;center:yes;";

        if (strFeatures.indexOf("status=yes") > -1)
            strNewFeatures += ";status:yes";
        else
            strNewFeatures += ";status:no";

        if (strFeatures.indexOf("resizable=yes") > -1)
            strNewFeatures += ";resizable:yes";
        else
            strNewFeatures += ";resizable:no";

        if (strWidth != "")
            strNewFeatures += ";dialogWidth:" + strWidth + "px";

        if (strHeight != "")
            strNewFeatures += ";dialogHeight:" + strHeight + "px";

        window.showModalDialog(strUrl, "", strNewFeatures);
    }
    else
    {
        //strNewTokenGuid //Don't use this, we need a new id everytime a window is opened. Since we can't generate a GUID on the localbox, let's just create a unique id

        if (strUrl.indexOf("TokenGuid=") == -1)
        {
            var now = new Date();
            var rand = Math.random().toString();
            if (strUrl.indexOf("?") > -1)
                strUrl += "&TokenGuid=" + GenerateGuid();
            else
                strUrl += "?TokenGuid=" + GenerateGuid();
        }

        g_hWindowHandle = window.open(strUrl, strTarget, strFeatures);
    }

    RemoveFunctionCallLog();
}

function Print()
{
    window.print();
}

function CloseWindow()
{
    g_strLastKnownFunctionCall = "CloseWindow";
    window.close();
}

function RefreshParentWindow()
{
    g_strLastKnownFunctionCall = "RefreshParentWindow";
    if (top.g_objFloatingWindowSrc != null)
    {
        top.g_objFloatingWindowSrc.FormSubmit(null, "False", "Page:");
        return false;
    }
    if (window.opener != undefined && window.opener.window != undefined)
        window.opener.FormSubmit(null, "False", "Page:");
    else if (parent != null)
        parent.FormSubmit(null, "False", "Page:");
}

function CheckAllCheckboxes(strDescription)
{
    g_strLastKnownFunctionCall = "CheckAllCheckboxes";
    for (var i = 0; i < document.WorkflowForm.elements.length; i++)
    {
        if (document.WorkflowForm.elements[i].type == "checkbox" && document.WorkflowForm.elements[i].getAttribute("Description") == strDescription)
        {
            document.WorkflowForm.elements[i].checked = true;
            document.WorkflowForm.elements[i].fireEvent("onclick");
        }
    }
}

function ToggleAllCheckboxes(strDescription)
{
    g_strLastKnownFunctionCall = "ToggleAllCheckboxes";
    
    try
    {
        if (document.createEvent)
        {
            var evt = document.createEvent("MouseEvents");
            evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        }
            
        for (var i = 0; i < document.WorkflowForm.elements.length; i++)
        {
            if (document.WorkflowForm.elements[i].type == "checkbox" && document.WorkflowForm.elements[i].getAttribute("Description") == strDescription)
            {
                if (g_bToggleAllCheckboxes)
                {
                    document.WorkflowForm.elements[i].checked = true;
                    
                    if (document.WorkflowForm.elements[i].fireEvent)
                        document.WorkflowForm.elements[i].fireEvent("onclick");
                    else
                    {
                        try
                        {
                            document.WorkflowForm.elements[i].dispatchEvent(evt);
                        }
                        catch (e) { }
                    }
                }
                else
                    document.WorkflowForm.elements[i].checked = false;
            }
        }

        if (g_bToggleAllCheckboxes)
            g_bToggleAllCheckboxes = false;
        else
            g_bToggleAllCheckboxes = true;
    }
    catch (e)
    {
        throw new Error(0, "ToggleAllCheckboxes() - " + e.message);
    }
}

function CheckAllRadioButtons(objEvent, strDescription, strSelectedValue)
{
    g_strLastKnownFunctionCall = "CheckAllRadioButtons";
    var arrElements = new Array();
    for (var i = 0; i < document.WorkflowForm.elements.length; i++)
    {
        if (document.WorkflowForm.elements[i].type == "radio" && document.WorkflowForm.elements[i].getAttribute("Description") == strDescription)
        {
            document.WorkflowForm.elements[i].checked = false;
            arrElements[arrElements.length] = document.WorkflowForm.elements[i];
        }
    }

    if (strSelectedValue.length > 2 && strSelectedValue.charAt(0) == "!" && strSelectedValue.charAt(strSelectedValue.length - 1) == "!" && objEvent != null)
    {
        if (objEvent.IsArray(strSelectedValue.substr(1, strSelectedValue.length - 2)))
        {
            objSelectedValue = objEvent.GetParameterArray(strSelectedValue.substr(1, strSelectedValue.length - 2));
        }
        else
        {
            objSelectedValue = objEvent.GetParameter(strSelectedValue.substr(1, strSelectedValue.length - 2));
        }
    }
    else
        objSelectedValue = PopulateViewVariables(strSelectedValue);

    for (var i = 0; i < arrElements.length; i++) {
        if (arrElements[i].type == "radio" && arrElements[i].getAttribute("Description") == strDescription)
        {
            if (typeof (objSelectedValue) == "string")
            {
                if (arrElements[i].value == objSelectedValue)
                    arrElements[i].checked = true;
            }
            else
            {
                for (var j = 0; j < objSelectedValue.Length; j++)
                {
                    if (arrElements[i].value == objSelectedValue.GetValue(j))
                        arrElements[i].checked = true;
                }
            }
        }
    }
}

// START - Horizontal Menu Helper Functions

function OnMouseOver_HorizontalMenuItem(e, strClass, strBackgroundHighlightColor, strForeColor, strOverImage)
{
    g_strLastKnownFunctionCall = "OnMouseOver_HorizontalMenuItem";
    var objTarget = null;

    if (navigator.appName == "Microsoft Internet Explorer")
        objTarget = event.srcElement;
    else
        objTarget = e.target;

    if (objTarget.style.backgroundImage != null && objTarget.style.backgroundImage != "" && strOverImage != "")
    {
        objTarget.style.cursor = "pointer";
        objTarget.OutBackgroundImage = objTarget.style.backgroundImage;
        try
        {
            objTarget.style.backgroundImage = "url('" + strOverImage + "')";
        }
        catch (e)
        {
        }
    }
    else
    {
        if (strBackgroundHighlightColor != "")
        {
            try
            {
                objTarget.style.backgroundColor = strBackgroundHighlightColor;
            }
            catch (e)
            {
            }

        }

        objTarget.className = strClass;
        objTarget.style.border = "#ffffff 1px solid";

        if (strForeColor != "")
        {
            try
            {
                objTarget.style.color = strForeColor;
                objTarget.style.border = "#" + strForeColor + " 1px solid";
            }
            catch (e)
            {
            }
        }
    }

    var objMenuItem = null;
    if (objTarget.tagName == "SPAN")
        objMenuItem = objTarget.parentElement;
    else
        objMenuItem = objTarget;

    if (objMenuItem.getAttribute("ClickableMenu") != "True")
        ShowHorizontalMenuItem(objTarget, objMenuItem);

    if (navigator.appName == "Microsoft Internet Explorer")
        event.cancelBubble = true;
    else
        e.stopPropagation();

    g_IsInSubMenu = true;
}

function OnMouseOut_HorizontalMenuItem(e, strClass, strBackgroundColor, strForeColor) {
    var objTarget = null;

    if (navigator.appName == "Microsoft Internet Explorer")
        objTarget = event.srcElement;
    else
        objTarget = e.target;

    objTarget.className = strClass;

    objTarget.style.backgroundColor = "transparent";

    if (objTarget.style.backgroundImage != null && objTarget.style.backgroundImage != "")
        objTarget.style.backgroundImage = objTarget.OutBackgroundImage;
    else
        objTarget.style.border = "transparent 1px solid";

    if (strForeColor != "")
    {
        try
        {
            objTarget.style.color = strForeColor;
        }
        catch (e)
        {
        }
    }

    g_IsInSubMenu = false;
    setTimeout("HideHorizontalMenuItem();", 1000);
}

function ShowHorizontalMenuItem(srcElement, objMenu)
{
    try
    {
        var dtStart = new Date();
        var objElement = null;

        if (srcElement.tagName == "SPAN")
            objElement = srcElement.parentElement;
        else
            objElement = srcElement;

        var objIFrame = null;
        
        objIFrame = document.getElementById("IFrameSubMenuItems");
        if (objIFrame.style.visibility != "visible") {
            //objIFrame.style.display = "block";
            objIFrame.style.visibility = "visible";
            var dtEnd = new Date();
            //alert("Test 2 : " + (dtEnd - dtStart));

            objIFrame.style.zIndex = 0;
            objIFrame.style.left = objElement.offsetLeft;
            objIFrame.style.top = objElement.parentNode.parentNode.parentNode.parentNode.offsetTop + objElement.parentNode.offsetTop + objElement.offsetHeight;

            objIFrame.setAttribute("AppName", GetInnerText(objElement));

            var objFrame = window.frames["IFrameSubMenuItems"];

            objFrame.ShowByParentMenuGuid(objElement.getAttribute("MenuGuid")/*, objMenu*/);

            var strSubMenuOpacity = objIFrame.getAttribute("SubMenuOpacity");

            if (strSubMenuOpacity == null || strSubMenuOpacity == "")
                strSubMenuOpacity = 80;

            if (navigator.appName == "Microsoft Internet Explorer") {
                if (objIFrame.getAttribute("IsSubMenuAnimated") == "True") {
                    var strSubMenuAnimationTime = objIFrame.getAttribute("SubMenuAnimationTime");

                    if (strSubMenuAnimationTime == null || strSubMenuAnimationTime == "")
                        strSubMenuAnimationTime = 700;

                    objIFrame.style.visibility = "hidden";
                    objIFrame.filters[0].Duration = parseInt(strSubMenuAnimationTime, 10) / 1000;
                    objIFrame.filters[2].Opacity = 0;
                    objIFrame.filters[0].Apply();
                    objIFrame.filters[1].Apply();
                    objIFrame.filters[2].Opacity = strSubMenuOpacity;
                    objIFrame.style.visibility = "visible";
                    objIFrame.filters[0].Play();
                    objIFrame.filters[1].Play();
                }
                else {
                    objIFrame.filters[2].Opacity = strSubMenuOpacity;
                }
            }
            else {
                objIFrame.style.MozOpacity = "." + strSubMenuOpacity;
                objIFrame.style.opacity = "." + strSubMenuOpacity;
                objIFrame.style.filter = "alpha(opacity=" + strSubMenuOpacity + ")";
            }
        }
        else 
        {
            objIFrame.style.visibility = "hidden";
        }
    }
    catch (e)
    {
        //alert( e.message );
    }
}

function HideHorizontalMenuItem(bForce)
{
    if (!parent.g_IsInSubMenu)
    {
        objIFrame = document.getElementById("IFrameSubMenuItems");
        //objIFrame.style.display = "none";
        objIFrame.style.visibility = "hidden";
    }
}

function OnClickMenuItem(strUrl, strLabel, strTarget, eEvent)
{
    try
    {
        var objTarget = null;

        if (navigator.appName == "Microsoft Internet Explorer")
        {
            if (event != null)
                objTarget = event.srcElement;
        }
        else if (eEvent != null)
            objTarget = eEvent.target;

        var objMenu = null;

        if (objTarget != null)
        {
            if (objTarget.tagName == "SPAN")
                objMenu = objTarget.parentElement;
            else
                objMenu = objTarget;
        }

        if (objMenu != null && objMenu.getAttribute("ClickableMenu") == "True")
        {
            ShowHorizontalMenuItem(objTarget, objMenu);
        }
        else if (objMenu != null && objMenu.getAttribute("EnableTabs") == "True" && strUrl != null && strUrl != "")
        {
            if (g_arrPins != undefined)
            {
                for (var i = 0; i < g_arrPins.length; i++)
                {
                    if (strUrl.indexOf(g_arrPins[i].Description + "=") == -1)
                        strUrl += "&" + g_arrPins[i].Description + "=" + g_arrPins[i].Value;
                }
            }

            AddHorizontalMenuTab(strTarget, strLabel, "", strUrl, null);
        }
        else
        {
            if (g_arrPins != undefined)
            {
                for (var i = 0; i < g_arrPins.length; i++)
                {
                    if (strUrl.indexOf(g_arrPins[i].Description + "=") == -1)
                        strUrl += "&" + g_arrPins[i].Description + "=" + g_arrPins[i].Value;
                }
            }

            parent.document.getElementById(parent.gstrTargetIFrame).src = strUrl;
        }
    }
    catch (e)
    {
        throw new Error(0, "OnClickMenuItem() - " + e.message);
    }
}

function SubMenu(strDescription, strUrl, strParentMenuGuid, strSubMenuGuid)
{
    this.Description = strDescription;
    this.Url = strUrl;
    this.ParentMenuGuid = strParentMenuGuid;
    this.SubMenuGuid = strSubMenuGuid;
}

function Pin(strDescription, strValue)
{
    this.Description = strDescription;
    this.Value = strValue;
}

function AddHorizontalMenu(strTarget, strMenuGuid, strSubMenuGuid, strName, strUrl, objEvent)
{
    //alert(document.getElementById(strTarget));
}

function InitHorizontalMenuTabs(strTarget, strTabsID)
{
    //alert("InitHorizontalMenuTabs");
    /****
    *
    * NOTE: there is not guarantee that the top most window is the root app that will persist the lifetime of the menu element
    * EX: eSite opening an IC Portal, top most window is eSite, if eSite closes, IC Portal menu will lose access to HorizontalMenuTabs
    *
    *****/
    var vTop = GetHorizontalMenuTabWindow();

    if (vTop == null || vTop.g_HorizontalMenuTabCollection == null)
    {
        g_HorizontalMenuTabCollection = new HorizontalMenuTabCollection(strTarget, strTabsID);
    }
}

function GetHorizontalMenuTabs()
{
    var vTop = GetHorizontalMenuTabWindow();

    vTop.g_HorizontalMenuTabCollection.Init();

    return vTop.g_HorizontalMenuTabCollection;
}

function HorizontalMenuTabCollection_UpdateCallback()
{
    /*if( g_HorizontalMenuTabCollection.UpdateCallback != null && event.srcElement.readyState == "complete" )
    {
    var strTitle = document.frames(event.srcElement.id).document.title;
    if( strTitle != "TriggerWorkflow" )
    {
    g_HorizontalMenuTabCollection.UpdateCallback( event.srcElement.id, strTitle );
    g_HorizontalMenuTabCollection.UpdatePageTitle( event.srcElement.id, strTitle );
    }
    }*/

    if (event.srcElement.readyState == "complete")
    {
        try
        {
            var strTitle = document.frames(event.srcElement.id).document.title;

            if (strTitle != "TriggerWorkflow")
            {
                g_HorizontalMenuTabCollection.UpdatePageTitle(event.srcElement.id, strTitle);
            }
        }
        catch (e)
        {
        }
    }
}

function HorizontalMenuTab(objDiv, objIFrame, strTitle, strAppName)
{
    this.PageDiv = objDiv;
    this.Page = objIFrame;
    this.Div = null;
    this.Span = null;
    this.NoBr = null;
    this.RefreshImg = null;
    this.CloseImg = null;

    this.AppName = strAppName
    this.Title = strTitle;
    this.Guid = GenerateGuid();
    this.TabGuid = this.Guid;
    this.Guid = "tab_" + this.Guid.replace(/-/g, "");
    this.Page.setAttribute("id", this.Guid);
    this.Page.setAttribute("name", this.Guid);
    this.Tab = null;
}

function HorizontalMenuTabCollection(strTarget, strTabsID)
{
    this.Tabs = new Array();
    this.Target = strTarget;
    this.TabsID = strTabsID;
    this.TabsTable = null;
    this.TargetFrame = null;
    this.SelectedTab = null;
    this.CapTab = null;

    this.TabSelectedImage = null;
    this.TabSelectedImageOver = null;
    this.TabUnselectedImage = null;
    this.TabUnselectedImageOver = null;
    this.TabSelectedRefreshImage = null;
    this.TabSelectedRefreshImageOver = null;
    this.TabSelectedRefreshOverImage = null;
    this.TabUnselectedRefreshImage = null;
    this.TabUnselectedRefreshImageOver = null;
    this.TabUnselectedRefreshOverImage = null;
    this.TabSelectedCloseImage = null;
    this.TabSelectedCloseImageOver = null;
    this.TabSelectedCloseOverImage = null;
    this.TabUnselectedCloseImage = null;
    this.TabUnselectedCloseImageOver = null;
    this.TabUnselectedCloseOverImage = null;
    this.SelectedTextStyle = null;
    this.UnselectedTextStyle = null;
}

HorizontalMenuTabCollection.prototype.Init = function()
{
    var vTop = GetHorizontalMenuTabWindow();

    if (this.TargetFrame == null);
    {
        this.TargetFrame = vTop.document.getElementById(this.Target);

        if (vTop.g_strHomepageSrc == null && this.TargetFrame != null)
            vTop.g_strHomepageSrc = this.TargetFrame.src;
    }

    if (this.TabsTable == null)
    {
        this.TabsTable = vTop.document.getElementById(this.TabsID);
    }
}

HorizontalMenuTabCollection.prototype.AddTab = function(strUrl, strTitle, strAppName)
{
    try
    {
        var objDiv = document.createElement("DIV");

        objDiv.style.width = this.TargetFrame.style.width;
        objDiv.style.height = this.TargetFrame.style.height;

        this.TargetFrame.parentNode.appendChild(objDiv);

        var iFrame = document.createElement("IFRAME");
        iFrame.setAttribute("frameBorder", "0");
        iFrame.style.width = this.TargetFrame.style.width;
        iFrame.style.height = this.TargetFrame.style.height;
        iFrame.setAttribute("Description", this.TargetFrame.getAttribute("Description"));
        iFrame.setAttribute("id", this.TargetFrame.getAttribute("id"));
        iFrame.setAttribute("ObjectID", this.TargetFrame.getAttribute("ObjectID"));

        objDiv.appendChild(iFrame);
        iFrame.setAttribute("Url", strUrl);
        //iFrame.src = PopulateUrlViewVariables(strUrl) + "&Toreion:RequestTimestamp=" + (new Date()).getTime();
        var strNewUrl = PopulateUrlViewVariables(strUrl);

        if (strNewUrl.indexOf("TriggerWorkflow.aspx") > -1)
            strNewUrl += "&Toreion:RequestTimestamp=" + (new Date()).getTime();

        iFrame.src = strNewUrl;

        if (navigator.appName == "Microsoft Internet Explorer")
            iFrame.onreadystatechange = HorizontalMenuTabCollection_UpdateCallback;
        else
            iFrame.setAttribute("onreadystatechange", HorizontalMenuTabCollection_UpdateCallback);

        var objTab = new HorizontalMenuTab(objDiv, iFrame, strTitle, strAppName);

        iFrame.setAttribute("TabGuid", objTab.TabGuid);

        if (this.Tabs.length == 0)
            this.CapTab = objTab;

        this.Tabs[this.Tabs.length] = objTab;

        objTab.Tab = this.TabsTable.rows[0].insertCell(0);
        objTab.Tab.setAttribute("noWrap", true);
        objTab.Tab.style.cursor = "pointer";

        objTab.Tab.style.width = "156px";

        if (navigator.appName == "Microsoft Internet Explorer")
        {
            objTab.Tab.Div = document.createElement("<div style=\"overflow:hidden;width:100%;height:21px;text-align:center;vertical-align:middle;cursor:pointer;\" onmouseover=\"this.parentElement.style.backgroundImage = this.BackgroundImageOver;if(!this.children[1].MouseOver){this.children[1].src = this.TabRefreshOverImage;}if(!this.children[2].MouseOver){this.children[2].src = this.TabCloseOverImage;}\" onmouseout=\"this.parentElement.style.backgroundImage = this.BackgroundImage;this.children[1].src = this.TabRefreshImage;this.children[2].src = this.TabCloseImage;\" onclick=\"GetHorizontalMenuTabs().SelectTab('" + objTab.Guid + "');\" />");
        }
        else
        {
            objTab.Tab.Div = document.createElement("DIV");
            objTab.Tab.Div.style.overflow = "hidden";
            objTab.Tab.Div.style.width = "100%";
            objTab.Tab.Div.style.height = "21px";
            objTab.Tab.Div.style.textAlign = "center";
            objTab.Tab.Div.style.verticalAlign = "middle";
            objTab.Tab.Div.style.cursor = "pointer";
            objTab.Tab.Div.setAttribute("onmouseover", "this.parentNode.style.backgroundImage = this.BackgroundImageOver;if(!this.childNodes[1].MouseOver){this.childNodes[1].src = this.TabRefreshOverImage;}if(!this.childNodes[2].MouseOver){this.childNodes[2].src = this.TabCloseOverImage;}");
            objTab.Tab.Div.setAttribute("onmouseout", "this.parentNode.style.backgroundImage = this.BackgroundImage;this.childNodes[1].src = this.TabRefreshImage;this.childNodes[2].src = this.TabCloseImage;");
            objTab.Tab.Div.setAttribute("onclick", "GetHorizontalMenuTabs().SelectTab('" + objTab.Guid + "');");
        }

        if (strAppName != null && strAppName != "")
            objTab.Tab.Div.setAttribute("title", strAppName + " - " + strTitle);
        else
            objTab.Tab.Div.setAttribute("title", strTitle);

        objTab.Tab.appendChild(objTab.Tab.Div);

        var objDivNoBrTab = document.createElement("NOBR");
        objTab.Tab.Div.appendChild(objDivNoBrTab);

        objTab.Tab.Span = document.createElement("SPAN");

        this.TabSelectedImage = "url('" + this.TabsTable.getAttribute("SelectedImage") + "')";
        this.TabSelectedImageOver = "url('" + this.TabsTable.getAttribute("SelectedImageOver") + "')";
        this.TabUnselectedImage = "url('" + this.TabsTable.getAttribute("UnselectedImage") + "')";
        this.TabUnselectedImageOver = "url('" + this.TabsTable.getAttribute("UnselectedImageOver") + "')";
        this.TabSelectedRefreshImage = this.TabsTable.getAttribute("SelectedRefreshImage");
        this.TabSelectedRefreshImageOver = this.TabsTable.getAttribute("SelectedRefreshImageOver");
        this.TabSelectedRefreshOverImage = this.TabsTable.getAttribute("SelectedRefreshOverImage");
        this.TabUnselectedRefreshImage = this.TabsTable.getAttribute("UnselectedRefreshImage");
        this.TabUnselectedRefreshImageOver = this.TabsTable.getAttribute("UnselectedRefreshImageOver");
        this.TabUnselectedRefreshOverImage = this.TabsTable.getAttribute("UnselectedRefreshOverImage");
        this.TabSelectedCloseImage = this.TabsTable.getAttribute("SelectedCloseImage");
        this.TabSelectedCloseImageOver = this.TabsTable.getAttribute("SelectedCloseImageOver");
        this.TabSelectedCloseOverImage = this.TabsTable.getAttribute("SelectedCloseOverImage");
        this.TabUnselectedCloseImage = this.TabsTable.getAttribute("UnselectedCloseImage");
        this.TabUnselectedCloseImageOver = this.TabsTable.getAttribute("UnselectedCloseImageOver");
        this.TabUnselectedCloseOverImage = this.TabsTable.getAttribute("UnselectedCloseOverImage");

        objTab.Tab.style.backgroundImage = this.TabSelectedImage;
        objTab.Tab.Div.BackgroundImageOver = this.TabSelectedImageOver;
        objTab.Tab.Div.BackgroundImage = this.TabSelectedImage;
        objTab.Tab.Div.TabRefreshImage = this.TabSelectedRefreshImage;
        objTab.Tab.Div.TabRefreshOverImage = this.TabSelectedRefreshOverImage;
        objTab.Tab.Div.TabCloseImage = this.TabSelectedCloseImage;
        objTab.Tab.Div.TabCloseOverImage = this.TabSelectedCloseImage;

        objTab.Tab.NoBr = document.createElement("NOBR");

        SetInnerText(objTab.Tab.NoBr, strTitle);

        objTab.Tab.Span.appendChild(objTab.Tab.NoBr);

        objTab.Tab.Span.setAttribute("style", "text-overflow:ellipsis;-o-text-overflow:ellipsis;");

        objTab.Tab.Span.style.width = "115px";
        objTab.Tab.Span.style.font = "bold 8pt sans-serif";
        //objTab.Tab.Span.style.textOverflow = "ellipsis";
        objTab.Tab.Span.style.top = "3px";
        objTab.Tab.Span.style.display = "inline-block";
        objTab.Tab.Span.style.whiteSpace = "nowrap";
        objTab.Tab.Span.style.verticalAlign = "middle";

        if (window.navigator.userAgent.indexOf("Firefox") > -1)
            objTab.Tab.Span.style.MozBinding = "url('moz-text-overflow.xml#ellipsis')";
        else
            objTab.Tab.Span.style.overflow = "hidden";

        if (this.TabsTable.getAttribute("SelectedTextStyle") != "")
        {
            this.SelectedTextStyle = "css_" + GenerateGuid().replace(/-/g, "");

            document.styleSheets[0].addRule("." + this.SelectedTextStyle, this.TabsTable.getAttribute("SelectedTextStyle"));

            objTab.Tab.Span.className = this.SelectedTextStyle;
        }

        if (this.TabsTable.getAttribute("UnselectedTextStyle") != "")
        {
            this.UnselectedTextStyle = "css_" + GenerateGuid().replace(/-/g, "");

            document.styleSheets[0].addRule("." + this.UnselectedTextStyle, this.TabsTable.getAttribute("UnselectedTextStyle"));
        }

        objDivNoBrTab.appendChild(objTab.Tab.Span);

        if (navigator.appName == "Microsoft Internet Explorer")
        {
            objTab.Tab.RefreshImg = document.createElement("<img alt=\"Refresh\" src=\"" + this.TabSelectedRefreshImage + "\" OverSrc=\"" + this.TabSelectedRefreshImageOver + "\" onmouseover=\"this.src = this.OverSrc;this.MouseOver = true;\" OutSrc=\"" + this.TabSelectedRefreshImage + "\" onmouseout=\"this.src = this.OutSrc;this.MouseOver = false;\" align=\"absmiddle\" onclick=\"RefreshHorizontalMenuTab('" + objTab.Guid + "');\">");
        }
        else
        {
            objTab.Tab.RefreshImg = document.createElement("IMG");
            objTab.Tab.RefreshImg.alt = "Refresh";
            objTab.Tab.RefreshImg.src = this.TabSelectedRefreshImage;
            objTab.Tab.RefreshImg.align = "absmiddle";
            objTab.Tab.RefreshImg.setAttribute("onclick", "RefreshHorizontalMenuTab('" + objTab.Guid + "');");
            objTab.Tab.RefreshImg.setAttribute("onmouseover", "this.src = this.OverSrc;this.MouseOver = true;");
            objTab.Tab.RefreshImg.setAttribute("OverSrc", this.TabSelectedRefreshImageOver);
            objTab.Tab.RefreshImg.setAttribute("onmouseout", "this.src = this.OutSrc;this.MouseOver = false;");
            objTab.Tab.RefreshImg.setAttribute("OutSrc", this.TabSelectedRefreshImage);
        }

        objTab.Tab.RefreshImg.style.left = "115px";

        objTab.Tab.Div.appendChild(objTab.Tab.RefreshImg);

        if (navigator.appName == "Microsoft Internet Explorer")
        {
            objTab.Tab.CloseImg = document.createElement("<img alt=\"Close\" src=\"" + this.TabSelectedCloseImage + "\" OverSrc=\"" + this.TabSelectedCloseImageOver + "\" onmouseover=\"this.src = this.OverSrc;this.MouseOver = true;\" OutSrc=\"" + this.TabSelectedCloseImage + "\" onmouseout=\"this.src = this.OutSrc;this.MouseOver = false;\" align=\"absmiddle\" onclick=\"CloseHorizontalMenuTab('" + objTab.Guid + "', event);\">");
        }
        else
        {
            objTab.Tab.CloseImg = document.createElement("IMG");
            objTab.Tab.CloseImg.alt = "Close";
            objTab.Tab.CloseImg.src = this.TabSelectedCloseImage;
            objTab.Tab.CloseImg.align = "absmiddle";
            objTab.Tab.CloseImg.setAttribute("onclick", "CloseHorizontalMenuTab('" + objTab.Guid + "', event);");
            objTab.Tab.CloseImg.setAttribute("onmouseover", "this.src = this.OverSrc;this.MouseOver = true;");
            objTab.Tab.CloseImg.setAttribute("OverSrc", this.TabSelectedCloseImageOver);
            objTab.Tab.CloseImg.setAttribute("onmouseout", "this.src = this.OutSrc;this.MouseOver = false;");
            objTab.Tab.CloseImg.setAttribute("OutSrc", this.TabSelectedCloseImage);
        }

        objTab.Tab.CloseImg.style.width = "14px";
        objTab.Tab.CloseImg.style.left = "123px";

        objTab.Tab.Div.appendChild(objTab.Tab.CloseImg);

        objTab.Tab.focus();

        this.SelectTab(objTab.Guid);

        // Show scroll controls
        if (this.TabsTable.offsetWidth > this.TabsTable.parentNode.offsetWidth)
        {
            this.TabsTable.parentNode.parentNode.parentNode.parentNode.parentNode.rows[0].cells[1].children[0].style.display = "block";
            this.TabsTable.parentNode.parentNode.parentNode.parentNode.parentNode.rows[0].cells[2].children[0].style.display = "block";
        }
    }
    catch (e)
    {
        alert(e.message);
    }
}

HorizontalMenuTabCollection.prototype.CloseTab = function(strGuid, evt) {
    for (var i = 0; i < this.Tabs.length; i++) {
        if (this.Tabs[i].Guid == strGuid) {
            this.TabsTable.rows[0].deleteCell(this.Tabs[i].Tab.cellIndex);

            try {
                this.Tabs[i].Page.contentWindow.UnloadPage();
            }
            catch (e) {
            }

            this.Tabs[i].PageDiv.parentNode.removeChild(this.Tabs[i].PageDiv);
            this.Tabs.splice(i, 1);

            if (this.Tabs.length > 0) {
                if (i == 0) {
                    this.CapTab = this.Tabs[0];
                    this.CapTab.Tab.style.width = "156px";
                    this.CapTab.Tab.Span.style.width = "115px";
                    this.CapTab.Tab.RefreshImg.style.left = "115px";
                    this.CapTab.Tab.CloseImg.style.left = "123px";

                    if (this.Tabs.length > 1) {
                        this.CapTab.Tab.style.backgroundImage = this.TabUnselectedImage;
                        this.CapTab.Tab.Div.BackgroundImageOver = this.TabUnselectedImageOver;
                        this.CapTab.Tab.Div.BackgroundImage = this.TabUnselectedImage;
                    }
                    else {
                        this.CapTab.Tab.style.backgroundImage = this.TabSelectedImage;
                        this.CapTab.Tab.Div.BackgroundImageOver = this.TabSelectedImageOver;
                        this.CapTab.Tab.Div.BackgroundImage = this.TabSelectedImage;

                        this.CapTab.Tab.CloseImg.src = this.TabSelectedCloseImage;
                        this.CapTab.Tab.CloseImg.OutSrc = this.TabSelectedCloseImage;
                        this.CapTab.Tab.CloseImg.OverSrc = this.TabSelectedCloseImageOver;

                        this.CapTab.Tab.Div.TabCloseImage = this.TabSelectedCloseImage;
                        this.CapTab.Tab.Div.TabCloseOverImage = this.TabSelectedCloseOverImage;

                        this.CapTab.Tab.RefreshImg.src = this.TabSelectedRefreshImage;
                        this.CapTab.Tab.RefreshImg.OutSrc = this.TabSelectedRefreshImage;
                        this.CapTab.Tab.RefreshImg.OverSrc = this.TabSelectedRefreshImageOver;

                        this.CapTab.Tab.Div.TabRefreshImage = this.TabSelectedRefreshImage;
                        this.CapTab.Tab.Div.TabRefreshOverImage = this.TabSelectedRefreshOverImage;

                        this.CapTab.Tab.Span.className = this.SelectedTextStyle;
                    }
                }
            }
            else {
                this.CapTab = null;
            }

            if (this.SelectedTab != null && this.SelectedTab.Guid == strGuid) {
                this.SelectedTab = null;

                if (this.Tabs.length > 0) {
                    if (i == 0)
                        this.SelectTab(this.Tabs[0].Guid);
                    else
                        this.SelectTab(this.Tabs[i - 1].Guid);
                }
            }
            break;
        }


    }

    //ResumeEventService();

    // Hide scroll controls
    if (this.TabsTable.offsetWidth < this.TabsTable.parentNode.offsetWidth) {
        this.TabsTable.parentNode.parentNode.parentNode.parentNode.parentNode.rows[0].cells[1].childNodes[0].style.display = "none"
        this.TabsTable.parentNode.parentNode.parentNode.parentNode.parentNode.rows[0].cells[2].childNodes[0].style.display = "none";
    }

    // Don't let the default actions take place
    if (evt.preventDefault) {
        evt.preventDefault();
        evt.stopPropagation();
    }
    else {
        document.onselectstart = function() { return false; };
        evt.cancelBubble = true;
        RemoveFunctionCallLog();
        return false;
    }
}

HorizontalMenuTabCollection.prototype.RefreshTab = function(strGuid)
{
    for (var i = 0; i < this.Tabs.length; i++)
    {
        if (this.Tabs[i].Guid == strGuid)
        {
            this.Tabs[i].Page.setAttribute("src", PopulateUrlViewVariables(this.Tabs[i].Page.getAttribute("Url")));
            break;
        }
    }
}

HorizontalMenuTabCollection.prototype.SelectTab = function(strGuid)
{
    CloseCalendarWindow();
    this.TargetFrame.style.display = "none";

    if (this.SelectedTab != null)
    {
        this.SelectedTab.Tab.style.backgroundImage = this.TabUnselectedImage;
        this.SelectedTab.Tab.Div.BackgroundImageOver = this.TabUnselectedImageOver;
        this.SelectedTab.Tab.Div.BackgroundImage = this.TabUnselectedImage;

        this.SelectedTab.Tab.CloseImg.src = this.TabUnselectedCloseImage;
        this.SelectedTab.Tab.CloseImg.OutSrc = this.TabUnselectedCloseImage;
        this.SelectedTab.Tab.CloseImg.OverSrc = this.TabUnselectedCloseImageOver;

        this.SelectedTab.Tab.Div.TabCloseImage = this.TabUnselectedCloseImage;
        this.SelectedTab.Tab.Div.TabCloseOverImage = this.TabUnselectedCloseOverImage;

        this.SelectedTab.Tab.RefreshImg.src = this.TabUnselectedRefreshImage;
        this.SelectedTab.Tab.RefreshImg.OutSrc = this.TabUnselectedRefreshImage;
        this.SelectedTab.Tab.RefreshImg.OverSrc = this.TabUnselectedRefreshImageOver;

        this.SelectedTab.Tab.Div.TabRefreshImage = this.TabUnselectedRefreshImage;
        this.SelectedTab.Tab.Div.TabRefreshOverImage = this.TabUnselectedRefreshOverImage;

        this.SelectedTab.Tab.Span.className = this.UnselectedTextStyle;

        this.SelectedTab.PageDiv.style.display = "none";
    }

    for (var i = 0; i < this.Tabs.length; i++)
    {
        if (this.Tabs[i].Guid == strGuid)
        {
            this.SelectedTab = this.Tabs[i];

            this.SelectedTab.Tab.style.backgroundImage = this.TabSelectedImage;
            this.SelectedTab.Tab.Div.BackgroundImageOver = this.TabSelectedImageOver;
            this.SelectedTab.Tab.Div.BackgroundImage = this.TabSelectedImage;

            this.SelectedTab.Tab.CloseImg.src = this.TabSelectedCloseImage;
            this.SelectedTab.Tab.CloseImg.OutSrc = this.TabSelectedCloseImage;
            this.SelectedTab.Tab.CloseImg.OverSrc = this.TabSelectedCloseImageOver;

            this.SelectedTab.Tab.Div.TabCloseImage = this.TabSelectedCloseImage;
            this.SelectedTab.Tab.Div.TabCloseOverImage = this.TabSelectedCloseOverImage;

            this.SelectedTab.Tab.RefreshImg.src = this.TabSelectedRefreshImage;
            this.SelectedTab.Tab.RefreshImg.OutSrc = this.TabSelectedRefreshImage;
            this.SelectedTab.Tab.RefreshImg.OverSrc = this.TabSelectedRefreshImageOver;

            this.SelectedTab.Tab.Div.TabRefreshImage = this.TabSelectedRefreshImage;
            this.SelectedTab.Tab.Div.TabRefreshOverImage = this.TabSelectedRefreshOverImage;

            this.SelectedTab.Tab.Span.className = this.SelectedTextStyle;
            this.SelectedTab.PageDiv.style.display = "block";

            window.top.document.title = this.SelectedTab.Title;
            break;
        }
    }
}

HorizontalMenuTabCollection.prototype.ToggleTab = function()
{
    alert("ToggleTab");
    if (this.SelectedTab != null)
    {
        for (var i = 0; i < this.Tabs.length; i++)
        {
            if (this.Tabs[i].Guid == this.SelectedTab.Guid)
            {
                if (i == 0)
                {
                    this.SelectTab(this.Tabs[this.Tabs.length - 1].Guid);
                }
                else
                {
                    this.SelectTab(this.Tabs[i - 1].Guid);
                }
                break;
            }
        }
    }
}

HorizontalMenuTabCollection.prototype.UpdatePageTitle = function(strGuid, strTitle)
{
    try
    {
        for (var i = 0; i < this.Tabs.length; i++)
        {
            if (this.Tabs[i].Guid == strGuid)
            {
                this.Tabs[i].Title = strTitle;

                if (this.Tabs[i].AppName != null && this.Tabs[i].AppName != "")
                    this.Tabs[i].Tab.Div.title = this.Tabs[i].AppName + " - " + strTitle;
                else
                    this.Tabs[i].Tab.Div.title = strTitle;

                SetInnerText(this.Tabs[i].Tab.NoBr, strTitle);
                try
                {
                    window.top.document.title = strTitle;
                }
                catch (e)
                {
                }
                break;
            }
        }
    }
    catch (e)
    {
    }
}

HorizontalMenuTabCollection.prototype.GetPage = function(strGuid)
{
    for (var i = 0; i < this.Tabs.length; i++)
    {
        if (this.Tabs[i].Guid == strGuid)
        {
            return this.Tabs[i];
        }
    }
}

HorizontalMenuTabCollection.prototype.IsCacheable = function()
{
    if (this.TargetFrame.style.display == "block")
        return
}

function CloseHorizontalMenuTab(strGuid, evt)
{
    var obj = GetHorizontalMenuTabs();
    obj.CloseTab(strGuid, evt);
}

function RefreshHorizontalMenuTab(strGuid)
{
    var obj = GetHorizontalMenuTabs();
    obj.RefreshTab(strGuid);
}

function ScrollHorizontalMenuTabs(strTabsID, strDirection)
{
    var objTabsDiv = document.getElementById(strTabsID);

    if (objTabsDiv != null)
    {
        objTabsDiv.Scrolling = "True";
        objTabsDiv.doScroll(strDirection);
        setTimeout("TimeoutScrollHorizontalMenuTabs('" + strTabsID + "', '" + strDirection + "');", 30);
    }
}

function TimeoutScrollHorizontalMenuTabs(strTabsID, strDirection)
{
    var objTabsDiv = document.getElementById(strTabsID);

    if (objTabsDiv != null && objTabsDiv.Scrolling != "False")
    {
        objTabsDiv.doScroll(strDirection);
        setTimeout("TimeoutScrollHorizontalMenuTabs('" + strTabsID + "', '" + strDirection + "');", 30);
    }
}

function StopScrollHorizontalMenuTabs(strTabsID)
{
    var objTabsDiv = document.getElementById(strTabsID);

    if (objTabsDiv != null)
    {
        objTabsDiv.Scrolling = "False";
    }
}

function AddHorizontalMenuTab(strTarget, strName, strApplication, strUrl, objEvent)
{
    // we can ignore strTarget until we want to support multiple menues on a single view
    var obj = GetHorizontalMenuTabs();

    // Add Tab will do this for us and save the original Url for refreshes
    //strUrl = PopulateUrlViewVariables(strUrl);

    obj.AddTab(strUrl, strName, strApplication);
}

// END - Horizontal Menu Helper Functions

// START - Collapsable Data Table Helper Functions
function FlashCollapsableDataTableElementCtlLoaded(strID)
{
    if (window.navigator.userAgent.indexOf("Firefox") > -1)
    {
        if (g_hTryPostInitializePageTimeout != null)
            clearTimeout(g_hTryPostInitializePageTimeout);

        SetPostInitializePageDelay(strID, true);
        TryPostInitializePage();
    }
    else
        SetPostInitializePageDelay(strID, true);
}

function OnClickCollapsedDataTemplate(objDiv)
{
    var objRootDiv = document.getElementById(objDiv.getAttribute("RootID"));

    if (objRootDiv.getAttribute("ExpandingMode") == "Ajax")
    {
        if (objRootDiv.getAttribute("ExpandOnlyOne") == "True" && g_strLastExpandedID != null)
        {
            var objDivLast = document.getElementById("exp_" + g_strLastExpandedID);
            var bFound = false;
            var objParentNode = objDivLast;

            while (objParentNode.parentNode != null && objParentNode.parentNode != undefined && objParentNode.getAttribute("id") != objDiv.getAttribute("RootID"))
            {
                if (objParentNode.getAttribute("ExpandID") == objDiv.getAttribute("ParentID"))
                {
                    bFound = true;
                    break;
                }

                if (objParentNode.getAttribute("ExpandID") != null)
                {
                    objParentNode.style.display = "none";
                    document.getElementById("col_" + objParentNode.getAttribute("ExpandID")).style.display = "block";
                }

                objParentNode = objParentNode.parentNode;
            }
        }

        g_strLastExpandedID = objDiv.getAttribute("CollapseID");
        objDiv.style.display = "none";

        var objDivExp = document.getElementById("exp_" + objDiv.getAttribute("CollapseID"));

        if (objDivExp != undefined)
        {
            objDivExp.style.display = "block";
        }
    }
    else if (objRootDiv.getAttribute("ClientSide") == "False" || objDiv.getAttribute("HasChildren") == "False")
    {
        if (objDiv.getAttribute("Url") != undefined && objDiv.getAttribute("Url") != null && objDiv.getAttribute("Url") != "")
        {
            if (objRootDiv.getAttribute("AppendCDTID") == "True")
                document.location.href = objDiv.getAttribute("Url") + "&CDTID=" + objDiv.getAttribute("CollapseID");
            else
                document.location.href = objDiv.getAttribute("Url");
        }
    }
    else
    {
        var bHasChildren = false;

        if (objRootDiv.getAttribute("ExpandOnlyOne") == "True" && g_strLastExpandedID != null)
        {
            var objDivLast = document.getElementById("exp_" + g_strLastExpandedID);

            OnClickExpandedDataTemplate(objDivLast);
        }

        for (var i = 0; i < objRootDiv.childNodes.length; i++)
        {
            if (objRootDiv.childNodes[i].nodeType == 1 && objRootDiv.childNodes[i].getAttribute("ParentID") == objDiv.getAttribute("CollapseID"))
            {
                objRootDiv.childNodes[i].style.display = "block";
                bHasChildren = true;
            }
        }

        if (bHasChildren)
        {
            g_strLastExpandedID = objDiv.getAttribute("CollapseID");
            objDiv.style.display = "none";

            var objDivExp = document.getElementById("exp_" + objDiv.getAttribute("CollapseID"));

            if (objDivExp != undefined)
                objDivExp.style.display = "block";
        }
    }

    if (navigator.appName == "Microsoft Internet Explorer")
        event.cancelBubble = true;
    else
        e.stopPropagation();
}

function OnClickExpandedDataTemplate(objDiv)
{
    if (objDiv.parentNode.getAttribute("ExpandingMode") == "Ajax")
    {
        var objDivCol = document.getElementById("col_" + objDiv.getAttribute("ExpandID"));

        if (objDivCol != undefined)
            objDivCol.style.display = "block";

        objDiv.style.display = "none";

        for (var i = 0; i < objDiv.parentNode.childNodes.length; i++)
        {
            if (objDiv.parentNode.childNodes[i].nodeType == 1 && objDiv.parentNode.childNodes[i].getAttribute("ParentID") == objDiv.getAttribute("ExpandID"))
            {
                objDiv.parentNode.childNodes[i].style.display = 'none';
            }
        }
    }
    else if (objDiv.parentNode.getAttribute("ClientSide") == "False")
    {
        if (objDiv.getAttribute("Url") != undefined && objDiv.getAttribute("Url") != null && objDiv.getAttribute("Url") != "")
        {
            if (objDiv.parentNode.getAttribute("AppendCDTID") == "True")
                document.location.href = objDiv.getAttribute("Url") + "&CDTID=" + objDiv.getAttribute("ExpandID");
            else
                document.location.href = objDiv.getAttribute("Url");
        }
    }
    else
    {
        var objDivCol = document.getElementById("col_" + objDiv.getAttribute("ExpandID"));

        if (objDivCol != undefined)
            objDivCol.style.display = "block";

        objDiv.style.display = "none";

        for (var i = 0; i < objDiv.parentNode.childNodes.length; i++)
        {
            if (objDiv.parentNode.childNodes[i].nodeType == 1 && objDiv.parentNode.childNodes[i].getAttribute("ParentID") == objDiv.getAttribute("ExpandID"))
            {
                objDiv.parentNode.childNodes[i].style.display = 'none';
            }
        }
    }

    if (navigator.appName == "Microsoft Internet Explorer")
        event.cancelBubble = true;
    else
        e.stopPropagation();
}

function OnClickChildDataTemplate(objDiv)
{
    if (objDiv.getAttribute("Url") != undefined && objDiv.getAttribute("Url") != null && objDiv.getAttribute("Url") != "")
    {
        if (objDiv.parentNode.getAttribute("AppendCDTID") == "True")
            document.location.href = objDiv.getAttribute("Url") + "&CDTID=" + objDiv.getAttribute("ParentID");
        else
            document.location.href = objDiv.getAttribute("Url");
    }
}

function AddCollapsableDataTableRow(strObjectID, strObjectIDPin, objEvent, strLocation, strAutoScroll, strLabel, strID, strParentID, strHasChildren)
{
    try
    {
        //var dtStart = new Date();
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            strObjectIDPin = PopulateViewVariables(strObjectIDPin);
            objTarget = new Array();
            var objArr = GetElementsByObjectIDAndTag(strObjectID, "DIV");

            if (objArr == undefined || objArr == null || objArr.length == 0)
                objArr = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

            for (var i = 0; i < objArr.length; i++)
            {
                if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                    objTarget[objTarget.length] = objArr[i];
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            objTarget = GetElementsByObjectIDAndTag(strObjectIDPin, "DIV");
        }
        else
        {
            objTarget = GetElementsByObjectIDAndTag(strObjectID, "DIV");

            if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                objTarget = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

            if (objTarget == undefined || objTarget == null || objTarget.length == 0)
            {
                //objTarget = new Array();
                //var obj = document.getElementById("ctl_" + strObjectID.replace(/-/g,""));
                //objTarget[objTarget.length] = obj;
                objTarget = document.getElementsByName("ctl_" + strObjectID.replace(/-/g, ""));
            }
        }

        if (objTarget != undefined)
        {
            var objParentDIV = null;
            var objCollapsedTemplateDIV = null;
            var objExpandedTemplateDIV = null;
            var objNewTemplateDIV = null;
            var strHTML = "";
            var arrImg = null;
            var nDepth = 1;
            var nDepthPadding = 0;
            var arrLabel = null;
            var arrID = null;
            var arrParentID = null;
            var arrHasChildren = null;
            var objColParentDIV = null;

            if (objTarget.length > 0 && objTarget[0].tagName != "OBJECT")
            {
                arrLabel = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strLabel));
                objEvent.SetParameterArray("Label", arrLabel);
                arrID = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strID));
                objEvent.SetParameterArray("ID", arrID);
                arrParentID = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strParentID));
                objEvent.SetParameterArray("ParentID", arrParentID);
                arrHasChildren = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strHasChildren));
                objEvent.SetParameterArray("Has Children", arrHasChildren);
            }
            else
            {
                arrID = new Array();
            }

            if (arrID != null)
            {
                for (var i = 0; i < objTarget.length; i++)
                {
                    if (objTarget[i].tagName == "OBJECT" || objTarget[i].tagName == "EMBED")
                    {
                        objTarget[i].AddTreeNodes(objEvent.Object.ParametersXml, strLocation, strAutoScroll, RemoveEventVariableDelimiters(strLabel), RemoveEventVariableDelimiters(strID), RemoveEventVariableDelimiters(strParentID), RemoveEventVariableDelimiters(strHasChildren));
                    }
                    else
                    {
                        // Get collapsed template div
                        objCollapsedTemplateDIV = GetElementByObjectID("wcdtcoldiv_" + objTarget[i].getAttribute("id"));

                        // Get expanded template div
                        objExpandedTemplateDIV = GetElementByObjectID("wcdtexpdiv_" + objTarget[i].getAttribute("id"));

                        for (var nID = 0; nID < arrID.length; nID++)
                        {
                            nDepthPadding = parseInt(objTarget[i].getAttribute("DepthPadding"), 10);

                            // Get parent expanded
                            if (objParentDIV == null || objParentDIV.getAttribute("id") != "exp_" + arrParentID.GetValue(nID))
                            {
                                objParentDIV = GetElementByObjectID("exp_" + arrParentID.GetValue(nID));
                                if (objParentDIV != null)
                                {
                                    if (objParentDIV.firstChild.firstChild.firstChild.src.indexOf("/ClientFormsImages/Common/TransparentPixel.gif") > -1)
                                        objParentDIV.firstChild.firstChild.firstChild.src = "/ClientFormsImages/Common/CollapsableDataTableExpanded.png";

                                    if (objParentDIV.getAttribute("Depth") != null)
                                        nDepth = parseInt(objParentDIV.getAttribute("Depth"));

                                    // Get parent collapsed
                                    if (objColParentDIV == null || objColParentDIV.getAttribute("id") != "col_" + arrParentID.GetValue(nID))
                                    {
                                        objColParentDIV = GetElementByObjectID("col_" + arrParentID.GetValue(nID));

                                        if (objColParentDIV.firstChild.firstChild.firstChild.src.indexOf("/ClientFormsImages/Common/TransparentPixel.gif") > -1)
                                            objColParentDIV.firstChild.firstChild.firstChild.src = "/ClientFormsImages/Common/CollapsableDataTableCollapsed.png";
                                    }
                                }
                            }

                            if (objParentDIV == null)
                            {
                                objParentDIV = objTarget[i];
                                objColParentDIV = objTarget[i];
                                nDepthPadding = 0;
                                nDepth = 0;
                            }

                            nDepthPadding *= nDepth;

                            if (GetElementByObjectID("col_" + arrID.GetValue(nID)) == null)
                            {
                                // create collapsed 
                                objNewTemplateDIV = document.createElement("DIV");

                                objParentDIV.appendChild(objNewTemplateDIV);
                                strHTML = objEvent.RenderViewVariablesByIndex(objCollapsedTemplateDIV.innerHTML, nID);
                                strHTML = strHTML.replace(/:DataItemIndex:/g, ":" + nID + ":");

                                objNewTemplateDIV.innerHTML = strHTML;

                                arrImg = objNewTemplateDIV.getElementsByTagName("IMG");
                                for (var idxImg = 0; idxImg < arrImg.length; idxImg++)
                                {
                                    arrImg[idxImg].onerror = function() { OnErrorUrl(arrImg[idxImg]) };

                                    if (arrImg[idxImg].ResizeWidth != null || arrImg[idxImg].ResizeHeight != null)
                                        arrImg[idxImg].src = "/ResizeImage.aspx?ImagePath=" + escape(arrImg[idxImg].Url) + "&Width=" + arrImg[idxImg].ResizeWidth + "&Height=" + arrImg[idxImg].ResizeHeight;
                                    else
                                        arrImg[idxImg].src = arrImg[idxImg].Url;

                                    if (arrImg[idxImg].ClientVisible == "False")
                                        arrImg[idxImg].style.display = "none";
                                }

                                MergeAttributes(objCollapsedTemplateDIV, objNewTemplateDIV);

                                objNewTemplateDIV.setAttribute("id", "col_" + arrID.GetValue(nID));
                                objNewTemplateDIV.setAttribute("CollapseID", arrID.GetValue(nID));
                                objNewTemplateDIV.setAttribute("ParentID", arrParentID.GetValue(nID));
                                objNewTemplateDIV.setAttribute("RootID", objTarget[i].getAttribute("id"));

                                objNewTemplateDIV.firstChild.style.paddingLeft = nDepthPadding + "px";

                                if (arrHasChildren.GetValue(nID) != "True")
                                {
                                    objNewTemplateDIV.firstChild.firstChild.firstChild.src = "/ClientFormsImages/Common/TransparentPixel.gif";
                                    objNewTemplateDIV.firstChild.firstChild.firstChild.style.width = "10px";
                                }

                                objNewTemplateDIV.setAttribute("Depth", nDepth + 1);
                                objNewTemplateDIV.style.display = "block";

                                // create expanded
                                objNewTemplateDIV = document.createElement("DIV");

                                objParentDIV.appendChild(objNewTemplateDIV);

                                strHTML = objEvent.RenderViewVariablesByIndex(objExpandedTemplateDIV.innerHTML, nID);
                                strHTML = strHTML.replace(/:DataItemIndex:/g, ":" + nID + ":");

                                objNewTemplateDIV.innerHTML = strHTML;

                                arrImg = objNewTemplateDIV.getElementsByTagName("IMG");
                                for (var idxImg = 0; idxImg < arrImg.length; idxImg++)
                                {
                                    arrImg[idxImg].onerror = OnErrorUrl(arrImg[idxImg]);

                                    if (arrImg[idxImg].ResizeWidth != null || arrImg[idxImg].ResizeHeight != null)
                                        arrImg[idxImg].src = "/ResizeImage.aspx?ImagePath=" + escape(arrImg[idxImg].Url) + "&Width=" + arrImg[idxImg].ResizeWidth + "&Height=" + arrImg[idxImg].ResizeHeight;
                                    else
                                        arrImg[idxImg].src = arrImg[idxImg].Url;

                                    if (arrImg[idxImg].ClientVisible == "False")
                                        arrImg[idxImg].style.display = "none";
                                }


                                MergeAttributes(objExpandedTemplateDIV, objNewTemplateDIV);

                                objNewTemplateDIV.setAttribute("id", "exp_" + arrID.GetValue(nID));
                                objNewTemplateDIV.setAttribute("ExpandID", arrID.GetValue(nID));
                                objNewTemplateDIV.setAttribute("ParentID", arrParentID.GetValue(nID));
                                objNewTemplateDIV.setAttribute("RootID", objTarget[i].getAttribute("id"));
                                objNewTemplateDIV.firstChild.style.paddingLeft = nDepthPadding + "px";

                                if (arrHasChildren.GetValue(nID) != "True")
                                {
                                    objNewTemplateDIV.firstChild.firstChild.firstChild.src = "/ClientFormsImages/Common/TransparentPixel.gif";
                                    objNewTemplateDIV.firstChild.firstChild.firstChild.style.width = "10px";
                                }
                                objNewTemplateDIV.setAttribute("Depth", nDepth + 1);

                                if (objParentDIV != objTarget[i] && objParentDIV.style.display == "none")
                                {
                                    ExpandCollapsableDataTable(objColParentDIV.firstChild.firstChild.firstChild);
                                }
                            }
                        }

                        //objTarget[i].style.setAttribute("height", objTarget[i].parentElement.clientHeight);
                        //objTarget[i].style.setAttribute("overflowY", "auto");
                    }
                }
            }
        }

        //var dtEnd = new Date();
        //alert(dtEnd - dtStart);
    }
    catch (e)
    {
        throw new Error(0, "AddCollapsableDataTableRow() - " + e.message);
    }
}

function RemoveCollapsableDataTableRow(strObjectID, strObjectIDPin, objEvent, strAll, strRowIDPin)
{
    var objTarget = null;

    if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
    {
        strObjectIDPin = PopulateViewVariables(strObjectIDPin);
        objTarget = new Array();
        var objArr = GetElementsByObjectIDAndTag(strObjectID, "DIV");

        if (objArr == undefined || objArr == null)
            objArr = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

        for (var i = 0; i < objArr.length; i++)
        {
            if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                objTarget[objTarget.length] = objArr[i];
        }
    }
    else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
    {
        objTarget = GetElementsByObjectIDAndTag(strObjectIDPin, "DIV");
    }
    else
    {
        objTarget = GetElementsByObjectIDAndTag(strObjectID, "DIV");

        if (objTarget == undefined || objTarget == null || objTarget.length == 0)
            objTarget = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

        if (objTarget == undefined || objTarget == null || objTarget.length == 0)
        {
            objTarget = new Array();
            var obj = document.getElementById("ctl_" + strObjectID.replace(/-/g, ""));
            if (obj != null)
                objTarget[objTarget.length] = obj;
        }

        if (objTarget == undefined || objTarget == null || objTarget.length == 0)
        {
            //objTarget = new Array();
            //var obj = document.getElementById("ctl_" + strObjectID.replace(/-/g,""));
            //objTarget[objTarget.length] = obj;
            objTarget = document.getElementsByName("ctl_" + strObjectID.replace(/-/g, ""));
        }
    }

    var arrRowIDPin = new AutomationArray();

    if (strRowIDPin != null && strRowIDPin != undefined && strRowIDPin != '')
    {
        if (objEvent != null && IsEventVariable(strRowIDPin))
        {
            arrRowIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strRowIDPin));
        }
        else
        {
            arrRowIDPin = GetVariable(strRowIDPin, objEvent, null, false);
        }
    }

    if (objTarget != undefined)
    {
        var objToRemove = null;

        for (var i = 0; i < objTarget.length; i++)
        {
            if (objTarget[i].tagName == "OBJECT" || objTarget[i].tagName == "EMBED")
            {
                if (objEvent == null)
                    objTarget[i].RemoveTreeNodes(null, strAll, arrRowIDPin.Values);
                else
                    objTarget[i].RemoveTreeNodes(objEvent.Object.ParametersXml, strAll, arrRowIDPin.Values);
            }
            else
            {
                for (var j = 0; j < arrRowIDPin.length; j++)
                {
                    objToRemove = GetElementByObjectID("exp_" + arrRowIDPin.GetValue(j));

                    if (objToRemove.parentNode.childNodes.length == 3)
                    {
                        if (objToRemove.parentNode.firstChild.firstChild.firstChild.src.indexOf("/ClientFormsImages/Common/CollapsableDataTableExpanded.png") > -1)
                        {
                            objToRemove.parentNode.firstChild.firstChild.firstChild.src = "/ClientFormsImages/Common/TransparentPixel.gif";
                            objToRemove.parentNode.firstChild.firstChild.firstChild.style.width = "10px";
                        }

                        if (objToRemove.parentNode.previousSibling.firstChild.firstChild.firstChild.src.indexOf("/ClientFormsImages/Common/CollapsableDataTableCollapsed.png") > -1)
                        {
                            objToRemove.parentNode.previousSibling.firstChild.firstChild.firstChild.src = "/ClientFormsImages/Common/TransparentPixel.gif";
                            objToRemove.parentNode.previousSibling.firstChild.firstChild.firstChild.style.width = "10px";
                        }
                    }

                    objToRemove.parentNode.removeChild(objToRemove);

                    objToRemove = GetElementByObjectID("col_" + arrRowIDPin.GetValue(j));

                    objToRemove.parentNode.removeChild(objToRemove);
                }
            }
        }
    }
}

function MoveCollapsableDataTableRow(strObjectID, strObjectIDPin, objEvent, strDirection, strID)
{
    //var dtStart = new Date();
    var objTarget = null;

    if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
    {
        strObjectIDPin = PopulateViewVariables(strObjectIDPin);
        objTarget = new Array();
        var objArr = GetElementsByObjectIDAndTag(strObjectID, "DIV");

        if (objArr == undefined || objArr == null || objArr.length == 0)
            objArr = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

        for (var i = 0; i < objArr.length; i++)
        {
            if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                objTarget[objTarget.length] = objArr[i];
        }
    }
    else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
    {
        objTarget = GetElementsByObjectIDAndTag(strObjectIDPin, "DIV");
    }
    else
    {
        objTarget = GetElementsByObjectIDAndTag(strObjectID, "DIV");

        if (objTarget == undefined || objTarget == null || objTarget.length == 0)
            objTarget = GetElementsByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

        if (objTarget == undefined || objTarget == null || objTarget.length == 0)
        {
            //objTarget = new Array();
            //var obj = document.getElementById("ctl_" + strObjectID.replace(/-/g,""));
            //objTarget[objTarget.length] = obj;
            objTarget = document.getElementsByName("ctl_" + strObjectID.replace(/-/g, ""));
        }
    }

    if (objTarget != undefined)
    {
        for (var i = 0; i < objTarget.length; i++)
        {
            if (objTarget[i].tagName == "OBJECT" || objTarget[i].tagName == "EMBED")
            {
                objTarget[i].MoveTreeNodes(objEvent.Object.ParametersXml, strDirection, RemoveEventVariableDelimiters(strID));
            }
            else
            {
                alert("This feature is currently not implemented. [MoveCollapsableDataTableRow for lite mode]");
            }
        }
    }
}

function ClickCollapsableDataTable(obj)
{
    var objRootDiv = document.getElementById(obj.parentElement.getAttribute("RootID"));
    var strSelectedID = objRootDiv.getAttribute("SelectedID");

    if (strSelectedID != null && strSelectedID != obj.parentElement.id)
    {
        var objSel = document.getElementById(strSelectedID);
        if (objSel != null)
        {
            for (var i = 0; i < objSel.parentElement.children.length; i++)
            {
                if (objSel.parentElement.children[i].id == objSel.id)
                {
                    objSel.parentElement.children[i].style.removeAttribute("backgroundColor");
                    objSel.parentElement.children[i + 1].firstChild.style.removeAttribute("backgroundColor");
                    break;
                }
            }
        }
    }

    if (strSelectedID != obj.parentElement.id)
    {
        for (var i = 0; i < obj.parentElement.parentElement.children.length; i++)
        {
            if (obj.parentElement.parentElement.children[i].id == obj.parentElement.id)
            {
                if (obj.parentElement.id.indexOf("exp_") == 0)
                    i--;

                objRootDiv.setAttribute("SelectedID", obj.parentElement.parentElement.children[i].id);
                obj.parentElement.parentElement.children[i].style.backgroundColor = "#E57F7F";
                obj.parentElement.parentElement.children[i + 1].firstChild.style.backgroundColor = "#E57F7F";
                break;
            }
        }
    }
}

function MouseOverCollapsableDataTable(obj)
{
    if (obj.parentElement.id.indexOf("exp_") == 0)
        obj.style.backgroundColor = '#EFB2B2'
    else
        obj.parentElement.style.backgroundColor = '#EFB2B2'
}

function MouseOutCollapsableDataTable(obj)
{
    var objRootDiv = document.getElementById(obj.parentElement.getAttribute("RootID"));

    var strID = obj.parentElement.id;
    if (obj.parentElement.id.indexOf("exp_") == 0)
        strID = obj.parentElement.previousSibling.id;

    if (objRootDiv.getAttribute("SelectedID") != strID)
    {
        if (obj.parentElement.id.indexOf("exp_") == 0)
            obj.style.removeAttribute("backgroundColor");
        else
            obj.parentElement.style.removeAttribute("backgroundColor");
    }
    else
    {
        if (obj.parentElement.id.indexOf("exp_") == 0)
            obj.style.backgroundColor = "#E57F7F";
        else
            obj.parentElement.style.backgroundColor = "#E57F7F";
    }
}

function ExpandCollapsableDataTable(obj)
{
    var objDiv = obj.parentElement.parentElement.parentElement;
    var objRootDiv = document.getElementById(objDiv.getAttribute("RootID"));

    if (objRootDiv.getAttribute("ExpandOnlyOne") == "True" && g_strLastExpandedID != null)
    {
        var objDivLast = document.getElementById("exp_" + g_strLastExpandedID);
        var bFound = false;
        var objParentNode = objDivLast;

        while (objParentNode.parentNode != null && objParentNode.parentNode != undefined && objParentNode.getAttribute("id") != objDiv.getAttribute("RootID"))
        {
            if (objParentNode.getAttribute("ExpandID") == objDiv.getAttribute("ParentID"))
            {
                bFound = true;
                break;
            }

            if (objParentNode.getAttribute("ExpandID") != null)
            {
                objParentNode.style.display = "none";
                document.getElementById("col_" + objParentNode.getAttribute("ExpandID")).style.display = "block";
            }

            objParentNode = objParentNode.parentNode;
        }
    }

    g_strLastExpandedID = objDiv.getAttribute("CollapseID");
    objDiv.style.display = "none";

    var objDivExp = document.getElementById("exp_" + objDiv.getAttribute("CollapseID"));

    if (objDivExp != undefined)
    {
        objDivExp.style.display = "block";
    }

    var strOnExpand = obj.parentElement.parentElement.getAttribute("OnExpand");

    if (strOnExpand != null && strOnExpand != "")
    {
        strOnExpand = "try { " + strOnExpand + " }catch(e){}";
        strOnExpand = strOnExpand.replace(/this/g, "document.getElementById( '" + obj.parentElement.parentElement.id + "' )");
        strOnExpand = strOnExpand.replace(/return false;/g, "throw 'return false;';");
        eval(strOnExpand);
    }

    if (navigator.appName == "Microsoft Internet Explorer")
    {
        if (event != null)
            event.cancelBubble = true;
    }
    else
        e.stopPropagation();
}

function CollapseCollapsableDataTable(obj)
{
    var objDiv = obj.parentElement.parentElement.parentElement;
    var objDivCol = document.getElementById("col_" + objDiv.getAttribute("ExpandID"));

    if (objDivCol != undefined)
        objDivCol.style.display = "block";

    objDiv.style.display = "none";

    for (var i = 0; i < objDiv.parentNode.childNodes.length; i++)
    {
        if (objDiv.parentNode.childNodes[i].nodeType == 1 && objDiv.parentNode.childNodes[i].getAttribute("ParentID") == objDiv.getAttribute("ExpandID"))
        {
            objDiv.parentNode.childNodes[i].style.display = 'none';
        }
    }

    var strOnCollapse = obj.parentElement.parentElement.getAttribute("Collapse");

    if (strOnCollapse != null && strOnCollapse != "")
    {
        strOnCollapse = "try { " + strOnCollapse + " }catch(e){}";
        strOnCollapse = strOnCollapse.replace(/this/g, "document.getElementById( '" + obj.parentElement.parentElement.id + "' )");
        strOnCollapse = strOnCollapse.replace(/return false;/g, "throw 'return false;';");
        eval(strOnCollapse);
    }

    if (navigator.appName == "Microsoft Internet Explorer")
        event.cancelBubble = true;
    else
        e.stopPropagation();
}

// END - Collapsable Data Table Helper Functions

// START - Vertical Menu Helper Functions
function AddSubMenu(strMenuGuid, strMenuID, nDepth)
{
    var objDivSubMenuTemplate = document.getElementById("vsm_" + strMenuGuid);

    var objDivSubMenu = objDivSubMenuTemplate.cloneNode(true);
    objDivSubMenuTemplate.parentNode.appendChild(objDivSubMenu);

    objDivSubMenu.id = "vsm_" + strMenuID;
    objDivSubMenu.setAttribute("Depth", nDepth);
    objDivSubMenu.style.position = "absolute";
    objDivSubMenu.style.zIndex = 5 + nDepth;

    return objDivSubMenu;
}

function AddSubMenu2(strMenuGuid, strMenuID, nDepth)
{
    var objDivSubMenuTemplate = document.getElementById("vsmt_" + strMenuGuid);

    var objDivSubMenu = objDivSubMenuTemplate.cloneNode(true);
    objDivSubMenuTemplate.parentNode.appendChild(objDivSubMenu);

    objDivSubMenu.id = "vsm_" + strMenuID;
    objDivSubMenu.setAttribute("Depth", nDepth);
    objDivSubMenu.style.position = "absolute";
    objDivSubMenu.style.zIndex = 5 + nDepth;

    return objDivSubMenu;
}

function AddSubMenuItem(strMenuGuid, objDivSubMenu, arrSubMenuItem, nDepth)
{
    var objDivSubMenuItemTemplate = document.getElementById("vsmi_" + strMenuGuid);

    var objDivSubMenuItem = objDivSubMenuItemTemplate.cloneNode(true);
    objDivSubMenuItemTemplate.parentNode.appendChild(objDivSubMenuItem);

    objDivSubMenuItem.id = "vsmi_" + arrSubMenuItem[0];
    objDivSubMenuItem.setAttribute("VerticalSubItemMenuID", arrSubMenuItem[0]);
    objDivSubMenuItem.setAttribute("ParentID", arrSubMenuItem[1]);
    objDivSubMenuItem.setAttribute("Url", arrSubMenuItem[3]);
    objDivSubMenu.setAttribute("Depth", nDepth);
    objDivSubMenuItem.style.height = "20px";
    objDivSubMenuItem.style.position = "relative";
    objDivSubMenuItem.style.display = "block";

    objDivSubMenuItem.innerHTML = objDivSubMenuItem.innerHTML.replace("<VIEWVARIABLE>Label</VIEWVARIABLE>", arrSubMenuItem[2]);
    objDivSubMenuItem.innerHTML = objDivSubMenuItem.innerHTML.replace("<viewvariable>Label</viewvariable>", arrSubMenuItem[2]);
    objDivSubMenuItem.innerHTML = objDivSubMenuItem.innerHTML.replace("<ViewVariable>Label</ViewVariable>", arrSubMenuItem[2]);
    objDivSubMenuItem.innerHTML = objDivSubMenuItem.innerHTML.replace("&lt;ViewVariable&gt;Label&lt;/ViewVariable&gt;", "");

    for (var i = 0; i < objDivSubMenu.childNodes.length; i++)
    {
        if (objDivSubMenu.childNodes[i].nodeType == 1 && objDivSubMenu.childNodes[i].getAttribute("type") == "vmdc")
        {
            objDivSubMenu.childNodes[i].appendChild(objDivSubMenuItem);
            break;
        }
    }
}

function AddSubMenuItem2(strMenuGuid, objDivSubMenu, arrSubMenuItem, nDepth)
{
    var objDivSubMenuItemTemplate = document.getElementById("vsmit_" + strMenuGuid);

    var objDivSubMenuItem = objDivSubMenuItemTemplate.cloneNode(true);
    objDivSubMenu.appendChild(objDivSubMenuItem);

    objDivSubMenuItem.id = "vsmi_" + arrSubMenuItem[0];
    objDivSubMenuItem.setAttribute("VerticalSubItemMenuID", arrSubMenuItem[0]);
    objDivSubMenuItem.setAttribute("ParentID", arrSubMenuItem[1]);
    objDivSubMenuItem.setAttribute("Url", arrSubMenuItem[3]);
    objDivSubMenu.setAttribute("Depth", nDepth);
    objDivSubMenuItem.style.height = "20px";
    objDivSubMenuItem.style.position = "relative";
    objDivSubMenuItem.style.display = "block";

    objDivSubMenuItem.innerHTML = objDivSubMenuItem.innerHTML.replace("<PG_FLYOUT_NAME></PG_FLYOUT_NAME>", arrSubMenuItem[2]);
    objDivSubMenuItem.innerHTML = objDivSubMenuItem.innerHTML.replace("<PG_FLYOUT_NAME/>", arrSubMenuItem[2]);

    /*
    for( var i = 0; i < objDivSubMenu.childNodes.length; i++ )
    {
    if( objDivSubMenu.childNodes[i].nodeType == 1 && objDivSubMenu.childNodes[i].getAttribute( "type" ) == "vmdc" )
    {
    objDivSubMenu.childNodes[i].appendChild( objDivSubMenuItem );
    break;
    }
    }*/

    objDivSubMenuItemTemplate = document.getElementById("vsmiot_" + strMenuGuid);

    if (objDivSubMenuItemTemplate != null)
    {
        objDivSubMenuItem = objDivSubMenuItemTemplate.cloneNode(true);
        objDivSubMenu.appendChild(objDivSubMenuItem);

        objDivSubMenuItem.id = "vsmio_" + arrSubMenuItem[0];
        objDivSubMenuItem.setAttribute("VerticalSubItemMenuID", arrSubMenuItem[0]);
        objDivSubMenuItem.setAttribute("ParentID", arrSubMenuItem[1]);
        objDivSubMenuItem.setAttribute("Url", arrSubMenuItem[3]);
        objDivSubMenu.setAttribute("Depth", nDepth);
        objDivSubMenuItem.style.height = "20px";
        objDivSubMenuItem.style.position = "relative";
        objDivSubMenuItem.style.display = "none";

        objDivSubMenuItem.innerHTML = objDivSubMenuItem.innerHTML.replace("<PG_FLYOUT_NAME></PG_FLYOUT_NAME>", arrSubMenuItem[2]);
        objDivSubMenuItem.innerHTML = objDivSubMenuItem.innerHTML.replace("<PG_FLYOUT_NAME/>", arrSubMenuItem[2]);
    }
}

function OnMouseOverVerticalMenuTemplate(objDiv)
{
    g_bOverMenu = true;
    var objDivSubMenuInstance = document.getElementById("vsm_" + objDiv.getAttribute("VerticalMenuID"));

    if (objDivSubMenuInstance == null)
    {
        objDivSubMenuInstance = AddSubMenu(objDiv.getAttribute("vm_id"), objDiv.getAttribute("VerticalMenuID"), 0);

        var arrSubMenuItems = null;

        eval("arrSubMenuItems = arr_" + objDiv.getAttribute("vm_id"));

        for (var i = 0; i < arrSubMenuItems.length; i++)
        {
            if (arrSubMenuItems[i][1] == objDiv.getAttribute("VerticalMenuID"))
            {
                AddSubMenuItem(objDiv.getAttribute("vm_id"), objDivSubMenuInstance, arrSubMenuItems[i], 0);
            }
        }
    }

    if (objDivSubMenuInstance != null)
    {
        g_arrMenues[0] = objDivSubMenuInstance.id;
        objDivSubMenuInstance.style.display = "block";
        //alert( objDivSubMenuInstance.childNodes[1].offsetWidth );
        //objDivSubMenuInstance.style.width = objDivSubMenuInstance.childNodes[1].offsetWidth;
        objDivSubMenuInstance.style.width = "250px";
        //objDivSubMenuInstance.style.width = "100%";
        objDivSubMenuInstance.style.top = objDiv.offsetTop + parseInt(objDiv.getAttribute("TopOffset"));
        objDivSubMenuInstance.style.left = objDiv.offsetLeft + objDiv.offsetWidth + parseInt(objDiv.getAttribute("LeftOffset"));
    }

    objDivSubMenuInstance.noWrap = true;
    //alert( objDivSubMenuInstance.childNodes[1].width );
    //objDivSubMenuInstance.childNodes[0].style.width = objDivSubMenuInstance.childNodes[1].offsetWidth + 7;
    objDivSubMenuInstance.childNodes[0].style.height = objDivSubMenuInstance.childNodes[1].offsetHeight + 7;
    //alert( objDivSubMenuInstance.childNodes(1).offsetHeight );
}

function OnMouseOverVerticalMenuTemplate2(objDiv)
{
    g_bOverMenu = true;

    var objDivSubMenuInstance = document.getElementById("vsm_" + objDiv.getAttribute("vm_id"));

    if (objDivSubMenuInstance == null)
    {
        objDivSubMenuInstance = AddSubMenu2(objDiv.getAttribute("vm_id"), objDiv.getAttribute("vm_id"), 0);

        var arrSubMenuItems = null;

        eval("arrSubMenuItems = arr_" + objDiv.getAttribute("vm_id"));

        for (var i = 0; i < arrSubMenuItems.length; i++)
        {
            if (arrSubMenuItems[i][1] == objDiv.getAttribute("vm_id"))
            {
                AddSubMenuItem2(objDiv.getAttribute("vm_id"), objDivSubMenuInstance, arrSubMenuItems[i], 0);
            }
        }
    }

    if (objDivSubMenuInstance != null)
    {
        g_arrMenues[0] = objDivSubMenuInstance.id;
        objDivSubMenuInstance.style.display = "block";
        objDivSubMenuInstance.style.width = "250px";
        objDivSubMenuInstance.style.top = objDiv.offsetTop + parseInt(objDiv.getAttribute("TopOffset"));
        objDivSubMenuInstance.style.left = objDiv.offsetLeft + objDiv.offsetWidth + parseInt(objDiv.getAttribute("LeftOffset"));
        objDivSubMenuInstance.noWrap = true;
    }
}

function OnMouseOutVerticalMenuTemplate(objDiv)
{
    g_bOverMenu = false;
    setTimeout("HideSubMenu( '" + objDiv.getAttribute("vm_id") + "' )", objDiv.getAttribute("HideDelay"));
}

function OnMouseOutVerticalMenuTemplate2(objDiv)
{
    g_bOverMenu = false;
    setTimeout("HideSubMenu2( '" + objDiv.getAttribute("vm_id") + "' )", objDiv.getAttribute("HideDelay"));
}

function OnMouseOverSubMenuTemplate(objDiv)
{
}

function OnMouseOutSubMenuTemplate(objDiv)
{
}

function OnMouseOverSubMenuItemTemplate(objDiv)
{
    g_bOverMenu = true;

    var objDivSubMenuInstance = document.getElementById("vsm_" + objDiv.getAttribute("VerticalSubItemMenuID"));
    var objDivSubMenuParent = document.getElementById("vsm_" + objDiv.getAttribute("ParentID"));

    var nDepth = parseInt(objDivSubMenuParent.getAttribute("Depth")) + 1;

    if (g_objDivLastSelectedSubMenu != null && nDepth == parseInt(g_objDivLastSelectedSubMenu.getAttribute("Depth")))
    {
        var arrSubMenuItems = null;

        eval("arrSubMenuItems = arr_" + g_objDivLastSelectedSubMenu.getAttribute("vm_id"));

        var objDiv2 = null;
        for (var i = 0; i < arrSubMenuItems.length; i++)
        {
            objDiv2 = document.getElementById("vsm_" + arrSubMenuItems[i][1]);

            if (objDiv2 != null && parseInt(objDiv2.getAttribute("Depth")) >= nDepth)
                objDiv2.style.display = "none";
        }
    }

    if (objDivSubMenuInstance == null)
    {
        var arrSubMenuItems = null;

        eval("arrSubMenuItems = arr_" + objDiv.getAttribute("vm_id"));

        var bFound = false;
        for (var i = 0; i < arrSubMenuItems.length; i++)
        {
            if (arrSubMenuItems[i][1] == objDiv.getAttribute("VerticalSubItemMenuID"))
            {
                bFound = true;
                break;
            }
        }

        if (!bFound)
            return;

        objDivSubMenuInstance = AddSubMenu(objDiv.getAttribute("vm_id"), objDiv.getAttribute("VerticalSubItemMenuID"), nDepth);

        for (var i = 0; i < arrSubMenuItems.length; i++)
        {
            if (arrSubMenuItems[i][1] == objDiv.getAttribute("VerticalSubItemMenuID"))
            {
                AddSubMenuItem(objDiv.getAttribute("vm_id"), objDivSubMenuInstance, arrSubMenuItems[i], nDepth);
            }
        }
    }

    if (objDivSubMenuInstance != null)
    {
        g_objDivLastSelectedSubMenu = objDivSubMenuInstance;
        g_arrMenues[nDepth] = objDivSubMenuInstance.id;
        objDivSubMenuInstance.style.display = "block";
        objDivSubMenuInstance.style.width = "300px";
        objDivSubMenuInstance.style.top = objDivSubMenuParent.offsetTop + objDiv.offsetTop + parseInt(objDiv.getAttribute("TopOffset"));
        objDivSubMenuInstance.style.left = objDivSubMenuParent.offsetLeft + objDiv.offsetLeft + objDiv.offsetWidth + parseInt(objDiv.getAttribute("LeftOffset"));
    }

    objDivSubMenuInstance.childNodes[0].style.height = objDivSubMenuInstance.childNodes[1].offsetHeight + 7;
}

function OnMouseOverSubMenuItemTemplate2(objDiv)
{
    g_bOverMenu = true;

    var objDivSubMenuItemInstance = document.getElementById("vsmi_" + objDiv.getAttribute("VerticalSubItemMenuID"));
    var objDivSubMenuItemOverInstance = document.getElementById("vsmio_" + objDiv.getAttribute("VerticalSubItemMenuID"));

    if (objDivSubMenuItemOverInstance != null)
    {
        objDivSubMenuItemInstance.style.display = "none";
        objDivSubMenuItemOverInstance.style.display = "block";
    }

    var objDivSubMenuParent = document.getElementById("vsm_" + objDiv.getAttribute("ParentID"));
    var nDepth = parseInt(objDivSubMenuParent.getAttribute("Depth")) + 1;

    if (g_objDivLastSelectedSubMenu != null && nDepth == parseInt(g_objDivLastSelectedSubMenu.getAttribute("Depth")))
    {
        var arrSubMenuItems = null;

        eval("arrSubMenuItems = arr_" + g_objDivLastSelectedSubMenu.getAttribute("vm_id"));

        var objDiv2 = null;
        for (var i = 0; i < arrSubMenuItems.length; i++)
        {
            objDiv2 = document.getElementById("vsm_" + arrSubMenuItems[i][1]);

            if (objDiv2 != null && parseInt(objDiv2.getAttribute("Depth")) >= nDepth)
                objDiv2.style.display = "none";
        }
    }

    var objDivSubMenuInstance = document.getElementById("vsm_" + objDiv.getAttribute("VerticalSubItemMenuID"));

    if (objDivSubMenuInstance == null)
    {
        var arrSubMenuItems = null;

        eval("arrSubMenuItems = arr_" + objDiv.getAttribute("vm_id"));

        for (var i = 0; i < arrSubMenuItems.length; i++)
        {
            if (arrSubMenuItems[i][1] == objDiv.getAttribute("VerticalSubItemMenuID"))
            {
                if (objDivSubMenuInstance == null)
                    objDivSubMenuInstance = AddSubMenu2(objDiv.getAttribute("vm_id"), objDiv.getAttribute("VerticalSubItemMenuID"), nDepth);

                AddSubMenuItem2(objDiv.getAttribute("vm_id"), objDivSubMenuInstance, arrSubMenuItems[i], nDepth);
            }
        }
    }

    if (objDivSubMenuInstance != null)
    {
        g_objDivLastSelectedSubMenu = objDivSubMenuInstance;
        g_arrMenues[nDepth] = objDivSubMenuInstance.id;
        objDivSubMenuInstance.style.display = "block";
        objDivSubMenuInstance.style.width = "300px";
        objDivSubMenuInstance.style.top = objDivSubMenuParent.offsetTop + objDiv.offsetTop + parseInt(objDivSubMenuParent.getAttribute("TopOffset"));
        objDivSubMenuInstance.style.left = objDivSubMenuParent.offsetLeft + objDivSubMenuParent.offsetWidth + objDiv.offsetLeft + parseInt(objDivSubMenuParent.getAttribute("LeftOffset"));
        objDivSubMenuInstance.childNodes[0].style.height = objDivSubMenuParent.offsetHeight + 7;
    }
}

function OnMouseOutSubMenuItemTemplate2(objDiv)
{
    g_bOverMenu = false;

    var objDivSubMenuItemInstance = document.getElementById("vsmi_" + objDiv.getAttribute("VerticalSubItemMenuID"));
    var objDivSubMenuItemOverInstance = document.getElementById("vsmio_" + objDiv.getAttribute("VerticalSubItemMenuID"));

    if (objDivSubMenuItemOverInstance != null)
    {
        objDivSubMenuItemInstance.style.display = "block";
        objDivSubMenuItemOverInstance.style.display = "none";
    }

    setTimeout("HideSubMenu2( '" + objDiv.getAttribute("vm_id") + "' )", objDiv.getAttribute("HideDelay"));
}

function OnMouseOutSubMenuItemTemplate(objDiv)
{
    g_bOverMenu = false;

    setTimeout("HideSubMenu( '" + objDiv.getAttribute("vm_id") + "' )", objDiv.getAttribute("HideDelay"));
}

function HideSubMenu(strID)
{
    if (!g_bOverMenu)
    {
        var arrSubMenuItems = null;

        eval("arrSubMenuItems = arr_" + strID);

        var objDiv = null;
        for (var i = 0; i < arrSubMenuItems.length; i++)
        {
            objDiv = document.getElementById("vsm_" + arrSubMenuItems[i][1]);

            if (objDiv != null)
                objDiv.style.display = "none";
        }
    }
}

function HideSubMenu2(strID)
{
    if (!g_bOverMenu)
    {
        var objDiv = document.getElementById("vsm_" + strID);

        if (objDiv != null)
        {
            objDiv.style.display = "none";
        }

        var arrSubMenuItems = null;

        eval("arrSubMenuItems = arr_" + strID);

        var objDiv = null;
        for (var i = 0; i < arrSubMenuItems.length; i++)
        {
            objDiv = document.getElementById("vsm_" + arrSubMenuItems[i][1]);

            if (objDiv != null)
                objDiv.style.display = "none";
        }
    }
}

function OnClickVerticalMenuTemplate(objDiv)
{
    var strUrl = objDiv.getAttribute("Url");

    if (strUrl != null)
    {
        if (strUrl.charAt(0) == '/' && strUrl.indexOf("&TokenGuid=") == -1 && strUrl.indexOf("&ReuseToken=") == -1)
        {
            if (strUrl.indexOf("?") != -1)
                strUrl += "&ReuseToken=True";
            else
                strUrl += "?ReuseToken=True";
        }

        document.location.href = strUrl;
    }
}

function OnClickSubMenuItemTemplate(objDiv)
{
    var strUrl = objDiv.getAttribute("Url");

    if (strUrl.charAt(0) == '/' && strUrl.indexOf("&TokenGuid=") == -1 && strUrl.indexOf("&ReuseToken=") == -1)
    {
        if (strUrl.indexOf("?") != -1)
            strUrl += "&ReuseToken=True";
        else
            strUrl += "?ReuseToken=True";
    }

    document.location.href = strUrl;
}

function OnClickSubMenuItemTemplate2(objDiv)
{
    var strUrl = objDiv.getAttribute("Url");

    if (strUrl.charAt(0) == '/' && strUrl.indexOf("&TokenGuid=") == -1 && strUrl.indexOf("&ReuseToken=") == -1)
    {
        if (strUrl.indexOf("?") != -1)
            strUrl += "&ReuseToken=True";
        else
            strUrl += "?ReuseToken=True";
    }

    document.location.href = strUrl;
}
// END - Vertical Menu Table Helper Functions

function ResizeWidthToContent(objElem)
{
    try
    {
        objElem.style.width = document.frames(objElem.id).document.forms[0].offsetWidth;
    }
    catch (e)
    {
    }
}

function ResizeHeightToContent(objElem)
{
    try
    {
        objElem.style.height = document.frames(objElem.id).document.forms[0].offsetHeight;
    }
    catch (e)
    {
    }
}

function ChangeStyle(objElement, strObjectID, strCSS, strDataItemIndex, objEvent, strObjectIDPin, strTargetNotUnique)
{
    try
    {
        var objTarget = null;
        
        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);
                
                objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objArr == undefined || objArr == null || objArr.length == 0)
                    objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*
                objArr = GetElementsByObjectID(strObjectID);

                if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }

            if (objTarget != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {                
                var objTmp = GetElementByObjectID(strObjectID);

                objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                    objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*
                objTarget = GetElementsByObjectID(strObjectID);

                if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);
                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }
        else if (objElement != null && objElement != undefined && objElement != "")
        {
            objTarget = new Array();
            objTarget[objTarget.length] = objElement;
        }

        if (objTarget != undefined && objTarget != null)
        {
            for (var i = 0; i < objTarget.length; i++)
            {
                objElement = objTarget[i];

                if (strCSS != null && strCSS != "")
                {
                    if (objElement.className != strCSS)
                    {
                        //objElement.setAttribute("className", strCSS);
                        objElement.className = strCSS;
                    }
                }
                else
                    objElement.removeAttribute("className");
            }
        }
    }
    catch (e)
    {
        alert(e.message);
        throw new Error(0, "ChangeStyle() - " + e.message);
    }
}

function PanelAddPin(strTarget, strPinName, strPinValue)
{
    var arrPanels = document.getElementsByTagName("IFRAME");

    for (var i = 0; i < arrPanels.length; i++)
    {
        if (arrPanels[i].getAttribute("id") == strTarget && arrPanels[i].getAttribute("src") != "blank.asp")
        {
            arrPanels[i].contentWindow.AddPin("Dynamic View Variables:" + strPinName, strPinValue, false);
        }
    }
}

function PanelFormSubmit(strElem, strTarget, strParentFormSubmit, strValidateForm)
{
    if (g_bExceptionThrown)
        return false;

    var arrPanels = document.getElementsByTagName("IFRAME");
    var bFound = false;

    for (var i = 0; i < arrPanels.length; i++)
    {
        if (arrPanels[i].getAttribute("Description") == strTarget && arrPanels[i].getAttribute("src") != "blank.asp")
        {
            if (!arrPanels[i].contentWindow.FormSubmit(null, strValidateForm, "Page:"))
                return;
            else
                bFound = true;
        }
    }

    if (!bFound && strParentFormSubmit == "True")
    {
        FormSubmit(null, strValidateForm, strElem + ":");
        return;
    }

    ShowWaitWindow();

    g_bWaiting = true;
    setTimeout("WaitForPanelFormSubmit( '" + strElem + "', '" + strTarget + "', '" + strParentFormSubmit + "', '" + strValidateForm + "' );", 500);
}

function WaitForPanelFormSubmit(strElem, strTarget, strParentFormSubmit, strValidateForm)
{
    if (g_bExceptionThrown)
    {
        HideWaitWindow();
        return false;
    }

    var arrPanels = document.getElementsByTagName("IFRAME");

    for (var i = 0; i < arrPanels.length; i++)
    {
        if (arrPanels[i].getAttribute("Description") == strTarget && arrPanels[i].document.readyState == "complete" && arrPanels[i].getAttribute("src") != "blank.asp")
        {
            g_bWaiting = false;
            if (arrPanels[i].contentWindow.g_bExceptionThrown)
            {
                HideWaitWindow();
                return false;
            }
            break;
        }
    }

    if (g_bWaiting)
        setTimeout("WaitForPanelFormSubmit( '" + strElem + "', '" + strTarget + "', '" + strParentFormSubmit + "', '" + strValidateForm + "' );", 500);
    else if (strParentFormSubmit == "True")
        FormSubmit(null, strValidateForm, strElem + ":");
    else
        HideWaitWindow();
}

function PreloadWaitWindow()
{
    var objTop = GetTopLevelWindow();

    if (!objTop.g_bSuppressWaitWindow)
    {
        objTop.g_bWaitWindow = true;

        if (objTop.g_objWaitWindow == null)
        {
            //objTop.g_objWaitWindow = objTop.document.createElement("<iframe frameborder=\"0\" border=\"0\" src=\"WaitWindow.aspx\" class=\"floating-window\"/>");
            objTop.g_objWaitWindow = objTop.document.createElement("IFRAME");
            objTop.g_objWaitWindow.frameborder = "0";
            objTop.g_objWaitWindow.setAttribute("frameborder", "0");
            objTop.g_objWaitWindow.setAttribute("border", "0");
            objTop.g_objWaitWindow.setAttribute("src", "WaitWindow.aspx");
            //objTop.g_objWaitWindow.setAttribute("class", "floating-window");

            objTop.document.body.appendChild(objTop.g_objWaitWindow);

            objTop.g_objWaitWindow.style.zIndex = "3";
            objTop.g_objWaitWindow.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=50)progid:DXImageTransform.Microsoft.Shadow(color= '#515C76' , Direction=115, Strength=10);"
            objTop.g_objWaitWindow.style.position = "absolute";
            objTop.g_objWaitWindow.style.width = "100";
            objTop.g_objWaitWindow.style.height = "70";
        }

        objTop.g_objWaitWindow.style.top = objTop.document.body.offsetHeight / 2 - 35;
        objTop.g_objWaitWindow.style.left = objTop.document.body.offsetWidth / 2 - 50;
        objTop.g_objWaitWindow.style.display = "none";
    }
}

function ShowWaitWindow()
{
    var objTop = GetTopLevelWindow();

    if (!objTop.g_bSuppressWaitWindow)
    {
        objTop.g_bWaitWindow = true;

        if (objTop.g_objWaitWindow == null)
        {
            objTop.g_objWaitWindow = objTop.document.createElement("IFRAME");

            objTop.g_objWaitWindow.frameborder = "0";
            objTop.g_objWaitWindow.setAttribute("frameborder", "0");
            objTop.g_objWaitWindow.setAttribute("border", "0");
            objTop.g_objWaitWindow.setAttribute("src", "WaitWindow.aspx");

            objTop.document.body.appendChild(objTop.g_objWaitWindow);

            objTop.g_objWaitWindow.style.zIndex = "3";
            objTop.g_objWaitWindow.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=50)progid:DXImageTransform.Microsoft.Shadow(color= '#515C76' , Direction=115, Strength=10);"
            objTop.g_objWaitWindow.style.position = "absolute";
            objTop.g_objWaitWindow.style.width = "100";
            objTop.g_objWaitWindow.style.height = "70";
        }

        objTop.g_objWaitWindow.style.top = objTop.document.body.offsetHeight / 2 - 35;
        objTop.g_objWaitWindow.style.left = objTop.document.body.offsetWidth / 2 - 50;
        objTop.g_objWaitWindow.style.display = "block";
    }
}

function HideWaitWindow()
{
    var objTop = GetTopLevelWindow();

    objTop.g_bWaitWindow = false;
    objTop.g_bSuppressWaitWindow = true;

    if (objTop.g_objWaitWindow != null && objTop.g_objWaitWindow != undefined)
        objTop.g_objWaitWindow.style.display = "none";
}

function PanelLoaded()
{
    HideWaitWindow();
}

function PanelReload(strElem, strTarget, strUrl, objEvent)
{
    strUrl = PopulateEvents(strUrl, objEvent);
    strUrl = PopulateUrlViewVariables(strUrl);

    var arrPanels = document.getElementsByTagName("IFRAME");

    if (arrPanels.length > 0)
    {
        setTimeout(ShowWaitWindow, 1500);
        var objTop = GetTopLevelWindow();
        objTop.g_bSuppressWaitWindow = false;
    }

    for (var i = 0; i < arrPanels.length; i++)
    {
        if (arrPanels[i].getAttribute("Description") == strTarget || arrPanels[i].getAttribute("id") == strTarget)
        {
            arrPanels[i].src = strUrl;
        }
    }
}

function GenerateGuid()
{
    // Create a random client side string with guid formatting
    // normal guid :		d1a3c6eb-043b-47a4-a674-436bd28513ef
    // client random guid : 11406196-1681-0370-8793-803141905370
    var now = new Date();
    var rand = Math.random().toString();
    var gGuid = now.getTime() + rand.substr(rand.indexOf(".") + 1) + rand.substr(rand.indexOf(".") + 1);
    gGuid = gGuid.substring(0, 8) + "-" + gGuid.substring(8, 12) + "-" + gGuid.substring(12, 16) + "-" + gGuid.substring(16, 20) + "-" + gGuid.substring(20, 32);

    return gGuid;
}

function PopulateUrlViewVariables(strUrl)
{
    var nPosStart = -1;
    var nPosEnd = -1;
    var strElem = "";
    var strValue = "";
    var objForm = document.getElementById("WorkflowForm");
    var nOffset = 0;
    var nIndexingPosStart = -1;
    var nIndexingPosEnd = -1;
    var nContextPosStart = -1;
    var nContextPosMiddle = -1;
    var nContextPosEnd = -1;
    var strRawViewVariable = null;
    var strIndexing = null;
    var strContext = null;
    var strContextTag = null;
    var arrCookies = document.cookie.split(';');

    // Try to populate any existing view variables on the client side
    strUrl = strUrl.replace("=#TokenGuid#", "=" + GenerateGuid());

    if (strUrl.indexOf("=#ListenerSessionGuid#") > -1)
    {
        var objEventService = GetEventService();

        if (objEventService != null && objEventService != undefined)
            strUrl = strUrl.replace("=#ListenerSessionGuid#", "=" + objEventService.SessionGuid);
    }

    /*
    while( ( nPosStart = strUrl.indexOf( "=#", nOffset ) ) > -1 && ( nPosEnd = strUrl.indexOf( "#", nPosStart + 2 ) ) > -1 )
    {
    if (nPosStart + 1 == nPosEnd)
    {
    str = str.replace( "##", "#" );
    nOffset = nPosStart + 1;
    }
    else
    {
    strValue = "";
    strElem = strUrl.substring( nPosStart + 2, nPosEnd );
    */
    while ((nPosStart = strUrl.indexOf("#", nOffset)) > -1 && (nPosEnd = strUrl.indexOf("#", nPosStart + 1)) > -1)
    {
        if (nPosStart + 1 == nPosEnd)
        {
            strUrl = strUrl.replace("##", escape("#"));
            nOffset = nPosStart + 1;
        }
        else
        {
            strValue = "";
            strElem = strUrl.substring(nPosStart + 1, nPosEnd);

            nIndexingPosStart = strElem.indexOf("[");
            nIndexingPosEnd = strElem.indexOf("]");

            nContextPosStart = strElem.indexOf("^");

            if (nContextPosStart > -1)
            {
                nContextPosMiddle = strElem.indexOf("^", nContextPosStart + 1);

                if (nContextPosMiddle > -1)
                    nContextPosEnd = strElem.indexOf("^", nContextPosMiddle + 1);
                else
                    nContextPosEnd = -1;
            }
            else
            {
                nContextPosEnd = -1;
                nContextPosMiddle = -1;
            }

            strRawViewVariable = strElem;

            if (nIndexingPosStart > -1 && nIndexingPosEnd > -1)
            {
                strIndexing = strRawViewVariable.substring(nIndexingPosStart + 1, nIndexingPosEnd);
                strElem = strRawViewVariable.substring(0, nIndexingPosStart);
            }
            else
            {
                strIndexing = null;
            }

            if (nContextPosStart > -1 && nContextPosMiddle > -1)
            {
                if (nContextPosEnd > -1)
                {
                    strContextTag = strRawViewVariable.substring(nContextPosMiddle + 1, nContextPosEnd);

                    switch (strContextTag)
                    {
                        case "TableCell":
                            strContextTag = "TD";
                            break;
                        case "TableRow":
                            strContextTag = "TR";
                            break;
                        case "Table":
                            strContextTag = "TABLE";
                            break;
                    }
                }

                strContext = strRawViewVariable.substring(nContextPosStart + 1, nContextPosMiddle);
                strElem = strRawViewVariable.substring(0, nContextPosStart);

                var objContext = GetElementByIDPinAndTag(strContext, strContextTag);

                if (objContext != null && objContext != undefined)
                {
                    objForm = new Object();
                    objForm.elements = new Array();
                    var arrTags = objContext.getElementsByTagName("input");

                    for (var i = 0; i < arrTags.length; i++)
                    {
                        objForm.elements[objForm.elements.length] = arrTags[i];
                    }

                    arrTags = objContext.getElementsByTagName("select");

                    for (var i = 0; i < arrTags.length; i++)
                    {
                        objForm.elements[objForm.elements.length] = arrTags[i];
                    }
                }
            }
            else
            {
                strContext = null;
                objForm = document.getElementById("WorkflowForm");
            }
            
            if (strElem.indexOf("Cookie:") == 0)
            {
                if (strValue != "")
                    strValue += ",";
                
                var cookie = null;
                var cookieName = strElem.substr(7);
                
                for (var i = 0; i < arrCookies.length; i++)
                {
                    cookie = arrCookies[i].split('=');
                    if (cookie[0].indexOf(" ") == 0)
                        cookie[0] = cookie[0].substr(1);

                    if (cookie.length > 1 && cookie[0] == cookieName)
                    {
                        strValue += cookie[1];
                        break;
                    }
                }
            }
            else
            {
                for (var i = 0; i < objForm.elements.length; i++)
                {
                    if (objForm.elements[i].getAttribute("Description") == strElem && objForm.elements[i].getAttribute("BaseName") != undefined && objForm.elements[i].getAttribute("BaseName").indexOf(":DataItemIndex:") == -1)
                    {
                        if (strIndexing != null && objForm.elements[i].getAttribute("IDPin") != strIndexing)
                            continue;

                        if (objForm.elements[i].tagName == "SELECT")
                        {
                            if (objForm.elements[i].selectedIndex > -1 && objForm.elements[i].options[objForm.elements[i].selectedIndex].value != "")
                            {
                                if (strValue != "")
                                    strValue += ",";

                                strValue += objForm.elements[i].options[objForm.elements[i].selectedIndex].value;
                            }
                        }
                        else if (objForm.elements[i].tagName == "INPUT" && (objForm.elements[i].type == "checkbox" || objForm.elements[i].type == "radio"))
                        {

                            if (strValue != "")
                                strValue += ",";

                            if (objForm.elements[i].checked)
                                strValue += "True";
                            else
                                strValue += "False";
                        }
                        else if (objForm.elements[i].value != "")
                        {
                            if (strValue != "")
                                strValue += ",";

                            strValue += objForm.elements[i].value;
                        }
                    }
                }
            }

            strUrl = strUrl.replace("#" + strRawViewVariable + "#", escape(strValue));
            nOffset = strValue.length;
        }
    }

    nPosStart = -2;

    do
    {
        nPosStart = strUrl.indexOf("=&", nPosStart + 2);
        nPosEnd = strUrl.indexOf("&&", nPosStart + 2);

        if (nPosStart > -1 && nPosEnd > -1)
        {
            strValue = "";
            strElem = strUrl.substring(nPosStart + 2, nPosEnd);

            for (var i = 0; i < objForm.elements.length; i++)
            {
                if (objForm.elements[i].getAttribute("Description") == strElem && objForm.elements[i].getAttribute("BaseName") != undefined && objForm.elements[i].getAttribute("BaseName").indexOf(":DataItemIndex:") == -1)
                {
                    if (objForm.elements[i].tagName == "SELECT")
                    {
                        if (objForm.elements[i].selectedIndex > -1 && objForm.elements[i].options[objForm.elements[i].selectedIndex].value != "")
                        {
                            if (strValue != "")
                                strValue += ",";

                            strValue += objForm.elements[i].IDPin;
                        }
                    }
                    else if (objForm.elements[i].tagName == "INPUT" && objForm.elements[i].type == "radio" && objForm.elements[i].checked)
                    {
                        if (strValue != "")
                            strValue += ",";

                        strValue += objForm.elements[i].IDPin;
                    }
                    else if (objForm.elements[i].value != "")
                    {
                        if (strValue != "")
                            strValue += ",";

                        strValue += objForm.elements[i].IDPin;
                    }
                }
            }

            if (strValue != "")
                strUrl = strUrl.replace("&" + strElem + "&", escape(strValue));
        }
    }
    while (nPosStart > -1)

    strUrl = strUrl.replace("#TokenGuid#", GenerateGuid());

    nPosStart = -1;

    do
    {
        nPosStart = strUrl.indexOf("*", nPosStart + 1);
        nPosEnd = strUrl.indexOf("*", nPosStart + 1);

        if (nPosStart > -1 && nPosEnd > -1)
        {
            strValue = "";
            strElem = strUrl.substring(nPosStart + 1, nPosEnd);

            for (var i = 0; i < objForm.elements.length; i++)
            {
                if (objForm.elements[i].getAttribute("Description") == strElem && objForm.elements[i].getAttribute("BaseName") != undefined && objForm.elements[i].getAttribute("BaseName").indexOf(":DataItemIndex:") == -1)
                {
                    if (objForm.elements[i].tagName == "SELECT")
                    {
                        if (objForm.elements[i].selectedIndex > -1 && objForm.elements[i].options[objForm.elements[i].selectedIndex].value != "")
                        {
                            if (strValue != "")
                                strValue += ",";

                            strValue += objForm.elements[i].options[objForm.elements[i].selectedIndex].value;
                        }
                    }
                    if (objForm.elements[i].tagName == "TEXTAREA")
                    {
                        if (strValue != "")
                            strValue += ",";

                        strValue += objForm.elements[i].getAttribute("Selection");
                    }
                    else if (objForm.elements[i].value != "")
                    {
                        if (strValue != "")
                            strValue += ",";

                        strValue += objForm.elements[i].IDPin;
                    }
                }
            }

            // Only overwrite if found
            if (strValue != "")
                strUrl = strUrl.replace("*" + strElem + "*", escape(strValue));
        }
    }
    while (nPosStart > -1)

    /*
    nPosStart = -1;
	
	do
    {
    nPosStart = strUrl.indexOf( ".", nPosStart + 1 );
    nPosEnd = strUrl.indexOf( ".", nPosStart + 1 );
		
		if( nPosStart > -1 && nPosEnd > -1  )
    {
    strValue = "";
    strElem = strUrl.substring( nPosStart + 1, nPosEnd );

			for( var i = 0; i < objForm.elements.length; i++ )
    {
    if( objForm.elements[i].getAttribute( "Description" ) == strElem && objForm.elements[i].getAttribute( "BaseName" ) != undefined && objForm.elements[i].getAttribute( "BaseName" ).indexOf( ":DataItemIndex:" ) == -1  )
    {	
    if( objForm.elements[i].tagName == "SELECT" )
    {
    if( objForm.elements[i].selectedIndex > -1 && objForm.elements[i].options[objForm.elements[i].selectedIndex].value != "" )
    {
    if( strValue != "" )
    strValue += ",";
						
    strValue += objForm.elements[i].options[objForm.elements[i].selectedIndex].value;
    }
    }
    if( objForm.elements[i].tagName == "TEXTAREA" )
    {
    if( strValue != "" )
    strValue += ",";
						
    strValue += objForm.elements[i].getAttribute( "Selection" );
    }
    else if( objForm.elements[i].value != "" )
    {
    if( strValue != "" )
    strValue += ",";
						
    strValue += objForm.elements[i].IDPin;
    }
    }
    }
			
    // Only overwrite if found
    if( strValue != "" )
    strUrl = strUrl.replace( "." + strElem + ".", strValue );
    }
    }
    while( nPosStart > -1 )
	
	*/

    return strUrl;
}

function PopulateViewVariables(str, bUseXml, bUseArray)
{
    if (typeof (str) == "object" && str.length == 1)
        str = str[0];

    if (str == null || str == undefined || typeof (str) != "string" || (str.indexOf("#") == -1 && str.indexOf("&") == -1))
        return str;

    if (bUseXml || bUseXml == "True")
    {
    }
    else if (bUseXml == null || bUseXml == '' || !bUseXml || bUseXml != "True")
    {
        bUseXml = false;
    }

    var nPosStart = -1;
    var nPosEnd = -1;
    var strElem = "";
    var strValue = "";
    var objForm = document.getElementById("WorkflowForm");
    var nOffset = 0;
    var objArr = null;
    var arr = new Array();

    // Try to populate any existing view variables on the client side
    str = str.replace("#TokenGuid#", GenerateGuid());

    if (str.indexOf("#ListenerSessionGuid#") > -1)
    {
        var objEventService = GetEventService();

        if (objEventService != null && objEventService != undefined)
            str = str.replace("#ListenerSessionGuid#", objEventService.SessionGuid);
            
        if (bUseXml)
            str = WrapIntoDataItem(str);
        else if (bUseArray)
            arr[arr.length] = str;
    }

    var nIndexingPosStart = -1;
    var nIndexingPosEnd = -1;
    var nFormattingPosStart = -1;
    var nFormattingPosEnd = -1;
    var nContextPosStart = -1;
    var nContextPosMiddle = -1;
    var nContextPosEnd = -1;
    var strRawViewVariable = null;
    var strIndexing = null;
    var strContext = null;
    var strContextTag = null;
    var fiIndexingFunctionInfo = null;
    var fiFormattingFunctionInfo = null;
    var nFormattingCount = 0;
    var fFormattingSum = 0;
    var arrCookies = document.cookie.split(';');

    while ((nPosStart = str.indexOf("#", nOffset)) > -1 && (nPosEnd = str.indexOf("#", nPosStart + 1)) > -1)
    {
        if (nPosStart + 1 == nPosEnd)
        {
            str = str.replace("##", "#");
            nOffset = nPosStart + 1;
        }
        else
        {
            strValue = "";
            strElem = str.substring(nPosStart + 1, nPosEnd);

            nIndexingPosStart = strElem.indexOf("[");
            nIndexingPosEnd = strElem.indexOf("]");

            nContextPosStart = strElem.indexOf("^");

            nFormattingPosStart = strElem.indexOf("{");
            nFormattingPosEnd = strElem.indexOf("}");

            if (nContextPosStart > -1)
            {
                nContextPosMiddle = strElem.indexOf("^", nContextPosStart + 1);

                if (nContextPosMiddle > -1)
                    nContextPosEnd = strElem.indexOf("^", nContextPosMiddle + 1);
                else
                    nContextPosEnd = -1;
            }
            else
            {
                nContextPosEnd = -1;
                nContextPosMiddle = -1;
            }

            strRawViewVariable = strElem;

            if (nIndexingPosStart > -1 && nIndexingPosEnd > -1)
            {
                strIndexing = strRawViewVariable.substring(nIndexingPosStart + 1, nIndexingPosEnd);
                strElem = strRawViewVariable.substring(0, nIndexingPosStart);

                fiIndexingFunctionInfo = new FunctionInfo(strIndexing);
            }
            else
            {
                strIndexing = null;
            }

            if (nFormattingPosStart > -1 && nFormattingPosEnd > -1)
            {
                fiFormattingFunctionInfo = new FunctionInfo(strRawViewVariable.substring(nFormattingPosStart + 1, nFormattingPosEnd));
            }
           
            if (nContextPosStart > -1 && nContextPosMiddle > -1)
            {
                if (nContextPosEnd > -1)
                {
                    strContextTag = strRawViewVariable.substring(nContextPosMiddle + 1, nContextPosEnd);

                    switch (strContextTag)
                    {
                        case "TableCell":
                            strContextTag = "TD";
                            break;
                        case "TableRow":
                            strContextTag = "TR";
                            break;
                        case "Table":
                            strContextTag = "TABLE";
                            break;
                    }
                }

                strContext = strRawViewVariable.substring(nContextPosStart + 1, nContextPosMiddle);
                strElem = strRawViewVariable.substring(0, nContextPosStart);

                var objContext = GetElementByIDPinAndTag(strContext, strContextTag);

                if (objContext != null && objContext != undefined)
                {
                    objForm = new Object();
                    objForm.elements = new Array();
                    var arrTags = objContext.getElementsByTagName("input");

                    for (var i = 0; i < arrTags.length; i++)
                    {
                        objForm.elements[objForm.elements.length] = arrTags[i];
                    }

                    arrTags = objContext.getElementsByTagName("select");

                    for (var i = 0; i < arrTags.length; i++)
                    {
                        objForm.elements[objForm.elements.length] = arrTags[i];
                    }
                }
            }
            else
            {
                if (nIndexingPosStart > -1)
                    strElem = strRawViewVariable.substring(0, nIndexingPosStart);
                else if (nFormattingPosStart > -1)
                    strElem = strRawViewVariable.substring(0, nFormattingPosStart);
                
                strContext = null;
                objForm = document.getElementById("WorkflowForm");
            }

            if (strElem.indexOf("Cookie:") == 0)
            {
                var cookie = null;
                var cookieName = strElem.substr(7);
                
                for (var i = 0; i < arrCookies.length; i++)
                {
                    cookie = arrCookies[i].split('=');
                    if (cookie[0].indexOf(" ") == 0)
                        cookie[0] = cookie[0].substr(1);
                    
                    if (cookie.length > 1 && cookie[0] == cookieName)
                    {
                        if (bUseXml)
                        {
                            strValue += WrapIntoDataItem(cookie[1]);
                        }
                        else if (bUseArray)
                        {
                            arr[arr.length] = cookie[1];
                        }
                        else
                        {
                            if (strValue != "")
                                strValue += ",";

                            strValue += cookie[1];
                        }
                        break;
                    }
                }
            }
            else
            {
            /*
                var arrCCEDesc = g_arrCCE[strElem];

                if (arrCCEDesc != null)
                {
                    var arrCCEIDPin = arrCCEDesc[strIndexing];

                    if (arrCCEIDPin != null)
                    {
                        for (var i = 0; i < arrCCEIDPin.length; i++)
                        {
                            if (arrCCEIDPin[i].tagName == "SELECT")
                            {
                                if (arrCCEIDPin[i].multiple)
                                {
                                    for (var j = 0; j < arrCCEIDPin[i].length; j++)
                                    {
                                        if (arrCCEIDPin[i].options[j].selected)
                                        {
                                            if (bUseXml)
                                            {
                                                strValue += WrapIntoDataItem(arrCCEIDPin[i].options[j].value);
                                            }
                                            else if (bUseArray)
                                            {
                                                arr[arr.length] = arrCCEIDPin[i].options[j].value;
                                            }
                                            else
                                            {
                                                if (strValue != "")
                                                    strValue += ",";

                                                strValue += arrCCEIDPin[i].options[j].value;
                                            }
                                        }
                                    }
                                }
                                else if (arrCCEIDPin[i].selectedIndex > -1 && arrCCEIDPin[i].options[arrCCEIDPin[i].selectedIndex].value != "")
                                {
                                    if (bUseXml)
                                    {
                                        strValue += WrapIntoDataItem(arrCCEIDPin[i].options[arrCCEIDPin[i].selectedIndex].value);
                                    }
                                    else if (bUseArray)
                                    {
                                        arr[arr.length] = arrCCEIDPin[i].options[arrCCEIDPin[i].selectedIndex].value;
                                    }
                                    else
                                    {
                                        if (strValue != "")
                                            strValue += ",";

                                        strValue += arrCCEIDPin[i].options[arrCCEIDPin[i].selectedIndex].value;
                                    }
                                }
                                else // Added on 2008/03/07 to handle empty list boxes
                                {
                                    if (bUseXml)
                                    {
                                        strValue += WrapIntoDataItem("");
                                    }
                                    else if (bUseArray)
                                    {
                                        arr[arr.length] = "";
                                    }
                                    else
                                    {
                                        if (strValue != "")
                                            strValue += ",";

                                        strValue += "";
                                    }
                                }
                            }
                            else if (arrCCEIDPin[i].tagName == "INPUT" && arrCCEIDPin[i].type == "checkbox")
                            {
                                if (bUseXml)
                                {
                                    if (arrCCEIDPin[i].checked)
                                        strValue += WrapIntoDataItem("True");
                                    else
                                        strValue += WrapIntoDataItem("False");
                                }
                                else if (bUseArray)
                                {
                                    if (arrCCEIDPin[i].checked)
                                        arr[arr.length] = "True";
                                    else
                                        arr[arr.length] = "False";
                                }
                                else if (fiFormattingFunctionInfo != null)
                                {
                                    if (fiFormattingFunctionInfo.Name == "Count")
                                    {
                                        if (fiFormattingFunctionInfo.Parameters.length == 0)
                                            nFormattingCount++;
                                        else if (fiFormattingFunctionInfo.Parameters[0] == "True" && arrCCEIDPin[i].checked)
                                            nFormattingCount++;
                                        else if (fiFormattingFunctionInfo.Parameters[0] == "False" && !arrCCEIDPin[i].checked)
                                            nFormattingCount++;

                                        strValue = new String(nFormattingCount);
                                    }
                                }
                                else
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    if (arrCCEIDPin[i].checked)
                                        strValue += "True";
                                    else
                                        strValue += "False";
                                }
                            }
                            else if (arrCCEIDPin[i].tagName == "INPUT" && arrCCEIDPin[i].type == "radio")
                            {
                                if (arrCCEIDPin[i].checked)
                                {
                                    if (bUseXml)
                                    {
                                        strValue += WrapIntoDataItem(arrCCEIDPin[i].value);
                                    }
                                    else if (bUseArray)
                                    {
                                        arr[arr.length] = arrCCEIDPin[i].value;
                                    }
                                    else
                                    {
                                        if (strValue != "")
                                            strValue += ",";

                                        strValue += arrCCEIDPin[i].value;
                                    }
                                }
                            }
                            else if (arrCCEIDPin[i].Value != undefined && arrCCEIDPin[i].Value.length != undefined && arrCCEIDPin[i].Value.length > 0)
                            {
                                if (bUseXml)
                                {
                                    for (var j = 0; j < arrCCEIDPin[i].Value.length; j++)
                                        strValue += WrapIntoDataItem(arrCCEIDPin[i].Value[j]);
                                }
                                else if (bUseArray)
                                {
                                    for (var j = 0; j < arrCCEIDPin[i].Value.length; j++)
                                        arr[arr.length] = arrCCEIDPin[i].Value[j];
                                }
                                else
                                {
                                    for (var j = 0; j < arrCCEIDPin[i].Value.length; j++)
                                    {
                                        if (strValue != "")
                                            strValue += ",";

                                        strValue += arrCCEIDPin[i].Value[j];
                                    }
                                }
                            }
                            else //if( arrCCEIDPin[i].value != "" ) // Commented on 2008/06/03 to handle empty text boxes
                            {
                                if (bUseXml)
                                {
                                    strValue += WrapIntoDataItem(arrCCEIDPin[i].value);
                                }
                                else if (bUseArray)
                                {
                                    arr[arr.length] = arrCCEIDPin[i].value;
                                }
                                else if (fiFormattingFunctionInfo != null)
                                {
                                    if (fiFormattingFunctionInfo.Name == "Sum")
                                    {
                                        if (!isNaN(parseFloat(arrCCEIDPin[i].value)))
                                            fFormattingSum += parseFloat(arrCCEIDPin[i].value);

                                        strValue = new String(fFormattingSum);
                                    }
                                    else if (fiFormattingFunctionInfo.Name == "Count")
                                    {
                                        if (fiFormattingFunctionInfo.Parameters.length == 0)
                                            nFormattingCount++;
                                        else if (fiFormattingFunctionInfo.Parameters[0] == arrCCEIDPin[i].value)
                                            nFormattingCount++;

                                        strValue = new String(nFormattingCount);
                                    }
                                    else if (fiFormattingFunctionInfo.Name == "Length")
                                    {
                                        if (!isNaN(arrCCEIDPin[i].value.length))
                                            fFormattingSum += arrCCEIDPin[i].value.length;

                                        strValue = new String(fFormattingSum);
                                    }
                                }
                                else
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    strValue += arrCCEIDPin[i].value;
                                }
                            }
                        }
                    }
                }
            */
                for (var i = 0; i < objForm.elements.length; i++)
                {
                    if (objForm.elements[i].getAttribute("Description") == strElem && objForm.elements[i].getAttribute("BaseName") != undefined && objForm.elements[i].getAttribute("BaseName").indexOf(":DataItemIndex:") == -1)
                    {
                        if (strIndexing != null)
                        {
                            if (fiIndexingFunctionInfo.Name == "GroupID")
                            {
                                if (fiIndexingFunctionInfo.Parameters.length > 0 && objForm.elements[i].getAttribute("GroupID") != fiIndexingFunctionInfo.Parameters[0])
                                    continue;
                            }
                            else if (objForm.elements[i].getAttribute("IDPin") != strIndexing)
                                continue;
                        }

                        if (objForm.elements[i].tagName == "SELECT")
                        {
                            if (objForm.elements[i].multiple)
                            {
                                for (var j = 0; j < objForm.elements[i].length; j++)
                                {
                                    if (objForm.elements[i].options[j].selected)
                                    {
                                        if (bUseXml)
                                        {
                                            strValue += WrapIntoDataItem(objForm.elements[i].options[j].value);
                                        }
                                        else if (bUseArray)
                                        {
                                            arr[arr.length] = objForm.elements[i].options[j].value;
                                        }
                                        else
                                        {
                                            if (strValue != "")
                                                strValue += ",";

                                            strValue += objForm.elements[i].options[j].value;
                                        }
                                    }
                                }
                            }
                            else if (objForm.elements[i].selectedIndex > -1 && objForm.elements[i].options[objForm.elements[i].selectedIndex].value != "")
                            {
                                if (bUseXml)
                                {
                                    strValue += WrapIntoDataItem(objForm.elements[i].options[objForm.elements[i].selectedIndex].value);
                                }
                                else if (bUseArray)
                                {
                                    arr[arr.length] = objForm.elements[i].options[objForm.elements[i].selectedIndex].value;
                                }
                                else
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    strValue += objForm.elements[i].options[objForm.elements[i].selectedIndex].value;
                                }
                            }
                            else // Added on 2008/03/07 to handle empty list boxes
                            {
                                if (bUseXml)
                                {
                                    strValue += WrapIntoDataItem("");
                                }
                                else if (bUseArray)
                                {
                                    arr[arr.length] = "";
                                }
                                else
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    strValue += "";
                                }
                            }
                        }
                        else if (objForm.elements[i].tagName == "INPUT" && objForm.elements[i].type == "checkbox")
                        {
                            if (bUseXml)
                            {
                                if (objForm.elements[i].checked)
                                    strValue += WrapIntoDataItem("True");
                                else
                                    strValue += WrapIntoDataItem("False");
                            }
                            else if (bUseArray)
                            {
                                if (objForm.elements[i].checked)
                                    arr[arr.length] = "True";
                                else
                                    arr[arr.length] = "False";
                            }
                            else if (fiFormattingFunctionInfo != null)
                            {
                                if (fiFormattingFunctionInfo.Name == "Count")
                                {
                                    if (fiFormattingFunctionInfo.Parameters.length == 0)
                                        nFormattingCount++;
                                    else if (fiFormattingFunctionInfo.Parameters[0] == "True" && objForm.elements[i].checked)
                                        nFormattingCount++;
                                    else if (fiFormattingFunctionInfo.Parameters[0] == "False" && !objForm.elements[i].checked)
                                        nFormattingCount++;

                                    strValue = new String(nFormattingCount);
                                }
                            }
                            else
                            {
                                if (strValue != "")
                                    strValue += ",";

                                if (objForm.elements[i].checked)
                                    strValue += "True";
                                else
                                    strValue += "False";
                            }
                        }
                        else if (objForm.elements[i].tagName == "INPUT" && objForm.elements[i].type == "radio")
                        {
                            if (objForm.elements[i].checked)
                            {
                                if (bUseXml)
                                {
                                    strValue += WrapIntoDataItem(objForm.elements[i].value);
                                }
                                else if (bUseArray)
                                {
                                    arr[arr.length] = objForm.elements[i].value;
                                }
                                else
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    strValue += objForm.elements[i].value;
                                }
                            }
                        }
                        else if (objForm.elements[i].Value != undefined && objForm.elements[i].Value.length != undefined && objForm.elements[i].Value.length > 0)
                        {
                            if (bUseXml)
                            {
                                for (var j = 0; j < objForm.elements[i].Value.length; j++)
                                    strValue += WrapIntoDataItem(objForm.elements[i].Value[j]);
                            }
                            else if (bUseArray)
                            {
                                for (var j = 0; j < objForm.elements[i].Value.length; j++)
                                    arr[arr.length] = objForm.elements[i].Value[j];
                            }
                            else
                            {
                                for (var j = 0; j < objForm.elements[i].Value.length; j++)
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    strValue += objForm.elements[i].Value[j];
                                }
                            }
                        }
                        else //if( objForm.elements[i].value != "" ) // Commented on 2008/06/03 to handle empty text boxes
                        {
                            if (bUseXml)
                            {
                                strValue += WrapIntoDataItem(objForm.elements[i].value);
                            }
                            else if (bUseArray)
                            {
                                arr[arr.length] = objForm.elements[i].value;
                            }
                            else if (fiFormattingFunctionInfo != null)
                            {
                                if (fiFormattingFunctionInfo.Name == "Sum")
                                {
                                    if (!isNaN(parseFloat(objForm.elements[i].value)))
                                        fFormattingSum += parseFloat(objForm.elements[i].value);

                                    strValue = new String(fFormattingSum);
                                }
                                else if (fiFormattingFunctionInfo.Name == "Count")
                                {
                                    if (fiFormattingFunctionInfo.Parameters.length == 0)
                                        nFormattingCount++;
                                    else if (fiFormattingFunctionInfo.Parameters[0] == objForm.elements[i].value)
                                        nFormattingCount++;

                                    strValue = new String(nFormattingCount);
                                }
                                else if (fiFormattingFunctionInfo.Name == "Length")
                                {
                                    if (!isNaN(objForm.elements[i].value.length))
                                        fFormattingSum += objForm.elements[i].value.length;

                                    strValue = new String(fFormattingSum);
                                }
                            }
                            else
                            {
                                if (strValue != "")
                                    strValue += ",";

                                strValue += objForm.elements[i].value;
                            }
                        }
                    }
                }
            }
            
            str = str.replace("#" + strRawViewVariable + "#", strValue);
            nOffset = strValue.length;
        }
    }

    nPosStart = -1;
    nOffset = 0;

    if (str.indexOf("&") > -1)
    {
        do
        {
            nPosStart = str.indexOf("&", nPosStart + 1);
            nPosEnd = str.indexOf("&", nPosStart + 1);

            if (nPosStart > -1 && nPosEnd > -1)
            {
                if (nPosStart + 1 == nPosEnd)
                {
                    str = str.substr(0, nPosStart) + str.substr(nPosEnd);
                }
                else
                {
                    strValue = "";
                    strElem = str.substring(nPosStart + 1, nPosEnd);
                    strRawViewVariable = strElem;

                    nContextPosStart = strElem.indexOf("^");

                    if (nContextPosStart > -1)
                    {
                        nContextPosMiddle = strElem.indexOf("^", nContextPosStart + 1);

                        if (nContextPosMiddle > -1)
                            nContextPosEnd = strElem.indexOf("^", nContextPosMiddle + 1);
                        else
                            nContextPosEnd = -1;
                    }
                    else
                    {
                        nContextPosEnd = -1;
                        nContextPosMiddle = -1;
                    }

                    if (nContextPosStart > -1 && nContextPosMiddle > -1)
                    {
                        if (nContextPosEnd > -1)
                        {
                            strContextTag = strRawViewVariable.substring(nContextPosMiddle + 1, nContextPosEnd);

                            switch (strContextTag)
                            {
                                case "TableCell":
                                    strContextTag = "TD";
                                    break;
                                case "TableRow":
                                    strContextTag = "TR";
                                    break;
                                case "Table":
                                    strContextTag = "TABLE";
                                    break;
                            }
                        }


                        strContext = strElem.substring(nContextPosStart + 1, nContextPosMiddle);
                        strElem = strElem.substring(0, nContextPosStart);

                        var objContext = GetElementByIDPinAndTag(strContext, strContextTag);

                        if (objContext != null && objContext != undefined)
                        {
                            objForm = new Object();
                            objForm.elements = new Array();
                            var arrTags = objContext.getElementsByTagName("input");

                            for (var i = 0; i < arrTags.length; i++)
                            {
                                objForm.elements[objForm.elements.length] = arrTags[i];
                            }

                            arrTags = objContext.getElementsByTagName("select");

                            for (var i = 0; i < arrTags.length; i++)
                            {
                                objForm.elements[objForm.elements.length] = arrTags[i];
                            }
                        }
                    }
                    else
                    {
                        strContext = null;
                        objForm = document.getElementById("WorkflowForm");
                    }

                    for (var i = 0; i < objForm.elements.length; i++)
                    {
                        if (objForm.elements[i].getAttribute("Description") == strElem && objForm.elements[i].getAttribute("BaseName") != undefined && objForm.elements[i].getAttribute("BaseName").indexOf(":DataItemIndex:") == -1)
                        {
                            if (objForm.elements[i].tagName == "SELECT")
                            {
                                // Commented on 2008/03/07 to handle empty list boxes
                                //if( objForm.elements[i].selectedIndex > -1 && objForm.elements[i].options[objForm.elements[i].selectedIndex].value != "" )
                                //{
                                if (bUseXml)
                                {
                                    strValue += WrapIntoDataItem(objForm.elements[i].getAttribute("IDPin"));
                                }
                                else if (bUseArray)
                                {
                                    arr[arr.length] = objForm.elements[i].getAttribute("IDPin");
                                }
                                else
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    strValue += objForm.elements[i].getAttribute("IDPin");
                                }
                                //}
                            }
                            else if (objForm.elements[i].tagName == "INPUT" && objForm.elements[i].type == "radio" && objForm.elements[i].checked)
                            {
                                if (bUseXml)
                                {
                                    strValue += WrapIntoDataItem(objForm.elements[i].getAttribute("IDPin"));
                                }
                                else if (bUseArray)
                                {
                                    arr[arr.length] = objForm.elements[i].getAttribute("IDPin");
                                }
                                else
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    strValue += objForm.elements[i].getAttribute("IDPin");
                                }
                            }
                            else //if( objForm.elements[i].value != "" ) // Commented on 2008/06/03 to handle empty text boxes
                            {
                                if (bUseXml)
                                {
                                    strValue += WrapIntoDataItem(objForm.elements[i].getAttribute("IDPin"));
                                }
                                else if (bUseArray)
                                {
                                    arr[arr.length] = objForm.elements[i].getAttribute("IDPin");
                                }
                                else
                                {
                                    if (strValue != "")
                                        strValue += ",";

                                    strValue += objForm.elements[i].getAttribute("IDPin");
                                }
                            }
                        }
                    }

                    objArr = document.getElementsByTagName("TABLE");

                    for (var i = 0; i < objArr.length; i++)
                    {
                        if (objArr[i].getAttribute("Description") == strElem && objArr[i].getAttribute("BaseName") != undefined && objArr[i].getAttribute("BaseName").indexOf(":DataItemIndex:") == -1)
                        {
                            if (strValue != "")
                                strValue += ",";

                            strValue += objArr[i].getAttribute("IDPin");
                        }
                    }

                    if (strValue != "")
                        str = str.replace("&" + strRawViewVariable + "&", strValue);
                }
            }
        }
        while (nPosStart > -1)
    }
    nPosStart = -1;
    nOffset = 0;

    do
    {
        nPosStart = str.indexOf("*", nPosStart + 1);
        nPosEnd = str.indexOf("*", nPosStart + 1);

        if (nPosStart > -1 && nPosEnd > -1)
        {
            strValue = "";
            strElem = str.substring(nPosStart + 1, nPosEnd);

            for (var i = 0; i < objForm.elements.length; i++)
            {
                if (objForm.elements[i].getAttribute("Description") == strElem && objForm.elements[i].getAttribute("BaseName") != undefined && objForm.elements[i].getAttribute("BaseName").indexOf(":DataItemIndex:") == -1)
                {
                    if (objForm.elements[i].tagName == "SELECT")
                    {
                        if (objForm.elements[i].selectedIndex > -1 && objForm.elements[i].options[objForm.elements[i].selectedIndex].value != "")
                        {
                            if (strValue != "")
                                strValue += ",";

                            strValue += objForm.elements[i].options[objForm.elements[i].selectedIndex].value;
                        }
                    }
                    if (objForm.elements[i].tagName == "TEXTAREA")
                    {
                        if (strValue != "")
                            strValue += ",";

                        strValue += objElement.getAttribute("Selection");
                    }
                    else if (objForm.elements[i].value != "")
                    {
                        if (strValue != "")
                            strValue += ",";

                        strValue += objForm.elements[i].IDPin;
                    }
                }
            }

            // Only overwrite if found
            if (strValue != "")
                strUrl = strUrl.replace("*" + strElem + "*", strValue);
        }
    }
    while (nPosStart > -1)

    /*
    nPosStart = -1;
	
	do
    {
    nPosStart = str.indexOf( ".", nPosStart + 1 );
    nPosEnd = str.indexOf( ".", nPosStart + 1 );
		
		if( nPosStart > -1 && nPosEnd > -1  )
    {
    strValue = "";
    strElem = str.substring( nPosStart + 1, nPosEnd );

			for( var i = 0; i < objForm.elements.length; i++ )
    {
    if( objForm.elements[i].getAttribute( "Description" ) == strElem && objForm.elements[i].getAttribute( "BaseName" ) != undefined && objForm.elements[i].getAttribute( "BaseName" ).indexOf( ":DataItemIndex:" ) == -1  )
    {	
    if( objForm.elements[i].tagName == "SELECT" )
    {
    if( objForm.elements[i].selectedIndex > -1 && objForm.elements[i].options[objForm.elements[i].selectedIndex].value != "" )
    {
    if( strValue != "" )
    strValue += ",";
						
    strValue += objForm.elements[i].options[objForm.elements[i].selectedIndex].value;
    }
    }
    if( objForm.elements[i].tagName == "TEXTAREA" )
    {
    if( strValue != "" )
    strValue += ",";
						
    strValue += objElement.getAttribute( "Selection" );
    }
    else if( objForm.elements[i].value != "" )
    {
    if( strValue != "" )
    strValue += ",";
						
    strValue += objForm.elements[i].IDPin;
    }
    }
    }
			
    // Only overwrite if found
    if( strValue != "" )
    strUrl = strUrl.replace( "." + strElem + ".", strValue );
    }
    }
    while( nPosStart > -1 )
    */

    if (bUseArray)
        return arr;
    else
        return str;
}

function ScrollTo(nX, nY)
{
    window.scrollTo(nX, nY);
}

function AddParentPin(strPinName, strPinValue)
{
    strPinValue = PopulateViewVariables(strPinValue);

    if (top.g_objFloatingWindowSrc != null)
    {
        if (!top.g_objFloatingWindowSrc.PopulatePin(strPinName, strPinValue))
            top.g_objFloatingWindowSrc.AddPin("Dynamic View Variables:" + strPinName, strPinValue, false, false, strPinName, false);
    }
    else if (window.opener != undefined && window.opener.window != undefined)
    {
        if (!window.opener.PopulatePin(strPinName, strPinValue))
            window.opener.AddPin("Dynamic View Variables:" + strPinName, strPinValue, false, false, strPinName, false);
    }
    else if (parent != null)
        parent.AddPin("Dynamic View Variables:" + strPinName, strPinValue, false, false, strPinName, false);
}

function SortDataTable(strDataTable, strColumnIndex, strIsNumeric)
{
    document.forms[0].style.cursor = "wait";

    setTimeout("DoSortDataTable( '" + strDataTable + "', '" + strColumnIndex + "', '" + strIsNumeric + "' );", 150);
}

function DoSortDataTable(strDataTable, strColumnIndex, strIsNumeric)
{
    document.forms[0].style.cursor = "wait";

    var bIsNumeric = false;

    if (strIsNumeric == "True")
        bIsNumeric = true;

    var iRowInsertRow, iRowWalkRow, current, insert, tbl, t, fReverse, iColumn;

    fReverse = false;
    tbl = document.getElementById(strDataTable);

    if (tbl == undefined)
    {
        window.status = "Done";
        document.forms[0].style.cursor = "default";
        return;
    }

    t = tbl.tBodies(0);

    iColumn = parseInt(strColumnIndex) - 1;

    if (isNaN(iColumn))
    {
        window.status = "Done";
        document.forms[0].style.cursor = "default";
        return;
    }

    if (g_arrSortDataTableReverse[iColumn] == undefined)
        g_arrSortDataTableReverse[iColumn] = true;
    if (!g_arrSortDataTableReverse[iColumn])
        g_arrSortDataTableReverse[iColumn] = true;
    else
        g_arrSortDataTableReverse[iColumn] = false;

    fReverse = g_arrSortDataTableReverse[iColumn];
    var prevInsert = null;
    var bMoved = false;

    for (iRowInsert = 1; iRowInsert < t.rows.length; iRowInsert++)
    {
        window.status = "Sorting : " + parseInt(((iRowInsert / t.rows.length) * 100)) + " %";

        insert = GetInnerText(t.children[iRowInsert].children[iColumn]);

        if (bIsNumeric && insert != "" && !isNaN(insert.replace(/$/g, "").replace(/,/g, "")))
        {
            insert = eval(insert.replace(/$/g, "").replace(/,/g, ""));
        }
        else
        {
            insert = insert.toLowerCase();
        }

        if (prevInsert != null && prevInsert == insert)
            continue;

        for (iRowWalk = 1; iRowWalk <= iRowInsert; iRowWalk++)
        {
            current = GetInnerText(t.children[iRowWalk].children[iColumn]);


            //  If the value is not a number, we sort normally, else we evaluate	
            //  the value to get a numeric representation
            //
            if (bIsNumeric && current != "" && !isNaN(current.replace(/$/g, "").replace(/,/g, "")))
            {
                current = eval(current.replace(/$/g, "").replace(/,/g, ""));
            }
            else
            {
                current = current.toLowerCase();
            }


            if (((!fReverse && insert < current)
                 || (fReverse && insert > current))
                 && (iRowInsert != iRowWalk))
            {
                eRowInsert = t.children[iRowInsert];
                eRowWalk = t.children[iRowWalk];
                t.insertBefore(eRowInsert, eRowWalk);

                if (iRowWalk == iRowInsert)
                    prevInsert = current;

                bMoved = true;
                break;
            }
        }

        if (!bMoved)
            prevInsert = insert;

        bMoved = false;
    }

    window.status = "Done";
    document.forms[0].style.cursor = "default";
}

function ToggleVisibility(strObjectID)
{
    var objTarget = GetElementByObjectID(strObjectID);

    if (objTarget != undefined)
    {
        if (objTarget.style.display == "" || objTarget.style.display == "block" || objTarget.style.display == "inline-block")
            objTarget.style.display = "none";
        else
            objTarget.style.display = "inline-block";

        ResizePage();
    }
}

function ShowElement(strObjectID, strObjectIDPin, strAnimation, strTargetNotUnique, objEvent)
{
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, null, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                
                var objTmp = GetElementByObjectID(strObjectID);

                if (objTmp != null)
                {
                    objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                    if (objArr == undefined || objArr == null || objArr.length == 0)
                        objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                }
                /*
                objArr = GetElementsByObjectID(strObjectID);

                if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }
            
            if (objTarget != null && objArr != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                    objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*
                objTarget = GetElementsByObjectID(strObjectID);

                if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }
        
        if (objTarget != undefined)
        {
            var arrObj = null;

            for (var i = 0; i < objTarget.length; i++)
            {
                if (objTarget[i].tagName != "TR" && strAnimation != null && strAnimation != '' && strAnimation != undefined)
                {
                    ResizeElementWithAnimation(objTarget[i], parseInt(strAnimation), 0, objTarget[i].getAttribute("HiddenHeight"));
                }
                else
                {
                    objTarget[i].parentNode.style.height = objTarget[i].style.height;
                }

                if (navigator.appName == "Microsoft Internet Explorer")
                {
                    if (objTarget[i].tagName == "TABLE")
                        objTarget[i].style.display = "block";
                    else
                        objTarget[i].style.display = "inline-block";
                }
                else
                {
                    if (objTarget[i].tagName == "TABLE")
                        objTarget[i].style.display = "table";
                    else if (objTarget[i].tagName == "TR")
                        objTarget[i].style.display = "table-row";
                    else
                        objTarget[i].style.display = "inline-block";
                }

                arrObj = objTarget[i].getElementsByTagName("OBJECT");
                
                if (arrObj != null)
                {
                    for (var j = 0; j < arrObj.length; j++)
                    {
                        
                        arrObj[j].style.display = "inline-block";
                    }
                }
            }
        }

        ResizePage();
    }
    catch (e)
    {
        throw new Error(0, "ShowElement() - " + e.message);
    }
}

function HideElement(strObjectID, strObjectIDPin, strAnimation, strTargetNotUnique, objEvent)
{
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, null, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                if (objTmp != null)
                {
                    objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                    if (objArr == undefined || objArr == null || objArr.length == 0)
                        objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                }

                /*
                objArr = GetElementsByObjectID(strObjectID);

                if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }

            if (objTarget != null && objArr != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, null, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                    objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*
                objTarget = GetElementsByObjectID(strObjectID);

                if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }

        if (objTarget != undefined)
        {
            for (var i = 0; i < objTarget.length; i++)
            {
                if (objTarget[i].tagName != "TR" && strAnimation != null && strAnimation != '' && strAnimation != undefined)
                {
                    ResizeElementWithAnimation(objTarget[i], parseInt(strAnimation), objTarget[i].offsetHeight, 0);
                }
                else
                {
                    objTarget[i].setAttribute("HiddenHeight", objTarget[i].offsetHeight);
                    objTarget[i].style.display = "none";
                }
            }
        }

        ResizePage();
    }
    catch (e)
    {
        throw new Error(0, "HideElement() - " + e.message);
    }
}

function ResizeElementWithAnimation(objElement, nAnimation, nStartHeight, nEndHeight)
{
    var elem = objElement;

    if (elem.tagName == "TABLE")
        elem = elem.parentNode;

    elem.style.overflow = "hidden";

    if (elem.getAttribute("ResizeElementWithAnimationID"))
        window.clearInterval(elem.getAttribute("ResizeElementWithAnimationID"));

    var nSteps = 0;
    var xMaxSteps = nAnimation / 30;

    var nAnimationID = window.setInterval(
	    function()
	    {
	        if (nStartHeight > nEndHeight)
	            elem.style.height = (nStartHeight - Math.ceil(nEndHeight + (Math.pow(((1 / xMaxSteps) * nSteps), 0.5) * nStartHeight - nEndHeight))) + "px";
	        else
	            elem.style.height = Math.ceil(nStartHeight + (Math.pow(((1 / xMaxSteps) * nSteps), 0.5) * nEndHeight - nStartHeight)) + "px";

	        nSteps++;
	        if (nSteps > xMaxSteps)
	        {
	            window.clearInterval(elem.getAttribute("ResizeElementWithAnimationID"));
	            elem.firstChild.setAttribute("HiddenHeight", nStartHeight);

	            if (nEndHeight != 0)
	                elem.style.height = nEndHeight + "px";
	            else
	                elem.firstChild.style.display = "none";

	            ResizePage();
	        }
	    }
	    , 30
    );

    elem.setAttribute("ResizeElementWithAnimationID", nAnimationID);
}

function MoveFloatingElement(e, strObjectID, strObjectIDPin, strTargetNotUnique, objEvent)
{
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, null, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objArr == undefined || objArr == null || objArr.length == 0)
                    objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*
                objArr = GetElementsByObjectID(strObjectID);

                if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }

            if (objTarget != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                    objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*
                objTarget = GetElementsByObjectID(strObjectID);

                if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }

        if (objTarget != undefined)
        {
            var arrObj = null;

            for (var i = 0; i < objTarget.length; i++)
            {
                objTarget[i].style.display = "block";
                objTarget[i].style.zIndex = 255;
                objTarget[i].style.position = "absolute";

                if (navigator.appName == "Microsoft Internet Explorer")
                {
                    /*var pos = GetTopPosition();
                    if ((pos + event.y + objTarget[i].clientHeight) > document.body.clientHeight)
                    objTarget[i].style.top = pos + event.y - ((pos + event.y + objTarget[i].clientHeight) - document.body.clientHeight);
                    else
                    objTarget[i].style.top = pos + event.y;*/
                    if ((event.y + objTarget[i].clientHeight) > document.body.clientHeight)
                        objTarget[i].style.top = event.y - ((event.y + objTarget[i].clientHeight) - document.body.clientHeight);
                    else
                        objTarget[i].style.top = event.y;

                    if ((event.x + objTarget[i].clientWidth) > document.body.clientWidth)
                        objTarget[i].style.left = event.x - ((event.x + objTarget[i].clientWidth) - document.body.clientWidth);
                    else
                        objTarget[i].style.left = event.x;
                }
                else
                {
                    objTarget[i].style.top = e.clientY;
                    objTarget[i].style.left = e.clientX;
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "MoveFloatingElement() - " + e.message);
    }
}

function HistoryBack()
{
    history.go(-1);
}

function GetTopPosition()
{
    var w = window;
    var y = 0;

    try
    {
        while (w != null && w.frameElement != null)
        {


            if (w.frameElement != null)
            {
                y += w.frameElement.offsetParent.offsetTop;

                if (w.frameElement.parentNode.tagName == "TD")
                    y += w.frameElement.parentNode.parentNode.parentNode.parentNode.offsetParent.offsetTop;
            }
            w = w.parent;
        }
    }
    catch (e)
    {
    }

    return y;
}

function ShowCalenderWindow(e, strElementID, strQueryString, strWidth, strHeight, strDisableHistoricalDates, strMinimumDate, strDateRange, strDisableClearButton)
{
    try
    {
        var objElements = document.getElementsByName(strElementID);

        if (objElements.length > 0)
        {
            var objElement = objElements[0];

            var objTop = GetTopLevelWindow();

            if (objElement.value != "")
            {
                if (strQueryString != "")
                    strQueryString += "&";

                strQueryString += "InitialDate=" + objElement.value;
            }

            if (objTop.g_objCalendarWindow == null)
            {
                objTop.g_objCalendarWindow = objTop.document.createElement("IFRAME");
                objTop.g_objCalendarWindow.setAttribute("frameborder", "0");
                objTop.g_objCalendarWindow.setAttribute("border", "0");
                objTop.g_objCalendarWindow.setAttribute("class", "floating-window");
                objTop.g_objCalendarWindow.frameBorder = "0";

                if (strWidth != undefined)
                    objTop.g_objCalendarWindow.style.width = strWidth;
                else
                    objTop.g_objCalendarWindow.style.width = "160";

                if (strHeight != undefined)
                    objTop.g_objCalendarWindow.style.height = strHeight;
                else
                    objTop.g_objCalendarWindow.style.height = "160";

                objTop.document.body.appendChild(objTop.g_objCalendarWindow);

                objTop.g_objCalendarWindow.style.zIndex = "255";
                objTop.g_objCalendarWindow.style.position = "absolute";

                if (objElement.getAttribute("MinimumDate") != null)
                    strQueryString += "&MinDate=" + objElement.getAttribute("MinimumDate");

                if (objElement.getAttribute("DateRange") != null)
                    strQueryString += "&DateRange=" + objElement.getAttribute("DateRange");

                objTop.g_objCalendarWindow.src = "/FloatingWindow_Calendar.aspx?SourceElementID=" + GetDOMLocation() + "." + escape(strElementID) + "&Floating=True&" + strQueryString;
            }
            else
            {
                if (objElement.getAttribute("MinimumDate") != null)
                    strMinimumDate = objElement.getAttribute("MinimumDate");
                
                if (objElement.getAttribute("DateRange") != null)
                    strDateRange = objElement.getAttribute("DateRange");

                if (strWidth != undefined)
                    objTop.g_objCalendarWindow.style.width = strWidth;
                else
                    objTop.g_objCalendarWindow.style.width = "160";

                if (strHeight != undefined)
                    objTop.g_objCalendarWindow.style.height = strHeight;
                else
                    objTop.g_objCalendarWindow.style.height = "160";

                objTop.g_objCalendarWindow.contentWindow.SetCalendar(GetDOMLocation() + "." + strElementID, objElement.value, strQueryString, strDisableHistoricalDates, strMinimumDate, strDateRange, strDisableClearButton);
            }

            var pos = GetTopPosition();

            if (navigator.appName == "Microsoft Internet Explorer")
            {
                if ((pos + event.y + objTop.g_objCalendarWindow.clientHeight) > objTop.document.body.clientHeight)
                    objTop.g_objCalendarWindow.style.top = pos + event.y - ((pos + event.y + objTop.g_objCalendarWindow.clientHeight) - objTop.document.body.clientHeight);
                else
                    objTop.g_objCalendarWindow.style.top = pos + event.y;

                if ((event.x + objTop.g_objCalendarWindow.clientWidth) > objTop.document.body.clientWidth)
                    objTop.g_objCalendarWindow.style.left = event.x - ((event.x + objTop.g_objCalendarWindow.clientWidth) - objTop.document.body.clientWidth);
                else
                    objTop.g_objCalendarWindow.style.left = event.x;
            }
            else
            {
                if ((pos + e.clientY + objTop.g_objCalendarWindow.clientHeight) > objTop.document.body.clientHeight)
                    objTop.g_objCalendarWindow.style.top = pos + e.clientY - ((pos + e.clientY + objTop.g_objCalendarWindow.clientHeight) - objTop.document.body.clientHeight);
                else
                    objTop.g_objCalendarWindow.style.top = pos + e.clientY;

                if ((e.clientX + objTop.g_objCalendarWindow.clientWidth) > objTop.document.body.clientWidth)
                    objTop.g_objCalendarWindow.style.left = e.clientX - ((e.clientX + objTop.g_objCalendarWindow.clientWidth) - objTop.document.body.clientWidth);
                else
                    objTop.g_objCalendarWindow.style.left = e.clientX;
            }


        }
    }
    catch (e)
    {
        throw new Error(0, "ShowCalenderWindow() - " + e.message);
    }
}

function CloseCalendarWindow()
{
    var objTop = GetTopLevelWindow();

    if (objTop != null && objTop.g_objCalendarWindow != null)
        objTop.g_objCalendarWindow.style.height = 0;
}

function Calendar_OnChangeDay(strDate, strObjectPath)
{
    try
    {
        /*
        var strPath = strControl.substring(0, strControl.lastIndexOf("."));
        var strID = strControl.substring(strControl.lastIndexOf(".") + 1);
        var objElem = null;

        var arrPath = strPath.split('.');
        var objControlWindow = window;

        for (var i = 0; i < arrPath.length; i++)
        {
            objControlWindow = objControlWindow.frames(arrPath[i]);
        }
        objElem = objControlWindow.document.getElementsByName(strID)[0];*/

        var strPath = strObjectPath.substring(0, strObjectPath.lastIndexOf("."));
        var pos = strObjectPath.lastIndexOf(".") + 1;

        var strID = "";
        
        if (strObjectPath.indexOf("DataTable:") > -1) {
            var strTmp = strObjectPath;
            
            while (strTmp.indexOf("DataTable:") > -1) {
                if (strID != "")
                    strID = strTmp.substring(strTmp.lastIndexOf(".") + 1) + "." + strID;
                else
                    strID = strTmp.substring(strTmp.lastIndexOf(".") + 1);

                strTmp = strTmp.substring(0, strTmp.lastIndexOf("."));
            }
        } else {
            strID = strObjectPath.substring(strObjectPath.lastIndexOf(".") + 1);
        }
        
        var objElem = null;

        var objTop = GetTopLevelWindow();
        var objWin = objTop.EvalPath(strPath);

        objElem = objWin.document.getElementsByName(strID)[0];

        objElem.value = strDate;

        // this is need to execute any client side tasks with On Day Change event
        objElem.onchange();
    }
    catch (e)
    {
        //alert(e.message);
    }
}

function SetCalendarDateRange(objElement, strObjectID, strObjectIDPin, strTargetNotUnique, objEvent, strMinimumDate, strDateRange)
{
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objArr == undefined || objArr == null || objArr.length == 0)
                    objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*objArr = GetElementsByObjectID(strObjectID);

	            if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }

            if (objTarget != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                    objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                /*
                objTarget = GetElementsByObjectID(strObjectID);

	            if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }

        if (objTarget != undefined)
        {
            for (var i = 0; i < objTarget.length; i++)
            {
                if (objEvent != null && IsEventVariable(strMinimumDate))
                {
                    strMinimumDate = objEvent.GetParameter(RemoveEventVariableDelimiters(strMinimumDate));
                }
                else
                {
                    strMinimumDate = GetVariable(strMinimumDate, objEvent, objTarget[i]);
                }

                if (objEvent != null && IsEventVariable(strDateRange))
                {
                    strDateRange = objEvent.GetParameter(RemoveEventVariableDelimiters(strDateRange));
                }
                else
                {
                    strDateRange = GetVariable(strDateRange, objEvent, objTarget[i]);
                }

                if (strMinimumDate != "" && strDateRange != "")
                {
                    objTarget[i].setAttribute("DateRange", strDateRange);
                    objTarget[i].setAttribute("MinimumDate", strMinimumDate);

                    var dMinimumDate = new Date(Date.parse(strMinimumDate));
                    var dMaximumDate = new Date(Date.parse(strMinimumDate));
                    dMaximumDate.setDate(dMaximumDate.getDate() + parseInt(strDateRange) - 1);
                    var dTarget = new Date(Date.parse(objTarget[i].value));

                    if (dTarget > dMaximumDate || dTarget < dMinimumDate)
                    {
                        var str = "";

                        if (dMaximumDate.getMonth() + 1 < 10)
                            str += "0";

                        str += (dMaximumDate.getMonth() + 1);
                        str += "/";

                        if (dMaximumDate.getDate() < 10)
                            str += "0";

                        str += dMaximumDate.getDate();
                        str += "/";
                        str += dMaximumDate.getFullYear();

                        objTarget[i].value = str;
                    }
                }
                else if (strMinimumDate != "")
                {
                    objTarget[i].setAttribute("MinimumDate", strMinimumDate);

                    var dMinimumDate = new Date(Date.parse(strMinimumDate));

                    var dTarget = new Date(Date.parse(objTarget[i].value));

                    if (dTarget < dMinimumDate)
                    {
                        var str = "";

                        if (dMinimumDate.getMonth() + 1 < 10)
                            str += "0";

                        str += (dMinimumDate.getMonth() + 1);
                        str += "/";

                        if (dMinimumDate.getDate() < 10)
                            str += "0";

                        str += dMinimumDate.getDate();
                        str += "/";
                        str += dMinimumDate.getFullYear();

                        objTarget[i].value = str;
                    }
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "SetCalendarDateRange() - " + e.message);
    }
}

function ShowColorPicker(objElement, strTarget, evt)
{
    AddFunctionCallLog("ShowColorPicker");

    //var objColorPicker = document.getElementById( "ColorPicker_" + objElement.id );

    //if( objColorPicker != null )
    //{
    var objTarget = GetElementByBaseName(strTarget);
    var nColor = null;

    if (objTarget != null && objTarget.disabled != true && objTarget.readonly != true)
    {
        if (document.cookie.indexOf("SupportsFlash=True") > -1)
        {
            var objTop = GetTopLevelWindow();
            var strQueryString = "";

            if (objTarget.value != "")
            {
                strQueryString = "&InitialColor=" + objTarget.value;
            }

            if (objTop.g_objColorPickerWindow == null)
            {
                objTop.g_objColorPickerWindow = objTop.document.createElement("IFRAME");
                objTop.g_objColorPickerWindow.setAttribute("frameborder", "0");
                objTop.g_objColorPickerWindow.setAttribute("border", "0");
                objTop.g_objColorPickerWindow.setAttribute("class", "floating-window");
                objTop.g_objColorPickerWindow.frameBorder = "0";
                objTop.g_objColorPickerWindow.style.width = "235";
                objTop.g_objColorPickerWindow.style.height = "214";

                objTop.document.body.appendChild(objTop.g_objColorPickerWindow);

                objTop.g_objColorPickerWindow.style.zIndex = "255";
                objTop.g_objColorPickerWindow.style.position = "absolute";

                objTop.g_objColorPickerWindow.src = "/FloatingWindow_ColorPicker.aspx?ObjectPath=" + GetDOMLocation() + "." + escape(strTarget) + strQueryString;
            }
            else
            {
                objTop.g_objColorPickerWindow.contentWindow.SetColorPicker(GetDOMLocation() + "." + strTarget, objTarget.value);
            }

            var pos = GetTopPosition();

            if (navigator.appName == "Microsoft Internet Explorer")
            {
                if ((pos + event.y + objTop.g_objColorPickerWindow.clientHeight) > objTop.document.body.clientHeight)
                    objTop.g_objColorPickerWindow.style.top = pos + event.y - ((pos + event.y + objTop.g_objColorPickerWindow.clientHeight) - objTop.document.body.clientHeight);
                else
                    objTop.g_objColorPickerWindow.style.top = pos + event.y;

                if ((event.x + objTop.g_objColorPickerWindow.clientWidth) > objTop.document.body.clientWidth)
                    objTop.g_objColorPickerWindow.style.left = event.x - ((event.x + objTop.g_objColorPickerWindow.clientWidth) - objTop.document.body.clientWidth);
                else
                    objTop.g_objColorPickerWindow.style.left = event.x;
            }
            else
            {
                if ((pos + evt.clientY + objTop.g_objColorPickerWindow.clientHeight) > objTop.document.body.clientHeight)
                    objTop.g_objColorPickerWindow.style.top = pos + evt.clientY - ((pos + evt.clientY + objTop.g_objColorPickerWindow.clientHeight) - objTop.document.body.clientHeight);
                else
                    objTop.g_objColorPickerWindow.style.top = pos + evt.clientY;

                if ((evt.clientX + objTop.g_objColorPickerWindow.clientWidth) > objTop.document.body.clientWidth)
                    objTop.g_objColorPickerWindow.style.left = evt.clientX - ((evt.clientX + objTop.g_objColorPickerWindow.clientWidth) - objTop.document.body.clientWidth);
                else
                    objTop.g_objColorPickerWindow.style.left = evt.clientX;
            }
        }
        else
        {
            /*nColor = objColorPicker.ChooseColorDlg(objTarget.value);

		        var strColor = nColor.toString(16);
            if (strColor.length < 6)
            {
            var sTempString = "000000".substring(0, 6 - strColor.length);
            strColor = sTempString.concat(strColor);
            }

		        objTarget.value = strColor.toUpperCase();*/
        }
    }
    //}

    RemoveFunctionCallLog();
}

function ColorPicker_OnChangeColor(strObjectPath, strColor)
{
    AddFunctionCallLog("ColorPicker_OnChangeColor");
    try
    {

        var strPath = strObjectPath.substring(0, strObjectPath.lastIndexOf("."));
        var strID = strObjectPath.substring(strObjectPath.lastIndexOf(".") + 1) + "TextPin";
        var objElem = null;

        var objTop = GetTopLevelWindow();
        var objWin = objTop.EvalPath(strPath);

        objElem = objWin.document.getElementsByName(strID)[0];

        objElem.value = strColor;

        objElem.onchange();
    }
    catch (e)
    {
        throw new Error(0, "ColorPicker_OnChangeColor() - " + e.message);
    }
    RemoveFunctionCallLog();
}

function EvalPath(strPath)
{
    AddFunctionCallLog("EvalPath");
    var objWin = null;

    if (strPath == null || strPath == "")
    {
        objWin = window;
    }
    else
    {
        var arrPath = strPath.split('.');
        for (var i = 0; i < arrPath.length; i++)
        {
            if (objWin == null)
                objWin = document.getElementById(arrPath[i]).contentWindow;
            else {
                if (objWin.document != null && objWin.document != undefined && objWin.document.getElementById(arrPath[i]) != null)
                    objWin = objWin.document.getElementById(arrPath[i]).contentWindow;
            }
            
        }
    }

    RemoveFunctionCallLog();
    return objWin;
}

function ChangeValue(objElement, objEvent, strName, strValue, strObjectID, strCompareName, strCompareValue, strObjectIDPin, strTargetNotUnique)
{
    AddFunctionCallLog("ChangeValue");
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                if (objTmp != null)
                {
                    objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                    if (objArr == undefined || objArr == null || objArr.length == 0)
                        objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                }

                /*
                objArr = GetElementsByObjectID(strObjectID);

	            if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }

            if (objTarget != null && objArr != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                if (objTmp != null)
                {
                    objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                    if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                        objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                }

                /*objTarget = GetElementsByObjectID(strObjectID);

	            if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }
        else if (objElement != null && objElement != undefined && objElement != "")
        {
            objTarget = new Array();
            objTarget[objTarget.length] = objElement;
        }
        
        if (objTarget != undefined && objTarget != null)
        {
            var bTargetNotFoundInDOM = false;
            // This is here to allow the search for a target that may be in a flash control
            if (objTarget.length == 0)
            {
                objTarget = document.getElementsByTagName("OBJECT");
                bTargetNotFoundInDOM = true;
            }

            var objArrValue = new Array();

            if (objEvent != null && IsEventVariable(strValue))
            {
                objArr = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strValue));

                if (objArr != null)
                {
                    if (objArrObjectIDPin != null && !bTargetNotFoundInDOM)
                    {
                        for (var i = 0; i < objTarget.length; i++)
                        {
                            for (var j = 0; j < objArrObjectIDPin.length; j++)
                            {
                                if (objTarget[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                    objArrValue[objArrValue.length] = objArr.GetValue(j);
                            }
                        }
                    }
                    else
                    {
                        for (var i = 0; i < objArr.length; i++)
                            objArrValue[objArrValue.length] = objArr.GetValue(i);
                    }
                }
            }
            else
            {
                strValue = GetVariable(strValue, objEvent, objElement);

                for (var i = 0; i < objTarget.length; i++)
                    objArrValue[objArrValue.length] = strValue;
            }

            strName = GetVariable(strName, objEvent, objElement);

            strCompareName = GetVariable(strCompareName, objEvent, objElement);
            strCompareValue = GetVariable(strCompareValue, objEvent, objElement);
            var objElement = null;

            for (var i = 0; i < objTarget.length; i++)
            {
                objElement = objTarget[i];

                if (navigator.appName == "Microsoft Internet Explorer" && window.event != null && window.event.srcElement != null && window.event.srcElement.getAttribute("HasFocus") && objElement.tagName != "SELECT")
                {
                    if (objElement.tagName == "INPUT" && objArrValue != null && objArrValue.length > i && objElement.value != objArrValue[i])
                        objElement.value = objArrValue[i];
                }
                else if (objElement.tagName == "INPUT")
                {
                    if (objElement.type == "radio")
                    {
                        var objArrElements = document.getElementsByName(objElement.getAttribute("name"));

                        for (var ri = 0; ri < objArrElements.length; ri++)
                        {
                            if (objArrValue != null && objArrValue.length > i && objArrElements[ri].value == objArrValue[i])
                                objArrElements[ri].checked = true;
                            else
                                objArrElements[ri].checked = false;
                        }
                    }
                    else if (objArrValue != null && objArrValue.length > i && objElement.value != objArrValue[i])
                    {
                        if (objElement.type == "checkbox")
                        {
                            if (objArrValue[i] == "False")
                                objElement.checked = false;
                            else if (objArrValue[i] == "True")
                                objElement.checked = true;
                            else
                                objElement.checked = objArrValue[i];
                        }
                        else
                        {
                            objElement.value = objArrValue[i];
                        }
                    }
                }
                else if (objElement.tagName == "TEXTAREA" && objArrValue != null && objArrValue.length > i && objElement.value != objArrValue[i])
                {
                    objElement.value = objArrValue[i];
                }
                else if (objElement.tagName == "SELECT") 
                {
               
                    if (strCompareValue != "")
                    {
                        var objOption = null;
                        for (var i = 0; i < objElement.options.length; i++)
                        {
                            if (objElement.options[i].value == strCompareValue)
                            {
                                if (strName != "")
                                {
                                    // This is done due to an IE bug, we couldn't use objElement.options[i].text
                                    objOption = document.createElement("OPTION");
                                    objOption.value = objElement.options[i].value;
                                    objOption.selected = objElement.options[i].selected;
                                    objOption.text = strName;
                                    objElement.remove(i);
                                    objElement.add(objOption, i);
                                    objElement.options[i].title = strName;
                                }

                                if (objArrValue != null && objArrValue.length > i && objArrValue[i] != "")
                                    objElement.options[i].value = objArrValue[i];
                            }
                        }
                    }
                    else if (strCompareName != "")
                    {
                        for (var i = 0; i < objElement.options.length; i++)
                        {
                            if (objElement.options[i].text == strCompareName)
                            {
                                if (strName != "")
                                    objElement.options[i].text = strName;

                                if (objArrValue != null && objArrValue.length > i && objArrValue[i] != "")
                                    objElement.options[i].value = objArrValue[i];
                            }
                        }
                    }
                    else
                    {
                        var bFound = false;
                        objElement.selectedIndex = -1;
                        for (var j = 0; j < objElement.options.length; j++)
                        {
                            if (objArrValue != null && objArrValue.length > i && objElement.options[j].value == objArrValue[i])
                            {
                                objElement.options[j].selected = true;
                            }
                            else if (objElement.options[j].text == strName)
                            {
                                objElement.options[j].selected = true;
                            }
                            else
                            {
                                objElement.options[j].selected = false;
                            }
                        }
                    }
                }
                else if (objElement.tagName == "IMG" && objArrValue != null && objArrValue.length > i && objArrValue[i] != "")
                {
                    objElement.onerror = OnErrorUrl(objElement);

                    if (objElement.getAttribute("ResizeWidth") != null || objElement.getAttribute("ResizeHeight") != null)
                        objElement.src = "/ResizeImage.aspx?ImagePath=" + escape(objArrValue[i]) + "&Width=" + objElement.getAttribute("ResizeWidth") + "&Height=" + objElement.getAttribute("ResizeHeight");
                    else
                        objElement.src = objArrValue[i];
                }
                else if (objElement.tagName == 'OBJECT')
                {
                    if (objElement.getAttribute("type") == "FlashCollapsableDataTableElement")
                    {
                        if (objArrObjectIDPin != null)
                            objElement.ChangeValue(strObjectID, objArrObjectIDPin.GetValue(i), objArrValue[i]);
                        else
                            objElement.ChangeValue(strObjectID, null, objArrValue[i]);
                    }
                    else if (objElement.getAttribute("ObjectType") == "HtmlEditor" && objArrValue != null && objArrValue.length > i)
                    {
                        objElement.Html = objArrValue[i];
                    }
                }
                else if (objElement.tagName == 'DIV' && objElement.getAttribute("Type") == "CollapsableDataTable")
                {
                    var strSelectedID = objElement.getAttribute("SelectedID");

                    if (strSelectedID != null && strSelectedID != obj.parentElement.id)
                    {
                        objElement.removeAttribute("SelectedID")
                        var objSel = document.getElementById(strSelectedID);
                        if (objSel != null)
                        {
                            for (var i = 0; i < objSel.parentElement.children.length; i++)
                            {
                                if (objSel.parentElement.children[i].id == objSel.id)
                                {
                                    objSel.parentElement.children[i].style.removeAttribute("backgroundColor");
                                    objSel.parentElement.children[i + 1].firstChild.style.removeAttribute("backgroundColor");
                                    break;
                                }
                            }
                        }
                    }
                }
                else if (objArrValue != null && objArrValue.length > i && objElement.innerHTML != objArrValue[i])
                {
                    if (objElement.childNodes.length > 0 && objElement.childNodes[0].tagName == "NOBR")
                    {
                        objElement.childNodes[0].innerHTML = objArrValue[i];
                        objElement.childNodes[0].title = objArrValue[i];
                    }
                    else
                    {
                        // Commented out the '&' because it should be escaped as '&&' then this wouldn't have been needed.
                        objElement.innerHTML = objArrValue[i]; //.replace(/&/g, "&amp;" );
                    }
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "ChangeValue() - " + e.message);
    }
    RemoveFunctionCallLog();
}

function FileUpload_OnFormSubmit(strBaseName, awFilenames, awInternalFilenames, awFileExtensions, awFileSizes) {
    
    for (var i = 0; i < awFilenames.Count; i++)
    {
        AddPin(strBaseName + i + ":File Name", awFilenames.GetItem(i), false);
    }

    for (var i = 0; i < awInternalFilenames.Count; i++)
    {
        AddPin(strBaseName + i + ":Internal File Name", awInternalFilenames.GetItem(i), false);
    }

    for (var i = 0; i < awFileExtensions.Count; i++)
    {
        AddPin(strBaseName + i + ":File Extension", awFileExtensions.GetItem(i), false);
    }

    for (var i = 0; i < awFileSizes.Count; i++)
    {
        AddPin(strBaseName + i + ":File Size", awFileSizes.GetItem(i), false);
    }

    FormSubmit(null, "False", strBaseName);
}

function FlexFileUpload_OnFormSubmit(strBaseName, arrFilenames, arrInternalFilenames, arrFileExtensions, arrFileSizes) {
    
    for (var i = 0; i < arrFilenames.length; i++)
    {
        AddPin(strBaseName + i + ":File Name", arrFilenames[i], false);
    }

    for (var i = 0; i < arrInternalFilenames.length; i++)
    {
        AddPin(strBaseName + i + ":Internal File Name", arrInternalFilenames[i], false);
    }

    for (var i = 0; i < arrFileExtensions.length; i++)
    {
        AddPin(strBaseName + i + ":File Extension", arrFileExtensions[i], false);
    }

    for (var i = 0; i < arrFileSizes.length; i++)
    {
        AddPin(strBaseName + i + ":File Size", arrFileSizes[i], false);
    }

    FormSubmit(null, "False", strBaseName);
}

function FileUploadCtl_Upload(objElem, strTarget, strBypassMinFileCheck)
{
    var objTarget = document.getElementById(strTarget);

    if (objTarget != null)
    {
        var returnValue = true;

        if (strBypassMinFileCheck != "True" && strBypassMinFileCheck != "False")
            strBypassMinFileCheck = "False";

        if (objTarget.type == "FlashFileUploadElement")
        {
            objTarget.ExternalUpload(strBypassMinFileCheck);

            return true;
        }
        else
        {
            returnValue = objTarget.Upload(strBypassMinFileCheck);

            for (var i = 0; i < objTarget.Filenames.Count; i++)
            {
                AddPin(objTarget.getAttribute("BaseName") + i + ":File Name", objTarget.Filenames.GetItem(i), false);
            }

            for (var i = 0; i < objTarget.InternalFilenames.Count; i++)
            {
                AddPin(objTarget.getAttribute("BaseName") + i + ":Internal File Name", objTarget.InternalFilenames.GetItem(i), false);
            }

            for (var i = 0; i < objTarget.FileExtensions.Count; i++)
            {
                AddPin(objTarget.getAttribute("BaseName") + i + ":File Extension", objTarget.FileExtensions.GetItem(i), false);
            }

            for (var i = 0; i < objTarget.FileSizes.Count; i++)
            {
                AddPin(objTarget.getAttribute("BaseName") + i + ":File Size", objTarget.FileSizes.GetItem(i), false);
            }

            return returnValue;
        }
    }

    return true;
}

function FileUpload_OnUploadComplete(objElement, strBaseName, awFilenames, awInternalFilenames, awFileExtensions, awFileSizes) {
    
    var arrData = new Array();

    for (var i = 0; i < awFilenames.Count; i++)
    {
        arrData[arrData.length] = awFilenames.GetItem(i);
    }

    AddPin(strBaseName + "File Name", arrData, false, false, "File Name");

    arrData = new Array();

    for (var i = 0; i < awInternalFilenames.Count; i++)
    {
        arrData[arrData.length] = awInternalFilenames.GetItem(i);
    }

    AddPin(strBaseName + "Internal File Name", arrData, false, false, "Internal File Name");

    arrData = new Array();

    for (var i = 0; i < awFileExtensions.Count; i++)
    {
        arrData[arrData.length] = awFileExtensions.GetItem(i);
    }

    AddPin(strBaseName + "File Extension", arrData, false, false, "File Extension");

    arrData = new Array();

    for (var i = 0; i < awFileSizes.Count; i++)
    {
        arrData[arrData.length] = awFileSizes.GetItem(i);
    }

    AddPin(strBaseName + "File Size", arrData, false, false, "File Size");

    if (objElement.parentElement.OnUploadComplete != null && objElement.parentElement.OnUploadComplete != undefined && objElement.parentElement.OnUploadComplete != "")
    {
        var str = "try { " + objElement.parentElement.OnUploadComplete + " }catch(e){}";
        str = str.replace(/this/g, "document.getElementById( '" + objElement.id + "' )");
        str = str.replace(/return false;/g, "throw 'return false;';");
        eval(str);
    }
}

function FlexFileUpload_OnUploadComplete(strObjectID, strBaseName, awFilenames, awInternalFilenames, awFileExtensions, awFileSizes)
{
    try {
AddPin(strBaseName + "File Name", "", false, false, "File Name");
AddPin(strBaseName + "Internal File Name", "", false, false, "Internal File Name");
AddPin(strBaseName + "File Extension", "", false, false, "File Extension");
AddPin(strBaseName + "File Size", "", false, false, "File Size");
        if (awFilenames != null)
        {
            var arrData = new Array();

            for (var i = 0; i < awFilenames.length; i++)
            {
                arrData[arrData.length] = awFilenames[i];
            }

            AddPin(strBaseName + "File Name", arrData, false, false, "File Name");

            arrData = new Array();

            for (var i = 0; i < awInternalFilenames.length; i++)
            {
                arrData[arrData.length] = awInternalFilenames[i];
            }

            AddPin(strBaseName + "Internal File Name", arrData, false, false, "Internal File Name");

            arrData = new Array();

            for (var i = 0; i < awFileExtensions.length; i++)
            {
                arrData[arrData.length] = awFileExtensions[i];
            }

            AddPin(strBaseName + "File Extension", arrData, false, false, "File Extension");

            arrData = new Array();

            for (var i = 0; i < awFileSizes.length; i++)
            {
                arrData[arrData.length] = awFileSizes[i];
            }

            AddPin(strBaseName + "File Size", arrData, false, false, "File Size");
        }

        var objElement = document.getElementById(strObjectID);

        if (objElement == null)
            objElement = document.getElementsByName(strObjectID)[0];

        if (objElement != null && objElement.parentElement.getAttribute("OnUploadComplete") != null && objElement.parentElement.getAttribute("OnUploadComplete") != undefined && objElement.parentElement.getAttribute("OnUploadComplete") != "")
        {
            var str = "try { " + objElement.parentElement.getAttribute("OnUploadComplete") + " }catch(e){}";
            str = str.replace(/this/g, "document.getElementById( '" + strObjectID + "').parentElement");
            str = str.replace(/return false;/g, "throw 'return false;';");
            eval(str);
        }
    }
    catch (e)
    {
        MessageWindow(null, "Error : <span style=\"color:#CC0000\">FlexFileUpload_OnUploadComplete() : " + e.message, 'False', null, null, "True");
    }
}

function FileUploadCtl_ChangeMajorVersion(objElem, strTarget)
{
    var objTarget = document.getElementById(strTarget);

    if (objTarget != null)
    {
        if (objTarget.type == "FlashFileUploadElement")
        {
            objTarget.SetVersionMajor(GetElementValue(objElem, null));
        }
        else
        {
            objTarget.VersionMajor = GetElementValue(objElem, null);
        }
    }
}

function FileUploadCtl_ChangeMinorVersion(objElem, strTarget)
{
    var objTarget = document.getElementById(strTarget);

    if (objTarget != null)
    {
        if (objTarget.type == "FlashFileUploadElement")
        {
            objTarget.SetVersionMinor(GetElementValue(objElem, null));
        }
        else
        {
            objTarget.VersionMinor = GetElementValue(objElem, null);
        }
    }
}

function FileUploadCtl_ChangeBuildVersion(objElem, strTarget)
{
    var objTarget = document.getElementById(strTarget);

    if (objTarget != null)
    {
        if (objTarget.type == "FlashFileUploadElement")
        {
            objTarget.SetVersionBuild(GetElementValue(objElem, null));
        }
        else
        {
            objTarget.VersionBuild = GetElementValue(objElem, null);
        }
    }
}

function FileUploadCtl_ChangeRevisionVersion(objElem, strTarget)
{
    var objTarget = document.getElementById(strTarget);

    if (objTarget != null)
    {
        if (objTarget.type == "FlashFileUploadElement")
        {
            objTarget.SetVersionRevision(GetElementValue(objElem, null));
        }
        else
        {
            objTarget.VersionRevision = GetElementValue(objElem, null);
        }
    }
}

function FileUploadCtl_SetEmailAttachment(objElem, strTarget, strDC_ItemGuid, strFileName)
{
    var objTarget = document.getElementById(strTarget);

    if (objTarget != null)
    {
        if (objTarget.type == "FlashFileUploadElement")
        {
        }
        else
        {
            var aaDC_ItemGuid = objTarget.GetAutomationArray();
            var aaFileName = objTarget.GetAutomationArray();

            strDC_ItemGuid = PopulateViewVariables(strDC_ItemGuid)

            var arr = strDC_ItemGuid.split(',');
            var str = null;

            for (str in arr)
            {
                if (arr[str] != null && arr[str] != "")
                    aaDC_ItemGuid.Add(arr[str]);
            }

            strFileName = PopulateViewVariables(strFileName)

            arr = strFileName.split(',');

            for (str in arr)
            {
                if (arr[str] != null && arr[str] != "")
                    aaFileName.Add(arr[str]);
            }

            objTarget.SetEmailAttachment(aaDC_ItemGuid, aaFileName);
        }
    }
}

function ConfirmWindow(strMessage, objEvent)
{
    //strMessage = PopulateViewVariables(strMessage, false);
    strMessage = GetVariable(strMessage, objEvent, null, false, false)

    return window.confirm(strMessage);
}

function HideMessageWindow()
{
    g_MessageWindow.style.visibility = "hidden";
}

function FadeMessageWindow()
{
    try
    {
        g_MessageWindow.filters[1].Apply();
    }
    catch (e)
    {
    }

    HideMessageWindow();

    try
    {
        g_MessageWindow.filters[1].Play();
    }
    catch (e)
    {
    }
}

function MessageWindow(objEvent, strMessageWindow, strFadingMode, strFadingModeTimeout, strTopOffset, strTopLevel)
{
    strMessageWindow = GetVariable(strMessageWindow, objEvent, null);

    var wTop = GetTopLevelWindow();
    if (strTopLevel == "True" && window != wTop)
    {
        wTop.MessageWindow(objEvent, strMessageWindow, strFadingMode, strFadingModeTimeout, strTopOffset, strTopLevel)
        return;
    }

    //g_bExceptionThrown = true;

    var strHTML = '<table id="tblMessageWindow" width="100%" height="100%" border="0" style="BORDER: #BEBEBE 1px solid;height:100%;width:100%;">'
            + '<tr>'
                + '<td width="100%" height="100%" style="height:100%;width:100%;">'
                    + '<table width="100%" height="100%" style="font-family: arial;font-size: 8pt;font-weight:bold;height:100%;width:100%;">'
                        + '<tr>'
                            + '<td id="tdMessageWindowMessage" width="100%" style="width:100%;text-align:center;">&nbsp;</td>'
                        + '</tr>'
                        + '<tr id="trMessageWindowOK">'
                            + '<td width="100%" style="width:100%;text-align:center;"><div style="width:100%;height:100%;"><img src="/ClientFormsImages/Common/MessageWindow_OK.gif" style="cursor:pointer;" onclick="try{if(parent.GetTopLevelWindow().g_objFocusedElement != null)parent.GetTopLevelWindow().g_objFocusedElement.focus();}catch(e){}g_bExceptionThrown = false;HideMessageWindow();"></div></td>'
                        + '</tr>'
                    + '</table>'
                + '</td>'
            + '</tr></table><img id="imgMessageWindowBackground" src="/ClientFormsImages/Common/MessageWindowBg.gif" style="position:absolute;top:1px;z-index:-1;width:100%;height:100%"><img id="imgMessageWindowBackground2" src="/ClientFormsImages/Common/MessageWindowBg2.gif" style="position:absolute;top:1px;z-index:-1">'

    if (g_MessageWindow == null)
    {
        if (navigator.appName == "Microsoft Internet Explorer")
        {
            //if (strFadingMode == "True")
            g_MessageWindow = document.createElement("<div style=\"Z-INDEX:50;POSITION:absolute;visibility:none;filter:progid:DXImageTransform.Microsoft.Blinds(direction='down', bands=1, duration=0.7)progid:DXImageTransform.Microsoft.Fade(duration=0.7)progid:DXImageTransform.Microsoft.Alpha(opacity=0)\"></div>");
            //else
            //  g_MessageWindow = document.createElement("<div style=\"Z-INDEX:3;POSITION:absolute;\"></div>");

            document.body.appendChild(g_MessageWindow);
        }
        else
        {
            g_MessageWindow = document.createElement("div");

            document.body.appendChild(g_MessageWindow);

            g_MessageWindow.style.zIndex = "3";
            g_MessageWindow.style.position = "absolute";
        }

        g_MessageWindow.innerHTML = strHTML;
    }

    var objOK = document.getElementById("trMessageWindowOK");

    if (strFadingMode == "True")
    {
        var objMsg = document.getElementById("tdMessageWindowMessage");

        if (objMsg != null && objMsg != undefined)
        {
            objMsg.innerHTML = strMessageWindow;
        }

        var objImg = document.getElementById("imgMessageWindowBackground");
        objImg.style.display = "none";

        objImg = document.getElementById("imgMessageWindowBackground2");
        objImg.style.display = "block";

        if (navigator.appName == "Microsoft Internet Explorer")
            g_MessageWindow.style.visibility = "hidden";

        if (objOK != null && objOK != undefined)
            objOK.style.display = "none";

        g_MessageWindow.style.height = 60;

        if (strTopOffset != null && strTopOffset != "" && strTopOffset != undefined)
            g_MessageWindow.style.top = strTopOffset;
        else
            g_MessageWindow.style.top = 62;

        g_MessageWindow.style.width = 300;
        g_MessageWindow.style.left = document.body.clientWidth - 300 - 3;

        if (navigator.appName == "Microsoft Internet Explorer")
        {
            try
            {
                g_MessageWindow.filters[0].Apply();
                g_MessageWindow.filters[1].Apply();
                g_MessageWindow.filters[2].Opacity = 100;
                g_MessageWindow.style.visibility = "visible";
                g_MessageWindow.filters[0].Play();
                g_MessageWindow.filters[1].Play();
            }
            catch (e)
            {
            }
        }
        else
            g_MessageWindow.style.visibility = "visible";

        if (strFadingModeTimeout != null && strFadingModeTimeout != '' && strFadingModeTimeout != undefined)
            setTimeout(FadeMessageWindow, parseInt(strFadingModeTimeout, 10));
        else
            setTimeout(FadeMessageWindow, 1000);
    }
    else
    {
        g_MessageWindow.innerHTML = strHTML;

        var objMsg = document.getElementById("tdMessageWindowMessage");

        if (objMsg != null && objMsg != undefined)
        {
            objMsg.innerHTML = strMessageWindow;
        }

        g_MessageWindow.style.height = 150;
        g_MessageWindow.style.top = (document.body.clientHeight / 2) - (100 / 2) + document.body.scrollTop;
        g_MessageWindow.style.width = 300;
        g_MessageWindow.style.left = (document.body.clientWidth / 2) - (300 / 2) + document.body.scrollLeft;

        var objImg = document.getElementById("imgMessageWindowBackground2");
        objImg.style.display = "none";

        objImg = document.getElementById("imgMessageWindowBackground");
        objImg.style.display = "block";

        if (objOK != null && objOK != undefined)
            objOK.style.display = "block";

        if (navigator.appName == "Microsoft Internet Explorer")
        {
            try
            {
                g_MessageWindow.filters[2].Opacity = 100;
            }
            catch (e)
            {
            }
        }

        g_MessageWindow.style.visibility = "visible";
    }
}

/*window.onerror = ShowError;

function ShowError(msg,url,lineno)
{
alert(msg);
MessageWindow(null, msg + " at line number " + lineno, 'False', null, null);
}*/

function GetVariable(strName, objEvent, objElem, bUseXml, bUseArray)
{
    try
    {
        // check the events
        strName = PopulateEvents(strName, objEvent, bUseXml, bUseArray);
        
        if (strName != null && strName != "" && strName != "this")
        {
            strName = PopulateViewVariables(strName, bUseXml, bUseArray);
        }
        else if (objElem != null && objElem != undefined && strName == "this")
        {
            if (objElem.tagName == "INPUT" && objElem.type == "checkbox")
            {
                if (objElem.checked)
                    strName = "True";
                else
                {
                    strName = "False";
                }
            }
            else if (objElem.value != null && objElem.value != undefined)
            {
                strName = objElem.value;
            }
        }
        
        if (bUseXml && typeof (strName) == "object") {
            
            var strXml = "";

            for (var i = 0; i < strName.length; i++)
            {
                strXml += WrapIntoDataItem(GetVariable(strName[i], objEvent, objElem, false, false));
            }

            strName = strXml;
        }
        /*try
        {
        var dDate = Date.parse(strName);
	        
        if (!isNaN(dDate))
        strName = dDate;
        }
        catch(e)
        {
	        
        }*/
    }
    catch (e) {
        
        throw new Error(0, "GetVariable() - " + e.message);
    }

    return strName;
}

function EvaluateCondition(strLeftOperand, strOperator, strRightOperand, objEvent, objElem)
{
    var bResult = false;
    
    try
    {
        strLeftOperand = GetVariable(strLeftOperand, objEvent, objElem);
        strRightOperand = GetVariable(strRightOperand, objEvent, objElem);

        if (!isNaN(Date.parse(strLeftOperand)) && !isNaN(Date.parse(strRightOperand)))
        {
            strLeftOperand = Date.parse(strLeftOperand);
            strRightOperand = Date.parse(strRightOperand);
        }
        else if (!isNaN(parseFloat(strLeftOperand)) && !isNaN(parseFloat(strRightOperand)))
        {
            strLeftOperand = parseFloat(strLeftOperand);
            strRightOperand = parseFloat(strRightOperand);
        }
        else
        {
            strLeftOperand = "'" + strLeftOperand.replace(/'/g, "\\'").replace(/"/g, "\\\"").replace(/\n/g, "\\n").replace(/\r/g, "\\r") + "'";
            strRightOperand = "'" + strRightOperand.replace(/'/g, "\\'").replace(/"/g, "\\\"").replace(/\n/g, "\\n").replace(/\r/g, "\\r") + "'";
        }

        eval("bResult = " + strLeftOperand + " " + strOperator + " " + strRightOperand + ";");
    }
    catch (e)
    {
        throw new Error(0, "EvaluateCondition() - " + e.message);
    }

    return bResult;
}

function SaveChartImage(strTarget, strFilename, strWidth, strHeight)
{
    var objElement = GetElementByObjectIDAndTag(strTarget, "OBJECT");

    if (objElement != undefined && objElement.object != null)
    {
        objElement.SaveImage(strFilename, strWidth, strHeight);
    }
}

function RecursiveGetTabGuid()
{
    var strScopeGuid = null;

    // need to recurse up the DOM to find the first TabGuid
    var objWin = window;

    while (objWin != null)
    {
        try
        {


            if (objWin.frameElement != null && objWin.frameElement.getAttribute("TabGuid") != null)
            {
                strScopeGuid = objWin.frameElement.getAttribute("TabGuid");
                objWin = null;
                break;
            }



            if (objWin.parent != undefined && objWin.parent != null && objWin.parent != top)
                objWin = objWin.parent;
            else if (objWin.opener != undefined && objWin.opener != null && objWin.opener != top)
                objWin = objWin.opener;
            else
                objWin = null;
        }
        catch (e)
        {
            objWin = null;
        }
    }

    return strScopeGuid;
}

function GetTopLevelWindow()
{
    // need to recurse up the DOM
    var objWin = window;
    var objTmpWin = null;

    while (objWin != null)
    {
        try
        {
            if (objWin.parent != undefined && objWin.parent != null)
                objTmpWin = objWin.parent;
            else if (objWin.opener != undefined && objWin.opener != null)
                objTmpWin = objWin.opener;

            var str = objTmpWin.document.title;

            objWin = objTmpWin;

            if (objTmpWin == objTmpWin.parent || objTmpWin == top)
                break;
        }
        catch (e)
        {
            break;
        }
    }

    return objWin;
}

function RegisterEventSink(strViewID, strDOMLocation, strJSDelegate, arrFilters, strScope)
{
    try
    {
        var objEventService = GetEventService();

        if (objEventService == null)
            throw new Error(0, "Event Service object not found.");
        
        objEventService.Register(strViewID, strDOMLocation, strJSDelegate, arrFilters, strScope, RecursiveGetTabGuid());
        /*
        if( window.opener != undefined )
        {
        window.opener.parent.Register( strViewID, strDOMLocation + RecursiveDOMLocator( window.opener.window, "g_hWindowHandle" ), strJSDelegate, arrFilters, strScope );
        }
        else
        top.Register( strViewID, strDOMLocation, strJSDelegate, arrFilters, strScope );
        }
        */
    }
    catch (e)
    {
        //throw new Error(0, "RegisterEventSink() - " + e.message);
    }
}

function UnregisterEventSink(strViewID, strDOMLocation, strJSDelegate)
{
    try
    {
        var objEventService = GetEventService();

        if (objEventService == null)
            throw new Error(0, "Event Service object not found.");

        objEventService.Unregister(strViewID, "JavaScript." + strDOMLocation, strJSDelegate);
    }
    catch (e)
    {
        //throw new Error(0, "UnregisterEventSink() - " + e.message);
    }
}

function UnregisterFlexEventSink(strViewID, strDOMLocation, strJSDelegate)
{
    try
    {
        var objEventService = GetEventService();

        if (objEventService == null)
            throw new Error(0, "Event Service object not found.");

        objEventService.Unregister(strViewID, strDOMLocation, strJSDelegate);
    }
    catch (e)
    {
        //throw new Error(0, "UnregisterEventSink() - " + e.message);
    }
}

function HtmlEditor_OnSave(objElement, strDescription)
{
    AddPin("HtmlEditor:" + strDescription + ":Html", objElement.Html, false, false);
    AddPin("HtmlEditor:" + strDescription + ":On Save", "True", false);

    if (objElement.parentElement.OnSave != null && objElement.parentElement.OnSave != undefined && objElement.parentElement.OnSave != "")
    {
        var str = "try { " + objElement.parentElement.OnSave + " }catch(e){}";
        str = str.replace(/this/g, "document.getElementById( '" + objElement.id + "' )");
        str = str.replace(/return false;/g, "throw 'return false;';");
        eval(str);
    }
}

function HtmlEditor_OnDelete(objElement, strDescription)
{
    AddPin("HtmlEditor:" + strDescription + ":On Delete", "True", false, false);

    if (objElement.parentElement.OnDelete != null && objElement.parentElement.OnDelete != undefined && objElement.parentElement.OnDelete != "")
    {
        var str = "try { " + objElement.parentElement.OnDelete + " }catch(e){}";
        str = str.replace(/this/g, "document.getElementById( '" + objElement.id + "' )");
        str = str.replace(/return false;/g, "throw 'return false;';");
        eval(str);
    }
}

function HtmlEditor_OnClear(objElement, strDescription)
{
    AddPin("HtmlEditor:" + strDescription + ":On Clear", "True", false, false);

    if (objElement.parentElement.OnClear != null && objElement.parentElement.OnClear != undefined && objElement.parentElement.OnClear != "")
    {
        var str = "try { " + objElement.parentElement.OnClear + " }catch(e){}";
        str = str.replace(/this/g, "document.getElementById( '" + objElement.id + "' )");
        str = str.replace(/return false;/g, "throw 'return false;';");
        eval(str);
    }
}

function HtmlEditorCtl_AddStyles(objEvent, strObjectID, strRuleName, strRuleData)
{
    var objTarget = GetElementByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), "OBJECT");

    if (objTarget != undefined)
    {
        var objRuleName = null;
        var objRuleData = null;

        if (strRuleName.length > 2 && strRuleName.charAt(0) == "!" && strRuleName.charAt(strRuleName.length - 1) == "!" && objEvent != null)
        {
            if (objEvent.IsArray(strRuleName.substr(1, strRuleName.length - 2)))
            {
                objRuleName = objEvent.GetParameterArray(strRuleName.substr(1, strRuleName.length - 2));
            }
            else
            {
                objRuleName = objEvent.GetParameter(strRuleName.substr(1, strRuleName.length - 2));
            }
        }
        else
            objRuleName = PopulateViewVariables(strRuleName);

        if (strRuleData.length > 2 && strRuleData.charAt(0) == "!" && strRuleData.charAt(strRuleData.length - 1) == "!" && objEvent != null)
        {
            if (objEvent.IsArray(strRuleData.substr(1, strRuleData.length - 2)))
            {
                objRuleData = objEvent.GetParameterArray(strRuleData.substr(1, strRuleData.length - 2));
            }
            else
            {
                objRuleData = objEvent.GetParameter(strRuleData.substr(1, strRuleData.length - 2));
            }
        }
        else
            objRuleData = PopulateViewVariables(strRuleData);

        try
        {
            objTarget.AddStyles(objRuleName, objRuleData);
        }
        catch (e)
        {
            alert(e.message);
        }
    }
}

function CSSEditor_OnSave(objElement, strDescription)
{
    AddPin("CSSEditor:" + strDescription + ":CSS", objElement.CSS, false, false);
    AddPin("CSSEditor:" + strDescription + ":On Save", "True", false);

    if (objElement.parentElement.OnSave != null && objElement.parentElement.OnSave != undefined && objElement.parentElement.OnSave != "")
    {
        var str = "try { " + objElement.parentElement.OnSave + " }catch(e){}";
        str = str.replace(/this/g, "document.getElementById( '" + objElement.id + "' )");
        str = str.replace(/return false;/g, "throw 'return false;';");
        eval(str);
    }
}

function CSSEditor_OnDelete(objElement, strDescription)
{
    AddPin("CSSEditor:" + strDescription + ":On Delete", "True", false, false);

    if (objElement.parentElement.OnDelete != null && objElement.parentElement.OnDelete != undefined && objElement.parentElement.OnDelete != "")
    {
        var str = "try { " + objElement.parentElement.OnDelete + " }catch(e){}";
        str = str.replace(/this/g, "document.getElementById( '" + objElement.id + "' )");
        str = str.replace(/return false;/g, "throw 'return false;';");
        eval(str);
    }
}

function CSSEditor_OnClear(objElement, strDescription)
{
    AddPin("CSSEditor:" + strDescription + ":On Clear", "True", false, false);

    if (objElement.parentElement.OnClear != null && objElement.parentElement.OnClear != undefined && objElement.parentElement.OnClear != "")
    {
        var str = "try { " + objElement.parentElement.OnClear + " }catch(e){}";
        str = str.replace(/this/g, "document.getElementById( '" + objElement.id + "' )");
        str = str.replace(/return false;/g, "throw 'return false;';");
        eval(str);
    }
}

function HandleKeys(evt)
{
    if (navigator.appName == "Microsoft Internet Explorer")
    {
        // Ctrl + Space
        if (event.keyCode == 32 && event.ctrlKey)
        {
            //toggle thru tabs if found
            var objTabs = GetHorizontalMenuTabs();

            if (objTabs != null)
            {
                objTabs.ToggleTab();
            }
        }

        

        // Ctrl + Alt + 1
        if (event.keyCode == 49 && event.ctrlKey && evt.altKey)
        {
            window.open('/EventManagerStats.aspx', '_new', 'height=600,width=800,toolbar=no,scrollbars=yes,resizable=yes');
        } else if (event.keyCode == 192 && event.ctrlKey)
        {
            CloseFloatingWindow();
        }

        if (event.srcElement != null)
        {
            switch (event.srcElement.tagName)
            {
                case "TABLE":
                case "TBODY":
                case "TR":
                case "TD":
                case "DIV":
                    switch (event.keyCode)
                    {
                        case 8: // Backspace
                        case 116: // F5 - doesn't seem to work tho
                            event.returnValue = false;
                            break;
                    }
                    break;
            }
        }
    }
    else
    {
        // Ctrl + Space
        if (evt.keyCode == 32 && evt.ctrlKey)
        {
            //toggle thru tabs if found
            var objTabs = GetHorizontalMenuTabs();

            if (objTabs != null)
            {
                objTabs.ToggleTab();
            }
        }

        // Ctrl + 1
        if (evt.keyCode == 49 && evt.ctrlKey && evt.altKey)
        {
            window.open('/EventManagerStats.aspx', '_new', 'height=600,width=800,toolbar=no,scrollbars=yes,resizable=yes');
        }

        if (evt.target != null)
        {
            switch (evt.target.tagName)
            {
                case "IFRAME":
                case "TABLE":
                case "TBODY":
                case "TR":
                case "TD":
                case "DIV":
                    switch (evt.keyCode)
                    {
                        case 8: // Backspace
                        case 116: // F5 - doesn't seem to work tho
                            evt.returnValue = false;
                            return false;
                    }
                    break;
            }
        }
    }
}

function GetHorizontalMenuTabWindow()
{
    var vTop = window;

    while (vTop != top)
    {
        if (vTop.g_HorizontalMenuTabCollection != null)
            break;

        if (vTop.frameElement != null)
            vTop = vTop.parent;
        else if (vTop.opener != null)
            vTop = vTop.opener;
        else
            vTop = vTop.parent;
    }

    if (vTop.g_HorizontalMenuTabCollection != null)
        return vTop;
    else
        return null;

    /*
    if( window.opener != undefined )
    {
    return window.opener.GetTopmostWindow();
    }
    else
    {
    return window.top;
    }*/
}

function SetReadOnly(strObjectID, strReadOnly, objEvent, objElement, strObjectIDPin, strTargetNotUnique)
{
    AddFunctionCallLog("SetReadOnly");
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objArr == undefined || objArr == null || objArr.length == 0)
                    objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*objArr = GetElementsByObjectID(strObjectID);

	            if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }

            if (objTarget != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                    objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                /*
                objTarget = GetElementsByObjectID(strObjectID);

	            if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }

        if (objTarget != undefined)
        {
            for (var i = 0; i < objTarget.length; i++)
            {
                if (objEvent != null && IsEventVariable(strReadOnly))
                {
                    strReadOnly = objEvent.GetParameter(RemoveEventVariableDelimiters(strReadOnly));
                }
                else
                {
                    strReadOnly = GetVariable(strReadOnly, objEvent, objTarget[i]);
                }

                if (strReadOnly == "True")
                {
                    objTarget[i].readonly = true;
                    objTarget[i].disabled = true;
                }
                else
                {
                    objTarget[i].readonly = false;
                    objTarget[i].disabled = false;
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "SetReadOnly() - " + e.message);
    }
    RemoveFunctionCallLog();
}

function Array2DataItemXml(obj)
{
    var strXml = "";

    if (typeof (obj) == "object")
    {
        for (var i = 0; i < obj.length; i++)
        {
            strXml += "<DataItem><![CDATA[";
            strXml += obj[i];
            strXml += "]]></DataItem>";
        }
    }
    else
    {
        strXml += "<DataItem><![CDATA[";
        strXml += obj;
        strXml += "]]></DataItem>";
    }

    return strXml;
}

function SuppressEnterKey(e)
{
    if (navigator.appName == "Microsoft Internet Explorer")
    {
        if (window.event.keyCode != 13)
            return false;
        else
            return true;
    }
    else {
        
        if (e.which != 13)
            return false;
        else {
            e.preventDefault();
            e.stopPropagation();
            return true;
        }
    }
}

function GetInnerText(obj)
{
    if (navigator.appName == "Microsoft Internet Explorer")
        return obj.innerText;
    else
        return obj.textContent;
}

function SetInnerText(obj, str)
{
    try
    {
        if (navigator.appName == "Microsoft Internet Explorer")
            obj.innerText = str;
        else
            obj.textContent = str;
    }
    catch (e)
    {
        throw new Error(0, "SetInnerText() - " + e.message);
    }
}

function MergeAttributes(objSrc, objDest)
{
    if (navigator.appName == "Microsoft Internet Explorer")
        objDest.mergeAttributes(objSrc);
    else
    {
        for (var i = 0; i < objSrc.attributes.length; i++)
        {
            objDest.setAttribute(objSrc.attributes[i].nodeName, objSrc.attributes[i].nodeValue);
        }
    }
}

function OnChange_MultiSelectCheckBox(strCheckbox, strHiddenInput, bCheckbox)
{
    if (!document.all(strCheckbox).disabled)
    {
        if ((bCheckbox && document.all(strCheckbox).checked == true) || (!bCheckbox && document.all(strCheckbox).checked == false))
        {
            document.all(strCheckbox).checked = true;
        }
        else
        {
            document.all(strCheckbox).checked = false;
        }
        document.all(strCheckbox).blur();
    }
}

var g_nFloatingWindow_MouseMoveToken = null;
var g_nFloatingWindow_MouseUpToken = null;
var g_objFloatingWindow_MouseDown = null;

function SelectFloatingWindow(obj, e)
{
    AddFunctionCallLog("SelectFloatingWindow");
    g_FloadingWindowIsSelected = true;

    var curElem = e.srcElement || e.target;

    if (curElem)
    {
        if (navigator.appName == "Microsoft Internet Explorer")
        {
            g_nFloadingWindowX = event.x;
            g_nFloadingWindowY = event.y;
            event.cancelBubble = false;

            if (g_objFloatingWindow_MouseDown != null)
                g_objFloatingWindow_MouseDown.releaseCapture();

            g_objFloatingWindow_MouseDown = curElem;
            g_objFloatingWindow_MouseDown.setCapture();
        }
        else
        {
            g_objFloatingWindow_MouseDown = curElem;
            
            // Calculate the offset
            g_nFloadingWindow_MouseDownX = e.clientX;
            g_nFloadingWindow_MouseDownY = e.clientY;

            if (g_nFloatingWindow_MouseMoveToken == null)
                g_nFloatingWindow_MouseMoveToken = function(e) { return MoveFloatingWindow(e, 'Source') };

            if (g_nFloatingWindow_MouseUpToken == null)
                g_nFloatingWindow_MouseUpToken = function(e) { return DeselectFloatingWindow(e) };

            g_objFloatingWindow_MouseDown.addEventListener("mousemove", g_nFloatingWindow_MouseMoveToken, true);
            g_objFloatingWindow_MouseDown.addEventListener("mouseup", g_nFloatingWindow_MouseUpToken, true);

            document.addEventListener("mousemove", g_nFloatingWindow_MouseMoveToken, true);
            document.addEventListener("mouseup", g_nFloatingWindow_MouseUpToken, true);
            
            // Don't let the default actions take place
            if (e.preventDefault)
            {
                e.preventDefault();
                e.stopPropagation();
            }
            else
            {
                document.onselectstart = function() { return false; };
                e.cancelBubble = true;
                RemoveFunctionCallLog();
                return false;
            }
        }
    }
    RemoveFunctionCallLog();
}

function DeselectFloatingWindow(e)
{
    g_FloadingWindowIsSelected = false;
    AddFunctionCallLog("DeselectFloatingWindow");

    if (navigator.appName == "Microsoft Internet Explorer")
    {
        if (g_objFloatingWindow_MouseDown != null)
            g_objFloatingWindow_MouseDown.releaseCapture();
    }
    else
    {

        if (g_objFloatingWindow_MouseDown != null)
        {
            g_objFloatingWindow_MouseDown.removeEventListener("mousemove", g_nFloatingWindow_MouseMoveToken, true);
            g_objFloatingWindow_MouseDown.removeEventListener("mouseup", g_nFloatingWindow_MouseUpToken, true);
        }

        document.removeEventListener("mousemove", g_nFloatingWindow_MouseMoveToken, true);
        document.removeEventListener("mouseup", g_nFloatingWindow_MouseUpToken, true);
    }

    g_objFloatingWindow_MouseDown = null;

    if (e.preventDefault)
    {
        e.preventDefault();
        e.stopPropagation();
    }
    else
    {
        document.onselectstart = null;
        e.cancelBubble = true;
        RemoveFunctionCallLog();
        return false;
    }

    RemoveFunctionCallLog();
}

function MoveFloatingWindow(e, strSource)
{
    AddFunctionCallLog("MoveFloatingWindow");
    
    if (g_FloadingWindowIsSelected)
    {
        if (!e.preventDefault)
        {
            // This is the IE version for handling a strange
            // problem when you quickly move the mouse
            // out of the window and let go of the button.
            if (e.button == 0)
            {
                DeselectFloatingWindow(e);
                return;
            }
        }

        if (navigator.appName == "Microsoft Internet Explorer")
        {
            frameElement.style.left = frameElement.offsetLeft + (event.x - g_nFloadingWindowX) + "px";
            frameElement.style.top = frameElement.offsetTop + (event.y - g_nFloadingWindowY) + "px";
        }
        else
        {
            if (strSource == "Source")
            {
                frameElement.style.left = String(frameElement.offsetLeft + (e.clientX - g_nFloadingWindow_MouseDownX)) + "px";
                frameElement.style.top = String(frameElement.offsetTop + (e.clientY - g_nFloadingWindow_MouseDownY)) + "px";
            }
        }

        if (e.preventDefault)
        {
            e.stopPropagation();
            e.preventDefault();
        }
        else
        {
            e.cancelBubble = true;
            RemoveFunctionCallLog();
            return false;
        }
    }
    RemoveFunctionCallLog();
}

/*
function DeselectFloatingWindow(obj)
{
g_FloadingWindowIsSelected = false;

if (navigator.appName == "Microsoft Internet Explorer")
obj.releaseCapture();
else
obj.removeEventListener("mousemove", MoveFloatingWindow, false);
}

function MoveFloatingWindow(evt)
{
if( g_FloadingWindowIsSelected )
{
if (navigator.appName == "Microsoft Internet Explorer")
{
frameElement.style.left = frameElement.offsetLeft + (event.x - g_nFloadingWindowX) + "px";
frameElement.style.top = frameElement.offsetTop + (event.y - g_nFloadingWindowY) + "px";
}
else
{
//alert(frameElement.offsetLeft + (evt.screenX - g_nFloadingWindowX));
frameElement.style.left = frameElement.offsetLeft + (evt.screenX - g_nFloadingWindowX) + "px";
frameElement.style.top = frameElement.offsetTop + (evt.screenY - g_nFloadingWindowY) + "px";
}
}
}
*/


function CloseFloatingWindow(obj)
{
    try
    {
        try
        {
            //frameElement.style.removeAttribute( "filter" );
            OnCloseWindow();
        }
        catch (e)
        {

        }

        UnloadPage(true);

        if (navigator.appName == "Microsoft Internet Explorer")
        {
            if (obj != null && obj != undefined)
               obj.releaseCapture();
        }

        if (window.frameElement.getAttribute("IFrameFloatingWindow") == "True")
            window.frameElement.style.display = "none";
        else
        {
            var objTop = GetTopLevelWindow();
            objTop.g_objFloatingWindow.style.display = "none";
            //top.document.getElementById( "IFrameFloatingWindow" ).style.display = "none";    
            g_FloadingWindowIsSelected = false;
            objTop.g_objFloatingWindowSrc = null;
        }
    }
    catch (e)
    {
        //throw new Error(0, "CloseFloatingWindow() - " + e.message);
    }
}

function GetElementValue(obj, strID)
{
    try
    {
        if (obj == null || obj == undefined)
            obj = document.getElementById(strID);

        if (obj != null && obj != undefined)
        {
            if (obj.tagName == "SELECT")
            {
                if (obj.selectedIndex > -1 && obj.options[obj.selectedIndex].value != "")
                {
                    return obj.options[obj.selectedIndex].value;
                }
            }
            else if (obj.tagName == "INPUT" && obj.type == "checkbox")
            {
                if (obj.checked)
                    return "True";
                else
                    return "False";
            }
            else if (obj.tagName == "INPUT" && obj.type == "radio")
            {
                if (obj.checked)
                {
                    return obj.value;
                }
            }
            else if (obj.value != "")
            {
                return obj.value;
            }
        }

        return null;
    }
    catch (e)
    {
        throw new Error(0, "GetElementValue() - " + e.message);
    }
}

function AddListBoxItem(strObjectID, objEvent, strPosition, strName, strValue, strObjectIDPin, strTargetNotUnique)
{
    AddFunctionCallLog("AddListBoxItem");
    try
    {
        var objElement = null;
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                if (objTmp != null)
                {
                    objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                    if (objArr == undefined || objArr == null || objArr.length == 0)
                        objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                }
                /*
                objArr = GetElementsByObjectID(strObjectID);

	            if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }

            if (objTarget != null && objArr != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                if (objTmp != null)
                {
                    objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                    if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                        objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                }
                /*
                objTarget = GetElementsByObjectID(strObjectID);

	            if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }
        else if (objElement != null && objElement != undefined && objElement != "")
        {
            objTarget = new Array();
            objTarget[objTarget.length] = objElement;
        }

        if (objTarget != undefined && objTarget != null)
        {
            for (var i = 0; i < objTarget.length; i++)
            {
                objElement = objTarget[i];

                var objOption = null;
                var objName = null;
                var objValue = null;

                // check the event
                if (strName.length > 2 && strName.charAt(0) == "!" && strName.charAt(strName.length - 1) == "!" && objEvent != null)
                {
                    objName = objEvent.GetParameterArray(strName.substr(1, strName.length - 2));
                }
                else
                    objName = PopulateViewVariables(strName);

                if (strValue.length > 2 && strValue.charAt(0) == "!" && strValue.charAt(strValue.length - 1) == "!" && objEvent != null)
                {
                    objValue = objEvent.GetParameterArray(strValue.substr(1, strValue.length - 2));
                }
                else
                    objValue = PopulateViewVariables(strValue);
                
                if (typeof (objName) == "string")
                {
                    objOption = document.createElement("OPTION");

                    if (strPosition == "Beginning")
                        objElement.options.add(objOption, 0);
                    else if (strPosition == "End")
                    {
                        if (objElement.options.length == 0)
                            objElement.options.add(objOption, 0);
                        else
                            objElement.options.add(objOption);
                    }
                    else // Sorted
                    {
                        if (objElement.options.length == 0)
                            objElement.options.add(objOption);
                        else
                        {
                            var i = 0;
                            for (; i < objElement.options.length; i++)
                            {
                                if (CompareString(strName, objElement.options[i].text) - 1)
                                    break;
                            }

                            objElement.options.add(objOption, i);
                        }
                    }

                    objOption.text = strName;
                    objOption.value = strValue;
                }
                else if (objName != undefined && objName != null)
                {
                    for (var j = 0; j < objName.Length; j++)
                    {
                        objOption = document.createElement("OPTION");

                        if (strPosition == "Beginning")
                            objElement.options.add(objOption, 0);
                        else if (strPosition == "End")
                        {
                            if (objElement.options.length == 0)
                                objElement.options.add(objOption, 0);
                            else
                                objElement.options.add(objOption);
                        }
                        else // Sorted
                        {
                            if (objElement.options.length == 0)
                                objElement.options.add(objOption);
                            else
                            {
                                var i = 0;
                                for (; i < objElement.options.length; i++)
                                {
                                    if (CompareString(objName.GetValue(j), objElement.options[i].text) - 1)
                                        break;
                                }

                                objElement.options.add(objOption, i);
                            }
                        }

                        objOption.text = objName.GetValue(j);
                        objOption.value = objValue.GetValue(j);
                    }
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "AddListBoxItem() - " + e.message);
    }
    RemoveFunctionCallLog();
}

function RemoveListBoxItem(strObjectID, objEvent, strAll, strName, strValue, strObjectIDPin, strTargetNotUnique)
{
    AddFunctionCallLog("RemoveListBoxItem");
    try
    {
        var objTarget = null;
        var objElement = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                if (objTmp != null)
                {
                    objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                    if (objArr == undefined || objArr == null || objArr.length == 0)
                        objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                }
                /*
                objArr = GetElementsByObjectID(strObjectID);

	            if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }

            if (objTarget != null && objArr != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                if (objTmp != null)
                {
                    objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                    if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                        objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
                }
                /*
                objTarget = GetElementsByObjectID(strObjectID);

	            if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }
        else if (objElement != null && objElement != undefined && objElement != "")
        {
            objTarget = new Array();
            objTarget[objTarget.length] = objElement;
        }

        if (objTarget != undefined && objTarget != null)
        {
            for (var i = 0; i < objTarget.length; i++)
            {
                objElement = objTarget[i];
                if (strAll == "True")
                {
                    objElement.innerHTML = "";

                    // this is the old expensive way
                    //while (objElement.options.length > 0)
                    //  objElement.remove(0);

                    objElement.selectedIndex = -1;
                }
                else
                {
                    var objName = null;
                    var objValue = null;

                    // check the event
                    if (strName.length > 2 && strName.charAt(0) == "!" && strName.charAt(strName.length - 1) == "!" && objEvent != null)
                    {
                        if (objEvent.IsArray(strName.substr(1, strName.length - 2)))
                        {
                            objName = objEvent.GetParameterArray(strName.substr(1, strName.length - 2));
                        }
                        else
                        {
                            objName = objEvent.GetParameter(strName.substr(1, strName.length - 2));
                        }
                    }
                    else
                        objName = PopulateViewVariables(strName);

                    if (strValue.length > 2 && strValue.charAt(0) == "!" && strValue.charAt(strValue.length - 1) == "!" && objEvent != null)
                    {
                        if (objEvent.IsArray(strValue.substr(1, strValue.length - 2)))
                        {
                            objValue = objEvent.GetParameterArray(strValue.substr(1, strValue.length - 2));
                        }
                        else
                        {
                            objValue = objEvent.GetParameter(strValue.substr(1, strValue.length - 2));
                        }
                    }
                    else
                        objValue = PopulateViewVariables(strValue);

                    for (var i = 0; i < objElement.options.length; i++)
                    {
                        if (typeof (objValue) == "string" && objValue == objElement.options[i].value)
                        {
                            objElement.remove(i);
                            i--;
                        }
                        else if (typeof (objValue) == "object" && objValue.GetValue(0) == objElement.options[i].value)
                        {
                            objElement.remove(i);
                            i--;
                        }
                    }
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "RemoveListBoxItem() - " + e.message);
    }
    RemoveFunctionCallLog();
}

function MoveListBoxItem(strObjectID, objEvent, strDirection, strName, strValue)
{
    AddFunctionCallLog("MoveListBoxItem");
    try
    {
        var objElement = GetElementByObjectID(strObjectID);

        if (objElement != undefined && objElement != null)
        {
            var objOption = null;
            var objName = null;
            var objValue = null;

            // check the event
            if (strName.length > 2 && strName.charAt(0) == "!" && strName.charAt(strName.length - 1) == "!" && objEvent != null)
            {
                objName = objEvent.GetParameterArray(strName.substr(1, strName.length - 2));
            }
            else
                objName = new AutomationArray(new Array(PopulateViewVariables(strName)));

            if (strValue.length > 2 && strValue.charAt(0) == "!" && strValue.charAt(strValue.length - 1) == "!" && objEvent != null)
            {
                objValue = objEvent.GetParameterArray(strValue.substr(1, strValue.length - 2));
            }
            else
                objValue = new AutomationArray(new Array(PopulateViewVariables(strValue)));
            
            if (objValue != undefined && objValue != null)
            {
                var objTmp = null;
                
                for (var j = 0; j < objValue.length; j++)
                {
                    var i = 0;
                    for (; i < objElement.options.length; i++)
                    {
                        if (CompareString(objValue.GetValue(j), objElement.options[i].value) == 0)
                            break;
                    }
                    
                    if (strDirection == "Up")
                    {
                        if (i > 0)
                        {
                            objTmp = objElement.options[i].cloneNode(true);

                            objElement.insertBefore(objTmp, objElement.options[i-1]);

                            objElement.removeChild(objElement.options[i + 1]);

                            objElement.selectedIndex = i-1;

                            //objElement.options[i].swapNode(objElement.options[i - 1]);
                        }
                    }
                    else // Down
                    {
                        if (i < objElement.options.length - 1)
                        {
                            objTmp = objElement.options[i].cloneNode(true);

                            objElement.insertBefore(objTmp, objElement.options[i + 2]);

                            objElement.removeChild(objElement.options[i]);

                            objElement.selectedIndex = i+1;
                            
                            //objElement.options[i].swapNode(objElement.options[i + 1]);
                        }
                    }
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "MoveListBoxItem() - " + e.message);
    }
    RemoveFunctionCallLog();
}

function CompareString(strLeft, strRight)
{
    g_strLastKnownFunctionCall = "CompareString";
    try
    {
        if (strLeft == strRight)
            return 0;

        var nLeftCode = null;
        var nRightCode = null;

        for (var i = 0; i < strLeft.length; i++)
        {
            if (strRight.length > i)
            {
                nLeftCode = strLeft.charCodeAt(i);
                nRightCode = strRight.charCodeAt(i);

                if (nLeftCode >= 97 && nLeftCode <= 122)
                    nLeftCode -= 32;

                if (nRightCode >= 92 && nRightCode <= 122)
                    nRightCode -= 32;

                if (nLeftCode > nRightCode)
                    return 1;
                else if (nLeftCode < nRightCode)
                    return -1;
            }
            else
                return 1;
        }

        return null;
    }
    catch (e)
    {
        throw new Error(0, "CompareString() - " + e.message);
    }
}

function SortListBox(strObjectID, objEvent)
{
    g_strLastKnownFunctionCall = "SortListBox";
    try
    {
        var objElement = GetElementByObjectID(strObjectID);

        if (objElement != undefined && objElement != null)
        {
            for (var i = 0; i < objElement.options.length; i++)
            {
                for (var j = i + 1; j < objElement.options.length; j++)
                {
                    if (CompareString(objElement.options[i].text, objElement.options[j].text) >= 0)
                    {
                        objElement.options[i].swapNode(objElement.options[j]);
                        break;
                    }
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "SortListBox() - " + e.message);
    }
}

function ContainsItemEqualTo(objEvent, objElement, strValue, strCompareValue)
{
    g_strLastKnownFunctionCall = "ContainsItemEqualTo";
    try
    {
        var objValue = null;
        if (strValue.length > 2 && strValue.charAt(0) == "!" && strValue.charAt(strValue.length - 1) == "!" && objEvent != null)
        {
            if (objEvent.IsArray(strValue.substr(1, strValue.length - 2)))
            {
                objValue = objEvent.GetParameterArray(strValue.substr(1, strValue.length - 2));
            }
            else
            {
                objValue = objEvent.GetParameter(strValue.substr(1, strValue.length - 2));
            }
        }
        else
        {
            objValue = PopulateViewVariables(strValue);
            objValue = objValue.split(',');
        }

        var objCompareValue = null;
        if (strCompareValue.length > 2 && strCompareValue.charAt(0) == "!" && strCompareValue.charAt(strCompareValue.length - 1) == "!" && objEvent != null)
        {
            if (objEvent.IsArray(strCompareValue.substr(1, strCompareValue.length - 2)))
            {
                objCompareValue = objEvent.GetParameterArray(strCompareValue.substr(1, strCompareValue.length - 2));
            }
            else
            {
                objCompareValue = objEvent.GetParameter(strCompareValue.substr(1, strCompareValue.length - 2));
            }
        }
        else
        {
            objCompareValue = PopulateViewVariables(strCompareValue);
            objCompareValue = objCompareValue.split(',');
        }

        if (objValue != null && objValue != window.undefined && objCompareValue != window.undefined && (objValue.toString() == "Toreion.Interop.Framework.AutomationArray" || objValue.toString() == "AutomationArray"))
        {
            for (var i = 0; i < objValue.Length; i++)
            {
                if (objValue.GetValue(i) == objCompareValue)
                {
                    return true;
                }
            }
        }
        else if (objCompareValue != null && objCompareValue != window.undefined && objValue != null && objValue != window.undefined && (objCompareValue.toString() == "Toreion.Interop.Framework.AutomationArray" || objCompareValue.toString() == "AutomationArray"))
        {
            for (var i = 0; i < objCompareValue.Length; i++)
            {
                if (objValue.length > 0)
                {
                    for (var j = 0; j < objValue.length; j++)
                    {
                        if (objCompareValue.GetValue(i) == objValue[j])
                        {
                            return true;
                        }
                    }
                }
                else
                {
                    if (objCompareValue.GetValue(i) == objValue)
                    {
                        return true;
                    }
                }
            }
        }
        else if (objValue != window.undefined && objValue != null && objCompareValue != window.undefined && typeof (objValue) != "string")
        {
            for (var i = 0; i < objValue.length; i++)
            {
                if (objValue[i].toString() == objCompareValue.toString())
                {
                    return true;
                }
            }
        }
        else if (objValue != window.undefined && objCompareValue != window.undefined)
        {
            if (objValue == objCompareValue)
                return true;
        }
    }
    catch (e)
    {
        throw new Error(0, "ContainsItemEqualTo() - " + e.message);
    }

    return false;
}

function ContainsItemNotEqualTo(objEvent, objElement, strValue, strCompareValue)
{
    g_strLastKnownFunctionCall = "ContainsItemNotEqualTo";
    var objValue = null;
    if (strValue.length > 2 && strValue.charAt(0) == "!" && strValue.charAt(strValue.length - 1) == "!" && objEvent != null)
    {
        if (objEvent.IsArray(strValue.substr(1, strValue.length - 2)))
        {
            objValue = objEvent.GetParameterArray(strValue.substr(1, strValue.length - 2));
        }
        else
        {
            objValue = objEvent.GetParameter(strValue.substr(1, strValue.length - 2));
        }
    }
    else
    {
        objValue = PopulateViewVariables(strValue);
        objValue = objValue.split(',');
    }

    var objCompareValue = null;
    if (strCompareValue.length > 2 && strCompareValue.charAt(0) == "!" && strCompareValue.charAt(strCompareValue.length - 1) == "!" && objEvent != null)
    {
        if (objEvent.IsArray(strCompareValue.substr(1, strCompareValue.length - 2)))
        {
            objCompareValue = objEvent.GetParameterArray(strCompareValue.substr(1, strCompareValue.length - 2));
        }
        else
        {
            objCompareValue = objEvent.GetParameter(strCompareValue.substr(1, strCompareValue.length - 2));
        }
    }
    else
    {
        objCompareValue = PopulateViewVariables(strCompareValue);
        objCompareValue = objCompareValue.split(',');
    }

    if (objValue.toString() == "Toreion.Interop.Framework.AutomationArray" || objValue.toString() == "AutomationArray")
    {
        for (var i = 0; i < objValue.Length; i++)
        {
            if (objValue.GetValue(i) != objCompareValue)
            {
                return true;
            }
        }
    }
    else if (objCompareValue.toString() == "Toreion.Interop.Framework.AutomationArray" || objCompareValue.toString() == "AutomationArray")
    {
        for (var i = 0; i < objCompareValue.Length; i++)
        {
            if (objValue.length > 0)
            {
                for (var j = 0; j < objValue.length; j++)
                {
                    if (objCompareValue.GetValue(i) != objValue[j])
                    {
                        return true;
                    }
                }
            }
            else
            {
                if (objCompareValue.GetValue(i) != objValue)
                {
                    return true;
                }
            }
        }
    }
    else if (objValue.length > 1)
    {
        for (var i = 0; i < objValue.length; i++)
        {
            if (objValue[i] != objCompareValue)
            {
                return true;
            }
        }
    }
    else
    {
        if (objValue != objCompareValue)
            return true;
    }

    return false;
}

function EventManager_AddListenerProperty(strKey, strValue) {
    
    AddFunctionCallLog("EventManager_AddListenerProperty");

    var objEventService = GetEventService();

    if (objEventService != null && objEventService != undefined) {
        
        objEventService.AddListenerProperty(strKey, strValue);
    }

    RemoveFunctionCallLog();
}

function GetEventService()
{
    AddFunctionCallLog("GetEventService");

    try
    {
        if ((window.g_EventService == undefined || window.g_EventService == null) && g_bIsEventServiceFrame)
        {
            window.g_EventService = new EventService();
        }

        if (window.g_EventService != undefined && window.g_EventService != null)
        {
            RemoveFunctionCallLog();
            return window.g_EventService;
        }
        else if (window.opener != undefined && window.opener.GetEventService != undefined)
        {
            RemoveFunctionCallLog();
            return window.opener.GetEventService();
        }

        var objEventServiceWindow = window;

        while (objEventServiceWindow != null)
        {
            try {
                var host = objEventServiceWindow.location.host;
                var hostParent = objEventServiceWindow.parent.location.host;
                var port = objEventServiceWindow.location.port;
                var portParent = objEventServiceWindow.parent.location.port;
                
                if (host == hostParent && port == portParent && objEventServiceWindow.parent != undefined && objEventServiceWindow.parent != null && objEventServiceWindow.parent != objEventServiceWindow)
                {
                    if (objEventServiceWindow.g_EventService != undefined && objEventServiceWindow.g_EventService != null)
                        break;
                    else
                    {
                        // attempt to set the variable if not already - check for access permissions
                        if (objEventServiceWindow.parent.g_EventService == undefined)
                        {
                            objEventServiceWindow.parent.g_EventService = undefined;
                        }

                        objEventServiceWindow = objEventServiceWindow.parent;
                    }
                }
                else
                    break;
            }
            catch (e)
            {
                break;
            }
        }
        
        if (objEventServiceWindow != null)
        {
            if (objEventServiceWindow.g_EventService == undefined)
            {
                objEventServiceWindow.g_EventService = new EventService();
                RemoveFunctionCallLog();
                return objEventServiceWindow.g_EventService;
            }

            RemoveFunctionCallLog();
            return objEventServiceWindow.g_EventService;
        }
        else if (parent != undefined && parent.GetEventService != null)
        {
            RemoveFunctionCallLog();
            return parent.GetEventService();
        }

        RemoveFunctionCallLog();
        return new EventService();

    }
    catch (e)
    {
        throw new Error(0, "GetEventService() - " + e.message);
    }

    //RemoveFunctionCallLog();
}

function FireEvent(objEvent, strTarget, strEventName, arrParameters)
{
    g_strLastKnownFunctionCall = "FireEvent";
    try
    {
        objEventService = GetEventService();

        if (objEventService != null && objEventService != undefined)
        {
            if (arrParameters != undefined)
            {
                var arr = null;
                for (var i = 0; i < arrParameters.length; i++)
                {
                    if (typeof (arrParameters[i][1]) == "object")
                    {
                        if (arrParameters[i][1].length == 1)
                            arr = GetVariable(arrParameters[i][1][0], objEvent, null, false, true);
                        else
                            arr = arrParameters[i][1];
                    }
                    else
                        arr = GetVariable(arrParameters[i][1], objEvent, null, false, true);

                    if (arr.length > 1)
                        arrParameters[i][1] = arr;
                    else if (arr.length == 1)
                        arrParameters[i][1] = arr[0];
                }
            }
            else
            {
                arrParameters = new Array();
            }

            objEventService.FireEvent(strTarget, strEventName, arrParameters, RecursiveGetTabGuid());
        }
    }
    catch (e)
    {
        throw new Error(0, "FireEvent() - " + e.message);
    }
}

function GetXMLHttpRequest()
{
    g_strLastKnownFunctionCall = "GetXMLHttpRequest";
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0)
    {
        var ver = parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)));
        if (ver < 7)
            return null;
        else
            return new XMLHttpRequest();
    }
    else
        return new XMLHttpRequest();
}

function PinMapperCtl_ChangePipelineTaskType(objEvent, strTarget, strTX_PipelineTaskTypeGuid, strTX_PipelineTaskGuid, strTX_PipelineGuid)
{
    try
    {
        var objTarget = null;

        objTarget = GetElementByObjectID(strTarget);

        if (objTarget == undefined || objTarget == null || objTarget.length == 0)
            objTarget = GetElementByObjectID("ctl_" + strTarget.replace(/-/g, ""));

        if (objTarget != undefined)
        {
            var arrObj = null;

            var objTX_PipelineTaskTypeGuid = GetVariable(strTX_PipelineTaskTypeGuid, objEvent, null);
            var objTX_PipelineTaskGuid = GetVariable(strTX_PipelineTaskGuid, objEvent, null);
            var objTX_PipelineGuid = GetVariable(strTX_PipelineGuid, objEvent, null);

            objTarget.ChangePipelineTaskType(objTX_PipelineTaskTypeGuid, objTX_PipelineTaskGuid, objTX_PipelineGuid);
        }
    }
    catch (e)
    {
        throw new Error(0, "PinMapperCtl_ChangePipelineTaskType() - " + e.message);
    }
}

function PinMapperCtl_AddPin(objEvent, strTarget, strPinName, strPinGuid, strDirection)
{
    try
    {
        var objTarget = null;

        objTarget = GetElementByObjectID(strTarget);

        if (objTarget == undefined || objTarget == null || objTarget.length == 0)
            objTarget = GetElementByObjectID("ctl_" + strTarget.replace(/-/g, ""));

        if (objTarget != undefined)
        {
            if (objEvent != null)
            {
                var objPinName = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strPinName));
                var objPinGuid = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strPinGuid));

                objTarget.AddPin(objPinName, objPinGuid, strDirection);
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "PinMapperCtl_AddPin() - " + e.message);
    }
}

function PinMapperCtl_RemovePin(objEvent, strTarget, strPinName, strPinGuid, strDirection, strAll)
{
    try
    {
        var objTarget = null;

        objTarget = GetElementByObjectID(strTarget);

        if (objTarget == undefined || objTarget == null || objTarget.length == 0)
            objTarget = GetElementByObjectID("ctl_" + strTarget.replace(/-/g, ""));

        if (objTarget != undefined)
        {
            if (objEvent != null)
            {
                var objPinName = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strPinName));
                var objPinGuid = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strPinGuid));
                
                objTarget.RemovePin(objPinName, objPinGuid, strDirection, strAll);
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "PinMapperCtl_RemovePin() - " + e.message);
    }
}

function PinMapperCtl_Save(objEvent, strTarget, strTX_PipelineTaskTypeGuid)
{
    try
    {
        var objTarget = null;

        objTarget = GetElementByObjectID(strTarget);

        if (objTarget == undefined || objTarget == null || objTarget.length == 0)
            objTarget = GetElementByObjectID("ctl_" + strTarget.replace(/-/g, ""));

        if (objTarget != undefined)
        {
            var arrObj = null;

            var objTX_PipelineTaskTypeGuid = GetVariable(strTX_PipelineTaskTypeGuid, objEvent, null);

            objTarget.Save(objTX_PipelineTaskTypeGuid);
        }
    }
    catch (e)
    {
        throw new Error(0, "PinMapperCtl_Save() - " + e.message);
    }
}

function WrapIntoDataItem(str) 
{
    try
    {
        g_strLastKnownFunctionCall = "WrapIntoDataItem";
        for (var i = 0; i < str.length; i++)
        {
            if (str.charCodeAt(i) > 255)
            {
                return "<DataItem EncodingType=\"CDATA-BASE64\"><![CDATA[" + ToBase64(str) + "]]></DataItem>";
                break;
            }
        }

        return "<DataItem><![CDATA[" + str + "]]></DataItem>";
    }
    catch (e) {
        throw new Error(0, "WrapIntoDataItem() - " + e.message);
    }
}

function PageDataTable_Finished()
{
    if (g_bIsPageDataTable && g_objPageDataTableReq != null && g_objPageDataTableReq.readyState == 4)
    {
        HideWaitWindow();

        if (g_objPageDataTableReq.status != 200)
        {
            switch (g_objPageDataTableReq.status)
            {
                case 12029:
                    MessageWindow(null, "Error : <span style=\"color:#CC0000\">The attempt to connect to the server failed.</span>", 'False', null, null, "True");
                    break;
                default:
                    if (g_objPageDataTableReq.statusText == "Unknown")
                        MessageWindow(null, "Error : <span style=\"color:#CC0000\">Could not connect to the server. Code[ " + g_objPageDataTableReq.status + " ]</span>", 'False', null, null, "True");
                    else
                        MessageWindow(null, "Error : <span style=\"color:#CC0000\">" + g_objPageDataTableReq.statusText + " Code[ " + g_objPageDataTableReq.status + " ]    </span>", 'False', null, null, "True");
                    break;
            }
        }

        g_bIsPageDataTable = false;
    }
}

function PageDataTable_Timeout()
{
    if (g_hPageDataTableTimeout != null)
    {
        clearTimeout(g_hPageDataTableTimeout);
        g_hPageDataTableTimeout = null;
    }

    if (g_bIsPageDataTable && g_objPageDataTableReq != null)
    {
        HideWaitWindow();

        MessageWindow(null, "Error : <span style=\"color:#CC0000\">Your request has timed out.</span>", 'False', null, null, "True");

        g_bIsPageDataTable = false;
    }
}

function GetQueryStringParameter(strKey)
{
    g_strLastKnownFunctionCall = "GetQueryStringParameter";
    var arrQueryString = document.location.search.substring(1).split('&');
    var arrKeyValue = null;

    for (var i = 0; i < arrQueryString.length; i++)
    {
        arrKeyValue = arrQueryString[i].split('=');

        if (arrKeyValue[0].toLowerCase() == strKey.toLowerCase() && arrKeyValue.length == 2)
        {
            return arrKeyValue[1];
        }
    }
}

function PageDataTable(strTarget, strType, strPageIndex)
{
    g_strLastKnownFunctionCall = "PageDataTable";
    g_objPageDataTableReq = GetXMLHttpRequest();

    if (g_objPageDataTableReq != null && !g_bIsPageDataTable)
    {
        g_bIsPageDataTable = true;

        var strWorkflowModuleGuid = GetQueryStringParameter("WorkflowModuleGuid");
        var strTokenGuid = GetQueryStringParameter("TokenGuid");

        var objTop = GetTopLevelWindow();
        objTop.g_bSuppressWaitWindow = false;
        setTimeout(ShowWaitWindow, 1500);

        g_objPageDataTableReq.onreadystatechange = PageDataTable_Finished;

        g_objPageDataTableReq.open("POST", "/TriggerWorkflow.aspx?WorkflowModuleGUID=" + strWorkflowModuleGuid + "&KeepSession=True&TokenGuid=" + strTokenGuid, true);
        g_objPageDataTableReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        var arrCurrentModuleID = document.getElementsByName("CurrentModuleID");

        var strForm = "DataTable:Action=Paging&DataTable:Type=" + strType + "&DataTable:Target=" + strTarget + "&CurrentModuleID=" + arrCurrentModuleID[0].value;

        g_objPageDataTableReq.send(strForm);
        g_hPageDataTableTimeout = setTimeout(PageDataTable_Timeout, 20000);
    }
}

function ContainsEventVariable(str)
{
    g_strLastKnownFunctionCall = "ContainsEventVariable";
    var nPosStart = -1;

    if ((nPosStart = str.indexOf("!")) > -1 && str.indexOf("!", nPosStart + 1) > -1)
        return true;

    return false;
}

function IsEventVariable(str)
{
    g_strLastKnownFunctionCall = "IsEventVariable";
    if (str.indexOf("!") > -1 && str.indexOf("!", str.length - 1) > -1)
        return true;

    return false;
}

function RemoveEventVariableDelimiters(str)
{
    g_strLastKnownFunctionCall = "RemoveEventVariableDelimiters";
    if (IsEventVariable(str))
        return str.substring(1, str.length - 1);

    return str;
}

function PopulateEvents(strName, objEvent, bUseXml, bUseArray) 
{
    try
    {
        AddFunctionCallLog("PopulateEvents");
        
        // check the events
        if (objEvent != null && objEvent != undefined && typeof(strName) == "string" )
        {
            var strKey = null;
            var strValue = null;
            var nPosStart = -1;
            var nPosEnd = -1;
            var arr = null;
            var strReturn = "";
            var arrReturn = new Array();

            for (var i = 0; i < strName.length; i++)
            {
                if (strName.charAt(i) == '!')
                {
                    if (nPosStart == -1)
                        nPosStart = i;
                    else
                    {
                        strValue = "";
                        strKey = strName.substring(nPosStart + 1, i);
                        
                        if ((bUseXml || bUseXml == "True") && objEvent.IsArray(strKey))
                        {
                            arr = objEvent.GetParameterArray(strKey);
                            
                            for (var x = 0; x < arr.Length; x++)
                                strValue += WrapIntoDataItem(arr.GetItem(x));
                        }
                        else if (bUseArray && objEvent.IsArray(strKey))
                        {
                            arr = objEvent.GetParameterArray(strKey);
                            
                            for (var x = 0; x < arr.Length; x++)
                                arrReturn[arrReturn.length] = arr.GetItem(x);
                        }
                        else
                        {
                            strValue = objEvent.GetParameter(strKey);
                        }

                        if (strValue == undefined)
                            strValue = "";

                        strReturn += strValue;
                        nPosStart = -1;
                    }
                }
                else if (nPosStart == -1)
                    strReturn += strName.charAt(i);
            }
            
            if (bUseArray) {
                if (arrReturn.length == 0) {
                    if (strReturn != "")
                        arrReturn[arrReturn.length] = strReturn;
                    else
                        arrReturn[arrReturn.length] = strName;
                }

                RemoveFunctionCallLog();
                return arrReturn;
            }
            else {
                RemoveFunctionCallLog();
                return strReturn;
            }
            /*
            while( ( nPosStart = strName.indexOf( "!" ) ) > -1 && ( nPosEnd = strName.indexOf( "!", nPosStart + 1 ) ) > -1 )
            {
            strValue = "";
            strKey = strName.substring( nPosStart + 1, nPosEnd );

                if ((bUseXml || bUseXml == "True") && objEvent.IsArray(strKey))
            {
            arr = objEvent.GetParameterArray(strKey);
            for (var i = 0; i < arr.Length; i++)
            strValue += WrapIntoDataItem(arr.GetItem(i));
            }
            else
            {
            strValue = objEvent.GetParameter( strKey );
            }
        		
		        if (strValue == undefined)
            strValue = "";

		        strName = strName.replace( "!" + strKey + "!", strValue );
    		    
	        }*/
        }
        RemoveFunctionCallLog();
        return strName;
    }
    catch (e) {
        throw new Error(0, "PopulateEvents() - " + e.message);
    }
}

function AutoResizePanel()
{
    g_strLastKnownFunctionCall = "AutoResizePanel";
    if (frameElement != null && frameElement != undefined)
    {
        frameElement.style.height = document.getElementById("WorkflowForm").offsetHeight + "px";
    }
}

function EventManagerStats()
{
    alert("EventManagerStats");
}

function InvalidateDataTablePaging(strTarget)
{
    g_strLastKnownFunctionCall = "InvalidateDataTablePaging";
    try
    {
        var objTarget = null;

        objTarget = GetElementByObjectIDAndTag(strTarget, "TABLE");

        if (objTarget != undefined)
        {
            var bFound = false;
            for (var i = 0; i < objTarget.rows.length; i++)
            {
                if (objTarget.rows[i].id.indexOf("wdttr_") == -1 && objTarget.rows[i].id.indexOf("wdter_") == -1 && objTarget.rows[i].id.indexOf("wdthr_") == -1 && objTarget.rows[i].id.indexOf("wdtpr_") == -1)
                {
                    bFound = true;
                    break;
                }
            }

            if (!bFound)
                FormSubmit(null, "False", null, "True");
            else
                AddPin("Page:DataTable:InvalidateDataTablePaging", "True", true);
        }
    }
    catch (e)
    {
        throw new Error(0, "InvalidateDataTablePaging() - " + e.message);
    }
}

function ToggleCheckBox(objSrcElement, strTarget)
{
    g_strLastKnownFunctionCall = "ToggleCheckBox";
    try
    {
        var objTarget = null;

        objTarget = GetElementByObjectIDAndTag(strTarget, "input");

        if (objTarget != undefined)
        {
            objTarget.checked = !objTarget.checked;
            if (objTarget.checked)
            {
                objSrcElement.src = objSrcElement.getAttribute("TrueSrc");
                objSrcElement.alt = "Sticky On";
            }
            else
            {
                objSrcElement.src = objSrcElement.getAttribute("FalseSrc");
                objSrcElement.alt = "Sticky Off";
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "ToggleCheckBox() - " + e.message);
    }
}

function SavePreventDefaultValue(evt)
{
    var curElem = evt.srcElement || evt.target;
    
    if (curElem)
        g_strTargetValue = curElem.value;
}

function PreventDefault(evt)
{
    // Don't let the default actions take place
    if (evt.preventDefault)
    {
        var curElem = evt.srcElement || evt.target;

        if (curElem && g_strTargetValue != null)
            curElem.value = g_strTargetValue;

        g_strTargetValue = null;
        
        evt.preventDefault();
        evt.stopPropagation();
    }
    else
    {
        document.onselectstart = function() { return false; };
        evt.cancelBubble = true;
    }
}

function SetFocus(strObjectID, strFocus, objEvent, objElement, strObjectIDPin, strTargetNotUnique)
{
    g_strLastKnownFunctionCall = "SetFocus";
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objArr == undefined || objArr == null || objArr.length == 0)
                    objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }

                if (objArr == undefined || objArr == null || objArr.length == 0)
                {
                    objArr = document.getElementsByName("ctl_" + strObjectID.replace(/-/g, ""));
                }
            }

            if (objArr != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        if (objArr[i].tagName == "OBJECT" || objArr[i].tagName == "EMBED")
                            objTarget[objTarget.length] = objArr[i];
                        else
                        {
                            for (var j = 0; j < objArrObjectIDPin.length; j++)
                            {
                                if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                    objTarget[objTarget.length] = objArr[i];
                            }
                        }
                    }
                    else if (objArr[i].tagName == "OBJECT" || objArr[i].tagName == "EMBED")
                        objTarget[objTarget.length] = objArr[i];
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                    objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }

                if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                {
                    objTarget = document.getElementsByName("ctl_" + strObjectID.replace(/-/g, ""));
                }
            }
        }

        if (objTarget != undefined)
        {
            var objTop = GetTopLevelWindow();

            for (var i = 0; i < objTarget.length; i++)
            {
                if (objEvent != null && IsEventVariable(strFocus))
                {
                    strFocus = objEvent.GetParameter(RemoveEventVariableDelimiters(strFocus));
                }
                else
                {
                    strFocus = GetVariable(strFocus, objEvent, objTarget[i]);
                }

                if (objTarget[i].tagName == "OBJECT" || objTarget[i].tagName == "EMBED")
                {
                    if (strFocus == "True")
                        objTop.g_objFocusedElement = objTarget[i];

                    objTarget[i].SetFocus(strObjectID, strObjectIDPin, strFocus);
                }
                else if (strFocus == "True")
                {
                    objTop.g_objFocusedElement = objTarget[i];
                    objTarget[i].focus();
                }
                else
                {
                    objTarget[i].blur();
                }
            }
        }
    }
    catch (e)
    {
        throw new Error(0, "SetFocus() - " + e.message);
    }
}

function ChangeProperties(strObjectID, strObjectIDPin, strTargetNotUnique, objEvent, strWidth, strHeight)
{
    AddFunctionCallLog("ChangeProperties");
    try
    {
        var objTarget = null;

        if (strObjectID != null && strObjectID != undefined && strObjectID != '' && strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));
            else
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, null, false);

            var objArr = null;
            objTarget = new Array();

            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objArr = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objArr == undefined || objArr == null || objArr.length == 0)
                    objArr = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*
                objArr = GetElementsByObjectID(strObjectID);

                if( objArr == undefined || objArr == null || objArr.length == 0 )
                objArr = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objArr = new Array();
                    objArr[objArr.length] = obj;
                }
            }

            if (objTarget != null)
            {
                for (var i = 0; i < objArr.length; i++)
                {
                    if (objArrObjectIDPin != null)
                    {
                        for (var j = 0; j < objArrObjectIDPin.length; j++)
                        {
                            if (objArr[i].getAttribute("IDPin") == objArrObjectIDPin.GetValue(j))
                                objTarget[objTarget.length] = objArr[i];
                        }
                    }
                    else if (objArr[i].getAttribute("IDPin") == strObjectIDPin)
                        objTarget[objTarget.length] = objArr[i];
                }
            }
        }
        else if (strObjectIDPin != null && strObjectIDPin != undefined && strObjectIDPin != '')
        {

            var obj = null;
            var objArrObjectIDPin = null;

            if (objEvent != null && IsEventVariable(strObjectIDPin))
            {
                objArrObjectIDPin = objEvent.GetParameterArray(RemoveEventVariableDelimiters(strObjectIDPin));

                if (objArrObjectIDPin != null)
                {
                    objTarget = new Array();
                    for (var i = 0; i < objArrObjectIDPin.length; i++)
                    {
                        obj = GetElementByIDPin(objArrObjectIDPin.GetValue(i));

                        if (obj != undefined)
                        {
                            objTarget[objTarget.length] = obj;
                        }
                    }
                }
            }
            else
            {
                strObjectIDPin = GetVariable(strObjectIDPin, objEvent, objElement, false);

                objTarget = GetElementsByIDPin(strObjectIDPin);
            }
        }
        else if (strObjectID != null && strObjectID != undefined && strObjectID != "")
        {
            if (strTargetNotUnique == "True")
            {
                var objTmp = GetElementByObjectID(strObjectID);

                objTarget = GetElementsByObjectIDAndTag(strObjectID, objTmp.tagName);

                if (objTarget == undefined || objTarget == null || objTarget.length == 0)
                    objTarget = GetElementsByObjectIDAndTag("ctl_" + strObjectID.replace(/-/g, ""), objTmp.tagName);

                /*
                objTarget = GetElementsByObjectID(strObjectID);

                if( objTarget == undefined || objTarget == null || objTarget.length == 0 )
                objTarget = GetElementsByObjectID( "ctl_" + strObjectID.replace(/-/g,"") );*/
            }
            else
            {
                var obj = GetElementByObjectID(strObjectID);

                if (obj == undefined || obj == null)
                    obj = GetElementByObjectID("ctl_" + strObjectID.replace(/-/g, ""));

                if (obj != undefined)
                {
                    objTarget = new Array();
                    objTarget[objTarget.length] = obj;
                }
            }
        }

        if (objTarget != undefined)
        {
            var arrObj = null;

            for (var i = 0; i < objTarget.length; i++)
            {
                if (strWidth != null && strWidth != "" && strWidth != undefined)
                    objTarget[i].style.width = strWidth;

                if (strHeight != null && strHeight != "" && strHeight != undefined)
                    objTarget[i].style.height = strHeight;
            }
        }

        //ResizePage();
    }
    catch (e)
    {
        throw new Error(0, "ChangeProperties() - " + e.message);
    }
    RemoveFunctionCallLog();
}

function UTF8Encode(input)
{
    AddFunctionCallLog("UTF8Encode");
    input = input.replace(/\x0d\x0a/g, "\x0a");
    var output = "";

    for (var n = 0; n < input.length; n++)
    {
        var c = input.charCodeAt(n);
        if (c < 128)
        {
            output += String.fromCharCode(c);
        } else if ((c > 127) && (c < 2048))
        {
            output += String.fromCharCode((c >> 6) | 192);
            output += String.fromCharCode((c & 63) | 128);
        } else
        {
            output += String.fromCharCode((c >> 12) | 224);
            output += String.fromCharCode(((c >> 6) & 63) | 128);
            output += String.fromCharCode((c & 63) | 128);
        }
    }
    RemoveFunctionCallLog();
    return output;
}

function ToBase64(input)
{
    AddFunctionCallLog("ToBase64");
    var keyString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;

    input = UTF8Encode(input);

    while (i < input.length)
    {
        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        chr3 = input.charCodeAt(i++);
        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;
        if (isNaN(chr2))
        {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3))
        {
            enc4 = 64;
        }
        output = output + keyString.charAt(enc1) + keyString.charAt(enc2) + keyString.charAt(enc3) + keyString.charAt(enc4);
    }
    RemoveFunctionCallLog();
    return output;
}

function UTF8Decode(input)
{
    AddFunctionCallLog("UTF8Decode");

    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;
    while (i < input.length)
    {
        c = input.charCodeAt(i);
        if (c < 128)
        {
            string += String.fromCharCode(c);
            i++;
        } else if ((c > 191) && (c < 224))
        {
            c2 = input.charCodeAt(i + 1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        } else
        {
            c2 = input.charCodeAt(i + 1);
            c3 = input.charCodeAt(i + 2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }

    RemoveFunctionCallLog();

    return string;
}

function FromBase64(input)
{
    AddFunctionCallLog("FromBase64");

    var keyString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;
    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    while (i < input.length)
    {
        enc1 = keyString.indexOf(input.charAt(i++));
        enc2 = keyString.indexOf(input.charAt(i++));
        enc3 = keyString.indexOf(input.charAt(i++));
        enc4 = keyString.indexOf(input.charAt(i++));
        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;
        output = output + String.fromCharCode(chr1);
        if (enc3 != 64)
        {
            output = output + String.fromCharCode(chr2);
        }
        if (enc4 != 64)
        {
            output = output + String.fromCharCode(chr3);
        }
    }
    output = UTF8Decode(output);

    RemoveFunctionCallLog();

    return output;
}

function DelayRepeatedExecution(strDelay, strCallGuid, strCall, bTimeout)
{
    AddFunctionCallLog("DelayRepeatedExecution");

    var entry = g_arrDelayRepeatedExecutionCalls[strCallGuid];

    if (entry == null)
    {
        g_arrDelayRepeatedExecutionCalls[strCallGuid] = new Array(new Date(), strCall);
        setTimeout("DelayRepeatedExecution('" + strDelay + "', '" + strCallGuid + "', '', true)", strDelay);
        //eval(strCall);
    }
    else if (bTimeout)
    {
        eval(g_arrDelayRepeatedExecutionCalls[strCallGuid][1]);
    }
    else
    {
        var d = new Date();
        if (d.getTime() - entry[0].getTime() < parseInt(strDelay))
        {
            g_arrDelayRepeatedExecutionCalls[strCallGuid][1] = strCall;
        }
        else
        {
            g_arrDelayRepeatedExecutionCalls[strCallGuid] = new Array(new Date(), strCall);
            setTimeout("DelayRepeatedExecution('" + strDelay + "', '" + strCallGuid + "', '', true)", strDelay);
            //eval(strCall);
        }
    }

    RemoveFunctionCallLog();
}

function PauseEventService()
{
    if (!g_bPausedEventService)
    {
        g_bPausedEventService = true;
        if (window.GetEventService != null && window.GetEventService != undefined)
        {
            var eventService = window.GetEventService();

            if (eventService != null && eventService != undefined)
                eventService.Pause();
        }
    }
}

function ResumeEventService()
{
    g_bPausedEventService = false;
    if (window.GetEventService != null && window.GetEventService != undefined) {
        var eventService = window.GetEventService();

        if (eventService != null && eventService != undefined)
        eventService.Resume();
    }
}

