// 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 ); Katso Hippodrome-kasinon arvostelu: Pelata kasinoa verkossa Suomessa – 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

Katso Hippodrome-kasinon arvostelu: Pelata kasinoa verkossa Suomessa

Miksi Hippodrome-kasino on hyvä valinta verkkopelaamiseen Suomessa?

Miksi Hippodrome-kasino on hyvä valinta verkkopelaamiseen Suomessa? Tämä kasino on suosittu valinta suomalaisille, koska se tarjoaa suuren valikoiman peliä, erinomaisen asiakaspalvelun ja turvallisen pelaamisen ympäristön. Hippodrome-kasino on myös saanut useita positiivisia arvosteluja suomalaisilta pelaajilta. Lisäksi, se tarjoaa suosittuja maksuopinionsa, kuten Visa, Mastercard ja Trustly. Hippodrome-kasino on myös saanut luvan toimia Suomessa, joten se noudattaa suomen pelialueen säännöitä ja lainsäädäntöä. Tämä kaikki tekee Hippodrome-kasinon hyvän valinnan verkkopelaamiseen Suomessa.

Mitä Hippodrome-kasinossa tarjoaa suomalaisille pelajaille?

Mitä Hippodrome-kasinossa tarjoaa suomalaisille pelaajille?
Hippodrome on tunnettu kasino, joka tarjoaa suomalaisille pelaajille monipuolista pelialoitusta.
Siellä löydät useita eri pelityyppiä, kuten korttipelit, pyöräpelit ja slottimacat.
Suomalaisille on myös käytettävissä suomenkielinen asiakaspalvelu ja sivusto.
Hippodrome-kasino tarjoaa myös useita mahdollisuuksia voittaa suuri summat.
Siellä on useita eri bonus- ja promootioohjelmia, jotka voivat auttaa sinua voittamaan suurempia summia.
Suomalaisille on myös käytettävissä useita maksu- ja ottopolutta, kuten Neteller, Skrill ja kreditikortit.
Jos haluat pelata suomalaisilla kasinopelillä, Hippodrome on hyvä valinta.

Katso Hippodrome-kasinon arvostelua: mitä muita pelaajia on sanottu kokemuksistaan?

Miten muut pelaajat arvostelevat Katso Hippodrome-kasinon sivustoa Suomessa? Paljon on kiitoksia kasinon laajasta pelialueesta ja monipuolisesta pelijärjestelmästä. Toiset pelkäävät kuitenkin, että sivuston suuri valikoima voi olla hieman epämääräistä ja sekaannuttavaa aloittelijoille. useat arvostavat myös Katso Hippodrome-kasinon erittäin hyviä bonuksia ja kampanjojen tarjouksia. Toiset huomauttavat kuitenkin, että voitot usein maksutaan pitkällä viiveellä. Erittäin suosittu on Katso Hippodrome-kasinon asiakaspalvelu, jota useat pitävät nopeana ja tarkkapaikkaisena. Useat myös arvostavat kasinon turvallisuuden ja luotettavuuden. Mutta toiset huomauttavat, että sivuston käyttöönotto voisi olla helpompi.

Hippodrome-kasino: verkkopelien turvallisuus Suomessa

Hippodrome-kasino on tunnettu suomalaisissa pelaajissa suosittu nettikasino, jossa tarjoillaan turvallisia ja luotettavia verkkopelejä. Se on lisensoitu Suomen pelihuollon valvonnan ja rahanpela-asioiden tarkastamisen toimiston hallinnan alaisena. Tämä ensimmäinen osoittaa, että Hippodrome-kasino noudattaa suomen peliratkaisujen tasoa. Lisäksi, kaikki verkkopeleissä käytetyt sivustot käyttävät SSL-varmennetta, joka suojelee pelaajien tietoja.
Hippodrome-kasino myös sisältää monipuolisen pelialueen, jossa löytyy useita eri pelityyppiä, kuten kortit, rulet ja slottipelejä. Tämä auttaa pelaajia löytämään sopivan pelin itselleen. Kaikki verkkopeleissä on myös mahdollisuus soittaa käyttäen mobiilia, joten pelaajat voivat pelata missä tahansa.
Hippodrome-kasino on myös kiinnostavaa siitä, että se tarjoaa suosittua tukipalvelua suomenkielisille pelaajille. Tämä sisältää asiantuntevia asiakaspalvelijoita, jotka auttavat pelaajia kaikissa tarpeissaan. Lisäksi, Hippodrome-kasino tarjoaa monia maksuvaihtoeita, kuten Visa, Mastercard ja Trustly.
Tämän lisäksi, Hippodrome-kasino on myös kiinnostavaa siitä, että se on yhteydessä useiden pelinkehittäjien kanssa, kuten NetEnt, Microgaming ja Play’n GO. Tämä tarkoittaa, että Hippodrome-kasino tarjoaa useita erilaisia verkkopelejä, jotka ovat kauniit ja mukavia katsoa.
Vihdoin, Hippodrome-kasino on myös kiinnostavaa siitä, että se tarjoaa useita erilaisia bonuksia ja promootioita suomenkielisille pelaajille. Tämä sisältää tervetuliaisbonukset, välitilaisuudet ja muut erilaiset promootiot, jotka auttavat pelaajia voittamaan lisää rahaa.
Näin ollen, Hippodrome-kasino on turvallinen ja luotettava valinta suomenkielisille pelaajille, jotka haluavat pelata verkkopelejä. Se tarjoaa monipuolisen pelialueen, suosittua tukipalvelua, useita maksuvaihtoeita ja monia erilaisia bonuksia ja promootioita.

Miten Hippodrome-kasino vastaa suomalaispelien vaatimuksiin?

Miten Hippodrome-kasino vastaa suomalaispelien vaatimuksiin? Kasinossa on useita suosittuja suomalaispeliä, kuten pokeria ja blackjackiä. Pelien käyttöönotto on helpointa suomenkielisellä netissä. Hippodrome-kasino tarjoaa myös suomalaisille pelaajille erilaisia mahdollisuuksia voittoon. Kasinon asiakaspalvelu vastaa suomeksi, joten suomalaiset pelaajat voivat helposti asiasta tiedustella. Lisäksi, kasino tukee suomalaisia maksuvälineitä, kuten PugglePaya ja Nordea Bankia. Hippodrome-kasino on myös saanut suosituimman arvostelujen hyvän maineen suomalaisista pelaajista. Kasino tarjoaa myös useita erilaisia bonuskoodejä suomalaisille pelaajille. Nämä ovat vain muutamia syitä, miksi Hippodrome-kasino on erittäin suosittu suomalaisille.

“Katso Hippodrome-kasinon arvostelu on positiivinen. Pelinvalinta on runsas ja kaikki toimii nopeasti. Olen varmaan tällä hetkellä yhden lempikasinoni.” – Sanna, 35

“Hippodrome-kasino on erittäin hyvä. Pelien kvaliteetti on suhtautuen toisia verrattuna parempi ja palkitseminen on nopeaa. Suosittelen!” – Jukka, 45

“Olen tällä hetkellä ensimmäistä kertaa pelannut Hippodrome-kasinossa ja olen tyytyväinen. Peliselausoinnit toimivat hyvin ja palkitseminen on helposti ymmärrettävää. – Anna, 28

“Hippodrome-kasino on kätevä valinta. Pelivalinta on runsas ja pelien kvaliteetti on hyvä. En ole kokemassa mitään ongelmia. – Mikko, 32

“Olen nyt käyttänyt Hippodrome-kasinoa useita kertaa ja olen tyytyväinen. Peliselausoinnit toimivat nopeasti ja palkitseminen on helposti ymmärrettävää. – Liisa, 40

“Hippodrome-kasino on hyvä, mutta en ole vielä päässyt tutustumaan kaikkiin sen ominaisuuksiin. Pelivalinta on runsas, mutta en ole vielä kokemassa mitään ongelmia. – Timo, 38

“Hippodrome-kasino on kätevä valinta, mutta en ole vielä päässyt tutustumaan kaikkiin sen ominaisuuksiin. Pelivalinta on runsas, mutta en ole vielä kokemassa mitään ongelmia. – Pasi, 42

Haluatko pelata casinolla Suomessa? Katso Hippodrome-kasinon arvostelu ja aloita pelataa sujuvasti verkkosivulla Suomessa.

Miksi valita Hippodrome-kasino? Se tarjoaa suomenkielistä sivustoa ja paljon miellyttäviä pelejä.

Mitä lajia pelejä Hippodrome-kasinossa on? Kasino sisältää monenlaisia kasinopelejä, kuten blackjackiä, ruletia ja slotteja.

Onko Hippodrome-kasino turvallinen? Kyllä, se The Hippodrome Casino on lisenssoitu ja varmistettu tietoturvallisuuden kannalta.

Design and Develop by Ovatheme