var TS = {
    delay: {
        showTime: 0,
        hideTime: 0,
        timeout: 0
    },
    limit: {
        simple: 3,
        more: 5
    },

    activeOption: null,

    /**
     * Function sends ajax request for models of selected marka,
     * parses response and modify DOM
     */
    getBrandFilterGroupTypes: function() {
        var v = TS.activeOption.find('input:checkbox').val();
        if (v && TS.activeOption.parent().find('div.moreOpt').find('li').length == 0) {
            var tipusParameter = v ? ((v.indexOf('/') > 0) ? v.substring(0, v.indexOf('/')) : v.substring(0)) : '';
            $('.MODEL .content .wrap').attr('id', 'dynamicGroup');
            $.ajax({
                url: mainURL + 'xhr/getRelDictVals.do' + currentFilteringParamsString,
                data: ({
                    'XMLHttpRequest': 'true',
                    'cid': cid,
                    'fpv': tipusParameter,
                    'sub': TS.activeOption.parents('div.filterGroup').find('div.titlesub').text()
                }),
                dataType: 'html',
                success: function(data) {
                    if (data.indexOf('filterItem') > 0) {
                        $('#dynamicGroup').html(data);
                    }
                    $('#dynamicGroup input:checked').click(function() {
                        $('#filterSet div.BRAND').find('div.subfield a[rel="' + $(this).attr('id') + '"]').parent().find('a.icon').click();
                    });
                    $('#dynamicGroup ul input:checkbox').each(function(i, element) {
                        if (TS.activeOption.parents('ul').find('input:checked[value="' + $(element).val() + '"]').length > 0) {
                            $(element).attr('checked', 'checked');
                        }
                    });
                    if ($('#dynamicGroup').innerHeight() > 150) {
                        $('#dynamicGroup').addClass('scrollable');
                    } else {
                        $('#dynamicGroup').removeClass('scrollable');
                    }
                }
            });
        }
    },

    removeInactivePriceLists: function() {
        $('#filterSet .PRICE ul:hidden').remove();
    },

    /**
     * Function sorts filter fields by number of adverts or alphabetically
     */
    sortItems: function(filterGroup, sortConfig) {

        var list = filterGroup.find('ul:first');

        var sortOrder = 1;
        if (sortConfig && sortConfig.order) {
            sortOrder = (sortConfig.order.toLowerCase() == 'asc') ? 1 : -1;
        }

        var listItems = filterGroup.find('ul:first > li:not(".liMore")');
        var listMore = filterGroup.find('ul:first > li.liMore');

        if (sortConfig && sortConfig.type) {
            switch (sortConfig.type) {
                case 'alpha':
                    listItems.sort(function(a, b) {
                        var keyA = $(a).find('a.label').text().toUpperCase();
                        var keyB = $(b).find('a.label').text().toUpperCase();
                        if (keyA < keyB) {
                            return -sortOrder;
                        } else if (keyA > keyB) {
                            return sortOrder;
                        } else {
                            return 0;
                        }
                    });
                    break;
                default:
                    listItems.sort(function(a, b) {
                        var keyA = $(a).find('span.cnt').text().match(/\d/g).join('');
                        var keyB = $(b).find('span.cnt').text().match(/\d/g).join('');
                        keyA = parseInt(keyA);
                        keyB = parseInt(keyB);
                        if (keyA < keyB) {
                            return -sortOrder;
                        } else if (keyA > keyB) {
                            return sortOrder;
                        } else {
                            return 0;
                        }
                    });
            }
        }

        list.wrapInner('<div id="tempListWrapper"></div>');

        listItems.each(function(i, item) {
            $(item).clone(true).appendTo(list);
        });
        listMore.appendTo(list);
        $('#tempListWrapper').empty().remove();
    },

    /**
     * Function called when page is loaded
     */
    init: function() {

        $('#filterSet .liFromTo input[class^="from:"], #filterSet .liFromTo input[class^="to:"]').each(function(i, elem) {
            if ($(elem).val() != '') {
                $(elem).parents('ul').find('div.filterItem:not(.inactive) input:checkbox').each(function(i, elem2) {
                    $(elem2).attr('disabled', 'disabled');
                });
            }
            $(elem).prev().val('');
            if ($(elem).val() != '') {
                $(elem).prev().val($(elem).attr('class') + '-' + $(elem).val());
            }
        });
        $('#filterSet .liFromTo input').bind('keyup', function(event) {
            if ($(this).parent().find('input[class^="from:"]').val() != '' ||
                $(this).parent().find('input[class^="to:"]').val() != '') {
                $(this).parents('ul').find('div.filterItem:not(.inactive) input:checkbox').each(function(i, elem) {
                    $(elem).attr('disabled', 'disabled');
                });
            } else {
                $(this).parents('ul').find('div.filterItem:not(.inactive) input:checkbox').each(function(i, elem) {
                    $(elem).removeAttr('disabled');
                });
            }
            $(this).prev().val('');
            if ($(this).val() != '') {
                $(this).prev().val($(this).attr('class') + '-' + $(this).val());
            } else {
                $(this).prev().val('');
            }
        });

        $('form#filter').submit(function() {
            TS.removeInactivePriceLists();
            $('form#filter').find('input[type="text"]:not(".tipusField"), input[type="hidden"]:not(".htipusField"), input[class^="from:"], input[class^="to:"]').each(function(i, elem) {
                if ($(elem).val() === '' || $(elem).val() === null) {
                    $(elem).remove();
                }
            });
            if ($('form#filter div.MODEL input:checked').length > 0 && $('form#filter div.BRAND a.activeOpt').length == 1) {
                var activea = $('form#filter div.BRAND a.activeOpt');
                activea.parent().find('input:checkbox').attr('checked', 'checked').removeAttr('disabled');
            }

        });

        $('#filterSet .mainOpt').each(function(i) {
            this.id = i + 'opt';
        });

        /**
         * When somebody click on red 'x' icon link for selected item
         * (e.g. Ford or Dizel)
         */
        $('#filterSet li.active div.filterItem a.icon').live('click', function() {
            TS.activeOption = $(this).parent();
            TS.activeOption.find('input:checked').removeAttr('checked');
            var rel = TS.activeOption.find('a.label').attr('rel');
            if (TS.activeOption.parents('div.BRAND').length > 0) {
                $('#filterSet div.MODEL').find('input:checked[value^="' + rel + '"]').removeAttr('checked');
            }
            TS.activeOption.parent().removeClass('active');
            TS.activeOption.find('a.icon').remove();
            setTimeout(function() {
                $('form#filter').submit();
            }, 300);
        });

        /**
         * When somebody click on 'All options' link
         */
        $('#filterSet li.liMore a').click(function(event) {
            var filterGroup = $(this).parents('div.filterGroup');
            if (filterGroup.hasClass('BRAND') || filterGroup.hasClass('SIMPLE') || filterGroup.hasClass('BOOLEAN') || filterGroup.hasClass('PREDEF')) {
                TS.sortItems(filterGroup, {
                    type: 'alpha',
                    order: 'asc'
                });
            }
            $(this).parents('ul').find('li:not(:has(.inactive))').show();

            var contentEl = $(this).parents('div.wrap');
            $(this).parent().remove();
            if (contentEl.innerHeight() > 200) {
                contentEl.addClass('scrollable');
            }
            $('.rndCrn').css('position','static');
            $('.rndCrn').css('position','absolute');

            event.preventDefault();
        });

        $('#filterSet div.BRAND, #filterSet div.SIMPLE, #filterSet div.BOOLEAN, #filterSet div.PREDEF').each(function(i, element) {
            if ($(this).find('li a.activeOpt').length < 1) {
                TS.sortItems($(element), {
                    type: 'number',
                    order: 'desc'
                });
                var liCount = 0;
                $(this).find('li').each(function(){
                    liCount++;
                    if (liCount < 6) {
                        $(this).show()
                    } else {
                        $(this).hide()
                    }
                });
                if (liCount > 5) {
                    $(this).find('.liMore').show();
                }
            }
        });

        $('#filterSet select[name="curr"]').change(function() {
            $('#filterSet div.PRICE ul').hide();
            $('#filterSet div.PRICE ul').find('input:checkbox').attr('disabled', 'disabled');
            $('#filterSet div.PRICE ul[id$="_' + $(this).find('option:selected').val() + '"]').show();
            $('#filterSet div.PRICE ul[id$="_' + $(this).find('option:selected').val() + '"]').find('input:checkbox').removeAttr('disabled');
        });

        $('#filterSet div.filterGroup li:not(.active) div.filterItem a.label').live('click', function() {
            TS.activeOption = $(this).parent();

            if ($(this).parents('div.BRAND').length > 0) {
                $(this).parents('div.BRAND').find('input:checkbox').removeAttr('checked');
                var val = TS.activeOption.find('a.label').attr('rel');
                var models = $('#filterSet div.MODEL').find('input:checked');
                if (models.length > 0) {
                    models.each(function() {
                        if ($(this).val().indexOf(val) != 0) {
                            $(this).removeAttr('checked');
                        }
                    });
                }
            }

            TS.activeOption.find('input:checkbox').attr('checked', 'checked');

            if ($(this).parents('.REGION').length > 0) {
                Regions.toggleHiddenRegion();
            }
            setTimeout(function() {
                $('form#filter').submit();
            }, 300);
        });

        $('#filterSet div.filterGroup li.active div.filterItem a.label').live('click', function(event) {
            event.preventDefault();
        });

        $("#filterSet .filterItem input:checkbox[name='x']").bind('change', function(event) {
            var parentUL = $(this).parents('ul');
            if (parentUL.find('div.filterItem:not(.inactive) input:checked').length > 0) {
                parentUL.find('li.liFromTo input[class^="from:"]').attr('disabled', 'disabled').css({
                    'background': '#E9F2F9'
                });
                parentUL.find('li.liFromTo input[class^="from:"]').prev().attr('disabled', 'disabled');
                parentUL.find('li.liFromTo input[class^="to:"]').attr('disabled', 'disabled').css({
                    'background': '#E9F2F9'
                });
                parentUL.find('li.liFromTo input[class^="to:"]').prev().attr('disabled', 'disabled');
            } else {
                parentUL.find('li.liFromTo input[class^="from:"]').removeAttr('disabled').css({
                    'background': '#FFF'
                });
                parentUL.find('li.liFromTo input[class^="from:"]').prev().removeAttr('disabled');
                parentUL.find('li.liFromTo input[class^="to:"]').removeAttr('disabled').css({
                    'background': '#FFF'
                });
                parentUL.find('li.liFromTo input[class^="to:"]').prev().removeAttr('disabled');
            }
        });

        var i = 0;
        $('#filterSet .header .button').each(function() {
            i++;
            $(this).addClass('minus')
            $(this).click(function() {
                if ($(this).hasClass('plus')) {
                    $(this).parents('.box').children('.content').show();
                    $(this).removeClass('plus').addClass('minus');
                } else {
                    $(this).parents('.box').children('.content').hide();
                    $(this).removeClass('minus').addClass('plus');
                }
            })
            if (i < 6) {
                $(this).addClass('minus');
            } else {
                $(this).click();
            }
        });
        $('.filterItem input:checked').parents('.content').show();
        $('.filterItem input:checked').parents('.box').find('.header .button').removeClass('plus').addClass('minus');
    }
};

$(function() {
    $(document).ready(function(){
        TS.init();
        $('#filterBar a:last').css('background','none');
        $("#filterSet").show();
        $("#filterSetLoaderGif").hide();
    });
});
