<script>
(function(){
const API_KEY = 'DIN_API_NYCKEL';
const REQUIRE_CONSENT = false; // <-- TEST: false först
const CONSENT_CATEGORY = 'statistics'; // 'statistics' eller 'marketing'
let mapsLoaded = false;
let map, marker, mapReady = false;
function $(id){ return document.getElementById(id); }
function setText(id, t){ const el=$(id); if(el) el.textContent=t; }
function setVal(id, v){ const el=$(id); if(el) el.value=v; }
function hasConsent(){
if(!REQUIRE_CONSENT) return true;
if(!window.cmplz_has_consent) return false;
return cmplz_has_consent(CONSENT_CATEGORY);
}
function loadMaps(){
if(mapsLoaded) return;
mapsLoaded = true;
const s = document.createElement('script');
s.src = 'https://maps.googleapis.com/maps/api/js?key=' + encodeURIComponent(API_KEY) + '&v=weekly';
s.async = true; s.defer = true;
s.onerror = () => setText('cf7-geo-status','Kunde inte ladda Google Maps (nyckel/billing/referer).');
document.head.appendChild(s);
}
function showMap(){
const wrap = $('cf7-map-wrap');
if(wrap) wrap.style.display='block';
}
function updateFields(lat,lng,acc){
setVal('cf7-geo-lat', lat);
setVal('cf7-geo-lng', lng);
setVal('cf7-geo-acc', acc || '');
const out = $('cf7-geo-coords');
if(out) out.textContent = lat.toFixed(6)+', '+lng.toFixed(6) + (acc?(' (±'+Math.round(acc)+'m)'):'');
}
function placeMarker(lat,lng){
if(!map) return;
const pos={lat,lng};
if(marker) marker.setPosition(pos);
else marker=new google.maps.Marker({map, position:pos, title:'Vald plats'});
map.panTo(pos);
}
function ensureMap(){
if(mapReady) return true;
if(!(window.google && google.maps && google.maps.Map)) return false;
const el = $('cf7-map');
if(!el){
setText('cf7-geo-status','Hittar inte kartytan (#cf7-map). Kontrollera CF7-formuläret.');
return false;
}
const start = {lat:57.0, lng:12.9};
map = new google.maps.Map(el, {center:start, zoom:8});
map.addListener('click', (e)=>{
const lat=e.latLng.lat(), lng=e.latLng.lng();
placeMarker(lat,lng);
updateFields(lat,lng,'');
setText('cf7-geo-status','Plats vald via karta ✅');
});
mapReady = true;
setTimeout(()=>{
google.maps.event.trigger(map,'resize');
map.setCenter(start);
}, 80);
return true;
}
function getGeo(){
if(!navigator.geolocation){
setText('cf7-geo-status','Geolocation stöds inte. Välj plats genom att klicka i kartan.');
return;
}
navigator.geolocation.getCurrentPosition((pos)=>{
const lat=pos.coords.latitude, lng=pos.coords.longitude, acc=pos.coords.accuracy;
updateFields(lat,lng,acc);
placeMarker(lat,lng);
setText('cf7-geo-status','Plats vald ✅');
}, ()=>{
setText('cf7-geo-status','Kunde inte hämta position. Klicka i kartan för att välja plats.');
}, {enableHighAccuracy:true, timeout:10000, maximumAge:0});
}
document.addEventListener('click', (e)=>{
if(!e.target || e.target.id!=='cf7-geo-btn') return;
showMap();
if(!hasConsent()){
setText('cf7-geo-status','Acceptera cookies (Statistik/Marknadsföring) för att visa kartan.');
return;
}
loadMaps();
setText('cf7-geo-status','Laddar karta…');
let tries=0;
(function wait(){
tries++;
if(ensureMap()){
setText('cf7-geo-status','Hämtar position…');
getGeo();
return;
}
if(tries>80){
setText('cf7-geo-status','Kartan laddade inte. Kontrollera API-nyckel/billing/referer.');
return;
}
setTimeout(wait, 100);
})();
});
// Om samtycke ändras, för-ladda (när du sätter REQUIRE_CONSENT=true)
document.addEventListener('cmplz_status_change', ()=>{ if(hasConsent()) loadMaps(); });
})();
</script>