var Document = {
/**
 * 将浮动对象在窗口中居中显示
 * floatElementID:浮动对象ID
 */
    showCenter:function(floatElementID) {
        var floatElement = Document.getObject(floatElementID);
        var scrollElement = Document.getScrollParent(floatElement);

        var scrollWidth = scrollElement.offsetWidth;
        var scrollHeight = scrollElement.offsetHeight;
        var scrollTop = scrollElement.scrollTop;
        var scrollLeft = scrollElement.scrollLeft;
        var elementWidth = parseInt(floatElement.currentStyle.width);
        var elementHeight = parseInt(floatElement.currentStyle.height);


        var left = (scrollWidth - elementWidth) / 2;
        if (left < 0) left = 0;
        var top = (scrollHeight - elementHeight) / 2;
        if (top < 0) top = 0;

        floatElement.style.top = scrollTop + top;
        floatElement.style.left = scrollLeft + left;
        floatElement.style.display = "inline";

    },

/**
 * 将浮动对象定位到指定对象下面
 * floatElement:浮动对象
 * destElement:目标对象
 */
    snapElement:function(targetElement, floatElement) {
        var pos = Document.adjustPosition(targetElement, floatElement);
        floatElement.style.left = pos.left;
        floatElement.style.top = pos.top;
        floatElement.style.display = "inline";
    },

  /**
  * 获得对象的绝对坐标
  */
  getAbsolutePos:function (obj) {
    var scrollElement = Document.getScrollParent(obj);

    var top = obj.offsetTop;
    var left = obj.offsetLeft;
    var element = obj.offsetParent;
    //    var offLeft,offTop;
    while (element != scrollElement) {
        top += element.offsetTop;
        left += element.offsetLeft;
        element = element.offsetParent;
    }
    return {'top':top,'left':left};
  },



/**
 * 调整浮动的层和对象的位置
 * targetElement:目标对象
 * floatElement:浮动的层对象
 */
    adjustPosition:function(targetElement, floatElement) {
        var scrollElement = Document.getScrollParent(targetElement);
        var top = targetElement.offsetTop;
        var left = targetElement.offsetLeft;
        var element = targetElement.offsetParent;
        //    var offLeft,offTop;
        while (element != scrollElement) {
            top += element.offsetTop;
            left += element.offsetLeft;
            element = element.offsetParent;
        }

        var targetWidth = targetElement.offsetWidth;
        //目标对象宽度
        var targetHeigth = targetElement.offsetHeight;
        //目标对象高度
        var floatWidth = floatElement.offsetWidth;
        //浮动层的宽度
        var floatHeight = floatElement.offsetHeight;
        //浮动层的高度
        var scrollWidth = scrollElement.clientWidth;
        //滚动条容器宽度(不计算任何边距、边框、滚动条)
        var scrollHeight = scrollElement.clientHeight;
        //滚动条容器高度(不计算任何边距、边框、滚动条)
        var scrollLeft = scrollElement.scrollLeft;
        //滚动条左边距
        var scrollTop = scrollElement.scrollTop;
        //滚动条上边距
        // alert(scrollLeft);
        // alert(scrollTop);
        if ((left + floatWidth > scrollLeft + scrollWidth) && (left + targetWidth - floatWidth > scrollLeft)) {
            left = left + targetWidth - floatWidth+1;
        }
        else {
                  left+=1;
        }
        if ((top + targetHeigth + floatHeight > scrollTop + scrollHeight) && (top - floatHeight > scrollTop)) {
            top = top - floatHeight + 1;
        }
        else {
            top = top + targetHeigth;
        }
        return {"top":top,"left":left};
    },

/**
 * 获得对象所在的滚动条容器对象
 * element 对象
 */
    getScrollParent:function(element) {
        if (element == null) return null;
        var elmt = element.offsetParent;
        while (elmt != window.document.body) {
            if (elmt.currentStyle.position == 'absolute' || elmt.currentStyle.position == 'relative' ||
                (elmt.currentStyle.overflow != 'visible' && elmt.currentStyle.overflow != '' )) {
                return elmt;
            }
            elmt = elmt.offsetParent;
        }
        return elmt;
    },

/**
 * 获得对象
 * elementID:对象的id
 * objWindow:window对象
 * 姜敏
 */
    getObject: function (elementID, objWindow) {
        var obj;
        if (objWindow == null) {
            obj = window.document.getElementById(elementID);
        }
        else {
            obj = objWindow.document.getElementById(elementID);
        }
        return obj;
    },

/**
 * 获得对象数组
 * elementName:对象数组的名字
 * objWindow:window对象
 * 姜敏
 */
    getObjects: function (elementName, objWindow) {
        var objs;
        if (objWindow == null) {
            objs = window.document.getElementsByName(elementName);
        }
        else {
            objs = objWindow.document.getElementsByName(elementName);
        }
        return objs;
    },



/**
 * 通过Ajax提交表单数据
 * formName:表单名称
 * progressTitle:进度条显示文字
 * disponseFunction:请求完成后的处理函数
 * 姜敏
 */
    submitByAjax: function(formName, action, progressTitle, disponseFunction) {
        var objForm = Document.getObject(formName);
        var param = Form.serialize(formName).concat("&timeSerial=").concat(new Date().getTime());
        var url = (action == null) ? objForm.action : action;
        //    if (updateElement == null) updateElement = "bodyContent";
        var options = {
            method: "post",
            parameters: param,
            asynchronous:true,
            onCreate:Document.showProgressTitle(progressTitle),
            onComplete: function(request) {
                window.Window.destroyProgress();
                disponseFunction(request);
            },
            onFailure:function(request) {
                if (progressTitle != null) {
                    window.Window.destroyProgress();
                }
                alert("系统出现错误!");
            }
        };
        var ajax = new Ajax.Request(url, options);
    },

/**
 * 通过Ajax触发链接请求
 * url:连接的jsp页面或action动作
 * progressTitle:进度条显示文字
 * updateElement:请求完成后ajax局部更新的对象id
 * 姜敏
 */

    linkByAjax:function (url, progressTitle, updateElement) {
        var param = ("timeSerial=").concat(new Date().getTime());
        if (updateElement == null) updateElement = "bodyContent";
        var options = {
            method: "get",
            parameters: param,
            asynchronous:true,
            onCreate: Document.showProgressTitle(progressTitle),
            onComplete: function(request) {
                window.Window.destroyProgress();
                Document.responseComplete(request, updateElement);
            },
            onFailure:function(request) {
                if (progressTitle != null) {
                    window.Window.destroyProgress();
                }
                alert("系统出现错误！");
            }
        };
        var ajax = new Ajax.Request(url, options);
    },


/**
 * 响应完成
 * request:ajax的请求对象
 * updateElement:请求完成后ajax局部更新的对象id
 */

    responseComplete:function(request, updateElement) {
        var html = request.responseText;
        var upElement = Document.getObject(updateElement);
        window.setTimeout(
                function () {
                    window.Window.destroyProgress();
                    if (upElement == null) {
                        document.body.innerHTML = html.stripScripts();
                    }
                    else {
                        upElement.innerHTML = html.stripScripts();
                    }
                    window.setTimeout(
                            function() {
                                html.evalScripts()
                            }, 10);

                }, 10);
        window.top.Document.refreshStatus();
    },


/**
 * 执行一个ajax请求
 * url 请求动作
 * parameterObject 参数对象 如: {"name":"张三","sex":"男"}
 * disposeFunction ajax调用完成后的处理函数
 * progressTitle 进度条文本
 */
    executeAjaxRequest:function (url, parameterObject, disposeFunction, progressTitle) {
        var hash = $H(parameterObject);
        var param = hash.toQueryString();
        if (StringUtil.isEmpty(param)) {
            param = ("timeSerial=").concat(new Date().getTime());
        }
        else {
            param = param.concat("&timeSerial=").concat(new Date().getTime());
        }
        var options = {
            method: 'get',
            parameters: param,
            asynchronous:true,
            onCreate: Document.showProgressTitle(progressTitle),
            onComplete: function(request) {
                if (progressTitle != null) {
                    window.Window.destroyProgress();
                }
                disposeFunction(request);
            },
            onFailure:function(request) {
                if (progressTitle != null) {
                    window.Window.destroyProgress();
                }
                alert("系统出现错误！");
            }
        }
        var ajax = new Ajax.Request(url, options);
    },



/**post
 * 执行一个ajax请求
 * url 请求动作
 * parameterObject 参数对象 如: {"name":"张三","sex":"男"}
 * disposeFunction ajax调用完成后的处理函数
 * progressTitle 进度条文本
 */
    executeAjaxRequestPost:function (url, parameterObject, disposeFunction, progressTitle) {
        var param = parameterObject;
        if (StringUtil.isEmpty(param)) {
            param = ("timeSerial=").concat(new Date().getTime());
        }
        else {
            param = param.concat("&timeSerial=").concat(new Date().getTime());
        }
        var options = {
            method: 'post',
            parameters: param,
            asynchronous:true,
            onCreate: Document.showProgressTitle(progressTitle),
            onComplete: function(request) {
                if (progressTitle != null) {
                    window.Window.destroyProgress();
                }
                disposeFunction(request);
            },
            onFailure:function(request) {
                if (progressTitle != null) {
                    window.Window.destroyProgress();
                }
                alert("系统出现错误！");
            }
        }
        var ajax = new Ajax.Request(url, options);
    },

/**
 * 提交表单到新开窗口 普通
 * formName:表单名字
 * url:请求动作
 * progressTitle:进度条
 */
    submitNewWindow:function(formName, progressTitle, action) {
        var oForm = Document.getObject(formName);
        var oldUrl = oForm.action ;
        var oldTarget = oForm.target ;
        if (action != null) oForm.action = action;
        var resizablebar = "yes"
        var width = screen.width - 10;
        var height = screen.height - 60;
        var sFeatures = "scrollbars=yes, status=no, resizable=" + resizablebar + ","
                + "toolbar=no, menubar=no, location=no, titlebar=no"
        if (width != null) {
            sFeatures += ", width=" + width;
        }
        if (height != null) {
            sFeatures += ", height=" + height;
        }
        var left = (screen.availWidth - width) / 2;
        var top = (screen.availHeight - height) / 2;
        sFeatures += ",top=" + top + ",left=" + left;
        var oWin = window.open("aboutblank.jsp", 'openNoBar' + StringUtil.randomChar(20), sFeatures);
        var postform = function() {
            oForm.target = oWin.name;
            oForm.submit();
            oForm.action = oldUrl;
            oForm.target = oldTarget;
        }
        if (progressTitle != null) {
            //      Window.includeProgressCssJs(oWin);
            window.setTimeout(
                    function() {
                        if (oWin.Window) oWin.Window.createProgress(progressTitle);
                        postform();
                    }, 200
                    );
        }
        else {
            postform();
        }
    },

/**
 * 设置链接,当前页面 普通
 * url:连接的jsp页面或action动作
 * parameterObject:参数对象
 * progressTitle:进度条文字
 * frameName:frame的名称
 * 姜敏
 */
    link:function (url, progressTitle, frameName) {
        var win = (frameName == null) ? window : window.frames[frameName];  //提交链接的窗口
        var pwin=window; //生成进度条的窗口
        if(frameName != null&&Document.getObject(frameName).style.display!="none"){
          pwin=window.frames[frameName];
        }


        if (progressTitle == null) {
            win.location.href = url;
        }
        else {
            if (pwin.Window) {
               //  pwin.Window.createProgress(progressTitle);
                window.setTimeout(function() {
                    win.location.href = url;
                    if (pwin.Window) pwin.Window.listenWindowState(win);
                }, 100);
            }
            else {
                win.location.href = url;
            }
        }
    },

/**
 * 提交当前页面的表单
 * formName:表单名称
 * progressTitle:进度条文字
 * action:表单提交动作
 * frameName:表单提交窗口
 */
    submit:function (formName, progressTitle, action, frameName) {
        var oForm = Document.getObject(formName);
        var oldTarget = oForm.target;
        var oldAction = oForm.action;

        var win = (frameName == null) ? window : window.frames[frameName];  //提交链接的窗口
        var pwin=window; //生成进度条的窗口
        if(frameName != null&&Document.getObject(frameName).style.display!="none"){
          pwin=window.frames[frameName];
        }
      
        var formSubmit = function() {
            if (action != null) oForm.action = action;
            if (frameName != null) oForm.target = frameName;
            try{
              oForm.submit();
            }
            catch(e){
              pwin.Window.destroyProgress();
              alert(e.description)
            }
            if (action != null) oForm.action = oldAction;
            if (frameName != null) oForm.target = oldTarget;
        }
        if (progressTitle == null) {
            formSubmit();
        }
        else {
            if (pwin.Window) {
                pwin.Window.createProgress(progressTitle);
                window.setTimeout(function() {
                    formSubmit();
                    if (pwin.Window) pwin.Window.listenWindowState(win);
                }, 100);
            }
            else {
                formSubmit();
            }
        }

    },
    submitChild:function(formName, progressTitle, action, frameName,flag){
           var oForm = window.frames[frameName].document.forms[formName];
           var oldAction = oForm.action;
           var oldTarget = oForm.target;
           var win = (frameName == null) ?window : window.frames[frameName];
           if(flag){
               win=window;
               frameName=window.name;
               oldTarget=window.name;
           }
           var formSubmit = function() {
               if (action != null) oForm.action = action;
               if (frameName != null) oForm.target = frameName;
               oForm.submit();
               if (action != null) oForm.action = oldAction;
               if (frameName != null) oForm.target = oldTarget;
           }
           if (progressTitle == null) {
               formSubmit();
           }
           else {
               if (win.Window) {
                   win.Window.createProgress(progressTitle);
                   window.setTimeout(function() {
                       formSubmit();
                       if (win.Window) win.Window.listenWindowState(win);
                   }, 100);
               }
               else {
                   formSubmit();
               }
           }
       },
    

/**
 * 触发动作的对象必须是inupt,button等
 * 清除表单上的非隐藏域输入框的值
 * formName: 表单名
 * clearHidden: 是否清空隐藏域 true or false
 * 姜敏
 */
    clearForm:function (formName, clearHidden) {
        var objForm = Document.getObject(formName);
        for (var i = 0; i < objForm.elements.length; i++) {
            var object = objForm.elements[i]
            if (object.tagName == "INPUT") {
                if (object.type == "file" || object.type == "password" || object.type == "text") {
                    object.value = "";
                }
                /*if(object.type=="checkbox" || object.type=="radio"){
                  object.checked=false;
                }*/
                if (object.type == "hidden") {
                    if (clearHidden != null && clearHidden) {
                        object.value = "";
                    }
                }
            }
            if (object.tagName == "SELECT") {
                object.value = "";
            }
            if (object.tagName == "TEXTAREA") {
                object.value = "";
            }
        }
    },


/**
 * 显示和隐藏对象
 * IDName:对象ID
 * status:根据状态来显示和隐藏(可选) true or false
 * 姜敏
 */
    showHiddenObject: function (IDName, status) {
        try {
            var obj;

            if(typeof(IDName)=="string"){
              obj = Document.getObject(IDName);
            }
            else{
              obj=IDName;
            }

            if (status != null) {
                obj.style.display = (status) ? "inline" : "none";
            }
            else {
                obj.style.display = (obj.style.display == "none") ? "inline" : "none";
            }
        }
        catch(e) {
        }
    },

/**
 * 复选框的状态选择
 * IDName:checkbox框id或name
 * status:选中状态 true or false
 */
    statusChecked:function (IDName, status) {
        var objCheckBoxs = Document.getObjects(IDName);
        if (objCheckBoxs != null) {
            for (var i = 0; i < objCheckBoxs.length; i++) {
                objCheckBoxs[i].checked = (status != null) ? status : (!objCheckBoxs[i].checked);
            }
        }
    },

/**
 * 分页取码窗口的复选框状态选中函数()
 * parentHiddenName:opener窗口中的隐藏域名称(数组)
 * selfCheckBoxName:当前窗口中的复选框名(数组)
 */
    statusCheckedById:function (parentHiddenName, selfCheckBoxName) {
        var objHiddens = window.top.opener.document.getElementsByName(parentHiddenName);
        var objCheckBoxs = window.document.getElementsByName(selfCheckBoxName);
        if (objHiddens == null) return;
        if (objCheckBoxs == null) return;
        var checkBoxValue;
        var hiddenValue;
        for (var i = 0; i < objCheckBoxs.length; i++) {
            checkBoxValue = objCheckBoxs[i].value;
            for (var j = 0; j < objHiddens.length; j++) {
                hiddenValue = objHiddens[j].value;
                if (checkBoxValue == hiddenValue) {
                    objCheckBoxs[i].checked = true;
                    break;
                }
            }
        }
    },

/**
 * 分页取码窗口的复选框状态选中函数(单个输入框中值以逗号分割)
 * parentInputName:opener窗口中的输入框名称
 * selfCheckBoxName:当前窗口中的复选框名(数组)
 */
    statusCheckedByName:function (parentInputName, selfCheckBoxName) {
        var objInput = window.top.opener.document.getElementById(parentInputName);
        var objCheckBoxs = window.document.getElementsByName(selfCheckBoxName);
        if (objInput == null) return;
        if (objCheckBoxs == null) return;
        var inputValue = objInput.value;
        var checkBoxValue;
        for (var i = 0; i < objCheckBoxs.length; i++) {
            checkBoxValue = objCheckBoxs[i].value;
            if (inputValue.indexOf(checkBoxValue) != -1) {
                objCheckBoxs[i].checked = true;
            }
        }
    },

/**
 * 所有子复选框被选中后，父复选框自动被选中；反之，则未选中
 * cellsBoxName 子复选框名称
 * mainBoxName全选父复选框名称
 * written by Clark Fan
 */
    superStatusAutoChecked:function(cellsBoxName, mainBoxName) {
        var objLen = 0;
        var objs = Document.getObjects(cellsBoxName);
        for (var i = 0; i < objs.length; i++) {
            if (objs[i].checked) {
                objLen += 1;
            }
        }
        Document.getObject(mainBoxName).checked = objs.length == objLen;
    },

/**
 * 刷新状态栏的进度
 */
    refreshStatus:function() {
        var objIFrame = window.document.createElement("<IFRAME name='refreshWindowStatus'></IFRAME>");
        objIFrame.style.display = "none";
        window.document.body.appendChild(objIFrame);
        var iframeDoc = window.frames["refreshWindowStatus"].document.open("text/html", "replace");
        with (iframeDoc) {
            writeln("<html>");
            writeln("<body>");
            writeln("<script>");
            writeln("window.top.status='完成';");
            writeln("<\/script>");
            writeln("<\/body>");
            writeln("<\/html>");
        }
        iframeDoc.close();
        window.document.body.removeChild(objIFrame)
    }  ,

/**
 * 回车代替tab
 * 姜敏
 */
    handleKey:function () {
        var gk = window.event.keyCode;
        if (gk == 13) {
            if (window.event.srcElement.tagName != 'TEXTAREA') {
                window.event.keyCode = 9;
            }
        }
    },



    showProgressTitle:function(progressTitle) {
        if (progressTitle != null) {
            Window.createProgress(progressTitle);
        }
    },
/**
 * 像radio一样的复选框
 */
    statusCheckedAsRadio:function(object) {
        var name = object.name;
        var objCheckBoxs = Document.getObjects(name);
        if (objCheckBoxs != null) {
            for (var i = 0; i < objCheckBoxs.length; i++) {
                if (objCheckBoxs[i] != object) {
                    objCheckBoxs[i].checked = false;
                }
            }
        }
    },

    exportExcel:function(elementID, filename) {
        var iframe = Document.getObject("exportExcelFrame");
        var form = Document.getObject("exportExcelForm");
        if (!iframe) {
            iframe = window.document.createElement("<iframe name='exportExcelFrame' style='display:none'></iframe>");
            document.body.appendChild(iframe);
        }
        if (!form) {
            form = window.document.createElement("<form name='exportExcelForm' target='exportExcelFrame' style='display:none' method='post'></form>")
            form.action = "pageExportExcel.system";
            var input = window.document.createElement("<input type='hidden' name='filename'>");
            var textarea = window.document.createElement("<textarea name='content' style='display:none'></textarea>")
            form.appendChild(input);
            form.appendChild(textarea);
            document.body.appendChild(form);
        }
        form.all.item("filename").value = filename;
        form.all.item("content").value = Document.getObject(elementID).outerHTML;
        form.submit();
    },
    exportDoc:function(ElementId, filename) {
        var iframe = Document.getObject("exportExcelFrame");
        var form = Document.getObject("exportExcelForm");
        if (!iframe) {
            iframe = window.document.createElement("<iframe name='exportExcelFrame' style='display:none'></iframe>");
            document.body.appendChild(iframe);
        }
        if (!form) {
            form = window.document.createElement("<form name='exportExcelForm' target='exportExcelFrame' style='display:none' method='post'></form>")
            form.action = "pageExportWord.system";
            var input = window.document.createElement("<input type='hidden' name='filename'>");
            var textarea = window.document.createElement("<textarea name='content' style='display:none'></textarea>")
            form.appendChild(input);
            form.appendChild(textarea);
            document.body.appendChild(form);
        }
        form.all.item("filename").value = filename;
        form.all.item("content").value = Document.getObject(ElementId).innerHTML;
        form.submit();
    },

  back:function(){
    history.back();
  },
  forward:function(){
    history.forward();
  } ,
  refresh:function(){
    location.reload();
  },
  close:function(){
    if(self==self.top){
      self.close();
    }

  }

}

