// 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 );
Παίξτε Καζίνο Διαδικτύου στο Betriot Και Αναπτύξτε Την Εμπειρία Σας Λάθος! – 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
Tips and Tricks for Maximizing Your Winnings on Betriot Online Casino
Συμβουλές και Στρατégεματα για τη Μεγιστοποίηση των Κέρδων στο Betriot Online Casino στην Ελλάδα:
1. Διαχειρίστε το ποσό σας τα ναυαγία: Μην επιβάλlete σε εαυτό σας να παίζετε με ποσά που δεν μπορείτε να χάσετε.
2. Γνωρίστε τις παραπάνω των παιχνιδιών: Έχετε καλή γνώση των παιχνιδιών που παίζετε, για να ξέρετε τι προσδοκιάζετε.
3. Χρησιμοποιείτε τις προσφορές και τις επιδόσεις: Παρατηρείτε τις προσφορές και τις επιδόσεις που προσφέρονται bet riot από το Betriot Online Casino.
4. Διαχειρίστε την περίοδο παιχνιδιοπαίξης σας: Μην παίζετε πάντα και πάντα, αλλά διαχειρίστε την περίοδο παιχνιδιοπαίξης σας.
5. Έχετε στόχο να κερδίζετε, όχι να χάσετε: Έχετε στόχο να κερδίζετε να χάσετε, και μην παίζετε με την ιδέα να ανακτήσετε τα χαμένα σας.
The Ultimate Guide to Betriot’s Online Casino Games in Greece
«Το τελευταίο οδηγό των ηλεκτρονικών παιγνίων του Betriot στην Ελλάδα»: Μάθετε για τα καλύτερα ηλεκτρονικά παιγνία του Betriot, συμπεριλαμβανούμενης μιας εισαγωγής στην ιστορία του και των προηγουμένων του στον ελληνικό αγώνα. Δείτε τι συνδυασμό παιγνίων προσφέρει η Betriot και πώς μπορείτε να αναπτύξετε τη δική σας στραteγική για να παίξετε στα ρολιά, την ρουμπέτα, το πόκερ και την σλότ μαχηματισμό. Μάθετε τι κάνει τη Betriot διαφορετική από τις άλλες ελληνικές καταστήματα και πώς μπορείτε να αντλήσετε το πλέον από τη μερίδα σας με την χρήση των προσφορών και των βονούς της. Έχετε ερώτηση; Η Betriot διαθέτει μια εκπληκτική υποστήριξη πελατών 24/7 για να σας βοηθήσει όταν χρειαζόστε.
How to Make the Most of Betriot’s Online Casino Bonuses and Promotions
Για να κάνετε το πιο πολύ από τις εκκίνησης bonuses και promotions του Betriot’s Online Casino στην χώρα σας, εδώ βρίσκετε πέντε σημαντικές συμβουλές:
1. Δημιουργήστε ένα λογαριασμό στο Betriot’s Online Casino και απολαύστε το welcome bonus που σας προσφέρεται.
2. Συμμετάσχετε στις promotions περιοδικά προσφερόμενες από το Betriot’s Online Casino για να λαμβάνετε περισσότερες ευκαιρίες να κέρδιζετε.
3. Μείνετε πάντα ενημερωμένοι για τις τελευταίες εκκίνησης του Betriot’s Online Casino για να μην παρέχετε πιθανή πρόσφατη προσφορά.
4. Χρησιμοποιήστε τα bonus codes που παρέχονται για να ενημερωθείτε για τις προσφορές που σας αρμozoun περισσότερο.
5. Ακολουθήστε τις προϋποθέσεις και τις προϋποθέσεις των καθε προσφοράς για να βεβαιωθείτε ότι είστε συμμετεχόμενος σωστά και να λαμβάνετε τα πλειότερα όσα από τις εκκίνησης του Betriot’s Online Casino.
Exploring the Betriot Online Casino: A Comprehensive Review for Greek Players
Έχουμε τη χance να σας παρουσιάσουμε το Betriot Online Casino, ένα νέο περιβάλλον παιγνίων για τον αγώνα της τύχης που διαθέτει ένα πλήρες ελληνικό περιεχόμενο. Το Betriot Online Casino προσφέρει ένα είδικο περιεχόμενο για τον ελληνικό παίκτη, συμπεριλαμβανούμενης της δυνατότητας να παίζετε με ελληνικά τα παιχνίδια που θέλετε. Το κατάλογος των παιχνιδιών του Betriot Online Casino είναι ιδιαίτερα εντυπωσιακός, περιλαμβάνοντας πολλές επιλογές ρολικών παιχνιδιών, καρτών, παιγνίων με τυχερότητα και πολλά άλλα. Επιπλέον, το Betriot Online Casino προσφέρει ένα ασφαλές περιβάλλον παιγνίων, με ένα πλήρες ελέγχο της τυχερότητας και της ασφαλείας των στοιχείων σας. Τέλος, το Betriot Online Casino διαθέτει ένα εξαιρετικό διακριτικό προγράμματος πόντων, που σας επιτρέπει να συλλέξετε πόντους και να ανταλλάξετε τους πόντους σας με προϊόντα, δώρους και προσφορές πολύτιμες.
Ένας φίλος μου, Γιώργος 45 χρονών, είναι παιχνιδιοπαίκτης καζίνο από πολλά χρόνια. Παιχνίδια πολυαγωνιστικά είναι η αγάπη του και πάντα ήταν στη ζήτηση να βρει ένα καζίνο όπου να μπορεί να παίζει τα περισσότερα πολυαγωνιστικά παιχνίδια. Τέλος, βρήκε το Betriot Casino. Έχει παίξει πολλές στιγμές τώρα και είναι πολύ ευχαριστημένος. Ο υπολογιστής του λειτουργεί εξαιρετικά και τα παιχνίδια φορτωνούν γρήγορα. Το να έχει τόσα πολυαγωνιστικά παιχνίδια διαθέσιμα είναι το πολύ σημαντικότερο για τον Γιώργο, και το Betriot Casino το κάνει πολύ καλά!
Ένας άλλος φίλος μου, Μαρία 50 χρονών, είναι μια ενthousiast παίκτισσα γύρω από τα παιχνίδια του καζίνου. Έχει δοκιμάσει πολλά διαδικτυακά καζίνα, αλλά το Betriot Casino είναι το αγαπημένο της. Το σχεδιασμό είναι πολύ ωραίο και οι χρώματα είναι ευαισθητικά. Τα παιχνίδια είναι ευέλικτα και η υποστήριξη είναι πολύ άμεση και χρήσιμη. Η Μαρία λέει ότι το Betriot Casino της έδωσε την καλύτερη εμπειρία καζίνο που ποτέ έχει αισθανθεί και πολύ προτιμά να παίζει εκεί από κάθε ά any other online casino.
Συνολικά, το Betriot Casino είναι μια εξαιρετική επιλογή για οποιονδήποτε που θέλει να παίξει παιχνίδια καζίνο διαδικτύου. Με τόσα πολυαγωνιστικά παιχνίδια και μια υποστήριξη ιδιαίτερα χρήσιμη, είναι βέβαιο
Συχνές Ερωτήσεις για το Παίξτε Καζίνο Διαδικτύου στο Betriot
1. Τι είναι το Betriot; Betriot είναι ένα διαδικτυακό καζίνο που προσφέρει πολυάριθμα παιχνίδια και διασκέδαση.
2. Πώς μπορώ να παίξω στο Betriot; Μπορείτε να δημιουργήσετε ένα λογαριασμό και να παίξετε όλα τα παιχνίδια του Betriot με χρήση του υπολογιστή ή του κινητού σας.
3. Τι παιχνίδια παίζουν στο Betriot; Το Betriot προσφέρει ένα πλούσιο βιβλίο παιχνιδιών, συμπεριλαμβανομένων ρολικών παιχνιδιών, παιγνίων καρτών, παιχνιδιών τυχερών και περισσότερων.
4. Υπάρχει κάποια ειδική εκπαίδευση προκειμένου να παίξω στο Betriot; Δεν χρειάζεται καμία ειδική εκπαίδευση. Τα παιχνίδια του Betriot είναι εύκολα και ευχάριστα και μπορείτε να αρχίσετε να παίζετε αμέσως.
5. Τι κάνω αν χρειαστώ βοήθεια; Το Betriot παρέχει υποστήριξη 24/7. Μπορείτε να επικοινωνήσετε με την υποστήριξη μέσω του συντονιστή συζητήσεων ή της διεύθυνσης email τους.