// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Mostbet Cashback Necə İstifadə Edilir? Yeni Üzvlər Üçün Təlimat – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Mostbet Cashback Necə İstifadə Edilir? Yeni Üzvlər Üçün Təlimat
Mostbet cashback necə istifadə edilir sualının cavabı olduqca sadədir. Yeni üzvlər üçün Mostbet, itkilərin müəyyən faizi geri qaytarılması ilə xüsusi cashback təklifi təqdim edir. Bu vasitə ilə istifadəçilər, mərc etdikləri zaman itirdikləri məbləğin bir qismini geri almaq imkanı əldə edirlər. Cashback proqramı həm yeni oyunçuların riskini azaldır, həm də oyuna əlavə motivasiya qatır. Bu məqalədə Mostbet cashback proqramının necə işlədiyini, necə aktivləşdirildiyini və ən effektiv şəkildə necə istifadə olunduğunu addım-addım izah edəcəyik.
Mostbet Cashback: Əsas Prinsiplər və Faydalar
Mostbet cashback proqramı, istifadəçilərin müəyyən dövr ərzində mərc zamanı itkisi olduqda, müəyyən faizdə pulun geri qaytarılmasıdır. Bu proqram yeni üzvləri cəlb etmək və onları platformada saxlamaq məqsədi daşıyır. Cashback məbləği adətən ümumi itkilərin 5% – 10%-i arasında dəyişir ki, bu da istifadəçiyə əlavə bonus kimi təqdim olunur. Faydaları arasında risk azalması, balansın artırılması və daha çox mərc etmək üçün motivasiyanın yaranması daxildir. Yenə də, cashback proqramının şərtlərini tam anlamanız çox önəmlidir, çünki bəzən bəzi mərc tipləri bu təklifdən kənarda qala bilər.
Yeni Üzvlər Üçün Cashback Aktivləşdirmə Prosesi
Mostbet platformasında cashback istifadə etmək üçün aşağıdakı mərhələlər izlənilir:
Qeydiyyat: İlk addım Mostbet saytına yeni üzv kimi qeydiyyatdan keçməkdir.
Hesabın Doğrulanması: Heç bir problem olmaması üçün hesablama vasitələri ilə hesabınızı təsdiqləyin.
Bonusların Seçilməsi: Cashback təklifinin aktiv olması və istifadə şərtlərini oxuyaraq qəbul etmək.
Mərc Etmək: Seçilmiş idman növlərində və oyunlarda mərc etməyə başlamaq.
Cashback Almaq: İtkilərinizin müəyyən hissəsinin geri ödənilməsi üçün proqramın qaydalarına əməl etmək.
Bu addımları izləyərək yeni üzvlər asanlıqla cashback təklifindən yararlana bilərlər.
Mostbet Cashback Şərtləri və Məhdudiyyətləri
Cashback proqramından tam fayda götürmək üçün müəyyən şərtləri diqqətlə oxumaq lazımdır. Ən əsas məhdudiyyətə misal olaraq, cashback faizi və mərc tiplərinin məhdudlaşdırılması göstərilə bilər. Misal üçün, bəzi canlı mərc növləri və xüsusi promosyonlar cashback proqramına daxil deyil. Həmçinin, cashback məbləği bir həftəlik və ya aylıq dövrlər üzrə hesablanır və istifadəçi balansına əlavə olunur. Digər vacib şərt isə müəyyən mərc məbləğinin qalib gəlmədən xərclənməsi ola bilər ki, bu da proqramın düzgün işləməsini təmin edir. Bundan əlavə, istifadəçilərə cashback pulu ilə bəzi məhdudiyyətlər altında mərc etməyə icazə verilir mostbet az.
Mostbet Cashback Proqramından Maksimum Dərəcədə İstifadə Etmək
Cashback proqramından maksimum yararlanmaq üçün bir neçə tövsiyə verə bilərik. Birincisi, mərc strategiyanızı cashback proqramına uyğunlaşdırın – itkilərinizi minimuma endirmək üçün ağıllı və analizli mərc edin. İkincisi, bonusun şərtlərini daima izləyin, çünki təklif tarixləri və faizlər dəyişə bilər. Üçüncüsü, ilk günlərdə çoxlu riskli mərc etməkdən çəkinin və balansınızı qoruyun. Dördüncüsü, cashback faizlərinin ən yüksək olduğu kampaniyalarda iştirak edin – Mostbet bu təklifləri müntəzəm yeniləyir. Ən əsası, proqramdan əldə olunan cashback vəsaitlərini necə xərcləyəcəyinizi və ya çıxaracağınızı planlaşdırın, çünki bəzi vəsaitlər bonus kimi əlavə olunaraq mərc edilə bilər.
Mostbet Cashback və Yeni İstifadəçi Təcrübəsi
Mostbet cashback yeni istifadəçilər üçün sadəcə maliyyə dəstəyi deyil, həmçinin platformada daha rahat və sərfəli mərc təcrübəsi təmin edir. Bu proqram yeniləri üçün risklərin azaldılması və oyunda qalma şansının artırılması deməkdir. Cashback sayəsində istifadəçilər itkilərini qorumaqla daha cəsarətlə yeni mərc növlərini sınaya bilirlər. Bundan başqa, Mostbet istifadəçilərə müştəri dəstəyi və FAQ modulu ilə cashback haqqında hər hansı suallarını rahatlıqla cavablandırır. Cashback proqramı yeni oyunçular arasında Mostbet-in populyarlığını artıran əsas amillərdən biridir.
Nəticə
Mostbet cashback proqramı yeni üzvlər üçün böyük bir fürsət vəd edir. Sadəcə qeydiyyatdan keçərək və teklifin şərtlərini diqqətlə oxuyaraq, istifadəçilər itkilərinin bir hissəsini geri ala bilərlər. Bu proqram yeni oyunçulara riskləri azaltmaq, daha çox öyrənmək və mərc etmək şansı verən əla vasitədir. Şərtləri anlamaq və strategiyanızı ona uyğunlaşdırmaq cashback-dən maksimum fayda götürmək üçün vacibdir. Mostbet, daim bonus və cashback kampaniyalarını yeniləyərək istifadəçi təcrübəsini artırır. Yekun olaraq, yeni üzvlərin bu proqramdan istifadə etməsi onların oyun heyecanını və qazanc şansını artırar.
Tez-tez Verilən Suallar (FAQ)
1. Mostbet cashback ilk üzvlər üçün necə aktivləşdirilir?
Qeydiyyat və hesab doğrulmasından sonra cashback təklifini qəbul edərək avtomatik aktivləşdirilir.
2. Cashback faizi nə qədərdir?
Adətən cashback faizi 5-10% arası dəyişir, kampaniyalara bağlı olaraq fərqli ola bilər.
3. Cashback məbləği necə hesablanır?
Ümumi itkilərin müəyyən faizi əsasında hesablansa da, bəzi mərc növləri proqramdan xaric edilə bilər.
4. Cashback ilə qazanılan vəsaitləri necə istifadə etmək olar?
Bu vəsaitlər bonus kimi hesabınıza əlavə olunur və müəyyən şərtlərlə yenidən mərc edilə bilər.
5. Cashback proqramının müddəti nə qədər davam edir?
Mostbet cashback proqramları adətən aylıq və ya həftəlik əsasda işləyir, kampaniya müddətləri dəyişkən ola bilər.