
var push_subscribed=!1;function push_invite(delay){setTimeout(function(){if(!push_subscribed){register_push()}},delay)}function serverlog(t){var xmlHttp=new XMLHttpRequest();t='nh_push.js: '+t;xmlHttp.open("GET",'https://www.newhomesforsale.co.uk/push/nh_push_log.php?t='+t);xmlHttp.send(null)}const can_push=()=>{if(!('serviceWorker'in navigator)){throw new Error('No Service Worker support!')}if(!('PushManager'in window)){throw new Error('No Push API Support!')}};const urlB64ToUint8Array=base64String=>{const padding='='.repeat((4-(base64String.length%4))%4);const base64=(base64String+padding).replace(/\-/g,'+').replace(/_/g,'/');const rawData=atob(base64);const outputArray=new Uint8Array(rawData.length);for(let i=0;i<rawData.length;++i){outputArray[i]=rawData.charCodeAt(i)}return outputArray};const requestNotificationPermission=async()=>{const permission=await window.Notification.requestPermission();if(permission!=='granted'){throw new Error('Permission not granted for Notification')}};const check_push=async(delay)=>{can_push();navigator.serviceWorker.getRegistration('/').then(function(serviceWorkerRegistration){if(serviceWorkerRegistration){serviceWorkerRegistration.pushManager.getSubscription().then(function(subscription){if(!subscription){console.log('Getting subscription failed!')}else{console.log('Already subscribed, saving to session:'+JSON.stringify(subscription));fetch('/push/nh_push_subscription.php?pushsubscription='+JSON.stringify(subscription),{method:'get',headers:{'Content-Type':'text/plain',}}).then(response=>response.json()).then(data=>{if(data.subscriptionid>0){console.log('recalled push subscription: ',data.subscriptionid);push_subscribed=!0}else if(data.error=="not found"){unregister_push();push_subscribed=!1;if(isNaN(delay)){console.log('no delay specified',delay)}else{console.log('Push inviting in ',delay);push_invite(delay)}}else{console.log('Error recalling push subscription')}})}}).catch(function(err){console.log('Error during getSubscription()',err)})}else{console.log('Not subscribed');if(isNaN(delay)){}else{push_invite(delay)}}})};const saveSubscription=async(subscription)=>{fetch('/push/nh_push_subscription.php',{method:'post',headers:{'Content-Type':'application/json',},body:JSON.stringify(subscription),}).then(response=>response.json()).then(data=>{if(data.id>0){}else{console.log('Error saving subscription:',data.errormsg)}}).catch((error)=>{console.error('Error:',error)})};const register_push=async()=>{can_push();const permission=await requestNotificationPermission();navigator.serviceWorker.register('/pushcrew-sw.js').then(function(serviceWorkerRegistration){if(serviceWorkerRegistration){const worker=serviceWorkerRegistration.installing;worker.addEventListener('statechange',()=>{if(worker.state!=='activated'){return}try{const applicationServerKey=urlB64ToUint8Array('BEbXu8YLw_emPxMjkO81eWOn4ggzd8AM1T5dTOz8ypnXD2lmtdMT4X4Ybe14ls9vmuS-VNQ8r9NNXRAS9-num_8');const options={applicationServerKey,userVisibleOnly:!0};serviceWorkerRegistration.pushManager.subscribe(options).then(function(pushSubscription){serviceWorkerRegistration.pushManager.getSubscription().then(function(subscription){if(!subscription){console.log('Getting subscription after registration failed!')}else{saveSubscription(subscription)}}).catch(function(err){console.log('Error during getSubscription()',err)})})}catch(err){do_serverlog('ERROR on activation: '+err)}})}else{console.log('ServiceWorkerRegistration failed!')}},function(error){console.log('Service worker registration failed:',error)})};const unregister_push=async()=>{can_push();fetch('/push/nh_push_subscription.php?unsubscribe',{method:'get'}).then(response=>response.json()).then(data=>{if(data.status=='OK'){navigator.serviceWorker.getRegistrations().then(function(registrations){for(let registration of registrations){registration.unregister()}console.log('Unsubscribed OK')})}else console.log('Error saving subscription:',data.errormsg)}).catch((error)=>{console.error('Error:',error)})};