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 = ''); $('.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 = '\ \
\
\ \
\
' + item.name + '
\
\
'; return $( '
  • ' ) .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; }, };