                    var programSearch = {

                        '$inputField': null,
                        '$searchButton': null,
                        'autoCompleteUrl': '/partnerprogram/autocomplete',
                        'searchUrl': '/partnerprogram/index',
                            
                        'init': function(){
                            var scope = this;
                            scope.$inputField = $('#partSearch');
                            scope.$searchButton = $('#submitSearch');
                            
                            //auf programmübersichtsseite gibts mehr filter -> füge diese hinzu
                            scope.addAdditionalFilters();
                            scope.initFilterCount();
                            scope.initToggleFilterBox();
                            scope.initAutocomplete();
                            scope.initSearchButton();
                        },

                        'initToggleFilterBox': function(){
                            var scope = this;
                            $( ".searchFilterCnt" ).click(function() {
                                $( ".searchFilterContent" ).toggleClass( "active" );
                            });
                            
                            $(document).click(function(event) { 
                                if(!$(event.target).closest('.searchFilterContent').length && !$(event.target).closest('.searchFilterCnt').length) {
                                    if($('.searchFilterContent').hasClass("active")) {
                                        $('.searchFilterContent').removeClass("active");
                                    }
                                }        
                            })
                        },
                        
                        'initFilterCount': function(){
                        	// Zählt wie viele Checkboxen aktiv sind
                            var checked_boxes = $('.searchFilterCb:checked').length;
                            $('#count-checked-checkboxes').text(checked_boxes);

                            var $checkboxes = $('.searchFilterCb[type="checkbox"]');
                            $checkboxes.change(function(){
                                var countCheckedCheckboxes = $checkboxes.filter(':checked').length;
                                $('#count-checked-checkboxes').text(countCheckedCheckboxes);
                            });
                        },
                        
                        'addAdditionalFilters': function(){
                        	$('#filter').find('option').each(function(index, elem){
                        		var foundValue = $(elem).val();
                        		var filterExists = ($('input[name="searchFilter[]"][value="' + foundValue + '"]').length > 0);
                        		if(!filterExists){
                        			var optionLabel = $(elem).text();
                        			var isSelected = $(elem).prop('selected');
                        			var newFilter = '<label><input class="searchFilterCb" type="checkbox" value="' + foundValue + '" ';
                        			newFilter += 'name="searchFilter[]"' + (isSelected ? ' checked="checked"' : '') + '>';
                        			newFilter += (optionLabel + '</label>');
                        			$('.searchFilterContent').append(newFilter);
                        		}
                        	});
                        },
                        
                        'getSearchParams': function(){
                            var filters = [];
                            $('.searchFilterContent').find('input[name="searchFilter[]"]').each(function(index, checkbox){
                                if( $(checkbox).prop('checked') ){
                                    filters.push($(checkbox).val());
                                }
                            });
                            
                            var keyword = $('#partSearch').val();
                            var searchParams = [];
                            if(filters.length != 0){
                                searchParams.push({ name: 'filter', value: filters.join() });
                            }
                            if(keyword.trim() != ''){
                                searchParams.push({ name: 'keyword', value: encodeURI(keyword) });
                            }
                            
                            //falls suche auf programmübersichtsseite, dann gibt es noch sortierung und kategoriefilter
                            if( $('#category').length == 1 ){
                            	searchParams.push({ name: 'category', value: $('#category').val() });
                            }
                            if( $('#sort').length == 1 ){
                            	searchParams.push({ name: 'sort', value: $('#sort').val() });
                            }
                            if( $('#status').length == 1 ){
                            	searchParams.push({ name: 'status', value: $('#status').val() });
                            }
                            if( $('#salesRegion').length == 1 ){
                            	var countries = $('#salesRegion').val() || ['all'];
                            	countries = countries.join();
                            	searchParams.push({ name: 'salesRegion', value: countries });
                            }

                            //falls suche über startseite, dann lege in response cookie mit filter parametern an
                            searchParams.push({ name: 'landingPage', value: 1 });
                            return searchParams;
                        },

                        'initAutocomplete': function(){
                            var scope = this;
                            scope.$inputField.autocomplete({
                                source: function(request, response){
                                    var filterParams = [];
                                    filterParams.push({ name: "matches", value: request.term });
                                    $.post(scope.autoCompleteUrl, filterParams, function(data){
                                        response(data.data);
                                    });
                                },
                                select: function(ev, ui){
                                    ev.preventDefault();
                                    location.href = '/partnerprogramme/' + ui.item.id;
                                },
                            }).data("ui-autocomplete")._renderItem = scope._resultRenderItem;
                        },

                        '_resultRenderItem': function(ul, item){
                            var inner_html = '\
                                <a>\
                                    <div class="search_result_item_cnt">\
                                        <div class="search_result_item_img_cnt">\
                                            <img src="//media.adcell.de/partner/' + item.id + '.png">\
                                        </div>\
                                        <div class="search_result_item_label">' + item.name + '</div>\
                                    </div>\
                                </a>';
                            return $( '<li>' )
                            .attr( "data-value", item.id )
                            .append( inner_html )
                            .appendTo( ul );
                        },
                        
                        'initSearchButton': function(){
                            var scope = this;
                            scope.$searchButton.off().on('click', $.proxy(scope.startSearch, scope));
                        },

                        'startSearch': function(ev){
                            var scope = this;
                            ev.preventDefault();
                            var searchParams = scope.getSearchParams();
                            var url = scope.createSearchUrl(searchParams);
                            location.href = url;
                        },

                        'createSearchUrl': function(searchParams){
                            var scope = this;
                            var url = scope.searchUrl;
                            searchParams.forEach(function(param, index, array){
                                url += (index == 0) ? '?' : '&';
                                url +=  param.name + '=' + param.value;
                            });
                            
                            return url;
                        },
                            
                    };