//===================================================================
//建立日期：2005年6月14日
//作者：杜保发@东南融通
//功能概述：WEB界面框架脚本库，每套不同的WEB界面框架对应的脚本库可能不同，
//需要由开发者自己提供。
//调用方法：在调用文件头引入即可，如下：
//<head>
//<script src="/js/framework.js" ></script>
//</head>
//===================================================================
//说明：
//WEB界面框架的查询文件--moduleSearch（简称:查询文件，下同）
//WEB界面框架的列表文件--moduleList（简称:列表文件，下同）
//WEB界面框架的编辑文件--moduleEdit（简称:编辑文件，下同）
//WEB界面框架的工具栏文件--moduleToolBar（简称:工具栏文件，下同）

//===================================================================
//功能:取得错误信息并弹出显示（如果有）、删除成功后执行查询文件的查询函数
//输入参数:
//  frame:查询文件所在的frame的名称
//调用:列表文件装载完毕后，调用本函数(onload="DoLoadList()")
//===================================================================

function DoLoadList(frame)
{
    hideProcessBar(this);
    //隐藏进度条
    try
    {
        if (typeof(frame) == 'undefined')   frame = "parent.left_frame";
        var flag = divError.innerText;
        var status = document.getElementById("statusList").value;

        if (flag != "" && status == "delete")
        {
            alert("操作失败！\n\n" + flag);
            return false;
        }
        if (flag != "")
        {
            alert(flag);
            return false;
        }
        if (status == "delete")
        {
            eval(frame + ".DoSearch();");
        }
    }
    catch (e)
    {
        processException(e);
    }
}

//===================================================================
//功能:设置查询文件内隐藏变量的当前页号、总页数、并提交查询。
//输入参数:
//sValue:第一页(First)，上一页(Prev)，下一页(Next),最后一页(Last)
//frame:查询文件所在的frame的名称
//调用:列表文件调用装载完毕后调用
//===================================================================

function DoPage(sValue, frame)
{
    try
    {
        if (typeof(frame) == 'undefined')   frame = "parent.left_frame";
        eval("var objForm = " + frame + ".document.frmSearch;");
        var intPage = parseInt(objForm.intCurrentPage.value);
        var intTotalPages = parseInt(objForm.intTotalPages.value);
        switch (sValue)
                {
            case "First":
            {
                if (intPage > 1)
                {
                    showProcessBar(this);
                    //显示进度条
                    objForm.intCurrentPage.value = 1;
                    objForm.submit();
                }
                break;
            }
            case "Prev":
            {

                if (intPage > 1)
                {
                    showProcessBar(this);
                    //显示进度条
                    objForm.intCurrentPage.value = intPage - 1;
                    objForm.submit();
                }
                break;
            }
            case "Next":
            {

                if (intPage < intTotalPages)
                {
                    showProcessBar(this);
                    //显示进度条
                    objForm.intCurrentPage.value = intPage + 1;
                    objForm.submit();
                }
                break;
            }
            case "Last":
            {

                if (intPage < intTotalPages)
                {
                    showProcessBar(this);
                    //显示进度条
                    objForm.intCurrentPage.value = intTotalPages;
                    objForm.submit();
                }
                break;
            }
            case "ListAll":
            {
                if (intTotalPages > 1)
                {
                    showProcessBar(this);
                    //显示进度条
                    objForm.intCurrentPage.value = 1;
                    objForm.intTotalPages.value = -1;
                    //用来做标志判断
                    objForm.submit();
                }
                break;
            }
        }
    }
    catch (e)
    {
        processException(e);
    }
}

//===================================================================
//功能:设置列表文件及查询文件的页号、总页数。
//输入参数:
//totalPage:总页数
//currPage:当前页号
//frame:查询文件所在的frame的名称
//调用:列表文件调用装载完毕后调用
//===================================================================

function setPage(totalPage, currPage, frame)
{
    var intCurrPage = parseInt(currPage);
    var intTotalPages = parseInt(totalPage);
    if (intTotalPages == 0)  currPage = "0";
    try
    {
        document.getElementById("spnCurrPage").innerText = currPage;
        document.getElementById("spnTotalPages").innerText = totalPage;
        document.getElementById("firstPage").disabled = true;
        document.getElementById("prevPage").disabled = true;
        document.getElementById("nextPage").disabled = true;
        document.getElementById("lastPage").disabled = true;
        document.getElementById("listAll").disabled = true;
        if (intCurrPage > 1)
        {
            document.getElementById("firstPage").disabled = false;
            document.getElementById("prevPage").disabled = false;
        }

        if (intCurrPage < intTotalPages)
        {
            document.getElementById("nextPage").disabled = false;
            document.getElementById("lastPage").disabled = false;
        }
        if (intTotalPages > 1)
        {
            document.getElementById("listAll").disabled = false;
        }
        if (intTotalPages == 0) alert("没有查询到符合条件的记录！");
    }
    catch(e)
    {
        processException(e);
    }
    try
    {
        if (typeof(frame) == 'undefined')   frame = "parent.left_frame";
        eval("var objForm = " + frame + ".document.frmSearch;");
        objForm.intCurrentPage.value = currPage;
        objForm.intTotalPages.value = totalPage;
    }
    catch (e)
    {
        processException(e);
    }
}

//===================================================================
//功能:如果返回结果大于或等于指定的记录数，弹出提示
//输入参数:
//maxResults:指定的记录数
//调用:列表文件调用装载完毕后调用
//===================================================================

function setRecordLimit(maxResults)
{
    if (maxResults > 0)
    {
        var hint = "您本次查询结果的实际记录数多于" + maxResults + "条，系统只取前" + maxResults + "条。\n\n";
        hint += "要缩小查询结果，请输入更多或更精确的查询条件！";
        alert(hint);
    }
}

//===================================================================
//功能:设置列表文件的开始记录数、结束记录数、总记录数
//输入参数:fromIndex:开始记录数,toIndex:结束记录数,totalRecords:总记录数
//调用:列表文件调用装载完毕后调用
//===================================================================

function setRecord(fromIndex, toIndex, totalRecords)
{
    try
    {
        document.getElementById("spnFromIndex").innerText = fromIndex;
        document.getElementById("spnToIndex").innerText = toIndex;
        document.getElementById("spnTotalRecords").innerText = totalRecords;
    }
    catch(e)
    {
        processException(e);
    }
}

function getTable()
{
    /* try {
             var len = document.all.length;
             for(var i=0;i<len;i++)
             {
                 if (document.all(i).tagName == "TABLE")
                 {
                     return document.all(i);
                 }
             }
         } catch (e)
         {
             return null;
         }  */
    return document.getElementById("mytable");
}

//===================================================================
//功能:判断界面上是否函数checkbox或radio控件，若有，则返回其、否则返回空
//输入参数:
//调用:
//===================================================================

function getControlType()
{
    try
    {
        var len = document.all.length;
        for (var i = 0; i < len; i++)
        {
            if (document.all(i).type == "checkbox")         return "checkbox";
            if (document.all(i).type == "radio")            return "radio";
        }
    }
    catch (e)
    {
        return "";
    }
    return "";
}

//===================================================================
//功能:获取表格的指定列的行记录串
//输入参数:colsIndexList:列号，多个用逗号分开，如selectRow(1,2,3)
//调用:
//===================================================================

function selectRow(colsIndexList)
{
    try
    {
        var mytable = getTable();
        var tmpColsIndexList = (typeof(colsIndexList) == 'undefined'?"":colsIndexList);
        var controlType = getControlType();
        var rowCount = mytable.rows.length;
        var rowSeparator = "\n";
        var result = "";
        var row;
        for (var i = 1; i < rowCount; i++)
        {
            row = rowCount > 2?rowid[i - 1]:rowid;
            if (row.checked)
            {
                if (controlType == "checkbox")
                    result += result == ""? getRowData(mytable.rows(i), tmpColsIndexList):rowSeparator + getRowData(mytable.rows(i), tmpColsIndexList);
                else if (controlType == "radio")
                {
                    return getRowData(mytable.rows(i), tmpColsIndexList);
                }
                else
                    return "";
            }
        }
        return result;
    }
    catch(e)
    {
        return "";
    }
}


function getRowData(row, colsIndexList)
{
    var tmpStr = (typeof(colsIndexList) == 'undefined'?"":colsIndexList);
    return (tmpStr == ""?getAllRowData(row):getPartRowData(row, tmpStr));
}

function getPartRowData(row, colsIndexList)
{
    try
    {
        var colSeparator = "\t";
        var colCount = row.cells.length;
        var result = "";
        var j = 0;
        for (var i = 1; i < colCount; i++)
        {
            if (("," + colsIndexList + ",").indexOf("," + i + ",") < 0) continue;
            j++;
            result += j > 1?colSeparator + row.cells(i).innerText:row.cells(i).innerText;
        }
        return result;
    }
    catch(e)
    {
        return "";
    }
}

function getAllRowData(row)
{
    var colSeparator = "\t";
    var colCount = row.cells.length;
    var result = "";
    for (var i = 1; i < colCount; i++)
    {
        result += i > 1?colSeparator + row.cells(i).innerText:row.cells(i).innerText;
    }
    return result;
}

//===================================================================
//功能:获取动态表格的选中行的id
//输入参数:target，动态表格所在的frame的名称
//调用:
//===================================================================

function getRowID(target)
{
    return formatURL(trim(eval(getTarget(target) + ".rowId")));
}

//格式化url的串
function formatURL(str)
{
    var arr = new Array("#");
    for (var i = 0; i < arr.length; i++)
    {
        var regExp = new RegExp(arr[i], "gi");
        str = str.replace(regExp, escape(arr[i]));
    }
    return str;
}

function getTarget(target)
{
    if (typeof(target) == 'undefined')
    {
        target = "parent.right_frame";
    }
    return target;
}

//===================================================================
//功能:获取url串最后一个"/"后的内容
//输入参数:url
//调用:
//===================================================================

function getModuleFile(url)
{
    if (url == "") return "";
    var len1 = url.lastIndexOf('/');
    var len2 = url.indexOf('.');
    return url.substring(len1 + 1, len2);
}

//===================================================================
//功能:为url串追加参数id和id值（动态表格选中行的id）
//输入参数:url，未追加id的url串,target:动态表格所在的frame名称
//调用:
//===================================================================

function formatFile(url, target)
{
    var id = getRowID(target);
    if (id == "")
    {
        alert("没有选择记录！");
        return "";
    }
    var result = "";
    if (url.indexOf("?") == -1)
        result = url + "?id=" + id;
    else
        result = url + "&id=" + id;
    return result;
}

//===================================================================
//功能:默认删除函数
//输入参数:
//url，删除要调用的url,
//isConfirm:是否要出现删除确认提示，默认会出现提示
//target:动态表格所在的frame名称
//调用:
//===================================================================

function DoDelete(url, isConfirm, target)
{
    try
    {
        if (typeof(isConfirm) == 'undefined') isConfirm = true;
        if (typeof(url) == 'undefined' || url == "")
        {
            alert("没有指定文件！");
            return false;
        }
        var file = formatFile(url, target);
        if (file == "") return false;
        if (isConfirm && (!confirm("您确实要删除当前记录吗？\n\n删除后无法恢复。")))  return false;
        var s = getTarget(target) + ".document.location.href='" + file + "'";
        if (typeof(s) == "string") eval(s);
    }
    catch (e)
    {
        processException(e);
    }
}

//===================================================================
//功能:默认打开窗口函数
//输入参数:
//url，打开窗口调用的url
//winname:窗口名称
//width:窗口的宽度,默认500px;
//height:窗口的高度,默认400px;
//style:窗口样式
//调用:
//===================================================================

function openWin(url, winname, width, height, style)
{
    try
    {
        if (typeof(winname) == 'undefined' || winname == "") winname = "LongTop_Win";
        if (typeof(width) == 'undefined')  width = 500;
        if (typeof(height) == 'undefined') height = 400;
        if (typeof(style) == 'undefined') style = "";
        if (typeof(url) == 'undefined' || url == "")
        {
            alert("没有指定要装载的文件！");
            return false;
        }
        var sUrl = url;
        var top = Math.floor((screen.availHeight - height) / 2) - 20;
        var left = Math.floor((screen.availWidth - width) / 2) - 20;
        var sFeature = "";
        if (style != "")
        {
            sFeature = style;
        }
        else
        {
            sFeature += "left=" + left + ",top=" + top + ",height=" + height + ",width=" + width;
            sFeature += ",status=yes,directories=no,scrollbars=yes,toolbar=no,menubar=no,location=no,resizable=yes";
        }

        // var srcArr = new Array("?","&","=","/",".");//,"<",">","#","$","%","~","*","'","\(","\)","@","!","^","-","+","|","\\","{","}","[","]",";",":",",");
        //var desArr = new Array("_","_","_","_","_");//,"_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_");
        // alert( formatStrWidthArr(winname,srcArr,desArr) );
        var regExp = new RegExp("[%,#, ]", "gi");
        //去掉含有%,#以及空格的字符。
        winname = winname.replace(regExp, "");
        var win = window.open(sUrl, winname, sFeature);
        if (win != null)   win.focus();

    }
    catch (e)
    {
        processException(e);
    }
}

//===================================================================
//功能:出现删除确认的删除函数 ，请看DoDelete
//输入参数:
//url，删除要调用的url,
//target:动态表格所在的frame名称
//调用: 工具栏文件调用
//===================================================================

function DoDele(url, target)
{
    DoDelete(url, true, target);
}

//===================================================================
//功能:默认打开（修改及新增）记录的函数。若模块内已有窗口打开，则切换到打开的窗口
//并显示当前选中的记录明细，若未打开，则先创建新窗口并显示当前选中的记录明细。
//输入参数:
//url:打开记录的url
//text:窗口的标题
//target:动态表格所在的frame名称
//调用: 工具栏文件调用
//===================================================================

function DoOpen(url, text, target)
{
    try
    {
        var sUrl = formatFile(url, target);
        if (sUrl == "") return;
        parent.parent.openModule(text, sUrl);
        //factory.jsp
    }
    catch(e)
    {
        processException(e);
    }
}

//===================================================================
//功能:默认新增记录的函数。若模块内已有窗口打开，则切换到打开的窗口
//并显示新增界面，若未打开，则先创建新窗口并显示新增界面。
//输入参数:
//url:新增记录的url
//text:窗口的标题
//target:动态表格所在的frame名称
//调用: 工具栏文件调用
//===================================================================

function DoNew(url, text)
{
    parent.parent.openModule(text, url);
    //factory.jsp
}

//===================================================================
//功能:查询文件调用的查询方法
//输入参数:
//iframe:列表文件所在的iframe对象
//调用: 查询文件调用
//===================================================================

function DoSearch(iframe)
{
    if (typeof(iframe) == 'undefined') iframe = parent.right_frame;
    showProcessBar(iframe);
    try
    {
        var objForm = frmSearch;
        objForm.intTotalPages.value = "1";
        objForm.intCurrentPage.value = "1";
        objForm.submit();
    }
    catch(e)
    {
        processException(e);
    }
}

//===================================================================
//功能:在查询文件界面按回车要执行的方法，默认执行DoSearch()
//输入参数:
//method:回车要执行的方法名称
//调用: 查询文件调用
//===================================================================

function DoKeyPress(method)
{
    var execute = (typeof(method) == "undefined")?"DoSearch()":method;
    if (window.event.keyCode == 13)  //Enter
    {
        eval(execute);
        window.event.returnValue = false;
    }
}

//===================================================================
//功能:取得编辑界面的错误信息并弹出显示（如果有）、操作成功后弹出信息操作成功的信息
//输入参数:
//调用:编辑文件装载完毕后，调用本函数(onload="DoLoadEdit()")
//===================================================================

function DoLoadEdit()
{
    try
    {
        var flag = divError.innerText;
        if (flag != "")
        {
            alert(flag);
            return false;
        }

        var initValue = document.getElementById("init").value;
        //是否第一次打开
        if ((initValue == "no")) //保存成功
        {
            alert("操作成功！");
            // window.opener.DoSearch();
            //window.opener.location.reload();
        }
    }
    catch (e)
    {
        processException(e);
    }
}

//===================================================================
//功能:显示/隐藏查询界面
//输入参数:frameset：工具栏文件所在父类的框架集的名称
//调用:工具栏文件的显示页按钮调用该函数
//===================================================================

function DoShowPage(frameset)
{
    try
    {
        if (typeof(frameset) == 'undefined')
            frameset = parent.content_frameset;
        var frameset = parent.content_frameset;
        if (frameset.cols == '0,100%')
        {
            btnPage.title = "单击隐藏左边页";
            imgPage.src = "../images/vw_max.gif";
            frameset.cols = frameset.oldCols;
        }
        else
        {
            btnPage.title = "单击显示左边页";
            imgPage.src = "../images/vw_normal.gif";
            frameset.oldCols = frameset.cols;
            frameset.cols = '0,100%';
        }
    }
    catch(e)
    {
        processException(e);
    }
}


