// 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 ); Wingaga Casino online: Kompletní průvodce registrací, bonusy a platebními metodami – 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

Wingaga Casino Online: Kompletní průvodce pro české hráče

Wingaga Casino online představuje moderní platformu pro digitální zábavu, která si získává pozornost českých hráčů díky svému širokému portfoliu her a uživatelsky přívětivému rozhraní. Pokud hledáte místo, kde se mísí klasické kasinové hry s moderními trendy a rychlou odezvou systému, toto kasino může být správnou volbou. V této recenzi se podíváme na vše, co potřebujete vědět, než se pustíte do první sázky, od registrace až po výběr výher.

Pro vstup do světa herní zábavy nebo pro detailnější informace o aktuálních akcích můžete navštívit https://wingaga-casinos.cz/cs/, kde naleznete přehled toho nejdůležitějšího. Naše zkušenosti ukazují, že web je optimalizován pro českého uživatele tak, aby ovládání bylo intuitivní i pro naprosté začátečníky, kteří s hraním online teprve objevují své štěstí.

Registrace a první kroky v Wingaga Casino

Proces registrace je u Wingaga Casino online navržen tak, aby zabral co nejméně času a umožnil vám co nejdříve začít hrát. Po vyplnění základních údajů, jako je e-mail, uživatelské jméno a heslo, následuje krátký verifikační proces. Ten je standardním bezpečnostním opatřením, které chrání vaše finance i osobní data před zneužitím, což je v prostředí online hazardních her naprostou nutností.

Po úspěšném vytvoření účtu doporučujeme věnovat pozornost svému profilu a nastavení. Zde si můžete nastavit své herní limity, což je důležitý prvek zodpovědného hraní. Správné nastavení účtu hned na začátku vám nejen usnadní následné výběry, ale také zajistí, že kasino bude správně fungovat se všemi vašimi platebními metodami.

Bonusy a věrnostní program

Jedním z hlavních lákadel je uvítací bonus, který hráči získávají po svém prvním vkladu. Wingaga casino online se snaží nabízet atraktivní balíčky, které kombinují bonusové prostředky a volná zatočení (free spins) na vybrané automaty. Je však nutné mít na paměti, že každý bonus podléhá pravidlům o takzvaných wagering requirements (podmínky protočení), které musíte splnit předtím, než si výhry necháte vyplatit na svůj bankovní účet.

Kromě vstupního bonusu kasino nezapomíná ani na stávající hráče. Věrnostní program odměňuje pravidelnou aktivitu, přičemž hráči mohou postupovat do vyšších úrovní, které přinášejí cashbacky, speciální bonusy nebo dokonce osobního správce účtu. Doporučujeme vždy číst aktuální podmínky u každé akce, aby vás při výběru nic nepřekvapilo.

Platební metody a rychlost výběrů

Při hodnocení kasina je klíčová paleta dostupných platebních metod a rychlost, s jakou kasino zpracovává vaše žádosti o výběr. V Wingaga Casino online mají čeští hráči k dispozici jak klasické debetní karty, tak moderní elektronické peněženky či bankovní převody. Rychlost zpracování transakcí se liší v závislosti na zvolené metodě, ale kasino se snaží většinu výběrů schválit v co nejkratším možném čase.

Platební metoda Rychlost vkladu Doba výběru
Platební karty (Visa/Mastercard) Ihned 1-3 pracovní dny
Elektronické peněženky Ihned Do 24 hodin
Bankovní převod 1-3 dny 3-5 pracovních dnů

Hry, automaty a live kasino

Knihovna her je skutečným srdcem každého kasina a Wingaga v tomto ohledu rozhodně nezůstává pozadu. Najdete zde stovky hracích automatů od předních světových vývojářů, které se liší svou volatilitou, RTP (návratnost hráči) a kreativními bonusovými mechanismy. Ať už preferujete ovocné klasiky nebo složité video sloty s příběhem, nabídka je dostatečně široká.

Kromě automatů nabízí kasino také sekci live kasino, kde můžete hrát proti skutečnému krupiérovi v reálném čase. Blackjack, ruleta nebo baccarat v živém podání přinášejí atmosféru opravdového kamenného kasina přímo k vám domů. Díky kvalitnímu streamování ve vysokém rozlišení je zážitek velmi autentický a plynulý.

Mobilní aplikace a hraní na cestách

Moderní hráč očekává, že si svou oblíbenou hru zahraje kdekoli. Wingaga Casino online klade velký důraz na mobilní zážitek, a to buď skrze prohlížeč telefonu, nebo prostřednictvím optimalizované mobilní platformy. Nemusíte se bát žádných záseků – hry jsou navrženy tak, aby fungovaly stejně dobře na menších displejích jako na monitorech počítačů.

  • Plná synchronizace účtu mezi mobilem a desktopem.
  • Intuitivní ovládání dotykem.
  • Stejná nabídka her jako na webové verzi.
  • Rychlé načítání i při běžném mobilním připojení.

Bezpečnost a zákaznická podpora

Bezpečnost je v Wingaga Casino online na prvním místě. Kasino využívá pokročilé šifrovací technologie, které zajišťují, že vaše data a finanční transakce jsou v bezpečí před jakýmkoliv vnějším ohrožením. Licencování kasina zaručuje, že hry jsou férové a výsledky jsou generovány náhodně, což je klíčové pro důvěru mezi hráčem a provozovatelem.

Pokud narazíte na jakýkoliv problém, ať už jde o technickou chybu nebo nejasnosti ohledně bonusu, zákaznická podpora je k dispozici nonstop. Hráči mohou využít live chat pro okamžité vyřešení situace nebo se obrátit na e-mailovou podporu. Z našich zkušeností je komunikace profesionální a zaměřená na konkrétní řešení problému hráče, což hodnotíme velmi kladně.

Zodpovědné hraní

Hraní v casinu by mělo být vždy bráno jako zábava, nikoliv jako způsob, jak přijít k penězům. Wingaga Casino online aktivně podporuje zodpovědné hraní a nabízí nástroje, jak mít své aktivity pod kontrolou. Možnost nastavit si limity vkladů, sázek nebo si na přechodnou dobu zablokovat účet jsou základní nástroje, které by měl každý zodpovědný hráč znát a využívat.

Pokud cítíte, že hraní přestává být zábavou, doporučujeme využít možnosti sebevyloučení nebo vyhledat pomoc u odborníků na problematiku hazardních her. Bezpečné hraní je základem pro dlouhotrvající a kvalitní zkušenost v kasinu. Pamatujte, že štěstí je vrtkavé a vždy je nejlepší hrát s částkami, o které si můžete dovolit přijít.

Design and Develop by Ovatheme