/**
 * Aktivace ajaxoveho filtru
 *
 * @return void
 */
function aktivuj_filtr(options){
  refreshPriznaky();

	var defaults = {
			symbolLevy : '', 
			symbolPravy: 'Kč',
			param	   : {}
		};
	var opt = $.extend({}, defaults, options);
	
    var minPrice = parseInt($('#min_price').val());
    var maxPrice = parseInt($('#max_price').val());
    var step     = parseInt($('#step_price').val());
    var expire   = 5 * 1000;


    // inicializace loading obrazku
    loading(opt.txt_nacitam);

    // vybrani prislusnych textboxu a pridani akci pri blur
    // nacteni prislusne hodnoty a nasledne predani do posuvniku
    $('#price_from, #price_to').blur(function(){
        var value       = $(this).val();
        var handleIndex = ("price_from" == $(this).attr("id")) ? 0 : 1;
        var from        = parseInt($('#price_from').val());
        var to          = parseInt($('#price_to').val());

        if (value < minPrice) {
            value = minPrice;
            $(this).val(value);
        }
        if (value > maxPrice) {
            value = maxPrice;
            $(this).val(value);
        }

        // From musi byt mensi nez To, jinak uprav rozsah a vypis hlasku
        // pokud bude vse OK, tak spust AJAX filtr
        if (from > to) {
            alert(opt.txt_od_mensi);
            if (0 == handleIndex) {
                value = minPrice;
                $('#price_from').val(minPrice);
            } else {
                value = maxPrice;
                $('#price_to').val(maxPrice);
            }
        } else {
            updateSumFilter(from, to);
            // zakomentovano ... nejdrive zak. musi nastavit ceny a pak kliknout na tlacitko
			//ajax_reload();
        }

        $('#slider-range').slider("values", handleIndex, value);
    });
	// deaktivace tlacitka pro odeslani rozsahu cen, aby nereloadoval stranku
	// ajax odeslani formulare a reload stranky
	$('#price_submit').click(function(){
		ajax_reload();
		return false;
	});

    // aktivace a nastaveni slideru
    $('#slider-range').slider({
        range  : true,
        min    : minPrice,
        max    : maxPrice,
        step   : step,
        animate: true,
        values : (function(){
	                var values = [];
	                $('#price_from, #price_to').each(function(){
	                values.push($(this).val());
	                });
	                return values;
        })(),
        slide: function(event, ui) {
            $("#show_price_from").html(opt.symbolLevy + " " + ui.values[0] + " " + opt.symbolPravy);
			$("#show_price_to").html(opt.symbolLevy + " " + ui.values[1] + " " + opt.symbolPravy);
        },
        stop: function(event, ui) {
            $("#price_from").val(ui.values[0]);
			$("#price_to").val(ui.values[1]);

            updateSumFilter(ui.values[0], ui.values[1]);
            // spusteni AJAXu
            ajax_reload();
        }
    });

    // prepinani zobrazeni mezi slidrem a input boxy a nastaveni akce pri kliknuti
    $('#toggle_price_view').toggle(
        function(){
            $('#slider').hide();
            $('#price_inputs').show();
            setCookie('show_price_inputs', 1, expire);
        },
        function(){
            var from = $('#price_from').val();
            var to = $('#price_to').val();
            $("#show_price_from").html(opt.symbolLevy + " " + from + " " + opt.symbolPravy);
	    $("#show_price_to").html(opt.symbolLevy + " " + to + " " + opt.symbolPravy);
            $('#slider').show();
            $('#price_inputs').hide();
            setCookie('show_price_inputs', 0, expire);
        }
    ).click(function(){
        return false;
    });

    // na zaklade cookie se zobrazi bud inputy nebo slider
    if (1 == getCookie('show_price_inputs')) {
        $('#toggle_price_view').click();
    } else {
        $('#price_inputs').hide();
    }

    // po nacteni stranky se vypisi u slaideru hodnoty od-do
    $("#show_price_from").html(opt.symbolLevy + " " + $("#slider-range").slider("values", 0) + " " + opt.symbolPravy);
    $("#show_price_to").html(opt.symbolLevy + " " + $("#slider-range").slider("values", 1) + " " + opt.symbolPravy);

    $('#vzestupne, #sestupne').bind('click', function(){
    	var element   = $('#trideni-select').val();
    	
    	direction = ($(this).hasClass('DESC') ? " DESC" : "");

    	// update hidden inputu s tridenim
    	$("#filtry :input[name='Trideni']").val(element + direction);
    	
    	// spusteni AJAXu
        ajax_reload();
    	
    	return false;
    });
    
    $('#trideni-select').bind('change', function(){
    	var element = $(this).val();
    	
    	$("#filtry :input[name='Trideni']").val(element);
    	
    	// spusteni AJAXu
        ajax_reload();
    	
    	return false;
    });
    

    // pri kliknuti na checkbox proved sestaveni filtru a proved ajax akci
    $('#filtry :checkbox.filtr_checkbox').bind('click', function(){
    	var id         = $(this).attr('id');
    	var classGroup = id.replace(/_\d+/, ''); // nacteni class urcite skupiny napr. filtr_vyr apod.
        var $checked   = $('#filtry :checkbox.' + classGroup +':checked');
        var prefix     = classGroup.replace(/filtr_/, '') + '~'; 
        
        var values = [];
        $checked.each(function(i){
            values[i] = $(this).val();
        });

        if (values.length) {
        	updateDivFilter('pomocny_' + classGroup, prefix + values.join('-'));
        } else {
        	updateDivFilter('pomocny_' + classGroup, '');
        }
        
        // spusteni AJAXu
        ajax_reload();

        return false;
    });
    
    // pri vybrani v selectbox filtru proved sestaveni filtru a proved ajax akci
    $('#filtry .filtr_selectbox').bind('change', function(){
    	var name       = $(this).attr('name');
    	var value      = $(this).val();
    	var nameHelp   = 'pomocny_' + name;
    	var nameFilter = name.replace(/filtr_/, '') + '~'; 
    	
    	if (value.length) {
    		updateDivFilter(nameHelp, nameFilter + value);
    	} else {
    		updateDivFilter(nameHelp, '');
    	}
    		
    	// spusteni AJAXu
    	ajax_reload();
    	
        return false;
    });


	/**
	 * Aktualizace cenoveho filtru v hidden inputu
	 *
	 * @param int from
	 * @param int to
	 * @return void
	 */
	function updateSumFilter(from, to) {
	    // aktualizace cenoveho filtru
	    $("#filtry #pomocny_filtr_sum").val('sum~' + from + '-' + to);
	    
	    updateGlobalFilter();
	}
	
	/**
	 * Aktualizace DIV filtru v hidden inputech
	 *
	 * @param string classGroup
	 * @param string value
	 * @return void
	 */
	function updateDivFilter(classGroup, value) {
	    // aktualizace pomocneho filtru
	    $("#filtry #" + classGroup).val(value);
	
	    updateGlobalFilter();
	}
	
	/**
	 * Aktualizace celeho filtru v hidden inputech
	 *
	 * @param string filter
	 * @return void
	 */
	function updateGlobalFilter() {
		var values = [];
		var i = 0;
		
		$('#filtry :input.pomocny_filtr').each(function(){
			if ($(this).val().length && undefined !== $(this).val())
				values[i++] = $(this).val();
        });

	    $("#filtry :input[name='filtr']").val(values.join('|')); // aktualizace zaznamu v hidden inputech
	}
	
	
	
	/**
	 * Zablokovani ajax filtru po dobu nactitani
	 * @return void
	 */
	function disable_filter()
	{

		$("#filter_disable").css("height", $("#filtry").height());
		$("#filter_disable").css("width", $("#filtry").width());
		$("#filter_disable").css("position", "absolute").css("z-index", "10").css("display", "block");
		$("#filter_disable").css("background-color", "#fff")
							.css("background-image", "url('" + web_root + "images/loading.gif')")
							.css("background-repeat", "no-repeat")
							.css("background-attachment", "scroll")
							.css("background-position", "50% 50%")
							.css("opacity", "0.5");
	}
	
	/**
	 * Provedeni AJAX dotazu na server a prekresleni stranky
	 * @return void
	 */
	function ajax_reload() {
	    var param = getParams();
	    param = $.extend({}, param, opt.param);
	    disable_filter();
		
	    $.ajax({
	        type   : 'GET',
	        url    : opt.urlAjax,
	        data   : param,
	        success: function(msg){
	       		$('#trideni-select').selectBox('destroy');
	            $('#page_reload').replaceWith(msg);
	            aktivuj_filtr({
	            	symbolLevy : opt.symbolLevy,
	            	symbolPravy: opt.symbolPravy,
	            	urlAjax    : opt.urlAjax,
	            	urlGET     : opt.urlGET,
	            	param	   : opt.param
	            	//KID        : opt.KID,
	            	//trideni    : opt.trideni
	            });
	            refreshPriznaky();
	            $('#trideni-select').selectBox();
	            
	        },
	        error: function(msg){
	            location.reload(); // refresh stranky
	        }
	    });
	}
	
	/**
	 * Nacteni parametru ze skrytych poli
	 *
	 * @return object
	 */
	function getParams() {
	    var id      = $("#filtry :input[name='return_kid']").val();
	    var sort    = $("#filtry :input[name='Trideni']").val();
	    var filter  = $("#filtry :input[name='filtr']").val();
	    var param   = {url: opt.urlGET, id: id};
	
	    if(sort.length) {
	    	param = $.extend(param, {Trideni: sort});
	    }

	    if(filter.length) {
	    	param = $.extend(param, {filtr: filter});
	    }
	
	    return param;
	}
	
	/**
	 * Nacteni parametru ze skrytych poli
	 *
	 * @return string
	 */
	/*
	function getParams() {
	    var url     = 'url=' + opt.urlGET;
	    var id      = 'id=' + $("#filtry :input[name='return_kid']").val();
	    var sort    = $("#filtry :input[name='Trideni']").val();
	    var filter  = $("#filtry :input[name='filtr']").val();
	    var param   = [url, id];
	    var i       = param.length;
	
	    if(sort.length) {
	        param[i++] = 'Trideni=' + sort;
	    }
	
	    if(filter.length) {
	        param[i++] = 'filtr=' + filter;
	    }
	
	    return param.join('&');
	}
	*/
}

/**
 * Ulozeni informace do cookie
 *
 * @param string     c_name
 * @param string|int value
 * @param int        expire
 * @return void
 */
function setCookie(c_name, value, expire) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expire);
    document.cookie = c_name + "=" + escape(value) +
        ((expire == null) ? "" : ";expires=" + exdate.toGMTString());
}

/**
 * Nacteni konkretniho cookie
 *
 * @param string c_name
 * @return string|int
 */
function getCookie(c_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;
                return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}

/**
 * Vytvoreni nacitaciho obrazku
 * @return void
 */
function loading(txt_nacitam) {
	if (!$('#loading').length) {
		var $loadingDiv = $('<div></div>')
							.attr('id', 'loading')
							.hide()
							.html('<img src="' + web_root + 'images/loading.gif" alt="' + txt_nacitam + '" />')
							.appendTo('body');
	}
}

/**
 * Zobrazeni nacitaciho obrazku
 * @return
 */
function showLoading() {
	if ($('#loading').length) {
		$('#loading').show();
	}
}

/**
 * Skryti nacitaciho obrazku
 * @return
 */
function hideLoading() {
	if ($('#loading').length) {
		$('#loading').hide();
	}
}

// TODO ... odstranit ... jen pro vyvoj aplikace
function log(data, msg) {
    if (msg) {
        msg += ': ';
    } else {
        msg = '';
    }

    console.log(msg, data);
}

