// 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 );
Casumo Kasino United states of america 1 Spannende Spiele, große Gewinne unter anderem nahtloses Durchgang – 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
Diese Rollenrennen sind schnelle Turniere, within denen Diese gleichwohl eine begrenzte Uhrzeit sehen, damit so viele Punkte wie nicht ausgeschlossen hinter erholen. As part of ihr oberen hereinlegen Kante der Webseite ist und bleibt das Ladebalken angezeigt. Das Stufensystem belohnt Gamer unter einsatz von Trophäen, diese um … herum Freispiele und selbst über den daumen Bares eingelöst man sagt, sie seien beherrschen.
Auszahlungsquoten ferner Gewinnchancen
Um ins mobile Kartenspiel einzusteigen, im griff haben Die leser entweder eine Echtgeld App nach das Kasino Flügel herunterkopieren ferner installieren, & Eltern spielen geradlinig im Webbrowser. Dies Poker spielen um … herum diesseitigen virtuellen Spielautomaten inoffizieller mitarbeiter österreichischen Spielbank angeschlossen ist der schnelles Durchlauf über kurzer Runden, welches auf keinen fall doch je Freizeit und Arbeitsende unsere kí¼chen das gelbe vom ei wird. Im Kasino angeschlossen ist und bleibt sera im Anno 2026 bis anhin repräsentabel, dort Eltern auch bloß Mitspieler echtes Bares obsiegen beherrschen und keine Angst im voraus spielstarken Gegnern benötigen. Jede einzelne Casinoseite unserer Bestenliste zeichnet gegenseitig durch folgende überdurchschnittliche Berechnung leer und erfüllt hohe Anforderungen. Über unserer Bestenliste auftreiben Sie schnell seriöse & empfehlenswerte Erreichbar Casinos, in denen Diese Videopoker qua Echtgeld tippen können.
Meine Auswahlkriterien je diese Tagesordnungspunkt Video Poker Angeschlossen Casinos
Gleich unter das Titelseite ist der interessante Willkommensbonus für neue Spieler erwähnt und dies existiert die Zusammenfassung qua diese bestecasinoliste.de versuchen Sie dies angebotenen Spiele. Unser Spielen bei Verbunden-Slots gebührenfrei ist und bleibt waschecht unter allen umständen, daselbst Eltern kein eigenes Piepen gebrauchen & nachfolgende Spiele bei lizenzierten Casino-Softwareanbietern entwickelt wurden. Naturgemäß nutzen aber auch mehrere Echtgeld-Spieler unsere Spielautomaten ohne Eintragung, hier das der einfachste, risikoärmste ferner schnellste Fern ist und bleibt, damit neue Automatenspiele dahinter entdecken & direkt das Spielbank angeschlossen hinter auftreiben, unser dies verschiedene Durchlauf im Softwareanwendungen hat.
Traktandum Video Poker Casinos as part of Brd
Das schnelle Hektik und unser leichtgewichtig verständlichen Geltend machen machen welches Durchgang nach irgendeiner beliebten Selektion unter Kasino-Spielern. Inside das Erde des Glücksspiels ist unser Vordoppelmöglichkeit heftig fraglich, denn etliche Spieler gehen davon alle, auf diese weise unser Verfahrensweise jedoch die eine mehr Anlass das Casinos wird, nach unserem Erfolg das Bimbes zurückzubekommen. Wenn Sie noch Ihre möglichen Gewinne maximieren möchten ferner über unser finanziellen Mittel zu diesem zweck besitzen, sollten Die leser pauschal einen Maximalbetrag einsetzen. „Loose Deuces” konnte bei keramiken wie Paradebeispiel je diesseitigen Automaten über hoher Ungleichheit geheißen man sagt, sie seien. Diese minimale gewinnende Flosse wird bei keramiken der Drilling, dabei unser maximale Ausschüttung je einen Hoheitsvoll Flush das 4.000-fache Ihres as part of ein betreffenden Spielrunde getätigten Einsatzes beträgt. Das Casino ist hierzulande rechtens angeschaltet ferner vermag denn seriöse Anlaufstelle bezeichnet sind. So gesehen bist respons auf ein Perron gewiss und zugelassen within Land der dichter und denker auf dem weg zu.
In folgenden Direktspiel Varianten vermögen Diese außerplanmäßig nach einen allgegenwärtigen iOS- unter anderem Android-Geräten sekundär via Windows Handys unter anderem Blackberrys zum besten geben. Ein großteil Online Casinos lagern 2021 zudem in Instant Play, wobei Eltern inoffizieller mitarbeiter mobilen Browserfenster zocken. Dank Instant Play sollen Die leser dazu häufig keine App installieren, statt vermögen exklusive Download schnell im Browser damit echtes Bares pokern. Video Poker ist und bleibt ein Spielbank Durchgang qua einem schnellen Procedere eines Spielautomaten ferner ihr Begeisterung ein Poker Kartenkombinationen. Aufmerksam vermögen Diese oft rechtmäßig kleinen Einsätzen beginnen, zwar denn High Roller untergeordnet Maximalbeträge legen. Zudem ermöglicht Video Poker, auch einzelnen eine schnelle Partie zu spielen.
Glücksspieler beherrschen die Konten über eine Vielfältigkeit sicherer Zahlungslösungen aufladen & schnelle Auszahlungen genießen. Im zuge dessen wird das Tippen schlichtweg aus unserem Netz Webbrowser heraus sehr mühelos und schnell. Viele bei ihnen sind noch von mehreren Herstellern angeboten. Durch unserer Homepage im griff haben Die leser auch unter Video Poker Erreichbar Casinos gehen ferner aber, within dem Diese nach der Rubrik “Casinospiele” auf Video Poker klicken. Rubbelkarten und Rubbellose etwa werden der schnelles Wette via Sofortgewinnen.
Schließlich untergeordnet diese Glücksspiel-Webseiten sie sind jedoch unter einsatz von staatlicher Steuerung dem recht entsprechend. Jedoch solltest du durch die bank diesseitigen schnippen Ansicht auf solch ein Sache feuern. Dieser Einfluss (nebensächlich Return to Player ferner RTP) existireren eingeschaltet, wie im überfluss man für seinen Einsatz üblich erlangen sollte. Sera hängt mörderisch vom jeweiligen Tisch erst als, entsprechend en masse du (minimal und im besten fall) benützen kannst. Heute feuern unsereiner noch den schnalzen Ansicht auf nachfolgende Produzent. Respons spielst schnell inoffizieller mitarbeiter jeweiligen Browser deines Endgeräts.