;;;(function(exports){'use strict';var unknownNumbers=[];var filterFns={contains:function(a,b){a=a.toLowerCase();b=b.toLowerCase();return a.includes(b);},equality:function(a,b){a=a.toLowerCase();b=b.toLowerCase();return a===b;}};function isMatch(contact,criteria,filterFn){var found={};outer:for(var i=0,ilen=criteria.terms.length;iinitial.length?term:initial;},'');if(filter.filterValue.length<3){filter.filterLimit=10;} lower.splice(lower.indexOf(filter.filterValue.toLowerCase()),1);lower.push.apply(lower,terms);return navigator.mozContacts.find(filter).then((contacts)=>{var results;if(terms.length>1){var fields=['tel','givenName','familyName'];if(Settings.supportEmailRecipient){fields.push('email');} var criteria={fields:fields,terms:lower};results=contacts.filter((contact)=>isMatch(contact,criteria,filterFns.contains));}else{results=contacts;} return results;}).catch((e)=>{console.error('Got an error while looking up contacts.',e.name,e);return[];});},findByString:function contacts_findByString(filterValue){return Promise.all([this.findContactByString(filterValue),this.findByUnknown(filterValue)]).then(([known,unknown])=>{return(known||[]).concat(unknown);});},findContactByString:function contacts_findContactByString(filterValue){var props=['tel','givenName','familyName'];if(Settings.supportEmailRecipient){props.push('email');} return this.findBy({filterBy:props,filterOp:'contains',filterValue:filterValue});},findByUnknown:function contacts_findByUnknown(filterValue){var list=[];for(var i=0,length=unknownNumbers.length;i2){break;} var num=unknownNumbers[i];if(num.includes(filterValue)){var obj={name:[num],tel:[{value:num}],source:'unknown'};list.push(obj);}} return Promise.resolve(list);},findExact:function contacts_findExact(filterValue){return this.findBy({filterBy:['givenName','familyName'],filterOp:'contains',filterValue:filterValue}).then((contacts)=>{var contact=contacts.length?contacts[0]:null;var criteria={fields:['name'],terms:[filterValue]};var isExact=false;if(contact){isExact=isMatch(contact,criteria,filterFns.equality);} return isExact?[contact]:[];});},findByPhoneNumber:function contacts_findByPhone(filterValue){return this.findBy({filterBy:['tel'],filterOp:'match',filterValue:filterValue.replace(/\s+/g,'')}).then((contacts)=>{if(contacts.length){return contacts;} var defer=Utils.Promise.defer();fb.getContactByNumber(filterValue,function fbByPhone(fbContact){defer.resolve(fbContact?[fbContact]:[]);},function error_fbByPhone(err){if(err.name!=='DatastoreNotFound'){console.error('Error while retrieving fb by phone: ',err.name);} defer.resolve([]);});return defer.promise;});},findByAddress:function contacts_findByAddress(fValue){if(Settings.supportEmailRecipient&&Utils.isEmailAddress(fValue)){return this.findExactByEmail(fValue);}else{return this.findByPhoneNumber(fValue);}},findExactByEmail:function contacts_findExactByEmail(fValue){return this.findBy({filterBy:['email'],filterOp:'equals',filterValue:fValue});},addUnknown:function addUnknown(number){var index=unknownNumbers.indexOf(number);if(index===-1){unknownNumbers.push(number);}},clearUnknown:function clearUnknown(){unknownNumbers.length=0;},getunknownLength:function getunknownLength(){return unknownNumbers.length;}};exports.Contacts=Contacts;}(this));