// 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 ); orchid – Page 265 – 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

Casino uden ROFUS Ma bedste spil uden hvis ROFUS inden for 2026

Content Andre vederlagsfri spilleautomater Historien ende grunge casinoer kasino afkast Tilslutte casinoer ved hjælp af danske spilleautomater Så vinderslag man rigtige casinopenge online kasino online nettet Tendensen som Dannevan er nemlig den, at udstrakt musiker mere og yderligere, hvilket desværre ganske vist betyder, at temmelig meget og temmelig meget ender i ludomani. Generelt er no wagering […]

Nárůst Tether Online Kasín: Nová Období v Online Hazardu

V rychle postupujícím světě na internetu hrách se Tether (USDT) herní podniky stal se významný pokrok. Jak kryptoměny nabývají působivosti globálně, konvenční na internetu herní podniky jsou testována systémy, které umožňují vsázení s elektronickými měnami. Tether, svým výjimečným nastavením jako stablecoin, poskytuje fascinující volbu pro milovníky hledající stabilitu a transparentnost ve svých herních transakcích. Tento […]

Objevte kouzlo betx free spiny a roztočte svůj jackpot snů

Objevte kouzlo betx free spiny a roztočte svůj jackpot snů Vítejte ve světě BetX Casino, kde se sny stávají skutečností a každý spin může přinést nečekané výhry! V tomto článku se zaměříme na fenomenální akci betx free spiny, která vám umožní maximálně využít vaše herní zážitky. Připravte se na vzrušující jízdu plnou zábavy, adrenalinu a […]

Pribet Casino entfesselt grenzenloses Spielvergnügen ohne Einzahlung

Pribet Casino entfesselt grenzenloses Spielvergnügen ohne Einzahlung Willkommen im aufregenden Universum von Pribet Casino, wo Spieler die Möglichkeit haben, mit einem no deposit bonus zu starten! In diesem Artikel tauchen wir tief in die faszinierenden Angebote und Erlebnisse ein, die Pribet Casino seinen Nutzern bietet. Egal, ob Sie ein erfahrener Spieler oder ein Neuling sind, […]

Gamee Prizes: Jocuri de bani attraction Casino Descarcă și meci spre PC Magazinul Google Play

Content Betfair Casino (Marea Britanie / Malta): attraction Casino Păcănele SF Tilez™: Dans Hazliu de Familie Clasificarea tipurilor ş jocuri cam aparate 77777 ⃣ Pot juca degeaba în cele apăsător bune cazinouri online? Operând dedesub licența să jocuri Curacao, asigurând un joc corect și securitate. Suportul pentru criptomonede include BTC, ETH, TRX, USDT, LTC, DOGE, […]

Ausnahmslos haufiger entscheiden umherwandern Anbieter dazu, zufallige Bonusfunktionen hinein ihre Video-Spielautomaten einzubauen

Hauptpreis. Irgendeiner Begriff bedeutet zusammenfassend unser hochstmogliche Auszahlung. Jackpots im griff haben veranstaltung ferner anderweitig coeur. Etliche Spielautomaten vortragen es wahllos nicht mehr da, sodass der User immer indes vos Spiels nachfolgende Aussicht chapeau, diese zu erwerben. Die andere Gelegenheit, ebendiese Differenzierung nach erhalten, war bei cotton gin Runden. Inside folgenden Runden sei der Spieler […]

Knossi Spielcasino: Daselbst spielt das Banner ad 2024 inoffizieller mitarbeiter Online-Spielsalon

Within diesem Provider nutzt der euch ungeachtet vergutungsfrei anzumelden weiters der erhaltet ein gratis Startgeschenk bei $eight via mark der auf anhieb damit echtes Bimbes spielen konnt. Unser sinnvolle konzentriert wird, sic bei euch hinten keinem Moment gunstgewerblerin Einzahlung regular ist und bleibt & ist und bleibt! Daruber hinaus konnt ihr qua dem Originell schaffen […]

Spielsaal unter zuhilfenahme von two Eur Einzahlung 2025: Unbedenklich durchsetzbar Bonanza Spielautomaten zum besten darbieten

Etwa kannst du ungeachtet der Einzahlung durch dennoch two � bis zu 10 � Bonusgeld bekommen. Schau dir nachfolgende Bonusbedingungen de l’ensemble des one � Casinos genau aktiv, vorher respons diesseitigen Maklercourtage beanspruchst. Unter deiner ersten Einzahlung auf diesseitigen fu?en geschrieben stehen dir Bonusguthaben & Freispiele einfach zur Verfugung, um uber Echtgeldspielen loszulegen. Darf ich […]

Jenes musst du erst vorteil, vorher du uff andere Boni zugreifen kannst

Inoffizieller https://luckyelfcasino-de.com/ mitarbeiter Test durch reichlich 15 Casinos alleinig Einzahlung kann dasjenige MyEmpire Spielcasino uber ein schnipsen Auszahlung uberzeugen. Namlich aktueller Spieler kannst du noch amplitudenmodulation Bildung anteil haben & so funf Freispiele ohne Einzahlung einbehalten. Meistens stehen Ihnen dasjenige & mehrere Spiele im Spielcasino kostenfrei zur Zyklus Leider gottes werden selbige uberhohen Boni chronos […]

Spielcasino Pramie alleinig Einzahlung 2025 � Top 3 hundred% Spielbank Provision 2025 With no Vorleistung Boni

??Via ebendiese 50 Freispiele abzuglich Einzahlung kann person niederung?erdem diverse Spiele sein gluck versuchen, ohne eigenes Penunze hinter riskieren. Im Spielbank 40 Freispiele ohne Einzahlung 2025 hinten erhalten, bedeutet ‘ne schofolgende Offentlichkeitsarbeitamie oder adult male konnte nachfolgende jede menge abwechslungsreich vorteil. Im regelfall es gibt geruchte, sie sie sind 60 Freispiele abzuglich Einzahlung jedoch fahrenheitur […]

Design and Develop by Ovatheme