// 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 );
Casino online Multibanco: passos e métodos para jogar em 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
Casino online Multibanco – Guia Prático para Jogar em Portugal
Por que escolher o Multibanco nos casinos online?
O Multibanco continua a ser o método de pagamento preferido dos portugueses quando se trata de apostar online. A sua rede está presente em milhares de caixas automáticas e balcões em todo o país, o que permite efectuar depósitos a qualquer hora, sem necessidade de cartão de crédito ou contas bancárias online. Além da conveniência, o Multibanco oferece um nível de segurança que muitos jogadores valorizam, pois as transacções são processadas directamente pelos bancos tradicionais.
Se ainda tem dúvidas, pode consultar os benefícios dos depósitos Multibanco no casino PT e perceber como esta forma de pagamento simplifica a sua experiência de jogo. Outro ponto a favor é a rapidez dos depósitos: o crédito aparece quase instantaneamente na sua conta de casino, permitindo começar a jogar sem esperar.
Como criar a sua conta e fazer o primeiro depósito
O registo num casino online que aceita Multibanco é, na maioria dos casos, um processo de três passos: escolha o casino, preencha os dados pessoais e confirme o e‑mail de verificação. É importante usar o mesmo nome que aparece no seu documento de identidade, pois isso facilita a fase de verificação KYC mais tarde.
Depois de ativada a conta, vá até à secção “Depósito” e selecione “Multibanco”. O casino irá gerar uma referência única e um valor a pagar. Basta dirigir‑se a qualquer caixa Multibanco, escolher a opção “Pagamentos” → “Referência” e introduzir os dados. O dinheiro será creditado na sua conta de casino em poucos segundos.
Bónus de boas‑vindas e requisitos de apostas (wagering)
A maioria dos casinos online que aceitam Multibanco oferece um bónus de boas‑vindas para novos jogadores. Normalmente, o bónus vem na forma de “match bonus”, onde o casino duplica o valor do seu primeiro depósito até um determinado limite. Este incentivo pode aumentar significativamente o seu bankroll inicial.
Entretanto, preste atenção aos requisitos de apostas (wagering requirements). Eles indicam quantas vezes deve jogar o valor do bónus antes de poder retirar os ganhos. Por exemplo, um requisito de 30x significa que, se recebeu um bónus de €100, terá de apostar €3 000 antes de solicitar um saque.
Leia sempre os termos do bónus antes de aceitar.
Prefira casinos com requisitos entre 20x e 30x, que são mais realistas.
Verifique se o bónus inclui jogos de slots, live casino ou apostas desportivas, conforme a sua preferência.
Métodos de depósito e retirada: velocidade e segurança
Além do Multibanco para depósitos, muitos casinos permitem retiradas para a mesma conta bancária. A velocidade da retirada varia de casino para casino, mas a maioria garante um prazo de 24 a 48 horas úteis, o que ainda é bastante rápido comparado a outros métodos como transferências bancárias internacionais.
Para garantir a segurança das suas transacções, os casinos utilizam protocolos SSL e processos de verificação de identidade. Quando solicitar uma retirada, esteja preparado para enviar uma cópia do seu documento de identidade e um comprovativo de residência, caso ainda não tenha completado o KYC.
Depósito instantâneo via Multibanco – crédito imediato.
Retirada em 1‑2 dias úteis – dependendo da política do casino.
Segurança reforçada com encriptação SSL e verificação KYC.
Jogar no mobile e apps compatíveis com Multibanco
Hoje em dia, a maioria dos casinos online oferece versões mobile responsivas ou apps dedicados para Android e iOS. Estes aplicativos permitem fazer depósitos via Multibanco com a mesma facilidade da versão desktop, usando um QR code ou introduzindo a referência gerada.
A experiência móvel costuma ser otimizada para telas menores, mas mantém todas as funcionalidades: slots, live casino, sportsbook e gestão de conta. Certifique‑se de que o app escolhido tem licença da autoridade competente (por ex. Malta Gaming Authority) e que suporta notificações de depósitos e retiradas.
Suporte ao cliente e verificação de identidade (KYC)
Um bom suporte ao cliente é essencial, sobretudo quando surgem dúvidas sobre pagamentos ou requisitos de bônus. Procure casinos que ofereçam chat ao vivo 24/7, e‑mail e telefone local para Portugal. Respostas rápidas evitam atrasos nas retiradas e ajudam a resolver eventuais problemas de verificação.
A verificação de identidade (KYC) normalmente inclui o upload de um documento de identidade (Cartão de Cidadão ou Passaporte) e um comprovativo de morada (fatura de luz ou água). Embora possa parecer burocrático, este passo protege tanto o jogador quanto o casino contra fraudes e garante um ambiente de jogo mais seguro.
Licenciamento, segurança e jogo responsável
Antes de depositar, confirme que o casino possui uma licença de jogo válida, emitida por uma autoridade reconhecida como a Malta Gaming Authority, a UK Gambling Commission ou a Autoridade de Jogos de Curaçao, dependendo do seu foco. Licenças reconhecidas exigem auditorias regulares de RNG (Random Number Generator) e cumprem padrões de segurança rigorosos.
Além da segurança financeira, muitos casinos promovem o jogo responsável, oferecendo limites de depósito, opções de auto‑exclusão e ferramentas de monitorização de tempo de jogo. Se sentir que o jogo está a tornar‑se um problema, procure imediatamente a secção de “Jogo Responsável” e siga os procedimentos para limitar a sua atividade.
Comparativo rápido dos principais casinos que aceitam Multibanco
Casino
Bónus de Boas‑vindas
Tempo de retirada (Multibanco)
Casino A
100% até €200 + 50 rodadas grátis
24‑48h
Casino B
150% até €300
12‑24h
Casino C
200% até €500 + 100 rodadas grátis
24h
Esta tabela ilustra como os diferentes casinos variam em termos de ofertas de boas‑vindas e rapidez nas retiradas. Ao escolher, leve em consideração não só o tamanho do bónus, mas também os requisitos de apostas e o tempo que leva a receber o dinheiro na sua conta bancária.
Dicas finais para maximizar a sua experiência
Para tirar o melhor proveito do casino online Multibanco, siga estas recomendações: registe‑se num casino licenciado, aproveite o bónus de boas‑vindas, mas leia sempre os termos; faça depósitos pequenos no início para testar a plataforma; use o mobile app se quiser jogar em movimento; e nunca ignore as opções de jogo responsável.
Lembre‑se de que o objetivo principal deve ser a diversão. Mantenha um orçamento definido, acompanhe o seu desempenho e, quando necessário, peça ajuda ao suporte ou a serviços de aconselhamento de jogo. Com estas práticas, o seu caminho no casino online Multibanco será seguro, rápido e agradável.