// 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 ); Explore 4RABET Official Online Website for Premier Sports Betting and Casino Gaming in India – 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

Explore 4RABET Official Online Website for Premier Sports Betting and Casino Gaming in India

Experience the thrill of 4 bet like never before with 4rabet , the trusted platform for all your gaming needs. Whether you’re looking to place a bet on your favorite sports or dive into the exciting world of online casino games, 4rabet official website has it all.

Get started today with a quick 4rabet login and explore the endless possibilities of 4rabet online. From 4rbet sports markets to immersive casino games, 4 ra bet offers a seamless and secure gaming experience.

Join the community of winners at 4ra bet and discover why 4ra is the preferred choice for players across India. Your next big win is just a click away!

Discover the Thrill of 4RABET Official Online Website

Experience the excitement of sports betting and casino games on the 4rabet official website. Whether you’re a seasoned player or a beginner, 4ra offers a seamless platform for all your gaming needs. Access your account effortlessly with the 4rabet app login and dive into a world of endless possibilities.

With 4rbet, you can enjoy a wide range of sports events and casino games, all in one place. The 4rabet login process is quick and secure, ensuring you can start playing without any delays. Explore the features of 4ra bet and discover why it’s the preferred choice for gamers across India.

Stay connected with 4rabet online and never miss out on the action. Whether you’re on the go or at home, the 4 bet platform is designed for convenience and accessibility. Join the 4 rabet community today and elevate your gaming experience to new heights.

Sports Betting and Casino in India at Your Fingertips

Experience the thrill of sports betting and casino games with 4rabet, the ultimate platform for Indian players. Whether you’re a seasoned bettor or a casual gamer, 4rabet offers everything you need for an unforgettable experience.

  • Access the 4rabet official website or download the app for seamless gaming.
  • Use 4rabet app login or 4rabet login to dive into the action instantly.
  • Explore a wide range of sports betting options and casino games on 4rabet online.

Why choose 4rabet? Here’s what makes it stand out:

  • Easy access via 4 ra bet or 4 rabet platforms.
  • Secure and reliable betting with 4rbet technology.
  • Exciting promotions and bonuses for all users.
  • Join the 4 bet community today and enjoy the best of sports betting and casino gaming in India!

    Why Choose 4RABET for Your Betting and Gaming Needs?

    4RABET is the ultimate destination for sports betting and casino enthusiasts in India. With the 4rabet official website, you can enjoy a seamless and secure gaming experience. The 4rabet login process is quick and easy, allowing you to access your account in seconds. Whether you prefer 4rabet online or the 4rabet app login, the platform is designed for convenience and accessibility.

    4RABET offers a wide range of betting options, from cricket to football, and a variety of casino games. The 4ra platform ensures fair play and transparency, making it a trusted choice for players. With 4 bet, you can enjoy competitive odds and exciting promotions. The 4rbet experience is enhanced by user-friendly features and 24/7 customer support.

    For those on the go, the 4rabet app login provides a smooth and efficient way to place bets and play games. The 4 rabet platform is optimized for both desktop and mobile devices, ensuring you never miss out on the action. Choose 4RABET for a reliable, thrilling, and rewarding betting and gaming experience.

    Explore a Wide Range of Sports and Casino Games

    Discover endless entertainment on the 4rabet official website, where you can dive into a variety of sports and casino games. Whether you’re a fan of cricket, football, or tennis, 4ra bet offers competitive odds and live betting options to enhance your experience.

    For casino enthusiasts, the 4rabet online platform provides a rich selection of games, including slots, roulette, and blackjack. Enjoy seamless gameplay and exciting rewards with just a few clicks.

    Feature
    Details

    Sports Betting Access live and pre-match betting on the 4rbet platform. Casino Games Explore a diverse range of games on the 4rabet app login. User-Friendly Easily navigate through the 4rabet login interface.

    Join the 4rabet community today and experience the thrill of sports betting and casino gaming. Whether you prefer the 4 ra bet website or the 4ra app, your next big win is just a step away. Don’t miss out on the excitement – start your journey with 4 bet now!

    Secure and Convenient Payment Options for Indian Users

    At the 4rabet official website, we prioritize seamless and safe transactions for all our users. Whether you access the platform via the 4rabet app login or the 4rabet online portal, you’ll find a variety of trusted payment methods tailored for Indian players. From UPI and NetBanking to e-wallets and credit cards, every option ensures quick deposits and withdrawals.

    For those using the 4ra bet platform, rest assured that all transactions are encrypted with advanced security protocols. The 4rabet login process is designed to protect your financial data, allowing you to focus on enjoying sports betting and casino games. With 4rbet, you can manage your funds effortlessly, whether you’re on the 4 bet app or the desktop site.

    Experience hassle-free payments with 4 ra bet, where convenience meets reliability. The 4rabet online platform supports instant deposits, so you never miss a betting opportunity. For withdrawals, 4ra ensures swift processing, letting you access your winnings without delay. Trust 4rabet for a secure and user-friendly payment experience every time.

    Unlock Exclusive Bonuses and Promotions on 4RABET

    Discover a world of exciting rewards on the 4rabet official website. Whether you’re a sports enthusiast or a casino lover, 4ra offers unbeatable bonuses tailored just for you. New users can enjoy a generous welcome bonus upon 4rabet login, while regular players benefit from weekly promotions and cashback offers.

    Access these perks seamlessly through the 4rabet app login or the 4rabet online platform. From free bets to deposit matches, 4 ra bet ensures every player feels valued. Don’t miss out on exclusive deals available only on 4rbet – your gateway to endless entertainment and winning opportunities.

    Stay updated with the latest offers by visiting the 4 rabet platform regularly. With 4ra bet, every game becomes more thrilling, and every win feels even sweeter. Join now and elevate your gaming experience!

    Join the 4RABET Community Today and Start Winning

    Become a part of the 4RABET community and experience the thrill of sports betting and casino games like never before. With 4ra, you get access to a world of opportunities to win big and enjoy seamless gaming.

    • Download the 4rabet app login and start playing anytime, anywhere.
    • Explore 4rabet online for a wide range of sports and casino options.
    • Use 4ra bet to place your bets and watch your winnings grow.

    Why wait? Join 4 ra bet now and take advantage of exclusive offers and bonuses. Whether you’re a beginner or a pro, 4rbet has something for everyone.

  • Sign up on 4rabet login and create your account in minutes.
  • Discover the excitement of 4 rabet with secure and fair gameplay.
  • Start winning with 4rabet and enjoy the ultimate gaming experience.
  • Don’t miss out on the action. Join 4RABET today and turn your passion into profits!

    Design and Develop by Ovatheme