HEX
Server: Apache/2.4.65 (Debian)
System: Linux 88f31f35b0b8 6.1.0-38-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.147-1 (2025-08-02) x86_64
User: www-data (33)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/advanced-ads-pro/src/js/front/cache-busting/utils.js
/* eslint-disable */
import jQuery from 'jquery';

export const Utils = {
	debug:
		window.location &&
		window.location.hash &&
		window.location.hash.indexOf('#debug=true') !== -1,

	// Loop over each item in an array-like value.
	each: function (arr, fn, _this) {
		var i,
			len = (arr && arr.length) || 0;
		for (i = 0; i < len; i++) {
			fn.call(_this, arr[i], i);
		}
	},
	// Loop over each key/value pair in a hash.
	each_key: function (obj, fn, _this) {
		if ('object' === typeof obj) {
			var key;
			for (key in obj) {
				if (obj.hasOwnProperty(key)) {
					fn.call(_this, key, obj[key]);
				}
			}
		}
	},

	/**
	 * Log messages to the browser console.
	 */
	log: function () {
		if (this.debug && this.isset(window.console)) {
			var args = Array.prototype.slice.call(arguments);
			args.unshift('Advanced Ads CB:');
			window.console.log.apply(window.console, args);
		}
	},

	/**
	 * Log cache-busting arrays (AJAX and passive cb).
	 */
	print_debug_arrays: function () {
		if (advanced_ads_pro.iterations === 0) {
			// Available when passive cb is enabled for all ads/groups which are not delivered through a placement.
			this.log('passive_ads\n', window.advads_passive_ads);
			this.log('passive_groups\n', window.advads_passive_groups);

			this.log('passive_placements\n', window.advads_passive_placements);
			this.log('ajax_queries\n', window.advads_ajax_queries);

			this.log(
				window.Advads_passive_cb_Conditions.VISITOR_INFO_COOKIE_NAME +
					'\n',
				window.Advads_passive_cb_Conditions.get_stored_info()
			);
		}
	},

	isset: function (str) {
		return typeof str !== 'undefined';
	},

	/**
	 * Check if nested object key exists
	 *
	 * @param {obj}
	 * @params {str} level1, .. levelN
	 * @return {bool} true on success false on failure
	 */
	isset_nested: function (obj) {
		var argsLen = arguments.length;
		for (var i = 1; i < argsLen; i++) {
			if (!obj || !obj.hasOwnProperty(arguments[i])) {
				return false;
			}
			obj = obj[arguments[i]];
		}
		return true;
	},
	is_numeric: function (n) {
		return !isNaN(parseFloat(n)) && isFinite(n);
	},
	// generate a random number between min and max (inclide min and max)
	get_random_number: function (min, max) {
		var rand = min - 0.5 + Math.random() * (max - min + 1);
		return Math.round(rand);
	},

	/**
	 * Get random element by weight
	 *
	 * @param {object} weights e.g. {'A' => 2, 'B' => 3, 'C' => 5}
	 * @param {string} skip to skip, e.g. 'A'
	 * @source applied with fix for order http://stackoverflow.com/a/11872928/904614
	 */
	get_random_el_by_weight: function (weights, skip) {
		var max = 0,
			rand;
		skip = typeof skip !== 'undefined' ? skip : false;

		if (typeof weights === 'object') {
			for (var el in weights) {
				if (el !== skip && weights.hasOwnProperty(el)) {
					max += parseInt(weights[el]) || 0;
				}
			}

			if (max < 1) {
				return null;
			}

			rand = advads_pro_utils.get_random_number(1, max);

			for (var el in weights) {
				if (el !== skip && weights.hasOwnProperty(el)) {
					rand -= weights[el];
					if (rand <= 0) {
						return el;
					}
				}
			}
		}
	},

	/**
	 * A 'polyfill' of the native 'bind' function.
	 *
	 * @param {function} func
	 * @param {obj} context
	 */
	bind: function (func, context) {
		return function () {
			return func.apply(context, arguments);
		};
	},

	/**
	 * Shuffle array (knuthfisheryates).
	 * http://stackoverflow.com/a/2450976/1037948
	 *
	 * @param {array} arr
	 * @return {array} arr
	 */
	shuffle_array: function (arr) {
		var temp,
			j,
			i = arr.length;
		if (!i) {
			return arr;
		}
		while (--i) {
			j = ~~(Math.random() * (i + 1));
			temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}

		return arr;
	},

	/**
	 * Check if the selector of the Custom position placement exists.
	 *
	 * @param {array} params Placement options.
	 * @return bool
	 */
	selector_exists: function (params) {
		var cp_target =
			!params.inject_by || params.inject_by === 'pro_custom_element'
				? 'pro_custom_element'
				: 'container_id';
		var el = params[cp_target];
		if (!el) {
			// Not Custom Position placement.
			return true;
		}

		var $el = jQuery(el);

		if (!$el.length) {
			advads_pro_utils.log('selector does not exist', el);
			return false;
		}
		if (
			!advanced_ads_pro_ajax_object.moveintohidden &&
			!$el.filter(':visible').length
		) {
			advads_pro_utils.log('selector is hidden', el);
			return false;
		}
		return true;
	},

	/**
	 * Converts the number in degrees to the radians.
	 */
	deg2rad: function (deg) {
		return (deg * Math.PI) / 180;
	},

	/**
	 * Computes the distance between the coordinates and returns the result.
	 */
	calculate_distance: function (lat1, lon1, lat2, lon2, unit) {
		unit = unit || 'km';
		lat1 = this.deg2rad(lat1);
		lon1 = this.deg2rad(lon1);
		lat2 = this.deg2rad(lat2);
		lon2 = this.deg2rad(lon2);

		const dLon = lon2 - lon1;
		a =
			Math.pow(Math.cos(lat2) * Math.sin(dLon), 2) +
			Math.pow(
				Math.cos(lat1) * Math.sin(lat2) -
					Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon),
				2
			);
		b =
			Math.sin(lat1) * Math.sin(lat2) +
			Math.cos(lat1) * Math.cos(lat2) * Math.cos(dLon);

		const rad = Math.atan2(Math.sqrt(a), b);
		if (unit === 'mi') {
			return rad * 3958.755865744;
		} else {
			return rad * 6371.0;
		}
	},

	/**
	 * Extract cookie data from a stringified cookie.
	 *
	 * @param {string} cookie {
	 *     A stringified cookie.
	 *
	 *     @type {string} data Cookie data.
	 *     @type {string} expire Expiration time.
	 * }
	 * @return {mixed} The data field on success, original stringified cookie on error.
	 */
	extract_cookie_data(cookie) {
		try {
			var cookie_obj = JSON.parse(cookie);
		} catch (e) {
			return cookie;
		}

		if (typeof cookie_obj !== 'object') {
			return cookie;
		}

		return cookie_obj.data;
	},
};

export const UtilsCompat = () => {
	window.advads_pro_utils = Utils;
};