﻿$(function(){
    if($('#match').length==0) return;

    GeLoad = function(modules, hash, callback) {
        hash = hash || document.location.hash;
        if (modules.length >1)
            callback = function(newmod) { GeLoad(newmod, hash, callback) };
        else
            callback = function(x) { ; };
        var ajax_url =  '?url='+match_data['url']+'&'+hash.substr(2);
        if (modules.constructor != Array) throw new Error('GeLoad -> parameter "modules" should be an array!');
        i = 0;
            if (modules[i] == 'match') {
                $.get(__WWWHOST+'match.php'+ajax_url,{},function(d){
                    $('#match').replaceWith(d); matchCount();
                    newmod = [];
                    for (var pr in modules) { if(modules[pr] != 'match') newmod.push(modules[pr]); }
                    callback(newmod);
                    onAjaxLoad();
                });
            } else if (modules[i] == 'products') {
                if (match_data['page_is_index'] || !(document.location.href.indexOf(__WWWHOST+'catalog/'+match_data['url']+'.html')+1)) {
                    document.location.href =  __WWWHOST+'catalog/'+match_data['url']+'.html#?'+hash.substr(2);
                    return;
                } else {

                }
                $.get(__WWWHOST+'products.php'+ajax_url,{},function(d){
                    newmod = [];
                    for (var pr in modules) { if(modules[pr] != 'match') newmod.push(modules[pr]); }
                    $('#catalog_container').replaceWith(d);
                    callback(newmod);
                });
            } else if (modules[i] == 'count') {
                $.get(__WWWHOST+'count.php'+ajax_url,{},function(d){
                    newmod = [];
                    for (var pr in modules) { if(modules[pr] != 'match') newmod.push(modules[pr]); }
                    $('#show-match-count .number').html(d);
                    callback(newmod);
                });
            } else {
               throw new Error('GeLoad -> invalid module value!');
            }
    };

    urlHashGenerate = function(match_data) {
        var str = '';
        for (var i in match_data) {
            if (match_data[i] && (i != 'url') && (i != 'page_is_index')) {
                if (match_data[i].constructor != Array) {
                    if (i != 'match')
                        str += '&'+i+'='+encodeURIComponent(match_data[i]);
                    else
                        str += '&'+i+'='+match_data[i];
                } else {
                    for (var j in match_data[i])
                        str += '&'+i+'[]='+encodeURIComponent(match_data[i][j]);
                }
            }
        }
        return '#?'+str.substr(1);
    };

    makeMatch = function(light) {
        if (light) {
            document.location.hash = urlHashGenerate(tmatch_data);
            GeLoad(['products']);
        } else {
            updateMatch();
            match_data.b = 0;
            document.location.hash = urlHashGenerate(match_data);
            GeLoad(['products']);
        }
    };

    matchCount = function() {
        updateMatch();
        var hash = urlHashGenerate(match_data);
        GeLoad(['count'],hash);
    };

    if (document.location.href.indexOf('#?')+1) {
        GeLoad(['match','products']);
    } else {
        onAjaxLoad();
    }

    $('.pages .cpage').live('click',function(){
        if($(this).hasClass('active')) return;
        tmatch_data['b'] = $(this).attr('data-page');
        makeMatch(true);
        return false;
    });

    $('.templates a').live('click',function(){
        if($(this).hasClass('active')) return false;
        tmatch_data['tmplt'] = $(this).attr('data-tmplt');
        match_data['tmplt'] = $(this).attr('data-tmplt');
        makeMatch(true);
        return false;
    });

    $('.sort a').live('click',function(){
        tmatch_data['sort'] = $(this).attr('data-sort');
        tmatch_data['to'] = $(this).attr('data-to');
        match_data['sort'] = $(this).attr('data-sort');
        match_data['to'] = $(this).attr('data-to');
        makeMatch(true);
        return false;
    });

    function onAjaxLoad() {
        slideIimeoutID = 'globalVar';

        $('#hideFilter').click(function(){
            $this = $(this);
            $match = $('#match');
            if ($this.hasClass('active')) {
                $this.removeClass('active');
                $this.text('Свернуть подбор');
                match_data['hf'] = 3;
                $match.find('.element').each(function(){
                    $(this).show();
                });
                $match.addClass('maxm').removeClass('minm');
            } else {
                $this.addClass('active');
                $this.text('Больше параметров');
                match_data['hf'] = 1;
                $match.find('.element').each(function(){
                    if(!$(this).hasClass('price') &&  !$(this).is('#brands-match'))
                    $(this).hide();
                });
                $match.addClass('minm').removeClass('maxm');
            }
            matchCount();
            if (!match_data['page_is_index']) document.location.hash = urlHashGenerate(match_data);
            return false;
        });

        $('.match-radio').change(function(){
            var jthis = $(this);
            var val = jthis.val();
            jthis.closest('.element').find('.active').removeClass('active');
            jthis.closest('.match-ch').addClass('active');
            $('#'+$(this).attr('name')).val(val);
            matchCount();
        });

        $('.match-checkbox').click(function(){
            jthis = $(this);
            if ($(this).is(':checked'))
                $(jthis.closest('.match-ch').addClass('active'));
            else
                $(jthis.closest('.match-ch').removeClass('active'));
            matchCount();
        });

        $('a.brand-ch').click(function(e){
            if (!$(e.target).is('label') && !$(e.target).is('input'))
                return false;
        });
		
		$('a.brand-ch').dblclick(function(e){
            if (!$(e.target).is('label') && !$(e.target).is('input'))
                return false;
        });

        $( ".range-slide" ).each(function(){
            var jthis = $(this);
            var mid = jthis.attr('data-matchid');
            var mmin = parseFloat(jthis.attr('data-min'));
            var mmax = parseFloat(jthis.attr('data-max'));
            var mstep = parseInt(jthis.attr('data-step')) || 1;
            var a = jthis.parent().find('#match_'+mid+'_a');
            var b = jthis.parent().find('#match_'+mid+'_b');
            var av = parseInt(a.val());
            var bv = parseInt(b.val());
            if (!av && !bv) {
                a.val(mmin);
                av = mmin;
                b.val(mmax);
                bv = mmax;
            }
            jthis.slider({
                range: true,
                min: mmin,
                max: mmax,
                step: mstep,
                values: [av, bv],
                slide: function(event, ui) {
                    a.val(ui.values[0]);
                    b.val(ui.values[1]);
                    clearTimeout(slideIimeoutID);
                    slideIimeoutID = setTimeout(function(){
                        matchCount();
                    },1000);
                },
                create: function(event, ui) {
                    $('.ui-slider').each(function(){
                       //alert();
                       $(this).find('.ui-slider-handle').last().addClass('last-child');
                    });
                }
            });
        });

        $('.range-val input').blur(function() {
            var jthis = $(this);
            if (jthis.attr('data-min')) {
                if (parseFloat(jthis.val())<parseFloat(jthis.attr('data-min'))) {
                    jthis.val(jthis.attr('data-min'));
                }
                if (parseFloat(jthis.val())>parseFloat(jthis.parent().find('[data-max]').val())) {
                    jthis.val(jthis.parent().find('[data-max]').val());
                }
                 jthis.closest('.range-val').find('.range-slide').slider('values',0,parseFloat(jthis.val()));
            } else if (jthis.attr('data-max')) {
                if (parseFloat(jthis.val())>parseFloat(jthis.attr('data-max'))) {
                    jthis.val(jthis.attr('data-max'));
                }
                if (parseFloat(jthis.val())<parseFloat(jthis.parent().find('[data-min]').val())) {
                    jthis.val(jthis.parent().find('[data-min]').val());
                }
                jthis.closest('.range-val').find('.range-slide').slider('values',1,parseFloat(jthis.val()));
            }
			jthis.val(jthis.val().replace(',','.'));
            matchCount();
        });

        $('#brands-match input').change(function(){
            var jthis = $(this);
            if(jthis.is(':checked')) {
                jthis.closest('.match-ch').addClass('active');
            } else {
                jthis.closest('.match-ch').removeClass('active');
            }
            var arr = [];
            $('#brands-match').find('input').each(function(){
                var jthis = $(this);
                if (jthis.is(':checked')) {
                    arr.push(jthis.attr('data-mid'));
                }
            });
            if (arr.length == 0)
                match_data['pid'] = 0;
            else {
                match_data['pid'] = [];
                for(var j in arr) { match_data['pid'][j] = arr[j]; }
            }

            matchCount();
        });
    }

});
