(function ($) {
"use strict";
$(document).ready(function () {
var $window = $(window),
$body = $('body'),
isRtl = $body.hasClass('rtl');
// Stop propagation of click event.
$('.add-favorites-without-login').on('click', function (event) {
event.stopPropagation();
});
/*-----------------------------------------------------------------*/
/* Save Search & Alerts
/*-----------------------------------------------------------------*/
$( '#rh_save_search_btn' ).on('click', function(e){
e.preventDefault();
let button = $(this);
let $form = button.closest('form');
let search_args = $form.find('.rh_wp_query_args').val();
let search_url = $form.find('.rh_url_query_str').val();
let icon = button.find('i');
let saved_label = button.data('saved-label');
icon.addClass('fa-spin');
if(button.hasClass('require-login')){
// Prepare new alert object to store in local storage.
let current_time = $form.find('.rh_current_time').val();
let new_saved_search = {
'wp_query_args': search_args,
'query_str': search_url,
'time': current_time
};
// Add new alert to the local storage.
var old_saved_searches = window.localStorage.getItem('realhomes_saved_searches');
if(old_saved_searches){
all_saved_searches = JSON.parse(old_saved_searches);
all_saved_searches.push(new_saved_search);
window.localStorage.setItem('realhomes_saved_searches', JSON.stringify(all_saved_searches));
} else {
window.localStorage.setItem('realhomes_saved_searches', JSON.stringify([new_saved_search]));
}
// Update the save alert button.
button.addClass('search-saved');
icon.removeClass('fa-spin');
button.html('' + saved_label);
// Open the login/register dialoage box.
var loginModel = $('body').find('.rh_login_modal_wrapper');
if (loginModel.length) {
$('.rh_login_modal_wrapper').css("display", "flex").hide().fadeIn(500);
} else {
window.location = button.data('login');
}
} else {
let nonce = $form.find('.rh_save_search_nonce').val();
$.post(ajaxurl,
{
nonce: nonce,
action: 'inspiry_save_search',
search_args: search_args,
search_url: search_url,
},
function(response) {
response = JSON.parse(response);
if(response.success){
// Update the save search button.
button.addClass('search-saved');
icon.removeClass('fa-spin');
button.html('' + saved_label);
}
}
);
}
});
// Migrate saved searches from local to server.
var all_saved_searches = JSON.parse(window.localStorage.getItem('realhomes_saved_searches'));
if(all_saved_searches && $('body').hasClass('logged-in')){
var migrate_saved_searches = {
type : 'post',
url : ajaxurl,
data : {
action: 'realhomes_saved_searches_migration',
saved_searches : all_saved_searches,
},
success: function(response) {
if ('true' === response) {
// Clear all saved searches from local storage.
window.localStorage.removeItem('realhomes_saved_searches');
}
}
};
$.ajax(migrate_saved_searches);
}
/*-----------------------------------------------------------------*/
/* Mortgage Calculator
/*-----------------------------------------------------------------*/
if( $('.rh_property__mc_wrap').length ) {
const mcState = {};
mcState.fields = {
'term': $('select.mc_term'),
'interest_text': $('.mc_interset'),
'interest_slider': $('.mc_interset_slider'),
'price_text': $('.mc_home_price'),
'price_slider': $('.mc_home_price_slider'),
'downpayment_text': $('.mc_downpayment'),
'downpayment_text_p': $('.mc_downpayment_percent'),
'downpayment_slider': $('.mc_downpayment_slider'),
'tax': $('.mc_cost_tax_value'),
'hoa': $('.mc_cost_hoa_value'),
'currency_sign': $('.mc_currency_sign'),
'sign_position': $('.mc_sign_position'),
'info_term': $('.mc_term_value'),
'info_interest': $('.mc_interest_value'),
'info_cost_interst': $('.mc_cost_interest span'),
'info_cost_total': $('.mc_cost_total span'),
'graph_interest': $('.mc_graph_interest'),
'graph_tax': $('.mc_graph_tax'),
'graph_hoa': $('.mc_graph_hoa'),
}
if ( $('.mc_cost_over_graph').length > 0 ) {
mcState.fields.info_cost_total = $('.mc_cost_over_graph');
}
mc_calculate(); // Initiate Mortgage Calculator.
mc_input_blur(); // Format the amounts in the text fields.
// Apply calculation action on calculator values change.
$('.rh_mc_field select, .rh_mc_field input[type=range]').on('change', mc_update_fields_values);
$('.rh_mc_field input[type=range]').on('input', mc_update_fields_values);
$('.rh_mc_field input[type=text]').on('keyup', mc_update_fields_values);
// Add focus and blur actions on text input fields.
$('.rh_mc_field input[type=text]').on('focus', mc_input_focus);
$('.rh_mc_field input[type=text]').on('blur', mc_input_blur);
function mc_reassign_fields($this = null) {
if ( 'object' === typeof $this && typeof $this.closest( '.rh_property__mc' ) ) {
$this = $this.closest( '.rh_property__mc' );
mcState.fields = {
'term': $this.find('select.mc_term'),
'interest_text': $this.find('.mc_interset'),
'interest_slider': $this.find('.mc_interset_slider'),
'price_text': $this.find('.mc_home_price'),
'price_slider': $this.find('.mc_home_price_slider'),
'downpayment_text': $this.find('.mc_downpayment'),
'downpayment_text_p': $this.find('.mc_downpayment_percent'),
'downpayment_slider': $this.find('.mc_downpayment_slider'),
'tax': $this.find('.mc_cost_tax_value'),
'hoa': $this.find('.mc_cost_hoa_value'),
'currency_sign': $this.find('.mc_currency_sign'),
'sign_position': $this.find('.mc_sign_position'),
'info_term': $this.find('.mc_term_value'),
'info_interest': $this.find('.mc_interest_value'),
'info_cost_interst': $this.find('.mc_cost_interest span'),
'info_cost_total': $this.find('.mc_cost_total span'),
'graph_interest': $this.find('.mc_graph_interest'),
'graph_tax': $this.find('.mc_graph_tax'),
'graph_hoa': $this.find('.mc_graph_hoa'),
}
if ( $('.mc_cost_over_graph').length > 0 ) {
mcState.fields.info_cost_total = $this.find('.mc_cost_over_graph');
}
}
}
function mc_only_numeric(data){
if('string' === typeof data) {
return (data.replace(/[^0-9-.]/g,'')).replace(/^\./, ''); // leave only numeric value.
}
return data;
}
function mc_input_focus(){
$(this).val( mc_only_numeric( $(this).val() ) ); // leave only numeric value.
}
function mc_input_blur(){
// percentage value.
mcState.fields.interest_text.val( mc_only_numeric( mcState.fields.interest_text.val() ) + '%');
mcState.fields.downpayment_text_p.val( mc_only_numeric( mcState.fields.downpayment_text_p.val() ) + '%');
// formatted amount value.
mcState.fields.price_text.val(mc_format_amount( mcState.fields.price_text.val()));
mcState.fields.downpayment_text.val(mc_format_amount(mcState.fields.downpayment_text.val()));
}
function mc_format_amount(amount) {
if( 'after' === mcState.values.sign_position ){
return new Intl.NumberFormat().format( mc_only_numeric( amount ) ) + mcState.values.currency_sign;
}
return mcState.values.currency_sign + new Intl.NumberFormat().format( mc_only_numeric( amount ) );
}
function mc_update_fields_values(){
const $this = $(this);
mc_reassign_fields($this);
mcState.values = mc_get_input_values(); // get all input values to be used for the calculation.
if( 'range' === $this.attr('type') ) {
if($this.hasClass('mc_interset_slider')) { // Interest slider changed.
mcState.fields.interest_text.val($this.val() + '%'); // update interest percentage text field value.
} else if ($this.hasClass('mc_home_price_slider')) { // Price slider changed.
mcState.fields.price_text.val(mc_format_amount($this.val())); // update price text field value.
// update downpayment amount text field value according to the selected percentage.
let home_price = $this.val();
let dp_percent = mcState.values.downpayment_percent;
let downpayment = Math.round((home_price * dp_percent) / 100);
mcState.fields.downpayment_text.val(mc_format_amount(downpayment));
} else if ($this.hasClass('mc_downpayment_slider')) { // Downpayment slider.
mcState.fields.downpayment_text_p.val($this.val() + '%');
let home_price = mcState.values.price;
let dp_percent = $this.val();
let downpayment = Math.round((home_price * dp_percent) / 100);
mcState.fields.downpayment_text.val(mc_format_amount(downpayment));
}
} else if( 'text' === $this.attr('type') ) {
if($this.hasClass('mc_interset')) {
mcState.fields.interest_slider.val( mcState.values.interest );
} else if ($this.hasClass('mc_home_price')) {
mcState.fields.price_slider.val( mcState.values.price );
let home_price = mcState.values.price;
let dp_percent = mcState.values.downpayment_percent;
let downpayment = Math.round(( home_price * dp_percent ) / 100);
mcState.fields.downpayment_text.val(mc_format_amount(downpayment));
} else if ($this.hasClass('mc_downpayment_percent')) {
mcState.fields.downpayment_slider.val( mcState.values.downpayment_percent );
let home_price = mcState.values.price;
let dp_percent = mcState.values.downpayment_percent;
let downpayment = ( home_price * dp_percent ) / 100;
mcState.fields.downpayment_text.val(mc_format_amount(downpayment));
} else if ($this.hasClass('mc_downpayment')) {
let home_price = mcState.values.price;
let downpayment = mcState.values.downpayment;
let price = ( home_price < downpayment ) ? downpayment : home_price;
let dp_percent = ((downpayment * 100) / price).toFixed(2).replace(/[.,]00$/, "");
mcState.fields.downpayment_text_p.val(dp_percent + '%');
mcState.fields.downpayment_slider.val(dp_percent);
}
}
mc_calculate();
}
function mc_get_input_values(){
let interest = mc_only_numeric( mcState.fields.interest_text.val() );
let price = mc_only_numeric( mcState.fields.price_text.val() );
let downpayment = mc_only_numeric( mcState.fields.downpayment_text.val() );
let downpayment_percent = mc_only_numeric( mcState.fields.downpayment_text_p.val() );
let tax = mc_only_numeric( mcState.fields.tax.val() );
let hoa = mc_only_numeric( mcState.fields.hoa.val() );
let currency_sign = mcState.fields.currency_sign.val();
let sign_position = mcState.fields.sign_position.val();
let mcInputVals = {
term: parseInt(mcState.fields.term.val()),
interest: ('' === interest.replace('-', '')) ? 0 : parseFloat(interest),
price: ('' === price.replace('-', '')) ? 0 : parseFloat(price),
downpayment: ( '' === downpayment.replace('-', '') ) ? 0 : parseFloat(downpayment),
downpayment_percent: ( '' === downpayment_percent.replace('-', '') ) ? 0 : parseFloat(downpayment_percent),
tax: ('' === tax.replace('-', '')) ? 0 : parseFloat(tax),
hoa: ('' === hoa.replace('-', '')) ? 0 : parseFloat(hoa),
currency_sign: ('' === currency_sign) ? '$' : currency_sign,
sign_position: ('' === sign_position) ? 'before' : sign_position,
};
return mcInputVals;
}
function mc_get_principle_interest(){
let home_price = parseFloat(mcState.values.price);
let downpayment = parseFloat(mcState.values.downpayment);
let loanBorrow = home_price - downpayment;
let totalTerms = 12 * mcState.values.term;
if ( 0 === parseInt( mcState.values.interest ) ) {
return loanBorrow / totalTerms;
}
let interestRate = parseFloat(mcState.values.interest) / 1200;
return Math.round(loanBorrow * interestRate / (1 - (Math.pow(1/(1 + interestRate), totalTerms))));
}
function mc_get_payment_per_month(){
let principal_interest = parseFloat(mcState.princial_interest);
let property_tax = parseFloat(mcState.values.tax);
let hoa_dues = parseFloat(mcState.values.hoa);
return Math.round(principal_interest + property_tax + hoa_dues);
}
function mc_get_data_percentage(){
let principal_interest = mcState.princial_interest;
let property_tax = mcState.values.tax;
let hoa_dues = mcState.values.hoa;
let p_i = (principal_interest*100)/mcState.payment_per_month;
let tax = (property_tax*100)/mcState.payment_per_month;
let hoa = (hoa_dues*100)/mcState.payment_per_month;
let data_percentage = {
p_i,
tax,
hoa
};
return data_percentage;
}
function mc_render_information(){
// Update calculated information.
mcState.fields.info_term.text(mcState.values.term);
mcState.fields.info_interest.text(mcState.values.interest);
mcState.fields.info_cost_interst.text(mc_format_amount(Math.round(mcState.princial_interest)));
if ( $('.mc_cost_over_graph').length > 0 ) {
// Update circle graph and total cost.
let cost_prefix = mcState.fields.info_cost_total.attr('data-cost-prefix');
mcState.fields.info_cost_total.html('' + mc_format_amount(mcState.payment_per_month) + '' + cost_prefix);
var $circle = mcState.fields.graph_interest;
var circle_pct = mcState.percentage.p_i;
var r = $circle.attr('r');
var c = Math.PI*(r*2);
if (circle_pct < 0) { circle_pct = 0;}
if (circle_pct > 100) { circle_pct = 100;}
var pct = ((100-circle_pct)/100)*c;
$circle.css({ strokeDashoffset: pct});
var $circle = mcState.fields.graph_tax;
var circle_pct = mcState.percentage.tax + mcState.percentage.p_i;
var r = $circle.attr('r');
var c = Math.PI*(r*2);
if (circle_pct < 0) { circle_pct = 0;}
if (circle_pct > 100) { circle_pct = 100;}
var pct = ((100-circle_pct)/100)*c;
$circle.css({ strokeDashoffset: pct});
var $circle = mcState.fields.graph_hoa;
var circle_pct = mcState.percentage.hoa + mcState.percentage.tax + mcState.percentage.p_i;
var r = $circle.attr('r');
var c = Math.PI*(r*2);
if (circle_pct < 0) { circle_pct = 0;}
if (circle_pct > 100) { circle_pct = 100;}
var pct = ((100-circle_pct)/100)*c;
$circle.css({ strokeDashoffset: pct});
} else {
// Update bar graph and total cost.
mcState.fields.info_cost_total.text(mc_format_amount(mcState.payment_per_month));
mcState.fields.graph_interest.css( 'width', (mcState.percentage.p_i) + '%');
mcState.fields.graph_tax.css( 'width', (mcState.percentage.tax) + '%');
mcState.fields.graph_hoa.css( 'width', (mcState.percentage.hoa) + '%');
}
}
function mc_calculate(){
mcState.values = mc_get_input_values(); // get all input vaues to be used for the calculation.
mcState.princial_interest = mc_get_principle_interest(); // caclcualte and get the principle and interest amount.
mcState.payment_per_month = mc_get_payment_per_month(); // calculate and get the per month payment to be paid.
mcState.percentage = mc_get_data_percentage(); // calculate and get the percentages of the data for the graph display.
mc_render_information(); // Display the information on frontend side.
}
}
/*-----------------------------------------------------------------------------------*/
/* Language Switcher
/*-----------------------------------------------------------------------------------*/
$body.on('click','.inspiry-language',function (e) {
if($('.inspiry-language-switcher').find('.rh_languages_available').children('.inspiry-language').length > 0){
$('.rh_wrapper_language_switcher').toggleClass('parent_open');
$(this).toggleClass('open');
if($(this).hasClass('open')){
$('.rh_languages_available').fadeIn(200);
}else{
$('.rh_languages_available').fadeOut(200);
}
}
e.stopPropagation();
});
$('html').on('click',function () {
$('.rh_wrapper_language_switcher').removeClass('parent_open');
$('html .inspiry-language').removeClass('open');
$('.rh_languages_available').fadeOut(200);
});
/*-----------------------------------------------------------------------------------*/
/* Owl Carousel
/*-----------------------------------------------------------------------------------*/
if (jQuery().owlCarousel) {
$('.brands-owl-carousel').owlCarousel({
nav: true,
dots: false,
navText: ['', ''],
loop: true,
autoplay: true,
autoplayTimeout: 4500,
autoplayHoverPause: true,
margin: 0,
rtl: isRtl,
responsive: {
0: {
items: 1
},
480: {
items: 2
},
768: {
items: 3
},
992: {
items: 4
},
1199: {
items: 5
}
}
});
}
/*-----------------------------------------------------------------------------------*/
/* VenoBox - Just another responsive jQuery lightbox plugin.
/*-----------------------------------------------------------------------------------*/
$window.on('load', function () {
if (jQuery().venobox) {
$('.clone .venobox').removeClass('venobox');
$('.inspiry-lightbox-item, .venobox').venobox({
// autoplay : true,
// infinigall: true,
numeratio: true,
numerationPosition: 'bottom',
titlePosition: 'bottom'
});
}
if (jQuery().swipebox) {
$('a[data-swipebox-rel]').each(function () {
$(this).attr('rel', $(this).data('swipebox-rel'));
});
}
});
/*-----------------------------------------------------------------------------------*/
/* Agent forms validation script for property detail page.
/*-----------------------------------------------------------------------------------*/
function inspiryValidateForm(form) {
var $form = $(form),
submitButton = $form.find('.submit-button'),
ajaxLoader = $form.find('.ajax-loader'),
messageContainer = $form.find('.message-container'),
errorContainer = $form.find(".error-container"),
formOptions = {
beforeSubmit: function () {
submitButton.attr('disabled', 'disabled');
ajaxLoader.fadeIn('fast').css("display","block");
messageContainer.fadeOut('fast');
errorContainer.fadeOut('fast');
},
success: function (ajax_response, statusText, xhr, $form) {
var response = $.parseJSON(ajax_response);
ajaxLoader.fadeOut('fast');
submitButton.removeAttr('disabled');
if (response.success) {
$form.resetForm();
messageContainer.html(response.message).fadeIn('fast');
// call reset function if it exists
if (typeof inspiryResetReCAPTCHA == 'function') {
inspiryResetReCAPTCHA();
}
if( typeof agentData !== 'undefined' ){
setTimeout(function(){
window.location.replace(agentData.redirectPageUrl);
},1000);
}
} else {
errorContainer.html(response.message).fadeIn('fast');
}
}
};
$form.validate({
errorLabelContainer: errorContainer,
submitHandler: function (form) {
$(form).ajaxSubmit(formOptions);
}
});
}
if (jQuery().validate && jQuery().ajaxSubmit) {
if ($body.hasClass('single-property')) {
var getAgentForms = $('.agent-form');
if (getAgentForms.length) {
$.each(getAgentForms, function (i, form) {
var id = $(form).attr("id");
inspiryValidateForm('#' + id);
});
}
}
}
/*-----------------------------------------------------------------------------------*/
/* Login Required Function
/*-----------------------------------------------------------------------------------*/
$('body').on('click','.inspiry_submit_login_required',function (e) {
e.preventDefault();
$('.rh_login_modal_wrapper').css("display", "flex").hide().fadeIn(500);
});
/*-----------------------------------------------------------------------------------*/
/* BootStrap Select
/*-----------------------------------------------------------------------------------*/
var inspirySelectPicker = function (id) {
if (jQuery().selectpicker) {
jQuery(id).selectpicker({
iconBase: 'fas',
width: "100%",
size: 5,
tickIcon: 'fa-check',
selectAllText: '' +
'' +
'',
deselectAllText: '',
});
}
};
// if ($('.dsidx-resp-search-form')) {
// $('.dsidx-resp-search-form select').addClass('inspiry_select_picker_trigger inspiry_bs_default_mod inspiry_bs_green show-tick');
//
// if ($('.dsidx-sorting-control')) {
// $('.dsidx-sorting-control select').addClass('inspiry_select_picker_trigger inspiry_bs_default_mod inspiry_bs_green show-tick');
// }
// if ($('#dsidx-search-form-main')) {
// $('#dsidx-search-form-main select').addClass('inspiry_select_picker_trigger inspiry_bs_default_mod inspiry_bs_green show-tick');
// }
// if ($('#dsidx.dsidx-details')) {
// $('.dsidx-contact-form-schedule-date-row select').addClass('inspiry_select_picker_trigger inspiry_bs_default_mod inspiry_bs_green show-tick');
// }
//
// inspirySelectPicker('body .inspiry_select_picker_trigger');
// }
inspirySelectPicker('body .inspiry_select_picker_trigger');
inspirySelectPicker('body .widget_categories select');
inspirySelectPicker('body .widget_archive select');
// inspirySelectPicker('.inspiry_select_picker_mod');
$(".inspiry_multi_select_picker_location").on('change', function (e, clickedIndex, isSelected, previousValue) {
setTimeout(function () {
$('.inspiry_multi_select_picker_location').selectpicker('refresh');
},500);
});
$(".inspiry_bs_submit_location").on('changed.bs.select', function () {
$('.inspiry_bs_submit_location').selectpicker('refresh');
});
$(".inspiry_select_picker_status").on('changed.bs.select', function () {
$('.inspiry_select_picker_price').selectpicker('refresh');
});
$('.inspiry_select_picker_trigger').on('show.bs.select', function () {
$(this).parents('.rh_prop_search__option').addClass('inspiry_bs_is_open')
});
$('.inspiry_select_picker_trigger').on('hide.bs.select', function () {
$(this).parents('.rh_prop_search__option').removeClass('inspiry_bs_is_open')
});
var locationSuccessList = function (data,thisParent,refreshList = false) {
if(true === refreshList){
thisParent.find('option').not(':selected, .none').remove().end();
}
var getSelected = $(thisParent).val();
jQuery.each(data, function (index, text) {
if (getSelected) {
if (getSelected.indexOf(text[0]) < 0) {
thisParent.append(
$('')
);
}
} else {
thisParent.append(
$('')
);
}
});
thisParent.selectpicker('refresh');
$(parent).find('ul.dropdown-menu li:first-of-type a').focus();
$(parent).find('input').focus();
};
var loaderFadeIn =function () {
$('.rh-location-ajax-loader').fadeIn('fast');
};
var loaderFadeOut =function () {
$('.rh-location-ajax-loader').fadeOut('fast');
};
var rhTriggerAjaxOnLoad = function(thisParent,fieldValue = ''){
$.ajax({
url: localizeSelect.ajax_url,
dataType: 'json',
delay: 250, // delay in ms while typing when to perform a AJAX search
data: {
action: 'inspiry_get_location_options', // AJAX action for admin-ajax.php
query: fieldValue,
// hideemptyfields: localizeSelect.hide_empty_locations,
// sortplpha: localizeSelect.sort_location,
},
beforeSend: loaderFadeIn(),
success: function (data) {
loaderFadeOut();
locationSuccessList(data,thisParent,true);
}
});
};
var rhTriggerAjaxOnScroll = function(thisParent,farmControl,fieldValue = ''){
var paged = 2;
farmControl.on('keyup', function (e) {
paged = 2;
fieldValue = $(this).val();
});
$('div.inspiry_ajax_location_field div.inner').on('scroll', function () {
var thisInner = $(this);
var thisInnerHeight = thisInner.innerHeight();
var getScrollIndex = thisInner.scrollTop() + thisInnerHeight;
if(getScrollIndex >= $(this)[0].scrollHeight) {
$.ajax({
url: localizeSelect.ajax_url,
dataType: 'json',
delay: 250, // delay in ms while typing when to perform a AJAX search
data: {
action: 'inspiry_get_location_options', // AJAX action for admin-ajax.php
query: fieldValue,
page: paged,
// hideemptyfields: localizeSelect.hide_empty_locations,
// sortplpha: localizeSelect.sort_location,
},
beforeSend: loaderFadeIn(),
success: function (data) {
loaderFadeOut();
if (!$.trim(data)){
$('.rh-location-ajax-loader').fadeTo( "fast" , 0);
}
paged++;
locationSuccessList(data, thisParent, false);
}
});
}
});
};
var inspiryAjaxSelect = function (parent, id) {
var farmControl = $(parent).find('.form-control');
var thisParent = $(id);
rhTriggerAjaxOnScroll(thisParent,farmControl);
rhTriggerAjaxOnLoad(thisParent);
farmControl.on('keyup', function (e) {
var fieldValue = $(this).val();
fieldValue = fieldValue.trim();
var wordcounts = jQuery.trim(fieldValue).length;
// rhTriggerAjaxLoadMore(thisParent,fieldValue);
$('.rh-location-ajax-loader').fadeTo( "fast" , 1);
if (wordcounts > 0) {
$.ajax({
url: localizeSelect.ajax_url,
dataType: 'json',
delay: 250, // delay in ms while typing when to perform a AJAX search
data: {
action: 'inspiry_get_location_options', // AJAX action for admin-ajax.php
query: fieldValue,
// hideemptyfields: localizeSelect.hide_empty_locations,
// sortplpha: localizeSelect.sort_location,
},
beforeSend: loaderFadeIn(),
success: function (data) {
loaderFadeOut();
thisParent.find('option').not(':selected, .none').remove().end();
// var options = [];
if (fieldValue && data) {
locationSuccessList(data,thisParent);
} else {
thisParent.find('option').not(':selected, .none').remove().end();
thisParent.selectpicker('refresh');
$(parent).find('ul.dropdown-menu li:first-of-type a').focus();
$(parent).find('input').focus();
}
},
});
// rhTriggerAjaxLoadMore(thisParent,fieldValue);
} else {
rhTriggerAjaxOnLoad(thisParent);
}
});
};
inspiryAjaxSelect('.inspiry_ajax_location_wrapper', 'select.inspiry_ajax_location_field');
});
// $(window).on('load',function () {
// $('.inspiry_select_picker_trigger').selectpicker('refresh');
// });
$(document).on('ready',function () {
$('.inspiry_show_on_doc_ready').show();
})
/*-----------------------------------------------------------------------------------*/
/* Favorite Properties
/*-----------------------------------------------------------------------------------*/
// Add to favorite.
var addToFavorites = function (e) {
e.preventDefault();
if ($(this).hasClass('require-login')) {
var loginBox = $('.rh_menu__user_profile');
var loginModel = loginBox.find('.rh_modal');
if (loginModel.length) {
$('.rh_login_modal_wrapper').css("display", "flex").hide().fadeIn(500);
} else {
window.location = $(this).data('login');
}
} else {
var favorite_link = $(this);
var span_favorite = $(this).parent().find('span.favorite-placeholder');
var propertyID = favorite_link.data('propertyid');
var ajax_url = ajaxurl;
if ( propertyID !== '' ) {
if(favorite_link.hasClass('user_logged_in')){
var add_to_favorite_options = {
type : 'post',
url : ajax_url,
data : {
action: 'add_to_favorite',
property_id : propertyID,
},
success: function(response) {
if('false' !== response) {
$(favorite_link).addClass('hide');
$(span_favorite).delay(200).removeClass('hide');
}
}
};
$.ajax(add_to_favorite_options);
} else {
var currentIDs = window.localStorage.getItem('inspiry_favorites');
if ( currentIDs ) {
window.localStorage.setItem('inspiry_favorites', currentIDs + ',' + propertyID);
} else {
window.localStorage.setItem('inspiry_favorites', propertyID);
}
$(favorite_link).addClass('hide');
$(span_favorite).delay(200).removeClass('hide');
}
}
}
};
$('body').on('click', 'a.add-to-favorite', addToFavorites);
var favorite_properties = window.localStorage.inspiry_favorites; // Get local favorite properties data.
// Display favorited button and favorite properties on favorite page.
if ( favorite_properties && ! $('body').hasClass( 'logged-in' ) ) {
// To display favorited button on page load.
var property_ids = favorite_properties.split(',');
property_ids.forEach(function(element,index){
var favorite_btn_wrap = $('.favorite-btn-' + element);
var favorite_link = favorite_btn_wrap.find('a.add-to-favorite');
var span_favorite = favorite_btn_wrap.find('span.favorite-placeholder');
$(favorite_link).addClass('hide');
$(span_favorite).delay(200).removeClass('hide');
});
// Display favorite properties on the favorites page.
var favorite_prop_page = $('.favorite_properties_ajax');
if(favorite_prop_page.length) {
var design_variation = 'classic';
if($('body').hasClass('design_modern')){
design_variation = 'modern';
}
var favorite_prop_options = {
type : 'post',
dataType : 'html',
url : ajaxurl,
data : {
action: 'display_favorite_properties',
prop_ids : favorite_properties.split(','),
design_variation
},
success: function(response) {
favorite_prop_page.html(response);
remove_from_favorite($('a.remove-from-favorite'));
}
};
$.ajax(favorite_prop_options);
}
}
// Migrate favorite properties from local to server.
if(favorite_properties && $('body').hasClass('logged-in')){
var migrate_prop_options = {
type : 'post',
url : ajaxurl,
data : {
action: 'inspiry_favorite_prop_migration',
prop_ids : favorite_properties.split(','),
},
success: function(response) {
if ( 'true' === response ) {
window.localStorage.removeItem('inspiry_favorites');
}
}
};
$.ajax(migrate_prop_options);
}
// Remove favorite properties.
remove_from_favorite($('a.remove-from-favorite'));
remove_from_favorite($('.favorite-placeholder.highlight__red'));
function remove_from_favorite(remove_button){
remove_button.on('click', function (event) {
event.preventDefault();
var $this = $(this);
var property_item = $this.closest( '.favorite-btn-wrap' );
if(!property_item.length) {
property_item = $this.closest('article');
}
if(!remove_button.hasClass('user_logged_in')){
var favorite_properties = window.localStorage.inspiry_favorites;
if(favorite_properties){
var prop_ids = favorite_properties.split(',');
var prop_ids = $.map(favorite_properties.split(','), function(value){
return parseInt(value);
});
const index = prop_ids.indexOf( $this.data('propertyid'));
if (index > -1) {
if($this.hasClass('highlight__red')){
var favorite_link = property_item.find('a.add-to-favorite');
var span_favorite = property_item.find('span.favorite-placeholder');
$(span_favorite).addClass('hide');
$(favorite_link).delay(200).removeClass('hide');
} else {
property_item.delay(200).remove();
}
prop_ids.splice(index, 1);
window.localStorage.setItem('inspiry_favorites', prop_ids);
}
}
return;
}
var close = $(this).find('i');
close.addClass('fa-spin');
var remove_favorite_request = $.ajax({
url: ajaxurl,
type: "POST",
data: {
property_id: $this.data('propertyid'),
action: "remove_from_favorites"
},
dataType: "json"
});
remove_favorite_request.done(function (response) {
close.removeClass('fa-spin');
if (response.success) {
if($this.hasClass('highlight__red')){
var favorite_link = property_item.find('a.add-to-favorite');
var span_favorite = property_item.find('span.favorite-placeholder');
$(span_favorite).addClass('hide');
$(favorite_link).delay(200).removeClass('hide');
} else {
property_item.delay(200).remove();
}
}
});
remove_favorite_request.fail(function (jqXHR, textStatus) {
});
});
}
/**
* Initializes the similar properties filters.
*
* @since 3.13
*/
const $similarPropertiesFiltersWrap = $('#similar-properties-filters-wrapper');
if ($similarPropertiesFiltersWrap.length) {
const $similarPropertiesFilters = $similarPropertiesFiltersWrap.find('a');
const $similarProperties = $('#similar-properties');
const similarProperties = $similarProperties.html();
// Check for localized similar properties data
if (typeof similarPropertiesData !== "undefined") {
const design = similarPropertiesData.design;
let $btn_class = 'rh_btn rh_btn--primary';
let $btn_class_current = 'rh_btn rh_btn--secondary';
if ('classic' === design) {
$btn_class = '';
$btn_class_current = 'current';
}
$similarPropertiesFiltersWrap.on('click', 'a', function (event) {
const self = $(this);
const propertyFilter = self.data('similar-properties-filter');
$similarPropertiesFilters.removeClass($btn_class_current).addClass($btn_class);
self.removeClass($btn_class).addClass($btn_class_current);
if ('recommended' === propertyFilter) {
$similarProperties.html(similarProperties);
} else {
$.ajax({
url: ajaxurl,
type: 'post',
dataType: 'html',
data: {
action: 'realhomes_filter_similar_properties',
property_id: similarPropertiesData.propertyId,
properties_per_page: similarPropertiesData.propertiesPerPage,
property_filter: propertyFilter,
design: design
},
success: function (response) {
$similarProperties.html(response);
}
});
}
event.preventDefault();
});
} else {
// Hide filters when no data available
$similarPropertiesFiltersWrap.hide();
}
}
})(jQuery);