;(function(){'use strict';function inStandAloneMode(){return window.parent.location.pathname==='/message_handler.html';} if(!inStandAloneMode()){ConfigManager=window.parent.ConfigManager;CostControl=window.parent.CostControl;SimManager=window.parent.SimManager;} if(inStandAloneMode()&&window.history.length>1){debug('Nothing to do in message handler, returning to app...');window.history.back();} function inApplicationMode(){return window.parent.location.pathname==='/index.html';} var closing;function closeIfProceeds(){debug('Checking for closing...');if(inStandAloneMode()){closing=Common.closeApplication();}} function addAlarmTimeout(type,delay){var date=new Date();date.setTime(date.getTime()+delay);var request=navigator.mozAlarms.add(date,'ignoreTimezone',{type:type});return request;} window.addAlarmTimeout=addAlarmTimeout;function setNextReset(when,callback){asyncStorage.getItem('nextResetAlarm',function(id){debug('Current nextResetAlarm',id+'.',id?'Removing.':'');if(id){navigator.mozAlarms.remove(id);} if(!when){debug('Automatic reset disabled');updateResetAttributes(null,null,callback);return;} if(when.getTime()-1;var isTopupResponse=configuration.topup&&Array.isArray(configuration.topup.senders)&&configuration.topup.senders.indexOf(sms.sender)>-1;if(!isBalanceResponse&&!isTopupResponse){closeIfProceeds();return;} debug('Parsing received SMS');var isBalance,isConfirmation,isError;isBalance=isConfirmation=isError=false;debug('Trying to recognize balance SMS');var description=new RegExp(configuration.balance.regexp);var balanceData=sms.body.match(description);if(!balanceData){debug('Trying to recognize zero balance SMS');var zeroDescription=configuration.balance.zero_regexp?new RegExp(configuration.balance.zero_regexp):null;if(zeroDescription&&zeroDescription.test(sms.body)){balanceData=['0.00','0','0'];}} isBalance=!!balanceData;if(!isBalance||balanceData.length<2){console.warn('Impossible to parse balance message.');debug('Trying to recognize TopUp confirmation SMS');description=new RegExp(configuration.topup.confirmation_regexp);isConfirmation=!!sms.body.match(description);if(!isConfirmation){console.warn('Impossible to parse TopUp confirmation message.');debug('Trying to recognize TopUp error SMS');description=new RegExp(configuration.topup.incorrect_code_regexp);isError=!!sms.body.match(description);if(!isError){console.warn('Impossible to parse TopUp confirmation msg.');}}} if(!isBalance&&!isConfirmation&&!isError){closeIfProceeds();return;} if(!DEBUGGING&&(isBalance&&(settings.waitingForBalance!==null))||(isConfirmation&&(settings.waitingForTopUp!==null))){var mobileMessageManager=window.navigator.mozMobileMessage;mobileMessageManager.delete(sms.id);} if(isBalance){var integer=balanceData[1].replace(/[^0-9]/g,'');var decimal=balanceData[2]||'0';var newBalance={balance:parseFloat(integer+'.'+decimal),currency:configuration.credit.currency,timestamp:new Date()};if(settings.waitingForBalance!==null){navigator.mozAlarms.remove(settings.waitingForBalance);debug('Balance timeout:',settings.waitingForBalance,'removed');disableSilentModeFor('balance',configuration);} ConfigManager.setOption({'lastBalance':newBalance,'waitingForBalance':null},function _onSet(){debug('Balance up to date and stored');debug('Trying to synchronize!');localStorage.sync='lastBalance#'+Math.random();sendBalanceThresholdNotification(newBalance,settings,closeIfProceeds);});}else if(isConfirmation){if(settings.waitingForTopUp!==null){navigator.mozAlarms.remove(settings.waitingForTopUp);debug('TopUp timeout:',settings.waitingForTopUp,'removed');disableSilentModeFor('topup',configuration);} ConfigManager.setOption({'waitingForTopUp':null,'lowLimitNotified':false,'zeroBalanceNotified':false},function _onSet(){debug('TopUp confirmed!');debug('Trying to synchronize!');localStorage.sync='waitingForTopUp#'+Math.random();closeIfProceeds();});}else if(isError){settings.errors.INCORRECT_TOPUP_CODE=true;navigator.mozAlarms.remove(settings.waitingForTopUp);debug('TopUp timeout: ',settings.waitingForTopUp,'removed');ConfigManager.setOption({'errors':settings.errors,'waitingForTopUp':null,'lowLimitNotified':false,'zeroBalanceNotified':false},function _onSet(){debug('Balance up to date and stored');debug('Trying to synchronize!');localStorage.sync='errors#'+Math.random();sendIncorrectTopUpNotification(closeIfProceeds);});}});});navigator.mozSetMessageHandler('networkstats-alarm',_onNetworkAlarm);navigator.mozSetMessageHandler('alarm',_onAlarm);navigator.mozSetMessageHandler('sms-sent',function _onSent(sms){clearTimeout(closing);debug('SMS sent!');var configuration=ConfigManager.configuration;var mode=ConfigManager.getApplicationMode();if(mode==='PREPAID'&&!costcontrol.isBalanceRequestSMS(sms,configuration)){costcontrol.request({type:'balance'});} if(mode==='PREPAID'&&costcontrol.isBalanceRequestSMS(sms,configuration)){closeIfProceeds();}else{var mobileMessageManager=window.navigator.mozMobileMessage;var infoRequest=mobileMessageManager.getSegmentInfoForText(sms.body);infoRequest.onsuccess=function onInfo(evt){var realCount,smsInfo=evt.target.result;if(!smsInfo||!smsInfo.segments){console.error('Invalid getSegmentInfoForText() result. Counting 1 segment');realCount=1;}else{realCount=smsInfo.segments;} updateSMSCount(realCount);};infoRequest.onerror=function onError(){console.error('Can not retrieve segment info for body '+ sms.body);updateSMSCount(1);};} function updateSMSCount(count){SimManager.requestDataSimIcc(function(dataSimIcc){ConfigManager.requestSettings(dataSimIcc.iccId,function _onSettings(settings){settings.lastTelephonyActivity.timestamp=new Date();settings.lastTelephonyActivity.smscount+=count;ConfigManager.setOption({lastTelephonyActivity:settings.lastTelephonyActivity},function _sync(){localStorage.sync='lastTelephonyActivity#'+Math.random();closeIfProceeds();});});});}});navigator.mozSetMessageHandler('telephony-call-ended',function _onCall(tcall){clearTimeout(closing);if(tcall.direction!=='outgoing'){closeIfProceeds();return;} debug('Outgoing call finished!');SimManager.requestDataSimIcc(function(dataSimIcc){ConfigManager.requestSettings(dataSimIcc.iccId,function _onSettings(settings){var mode=ConfigManager.getApplicationMode();if(mode==='PREPAID'){costcontrol.request({type:'balance'});} settings.lastTelephonyActivity.timestamp=new Date();settings.lastTelephonyActivity.calltime+=tcall.duration;ConfigManager.setOption({lastTelephonyActivity:settings.lastTelephonyActivity},function _sync(){localStorage.sync='lastTelephonyActivity#'+Math.random();closeIfProceeds();});});});});} var readyEvent=new CustomEvent('messagehandlerready');window.parent.dispatchEvent(readyEvent);});} _getCCInstance();}());