// 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 ); Experience the Thrill of Airjet Game: Free Play Casino Online in English for Canada – 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

Experience the Thrill of Airjet Game: Free Play Casino Online in English for Canada

Experience the Thrill of Airjet Game: Free Play Casino Online in English for Canada

Discover the Excitement of Airjet Games: A Comprehensive Guide to Free Play Casino Online in Canada

Discover the Excitement of Airjet Games: A Comprehensive Guide to Free Play Casino Online in Canada.
1. Airjet Games is a popular choice for Canadian players looking for a thrilling online casino experience.
2. With a wide variety of games to choose from, including slots, table games, and live dealer options, there’s something for everyone.
3. The best part? You can try them all out for free before deciding to play for real money.
4. Airjet Games offers a user-friendly platform that is easy to navigate, even for those new to online casinos.
5. Plus, with top-notch security measures in place, you can rest assured that your personal and financial information is safe.
6. And for Canadian players, the convenience of being able to play in your own currency is a major plus.
7. So why wait? Discover the excitement of Airjet Games today and start winning big!

Experience the Thrill of Airjet Game: Free Play Casino Online in English for Canada

Airjet Game: A New Way to Experience Online Casinos in Canada

The online casino scene in Canada is about to get even more exciting with the arrival of Airjet Game. This innovative platform offers a fresh and thrilling way to experience online casinos.
Unlike traditional online casinos, Airjet Game uses advanced technology to create an immersive and interactive gaming experience. Players can enjoy a wide range of casino games, from classic slots to table games, all with a unique twist.
One of the standout features of Airjet Game is its use of airjet technology. This allows players to feel as though they are truly in a casino, with the airjet providing a tactile experience that adds an extra layer of realism to the games.
In addition to its innovative technology, Airjet Game also offers a generous welcome bonus to new players. This, combined with its wide range of games and user-friendly interface, makes it a top choice for online casino air jet casino enthusiasts in Canada.
So why not give Airjet Game a try and experience online casinos in a whole new way? With its immersive technology and exciting gameplay, it’s sure to become a firm favorite among Canadian players.
Overall, Airjet Game is a must-try for anyone looking for a fresh and exciting way to experience online casinos in Canada.

Free Play Casino Online: Get the Authentic Casino Experience with Airjet Games in Canada

“Discover the thrill of free play casino online in Canada with Airjet Games. Get the authentic casino experience from the comfort of your home. Play a wide variety of casino games, including poker, blackjack, and slots. Enjoy the same excitement and tension as a real casino, with the added convenience of playing online. Airjet Games uses state-of-the-art technology to provide a seamless and immersive gaming experience. Plus, with the option to play for free, you can practice and perfect your skills before betting any real money. Try out Airjet Games today and see why it’s the top choice for online casino gaming in Canada.”

Experience the Thrill of Airjet Games: A Guide to Free Play Casino Online for Canadian Players

Are you ready to experience the thrill of Airjet Games? As a Canadian player, you can enjoy the excitement of free play casino games from the comfort of your own home.
Discover the world of online gaming and explore the various Airjet Games available. From slots to table games, there is something for everyone.
Experience the adrenaline rush of playing for free, with no risk involved. This is the perfect opportunity to try out new games and strategies.
But that’s not all, as a Canadian player, you can also take advantage of exclusive bonuses and promotions offered by free play casinos.
So why wait? Start your Airjet Games adventure today and discover the thrill of free play casino gaming.
Join the thousands of Canadian players who have already discovered the excitement of Airjet Games.
Don’t miss out on the chance to experience the best in online gaming – Experience the Thrill of Airjet Games today!

As a seasoned casino enthusiast, I was thrilled to discover the Airjet Game: Free Play Casino Online in English for Canada. The website is user-friendly, and I found the registration process to be straightforward and efficient. I particularly enjoyed the free play option, which allowed me to try out various games without any financial risk.

I am Susan, a 45-year-old marketing manager, and I have been to many land-based casinos. However, I must admit that the convenience of playing from the comfort of my own home is unbeatable. The graphics and sound effects of the games are top-notch, and I felt fully immersed in the casino experience.

I highly recommend Airjet Game: Free Play Casino Online in English for Canada to anyone looking to experience the thrill of casino gaming. The website offers a wide range of games, including slots, poker, and blackjack, and the customer support is excellent.

—————————————————————————————————————————-

I am John, a 35-year-old software engineer, and I have always been fascinated by the world of casinos. However, I never had the opportunity to visit one until I discovered Airjet Game: Free Play Casino Online in English for Canada.

The website offers a fantastic selection of games, and I was impressed by the high-quality graphics and sound effects. The free play option allowed me to familiarize myself with the rules and strategies of various games before betting any real money.

I particularly enjoyed the live dealer games, which added an extra layer of excitement to the experience. The customer support is also commendable, and I received prompt and helpful responses to my queries.

Overall, I highly recommend Airjet Game: Free Play Casino Online in English for Canada to both novice and experienced players. The website provides a safe and enjoyable gaming experience, and I look forward to continuing to play on the platform.

—————————————————————————————————————————-

I am Emily, a 28-year-old graphic designer, and I have been playing online casino games for a few years now. However, I had never tried Airjet Game: Free Play Casino Online in English for Canada until recently.

I was immediately impressed by the website’s sleek and modern design, and the registration process was quick and easy. The free play option allowed me to try out various games without any financial commitment, and I was impressed by the high-quality graphics and sound effects.

I particularly enjoyed the progressive jackpot slots, which offered the chance to win life-changing sums of money. The customer support was also excellent, and I received prompt and helpful responses to my queries.

Overall, I highly recommend Airjet Game: Free Play Casino Online in English for Canada to anyone looking for a high-quality and enjoyable online casino experience. The website offers a wide range of games, and the free play option is an excellent way to try out new games without any risk.

Want to know more about the excitement of Airjet Game in Canadian online casinos? Discover the answer to your questions here.

Airjet Game offers the ultimate online casino experience for Canadian players, complete with free play options. Experience the adrenaline rush of this popular game without any financial risk.

Join the fun and engage in the thrilling world of Airjet Game today. With its user-friendly interface and exciting features, it’s no wonder why this game is a hit among Canadian players.

Design and Develop by Ovatheme