﻿/**
 * 初始化分页工具条，根据当前页号、每页条数、总共条数生成控制分页的工具条
 * 生成的工具条中会生成两个分别名为“pageNo”和“pageSize”（可由varPageNo和varPageSize参数定义这两个变量的名称）的输入框，可包含在表单中
 * @param total 总共条数，<0表示无总数，其中-1表示已经到达最后记录，不能再下一页。
 * @param copyForm 需要复制的表单，如果为null，则只生成一些按钮；如果是一个提交表单（如查询表单），则会生成对应该表单的提交框
 * @param varPageNo 需要生成的页码变量名，默认是"pageNo"
 * @param varPageSize 需要生成的每页大小变量名，默认是"pageSize"
 */
function showPager(pageNo, pageSize, total, copyForm, varPageNo, varPageSize) {
    pageNo *= 1; pageSize *= 1;
    if(total == null || total == '' && total != 0) total = -2; else total *= 1;
    if(varPageNo == null || varPageNo == '') varPageNo = "pageNo";
    if(varPageSize == null || varPageSize == '') varPageSize = "pageSize";

    var inForm = copyForm != null && copyForm.tagName == "FORM";
    if(inForm) {
        document.write("<table><tr><form action='"+copyForm.action+"'><td style='font-size:12px;'>"
            +"<table style='display:none'>"
            +copyForm.innerHTML
            +"</table>"
            );
    }

    document.write("每页<input name="+varPageSize+" size=2 style=text-align:center value="+pageSize+">条");
    if(total >= 0) {
        var totalPage = Math.floor(total/pageSize)+(total%pageSize>0?1:0);
        document.write("共"+totalPage+"页"+total+"条 ");

    } else if(total == -1) { //已经是最后一页
        totalPage = pageNo;

    } else { //后面还有，但不知数目
        totalPage = pageNo+1;
    }

    document.write("<input type=button value='首页' "+(pageNo>1?"":"disabled")+" onclick='if(form==null)return; form."+varPageNo+".value=1; if(form.submit.name != null) try { form.submit.removeAttribute(&quot;name&quot;);} catch(e){} if(form.onsubmit==null || form.onsubmit()) form.submit()'>");
    document.write("<input type=button value='上页' "+(pageNo>1?"":"disabled")+" onclick='if(form==null)return; form."+varPageNo+".value--; if(form.submit.name != null) try { form.submit.removeAttribute(&quot;name&quot;);} catch(e){} if(form.onsubmit==null || form.onsubmit()) form.submit()'>");
    document.write("<input name="+varPageNo+" title='当前页，输入页号再回车可直接跳页' size=2 style=text-align:center value="+pageNo+">");
    document.write("<input type=button value='下页' "+(pageNo<totalPage?"":"disabled")+" onclick='if(form==null)return; form."+varPageNo+".value++; if(form.submit.name != null) try { form.submit.removeAttribute(&quot;name&quot;);} catch(e){} if(form.onsubmit==null || form.onsubmit()) form.submit()'>");
    if(total >= 0) document.write("<input type=button value='末页' "+(pageNo<totalPage?"":"disabled")+" onclick='if(form==null)return; form."+varPageNo+".value="+totalPage+"; if(form.submit.name != null) try { form.submit.removeAttribute(&quot;name&quot;);} catch(e){} if(form.onsubmit==null || form.onsubmit()) form.submit()'>");
    document.write("<input type=submit style='width:0pt;height:0pt;'>");

    if(inForm) document.write("</td></form></tr></table>");
}

/**
 * 从XML数据岛中的分页数据初始化分页工具条
 * @param xmlID 数据岛标识字符串，不需要加“#”号，需要该岛根节点下有“pageNo”、“pageSize”和“total”三个属性或子标记。如果这些属性在某个子元素下，则用一个table连接该元素，然后调用此方法时以null为参数即可。
 * 如果这三个标记不在根路径下，需要在页面中加入<table>标记连接上该节点，然后以空参数调用本方法即可。
 */
function showXmlPager(xmlID) {
    if(xmlID == null) xmlID = '';
    else if(xmlID != '') xmlID = "#"+xmlID;

    document.write("每页<input name=pageSize datafld=pageSize size=2 style='text-align:center' datasrc='"+xmlID+"' >条");
    document.write("共<span id=spanPager_totalPage>1</span>页<span id=spanPager_total>1</span>条 ");
    document.write("<input datafld=total type=hidden datasrc='"+xmlID+"' onpropertychange='spanPager_total.innerText=value; spanPager_totalPage.innerText=Math.ceil(parseInt(value)/parseInt(form.pageSize.value))'>");

    document.write("<input type=submit style='width:0'>");
    document.write("<input type=button value=首页 onclick='if(form==null)return; form.pageNo.value=1; if(form.onsubmit==null || form.onsubmit()) form.submit()'>");
    document.write("<input type=button value=上页 onclick='if(form==null)return; form.pageNo.value--; if(form.onsubmit==null || form.onsubmit()) form.submit()'>");
    document.write("<input name=pageNo datafld=pageNo title='当前页，输入页号再回车可直接跳页' size=2 style='text-align:center' datasrc='"+xmlID+"' onpropertychange='if(form==null)return; previousSibling.disabled=(parseInt(value)<2); previousSibling.previousSibling.disabled=previousSibling.disabled; nextSibling.disabled=(parseInt(value)>=parseInt(spanPager_totalPage.innerText)); nextSibling.nextSibling.disabled=nextSibling.disabled '>");
    document.write("<input type=button value=下页 onclick='if(form==null)return; form.pageNo.value++; if(form.onsubmit==null || form.onsubmit()) form.submit()'>");
    document.write("<input type=button value=末页 onclick='if(form==null)return; form.pageNo.value=spanPager_totalPage.innerText; if(form.onsubmit==null || form.onsubmit()) form.submit()'>");
}

/**
 * 从XML数据岛中的分页数据初始化分页工具条
 * @param xmlIsland 数据岛，不需要加“#”号
 * @param pagerPath 分页数据所在的路径，指向一个节点，该节点有“pageNo”、“pageSize”和“total”三个属性
 * 注意：这个方法在从下一页面返回时会有问题，无法显示分页按钮。建议采用上面新版本的showXmlPager()函数
 */
function showPagerFromXML(xmlIsland,pagerPath) {
    var pager = xmlIsland.selectSingleNode(pagerPath);
    if(pager == null) { alert(" pager not found!"); return; }
    var pageNo = pager.getAttribute("pageNo");
    var pageSize = pager.getAttribute("pageSize");
    var total = pager.getAttribute("total");
    showPager(pageNo,pageSize,total);
}