﻿//Add a trim function to ALL string elements
String.prototype.trim = function() {
    return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};

var NS_XHTML = "http://www.w3.org/1999/xhtml";
var NS_STATE = "http://www.w3.org/2005/07/aaa";
var ARIA_STATE = "aria-";

if (typeof (Dea) === "undefined" || null === Dea) {
    var Dea = {};
}

Dea.Widgets = function Widgets() {
    this.widgets = [];
}

Dea.Widgets.prototype.add = function(o) {
    this.widgets[this.widgets.length] = o;
};

Dea.Widgets.prototype.init = function() {
    for (var i = 0; i < this.widgets.length; i++) {
        this.widgets[i].init();
    }
};

//give us a common place to reset browser differences...ah the joy
Dea.WebBrowser = function WebBrowser() { }

//non ie 
if (document.addEventListener) {
    Dea.WebBrowser.prototype.setMouseEvents = function(node, clickHandler, downHandler, moveHandler, upHandler) {
        if (clickHandler) {
            document.addEventListener("click", clickHandler, true);
        }
        if (downHandler) {
            document.addEventListener("mousedown", downHandler, true);
        }
        if (moveHandler) {
            document.addEventListener("mousemove", moveHandler, true);
        }
        if (upHandler) {
            document.addEventListener("mouseup", upHandler, true);
        }
    };

    Dea.WebBrowser.prototype.releaseMouseCapture = function(node, clickHandler, downHandler, moveHandler, upHandler) {
        if (upHandler) {
            document.removeEventListener("mouseup", upHandler, true);
        }
        if (moveHandler) {
            document.removeEventListener("mousemove", moveHandler, true);
        }
        if (downHandler) {
            document.removeEventListener("mousedown", downHandler, true);
        }
        if (clickHandler) {
            document.removeEventListener("click", clickHandler, true);
        }
    };
}
else {
    Dea.WebBrowser.prototype.setMouseEvents = function(node, clickHandler, downHandler, moveHandler, upHandler) {
        if (node.setCapture) {
            node.setCapture();
        }
        if (clickHandler) {
            node.attachEvent("onclick", clickHandler);
        }
        if (downHandler) {
            node.attachEvent("onmousedown", downHandler);
        }
        if (moveHandler) {
            node.attachEvent("onmousemove", moveHandler);
        }
        if (upHandler) {
            node.attachEvent("onmouseup", upHandler);
        }
    };

    Dea.WebBrowser.prototype.releaseMouseCapture = function(node, clickHandler, downHandler, moveHandler, upHandler) {
        if (upHandler) {
            node.detachEvent("onmouseup", upHandler);
        }
        if (moveHandler) {
            node.detachEvent("onmousemove", moveHandler);
        }
        if (downHandler) {
            node.detachEvent("onmousedown", downHandler);
        }
        if (clickHandler) {
            node.detachEvent("onclick", clickHandler);
        }
        node.releaseCapture();
    };
}

if (document.createEvent) {
    Dea.WebBrowser.prototype.simulateOnClickEvent = function(node) {
        var e = document.createEvent('MouseEvents');
        e.initEvent('click', true, true);
        node.dispatchEvent(e);
    };
} else {
    Dea.WebBrowser.prototype.simulateOnClickEvent = function(node) {
        var e = document.createEventObject();
        node.fireEvent("onclick", e);
    };
}

Dea.WebBrowser.prototype.keyCode = function(event) {
    var e = event || window.event;
    return e.keyCode;
};


Dea.WebBrowser.realBody = (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;

if (typeof document.documentElement.setAttributeNS !== 'undefined') {
    Dea.WebBrowser.prototype.stopPropagation = function(event) {
        event.stopPropagation();
        event.preventDefault();
        return false;
    };

    Dea.WebBrowser.prototype.target = function(event) {
        return event.target;
    };
    Dea.WebBrowser.prototype.charCode = function(event) {
        return event.keyCode || event.charCode;
    };
    Dea.WebBrowser.prototype.calculateOffsetLeft = function(node) {
        return node.offsetLeft;
    };
    Dea.WebBrowser.prototype.calculateOffsetTop = function(node) {
        return node.offsetTop;
    };
    Dea.WebBrowser.prototype.pageX = function(e) {
        return e.pageX;
    };
    Dea.WebBrowser.prototype.pageY = function(e) {
        return e.pageY;
    };
    Dea.WebBrowser.prototype.windowWidth = function(e) {
        return window.innerWidth - 20 + window.pageXOffset;
    };
    Dea.WebBrowser.prototype.windowHeight = function(e) {
        return window.innerHeight - 20 + window.pageYOffset;
    };

} else {
    Dea.WebBrowser.prototype.stopPropagation = function(event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
        return false;
    };
    Dea.WebBrowser.prototype.charCode = function(event) {
        return window.event.keyCode;
    };
    Dea.WebBrowser.prototype.target = function(event) {
        return window.event.srcElement;
    };
    Dea.WebBrowser.prototype.calculateOffsetLeft = function(node) {
        var offset = 0;
        while (node) {
            offset += node.offsetLeft;
            node = node.offsetParent;
        }
        return offset;
    };
    Dea.WebBrowser.prototype.calculateOffsetTop = function(node) {
        var offset = 0;
        while (node) {
            offset = offset + node.offsetTop;
            node = node.offsetParent;
        }
        return offset;
    };
    Dea.WebBrowser.prototype.pageX = function(e) {
        if (document.body !== null) {
            return e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
        }
        else {
            return e.clientX;
        }
    };
    Dea.WebBrowser.prototype.pageY = function(e) {
        if (document.body !== null) {
            return e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
        }
        else {
            return e.clientY;
        }
    };
    Dea.WebBrowser.prototype.windowWidth = function(e) {
        return Dea.WebBrowser.realBody.clientWidth + Dea.WebBrowser.realBody.scrollLeft;
    };
    Dea.WebBrowser.prototype.windowHeight = function(e) {
        return Dea.WebBrowser.realBody.clientHeight + Dea.WebBrowser.realBody.scrollTop;
    };
}


if (document.addEventListener) {
    Dea.WebBrowser.prototype.addEvent = function(elmTarget, sEventName, fCallback) {
        elmTarget.addEventListener(sEventName, fCallback, false);
        returnValue = true;
    };
    Dea.WebBrowser.prototype.removeEvent = function(elmTarget, sEventName, fCallback) {
        elmTarget.removeEventListener(sEventName, fCallback, false);
        returnValue = true;
    };
    Dea.WebBrowser.prototype.addChangeEvent = function(elmTarget, fCallback) {
        elmTarget.addEventListener("DOMAttrModified", fCallback, false);
        returnValue = true;
    };
} else {
    if (document.attachEvent) {
        Dea.WebBrowser.prototype.addEvent = function(elmTarget, sEventName, fCallback) {
            returnValue = elmTarget.attachEvent('on' + sEventName, fCallback);
        };
        Dea.WebBrowser.prototype.removeEvent = function(elmTarget, sEventName, fCallback) {
            returnValue = elmTarget.detachEvent('on' + sEventName, fCallback);
        };

        Dea.WebBrowser.prototype.addChangeEvent = function(elmTarget, fCallback) {
            returnValue = elmTarget.attachEvent("onpropertychange", fCallback);
        };
    } else {
        Dea.WebBrowser.prototype.addEvent = function(elmTarget, sEventName, fCallback) {
            return false;
        };
        Dea.WebBrowser.prototype.removeEvent = function(elmTarget, sEventName, fCallback) {
            return false;
        };
        Dea.WebBrowser.prototype.addChangeEvent = function(elmTarget, fCallback) {
            return false;
        };
    }
}

function Aria() { }

Aria.prototype.setAriaState = function(elmTarget, sStateName, sStateValue) {
    elmTarget.setAttribute(ARIA_STATE + sStateName, sStateValue);
};

Aria.prototype.setRole = function(elmTarget, sStateValue) {
    elmTarget.setAttribute("role", sStateValue);
};

Aria.prototype.getAriaState = function(elmTarget, sStateName) {
    return elmTarget.getAttribute(ARIA_STATE + sStateName);
};

Aria.prototype.removeAriaState = function(elmTarget, sStateName) {
    return elmTarget.removeAttribute(ARIA_STATE + sStateName);
};

Aria.prototype.hasAriaState = function(elmTarget, sStateName) {
    return elmTarget.hasAttribute(ARIA_STATE + sStateName);
};

Aria.prototype.setRolesAndStates = function(elmAccessible) {
    var STATE_MACHINE_BEGIN = 0;
    var STATE_MACHINE_IN_ACCESSIBLE = 1;
    var STATE_MACHINE_ROLE_IS_SET = 2;

    var sClass = elmAccessible.className;
    var arClassNames = sClass.split(' ');
    var machineState = STATE_MACHINE_BEGIN;
    var role = "";

    for (j = 0; j < arClassNames.length; j++) {
        // Delete spaces in CNAMEs
        sClass = arClassNames[j].replace(/ /g, '');

        // Test to see if there are any CNAMEs to process, if not exit
        if (!sClass) { continue; }

        // Look for CNAMEs assocaited with ARIA markup
        if (sClass == 'axs') {
            /* found "axs" accessible keyword, rest of class will be treated as ARIA roles and states */
            machineState = STATE_MACHINE_IN_ACCESSIBLE;
        } else if (machineState === STATE_MACHINE_IN_ACCESSIBLE) {
            /* found role, set it and move on */
            this.setRole(elmAccessible, sClass);

            machineState = STATE_MACHINE_ROLE_IS_SET;
            role = sClass;
        } else if (machineState == STATE_MACHINE_ROLE_IS_SET) {
            /* found state, set it and look for more */
            if (sClass.indexOf('-') != -1) {
                /* state has specific value, parse it out and set it */
                var arValue = sClass.split(/-/);
                // arValue[0] is state name, arValue[1] is value 
                // 
                // test for tabindex value
                if (arValue[0] !== "tabindex") {
                    // If not tabindex set the aria property and value
                    this.setAriaState(elmAccessible, arValue[0], arValue[1]);
                }
                else {
                    // If tabindex use Microsoft IE property to set tabindex value
                    if (arValue[1] != +"") {
                        elmAccessible.tabIndex = arValue[1];
                    } else {
                        // if tabindex value is undefined assume it is a negative number and set tabindex=-1
                        elmAccessible.tabIndex = -1;
                    }
                }
            } else {
                /* state is simply a name, value is null - make it a string to match other values as strings*/
                this.setAriaState(elmAccessible, sClass, "");
            }
        }
    }
};

// Initialize global variables used to initial widgets and provide browser independence for handling events and lack of namespace support in IE DOM functions
Dea.widgets = new Dea.Widgets();
Dea.browser = new Dea.WebBrowser();
Dea.aria = new Aria();

initApp = function(elmRoot) {

    if (document.isInitialized) {
        return;  // Avoid second initialization -- we inited early because of DOMContentLoaded
    }

    document.isInitialized = true;

    // If elmRoot is undefined start with the BODY element
    if ((!elmRoot) || (!elmRoot.getElementsByTagName)) {
        elmRoot = document.body;
    }

    // Check elmRoot node for information in the CLASS attribute to convert to ARIA markup
    if (/axs /.test(elmRoot.className)) {
        aria.setRolesAndStates(elmRoot);  // First do root element
    }

    // Check for W3C Standards compliant implementation of XPATH evaluation
    if (document.evaluate) {
        // Get ARIA Roles and States  
        var snapAccessibleElements = document.evaluate(".//*[contains(@class, 'axs ')]", elmRoot, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
        for (var i = snapAccessibleElements.snapshotLength - 1; i >= 0; i--) {
            aria.setRolesAndStates(snapAccessibleElements.snapshotItem(i), "wairole:");
        }
    } else {   // Otherwise use Micrsoft IE technique for identifying nodes
        var axsElements = [];
        var axsElementCount = 0;
        var arElements = (typeof elmRoot.all != 'undefined') ? elmRoot.all : elmRoot.getElementsByTagName('*');
        var iElementCount = arElements.length;

        // Find elements with ARIA markup and save their IDs
        for (var i = 0; i < iElementCount; i++) {
            if (/axs /.test(arElements[i].className)) {
                aria.setRolesAndStates(arElements[i]);
            }
        }
    }

    Dea.widgets.init();

};

Dea.Keys = {
    PAGEUP: 33,
    PAGEDOWN: 34,
    END: 35,
    HOME: 36,
    LEFT: 37,
    UP: 38,
    RIGHT: 39,
    DOWN: 40,
    SPACE: 32,
    TAB: 9,
    BACKSPACE: 8,
    DELETE: 46,
    ENTER: 13,
    INSERT: 45,
    ESCAPE: 27
};

Dea.checkLength = function(e, emsDataId, maxLength) {
    if (Dea.Get(emsDataId).value.length < maxLength)
        return true;
    else {
        var key = Dea.browser.keyCode(e);
        if ((key === Dea.Keys.UP || key === Dea.Keys.RIGHT || key === Dea.Keys.LEFT || key === Dea.Keys.DOWN) || (key === Dea.Keys.BACKSPACE) || (key === Dea.Keys.DELETE))
            return true;
        else
            return false;
    }

}

Dea.isNumberKey = function(key) {
    //47 - 58 => numbers 0-9
    if (key > 47 && key < 58)
        return true;
    else
        return false;
}

Dea.isNavKey = function(key) {
    if (key === Dea.Keys.LEFT || key === Dea.Keys.BACKSPACE || key === Dea.Keys.HOME || key === Dea.Keys.END || key === Dea.Keys.TAB) {
        return true;
    }
    else {
        return false;
    }
}

Dea.numberMask = function(e) {
    var key = Dea.browser.charCode(e);
    return Dea.isNumberKey(key) || Dea.isNavKey(key);
}

Dea.suppressSubmitOnReturn = function(e) {
    if (Dea.browser.charCode(e) === Dea.Keys.ENTER) { return false; }
}

Dea.Mouse = {};

Dea.matchEmsDataId = function(inputs, emsDataId) {

    for (var i = 0, j = inputs.length; i < j; i++) {
        var emsId = inputs[i].emsDataId || inputs[i].getAttribute("emsDataId");
        if (emsId === emsDataId) {
            return inputs[i];
        }
        else if (inputs[i].name === emsDataId) {
            return inputs[i];
        }
    }
    return null;
}

Dea.Get = function(emsDataId, inputs) {
    var o = document.getElementById(emsDataId);
    if (o) {
        return o;
    }

    o = null;
    if (!inputs || inputs === null) {
        inputs = document.getElementsByTagName("input");
    }

    o = Dea.matchEmsDataId(inputs, emsDataId);
    if (o !== null) {
        return o;
    }

    inputs = document.getElementsByTagName("select");
    o = Dea.matchEmsDataId(inputs, emsDataId);

    if (o !== null) {
        return o;
    }

    inputs = document.getElementsByTagName("textarea");
    o = Dea.matchEmsDataId(inputs, emsDataId);

    if (o !== null) {
        return o;
    }
    return null;
};

Dea.setDisplay = function(o, sDisplay, left, top, position, right) {
    if (typeof (o) === "string") {
        o = Dea.Get(o);
    }
    if (o) {
        if (sDisplay === "none" || sDisplay === "hidden") {
            o.setAttribute("aria-hidden", "true");
        }
        else {
            o.setAttribute("aria-hidden", "false");
        }

        o.style.display = sDisplay;

        if (position && position !== null) {
            o.style.position = position;
        }

        if (left && left !== null) {
            o.style.left = left;
        }
        if (top && top !== null) {
            o.style.top = top;
        }
        if (right && right !== null) {
            o.style.right = right;
        }

    }
};

Dea.Css = {
    classExists: function(o, c) {
        if (typeof (o) === "string") {
            o = Dea.Get(o);
        }
        return new RegExp('\\b' + c + '\\b').test(o.className);
    },

    swapClass: function(o, c1, c2) {
        if (typeof (o) === "string") {
            o = Dea.Get(o);
        }
        o.className = !Dea.Css.classExists(o, c1) ? o.className.replace(c2, c1) : o.className.replace(c1, c2);
    },

    addClass: function(o, c) {
        if (typeof (o) === "string") {
            o = Dea.Get(o);
        }
        if (!Dea.Css.classExists(o, c)) {
            o.className += o.className ? ' ' + c : c;
        }
    },
    removeClass: function(o, c) {
        if (typeof (o) === "string") {
            o = Dea.Get(o);
        }
        if (o.className) {
            var rep = o.className.match(' ' + c) ? ' ' + c : c;
            o.className = o.className.replace(rep, '');
        }
    }
};

Dea.findPos = function(o) {
    if (typeof (o) === "string") {
        o = Dea.Get(o);
    }
    if (o) {
        var curleft = curtop = 0;
        if (o.offsetParent) {
            curleft = o.offsetLeft
            curtop = o.offsetTop
            while (o = o.offsetParent) {
                curleft += o.offsetLeft
                curtop += o.offsetTop
            }
        }
    }
    return [curleft, curtop];
};

Dea.setMouse = function(event) {
    Dea.Mouse.x = Dea.browser.pageX(event);
    Dea.Mouse.y = Dea.browser.pageY(event);
    Dea.Mouse.windowHeight = Dea.browser.windowHeight(event);
    Dea.Mouse.windowWidth = Dea.browser.windowWidth(event);
}

Dea.emsData = {};

Dea.emptyToMinusOne = function(s) {
    if (s) { return s === "" ? "-1" : s; }
    return "-1";
}

Dea.setEmsData = function(ignoreValidation) {
    var inputs = document.getElementsByTagName("input");

    for (var i = 0, j = inputs.length; i < j; i++) {
        var emsDataId = inputs[i].emsDataId || inputs[i].getAttribute("emsDataId");
        var isRequired = inputs[i].isRequired || inputs[i].getAttribute("isRequired");

        if (emsDataId) {
            if (isRequired) {
                if (inputs[i].value === "" && ignoreValidation !== true) {
                    alert(inputs[i].errorMsg);
                    return false;
                }
            }
            if (inputs[i].type === "checkbox" || inputs[i].type === "radio") {
                if (inputs[i].checked) {
                    Dea.emsData[emsDataId] = "1";
                }
                else {
                    Dea.emsData[emsDataId] = "0";
                }
            }
            else {
                Dea.emsData[emsDataId] = inputs[i].value;
            }

        }
        else if (inputs[i].name.substring(0, 4) === "ems_") {
            if (inputs[i].type === "checkbox") {
                if (inputs[i].checked) {
                    Dea.emsData[inputs[i].name] = "1";
                }
                else {
                    Dea.emsData[inputs[i].name] = "0";
                }
            }
            else {
                Dea.emsData[inputs[i].name] = inputs[i].value;
            }
        }
    }

    var selects = document.getElementsByTagName("select");
    for (var i = 0, j = selects.length; i < j; i++) {
        var emsDataId = selects[i].emsDataId || selects[i].getAttribute("emsDataId");
        var isRequired = selects[i].isRequired || selects[i].getAttribute("isRequired");
        if (emsDataId) {
            if (isRequired) {
                if ((selects[i].value === "" || selects[i].options[selects[i].selectedIndex].text === "") && ignoreValidation !== true) {
                    alert(selects[i].errorMsg);
                    return false;
                }
            }
            Dea.emsData[emsDataId] = Dea.emptyToMinusOne(selects[i].value);
        }
    }

    var textAreas = document.getElementsByTagName("textarea");
    for (var i = 0, j = textAreas.length; i < j; i++) {
        var emsDataId = textAreas[i].emsDataId || textAreas[i].getAttribute("emsDataId");
        var isRequired = textAreas[i].isRequired || textAreas[i].getAttribute("isRequired");
        if (emsDataId) {
            if (isRequired) {
                if (textAreas[i].value === "" && ignoreValidation !== true) {
                    alert(textAreas[i].errorMsg);
                    return false;
                }
            }
            Dea.emsData[emsDataId] = textAreas[i].value;
        }
    }

    return true;

}


Dea.getValue = function(o, inputs, dv) {
    if (typeof (o) === "string") {
        o = Dea.Get(o, inputs);
    }
    if (o) {
        return o.value.trim();
    }
    else {
        if (dv) {
            return dv;
        }
    }
}

Dea.getText = function(o, inputs, dv) {
    if (typeof (o) === "string") {
        o = Dea.Get(o, inputs);
    }
    if (o) {
        return o.text.trim();
    }
    else {
        if (dv) {
            return dv;
        }
    }
}

Dea.setValue = function(o, v, inputs) {
    if (typeof (o) === "string") {
        o = Dea.Get(o, inputs);
    }
    if (o) {
        o.value = v;
    }
}

Dea.setHtml = function(o, sHtml) {
    if (typeof (o) === "string") {
        o = Dea.Get(o);
    }
    if (o) {
        o.innerHTML = sHtml;
    }
};

Dea.showError = function(o, inputs, tab) {
    if (typeof (o) === "string") {
        o = Dea.Get(o, inputs);
    }
    if (o) {
        if (tab) {
            if (typeof (tab) === "string") {
                tab = Dea.Get(tab, inputs);
            }
            Dea.browser.simulateOnClickEvent(tab);
        }
        var msg = o.errorMsg || o.getAttribute("errorMsg");
        alert(msg);
        o.focus();
    }
};

Dea.setDisabled = function(o, setTo, inputs) {
    if (typeof (o) === "string") {
        o = Dea.Get(o, inputs);
    }
    if (o) {
        o.disabled = setTo;
    }
}

Dea.hideSelectBoxes = function() {
    if (document.all) {
        var selects = document.getElementsByTagName("select");
        for (var i = 0, j = selects.length; i < j; i++) {
            selects[i].style.visibility = "hidden";
        }
    }
}

Dea.displaySelectBoxes = function() {
    if (document.all) {
        var selects = document.getElementsByTagName("select");
        for (var i = 0, j = selects.length; i < j; i++) {
            selects[i].style.visibility = "visible";
        }
    }
}

Dea.htmlDecode = function(s) {
    return s.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g,"\'");
}

Dea.hideTimePicker = function() {
    var timePicker = Dea.Get("timeDrop");
    if (timePicker) {
        if (!bLeaveTime) {
            if (timeBuilt === true) {
                Dea.setDisplay(timePicker, "none");
                Dea.displaySelectBoxes();
                timeBuilt = false;
            }
        }
        else {
            if (timeBuilt === true) {
                Dea.hideSelectBoxes();
            }
        }
    }
}

Dea.hidePickers = function() {
    /*if (Dea.Get("calendar")) {
        if (!bShow) {
            hideCalendar()
        }
        bShow = false
    }
    if (window.top.gPopupIsShown) {
        window.top.Dea.hideSelectBoxes();
    }*/
    Dea.hideTimePicker();

}

Dea.validate = function(box, value, tabId) {
    if (box.isRequired) {
        if (value.trim() === "") {
            Dea.ctsm(tabId, box.errorMsg, box);
            return false;
        }
    }
    return true;
}

Dea.ctsm = function(tab, msg, o) {
    if (tab) {
        if (typeof (tab) === "string") {
            tab = Dea.Get(tab);
        }
        Dea.browser.simulateOnClickEvent(tab);
    }
    var msg = o.errorMsg || o.getAttribute("errorMsg");
    alert(msg);
    o.focus();
}

Dea.isValidEmail = function(oEmail, msg) {
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    var address = Dea.getValue(oEmail);
    if (reg.test(address) == false) {
        alert(msg);
        oEmail.focus();
        return false;
    }
    return true;
}

Dea.isValidEmailString = function(address, msg) {
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if (reg.test(address) == false) {
        alert(msg);
        return false;
    }
    return true;
}

Dea.moveSelectedOptions = function(from, to, msgname) {
    for (var i = 0; i < from.options.length; i++) {
        var o = from.options[i];
        if (o.selected) {
            for (var y = 0; y < to.options.length; y++) {
                if (o.value == to.options[y].value)
                { alert(msgname); return false; }
            }
            to.options[to.options.length] = new Option(o.text, o.value, false, false);
        }
    }
    for (var i = (from.options.length - 1); i >= 0; i--) {
        var o = from.options[i];
        if (o.selected) {
            from.options[i] = null;
        }
    }
    if ((arguments.length < 3) || (arguments[3] == true)) {
        Dea.sortSelect(from);
        Dea.sortSelect(to);
    }
    from.selectedIndex = -1;
    to.selectedIndex = -1;
    return false;
}

Dea.moveAllOptions = function(from, to, msgname) {
    for (var i = 0; i < from.options.length; i++) {
        var o = from.options[i];
        for (var y = 0; y < to.options.length; y++) {
            if (o.value == to.options[y].value)
            { alert(msgname); return false; }
        }
        to.options[to.options.length] = new Option(o.text, o.value, false, false);
    }
    for (var i = (from.options.length - 1); i >= 0; i--) {
        var o = from.options[i];
        from.options[i] = null;
    }
    if ((arguments.length < 3) || (arguments[3] == true)) {
        Dea.sortSelect(from);
        Dea.sortSelect(to);
    }
    from.selectedIndex = -1;
    to.selectedIndex = -1;
    return false;
}

Dea.sortSelect = function(obj) {
    var o = new Array();
    if (obj.options == null) { return; }
    for (var i = 0; i < obj.options.length; i++) {
        o[o.length] = new Option(obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected);
    }
    if (o.length == 0) { return; }
    o = o.sort(function(a, b) {
        if ((a.text.toLowerCase() + '') < (b.text.toLowerCase() + '')) { return -1; }
        if ((a.text.toLowerCase() + '') > (b.text.toLowerCase() + '')) { return 1; }
        return 0;
    });
    for (var i = 0; i < o.length; i++) {
        obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
    }

}

Dea.GetListitems = function(listId) {
    var selects = document.getElementsByTagName("select");
    var obj = Dea.Get(listId).options;
    var values = '';
    for (var i = 0; i < obj.length; i++) {
        values = values + obj[i].value;
        if (i < (obj.length - 1))
            values = values + ',';
    }
    return values;
}

Dea.ClearListItems = function(listId) {
    Dea.Get(listId).length = 0;
}

Dea.moveUp = function(list) {
    var daflag = false;
    for (var i = 0; i <= list.options.length - 1; i++) {
        if (!list[i].selected) {
            daflag = true;
        }
        if (list[i].selected && daflag) {
            list.insertBefore(list[i], list[i - 1])
        }
    }
    return false;
}

Dea.moveDown = function(list) {
    var daflag = false;
    for (var i = list.options.length - 1; i >= 0; i--) {
        if (!list[i].selected) {
            daflag = true;
        }
        if (list[i].selected && daflag) {
            list.insertBefore(list[i], list[i + 2])
        }
    }
    return false;
}

Dea.systemCheck = function(event) {
    try {
        var e = event || window.event;
        if (e.ctrlKey && e.shiftKey) {
            if (Dea.browser.charCode(e) === 21 || Dea.browser.charCode(e) === 85) {
                Dea.Get("syscheckdata").submit();
            }
        }

        if (Dea.browser.charCode(e) === Dea.Keys.ESCAPE) {
            if (typeof (hideCalendar) != 'undefined') {
                hideCalendar();
            }
            Dea.hideTimePicker();
        }
    }
    catch (somethingBad) { }
}

//removes our div showing loading
Dea.clearLoading = function() {
    Dea.setDisplay("CallbackStatus", "none");
}


//shows the error message to the user
Dea.errorCallback = function(result, context) {
    try {
        var emsResponse = result.parseJSON();
    }
    catch (otherCallback) {
        emsResponse = result;
    }

    if (typeof emsResponse.sendToPage !== 'undefined') {
        window.location.href = emsResponse.sendToPage;
        return true;
    }
    alert(result);
    Dea.clearLoading();
}

//shows our loading div
Dea.showLoading = function() {
    Dea.setDisplay("CallbackStatus", "", null, "5px", null, "5px")
   // Dea.placeDiv("CallbackStatus");
}

var offset = 10;
Dea.placeDiv = function(divObj) {
    divObjStr = Dea.Get(divObj);

    if (divObjStr == null) {
        Dea.setDisplay(divObj, "", null, "5px", null, "5px")
        return;
    }


    divObjStr.style.position = "absolute";
    divObjStr.style.left = (Dea.Mouse.x + offset) + 'px';
    divObjStr.style.top = (Dea.Mouse.y + offset) + 'px';
}

Dea.makeCallback = function(router, mcObject) {
    if (!mcObject || mcObject === 'undefined') {
        mcObject = Dea.emsData;
    }

    mcObject.router = router;
    Dea.showLoading();
    Dea.pageCallback(mcObject);
}


Dea.handleCallback = function(result, context) {

    try {
        var emsResponse = result.parseJSON();
    }
    catch (otherCallback) {
        try {
            if (otherCallback.message === "script stack space quota is exhausted") {
                var emsResponse = {};
                var aResult = result.split("\",\"");
                var sFirstPair = aResult[0];
                sFirstPair = sFirstPair.substr(2, sFirstPair.length - 2);

                var akv = sFirstPair.split("\":\"");
                eval("emsResponse." + akv[0] + " = \"" + akv[1] + "\"");

                for (var i = 1; i < aResult.length - 1; i++) {
                    akv = aResult[i].split("\":\"");
                    eval("emsResponse." + akv[0] + " = \"" + akv[1] + "\"");
                }

                var sLastPair = aResult[aResult.length - 1];
                sLastPair = sLastPair.substr(0, sLastPair.length - 2);
                akv = sLastPair.split("\":\"");
                eval("emsResponse." + akv[0] + " = \"" + akv[1] + "\"");
            }
            else {
                emsResponse = result;
            }
        }
        catch (otherCallback) {
            emsResponse = result;
        }

    }

    if (typeof emsResponse.sendToPage !== 'undefined') {
        window.location.href = emsResponse.sendToPage;
        return true;
    }

    if (!Dea.pageHandleCallback(emsResponse, context)) {
        alert("Unhandled callback " + context);
    }

    Dea.clearLoading();
}


Dea.browser.setMouseEvents(document, Dea.hidePickers, null, Dea.setMouse, null);
Dea.browser.addEvent(document, "keypress", Dea.systemCheck);