﻿// JScript 文件
function ___InitList(tab, rowCss, selectedRowCss,mousemoveRowCss, isHaveCkb,isSelectSingle, rowDblClickFun,rowcount)
{
    tab.selectedIndex = -1;
    tab.selectedRowCss = selectedRowCss;
    tab.rowCss = rowCss;
    tab.mousemoveRowCss = mousemoveRowCss;
    tab.isHaveCkb = isHaveCkb;
    tab.isSelectSingle = isSelectSingle;
    for(var i=0;i<tab.rows.length-1;i++)
    {
        tab.rows[i + 1].className = rowCss;
        tab.rows[i + 1].onmouseover = ___ListRowOnMouseOver;
        tab.rows[i + 1].onmouseout = ___ListRowOnMouseOut;
        tab.rows[i + 1].onmousedown = ___ListRowOnmouseDown;
        if (tab.isHaveCkb)
        {
            tab.rows[i + 1].ckb = ___GetCheckBoxByRow(tab.rows[i + 1]);
            if (tab.isSelectSingle)
                tab.rows[i + 1].ckb.onclick = ___ClearOtherCheckBox;
        }
        if (rowDblClickFun)
            tab.rows[i + 1].ondblclick = rowDblClickFun;
    }
    if (tab.isHaveCkb)
    {
        tab.headCkb = ___GetCheckBoxByRow(tab.rows[0]);
        if (tab.isSelectSingle)
        {
            tab.headCkb.style.display = "none";
        }
        tab.headCkb.onclick = ___ListCKBFull;
    }
    if (rowcount > tab.rows.length - 1)
    {
        var rowindex = tab.rows.length;
        var insercnt = rowcount - tab.rows.length;
        for (var i=0; i <= insercnt;i++)
        {
            var row = tab.insertRow(rowindex+i);         
            for (var j = 0; j <=tab.rows[0].cells.length-1;j++)
            {
                var col = row.insertCell(j);
            }
        }
    }
}

function ___ClearOtherCheckBox()
{
    var row = ___GetEventRow(event);
    var tab = ___GetTableByEle(row);
    for(var i=0;i<tab.rows.length-1;i++)
    {
        if(row.ckb&&tab.rows[i + 1].ckb)
        {
            if (tab.rows[i + 1].ckb.id == row.ckb.id)
                tab.rows[i + 1].ckb.checked = true;
            else
                tab.rows[i + 1].ckb.checked = false; 
        }
    }
}

function ___ListRowOnMouseOver()
{
    var row = ___GetEventRow(event);
    var tab = ___GetTableByEle(row);
    if (row.className != tab.selectedRowCss)
        row.className = tab.mousemoveRowCss;
}
function ___ListRowOnMouseOut()
{
    var row = ___GetEventRow(event);
    var tab = ___GetTableByEle(row);
    if (tab.selectedIndex != row.rowIndex - 1)
    {
        row.className = tab.rowCss;
    }
}
function ___ListRowOnmouseDown()
{
    //
   // 
    var eObj = event.srcElement;
    if (eObj.tagName.toLowerCase() == "input" && eObj.type.toLowerCase() == "checkbox")
        return;
    var row = ___GetEventRow(event);
    var tab = ___GetTableByEle(row);
    if (row.rowIndex - 1 == tab.selectedIndex)
    {
        //row.className = tab.rowCss;
        if (row.ckb)
        {
            if (row.ckb.checked)
                row.ckb.checked = false;
            else
                row.ckb.checked = true;
        }
        return;
    }
    if (tab.selectedIndex >= 0)
        tab.rows[tab.selectedIndex + 1].className = tab.rowCss;
    tab.selectedIndex = row.rowIndex - 1;
    row.className = tab.selectedRowCss;
    if (tab.isHaveCkb)
    {
        for(var i=0;i<tab.rows.length-1;i++)
        {
            if (tab.rows[i + 1].ckb)
            {
                if (tab.isSelectSingle)
                {
                    tab.rows[i + 1].ckb.checked = (tab.selectedIndex == i);
    //                if (tab.selectedIndex == i)
    //                {
    //                    if (tab.rows[i + 1].ckb.checked)
    //                        tab.rows[i + 1].ckb.checked = false;
    //                    else
    //                        tab.rows[i + 1].ckb.checked = true;
    //                }
    //                else
    //                    tab.rows[i + 1].ckb.checked = false;
                }
                else
                {
                    if (tab.rows[i + 1].ckb.id == row.ckb.id)
                    {
                        if (tab.rows[i + 1].ckb.checked)
                            tab.rows[i + 1].ckb.checked = false;
                        else
                            tab.rows[i + 1].ckb.checked = true;
                    }
                }
            }
        }
    }   
}

function ___GetEventRow(event)
{
    var row = event.srcElement;
    while(row.tagName.toLowerCase() != "tr")
        row = row.parentElement;
    
    return row;
}

function ___GetTableByEle(ele)
{
    var tab = ele.parentElement;
    while (tab.tagName.toLowerCase() != "table")
        tab = tab.parentElement;
    return tab;
}
function ___GetCheckBoxByRow(row)
{
    var cell = row.cells[0];
    var ckb = false;
    for(var i=0;i<cell.childNodes.length;i++)
    {
        var node = cell.childNodes[i];
        if (node.nodeType == 1 && node.tagName.toLowerCase() == "input" && node.type.toLowerCase()=="checkbox")
        {
            ckb = node;
            break;
        }
    }
    return ckb;
}
function ___ListCKBFull()
{
    var ckb = event.srcElement;
    var tab = ___GetTableByEle(ckb)
    for(var i=0;i<tab.rows.length-1;i++)
    {
        tab.rows[i + 1].ckb.checked = ckb.checked;
    }
    if (!ckb.checked && tab.selectedIndex >= 0)
    {
        tab.rows[tab.selectedIndex + 1].className = tab.rowCss;
        tab.selectedIndex = -1;
    }
}
function ___GetArrayValue(valArray, index)
{
    var result = "";
    if (valArray && valArray.length > index)
        result = valArray[index];
    return result;
}
//取得由背景选中的行，如果未选中则返回"Null"
function ___GetListSelectedRow(listTab)
{
    var result = false;
    if (listTab.selectedIndex >= 0)
        result = listTab.rows[listTab.selectedIndex + 1];
    return result;
}
//取得由CheckBox选中的行的数组，如果未选中则返回"Null"
function ___GetListCheckedRows(listTab)
{
    var result = new Array();
    var j=0;
    for(var i=0;i<listTab.rows.length-1;i++)
    {
        if(listTab.rows[i + 1].ckb)
        {
            if (listTab.rows[i + 1].ckb.checked)
            {
                result[j++] = listTab.rows[i + 1];
            }
        }
    }
    return result;
}
//删除由CheckBox选中的行
function ___DeleteRowByChecked(listTab)
{
    //
    var rows = ___GetListCheckedRows(listTab);
    if (rows || rows.length <= 0)
    {
        alert("没有选中要操作的行！");
        return ;
    }
    for(var i=rows.length - 1;i>=0;i--)
    {
        listTab.deleteRow(rows[i].rowIndex);
    }
    listTab.selectedIndex = -1;
}
//删除指定的行，注意：此处的index应该是表行的rowIndex属性减一
function ___DeleteRowByIndex(listTab,index)
{
    if (index < 0)
        return;
    var rowIndex = index + 1;
    if (listTab.rows.length > rowIndex)
    {
        listTab.rows.deleteRow[rowIndex];
    }
}
//增加一个新行
function ___AddRowToTable(listTab,rowHeight,rowDblClickFun,valArray)
{
    //
    var row = listTab.insertRow(listTab.rows.length);
    row.className = listTab.rowCss;
    row.onmouseover = ___ListRowOnMouseOver;
    row.onmouseout = ___ListRowOnMouseOut;
    row.onclick = ___ListRowOnClick;
    if (rowDblClickFun)
        row.ondblclick = rowDblClickFun;
    for(var i=0;i<listTab.rows[0].cells.length;i++)
    {
        var cell = row.insertCell(i);
        cell.height=rowHeight;
        if (i==0 && listTab.isHaveCkb)
        {
            var ckbID = listTab.id + "__Line_Ckb_" + String(row.rowIndex);
            cell.innerHTML = "<input type='checkbox' id='" + ckbID + "' />";
            cell.align = "center";
            row.ckb = ___GetCheckBoxByRow(row);
        }
        if (valArray)
        {
            if (i == 0)
            {
                if (!listTab.isHaveCkb)
                    cell.innerHTML = ___GetArrayValue(valArray,i);
            }
            else
            {
                if (listTab.isHaveCkb)
                    cell.innerHTML = ___GetArrayValue(valArray,i-1);
                else
                    cell.innerHTML = ___GetArrayValue(valArray,i);
            }
        }
    }
}

function ___FillNullRow(tab,rowheight,rowcount)
{
    if (rowcount > listTab.rows.length - 1)
    {
        var rowindex = listTab.rows.length;
        var insercnt = rowcount - listTab.rows.length;
        for (var i=0; i <= insercnt;i++)
        {
            listTab.insertRow(rowindex+i);
        }
    }
}
//更新一行的值
function ___UpdateRowToTable(row, valArray)
{
    if (!valArray)
        return;
    var listTab = ___GetTableByEle(row);
    for(var i=0;i<row.cells.length;i++)
    {
        if (i == 0)
        {
            if (!listTab.isHaveCkb)
                row.cells[i].innerHTML = ___GetArrayValue(valArray,i);
        }
        else
        {
            if (listTab.isHaveCkb)
                row.cells[i].innerHTML = ___GetArrayValue(valArray,i-1);
            else
                row.cells[i].innerHTML = ___GetArrayValue(valArray,i);
        }
    }
}

