/**
 * 得到控件对象的绝对X位置。
 * @param ctl 控件对象
 * @return 返回控件对象的绝对X位置
 */
function getAbsoluteOffsetLeft(ctl) {
    var left = ctl.offsetLeft;
    var parentObj = ctl.offsetParent;
    while (parentObj != null && parentObj.nodeName != "BODY") {
        left += parentObj.offsetLeft
        parentObj = parentObj.offsetParent
    }
    return left;
}

/**
 * 得到控件对象的绝对Y位置
 * @param ctl 控件对象
 * @return 返回控件对象的绝对Y位置
 */
function getAbsoluteOffsetTop(ctl) {
    var top = ctl.offsetTop;
    var parentObj = ctl.offsetParent;
    while (parentObj != null && parentObj.nodeName != "BODY") {
        top += parentObj.offsetTop
        parentObj = parentObj.offsetParent
    }
    return top;
}

/**
 * 定义String对象的trim方法
 * 功能：去除两端的空格。
 */
String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

// 让window对象继承一个匿名类，实质是为window对象添加一个$方法及一个叫Class的内部类。
Object.extend(window, {
    $: function() {
        var elements = [];
        for (var i = 0; i < arguments.length; i++) {
            var e = arguments[i];
            if (typeof e == 'string') {
                e = document.getElementById(e);
            }
            if (arguments.length == 1) {
                return e;
            }
            elements.push(e);
        }
        return elements;
    },
    Class: {
        create: function() {
            return function() {
                if (typeof this.initialize == "function") {
                    this.initialize.apply(this, arguments);
                }
            };
        }
    }
}, false);

var Application =
{
    Browser:
    {
        isIE: navigator.userAgent.indexOf('MSIE') != -1,
        isFirefox: navigator.userAgent.indexOf('Firefox') != -1,
        isOpera: window.opera != null
    },

    $: function(obj)
    {
        if (typeof(obj) == 'string')
        {
            obj = document.getElementById(obj);
        }

        return obj;
    },
    disableControl : function(controlId, disable)
    {
        var control = $(controlId);
        var over = this.$("overLayer");

        if (arguments.length == 1) disable = true;

        if (!disable)
        {
            control.style.overflow = "";
            over.style.top = "0px";
            over.style.height = "0px";
            over.style.display = "none";

            if (this.Browser.isIE)
            {
                this.hideSelectBoxes(control, false);
            }
        }
        else
        {
            var position = this.getAbsolutePosition(control);
            var h = position.height;
            var top = position.top;

            if (control != document.body)over.style.width = "1002px";
            over.style.top = top + "px";
            over.style.height = (h + 65) + "px";
            over.style.display = "block";
            control.style.overflow = "hidden";

            if (this.Browser.isIE)
            {
                //document.body.onmousewheel = function(){return false};
                this.hideSelectBoxes(control);
            }
        }
    },
    hideSelectBoxes : function(control, hide)
    {
        if (arguments.length == 1) hide = true;

        var elements = control.getElementsByTagName("select");

        for (var i = 0; i < elements.length; i++)
        {
            elements[i].style.visibility = hide ? "hidden" : "visible";
        }
    },
    /**
     * 得到元素的绝对位置。
     * @param element 元素
     * @return 返回一个包含top、left、width、height的对象
     */
    getAbsolutePosition : function(element)
    {
        if (arguments.length != 1 || element == null)
        {
            return null;
        }

        var top = element.offsetTop;
        var left = element.offsetLeft;
        var width = element.offsetWidth;
        var height = (element.offsetHeight > element.scrollHeight) ? element.offsetHeight : element.scrollHeight;
        while (element = element.offsetParent)
        {
            if (element.style.position == 'absolute' || element.style.position == 'relative'
                    || ( element.style.overflow != 'visible' && element.style.overflow != '' ))
            {
                break;
            }
            top += element.offsetTop;
            left += element.offsetLeft;
        }
        return { top: top, left: left, width: width, height: height };
    }
};
/**
 * 控制控件字符数目
 * @param ctrl      控件
 * @param maxlength 最大字符长度
 */
function trim(ctrl, maxlength) {
    if (ctrl.value.length > maxlength)
        ctrl.value = ctrl.value.substring(0, maxlength);
}
