    var gAWDragDropMetadata = new Array();
    var AWDragImage;
    var AWDragDiv;
    var AWPreviousDrop = new Object();
    var AWDropPrefix = "awDrp_";
    var AWDragPrefix = "awDrg_";
    var AWDragContentPrefix = "awDrgCnt_";
    var AWDragParent = "awDrgPrt";
    var AWDropStylePrefix = "awds_";
    function awdReleaseDragDiv (isDropAction)
    {
        _awdHideDragScrollDebug();
        document.body.removeChild(AWDragDiv);
        AWDragDiv = null;
    }
    function awdShowDragDiv ()
    {
        AWDragDiv.style.visibility  = "visible";
        AWDragDiv.style.filter = "alpha(opacity=050)";
    }
    function awdClearPreviousDrop ()
    {
        if (AWPreviousDrop.container) {
            awRemoveClass(AWPreviousDrop.container,AWPreviousDrop.style);
            AWPreviousDrop.container = null;
            AWPreviousDrop.style = null;
        }
    }
    function awdCreateDragDiv (evt, dragObject, dragPrefix, dragId)
    {
        AWDragDiv = document.createElement("div");
        AWDragDiv.id = "AWDragDiv";
        document.body.appendChild(AWDragDiv);
        AWDragDiv.style.position="absolute";
        AWDragDiv.initX = evt.clientX;
        AWDragDiv.initY = evt.clientY;
        AWDragDiv.style.visibility = "hidden";
        AWDragDiv.dragObject = dragObject;
        var classArray = dragObject.className.split(" ");
        for (var i=0; i < classArray.length; i++) {
            if (classArray[i].indexOf(dragPrefix) == 0) {
                AWDragDiv.dragType = classArray[i].substr(dragPrefix.length);
            }
        }
        AWDragDiv.srcId = dragId ? dragId : dragObject.id;
        AWDragDiv.style.width = dragObject.offsetWidth + "px";
        AWDragDiv.style.height = dragObject.offsetHeight;
    }
    var AWEventTarget;
    function awMouseDownEvtWrapper (target, evt)
    {
        var handled = false;
        var evt = (evt) ? evt : event;
        var target = (evt.target) ? evt.target: evt.srcElement;
        AWDCanceledDrag = false;
        awdMouseDownEvtHandler(evt);
        if (arguments.length > 2) {
            var fun = arguments[2];
            var args = arguments[3];
            fun.apply(null,args);
        }
        return !handled;
    }
    function awMouseDownEvtHandler (evt)
    {
        var handled = false;
        var evt = (evt) ? evt : event;
        var target = (evt.target) ? evt.target: evt.srcElement;
        AWDCanceledDrag = false;
        if (AWDragDiv) {
            awdReleaseDragDiv();
        }
        awdClearPreviousDrop();
        return !handled;
    }
    function awMouseUpEvtHandler (evt)
    {
        var handled = false;
        var evt = (evt) ? evt : event;
        var target = (evt.target) ? evt.target: evt.srcElement;
        if (AWDragDiv) {
            if (AWDragDiv.style.visibility == "visible") {
                AWDisableMouseClick = true;
            }
            awdReleaseDragDiv();
            handled = true;
        }
        awdClearPreviousDrop();
        evt.cancelBubble = handled;
        return !handled;
    }
    function awMouseMoveEvtHandler (evt)
    {
        var handled = false;
        var evt = (evt) ? evt : event;
        var target = (evt.target) ? evt.target: evt.srcElement;
        if (AWDragDiv) {
            awdDragDivMoved(evt);
            AWDragDiv.droppable(false);
            AWDragDiv.style.left=(evt.clientX + document.body.scrollLeft)+"px";
            AWDragDiv.style.top=(evt.clientY + awgetPageScrollTop())+ "px";
            handled = true;
            awdDragScroll(evt);
        }
        awdClearPreviousDrop();
        evt.cancelBubble = handled;
        return !handled;
    }
    function awdMouseDownEvtHandler (evt)
    {
        var handled = false;
        var evt = (evt) ? evt : event;
        var target = (evt.target) ? evt.target: evt.srcElement;
        AWDisableMouseClick = false;
        var div = _awFindParentUsingPredicate(target, function(n) {
            return n.className && n.className.indexOf(AWDragPrefix) != -1;
        }, true);
        if (div) {
            var dragId = div.id;
            var dragPrefix = AWDragPrefix;
            if (div.className.indexOf(AWDragParent) != -1) {
                var parent = _awFindParentUsingPredicate(target, function(n) {
                    return n.className && n.className.indexOf(AWDragContentPrefix) != -1;
                }, true);
                if (parent) {
                    div = parent;
                    dragPrefix = AWDragContentPrefix;
                }
            }
            awdCreateDragDiv(evt,div,dragPrefix,dragId);
            if (div.tagName == "TR") {
                AWDragDiv.innerHTML = "<table>" + div.innerHTML + "</table>";
            } else {
                AWDragDiv.innerHTML = div.innerHTML;
            }
            AWDragDiv.style.border = "1px solid black";
            AWDragDiv.style.backgroundColor = "#FFFFFF";
            AWDragDiv.droppable = function (isDroppable) {
                if (isDroppable) {
                }
                else {
                }
            }
            AWDragDiv.pageHeight = awdocumentElement().scrollHeight;
            AWDragDiv.pageWidth  = awdocumentElement().scrollWidth;
            awdClearPreviousDrop();
            handled = true;
        }
        evt.cancelBubble = handled;
        return !handled;
    }
    function awdMouseUpEvtHandler (evt)
    {
        var handled = false;
        var evt = (evt) ? evt : event;
        var target = (evt.target) ? evt.target: evt.srcElement;
        if (AWDragDiv) {
            if (AWDragDiv.style.visibility != "visible") {
                awdReleaseDragDiv();
            }
            else {
                AWDisableMouseClick = true;
                var dropContainer = awdFindDropContainer(target,AWDropPrefix);
                handled = awdHandleDropAction(dropContainer,evt,AWDropPrefix);
            }
        }
        evt.cancelBubble = handled;
        return !handled;
    }
    function awdHandleDropAction (dropContainer,evt,dropPrefix)
    {
        var handled = false;
        if (awdIsDropContainerValid(dropContainer,dropPrefix)) {
            var senderId = AWDragDiv.srcId + "," + dropContainer.id;
            awInvoke (dropContainer, senderId, evt);
            awdReleaseDragDiv(true);
            handled = true;  
        }
        return handled;
    }
    function awdRemoveFormField (formObject, fieldId)
    {
        var inputObject = formObject[fieldId];
        formObject.removeChild(inputObject);
    }
    function awdFindDropContainer (target,dropPrefix)
    {
        return _awFindParentUsingPredicate(target, function(n) {
            return n.className && n.className.indexOf(dropPrefix) != -1;
        },true);
    }
    var AWDropStyle = "dropAreaSelected";
    var AWDragDelta = 10;
    function awdDragDivMoved (evt)
    {
        if (AWDragDiv.style.visibility == "visible")
            return true;
        var moved = false;
        var currX = evt.clientX;
        var currY = evt.clientY;
        if (currX < AWDragDiv.initX) {
            moved = (AWDragDiv.initX - currX > AWDragDelta);
        }
        else {
            moved = (currX - AWDragDiv.initX > AWDragDelta);
        }
        if (!moved) {
            if (currY < AWDragDiv.initY) {
                moved = (AWDragDiv.initY - currY > AWDragDelta);
            }
            else {
                moved = (currY - AWDragDiv.initY > AWDragDelta);
            }
        }
        if (moved) {
            if (AWDragDiv.style.visibility != "visible") {
                awdShowDragDiv();
            }
        }
        return moved;
    }
    function awdIsDropContainerValid (dropContainer,dropPrefix)
    {
        if (!AWDragDiv.dragType) {
            return dropContainer.className.indexOf(dropPrefix) == -1;
        }
        var classArray = dropContainer.className.split(" ");
        for(var i=0; i < classArray.length; i++) {
            if (classArray[i] && classArray[i].indexOf(dropPrefix) == 0) {
                var dropType = classArray[i].substr(dropPrefix.length);
                if (dropType == AWDragDiv.dragType) {
                    return true;
                }
            }
        }
        return false;
    }
    function awdDropContainerStyle (dropContainer)
    {
        var dropStyle = AWDropStyle;
        if (dropContainer.className) {
            var classArray = dropContainer.className.split(" ");
            for(var i=0; i < classArray.length; i++) {
                if (classArray[i].indexOf(AWDropStylePrefix) == 0) {
                    dropStyle = classArray[i].substr(AWDropStylePrefix.length);
                    break;
                }
            }
        }
        return dropStyle;
    }
    function awdMouseMoveEvtHandler (evt)
    {
        var handled = false;
        var evt = (evt) ? evt : event;
        var target = (evt.target) ? evt.target: evt.srcElement;
        if (AWDragDiv && awdDragDivMoved(evt)) {
            var dropContainer = awdFindDropContainer(target,AWDropPrefix);
            if (awdIsDropContainerValid(dropContainer,AWDropPrefix)) {
                AWDragDiv.droppable(true);
                AWDragDiv.style.left=(evt.clientX + document.body.scrollLeft)+ "px";
                AWDragDiv.style.top=(evt.clientY + awgetPageScrollTop())+ "px";
                if (!AWPreviousDrop.container || AWPreviousDrop.container != dropContainer) {
                    awdClearPreviousDrop();
                    var dropStyle = awdDropContainerStyle(dropContainer);
                    awAddClass(dropContainer,dropStyle);
                    AWPreviousDrop.container=dropContainer;
                    AWPreviousDrop.style=dropStyle;
                }
                handled = true;
            }
            awdDragScroll(evt);
        }
        evt.cancelBubble = handled;
        return !handled;
    }
    function _awdHideDragScrollDebug ()
    {
        var topDebugDiv = awgetElementById("awdDragScrollTop");
        if (topDebugDiv) {
            topDebugDiv.style.visibility  = "hidden";
        }
        var bottomDebugDiv = awgetElementById("awdDragScrollBottom");
        if (bottomDebugDiv) {
            bottomDebugDiv.style.visibility  = "hidden";
        }
        var leftDebugDiv = awgetElementById("awdDragScrollLeft");
        if (leftDebugDiv) {
            leftDebugDiv.style.visibility  = "hidden";
        }
        var rightDebugDiv = awgetElementById("awdDragScrollRight");
        if (rightDebugDiv) {
            rightDebugDiv.style.visibility  = "hidden";
        }
    }
    function _awdShowDragScrollDebug (scrollDragHeight, scrollDragWidth)
    {
        var topDebugDiv = awgetElementById("awdDragScrollTop");
        if (!topDebugDiv) {
            topDebugDiv = document.createElement("div");
            topDebugDiv.id = "awdDragScrollTop";
            topDebugDiv.style.border = "1px red solid";
            topDebugDiv.style.position = "absolute";
            topDebugDiv.style.width = (awdocumentElement().clientWidth-2) + "px";
            topDebugDiv.style.height = scrollDragHeight + "px";
            document.body.appendChild(topDebugDiv);
        }
        topDebugDiv.style.left = awgetPageScrollLeft() + "px";
        topDebugDiv.style.top = awgetPageScrollTop() + "px";
        topDebugDiv.style.visibility  = "visible";
        var bottomDebugDiv = awgetElementById("awdDragScrollBottom");
        if (!bottomDebugDiv) {
            bottomDebugDiv = document.createElement("div");
            bottomDebugDiv.id = "awdDragScrollBottom";
            bottomDebugDiv.style.border = "1px red solid";
            bottomDebugDiv.style.position = "absolute";
            bottomDebugDiv.style.width = (awdocumentElement().clientWidth-2) + "px";
            bottomDebugDiv.style.height = scrollDragHeight + "px";
            document.body.appendChild(bottomDebugDiv);
        }
        bottomDebugDiv.style.left = awgetPageScrollLeft() + "px";
        bottomDebugDiv.style.top = (awgetPageScrollTop() + awdocumentElement().clientHeight - scrollDragHeight) + "px";
        bottomDebugDiv.style.visibility  = "visible";
        var leftDebugDiv = awgetElementById("awdDragScrollLeft");
        if (!leftDebugDiv) {
            leftDebugDiv = document.createElement("div");
            leftDebugDiv.id = "awdDragScrollLeft";
            leftDebugDiv.style.border = "1px red solid";
            leftDebugDiv.style.position = "absolute";
            leftDebugDiv.style.width = scrollDragWidth + "px"
            leftDebugDiv.style.height = (awdocumentElement().clientHeight-2) + "px";
            document.body.appendChild(leftDebugDiv);
        }
        leftDebugDiv.style.top = awgetPageScrollTop() + "px";
        leftDebugDiv.style.left = awgetPageScrollLeft() + "px";
        leftDebugDiv.style.visibility  = "visible";
        var rightDebugDiv = awgetElementById("awdDragScrollRight");
        if (!rightDebugDiv) {
            rightDebugDiv = document.createElement("div");
            rightDebugDiv.id = "awdDragScrollRight";
            rightDebugDiv.style.border = "1px red solid";
            rightDebugDiv.style.position = "absolute";
            rightDebugDiv.style.width = scrollDragWidth + "px"
            rightDebugDiv.style.height = (awdocumentElement().clientHeight-2) + "px";
            document.body.appendChild(rightDebugDiv);
        }
        rightDebugDiv.style.top = awgetPageScrollTop() + "px";
        rightDebugDiv.style.left = (awgetPageScrollLeft() + awdocumentElement().clientWidth - scrollDragWidth) + "px";
        rightDebugDiv.style.visibility  = "visible";
    }
    function awdDragScroll (evt)
    {
        if (!AWDragDiv) {
            return;
        }
        var scrollDragHeight = 100;
        var scrollDragWidth = 100;
        if (evt.ctrlKey) {
            _awdShowDragScrollDebug(scrollDragHeight, scrollDragWidth);
        }
        else {
            _awdHideDragScrollDebug();
        }
        var clientHeight = awdocumentElement().clientHeight;
        var pageHeight = AWDragDiv.pageHeight;
        var scrollTop = awgetPageScrollTop();
        if (evt.clientY < 100 && scrollTop != 0) {
            var move =  (evt.clientY == 0) ? scrollTop : ((100-evt.clientY)/100)*scrollTop;
            awsetPageScrollTop(scrollTop - move);
        }
        else if (clientHeight - evt.clientY < 100 &&
                 (pageHeight - (scrollTop + evt.clientY)) > 5 ) {
            var distance = clientHeight - evt.clientY;
            var maxMove = pageHeight - clientHeight - scrollTop;
            var move =  (evt.clientY == clientHeight) ? maxMove : ((100-distance)/100)*maxMove;
            awsetPageScrollTop(scrollTop + move);
        }
        var clientWidth = awdocumentElement().clientWidth;
        var pageWidth = AWDragDiv.pageWidth;
        var scrollLeft = awgetPageScrollLeft();
        if (evt.clientX < 100 && scrollLeft != 0) {
            var move =  (evt.clientX == 0) ? scrollLeft : ((100-evt.clientX)/100)*scrollLeft;
            awsetPageScrollLeft(scrollLeft - move);
        }
        else if (clientWidth - evt.clientX < 100 &&
                 (pageWidth - (scrollLeft + evt.clientX)) > 5 ) {
            var distance = clientWidth - evt.clientX;
            var maxMove = pageWidth - clientWidth - scrollLeft;
            var move =  (evt.clientX == clientWidth) ? maxMove : ((100-distance)/100)*maxMove;
            awsetPageScrollLeft(scrollLeft + move);
        }
    }
    function awdOnClickEvtHandler (evt)
    {
        var evt = (evt) ? evt : event;
        var target = (evt.target) ? evt.target: evt.srcElement;
        var handled = false;
        evt.cancelBubble = handled;
        return !handled;
    }

    function awRegisterDragIcon (id, imageId)
    {
        if (!AWDragImage) {
            AWDragImage = new Object();
        }
        AWDragImage[id] = awgetElementById(imageId);
    }
    function awRegisterDropDeniedIcon (imageId)
    {
        AWDragDeniedImage = awgetElementById(imageId);
    }
    function awdRegisterDropContainer (id)
    {
        if (awIsNetscape()) {
            return;
        }
        var container = awgetElementById(id);
        if (container) {
            container.onmouseup   = awdMouseUpEvtHandler;
            container.onmousemove = awdMouseMoveEvtHandler;
            container.onclick     = awdOnClickEvtHandler;
        }
        else if (AWDebugEnabled) {
            alert("unable to find AWDropContainer: " + id);
        }
    }
    function awdRegisterDragContainer (id)
    {
        if (awIsNetscape()) {
            return;
        }
        var container = awgetElementById(id);
        if (container) {
            container.onmousedown = awdMouseDownEvtHandler;
        }
        else if (AWDebugEnabled) {
            alert("unable to find AWDropContainer: " + id);
        }
    }
    var AWDELETE   = "d";
    var AWINSERT   = "i";
    var AWPREVIOUS = "p";
    var AWSOURCE   = "s";
    var AWDomSyncData = new Object();
    var AWDomScopeUpdateList = new Object();
    var AWDomUpdateScriptList;
    var AWDomCompleteCallbackList;
    var AWDomCompleteCallbackListArgs;
    var AWIsScopeUpdate = false;
    var AWRefreshStartTime;
    function _awdomScopeUpdate (poSource)
    {
        var tmpDiv = document.createElement("div");
        tmpDiv.innerHTML = poSource.outerHTML;
        var target = awgetElementById(poSource.id);
        if (target) {
            target.outerHTML = tmpDiv.innerHTML;
        }
        else {
            alert("scopeUpdate target not found: " + poSource.id);
        }
    }
    function _awFindRow (poTBody, sId)
    {
        var row;
        var children = poTBody.childNodes;
        for (var i=0; i<children.length; i++) {
            if (children[i].id == sId) {
                row = children[i];
                break;
            }
        }
        return row;
    }
    function awFindRowIndex (sId, poTable)
    {
        var index = -1;
        var rows = poTable.rows;
        for (var i=0; i < rows.length; i++) {
            if (rows[i].id == sId) {
                index = i;
                break;
            }
        }
        return index;
    }
    function _awFindElement (poArray, id)
    {
        if (!poArray)
            return null;
        for (var i=0; i < poArray.length; i++) {
            if (poArray[i].id == id) {
                return poArray[i];
            }
        }
        return null;
    }
    function _awreplaceRows (poSourceTable, poTargetTable)
    {
        var targetTBody = _awFindChild(poTargetTable, "TBODY");
        var sourceRows = _awFindChild(poSourceTable, "TBODY").childNodes;
        var elementDomSyncData = _awFindDomSyncElementData(poSourceTable.id)
        var insertArray = elementDomSyncData[AWINSERT];
        for (var i=0; insertArray && i < insertArray.length; i++) {
            var element = _awFindElement(sourceRows, insertArray[i].AWSOURCE);
            var target = null;
            if (insertArray[i].AWPREVIOUS == "null") {
                var rows = targetTBody.childNodes;
                var rowNum=0;
                while (rowNum < rows.length) {
                    var row = rows[rowNum++];
                    if (row.id != "") {
                        target = row;
                        break;
                    }
                }
            }
            else {
                var target = awgetElementById(insertArray[i].AWPREVIOUS);
                target = target.nextSibling;
            }
            if (target) {
                targetTBody.insertBefore(element,target);
            }
            else {
                targetTBody.appendChild(element);
            }
        }
        var i = 0;
        while (i<sourceRows.length) {
            var sourceRow = sourceRows[i];
            if (sourceRow.nodeName == "TR") {
                var targetRow = _awFindRow(targetTBody, sourceRow.id);
                if (targetRow == null) {
                    i++;
                }
                else {
                    targetTBody.replaceChild(sourceRow,targetRow);
                }
            }
            else {
                i++;
            }
        }
    }
    function _awHandleUpdateError (sId)
    {
        var shouldDebug = false;
        if (AWDebugEnabled) {
            shouldDebug = confirm("AW: Error detected during update. Unable to find element '" + sId + "'. Debug?");
        }
        if (shouldDebug) {
            var refreshFrame = awgetElementById("AWRefreshFrame");
            refreshFrame.height = "200px";
            refreshFrame.width = "500px";
            AWShowRequestFrame = true;
        }
        else {
            top.location.href = top.appendFrameName(top.AWRefreshUrl);
        }
        return false;
    }
    function awDomRefreshContentCallback ()
    {
        if (AWJSDebugEnabled) {
            AWRefreshStartTime = (new Date()).getTime();
        }
        if (!awisNullOrUndefined(AWDomSyncData)) {
            for (var elementId in AWDomSyncData) {
                var elementDomSyncData = AWDomSyncData[elementId];
                var deleteArray = elementDomSyncData[AWDELETE];
                if (deleteArray) {
                    var target = awgetElementById(elementId);
                    var targetTBody = _awFindChild(target, "TBODY");
                    for (var i=0; i < deleteArray.length; i++) {
                        var child = awgetElementById(deleteArray[i]);
                        if (awisNullOrUndefined(child)) {
                            return _awHandleUpdateError(deleteArray[i]);
                        }
                        targetTBody.removeChild(child);
                    }
                }
            }
        }
        var refreshFrame = awgetElementById("AWRefreshFrame");
        var body = _awFindChild(refreshFrame.contentWindow.document, "BODY");
        if (body != null) {
            var refreshNodes = body.childNodes;
            for (var i=0; i < refreshNodes.length; i++) {
                var source = refreshNodes[i];
                if (!source.id) {
                    continue;
                }
                var target = awgetElementById(source.id);
                if (awisNullOrUndefined(target)) {
                    return _awHandleUpdateError(source.id);
                }
                if (target.ignore == "true") {
                    continue;
                }
                if (AWDomScopeUpdateList &&
                    AWDomScopeUpdateList[source.id] == "true") {
                    _awdomScopeUpdate(source);
                }
                else if (target.nodeName == "TABLE") {
                    _awrefreshTable(source,target);
                }
                else if (target.nodeName == "DIV" || target.nodeName == "SPAN") {
                    var scrollTop = target.scrollTop;
                    target.innerHTML = source.innerHTML;
                    if (scrollTop) {
                        target.scrollTop = scrollTop;
                    }
                }
                else if (awIsNetscape() && target.nodeName == "PRE") {
                    target.innerHTML = source.innerHTML;
                }
                else {
                    _awHandleUpdateError(source.id);
                }
            }
        }
        AWDomSyncData = null;
        AWDomScopeUpdateList = null;
    }
    var AWWindowLoadStartTime;
    var AWWindowOnLoad = false;
    function awWindowOnLoad ()
    {
        AWWindowOnLoad = true;
        AWWindowLoadStartTime = (new Date()).getTime();
        awDomRefreshComplete();
        AWWindowOnLoad = false;
    }
    var AWOnRefreshCallbacks;
    var AWVBScriptOnLoad;
    function awDomRegisterRefreshCallback (f)
    {
        if (!AWOnRefreshCallbacks) {
            AWOnRefreshCallbacks = new Array(f);
        }
        else {
            AWOnRefreshCallbacks[AWOnRefreshCallbacks.length] = f;
        }
    }
    function awDomRegisterVBScriptRefreshCallback (name)
    {
        awDomRegisterRefreshCallback( function() { GlobalEvalVBScript(name); } );
    }
    function awDomRegisterVBScriptOnLoad (name)
    {
        AWVBScriptOnLoad = name;
    }
    function awDomRefreshComplete ()
    {
        if (AWDomUpdateScriptList) {
            for (var i=0; i < AWDomUpdateScriptList.length; i++) {
                var id = AWDomUpdateScriptList[i];
                AWIsScopeUpdate =
                    AWDomScopeUpdateList ? (AWDomScopeUpdateList[id] == "true") : false;
                var pre = awgetElementById(id);
                if (pre.isVBScript == "1") {
                    GlobalEvalVBScript(pre.innerText);
                } else {
                    eval(pre.innerText);
                }
                try {
                }
                catch (e) {
                    var msg = "unable to evaluate script at id: " + id;
                    if (pre && pre.innerText) {
                        msg += "\n\n" + pre.innerText;
                    }
                    alert(msg);
                }
            }
            AWDomUpdateScriptList = null;
        }
        if (AWDomCompleteCallbackList) {
            for (var i=0; i < AWDomCompleteCallbackList.length; i++) {
                if (AWDomCompleteCallbackListArgs[i]) {
                    AWDomCompleteCallbackList[i].apply(null,AWDomCompleteCallbackListArgs[i]);
                }
                else {
                    AWDomCompleteCallbackList[i]();
                }
                try {
                }
                catch (e) {
                    alert("unable to evaluate: " + AWDomCompleteCallbackList[i]);
                }
            }
            AWDomCompleteCallbackList = null;
        }
        if (AWOnRefreshCallbacks) {
            for (var i=0; i < AWOnRefreshCallbacks.length; i++) {
                try {
                    AWOnRefreshCallbacks[i]();
                }
                catch (e) {
                    alert("Exception in Refresh Callback: " + e.message + AWOnRefreshCallbacks[i]);
                }
            }
        }
        if (AWVBScriptOnLoad) {
            try {
                GlobalEvalVBScript(AWVBScriptOnLoad);
            }
            catch (e) {
                alert("Exception in VBScript OnLoad Callback: " + e.message + AWVBScriptOnLoad);
            }
        }
        awhideWaitCursor();
    }
    function _awFindDomSyncElementData (parentBufferName)
    {
        if (AWDomSyncData == null) {
            AWDomSyncData = new Object();
        }
        if (!AWDomSyncData[parentBufferName]) {
            AWDomSyncData[parentBufferName] = new Object();
        }
        return AWDomSyncData[parentBufferName];
    }
    function awDomRegisterInsert (parentBufferName, previousChildBufferName, insertedElementName)
    {
        var elementDomSyncData = _awFindDomSyncElementData(parentBufferName);
        var insertArray = elementDomSyncData[AWINSERT];
        if (!insertArray) {
            elementDomSyncData[AWINSERT] = new Array();
            insertArray = elementDomSyncData[AWINSERT];
        }
        insertArray[insertArray.length] = {AWPREVIOUS:previousChildBufferName, AWSOURCE:insertedElementName};
    }
    function awDomRegisterDelete (parentBufferName, deletedElementName)
    {
        var elementDomSyncData = _awFindDomSyncElementData(parentBufferName);
        var deleteArray = elementDomSyncData[AWDELETE];
        if (!deleteArray) {
            elementDomSyncData[AWDELETE] = new Array();
            deleteArray = elementDomSyncData[AWDELETE];
        }
        deleteArray[deleteArray.length] = deletedElementName;
    }
    function awDomRegisterScopeUpdate (elementName)
    {
        if (AWDomScopeUpdateList == null) {
            AWDomScopeUpdateList = new Object();
        }
        AWDomScopeUpdateList[elementName] = "true";
    }
    function awDomRegisterUpdateScript (id)
    {
        if (!AWDomUpdateScriptList) {
            AWDomUpdateScriptList = new Array();
        }
        AWDomUpdateScriptList[AWDomUpdateScriptList.length] = id;
    }
    function awDomRegisterUpdateCompleteCallback (method, args)
    {
        if (!AWDomCompleteCallbackList) {
            AWDomCompleteCallbackList = new Array();
            AWDomCompleteCallbackListArgs = new Array();
        }
        AWDomCompleteCallbackList[AWDomCompleteCallbackList.length] = method;
        AWDomCompleteCallbackListArgs[AWDomCompleteCallbackListArgs.length] = args;
    }
    function appendFrameName (url)
    {
        if (!awisNullOrUndefined(AWFrameName) &&
            url.match(/awf=/) == null) {
                return awappendQueryValue(url,"awf",AWFrameName);
        }
        return url;
    }
    function awInvokeAction (senderId)
    {
        awGetContent(awformatUrl(senderId));
    }
    var AWWaitDiv = null;
    var AWWaitTimeoutId;
    function awshowWaitCursor ()
    {
        if (AWWaitDiv == null) {
            AWWaitDiv = document.createElement('div');
            var waitStyle = AWWaitDiv.style;
            waitStyle.position = "absolute";
            waitStyle.zIndex = 1000;
            waitStyle.cursor = "wait";
            var docBody = document.body
            if (IsIE) {
                waitStyle.backgroundColor = "#FFFFFF";
                waitStyle.filter = "alpha(opacity=0)";
                waitStyle.top = 0;
                waitStyle.left = 0;
                waitStyle.width = docBody.scrollWidth;
                waitStyle.height = docBody.scrollHeight;
            }
            else {
                waitStyle.backgroundColor = "transparent";
                waitStyle.top = 0 + "px";
                waitStyle.left = 0 + "px";
                waitStyle.width = docBody.scrollWidth + "px";
                waitStyle.height = docBody.scrollHeight + "px";
            }
            docBody.appendChild(AWWaitDiv);
        }
        AWWaitDiv.style.display = "";
        AWWaitTimeoutId = setTimeout("awhideWaitCursor()", 10000);
    }
    function awhideWaitCursor ()
    {
        awprivateSetActionPending(false);
        clearTimeout(AWWaitTimeoutId);
        if (AWWaitDiv != null) {
            AWWaitDiv.style.display = "none";
        }
    }
    function awGetContent (url)
    {
        awshowWaitCursor();
        var iframe = awCreateRefreshIFrame();
        url = awappendQueryValue(url,"awii",iframe.name);
        iframe.src = appendFrameName(url);
        awStartRefreshTimer();
    }
    function awCreateRequestIFrame (frameName, showFrame)
    {
        var divName = frameName + "Div";
        var iframeDiv = awgetElementById(divName);
        if (!iframeDiv) {
            iframeDiv = document.createElement("div");
            iframeDiv.id = divName;
            document.body.appendChild(iframeDiv);
            var height = showFrame ? "" : " height='0px' width='0px'";
            iframeDiv.innerHTML = "<iframe src='javascript:void(false);' id='"+frameName+"' name='"+frameName+"' style='border:0px'" + height + "></iframe>";
        }
        return awgetElementById(frameName);
    }
    function awCreateRefreshIFrame ()
    {
        if (AWJSDebugEnabled) {
            var date = new Date();
            awxdSetRequestStartTime(date.getTime());
        }
        return awCreateRequestIFrame("AWRefreshFrame", AWShowRequestFrame);
    }
    function awRemoveRefreshIFrame ()
    {
        if (!AWShowRequestFrame) {
            var iframeDiv = awgetElementById("AWRefreshFrameDiv");
            if (iframeDiv) {
                document.body.removeChild(iframeDiv);
            }
        }
    }
    var AWRefreshCompleteTimeout;
    var AWDocumentLoadTimeout;
    function awStartRefreshTimer ()
    {
        if (!awIsNetscape()) {
            AWRefreshCompleteTimeout = setTimeout(awCheckRequestComplete, 500);
        }
    }
    var AWRefreshCount = 0;
    function awCheckRequestComplete ()
    {
        var iframe = awgetElementById("AWRefreshFrame");
        if (!iframe) {
            return;
        }
        var handled = false;
        try {
            if (iframe.contentWindow && iframe.contentWindow.document &&
                iframe.contentWindow.document.URL.indexOf("javascript:void(false);") == -1) {
                var doc = iframe.contentWindow.document;
                if (doc.readyState)  {
                    if (doc.readyState != "complete") {
                        AWDocumentLoadTimeout = setTimeout(awCheckDocumentLoad, 500);
                    }
                    awCheckDocumentLoad();
                }
                
                handled = true;
            }
        }
        catch (e) {
            handled = true;
            awPingServer();
        }
        if (!handled) {
            AWRefreshCount++;
            if (AWRefreshCount < 30) {
                AWRefreshCompleteTimeout = setTimeout(awCheckRequestComplete, 10000);
            }
            else {
            }
        }
    }
    function awCheckDocumentLoad ()
    {
        var iframe = awgetElementById("AWRefreshFrame");
        if (!iframe) {
            return;
        }
        var refreshComplete;
        try {
            var doc = iframe.contentWindow.document;
            if (doc.readyState)  {
                if (doc.readyState != "complete") {
                    AWDocumentLoadTimeout = setTimeout(awCheckDocumentLoad, 200);
                    return;
                }
            }
            refreshComplete = awGetDocumentElementById(doc, "AWRefreshComplete");
        }
        catch (e) {
        }
        if (!refreshComplete) {
            awHandleRequestError();
        }
    }
    function awRefreshRequestComplete ()
    {
        AWRefreshCount = 0;
        clearTimeout(AWRefreshCompleteTimeout);
        clearTimeout(AWDocumentLoadTimeout);
    }
    function awHandleRequestError ()
    {
        var iframe = awgetElementById("AWRefreshFrame");
        iframe.style.left = 0;
        iframe.style.top = 0;
        var iframeDiv = awgetElementById("AWRefreshFrameDiv");
        if (iframeDiv) {
            iframeDiv.style.position="absolute";
            iframeDiv.style.left = 0;
            iframeDiv.style.top = 0;
        }
        else {
        }
        var container;
        if (window.innerHeight) {
            container = document.body;
            window.scroll(0, 0);
        }
        else {
            container = document.documentElement;
            container.scrollTop = 0;
            container.scrollLeft = 0;
        }
        var height = container.scrollHeight > screen.availHeight ?
                        container.scrollHeight : screen.availHeight;
        var width = container.scrollWidth > (screen.availWidth) ?
                        container.scrollWidth : (screen.availWidth);
        iframeDiv.style.width = width + "px";
        iframeDiv.style.height = height + "px";
        iframe.style.width = width + "px";
        iframe.style.height = height + "px";
    }
    var AWShowPingFrame = false;
    var AWPingCompleteTimeout;
    function awPingServer ()
    {
        var iframe = awCreateRequestIFrame("AWPingFrame", AWShowPingFrame);
        iframe.src = AWPingUrl;
        AWPingCompleteTimeout = setTimeout(awCheckPingRequestComplete, 1000);
    }
    var AWPingCheckCount=0;
    function awCheckPingRequestComplete ()
    {
        var iframe = awgetElementById("AWPingFrame");
        if (!iframe) {
            return;
        }
        var handled = false;
        try {
            if (iframe.contentWindow && iframe.contentWindow.document &&
                iframe.contentWindow.document.URL.indexOf("javascript:void(false);") == -1) {
                var doc = iframe.contentWindow.document;
                handled = true;
            }
        }
        catch (e) {
            handled = true;
            awHandleRequestError();
        }
        if (!handled) {
            AWPingCheckCount++;
            if (AWPingCheckCount < 30) {
                AWRefreshCompleteTimeout = setTimeout(awCheckPingRequestComplete, 10000);
            }
            else {
                awHandleRequestError();
            }
        }
        else {
            if (!AWShowPingFrame) {
                var iframeDiv = awgetElementById("AWPingFrameDiv");
                if (iframeDiv) {
                    document.body.removeChild(iframeDiv);
                }
            }
        }
    }
    var AWHandlingNewRequest = false;
    var AWHandlingTrackRequest = false;
    var AWUpdateCompleteTime;
    function awDebugRequestComplete ()
    {
        if (AWJSDebugEnabled) {
            var currTime = (new Date()).getTime();
            var total = "n/a";
            var refreshTime = "n/a";
            var postRefreshTime = "n/a";
            var onloadTime = "n/a";
            var requestStartTime = awxdGetRequestStartTime();
            if (!awisNullOrUndefined(requestStartTime)) {
                total = currTime - requestStartTime;
            }
            else {
            }
            if (!awisNullOrUndefined(AWRefreshStartTime)) {
                refreshTime = currTime - AWRefreshStartTime;
            }
            if (!awisNullOrUndefined(AWUpdateCompleteTime)) {
                postRefreshTime = currTime - AWUpdateCompleteTime;
            }
            if (!awisNullOrUndefined(AWWindowLoadStartTime)) {
                onloadTime = currTime - AWWindowLoadStartTime;
            }
        }
    }
    function awCompleteRequest (current, length, isRefreshRequest)
    {
        if (isRefreshRequest) {
            awRefreshRequestComplete();
            awDomRefreshContentCallback();
            awRemoveRefreshIFrame();
            if (AWJSDebugEnabled) {
                AWUpdateCompleteTime = (new Date()).getTime();
                setTimeout(awDebugRequestComplete,0);
            }
            awDomRefreshComplete();
            updateHistory(current, length);
        }
        else {
            awDomRegisterUpdateCompleteCallback(updateHistory, [current, length]);
            if (AWJSDebugEnabled) {
                AWUpdateCompleteTime = (new Date()).getTime();
                setTimeout(awDebugRequestComplete,0);
            }
        }
    }
    function getHistoryIFrame ()
    {
        return awgetElementById("AWHistoryControl");
    }
    function createHistoryIFrame ()
    {
        var iframeDiv = awgetElementById("AWHistoryFrameDiv");
        if (!iframeDiv) {
            alert("AWHistoryFrameDiv not found");
        }
        var height = AWShowHistoryFrame ? "height='55px'" : " height='0px' width='0px'";
        iframeDiv.innerHTML = "<iframe src='javascript:void(false);' id='AWHistoryControl' name='AWHistoryControl' style='border:0px'" + height +"></iframe>";
        return getHistoryIFrame();
    }
    var AWHistoryDebugString;
    var AWHistoryBack = 0;
    var AWHistoryForward = 0;
    var AWHistoryLimit = 2;
    function updateHistory (current, length)
    {
        var backCount = current;
        if (backCount > AWHistoryLimit) {
            backCount = AWHistoryLimit;
        }
        var forwardCount = 0;
        if (length-1 - current >= 1) {
            forwardCount = 1;
        }
        var iframe = getHistoryIFrame();
        if (iframe) {
            if (AWHistoryBack == backCount && AWHistoryForward == forwardCount) {
                return;
            }
        }
        else {
        }
        AWHandlingNewRequest = true;
        AWHistoryDebugString = "back: " +(backCount+1) + " forward: " + forwardCount;
        AWHistoryBack = backCount;
        AWHistoryForward = forwardCount;
        setTimeout(awStartBacktrackHistoryCreate, 10);
    }
    function historyRequest (distance)
    {
        if (AWHandlingNewRequest) {
            AWHandlingNewRequest = false;
            return;
        }
        if (distance == -1) {
            AWHandlingTrackRequest = true;
            awGetContent(AWBackTrackUrl);
        }
        else if (distance == 1) {
            AWHandlingTrackRequest = true;
            awGetContent(AWForwardTrackUrl);
        }
        else {
            alert("refresh?");
        }
    }
    function awStartBacktrackHistoryCreate ()
    {
        iframe = createHistoryIFrame();
        createBacktrackHistory(AWHistoryBack+1, AWHistoryForward);
    }
    function createBacktrackHistory (backCount, forwardCount)
    {
        if (backCount > 0) {
            AWHandlingNewRequest = true;
            backtrackHistory(backCount-1,forwardCount);
        }
        else {
            createForwardtrackHistory(forwardCount, forwardCount);
        }
    }
    function createForwardtrackHistory (forwardCount, currentCount)
    {
        if (forwardCount > 0) {
            AWHandlingNewRequest = true;
            forwardtrackHistory(forwardCount-1, currentCount);
        }
        else {
            if (currentCount != 0) {
                AWHandlingNewRequest = true;
                history.go(-currentCount);
            }
        }
    }
    function backtrackHistory (backCount, forwardCount)
    {
        var iframe = getHistoryIFrame();
        var backtrackDocument =
            "<html><head><title>Ariba</title></head>" +
            "<body>backtrack for page "+AWHistoryDebugString+
            "<script>" +
                "parent.historyRequest(-1);" +
            "</script>" +
            "</body></html>";
        var url = "javascript:void(document.open());void(document.write('"+backtrackDocument+"'));void(document.close());";
        url += "parent.createBacktrackHistory("+backCount+","+forwardCount+");";
        iframe.src = url;
    }
    function forwardtrackHistory (forwardCount, currentCount)
    {
        var iframe = getHistoryIFrame();
        var forwardtrackDocument =
            "<html><head><title>Ariba</title></head>" +
            "<body>forward track for page "+AWHistoryDebugString+
            "<script>" +
                "parent.historyRequest(1);" +
            "</script>" +
            "</body></html>";
        var url = "javascript:void(document.open());void(document.write('"+forwardtrackDocument+"'));void(document.close());";
        url += "parent.createForwardtrackHistory("+forwardCount+","+currentCount+");";
        iframe.src = url;
    }
    function awShowPanel (id, positioningObject)
    {
        var divObject = awgetElementById(id);
        divObject.style.display = '';
        var newTop = awabsoluteTop(positioningObject) + (positioningObject.offsetHeight/3);
        var newLeft = awabsoluteLeft(positioningObject) + (positioningObject.offsetWidth - divObject.offsetWidth)/2;
        divObject.style.top = newTop + 'px';
        divObject.style.left = newLeft + 'px';
        awdisplayDiv(divObject);
    }
    function awHidePanel (id)
    {
        var divObject = awgetElementById(id);
        if (divObject) divObject.style.display = 'none';
    }
    function hasPopulatedFileInputContol (senderId, formId) {
        debug ("hasPopulatedFileInputControl() formId=" + formId);
        var elements = document.getElementsByTagName('input');
        for(var i = 0; i < elements.length; i++) {
            var e = elements.item(i);
            if (e.type == "file" && e.form.id == formId) {
                if (e.value.length > 0) return true;
            }
        }
        return false;
    }
    var xmlhttp = null;
    function httpInvoke (url, callback)
    {
        if (!xmlhttp) {
            try {
                xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); 
            } catch (e) {
                xmlhttp = new XMLHttpRequest();
            }
        }
        xmlhttp.open("get", url, true);  
        xmlhttp.onreadystatechange = function()
        {
            var responseText;
            if( xmlhttp.readyState == 4 ) {
                responseText = xmlhttp.responseText;
                function deferredCallBack () {
                    callback(responseText);
                };
                setTimeout(deferredCallBack, 0);
            }
        };
        xmlhttp.send(null);
    }
    function initFileUploadCheck (url, delay, panelId, statusStringId)
    {
        var done = false;
        function statusUpdate (string) {
            if (done) return;
            awShowPanel(panelId, document.body);
            awgetElementById(statusStringId).innerHTML = string;
            setTimeout (pollServer, delay);
            if (self.awStartInactivityTimer) awStartInactivityTimer();  
        }
        function pollServer () {
            httpInvoke(url, statusUpdate);
        }
        function domRefreshed () {
            if (!done) {
                done = true;
                awHidePanel(panelId);
            }
        }
        awDomRegisterUpdateCompleteCallback(domRefreshed);  
        setTimeout (pollServer, delay); 
    }
   function fileDownloadCompleteCheck (statusUrl, completeUrl, delay)
    {
        function statusUpdate (string)
        {
            if (string == "completed") {
                downloadCompleted();
            }
            else if (string == "started") {
               setTimeout(pollServer, delay);
            }
            else {
            }
        }
        function downloadCompleted ()
        {
            awGetContent(completeUrl);
        }
        function pollServer ()
        {
            httpInvoke(statusUrl, statusUpdate);
        }
        if (statusUrl != null && statusUrl.length > 0) {
            setTimeout(pollServer, delay); 
        }
        else {
            setTimeout(downloadCompleted, delay);
        }
    }
