/*
 * Javascript для календаря: фильтрация и сортировка на клиенте
 */

var sortByDate = false;

function updateZebra()
{
    var i = 1;
    $('#interactiveCalendar tr:not(:first):not(.tur):visible').each(function() {
        if (0 == i++ % 2) {
            $(this).addClass('yellow');
        } else {
            $(this).removeClass('yellow');
        }
    });
}

function getInnerText(el)
{
    if (el.textContent) {
        return el.textContent;
    }
    if (el.innerText) {
        return el.innerText;
    }

    var str = '';
    var cs  = el.childNodes;
    var l   = cs.length;
    for (var i = 0; i < l; i++) {
        switch ( cs[i].nodeType ) {
            case 1: // ELEMENT_NODE
                str += getInnerText(cs[i]);
                break;
            case 3: // TEXT_NODE
                str += cs[i].nodeValue;
                break;
        }
    }
    return str;
}


function sortTable(link)
{
    function sortCallbackSingle(a, b)
    {
        return a[1] < b[1] ? -1 : 1;
    }

    function sortCallbackDouble(a, b)
    {
        // пустая дата
        if ('' == a[1] && '' != b[1]) {
            return 1;
        } else if ('' != a[1] && '' == b[1]) {
            return -1;
        }
        return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2];
    }

    var sortdir = $('img', link);
    if (0 > sortdir.attr('src').indexOf('pointer-down') || !sortdir.is(':visible')) {
        var desc = false;
        sortdir.attr('src', '/images/pointer-down.gif');
    } else {
        var desc = true;
        sortdir.attr('src', '/images/pointer-up.gif');
    }
    $('#interactiveCalendar th.sort img').hide();
    sortdir.show();

    var column = link.parentNode.cellIndex;
    sortByDate = column > 0;
    var table  = document.getElementById('interactiveCalendar');

    var newRows = new Array();
    for (var i = 1; i < table.rows.length; i++) {
        var row = table.rows[i];
        if ((' ' + row.className + ' ').indexOf(' tur ') < 0) {
            if (column > 0) {
                newRows.push([row, row.cells[column].getAttribute('date'), parseInt(getInnerText(row.cells[0]))]);
            } else {
                newRows.push([row, parseInt(getInnerText(row.cells[0]))]);
            }
        } else if (column > 0) {
            row.style.display = 'none';
        }
    }

    newRows.sort(column > 0? sortCallbackDouble: sortCallbackSingle);
    if (desc) {
        newRows.reverse();
    }

    var stages = {};
    for (i = 0; i < newRows.length; i++) {
        var res = newRows[i][0].className.match(/stage(\d+)/);
        if (!Object.prototype.hasOwnProperty.call(stages, res[0])) {
            stages[res[0]] = true;
            table.tBodies[0].appendChild(document.getElementById(res[0]));
        }
        if (!sortByDate && 'none' != newRows[i][0].style.display) {
            document.getElementById(res[0]).style.display = '';
        }
        table.tBodies[0].appendChild(newRows[i][0]);
    }

    updateZebra();
}

function applyFilters()
{
    var stage  = $('#stages').val();
    var home   = $('#homeTeams').val();
    var away   = $('#awayTeams').val();
    var strict = !!$('#strictTeams').attr('checked');

    // убираем все подзаголовки туров, на следующем шаге откроем нужные
    $('#interactiveCalendar tr.tur').hide();
    $('#interactiveCalendar tr:not(:first):not(.tur)').each(function() {
        var tr      = $(this);
        var visible = (!stage || tr.hasClass('stage' + stage)) &&
                      (strict &&
                      (!home || tr.hasClass('home' + home)) &&
                      (!away || tr.hasClass('away' + away)) ||
                      !strict &&
                      (!home || tr.hasClass('home' + home) || tr.hasClass('away' + home)) &&
                      (!away || tr.hasClass('home' + away) || tr.hasClass('away' + away)));
        if (!visible) {
            tr.hide();
        } else {
            tr.show();
            if (!sortByDate) {
                if (stage) {
                    $('#stage' + stage).show();
                } else {
                    var res = this.className.match(/stage(\d+)/);
                    $('#stage' + res[1]).show();
                }
            }
        }
    });
    updateZebra();
}

function heightCorrection()
{
    // убираем нахрен
}

$(document).ready(function() {
    $('.interactiveSelectBox select').each(function() {
        $(this).removeAttr('disabled');
    });
    $('.interactiveSelectBox input').each(function() {
        $(this).removeAttr('disabled');
    });
    // ежели нажали "Назад"
    if ($('#stages').val() || $('#homeTeams').val() || $('#awayTeams').val()) {
        applyFilters();
    }
});
