var re_ajax_cache={
data: {},
remove: function (cache_id){
delete re_ajax_cache.data[cache_id];
},
exist: function (cache_id){
if(jQuery('.custom_search_box').length){
return false;
}
return re_ajax_cache.data.hasOwnProperty(cache_id)&&re_ajax_cache.data[cache_id]!==null;
},
get: function (cache_id){
return re_ajax_cache.data[cache_id];
},
set: function (cache_id, cachedData){
re_ajax_cache.remove(cache_id);
re_ajax_cache.data[cache_id]=cachedData;
}};
var re_ajax_search={
_current_selection_index:0,
_last_request_results_count:0,
_first_down_up:true,
init: function init(){
jQuery('.re-ajax-search').on("keydown", jQuery.debounce(250, function(event){
var ajaxsearchitem=jQuery(this);
if((event.which&&event.which==39)
|| (event.keyCode&&event.keyCode==39)
|| (event.which&&event.which==37)
|| (event.keyCode&&event.keyCode==37)){
re_ajax_search.re_ajax_set_focus(ajaxsearchitem);
return;
}
if((event.which&&event.which==13)||(event.keyCode&&event.keyCode==13)){
var re_ajax_search_cur=jQuery(this).parent().parent().find('.re-sch-cur-element');
if(re_ajax_search_cur.length > 0){
var re_searchopen_url=re_ajax_search_cur.find('.re-search-result-title a').attr('href');
window.location=re_searchopen_url;
}else{
jQuery(this).parent().submit();
}
return false;
}else{
if((event.which&&event.which==40)||(event.keyCode&&event.keyCode==40)){
re_ajax_search.re_aj_search_move_key_down(ajaxsearchitem);
return false;
}else if((event.which&&event.which==38)||(event.keyCode&&event.keyCode==38)){
re_ajax_search.re_aj_search_move_key_up(ajaxsearchitem);
return false;
}else{
if((event.which&&event.which==8)||(event.keyCode&&event.keyCode==8)){
var search_query=jQuery(this).val();
if(search_query.length==1){
jQuery(this).parent().parent().find('.re-aj-search-wrap').removeClass('re-aj-search-open').empty();
}}
re_ajax_search.re_ajax_set_focus(ajaxsearchitem);
setTimeout(function(){
re_ajax_search.do_ajax_call(ajaxsearchitem);
}, 100);
}
return true;
}}));
},
re_aj_search_move_key_up: function re_aj_search_move_key_up(elem){
if(re_ajax_search._first_down_up===true){
re_ajax_search._first_down_up=false;
if(re_ajax_search._current_selection_index===0){
re_ajax_search._current_selection_index=re_ajax_search._last_request_results_count - 1;
}else{
re_ajax_search._current_selection_index--;
}}else{
if(re_ajax_search._current_selection_index===0){
re_ajax_search._current_selection_index=re_ajax_search._last_request_results_count;
}else{
re_ajax_search._current_selection_index--;
}}
elem.parent().parent().find('.re-search-result-div').removeClass('re-sch-cur-element');
if(re_ajax_search._current_selection_index  > re_ajax_search._last_request_results_count -1){
elem.closest('form').fadeTo(100, 1);
}else{
re_ajax_search.re_search_input_remove_focus(elem);
elem.parent().parent().find('.re-search-result-div').eq(re_ajax_search._current_selection_index).addClass('re-sch-cur-element');
}},
re_aj_search_move_key_down: function re_aj_search_move_key_down(elem){
if(re_ajax_search._first_down_up===true){
re_ajax_search._first_down_up=false;
}else{
if(re_ajax_search._current_selection_index===re_ajax_search._last_request_results_count){
re_ajax_search._current_selection_index=0;
}else{
re_ajax_search._current_selection_index++;
}}
elem.parent().parent().find('.re-search-result-div').removeClass('re-sch-cur-element');
if(re_ajax_search._current_selection_index > re_ajax_search._last_request_results_count - 1){
elem.closest('form').fadeTo(100, 1);
}else{
re_ajax_search.re_search_input_remove_focus(elem);
elem.parent().parent().find('.re-search-result-div').eq(re_ajax_search._current_selection_index).addClass('re-sch-cur-element');
}},
re_ajax_set_focus: function re_ajax_set_focus(elem){
re_ajax_search._current_selection_index=0;
re_ajax_search._first_down_up=true;
elem.closest('form').fadeTo(100, 1);
elem.parent().parent().find('.re-search-result-div').removeClass('re-sch-cur-element');
},
re_search_input_remove_focus: function re_search_input_remove_focus(elem){
if(re_ajax_search._last_request_results_count!==0){
elem.closest('form').css('opacity', 0.5);
}},
process_ajax_response: function (data, callelem){
var current_query=callelem.val().trim();
if(current_query==''){
callelem.parent().parent().find('.re-aj-search-wrap').empty();
return;
}
var td_data_object=JSON.parse(data);
if(td_data_object.re_search_query!==current_query){
return;
}
re_ajax_search._current_selection_index=0;
re_ajax_search._last_request_results_count=td_data_object.re_total_inlist;
re_ajax_search._first_down_up=true;
callelem.parent().parent().find('.re-aj-search-wrap').addClass('re-aj-search-open').html(td_data_object.re_data);
var iconsearch=callelem.parent().find('.rhi-sync');
iconsearch.removeClass('rhi-sync fa-spin').addClass('rhi-search');
callelem.removeClass('searching-now');
},
do_ajax_call: function do_ajax_call(elem){
var posttypes=elem.data('posttype');
var enable_compare=elem.data('enable_compare');
var aff=elem.data('aff');
if(elem.prevObject==undefined){
var catid=elem.data('catid');
}else{
var catid=elem.attr('data-catid');
}
var callelem=elem;
if(elem.val()==''){
re_ajax_search.re_ajax_set_focus(callelem);
return;
}
var search_query=elem.val();
if(re_ajax_cache.exist(search_query)){
re_ajax_search.process_ajax_response(re_ajax_cache.get(search_query), callelem);
return;
}
var iconsearch=elem.parent().find('.rhi-search');
iconsearch.removeClass('rhi-search').addClass('rhi-sync fa-spin');
elem.addClass('searching-now');
jQuery.ajax({
type: 'POST',
url: rhscriptvars.ajax_url,
data: {
action: 'rehub_ajax_search',
re_string: search_query,
posttypesearch: posttypes,
enable_compare:enable_compare,
aff_link: aff,
catid:catid,
security:rhscriptvars.searchnonce,
}}).done(function(data, textStatus, XMLHttpRequest){
re_ajax_cache.set(search_query, data);
re_ajax_search.process_ajax_response(data, callelem);
});
}};
jQuery(document).ready(function($){
'use strict';
re_ajax_search.init();
});