
var productFilters;

$(document).ready(function() {

    /*var query = '';
    if(location.toString().indexOf("?") == -1)
        query = '?';
    else
        query = location.toString().substring(location.toString().indexOf("?"))+'&';*/

    productFilters = new CategoryFilters();

  });


/**
 * Klasa do osbługi filtrowania
 */
function CategoryFilters()
{
    var query = '';
    var path = '';
    var seo_info = '/filter,';

    if(location.toString().indexOf(",") == -1 && location.toString().indexOf("?") == -1)
    {
        query = '?';
        path = location.toString();
    }
    else
    {
        query = location.toString().substring(location.toString().indexOf("?"))+'&';
        if(location.toString().indexOf(",") >=0)
        {
            var search_start = location.toString().indexOf("?");
            var sep_pos = location.toString().indexOf('/',location.toString().indexOf("/filter,")+5);
            //alert(sep_pos);
            if(search_start>sep_pos && sep_pos>0)
                search_start = sep_pos;

            if(search_start>0)
            seo_info = Url.decode(location.toString().substring(location.toString().indexOf("/filter,"),search_start))+',';
            path = location.toString().substring(0,location.toString().indexOf("/filter,"));
        }
        else
            path = location.toString().substring(0,location.toString().indexOf("?"));
    }

    $('.filter_group').each(function(){
        var fchecked = $(this).find('.filter_checked').length;
        if(fchecked==0)
        {
            $(this).find('.filter_contener').each(function(i){
                if(i==0) return;
                $(this).hide();
            });
        }
        else
        {
            $(this).find('.filter_contener').each(function(i){
                if($(this).find('.filter_checked').length>0)
                    return;
                $(this).hide();
            });
        }
    });

    $('.fgrouph').attr('onClick','productFilters.showCategory(this);');
    $('.fgroupf').attr('onClick','productFilters.showCategory(this);');


    if(CategoryFilters.prototype.initialized == undefined)
    {

        CategoryFilters.prototype.last_filter_name = '';

        CategoryFilters.prototype.showCategory = function(element)
        {
            $(element).parent().find('.filter_contener').slideDown(100);
            $(element).parent().find('.fgroupf').slideUp(100);
        }

        /**
         * Filtrowanie
         * @param form id
         * @param action_target wez url_target z action form'a (bool)
         */
        CategoryFilters.prototype.applyFilter = function(form,action_target)
        {
            if(action_target)
            {
                path = $('#'+form).attr('action');
            }

            var clazz = this;
            $('.filter_form').each(function(index,item)
            {
                var f_name;
                var filter;
                var part1;

                $(this).find('input').each(function(index) {
                    if($(this).attr('type')=='radio' && $(this).attr('checked'))
                    {
                        f_name = $(this).parents('.filter_contener').find('b').text();
                        if(clazz.last_filter_name!=f_name){
                            clazz.last_filter_name = f_name;
                            seo_info += ','+f_name+':';
                        } else {
                            seo_info += '+';
                        }
                        seo_info += $(this).parents('.underline').find('label').text();
                        filter = $(this).attr('name');
                        if(query.indexOf(filter+'=')>=0)
                        {
                            part1 = query.substring(0,query.indexOf(filter+'='));
                            query = part1+filter+'='+$(this).val()+query.substring(query.indexOf('&',query.indexOf(filter+'=')));
                        }
                        else
                            query += filter+'='+$(this).val()+'&';
                    }
                    if($(this).attr('type')=='text')
                    {
                        filter = $(this).attr('name');
                        if(query.indexOf(filter+'=')>=0)
                        {
                            //part1 = query.substring(0,query.indexOf(filter+'='));
                            //query = part1+filter+'='+$(this).val()+query.substring(query.indexOf('&',query.indexOf(filter+'=')));
                            clazz.removeFromUrl($(this).attr('name'),$(this).val(),this,true);
                            clazz.addToUrl($(this).attr('name'),$(this).val(),this,true);
                        }
                        else
                        {
                            //query += filter+'='+$(this).val()+'&';
                            clazz.addToUrl($(this).attr('name'),$(this).val(),this,true);
                        }
                    }
                    if($(this).attr('type')=='checkbox')
                    {
                        filter = $(this).attr('name')+'='+$(this).val();
                        if(query.indexOf(filter+'&')>=0 && !$(this).attr('checked'))
                        {
                            modified = true;
                            clazz.removeFromUrl($(this).attr('name'),$(this).val(),this,false);
                        }
                        else if(query.indexOf(filter+'&')<0 && $(this).attr('checked'))
                        {
                            clazz.addToUrl($(this).attr('name'),$(this).val(),this);
                        }
                    }
                });
                $(this).find('select').each(function(index) {
                    filter = $(this).attr('name');
                    if(query.indexOf(filter+'=')>=0)
                    {
                        part1 = query.substring(0,query.indexOf(filter+'='));
                        query = part1+filter+'='+$(this).val()+query.substring(query.indexOf('&',query.indexOf(filter+'=')));
                    }
                    else
                        query += filter+'='+$(this).val()+'&';
                });

            });

            this.redirect();
        };

        /**
         * Dodanie filtrowanej wartosci do url'a
         */
        CategoryFilters.prototype.addToUrl = function(name,value,element,val_str)
        {
            query += name+'='+value+'&';
            var f_name = $(element).parents('.filter_contener').find('b').text();
            if(this.last_filter_name!=f_name){
                this.last_filter_name = f_name;
                if(seo_info.substring(seo_info.length-1,seo_info.length)!=',')
                    seo_info += ','
                seo_info += f_name+':';
            } else {
                seo_info += '+';
            }
            if(val_str!=undefined && val_str == true)
                seo_info += value;
            else
                seo_info += $(element).parents('.underline').find('label').text();
        }

        /**
         * Wstawianie filtrowanej wartosci do url'a
         */
        CategoryFilters.prototype.removeFromUrl = function(name,value,element,total)
        {
            if(total)
            {
                var filter = name+'=';
                var part1 = query.substring(0,query.indexOf(filter));
                query = part1+query.substring(query.indexOf('&',query.indexOf(filter))+1);

                var f_name = $(element).parents('.filter_contener').find('b').text();
                f_name = f_name.replace(/(\s|&nbsp;|\/|&\#160;)+/gi, "_");
                part1 = seo_info.substring(0,seo_info.indexOf(','+f_name+':'));
                var coma_pos = seo_info.indexOf(',',seo_info.indexOf(','+f_name+':')+1);
                seo_info = part1+seo_info.substring(coma_pos);
                return;
            }
            var filter = name+'='+value;
            var part1 = query.substring(0,query.indexOf(filter+'&'));
            query = part1+query.substring(query.indexOf('&',query.indexOf(filter+'&'))+1);

            var f_name = $(element).parents('.filter_contener').find('b').text();
            f_name = f_name.replace(/(\s|&nbsp;|\/|&\#160;)+/gi, "_");
            part1 = seo_info.substring(0,seo_info.indexOf(','+f_name+':'));
            var coma_pos = seo_info.indexOf(',',seo_info.indexOf(','+f_name+':')+1);

            var filter_seo = seo_info.substring(seo_info.indexOf(','+f_name+':')+1,coma_pos+1);
            var curr_seo_val = $(element).parents('.underline').find('label').text();
            curr_seo_val = curr_seo_val.replace(/(\s|&nbsp;|\/|&\#160;)+/gi, "_");
            if(filter_seo.length>(f_name.length+1+curr_seo_val.length+1))
            {
                // Usunac dana wartosc
                var values = filter_seo.substring(filter_seo.indexOf(':')+1, filter_seo.lastIndexOf(','));
                var vArr = values.split('+');
                values = '';
                for(var i=0;i<vArr.length;++i)
                {
                    if(vArr[i]!=curr_seo_val)
                    {
                        if(values.length!=0)
                            values += '+';
                        values += vArr[i];
                    }
                }
                filter_seo = ','+filter_seo.substring(0,filter_seo.indexOf(':')+1)+values;
            }
            else
            {
                // Usunac caly filter
                filter_seo = '';
            }
            seo_info = part1+filter_seo+seo_info.substring(coma_pos);
        }

        /**
         * Usunięcie danego filtru
         */
        CategoryFilters.prototype.clearFilter = function(form)
        {
            $('#'+form+' input').each(function(index) {
                var filter = $(this).attr('name')+'='+$(this).val();
                if(query.indexOf(filter+'&')>=0)
                {
                    var part1 = query.substring(0,query.indexOf(filter+'&'));
                    query = part1+query.substring(query.indexOf('&',query.indexOf(filter+'&'))+1);
                }
            });

            var f_name = $('#'+form).parents('.filter_contener').find('b').text();
            f_name = f_name.replace(/(\s|&nbsp;|\/|&\#160;)+/gi, "_");
            part1 = seo_info.substring(0,seo_info.indexOf(','+f_name+':'));
            var coma_pos = seo_info.indexOf(',',seo_info.indexOf(','+f_name+':')+1);
            seo_info = part1+seo_info.substring(coma_pos);
            this.redirect();
        };

        /**
         * Wyczyszczenie wszystkich filtrów
         */
        CategoryFilters.prototype.clearAllFilters = function()
        {
            query = '?';
            seo_info = ',';
            this.redirect();
        };

        /**
         * Odznaczenie wybranego filtru (checkboxa)
         */
        CategoryFilters.prototype.uncheckFilter = function(checkbox_id)
        {
            $('#'+checkbox_id).attr('checked', false);
            $.refreshCheckbox($('#'+checkbox_id));
            $('#'+checkbox_id).parents('.filter_contener').find('.filter_checked_code').hide(300);
            $('#'+checkbox_id).parents('.filter_contener').find('.filter_inputs').show(300);
        };

        /**
         * Wyświetla wszystkie checkboxy w danym filtrze
         */
        CategoryFilters.prototype.showFilter = function(element)
        {
            $(element).parents('.filter_contener').find('.filter_checked_code').hide(300);
            $(element).parents('.filter_contener').find('.filter_inputs').show(300);
        };

        /**
         * Usuwa wybrany opcje filtrowania (np. odznaczenie pojedynczego checkboxa)
         */
        CategoryFilters.prototype.removeSingleFilter = function(checkbox_id)
        {
            $('#brick_'+checkbox_id).fadeOut(300);
            this.uncheckFilter(checkbox_id);
            // Zastosowanie filtrowania
            this.applyFilter($('#'+checkbox_id).parents('form').attr('id'));
        };

        CategoryFilters.prototype.redirect = function()
        {
            seo_info = seo_info.replace(/(\s|&nbsp;|\/|&\#160;)+/gi, "_");
            seo_info = '/'+seo_info.substring(1, seo_info.length);
            if(seo_info.substring(seo_info.length-1,seo_info.length)==',')
                seo_info = seo_info.substring(0,seo_info.length-1);

            //alert(path+seo_info+query.substring(0,query.length-1));
            window.location = path+seo_info+query.substring(0,query.length-1);
        };

        CategoryFilters.prototype.initialized = true;
    }
}

/*function get_scroll_position()
{
    return window.pageYOffset || document.documentElement.scrollTop || 0;
}*/

/**
 * Sortowanie
 */
function sortBy(by)
{
    var query = '';
    var path = '';
    if(location.toString().indexOf("?") == -1)
    {
        query = '?';
        path = location.toString();
    }
    else
    {
        query = location.toString().substring(location.toString().indexOf("?"))+'&';
        path = location.toString().substring(0,location.toString().indexOf("?"));
    }
    if(by=='name' && $('#sort_name').hasClass('desc'))
        by+='1';
    else if(by=='name' && $('#sort_name').hasClass('asc'))
        by+='2';
    else if(by=='price' && $('#sort_price').hasClass('desc'))
        by+='1';
    else if(by=='price' && $('#sort_price').hasClass('asc'))
        by+='2';
    if(query.indexOf('sort=')>=0)
    {
        var part1 = query.substring(0,query.indexOf('sort='));
        query = part1+'sort='+by+query.substring(query.indexOf('&',query.indexOf('sort=')));
    }
    else
        query += 'sort='+by+'&';
    window.location = path+query.substring(0,query.length-1);
}



/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/
 
var Url = {
 
	// public method for url encoding
	encode : function (string) {
		return escape(this._utf8_encode(string));
	},
 
	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}
