/// <reference path="jquery.intellisense.js"/>
/// <reference path="common.js" />
var tableRootDiv = '#tableholder';
$('body').on('submit', '.nosubmit', function () { return false; });

var tableController = function () {
    return $(tableRootDiv).find('#tablecontroller').val() + '.ivp/';
};

var tableAction =  function () {
    return $(tableRootDiv).find('#tableaction').val();
};

function mergeTableDefaultLoadParams(params,addKeyValue) {

    if (!params)
        params = {};

    var $tableParam = $('#defaultableparams');
    if ($tableParam.length) {
        var val = $tableParam.val();
        if (val) {
            var obj = $.parseJSON(val);
            
            if (addKeyValue)           
                for (var key in obj)
                    params[params.length] = { name: key, value: obj[key] };                
            else
                for (var key in obj) 
                    params[key] = obj[key];            
        }            
    }

    return params;
}

function toggleFilterName() {
    if ($("#savefrompopup").is(":checked")) {
        $("#sfpfiltername").show();        
    } else {
        $("#sfpfiltername").hide();        
    }
}

var tableUrl=function () {        
    var url = tableController() + tableAction();
    return url;
};

var dlg = '';
var filterName = '';

function urldecode(str) {
    return decodeURIComponent((str + '').replace(/\+/g, '%20').replace(/%22/g, '&quot;'));
}

function getHeightTableHolder(height) {
    if ($("div#header").height() == 30)
        height -= 40;
    
    return height;
}

jQuery.download = function(url, data, method) {
    //url and data options required
    if (url && data) {
        //data can be string of parameters or array/object
        data = typeof data == 'string' ? data : jQuery.param(data);
        //split params into form inputs
        var inputs = '';
        jQuery.each(data.split('&'), function() {
            var pair = this.split('=');
            inputs += '<input type="hidden" name="' + pair[0] + '" value="' + urldecode(pair[1]) + '" />';
        });
        //send request
        jQuery('<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>')
		.appendTo('body').submit().remove();
    };
};

$(function () {
    $(document).bind('keydown', 'Ctrl+n', tableKeydown).bind('keypress', 'Ctrl+n', tableKeydown);    

    initTable();

    if ($('.changed').length > 0) { setTimeout('hideChanged()', 1000); }

    //очищаем инпут поиска по крестику
    function tog(v) { return v ? 'addClass' : 'removeClass'; }
    $(document).on('input', '.searchclearable', function () {
        $(this)[tog(this.value)]('x');
    }).on('mousemove', '.x', function (e) {
        $(this)[tog(this.offsetWidth - 18 < e.clientX - this.getBoundingClientRect().left)]('onX');
    }).on('touchstart click', '.onX', function (ev) {
        ev.preventDefault();
        $(this).removeClass('x onX').val('').change();
    });
});

function tableKeydown() {
    if ($('.btncreate').length > 0) {
        if ($('.btncreate').get(0).tagName == 'A') {
            var url = $('.btncreate').attr('href');
            if (url.indexOf('http://') < 0) url = base + url;
            document.location.href = url;
        }
        else
            $('.btncreate').trigger('click');
    } return false;
}

function initTable() {
    if ($('#search').val()) {
        enableOrDisableClear();
        if ($('#search').is(':visible')) {
            $('#search').get(0).focus();    
        }
    }
    
    $('.selectall').click(function() { selectAll('.rowid'); });
    $('.rowid').click(function() { selectRow(this.value, this.checked); });
    $(selectedIds).each(function(i, el) { selectRow(el, true, true); });
    $('#oldfilterid').change(function() { $('#filtername').val(this.options[this.selectedIndex].text); });
    $('.data td').mouseover(function() { if ($(this).find('.openlink').size() != 0) $(this).addClass('pointer'); }).mouseout(function() { $(this).removeClass('pointer'); });
    //Для включения ссылок строк с задисейбленными инпутами, на въюху следует добавть HiddenInput("disablenotclick","true")
    if ($('#disablenotclick').val()!="true") {
        $('input[disabled]').parent().parent().find('a.openlink').removeAttr("onclick").click(function() { return false; });
        $('input[disabled]').parent().parent().find('td').removeAttr("onclick").click(function() { return false; });
    }

    $('.data td').mousedown(function(event) { // !!!
        
        if (($(this).parent().find('input[disabled]').length > 0) && ($('#disablenotclick').val() != "true")) return;
        if ($(event.target).is('a') || $(event.target).is('span')) return;
        if ($(this).find('input').size() != 0) return;



        if (event.which != null && event.which != 1) return;
        var href = $(this).find('.openlink').attr('href');
        //есть ли опенлинк в ячейке
        if (href != '' & href != null) {
            if (href == '#' && $(this).find('.openlink').attr('onclick') != null) {
                $(this).find('.openlink').click();
            }
            else window.location = base + href;
        }
        else {
            //если в ячейке таблицы лежит еще одна таблица(пример:жизненный цикл заявки)
            var href2 = $(this).attr('task');
            if (href2 != '' & href2 != null) {
                window.location = base + href2;
            }
            else {
                //если в ячейке есть ссылка(не openlink)
                var k = $(this).find('a');
                if (k.size() != 0 & k.attr('href') != '#' && k.attr('link') == 'true') {
                    //зачем сюда писала base??? +_+
                    //window.location = base + k.attr('href');
                    window.open(k.attr('href'), "_blank");
                }
                else return false;
            }
        }
    });

    $('.data td.taskid').unbind('mousedown');
    
    if (window.afterInitTable) {
        try {            
            window.afterInitTable(); 
            
    } catch (e) { } }
}

function loadFilter() {
    $('#filtercontrol').remove(); 
    var url = base + tableController() + 'LoadFilter';

    $('body').append('<div id="filterholder" style="display: none;" class="nopopupwrapper"></div>').find('#filterholder').load(url, {
        action: tableAction()
    }, function () {
        initFilter();
        if ($('#filter form').size()) {
            $('#filter form').validate({ ignore: '.ignore' });
        }
    });
    return false;
}

function onLoadStateComplete(stateId) {
    var $savedStates = $('#savedstates');
    $savedStates.find('.state.selected').removeClass('selected');
    $savedStates.find('#savedfilter' + stateId).addClass('selected');    

    if ($('#filterholder #filter').length > 0) {//Очищаем старый фильтр
        $('#filterholder #filter').remove();
    }
}


function loadColumns() {
    //перед открытием формы выбора колонок очистим её, чтоб исключить дублирование параметров
    if ($('#columnsholder #columns').length > 0) {
        $('#columnsholder').remove();
    }
    var url = base + tableController() + 'LoadColumns';
    $('body').append('<div id="columnsholder" style="display: none;" class="nopopupwrapper"></div>').find('#columnsholder').load(url, { timestamp: new Date().toString() }, initColumns);
    return false;
}

function initColumns() {
    //Добавляем возможность двигать колонки
    if ($('#columnorder').length > 0) $('#columnorder').sortable({ helper: "clone" });

    //Задисейблим чекбоксы, для колонок, которые должны всегда отображаться

    $(".hiddencolumn").each(function() {
        var id = $.trim($(this).val());
        $('li#' + id).removeAttr("onclick");
        $('li#' + id + ' table tbody tr td').removeAttr("onclick");
    });
    
    //чекаем все строки, имеющие такое же название
    $("td#aviablecols input[name='tb_column']").click(
        function () {
            if ($(this).attr("shortname"))
                $("td#aviablecols input[name='tb_column'][shortname='" + $(this).attr("shortname") + "']").attr("checked", $(this).attr("checked"));
            else
                $("td#aviablecols input[name='tb_column'][shortname='" + this.value + "']").attr("checked", $(this).attr("checked"));
        });

    //Сделаем правую часть плавающей
    if ($("#float").val() == "true") {
        jQuery('div#customblock').containedStickyScroll({
            duration: 150,
            unstick: true,
            closeChar: ''
        });
        $('div#columns').resize(function() {
            $(this).attr("height", parseInt($("td#aviablecols").attr("height"), 10) + parseInt($("td#customcols").attr("height"), 10) + 50 + "px");
        });
    }

    //скроем из левой части все столбцы, которые отображаются
    $("td#visiblecols li input[name='tb_columns']:checked").each(
            function() {
                $("td#aviablecols li[shortname='" + $(this).attr("shortname") + "']").hide();
            });

            if (window.afterInitColumns) {
                try {
                    window.afterInitColumns();

                } catch (e) { } 
            }
            $('#columnsholder').show(); 
}

function loadSavedStates() {
    var url = base + tableController() + 'LoadSavedStates';

    var stateId = $('#stateid').val();

    $('#savedstates').load(url, { timestamp: new Date().toString(), stateid: stateId });
}

function hideChanged() {
    var color = ($('.changed').hasClass('odd')) ? '#f3f7fc' : '#fff';    
    $('.changed').animate({ "background-color": color }, 1500); 
}

function initFilter(editFilter) {
    if ($('#filter').length > 0) {
        if ($.fn.calendar) {
            $('#filter input.date, #filter input.dateTime').change(function () {
                var $this = $(this);
                var date = $.parseDate($this.val());
                if (!date) {
                    $this.attr("date", '');
                    return;
                }
                if (date.getHours() == 0 && date.getMinutes() == 0)
                    $this.attr("date", date.print('%Y-%m-%d'));
                else
                    $this.attr("date", date.print('%Y-%m-%d %H:%M'));
            });
        }
        //Фильтр. Скрыть/показать поля для даты при изменении "равно" на "между"
        //Фильтр. Скрыть/показать поля для выбора при изменении условия с/на "задано","не задано"
        $('#filter .fttdate').change(function() {
            switch (this.value) {
                case "1":
                    $(this).parents('table').find('.fltdate').show();
                    $(this).parents('table').find('.date2').hide();
                    break;
                case "2":
                case "3":
                    $(this).parents('table').find('.fltdate').show();
                    $(this).parents('table').find('.date2').show();
                    break;
                case "4":
                case "5":
                    $(this).parents('table').find('.fltdate').hide();
                    $(this).parents('table').find('.date2').hide();
            }
        });
        //Фильтр. Скрыть/показать поля для чисел при изменении "равно" на "между"
        //Фильтр. Скрыть/показать поля для выбора при изменении условия с/на "задано","не задано"
        $('#filter .fttnumeric').change(function(el) {
            $(this).parents('table').find('.numeric').show();
            if (this.value == 5) $(this).parents('table').find('.numeric2').show(); else $(this).parents('table').find('.numeric2').hide();
            if (this.value == 4) { $('.numeric3', this.parentNode).show(); $(this).parents('table').find('.numeric').css('width', 150); } else { $(this).parents('table').find('.numeric3').hide(); $(this).parents('table').find('.numeric').css('width', 50); }
            if (this.value == 6 || this.value == 7) $(this).parents('table').find('.numeric').hide();
        });
        
        //Установка значений по умолчанию
        $('#filter .flttext').change(function() { var ftt = '#ftt' + this.id.substr(3); if ($(ftt).val() == 0 && this.value.length > 0) $(ftt).val(1); });
        $('#filter .numeric').change(function() { var ftt = '#ftt' + this.id.substr(4); if ($(ftt).val() == 0 && this.value.length > 0) $(ftt).val(1); });
        $('#filter .fltguid').change(function () { var ftt = '#ftt' + this.id.substr(3); if ($(ftt).val() == 0 && this.value.length > 0) $(ftt).val(1); });
        //В зависимости от количества опций, выбрать "Входит в" или "Содержит любое из"
        $('#filter .fltselect').change(function () {
            var ftt = '#ftt' + this.id.substr(3).replace('.','\\.');
            if ($(ftt).val() == 0 && this.selectedIndex >= 0) {
                var id = $(this).attr("id");
                var isUserCompany = id == 'fltCreator_Company_Path' || id == 'fltTaskExecutorCompany' || id == 'fltTaskExpense_TaskExecutorCompany';
                $(ftt).val(($('option', ftt).length > 5 || isUserCompany) ? 3 : 1);
            }
        });
        $('#filter .flttree').change(function() { var ftt = '#ftt' + this.id.substr(3); if ($(ftt).val() == 0 && this.selectedIndex >= 0) $(ftt).val(3); });
        $('#filter .fltdate').change(function () { var ftt = '#ftt' + this.id.substr(4); if ($(ftt).val() == 0 && this.value.length > 0) $(ftt).val(1); });
        $('#filter .fltsmalltree').change( function() { var ftt = '#ftt' + this.id.substr(3); if ($(ftt).val() == 0 && this.selectedIndex >= 0) $(ftt).val(1);});

        //Заменим выпадающие списки на спец. контрол
        if ($.multipleSelect) $.multipleSelect.initByClassName('.multipleselect', { maxwidth: '300px', init: true });

        //Фильтр. Скрыть/показать поля для выбора при изменении условия с/на "задано","не задано"
        $('#filter .fttselect').change(function() {
            if (this.value == 3 || this.value == 4) $(this).parents('tr').find('.tdvalue div').hide(); else $(this).parents('tr').find('.tdvalue div').show();
        });
        $('#filter .fttrelation').change(function() {
            if (this.value == 7 || this.value == 8) $(this).parents('tr').find('.tdvalue div').hide(); else $(this).parents('tr').find('.tdvalue div').show();
        });
        $('#filter .ftttext').change(function() {
            if (this.value == 7 || this.value == 8) $(this).parents('tr').find('.flttext').hide(); else $(this).parents('tr').find('.flttext').show();
        });
        $('#filter .fttguid').change(function () {
            if (this.value == 2 || this.value == 3) $(this).parents('tr').find('.fltguid').hide(); else $(this).parents('tr').find('.fltguid').show();
        });
        $('#filter .ftttree').change(function() {
            var self = this;
            var flt = $('#flt' + self.id.substr(3));            
			var ms = flt.data('multipleselect');
			if (self.value == 0){
				flt.attr('multiple', true);												
				ms.unwrapClearControl();
			}
            if (self.value == 1 || self.value == 2) {
                flt.attr('multiple', false);				
                ms.unwrapControl();
            }
            else {
                flt.attr('multiple', true);				
                ms.wrapControl(true);
            }
        }).trigger('change');

        
        $('#filter .fttsmalltree').change(function () {
            var self = this;
            var flt = $('#flt' + self.id.substr(3));
            var ms = flt.data('multipleselect');
            if (self.value == 0) {
                flt.attr('multiple', true);
                ms.unwrapClearControl();
            }
            else {
                flt.attr('multiple', true);
                ms.wrapControl(true);
            }
        }).trigger('change');
        

        //Если у фильтра есть класс additional добавим в доп поля
        $('#filter .additional').wrapAll('<div id="additionalwrapper"/>');        
        if ((!$('#additionalwrapper .flttype option[value!="0"]').is(':selected') && $('#additionalwrapper .manualfilter').val() == '') || (!$('#additionalwrapper .flttype option[value!="0"]').is(':selected') && $('#additionalwrapper .manualfilter').length < 1)) {
            $('#additionalwrapper .additional').addClass('hidden');
            $('#additionalwrapper').prepend('<a href="#"class="nounderline" onclick="return toggle(this, \'#additionalwrapper .additional\',\'' + FilterResources.ShowAdditionalFields + '\',\'' + FilterResources.HideAdditionalFields + '\')">' + '&darr; ' + FilterResources.ShowAdditionalFields + '</a><div class="spacer10"></div>');
        }
        else {
            $('#additionalwrapper').prepend('<a href="#" class="nounderline" onclick="return toggle(this, \'#additionalwrapper .additional\',\'' + FilterResources.ShowAdditionalFields + '\',\'' + FilterResources.HideAdditionalFields + '\')">' + '&uarr; ' + FilterResources.HideAdditionalFields + '</a><div class="spacer10"></div>');
        }

        if ($("#handlerService_Path").length) {
            var handler = $("#handlerService_Path");
            handler.on("click", "input[type='checkbox']", recheckServices);
        }
        $('#filterholder').show();

        $('.flttype').change(function () {
            var clickElement = $(this).parents('tr').find('.tdvalue div .checklisttitle a');
            if (this.value != 0) {
                setTimeout(function () {
                    clickElement.click();
                }, 0);

            }
        });

        $('#filtercontrol').detach().appendTo('#placeholder.popup');

        $('#savefrompopup').click(function () {
            if ($('#savefrompopup').is(':checked'))
                $('#popup2excel').prop('disabled', true);
            else
                $('#popup2excel').prop('disabled', false);
        });

        if (editFilter != 'undefined' && editFilter == true) {
            $('#savefrompopup').click();
            toggleFilterName();
        }
    }
}

function recheckServices() {
    var handler = $("#handlerService_Path");
    
    var checked = $(this).attr("checked");
    var value = $(this).attr("value");

    //Здесь все наоборот, потому что до сюда дойдет, когда чек уже поменяется
    if (checked) {
        var $sel = $('#fltService_Path');
        $sel.find("option[value='" + value + "']").attr('selected', 'selected');
        if (!$sel.is('[child-autoselect-cond]')
                       || (typeof window[$sel.attr('child-autoselect-cond')] == "function" && window[$sel.attr('child-autoselect-cond')]())) {
            handler.find("input[value^='" + value + "']").each(function () {
                $(this).attr('checked', 'checked');
                $(this).parent().removeClass("notFull");
            });

            $("#fltService_Path").find("option[value^='" + value + "']").attr('selected', 'selected');
        }
    } else {
        if (value.split('|').length > 1) {
            var pvalue = "";
            
            $.each( value.split('|'), function() {
                pvalue += (this + "|");

                if (pvalue != value) {
                    var el = handler.find("input[value='" + pvalue + "']:checked");
                    if (el.length)
                        el.parent().addClass("notFull");
                }
            });
        }
        handler.find("input[value^='" + value + "']").each(function () {
            $(this).removeAttr('checked');
            $(this).parent().removeClass("notFull");
        });
        
        $("#fltService_Path").find("option[value^='" + value + "']").removeAttr('selected');
    }

    $("#fltService_Path").trigger("change");

}

function selectRow(val, check, skip, idcol) {
    var cb = idcol ? idcol + val : $((document.getElementsByName('_id').length > 0) ? "#_id" + val : "#id" + val).get(0);
    //разрешено выбрать только одного пользователя
    if ($('#mode').val() == 'CREATORS' || $('#mode').val() == 'SUBSCRIBE' || $('#mode').val() == 'COMPANYUSER' || $('#mode').val() == 'SERVICEUSER' || $('#mode').val() == 'EXTERNALCONTRACTORS' || $('#mode').val() == 'ASSETOWNERS' || (getURLParameter('selectmode') != null && getURLParameter('selectmode') != '' && getURLParameter('selectmode') == "SINGLE") || (getURLParameter('tb_mode') != null && getURLParameter('tb_mode') != '' && getURLParameter('tb_mode') == "SERVICEGROUPS")) {
        $("input:checked").attr('checked', false);
        //$('td[class="cb"]').parents('tr').removeClass('selected');
        //if ($('#mode').val() == 'EXTERNALCONTRACTORS')
            $('.cb').parents('tr').removeClass('selected');
    }
    
    if (check) {
        if (!skip) selectedIds.push(val);
        if (cb) {
            cb.checked = true;
            $(cb).parents('tr').addClass('selected');
        }

        //разрешено выбрать только одного пользователя
        if ($('#mode').val() == 'CREATORS' || $('#mode').val() == 'COMPANYUSER' || $('#mode').val() == 'SUBSCRIBE' || $('#mode').val() == 'SERVICEUSER' || $('#mode').val() == 'EXTERNALCONTRACTORS' || (getURLParameter('selectmode') != null && getURLParameter('selectmode') != '' && getURLParameter('selectmode') == "SINGLE") || (getURLParameter('tb_mode') != null && getURLParameter('tb_mode') != '' && getURLParameter('tb_mode') == "SERVICEGROUPS")) selectedIds.reverse();
    }
    else {
        selectedIds = $.grep(selectedIds, function(i) { return i != val; });
        if (cb) {
            cb.checked = false;
            $(cb).parents('tr').removeClass('selected');
        }
    }
    try { if (rowChecked) rowChecked(val, check); } catch (e) { }
}

function selectAll() {
    $('input.rowid').each(function(i, el) { selectRow(el.value, !el.checked && !el.disabled); });
    if ($('#rowids').checked == false) {
        $('#rowids').attr('checked', true);
    }
    return false;
}

function dosearch(evt)
{
    var e = ($.browser.msie) ? event : evt;
    var keycode = ($.browser.msie) ? e.keyCode : e.which;
    if (keycode == 13)
        return _search();
    else {
        enableOrDisableClear();   
        return true;
    }
}

function _search() {
    var url = tableUrl();

    var cbMode = getURLParameter('cbmode');

    if (cbMode != null && cbMode != '') {

        if (url.indexOf('?') > -1) {
            url += "&";
        } else {
            url += "?";
        }

        url += '&cbmode='+cbMode;
    }

    $.ajax({
        url: url,
        data: { tb_search: $('#search').val(), nolayout: true, timestamp: new Date().toDateString(), initsearch: true },
        success: function(data) {
            try {
                var dataJ = eval('(' + data + ')'); ;
            }
            catch (e) { }
            if (dataJ!=null && dataJ.hasOwnProperty('IsOK')) {
                try { window.afterSearch(dataJ); } catch (e) { }
            }
            else {
                $(tableRootDiv).empty().append(data);
                c2c(tableRootDiv);
                initTable();
            }
        }
    });
    return false;
}

function enableOrDisableClear() {
    if ($("#search").val() != '') {
        $('#clearfilter img').attr('src', 'img/buttons/clearfilter.gif'); $('#clearfilter').removeClass('disabled');
    }
    if ($("#search").val() == '') {
        $('#clearfilter img').attr('src', 'img/buttons/clearfilter_disabled.gif'); $('#clearfilter').addClass('disabled');
    }
    return false;
}

function orderBy(sort) {
    //На случай если фильтр уже открыт, установим сортировку по выбранной колонке в фильтре
    if ($('#columns').length > 0) {
        var col = sort.substr(0, sort.indexOf(' '));
        var desc = (sort.indexOf('desc') > 0);
        $('select.orderby').val('');
        $('select.orderby[column="' + col + '"]').get(0).selectedIndex = (desc ? 2 : 1);
    }
    var params = {
        tb_orderby: sort,
        nolayout: true,
        generateReport: true
    };
    $(tableRootDiv).load(tableUrl(), params, initTable);
    return false;
}

function changePage(page) {
    var templateTypeId = $("#selected-type").val();

    var data  = {
        nolayout: true,
        timestamp: new Date().toString(),
        generateReport: true
    }

    if (page)
        data['tb_page'] = page;
    if (templateTypeId)
        data['templateTypeId'] = templateTypeId;
    $(tableRootDiv).load(tableUrl(), data, function () {c2c(tableRootDiv); initTable(); });
    return false;
}

function applyFilter(stateId, isExcel) {
    var params = $('#filter form :not(.date)').serializeArray();
    var dates = [];
    $('#filter form .date').each(function () {
        if ($(this).attr('date')) {
            var date = { name: $(this).attr('name'), value: $(this).attr('date') };
            dates[dates.length] = date;
        } else {
            var date = { name: $(this).attr('name'), value: $(this).val() };
            dates[dates.length] = date;
        }
    });
    
    params = mergeTableDefaultLoadParams($.merge(params, dates),true);

    var orderby = '';
    $('select.orderby').find('option:selected').each(function(i, el) { if (el.value) orderby += ((orderby.length > 0) ? ',' : '') + el.value; });

    params[params.length] = { name: 'tb_stateid', value: '' };
    if ($('#search').length > 0) params[params.length] = { name: 'tb_search', value: $('#search').val() };
    params[params.length] = { name: 'timestamp', value: new Date().toString() };
    params[params.length] = { name: 'nolayout', value: true };
    params[params.length] = { name: 'generateReport', value: true };
    
    if ($('#savefrompopup').is(':checked')) {
        if (!$.grep(params, function (item) { return item.name == 'savefrompopup' }).length)
            params[params.length] = { name: 'savefrompopup', value: true };

        if (!$.grep(params, function (item) { return item.name == 'sfpfiltername' }).length)
            params[params.length] = { name: 'sfpfiltername', value: $('#sfpfiltername').val() };

        if (!$.grep(params, function (item) { return item.name == 'sfpfilterwascommon' }).length)
            params[params.length] = { name: 'sfpfilterwascommon', value: $('#sfpfilterwascommon').val() };
    }
    
    $('div.multipleselectpopup').hide();
    $('#filterholder').hide(); $('ul.filterlist li.selected').removeClass('selected');
    $('#showfilter img').attr('src', $('#showfilter img').attr('src').replace('_active','').replace('.gif','_active.gif'));
    enableSaveAndClear();

    var url = tableUrl();

    params.push({ name: 'appliedFilter', value: $('#stateid').val() });

    if (isExcel != undefined && isExcel) {
        params[params.length] = { name: 'stateid', value: stateId };
        params.push({ name: 'isExcel', value: true });
        url = tableController() + 'excel';
        $.download(url, params);
    } else {
        var reloadFilters = $("#savefrompopup").is(":checked");
        $(tableRootDiv).load(url, params, function () { c2c(tableRootDiv); initTable(); onLoadStateComplete(stateId); if (reloadFilters) LoadSavedStates(); });
    }

    return false;
}

function LoadSavedStates(activeStateId) {    
    var url = base + tableController();

    url += 'LoadSavedStates';

    var params = $('#savefilterform').serializeArray();
    params[params.length] = { name: 'timestamp', value: new Date().toString() };
    params[params.length] = { name: 'tasklist', value: $('#t_l').val() };
    if (tableController() == 'companydocument.ivp/') {
        params[params.length] = { name: 'companydocumentid', value: $('#id').val() };
    }

    if (tableController() == 'company.ivp/')
        params[params.length] = { name: 'typeid=', value: $('#typeid').val() };

    if (activeStateId != 'undefined' && activeStateId > 0)
        params[params.length] = { name: 'stateid', value: activeStateId };
    else
        params[params.length] = { name: 'stateid', value: $('#stateid').val() };

    $('#savedstates').load(url, params, function () { $('#savefilterholder').html(''); });
}

function applyColumns() {
    if (window.beforeApplyColumns) {
        try {
            if (!window.beforeApplyColumns())
                return false;
        } catch (e) { } 
    }
    var params = $('#columns form').serializeArray();
    var orderby = '';
    $('select.orderby option:selected').each(function(i, el) { if (el.value) orderby += ((orderby.length > 0) ? ',' : '') + el.value; });

    params[params.length] = { name: 'tb_orderby', value: orderby };
    params[params.length] = { name: 'tb_stateid', value: '' };
    if ($('#search').length > 0) params[params.length] = { name: 'tb_search', value: $('#search').val() };
    params[params.length] = { name: 'timestamp', value: new Date().toString() };
    params[params.length] = { name: 'nolayout', value: true };

    var url = tableUrl();

    var cbMode = getURLParameter('cbmode');

    if (cbMode != null && cbMode != '') {
        if (url.indexOf('?') > -1) {
            url += "&";
        } else {
            url += "?";
        }

        url += ('cbmode=' + cbMode);
    }

    $('#columnsholder').hide(); $('ul.filterlist li.selected').removeClass('selected');
    $('#showcolumns img').attr('src', $('#showcolumns img').attr('src').replace('_active', '').replace('.gif', '_active.gif'));
    enableSaveAndClear();

    params = mergeTableDefaultLoadParams(params,true);

    $(tableRootDiv).load(url, params, function () { c2c(tableRootDiv); initTable(); });
    return false;
}

function disableSaveAndClear() {
    $('#showsavefilter img').attr('src', 'img/buttons/savefilter_disabled.gif'); $('#showsavefilter').addClass('disabled');
    $('#clearfilter img').attr('src', 'img/buttons/clearfilter_disabled.gif'); $('#clearfilter').addClass('disabled');
}

function enableSaveAndClear() {
    $('#showsavefilter img').attr('src', 'img/buttons/savefilter.gif'); $('#showsavefilter').removeClass('disabled');
    $('#clearfilter img').attr('src', 'img/buttons/clearfilter.gif'); $('#clearfilter').removeClass('disabled');
}

function clearFilter() {
    if ($('#clearfilter').hasClass('disabled')) return false;
    
    var params = mergeTableDefaultLoadParams();
    
    params["reset"] = true;
    params["nolayout"] = true;
    
    //Уберем фильтр чтобы сбросить его состояние
    $('#filterholder').remove(); $('ul.filterlist li.selected').removeClass('selected');
    $('#columnsholder').remove();
    $('#showfilter img').attr('src', $('#showfilter img').attr('src').replace('_active', ''));
    $('#showcolumns img').attr('src', $('#showcolumns img').attr('src').replace('_active', ''));
    $('#search').val('');
    disableSaveAndClear();
    
    $(tableRootDiv).load(tableUrl(), params, function () { c2c(tableRootDiv); initTable(); });
    return false;
}

function showSaveState(reload) {
    if ($('#showsavefilter').hasClass('disabled')) {
        $('#savefilterform #errorholder').hide();
        return false;
    }
    if (reload || !$.trim($('#savefilterholder').html())) {
        var url = base + tableController() + 'ShowSaveState';
        $('#savefilterholder').load(url, { timestamp: new Date().toString() }, function () {
            $('#oldfilterid').change(function () {
                $('#filtername').val(this.options[this.selectedIndex].text);
            });
            $('#savefilterholder').show();
            $('#filtername').focus();
        });
    }
    else {
        $('#savefilterholder').show();
        $('#filtername').focus();
    }
    $('#savefilterform #errorholder').hide();
    return false;
}



function saveState() {
    $('#savefilterholder').hide();
    var url = base + tableController();

    url += 'SaveState';

    var params = $('#savefilterform').serializeArray();
    params[params.length] = { name: 'timestamp', value: new Date().toString() };
    params[params.length] = { name: 'tasklist', value: $('#t_l').val() };
    if (tableController() == 'companydocument.ivp/') {
        params[params.length] = { name: 'companydocumentid', value: $('#id').val() };
    }
   
    if(tableController()=='company.ivp/')
        params[params.length] = { name: 'typeid=', value: $('#typeid').val() };
    
    $.ajax({
        type: 'POST', 
        dataType: 'json',
        url: url,
        data: params,
        success: function (data) {            
            if (data.hasOwnProperty('IsOK') && data.IsOK == true)
                LoadSavedStates(data.Result);
            else
                LoadSavedStates();            
        }
    });
}

function nameExc(msg) {
    $('#savefilterform #errorholder').text(msg);
    $('#savefilterform #errorholder').show();
    return false;
}

function Save() {
    $('#appliedFilter').val($('#stateid').val());

    ($('input[name="filtername"]').val() == '') ?
        nameExc(FormResources.FieldRequired) :
        ($('input[name="filtername"]').val().length > 100) ?
            nameExc(jQuery.validator.messages.maxlength(100)) :
            saveState();
    return false;
}

function selectFilterUsers(url, name) {
    filterName = name;
    dlg = openDialog(url, 'selectusers', { width: 900, height: 650 });
    dlg.callback = function(result) { addSelectedValues(result, name); };
    return false;
}

function selectFilter(url, name) {
    filterName = name;

    if (url.indexOf('?') > -1) {
        url += "&";
    } else {
        url += "?";
    }

    url += ('msName=' + name);
    url += '&cbmode=Filter';

    switch (name) {
        case 'fltTaskAssets':
            dlg = openDialog(url, 'selectassets', { width: 900, height: 650 });
            dlg.callback = Filter.assetsCallback;
            break;
        case 'fltTaskExecutorCompany':
        case 'fltCreator_Company_Path':
        case 'fltCompany_Path':
        case 'fltTaskExpense_TaskExecutorCompany':
        case 'fltServiceLevelRuleCompanies':
            dlg = openDialog(url, 'selectcompanies', { width: 900, height: 650 });
            dlg.callback = Filter.companiesCallback;
            break;
        case 'fltServiceLevelRuleServices':
        case 'fltService_Path':
            var selServicesPath = $("ul[selectid = 'fltService_Path'] input");
            var selServicesId = new Array();
            for (i = 0; i < selServicesPath.length; i++) {
                var ids = $(selServicesPath[i]).val().split("|");
                selServicesId.push(ids[ids.length - 2]);
            }
            if (selServicesId.length > 0)
                sessionStorage.setItem('disabledServices', selServicesId);
            else
                sessionStorage.removeItem('disabledServices');

            var $selectServicePath = $('#fttService_Path');
            if($selectServicePath.length > 0 && $selectServicePath.attr('check-equalorchild'))
            {
                url += $selectServicePath.val() == '1' ? '&EqualOrChild=1' : '';
            }

            dlg = openDialog(url, 'selectservices', { width: 900, height: 650 });
            dlg.callback = Filter.servicesCallback;
            break;
        case 'fltAssetOwnerCompany':
            var selAOCPath = $("ul[selectid = 'fltAssetOwnerCompany'] input");
            var selAOCId = new Array();
            for (i = 0; i < selAOCPath.length; i++) {
                var ids = $(selAOCPath[i]).val().split("|");
                selAOCId.push(ids[ids.length - 2]);
            }
            if (selAOCId.length > 0)
                sessionStorage.setItem('disabledAOC', selAOCId);
            else
                sessionStorage.removeItem('disabledAOC');

            dlg = openDialog(url, 'selectcompanies', { width: 900, height: 650 });
            dlg.callback = Filter.companiesCallback;
            break;
        case 'fltServiceLevelRuleCategories':
        case 'fltCategoryId':
            dlg = openDialog(url, 'selectcategories', { width: 990, height: 650 });
            dlg.callback = Filter.categoriesCallback;
            break;
        default:
            dlg = openDialog(url, 'selectusers', { width: 900, height: 650 });
            dlg.callback = Filter.usersCallback;
            break;
    }

    return false;
}

var Filter = {
    servicesCallback: function servicesCallback(result) {
        var msName = result['msName'];
        addSelectedPaths(result, msName);
    },
    companiesCallback: function companiesCallback(result) { 
        var msName = result['msName'];
        addSelectedPaths(result, msName);
    },
    categoriesCallback: function categoriesCallback(result) {
        var msName = result['msName'];
        addSelectedPaths(result, msName);
    },
    usersCallback: function usersCallback(result) {
        var msName = result['msName'];
        addSelectedValues(result, msName);
    },
    assetsCallback: function (result) {
        var msName = result['msName'];
        addSelectedValues(result, msName);
    }
}

function deleteState(id) {
    if (!confirm(TableResources.SureDeleteView)) return false;

    var url = base + tableController() + 'DeleteState/' + id;
    $('#savedstates').load(url, { timestamp: new Date().toString() });
    return false;
}

function exportExcel(action) {
    var params = $('#filter form [isdate!=1]').serializeArray();
    
    var dates = [];
    $('#filter form input[date]').each(function () {
        var date = { name: $(this).attr('name'), value: $(this).attr('date') };
        dates[dates.length] = date;
    });
    params = $.merge(params, dates);

    if (action == undefined)
        action = 'excel';

    $.download(tableController() + action, params);
   
    return false;
}

function del(options) {
    if (selectedIds.length == 0) { alert(TableResources.NoRecordsSelected); return false; }
    if (!confirm(TableResources.SureDeleteRecords)) return false;

    var params = { id: selectedIds.join(','), nolayout: true, timestamp: new Date().toString() };
    if (options != null) $.extend(params, options);

    var url = base + tableController() + 'Delete';
    selectedIds.length = 0;
    $(tableRootDiv).load(url, params, initTable);
    return false;
}

function deleteServices(options) {
    if (selectedIds.length == 0) {alert(TableResources.NoRecordsSelected); return false;}
    var a = selectedIds.join(',');
        $.ajax({ 
        dataType: "json",
        url: base + 'service.ivp/counttaskinservice',
        data: { id: a },
        success: function(result) {
        if (!confirm(result.Result)) return false;
        var params = { id: selectedIds.join(','), nolayout: true, timestamp: new Date().toString() };
        if (options != null) $.extend(params, options);
        var url = base + 'service.ivp/delete';
        selectedIds.length = 0;
        $(tableRootDiv).load(url, params, initTable);
            return result.Result;
        } 
    });
    return false;
}

function delExportTemplate() {
    var idsDefaultTemplate = $("#idsDefaultTemplate").val();
    var isDelete = true;
    if (idsDefaultTemplate != undefined) {
        jQuery.each(selectedIds, function (i, val) {
            if (idsDefaultTemplate.indexOf(val) != -1) {
               alert(TaskResources.NotDeleteDefaultTemplate);
                isDelete = false;
            }
        });
       
    }

    if (isDelete)
        del();
}

function addSelectedCategories(cids) {
    if (!jQuery || !jQuery.multipleSelects) return;
    var ms = jQuery.multipleSelects[filterName];
    $.each(cids, function (i, value) {
        var label = dlg.categoryNames['lb' + value.toString()];
        if ($('option[value="' + value + '"]', ms.select).length > 0) return;
        ms.select.append('<option selected value="' + value + '">' + label + '</option>');
        ms.addOption(value, label, true);
        ms.optionsToString();
        ms.select.trigger('change');
    });
}

function getServiceFilterAcParams() {
    var fltVal = $('#fttService_Path').val();
    if (fltVal == '1') {
        return {
            'EqualOrChild': 1
        };
    }
    else {
        return {};
    }
}

function getServiceFilterChildCond() {
    var fltVal = $('#fttService_Path').val();
    return fltVal != '1';
}