// current selection
var selectedRows = new Array();
var hiddenState = false;

function selectThis(){
    if (this.checked){
        var l = selectedRows.length;
        this.selIndex = l;
        selectedRows[l] = this.parentNode.parentNode;
        selectedRows[l].selected = true;
    } else {
        //alert('No, remove,');
        this.parentNode.parentNode.selected = false;
        selectedRows.splice(this.selIndex, 1);
    }
    if (selectedRows.length > 0){
        // turning on selection controls
        document.getElementById('selection-controls').style.display = "block";
    } else {
        document.getElementById('selection-controls').style.display = "none";
    }
}

function hideUnSelected(control){
    var tbl = document.getElementsByTagName('table')[0].tBodies[0];
    if (tbl.rows.length ==0 ){
        return;
    }
    for (var i=0; i<tbl.rows.length; i++){
        if (!hiddenState && !tbl.rows[i].selected){
            tbl.rows[i].style.display='none';
        } else {
            try{
                tbl.rows[i].style.display='table-row';
            } catch (e){
                // donkey still rulez!
                tbl.rows[i].style.display='';
            }
        }
    }
    if (!hiddenState){
        hiddenState = true;
        control.innerHTML = "Показать все";
    } else {
        hiddenState = false;
        control.innerHTML = "Спрятать невыбранные";
    }

}

function convert(value, column){
    var classes = column.className.split(' ');
    switch (classes[0]){
        case 'text' :
            return value ? value.toString() : '';
        case 'number':
            return value ? parseFloat(value) : 0;
        default:
            return value ? value.toString() : '';
    }
}

function comparator(column){
    var content = column.textContent ? 'textContent' : 'innerText';
    return function compare(tr1, tr2){
        var v1 = convert(tr1.cells[column.cellIndex][content], column);
        var v2 = convert(tr2.cells[column.cellIndex][content], column);
        if (v1 < v2){
            return -1;
        } else if (v1 > v2){
            return 1;
        } else {
            return 0;
        }
    }
}

function sortTable(table, column){
    var tBody = table.tBodies[0];
    var dataRows = tBody.rows;
    var arows = new Array();
    for (var i=0; i<dataRows.length; i++){
        arows[i] = dataRows[i];
    }

    if (table.sorted_by == column){
        arows.reverse();
    }else {
        arows.sort(comparator(column));
    }

    var fragment = document.createDocumentFragment();
    for (var i=0; i<arows.length; i++){
        fragment.appendChild(arows[i]);
    }

    tBody.appendChild(fragment);
    table.sorted_by = column;
}

window.onload = function(){
    var tbls = document.getElementsByTagName("table");
    for (var i=0; i<tbls.length; i++){
        // setting handler for sortable columns
        if (tbls[i].getElementsByClassName){
            cols = tbls[i].getElementsByClassName('sortable');
            for (var j = 0; j<cols.length; j++){
                cols[j].onclick = function(){
                    sortTable(this.parentNode.parentNode.parentNode, this);
                }
            }
        } else {
            // seems to be a donkey here!
            cols = tbls[i].tHead.getElementsByTagName('th');
            for (var j = 0; j<cols.length; j++){
                if (cols[j].className.indexOf('sortable') >= 0){
                    cols[j].onclick = function(){
                        sortTable(this.parentNode.parentNode.parentNode, this);
                    }
                }
            }
        }
    }
    var checkers;
    if (document.getElementsByClassName){
        checkers = document.getElementsByClassName('selector');
    } else {
        checkers = new Array();
        // here we now, that selector is input
        var inputs = document.getElementsByTagName('input');
        for (var i=0; i<inputs.length; i++){
            if (inputs[i].className.indexOf('selector') >= 0){
                checkers.push(inputs[i]);
            }
        }
    }
    for (var i=0; i<checkers.length; i++){
        checkers[i].checked = false;
        checkers[i].onchange = selectThis;
    }
}

