// 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 );
Δοκιμάστε την εμπειρία του SGcasino: Παίξτε καζίνο στο διαδίκτυο – 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
Γνωρίστε την εμπειρία του SGcasino: Πώς να παίξετε καζίνο σε διαδίκτυο;
Γνωρίστε την εμπειρία του SGcasino με την επανάληψη των προτεινομένων παιχνιδιών καζίνο του στο διαδίκτυο. Το SGcasino σας προσφέρει ένα ανεπτυγμένο περιβάλλον παιχνιδιών με ένα εύκολο να χρησιμοποιηθεί περιβάλλον χρήσης. Μπορείτε να εγγραφείτε στο SGcasino γρήγορα και ασφαλές και να χολολογήσετε τις προτάσεις του καζίνου μετά την εγγραφή σας. Το SGcasino παρέχει επίσης πολλές επιλογές πληρωμής και ανάλογες επιλογές ανάπτυξης, επιτρέποντας στους χρήστες να επιλέξουν τη μέθοδο πληρωμής που τους αρέσει καλύτερα. Ένας από τους πιο σημαντικούς χαρακτήρες του SGcasino είναι η ασφάλεια και η αξιοπιστία, επειδή χρησιμοποιεί την τεχνολογία SSL για να προστατεύει τα στοιχεία σας. Επιπλέον, το SGcasino παρέχει επίσης υποστήριξη 24/7 μέσω ζωτικής συνομιλίας, ηλεκτρονικού ταχυδρομείου και φόρμας επικοινωνίας, για να βεβαιωθείτε ότι οι ερωτήσεις σας θα απαντηθούν ταχύτατα. Γνωρίστε την εμπειρία SGcasino και αρχίστε να παίζετε τώρα!
Τι λογαριασμός χρειάζεται για να παίξετε στο SGcasino;
Για να παίξετε στο SGcasino, χρειάζεστε να δημιουργήσετε ένα λογαριασμό. Αυτό μπορείτε να το κάνετε εύκολα με την εγγραφή σας στο ιστότοπο. Το καταχώρηση είναι γρatis και δεν χρειάζεται καμία ειδική λογιστική εγγραφή. Μόνο ακολουθήστε τις οδηγίες στην ιστοσελίδα και συμπληρώστε τα απαιτούμενα πεδία με τα σωστά σας στοιχεία. Έπειτα, μπορείτε να είστε έτοιμοι να παίξετε τους προτιμώμενους σας περίπλοκα του SGcasino!
Πώς να εγγραφείτε στο SGcasino;
Θέλετε να εγγραφείτε στο SGcasino; ακολουθήστε αυτά τα βήματα:1. Επισκεφθείτε την ιστοσελίδα SGcasino.
2. Πατήστε το κουμπί “Δημιουργία Λογαριασμού” στην αρχική σελίδα.
3. Συμπληρώστε τα απαιτούμενα στοιχεία σας, όπως το όνομα σας, το ψευδώνυμο και τη διεύθυνση ηλεκτρονική σας ταχυδρομική σας.
4. Επιβεβαιώστε την ηλεκτρονική σας ταχυδρομική διεύθυνση μέσω του ελέγχου που θα σας στείλει η SGcasino.
5. Προσθέστε ένα συνωλικό σας στοιχείο πληροφοριών για να επαληθευθεί η ηλικία σας.
6. Προσθέστε ένα τρόπο πληρωμής για να μπορέσετε να ρυθμίσετε το λογαριασμό σας.
7. Έχετε επιτυχής εγγραφή στο SGcasino; να σας καλωσορίσουμε!
Τι παιχνídιδα καζίνο είναι διαθέσιμα στο SGcasino;
Τι παιχνídιδα καζίνο είναι διαθέσιμα στο SGcasino; Αναζητάτε για παιχνídιδα ρολικά, παιχνídιδα καρτών, παιχνídιδα τρικερών και πολλά άλλα. Ελέγξτε την πλήρη λίστα με τις προσφορές του SGcasino. Το SGcasino σας προσφέρει ένα πλούσιο πεδί επιλογής με παιχνídιδα από τους καλύτερους παροχείς. Μπορείτε να δοκιμάσετε την τύχη σας σε όλες τις κατηγορίες παιχνιδιών καζίνο. Η ιστοσελίδα σας παρέχει την ευκαιρία να παίξετε σε όλες τις επιλογές σας, από τη ρολική μέχρι την παιχνίδα τρικερών. Παίξτε τώρα και αναζητήστε την προσφορά που σας αρέσει περισσότερο.
Πώς λειτουργούν οι βοηθοί παίκτων στο SGcasino;
Οι βοηθοί παίκτων στο SGcasino είναι προγράμματα υπολογιστικού συστήματος που σας βοηθούν να παίξετε τα περιεχόμενα του casino.
Είναι διαθέσιμοι 24/7 για να βοηθήσουν στην ανάπτυξη σας στρατηγικές παιχνιδιού και να βελτιώσουν την εμπειρία σας.
Μπορούν να σας δείξουν τις πιο δημοφιλείς παιχνίδια, να σας βοηθήσουν να βρείτε νέα παιχνίδια και να σας παρέχουν συστηματικά συμβουλές.
Επιπλέον, μπορούν να σας παρέχουν πληροφορίες σχετικά με τις παριστάσεις και τις προκλήσεις του casino.
Οι βοηθοί παίκτων στο SGcasino είναι ιδιαίτερα χρήσιμοι για τους νέους παίκτες, επειδή μπορούν να σας βοηθήσουν να καταλάβετε το λειτουργικό του casino.
Είναι εργαλεία πολύ χρήσιμα και για τους περισσότερους εργαζόμενους παίκτες, επειδή μπορούν να σας βοηθήσουν να αναπτύξετε πιο αποτελεσματικές στρατηγικές.
Σε γενικές γραμμές, οι βοηθοί παίκτων στο SGcasino είναι υπολογιστικά σύστημα που σας βοηθούν να παίξετε τα παιχνίδια του casino με περισσότερη αποτελεσματικότητα και να έχετε περισσότερη διασκέδαση.
Τι είναι τα προνότιμα που προσφέρει το SGcasino;
Το SGcasino προσφέρει ένα εκπληκτικό παιχνίδι και πολλά προνότιμα στους παίκτες της Ελλάδας. Ακολουθούν οι βασικότερες προσφορές:
Μεγάλα κατρακύλια και κύκλοι επιστροφής.
Πολυμεσικά παιχνίδια από γνωστούς εργοδότες.
Υψηλές επιβλεπόμενες πληρωμές.
Εύκολη χρήση και εργασία στην ιστοσελίδα.
Πρόγραμμα πιστοποίησης με ποικιλές επιρροές.
Εξαιρετική υποστήριξη πελατών 24/7.
Διαθέσιμος στον ιστότοπο και στις κινητές συσκευές.
Όνομα παίκτη: Γιώργος Δοκιμάστε την εμπειρία του SGcasino: Παίξτε καζίνο στο διαδίκτυο. Έχω παίξει σε πολλά καζίνα στο διαδίκτυο, αλλά το SGcasino είναι πάνω από όλα. Η ιστοσελίδα είναι εύκολη να χρησιμοποιηθεί και η επιλογή περιεχομένου είναι υπέροχη. Το παιχνίδι του ρολικού μου αρέσει πολύ και οι επικοινωνίες είναι γρήγορες και φιλικές. Συνολικά, μια εξαιρετική εμπειρία καζίνο!
Όνομα παίκτη: Μαρία Δοκιμάστε την εμπειρία του SGcasino: Παίξτε καζίνο στο διαδίκτυο. Έχω να πω ότι είμαι πολύ ευχαριστημένη με την εμπειρία του SGcasino. Το διαθέσιμο παιχνίδι είναι περίεργο και η υπηρεσία ποδοσφαίρισης είναι πολύ καλή. Το καλύτερο όμως είναι ότι οι νίκες μου είναι γρήγορα στα λακκώματά μου. Συνολικά, μια εξαιρετική ιστοσελίδα καζίνο!
Δοκιμάστε την εμπειρία του SGcasino: Παίξτε καζίνο στο διαδίκτυο
Πάρετε το πλήρες καζίνο sg casino εμπειρία από το σπιτικό σας.
Τι χρειάζεται; Μόνο ένα λογαριασμό και σύνδεση στο διαδίκτυο.
Παίζετε το σπιλιό της τύχης σας στα πιο δημοφιλή παιχνίδια.
Εγγραφείτε σήμερα και απολαύστε προσφορές ειδικές.