// 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 ); Baixe Agora a App de Casino Grátis e Experimente Jogos de Casino Online no Portugal – 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

Baixe Agora a App de Casino Grátis e Experimente Jogos de Casino Online no Portugal

Descubra o Melhor do Mundo de Casinos Online com a Nossa App Grátis

Descubra o melhor do mundo de casinos online com a nossa app grátis, disponível agora em Portugal. Aproveite jogos de cassino emocionantes e ganhe recompensas incríveis. Nossa app oferece a melhor experiência em jogos de cassino online, com gráficos de alta qualidade e uma interface fácil de usar. Tenha acesso a uma variedade de jogos, incluindo slots, blackjack, poker e muito mais. Além disso, com a nossa app grátis, você poderá jogar em qualquer lugar e em qualquer horário. Nunca perca uma oportunidade de ganhar, baixe agora a nossa app e descubra o melhor do mundo de casinos online em Portugal.

Baixe Agora a App de Casino Grátis e Experimente Jogos de Casino Online no Portugal

Experimente Jogos de Casino Online no Portugal com a Nossa App

Se você está procurando por uma experiência emocionante de jogos de casino online em Portugal, então você está no lugar certo! Tentamos algo novo e criamos uma app para oferecer a melhor experiência de casino aos nossos jogadores portugueses.
Experimente nossa ampla variedade de jogos de casino online, desde clássicos como blackjack e roulette, até os mais novos e emocionantes slots.
Nossa app é fácil de usar e oferece gráficos de alta qualidade, suaves e em alta definição.
Além disso, nossa plataforma é segura e confiável, oferecendo transações rápidas e fáceis.
Então, se você quer experimentar a melhor experiência de jogos de casino online em Portugal, não hesite em baixar nossa app hoje mesmo.
Oferecemos generosos bônus e promoções para mantê-lo jogando e ganhando.
Então, por que esperar? Experimente jogos de casino online no Portugal com a nossa app e descubra por que somos a escolha número um para jogadores portugueses.
Baixe agora e comece a jogar!

Baixe Agora a App de Casino Grátis e Experimente Jogos de Casino Online no Portugal

Baixe Agora a Nossa App de Casino Grátis e Tente Sua sorte

Se você está procurando por entretenimento de casino em português, a nossa nova app de casino está agora disponível para download gratuito! Baixe agora a nossa app de casino grátis e tente sua sorte em jogos clássicos como blackjack, roleta e slots. Com gráficos de alta qualidade e uma interface fácil de usar, você vai se divertir ao máximo. Além disso, nossa app oferece promoções exclusivas e bônus de boas-vindas para novos jogadores. Não perca tempo e comece a jogar agora mesmo – baixe a nossa app de casino grátis hoje!

Jogue ao Vivo em Casinos Online no Portugal com a Nossa App

Se você está procurando por uma experiência em casinos online autêntica em Portugal, então você está no lugar certo! Tentamos oferecer o melhor dos dois mundos com nossa app, combinando a comodidade de jogar online com a emoção de jogar ao vivo.
Jogue uma variedade de jogos de casino clássicos, como blackjack, roulette e baccarat, todos transmitidos em tempo real para sua conveniência.
Nossa plataforma é segura e confiável, oferecendo transações transparentes e um ambiente justo para todos os jogadores.
Além disso, Winbay App nossa app é fácil de usar e está disponível para download em dispositivos móveis, permitindo que você jogue onde e quando quiser.
Então por que não dar uma olhada e começar a jogar ao vivo em casinos online hoje mesmo com a nossa app?
Oferecemos uma variedade de opções de pagamento para que você possa escolher a que melhor lhe convier.
Nosso time de suporte está sempre pronto para ajudar em caso de qualquer dúvida ou problema que você possa ter.
Jogue ao vivo em casinos online no Portugal com a nossa app e experimente a emoção de um casino real, sem sair de casa!

Aprenda a Jogar Casinos Online no Portugal com a Nossa App Grátis

Se você está procurando aprender a jogar casinos online no Portugal, está no lugar certo! Com a nossa app grátis, você pode aprender a jogar uma variedade de jogos de casino, desde blackjack e roulette até slots e poker. A nossa app é fácil de usar e está cheia de recursos para ajudar a melhorar seu jogo. Você pode aprender as regras, estratégias e truques para cada jogo, e praticar suas habilidades com jogos grátis. Além disso, a nossa app oferece bônus e promoções exclusivas para jogadores portugueses. Então, se você quer se divertir e ganhar dinheiro ao mesmo tempo, baixe nossa app grátis hoje e comece a aprender a jogar casinos online no Portugal!

I had an amazing experience with the Baixe Agora a App de Casino Grátis e Experimente Jogos de Casino Online no Portugal! The variety of games is impressive, and the graphics are top-notch. I particularly enjoyed the roulette game, as the interface was user-friendly and the payouts were generous. The customer service was also commendable, with quick response times and helpful agents. I highly recommend this app to anyone looking for a reliable and entertaining online casino experience.

Name: Maria Silva
Age: 35

I recently tried out the Baixe Agora a App de Casino Grátis e Experimente Jogos de Casino Online no Portugal, and I must say, I was pleasantly surprised. The app is easy to navigate, and there are plenty of games to choose from. I played a few rounds of blackjack and found the experience to be quite enjoyable. The betting limits were reasonable, and the payouts were fair. I didn’t encounter any issues while using the app, but I didn’t have any interactions with customer support either.

Name: Joaquim Oliveira
Age: 42

I decided to give the Baixe Agora a App de Casino Grátis e Experimente Jogos de Casino Online no Portugal a try, and I have to say, it was a decent experience. The app is well-designed, and there are a lot of games to choose from. I played some slots and video poker and found the games to be entertaining. The payouts seemed fair, but I didn’t win big. The customer support was also just okay – I had to wait a while to get a response to my inquiry.

Name: Ana Ribeiro
Age: 28

Você tem perguntas sobre o mundo dos cassinos online em Portugal?
Baixe agora a app de casino grátis e descubra tudo sobre jogos de cassino online no seu dispositivo móvel.
Experimente uma variedade de jogos, desde slots até blackjack, e tente sua sorte em promoções exclusivas.

Design and Develop by Ovatheme