{"version":3,"sources":["app.js","module.js","idenedi.controller.js","main.controller.js","main.service.js","presence.service.js","registration.controller.js","basicinfo.controller.js","password.controller.js","primaryphone.controller.js","verification.controller.js","regcomplete.controller.js","passwordnumber.controller.js","passwordverify.controller.js","passwordchange.controller.js","registration.service.js","done.controller.js","signin.controller.js","invite.controller.js","recommendjoin.controller.js","recommendjoinemail.controller.js","joinconfirm.controller.js","verify_email.controller.js","signin.service.js","authorization.controller.js","contactinfo.service.js","utils.js","localstore.manager.js","state.manager.js","countries.js","onlydigits.directive.js","scrollbottomnotifier.directive.js","charlimit.directive.js","carousel.directive.js","countryAutocomplete.directive.js","contract.directive.js","groups.service.js","members.service.js","profile.service.js","savecard.controller.js","sharedcard.controller.js","sharedcard.service.js","statusdialog.controller.js","1module.js","contractcomplete.controller.js","smartcontract.controller.js","smartcontract.service.js","smartcontractaccept.controller.js","announcement.controller.js","announcement.service.js","comment.directive.js","sharedialog.controller.js"],"names":["angular","module","config","$routeProvider","$compileProvider","$stateProvider","$urlRouterProvider","$locationProvider","CONFIG","aHrefSanitizationWhitelist","otherwise","html5Mode","run","$rootScope","$state","LocalstoreManager","$","hide","$on","event","toState","toParams","fromState","fromParams","title","current","constant","STATE","HOME","API","RELEASE","MIXPANEL","PROVIDER_HOST","API_HOST","BLOB_HOST","SEARCH_HOST","WEB_URL","INNER_APP_URL","VERSION","URLS","MAIN","$httpProvider","MAIN_CONFIG","interceptors","push","rule","$injector","$location","path","url","length","indexOf","replace","isUserLoggedIn","name","preventDefault","go","equals","removeUserToken","subTitle","location","href","console","debug","IdenediController","$scope","StateManager","state","start","document","getElementsByTagName","className","element","find","addClass","showWaitingOverlay","showNewCardBtn","showNewGroupBtn","controller","$inject","MainController","AuthService","PresenceService","ProfileService","profileSuccess","data","presence","getLoggedInUserPresence","idenedi","changePresence","profileError","response","vm","dataLoaded","isError","presenceChangedHandler","status","PresenceStatus","Available","presenceIconClass","Busy","EnjoyingLife","AtWork","OffWork","DoNotDisturb","this","presenceList","label","cssClass","id","selectedTabIndex","tabClicked","selectTabForState","init","getUserBasicProfile","$promise","then","presenceItemClicked","presenceId","changeLoggedInUserPresence","signout","MainService","$resource","Utils","Countries","factory","presenceService","Unknown","_attachEvents","that","isCallSent","loggedInUserPresence","query","memberIdenedis","Status","$broadcast","getMembersPresence","getMemberPresence","save","EVENTS","BASIC_INFO_SUCCESS","PRIMARY_PHONE_SUCCESS","VERFICATION_SUCCESS","REGISTRATION_SUCCESS","REGISTER","PARAMS","REGISTRATION_CONFIG","templateUrl","controllerAs","reloadOnSearch","newUrl","oldUrl","RegistrationController","$stateParams","RegistrationService","GroupsService","ContactInfoService","MembersService","SmartContractService","SharedCard","changeState","newState","params","scrollTop","show","dynamicValue","CountryISOCode","registrationData","Country","PhoneNumber","PhoneNo","createRecord","contactType","PHONE","phoneCreateSuccess","phoneCreateError","SMS","navigateToScreen","showLoadingIconOnPasswordScreen","alert","resetRegistrationData","undefined","cid","getSharedCard","pid","saveMember","gid","key","type","getUserDetail","isGroupDetailsFetched","group","isGroupJoined","groupAppData","getGroupAppData","fullName","AppName","playStoreLink","PlayStoreLink","appleAppStoreLink","AppleAppStoreLink","joinGroupThroughInvitationKey","trackMixpanelEvent","client_id","getOAuthCode","response_type","redirect_uri","scope","res","param","getReponseParamsForError","changeStatusOfContract","groupId","contractId","shareKey","Profile","FirstName","showLoginLink","regStepTemplateUrl","registration","firstName","lastName","getUserCountryThroughIP","LastName","countryCode","phoneNumber","VERIFICATION_SUCCESS","VerificationCode","verificationCode","Password","password","loginClicked","changeLoginLinkVisiblity","val","RegBasicInfoController","$timeout","verifyingLink","onNextButtonClick","e","onSubmit","regForm","$valid","$emit","RegPasswordController","registrationSuccess","registrationComplete","registrationError","IdenediExceptionType","$setValidity","serverErrorMessage","Message","hasAnyError","mixpanel","track_links","register","fieldChanged","RegPrimaryPhoneController","$mdDialog","$filter","countryFetchSuccessOrError","country","getCountryNameByCode","callingCode","getCountryCallingCode","smsCodeSentSuccess","btnDisabled","trim","smsCodeSentError","log","findCallingCode","getCountryCallingCodeByName","getCountryCodeByCallingCode","selectedCountry","countries","getCountriesSortedByName","dataLimit","$watch","newValue","oldValue","sendSMSVerificationCode","fieldChange","onCountryTextChange","text","onCountryFieldBlur","selectedItemChange","item","querySearch","filter","lowercaseQuery","lowercase","toLocaleLowerCase","createFilterFor","RegVerificationController","verificationSuccess","code","getCodeVal","verificationError","clickOutsideToClose","textContent","ok","verifySMSCode","onResendCodeClick","$event","RegCompleteController","html","cleanupCB","iOSAppDownload","androidAppDownload","PasswordNumberController","passwordData","Region","Number","number","substr","passForm","form","mobileNumber","PasswordVerifyController","Code","PasswordChangeController","resetSuccess","resetError","confirmpassword","resetPassword","onSignInClick","$http","identity","smsMessage","region","postData","Identity","SMSMessage","saveUserToken","Token","defaults","headers","common","newpassword","NewPassword","DoneController","LOGIN","SIGNIN_CONFIG","SignInController","$element","$compile","countryCodeFetched","signing","selectedCallingCode","signIn","signInForm","signInSuccess","signInError","skip","resetStates","shiftTokenToTemporaryStorage","onNumberFieldChange","getCountriesSortedByCallingCode","text2","text3","signInBtnClick","goToRegistration","goToPasswordChange","InviteController","labelText","groupName","members","getGroupInviteMembers","setMemberForJoinGroup","i","TitleInGroup","displayData","getMemberCountry","getMemberProfileImageSmallUrl","RecommendJoinController","GroupSettings","GroupMembershipOption","GROUP_MEMBERSHIP_OPTION","JOIN_BY_EMAIL_ADDRESS_DOMAIN","groupType","getGroupType","groupImgUrl","ProfileImageUrl","isDataLoaded","ONLY_ADMIN_CAN_ADD","groupApproval","ANYONE_CAN_JOIN","ADMIN_APPROVAL_REQUIRED","cleanup","getMemberForJoinGroup","joinBtnClick","_group","joinGroup","RecommendJoinEmailController","domains","GroupMembershipEmailAddressDomains","domainTyped","selectedDomain","emailLimit","caretPos","email","joinForm","index","isFound","domain","substring","d","join","RegExp","compile","test","isDomainFound","domainEntered","getDomainOfEmail","domainChanged","username","temp","JoinConfirmController","appName","VerifyEmailController","isLoading","verifyEmail","forceSignIn","changePassword","newPassword","getUserDetails","get","getOAuthClient","responseType","clientId","redirectUri","verb","addTokenInHttpHeader","HttpInterceptor","$q","request","requestError","responseError","reject","AuthorizationController","userFetchSuccess","user","isUserFetched","isClientNameFetched","userFetchError","clientFetchSuccess","clientName","Name","clientFetchError","redirectToUriOnError","oauthCodeSuccess","oauthCodeError","year","Date","getFullYear","removeClass","onDiffUser","onNoThanks","onProceed","_locationContactItem","_contactItem","_phoneContactItem","contactInfoService","EMAIL","POSTAL_ADDRESS","WEBSITE","SOCIAL","contactItems","_isCardsListChanged","_isSuggestionChanged","_isLocationChanged","cardIdForNewContact","isGeoLocationChanged","setGeoLocationChanged","getContactRecords","$resolved","_data","getContactRecordsLocal","setNewOrderForContacts","newOrderList","deleteContactItem","instanceId","delete","getContactRecord","getContactRecordLocal","$index","InstanceId","updateRecord","value","partOfCards","serverObj","Label","DynamicValue","PartOfCards","update","method","replaceContactRecordLocal","setCardsListChange","setSuggestionChange","isCardsListChanged","isSuggestionChanged","getNewLocationItemObject","GeoLocationPoint","Value","City","resetLocationItemObject","getNewContactItemObject","resetContactItemObject","getNewPhoneItemObject","Type","resetPhoneItemObject","resetContactItems","addRecordsInCard","records","$window","$interval","countryCodeFromIP","tempStorage","DEVICE_IPHONE","DEVICE_ANDROID","DEVICE_WINDOWS","getProfileImageSmallUrl","getGroupImageSmallUrl","getGroupImageLargeUrl","formatIdenediId","split","splice","adjustbodyAreaHeight","resize","height","innerHeight","minHeight","css","width","innerWidth","window","off","adjustHeightOfComponent","component","otherComponent","diff","topDiff","computeHeight","otherComponentHeight","adjustMemberDetailListHeight","adjustCardDetailListHeight","adjustGroupBodyAreaHeight","adjustTabContent","openApplication","isSharedCard","device","getMobileDevice","isBrowserChrome","confirm","cancel","setTimeout","_isSharedCard","bind","isBrowserFirefox","iframe","createElement","style","visibility","src","body","appendChild","logDeviceTypeRepeatedly","navigator","userAgent","getUserToken","getFormattedDate","date","day","getDate","parseInt","toString","getMonth","getUTCFullYear","match","isOpera","opera","chrome","InstallTrigger","isBrowserSafari","Object","prototype","call","HTMLElement","isBrowserIE","documentMode","getScrollbarWidth","outer","widthNoScroll","offsetWidth","overflow","inner","widthWithScroll","parentNode","removeChild","deferred","defer","resolve","ajax","success","country_code","error","promise","str","track","version","Platform","extractUrlsFromText","appendHttpIfRequired","convertToKB","kb","toFixed","LocalStorageAlternative","setItem","setTime","getTime","expires","toGMTString","cookie","getItem","ca","c","charAt","removeItem","USER_TOKEN","temporary_token_storage","token","getStorage","JSON","stringify","parse","storageImpl","localStorage","err","_skip","prevState","_prevState","goBackToPrevScreen","pop","previousStateAvailable","service","countries_list","countries_code","sort","a","b","_callingCode","getCountryCodeByName","directive","require","restrict","link","attr","ctrl","$parsers","digits","$setViewValue","$render","$document","onScrollEndReached","onScrollUp","onScrollDown","setResetCallback","attrs","raw","prevPos","offsetHeight","scrollHeight","reset","callback","focusIf","$attrs","focus","condition","dom","$eval","focusDelay","elem","limit","charLimit","ctrlKey","which","stopImmediatePropagation","stopPropagation","on","caretpos","createTextRange","range","move","select","setSelectionRange","setCaretPosition","owlCarousel","autoPlay","singleItem","isTouched","onFieldChange","transclude","small","sharekey","groupid","contractid","datareceived","mode","adjustStatusColorAndText","daysFromStartDate","Math","abs","DaysToStartDate","daysFromEndDate","DaysFromEndDate","statusText","statusColor","CurrentStatus","errorMsg","getSmartContract","getSmartContractThroughContractId","CUSTOM_FIELDS","moment","format","hasNonEmptyValue","TEXT","DATE","SINGLE_SELECTION","MULTI_SELECTION","bindToController","GROUPS","_groupsMembers","groupService","GROUP_MEMBERSHIP_STATUS","NONE","MEMBER","ADMIN","BLOCKED","REQUEST_PENDING","_sharedData","_groupCreationData","getGroupCreationData","setGroupCreationData","GroupName","MemberIdenedis","createGroup","grpId","leaveGroup","groupMembershipStatus","localGroup","getMemberFromLocal","GroupMembershipStatus","getGroupRequests","changeGroupTitle","getGroupMembers","modifyMemberObj","getGroupMembersLocal","getGroupMemberLocal","groupMembers","Idenedi","removeGroupMemberLocal","addGroupMemberLocal","member","getSharedData","setSharedData","removeMembers","idenedis","changeMemberTitle","addMembersInGroup","deleteRecords","Records","j","getGroupInvitationDetails","GroupVisibility","MemberListVisibility","GroupApp","groupApp","MEMBERS","memberService","getUserMembersLocal","getUserMembers","requestMemberInformation","LastContactInfoRequestedOn","isMemberAvailable","updateMemberCards","cards","SharedCards","_addOrUpdateMemberInList","getSharedProfileLink","m","addMember","addMemberInLocalList","removeMember","_removeMemberFromList","_viewData","scrollPos","gridView","searchTerm","expandedMember","resetViewData","setViewDataScrollPos","setViewDataSearchTerm","setViewDataExpandedMember","setViewDataGridView","getViewDataGridView","getViewDataScrollPos","getViewDataSearchTerm","getViewDataExpandedMember","presenceClass","formattedIdenedi","IdenediType","isImageAvailable","groupLargeProfileImageUrl","profileImageUrl","updated","IsMemberHidden","PROFILE","PROFILE_CONFIG","saveAccountInfoSuccess","profileData","CountryIso","saveAccountInfoError","profileService","profileDataLoaded","UserIdenedi","formattedId","profileImageSmallUrl","isProfileImageAvailable","countryName","getUserBasicProfileLocal","saveAccountInfo","proxy","changeCountryOfUser","Config","SHARED_CARD_CONFIG","Run","SHARED_CARD","PUBLIC_PROFILE","$sce","SaveCardController","$routeParams","presenceSuccess","statusClass","PRESENCE_TYPES","PreferredOnly","Traveling","getStatusClass","presenceInfo","sharedCardData","createWhatsAppAndVegaLinks","isPrivate","markAllPrivate","record","UserTitles","userTitle","expanded","fullRecords","k","RecordInstanceIds","presenceError","isLoggedInUserSame","host","sharedCardSuccess","sharedCardError","fetchPresence","regBtnClick","onContactClick","newWindow","locals","message","customMessage","hideCloseBtn","actionBtnText","imageUrl","answer","r","click","CustomValue","SharedCardController","Title","saveContactBtnClick","countriesForBetaRelease","isCountryImageAvaiable","ProfileImageSmallUrl","sharedCardAPI","publicProfileAPI","downloadVcard","vCardInfo","phones","websites","emails","addresses","sms","PostalCode","getLastupdatedString","sharedCard","displayTime","Expiration","timeLeft","TimeToExpire","ExpiredOn","NormalExpiryDate","ModifiedOn","StatusDialogController","toUpperCase","ContractCompleteController","SmartContractController","canAcceptOrReject","rejectBtnClick","acceptBtnClick","dataReceived","SmartContract","api","SmartContractAcceptReject","contract","hideCancelButton","disableRejectBtn","confirmBtnClick","LastActivityOn","cancelBtnClick","AnnouncementController","AnnouncementService","tags","errTitle","errMsg","annDate","youtubeLink","linkPreviewData","firstLink","footerTitle","footerDesc","footerIOSLink","footerAndroidLink","footerQrCodePAth","getAnnouncement","aid","urls","ExtraData","jsonData","Data","VideoTitle","getLinkPreview","VideoURL","image","DefaultThumbnail","description","FileExtension","uppercase","FileSize","DownloadURL","today","PostedOn","PostedByTitle","Description","qr","qrcode","addData","make","getElementById","innerHTML","createImgTag","createAndInsertQrCode","AppDownloadLink","onShareClick","recordingUrl","trustAsResourceUrl","$sanitize","tag","doctype","msg","aId","getAnnouncementComments","top","afterCommentId","getGroupTags","commentdata","calculateCommentTime","commentDate","commentTime","fromNow","timerPromise","isDefined","ShareController","$mdToast","showInput","clipboardJs","ClipboardJS","simple","position","hideDelay","destroy"],"mappings":"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,OACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,MACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,UACAgC,KAAA,KAAAhC,YAAA,UACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,UACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,WACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,UACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,UACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,UACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SAEAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,OACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,UACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,MACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,QACAgC,KAAA,KAAAhC,YAAA,UACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SACAgC,KAAA,KAAAhC,YAAA,SAGAW,IAAAqB,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,kBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,mBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,wBAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,2BAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,sBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,iBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,IAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,mBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,6BAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,qBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,4BAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,0CAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,iBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,kBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,mBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,QAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,QAAAhN,KAAA,uBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,sBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,gCAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,kBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,qBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,kBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,kCAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,8BAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,QAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,SAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,uBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,qCAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,2BAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,kBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,+CAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,qBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,oCAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,yBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,QAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,yBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,kBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,mBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,6BAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,oCAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,qBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,uBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,iBAAAgP,KAAA,KAAAhC,YAAA,QAAAhN,KAAA,0BAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,8BAAAgP,KAAA,KAAAhC,YAAA,QAAAhN,KAAA,qCAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,0BAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,iBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,iBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,oBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,iBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,yBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,8BAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,iCAAAgP,KAAA,KAAAhC,YAAA,KAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,gBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,SAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,wBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,iBAAAgP,KAAA,KAAAhC,YAAA,QAAAhN,KAAA,6BAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,yBAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,mBAAAgP,KAAA,KAAAhC,YAAA,IAAAhN,KAAA,kBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,eAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,YAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,cAAAgP,KAAA,KAAAhC,YAAA,MAAAhN,KAAA,aAAAgP,KAAA,KAAAhC,YAAA,QAAAhN,KAAA,yBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,sBAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,UAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,WAAAgP,KAAA,KAAAhC,YAAA,OAAAhN,KAAA,aACA2N,EAAAA,EAAAqX,KAAA,SAAAC,EAAAC,GACA,OAAAD,EAAAjY,YAAAkY,EAAAlY,YACA,EACAiY,EAAAjY,aAAAkY,EAAAlY,YACA,GACA,IAKA7J,KAAA2P,gCAAA,WACA,OAAAnF,EAAAqX,KAAA,SAAAC,EAAAC,GACA,OAAAD,EAAAjY,YAAAkY,EAAAlY,YACA,EACAiY,EAAAjY,aAAAkY,EAAAlY,YACA,GACA,KAIA7J,KAAAyK,yBAAA,WACA,OAAAD,EAAAqX,KAAA,SAAAC,EAAAC,GACA,OAAAD,EAAAjlB,KAAAklB,EAAAllB,KACA,EACAilB,EAAAjlB,MAAAklB,EAAAllB,KACA,GACA,KAIAmD,KAAA8J,sBAAA,SAAA+B,GACA,IAAA,IAAA0E,EAAA,EAAAA,EAAAqR,EAAAnlB,OAAA8T,IACA,GAAAqR,EAAArR,GAAA1E,MAAAA,EACA,OAAA+V,EAAArR,GAAA1G,YAAAI,OAEA,MAAA,IAGAjK,KAAAsK,4BAAA,SAAAT,GACA,IAAAmY,EAAAnY,EAAAI,OAEA+X,GADAA,EAAAA,EAAArlB,QAAA,MAAA,KACAA,QAAA,MAAA,IAEA,IAAA,IAAA4T,EAAA,EAAAA,EAAA/F,EAAA/N,OAAA8T,IACA,GAAA/F,EAAA+F,GAAA1G,YAAAI,QAAA+X,EACA,OAAAxX,EAAA+F,GAAA1E,KAAA5B,OAEA,MAAA,IAGAjK,KAAA4J,qBAAA,SAAAiC,GAEA,IAAA,IAAA0E,EAAA,EAAAA,EAAAoR,EAAAllB,OAAA8T,IAEA,GAAAoR,EAAApR,GAAA1E,MAAAA,EACA,OAAA8V,EAAApR,GAAA1T,KAEA,MAAA,IAGAmD,KAAAiiB,qBAAA,SAAAplB,GACAA,EAAAA,EAAA4O,oBAEA,IAAA,IAAA8E,EAAA,EAAAA,EAAAoR,EAAAllB,OAAA8T,IACA,GAAAoR,EAAApR,GAAA1T,KAAA4O,qBAAA5O,EACA,OAAA8kB,EAAApR,GAAA1E,KAEA,MAAA,IAGA7L,KAAAqK,4BAAA,SAAAxN,GAEA,QAAA+H,IADA/H,OAAA+H,GAAA/H,EAAAA,EAAAoN,OAAApN,IACA,IAAAA,EACA,MAAA,GACAA,EAAAA,EAAA4O,oBAEA,IAAA,IAAA8E,EAAA,EAAAA,EAAA/F,EAAA/N,OAAA8T,IACA,GAAA/F,EAAA+F,GAAA1T,KAAA4O,qBAAA5O,EACA,OAAA2N,EAAA+F,GAAA1G,YAEA,MAAA,MAtiBA,GCCAtQ,QAAAC,OAAA,aAAA0oB,UAAA,aAAA,WACA,OACAC,QAAA,UACAC,SAAA,IACAC,KAAA,SAAA/b,EAAAvI,EAAAukB,EAAAC,GAaAA,EAAAC,SAAArmB,KAZA,SAAA6L,GACA,GAAAA,EAAA,CACA,IAAAya,EAAAza,EAAArL,QAAA,UAAA,IAMA,OAJA8lB,IAAAza,IACAua,EAAAG,cAAAD,GACAF,EAAAI,WAEAvF,SAAAqF,EAAA,WCZAlpB,QAAAC,OAAA,aAAA0oB,UAAA,wBAAA,YAAA,SAAAU,GACA,OACAR,SAAA,IACA9b,OACAuc,mBAAA,IACAC,WAAA,IACAC,aAAA,IACAC,iBAAA,KAEAX,KAAA,SAAA/b,EAAAvI,EAAAklB,GACA,IAAAC,EAAAnlB,EAAA,GACAolB,EAAA,EACAplB,EAAAoe,KAAA,SAAA,WACA+G,EAAAxf,UAAA,GAAAwf,EAAAxf,UAAAwf,EAAAE,cAAAF,EAAAG,aAAA,IACA/c,EAAAuc,qBAEA,GAAAM,GAAAA,EAAAD,EAAAxf,UAAA,EACA4C,EAAAwc,aAEAK,EAAAD,EAAAxf,UAAA,GACA4C,EAAAyc,eAEAI,EAAAD,EAAAxf,YAGA4C,EAAAgd,MAAA,WACAH,EAAA,GAGA7c,EAAA0c,kBAAAO,SAAAjd,EAAAgd,aC/BA,WAmCA,SAAAE,EAAAtb,GAgBA,OACAka,SAAA,IACAC,KAjBA,SAAA7kB,EAAAsR,EAAA2U,GAOA,SAAAC,EAAAC,GACAA,GACAzb,EAAA,WACA0b,EAAAF,SACAlmB,EAAAqmB,MAAAJ,EAAAK,aAAA,GAVA,IAAAF,EAAA9U,EAAA,GACA2U,EAAAD,QACAhmB,EAAAmN,OAAA8Y,EAAAD,QAAAE,GAEAA,GAAA,KAxCAnqB,QAAAC,OAAA,aAAA0oB,UAAA,YAAA,WACA,OACAE,SAAA,IACAC,KAAA,SAAA/b,EAAAyd,EAAAd,GACA,IAAAe,EAAA5G,SAAA6F,EAAAgB,WACAF,EAAA5H,KAAA,UAAA,SAAAzhB,GACA,GAAAA,EAAAwpB,UAAA,IAAAxpB,EAAAypB,OAAA,IAAAzpB,EAAAypB,OAAA,IAAAzpB,EAAAypB,OAAA,IAAAzpB,EAAAypB,OAAA,IAAAzpB,EAAAypB,QACA,IAAAzpB,EAAAypB,OAAA,GAAAzpB,EAAAypB,OACAzpB,EAAAypB,OAAA,IAAAzpB,EAAAypB,OAAA,IACA,GAAAzpB,EAAAypB,YAIA,GAAAH,GAAAhkB,KAAA8X,MAAArb,OAOA,OANA/B,EAAAoC,iBACApC,EAAA0pB,2BACA1pB,EAAA2pB,kBAEArkB,KAAA8X,MAAA9X,KAAA8X,MAAAnF,UAAA,EAAAqR,IAEA,IAIAzqB,QAAAwE,QAAAgmB,GAAAO,GAAA,QAAA,SAAA5pB,GACAA,EAAAoC,uBAKAvD,QAAAC,OAAA,aAAA0oB,UAAA,UAAAsB,GAEAA,EAAAllB,SAAA,YAwBA/E,QAAAC,OAAA,aAAA0oB,UAAA,QAAA,WAkBA,OACA5b,OAAAie,SAAA,KACAlC,KAAA,SAAA/b,EAAAvI,EAAAklB,GAEA3c,EAAAqE,OAAA,WAAA,SAAAC,EAAAC,IApBA,SAAAkZ,EAAA1R,GACA,GAAA,OAAA0R,EACA,GAAAA,EAAAS,gBAAA,CACA,IAAAC,EAAAV,EAAAS,kBACAC,EAAAC,KAAA,YAAArS,GACAoS,EAAAE,cAEAZ,EAAAa,mBACAb,EAAAL,QACAK,EAAAa,kBAAAvS,EAAAA,IAEA0R,EAAAL,QAWAmB,CAAA9mB,EAAA,GAAA6M,SAjFA,GCCArR,QAAAC,OAAA,aAAA0oB,UAAA,YAAA,YAAA,SAAAzI,GAEA,OACAnT,SACA5D,YAAA,mCACA0f,SAAA,IACAzlB,SAAA,EACA0lB,KAAA,SAAA/b,EAAAyd,EAAAd,QAMAre,GAAArK,EAAA,aAAAuqB,YACAvqB,EAAA,aAAAuqB,aACAC,SAAA,IACAC,YAAA,IAGAvL,EAAA,gBACA7U,GAAArK,EAAA,aAAAuqB,aACAvqB,EAAA,aAAAuqB,aACAC,SAAA,IACAC,YAAA,IAGA3nB,QAAA8M,IAAA,mBACA,IAAA,QC3BA5Q,QAAAC,OAAA,aAAA0oB,UAAA,sBAAA,WA0BA,OACA5b,OACAuD,YAAA,IACAxK,QAAA,IACA4lB,UAAA,IACAC,cAAA,KAEAxiB,YAAA,8CACA0f,SAAA,IACA/jB,YAjCA,YAAA,SAAA,SAAA8C,EAAA3D,GAEAwC,KAEAqL,YAAA,SAAA1J,GACA,IAAA6I,EAAArJ,EAAAwO,kCAEA,OADAhO,EAAA6I,EAAAc,OAIA,SAAA3J,GACA,IAAA4J,EAAAhS,QAAAiS,UAAA7J,GAEA,OAAA,SAAAjE,GACA,IAAAuN,EAAAvN,EAAAmM,YACA+F,EAAA,IAAAlS,EAAAmM,YACAgG,EAAA,KAAAnS,EAAAmM,YACA,OAAA,IAAAoB,EAAAvO,QAAA6O,IAAA,IAAAqE,EAAAlT,QAAA6O,IAAA,IAAAsE,EAAAnT,QAAA6O,IAXAG,CAAA/J,IAAA6I,KA4BA7H,aAAA,KACAwiB,YAAA,EAEA9C,KAAA,SAAA/b,EAAAyd,EAAAd,QCvCA1pB,QAAAC,OAAA,aAAA0oB,UAAA,YAAA,uBAAA,SAAA7e,GAsGA,OACAiD,OACA8e,MAAA,IACAC,SAAA,IACAC,QAAA,IACAC,WAAA,IACAC,aAAA,IACAC,KAAA,KAEA/iB,YAAA,mCACA0f,SAAA,IACA/jB,YAhHA,SAAA,uBAAA,iBAAA,SAAA,QAAA,SAAAb,EAAA6F,EAAAD,EAAA/I,EAAA6G,GAwDA,SAAAwkB,EAAA9mB,GACA,IAAA+mB,EAAAC,KAAAC,IAAAzI,SAAAxe,EAAAknB,kBACAC,EAAA3I,SAAAxe,EAAAonB,iBAOA,GALAxoB,EAAA2B,GAAA8mB,WAAA,GACAzoB,EAAA2B,GAAA+mB,YAAA,QACAthB,GAAApH,EAAA2B,GAAAqmB,cACAhoB,EAAA2B,GAAAqmB,cAAA5mB,KAAAA,IAEA,WAAAA,EAAAunB,cAGA,OAFA3oB,EAAA2B,GAAA+mB,YAAA,OACA1oB,EAAA2B,GAAA8mB,WAAA,WAIA,YAAArnB,EAAAunB,eAAA,cAAAvnB,EAAAunB,eACA3oB,EAAA2B,GAAA+mB,YAAA,EACA1oB,EAAA2B,GAAA8mB,WAAArnB,EAAAunB,eAEAR,GAAA,GAAAI,GAAA,EACA,WAAAnnB,EAAAunB,eACA3oB,EAAA2B,GAAA+mB,YAAA,EACA1oB,EAAA2B,GAAA8mB,WAAA,WACA,YAAArnB,EAAAunB,gBACA3oB,EAAA2B,GAAA+mB,YAAA,EACA1oB,EAAA2B,GAAA8mB,WAAA,YAGAN,EAAA,EACA,WAAA/mB,EAAAunB,eACA3oB,EAAA2B,GAAA+mB,YAAA,EACA1oB,EAAA2B,GAAA8mB,WAAA,WACA,YAAArnB,EAAAunB,gBACA3oB,EAAA2B,GAAA+mB,YAAA,EACA1oB,EAAA2B,GAAA8mB,WAAA,YAEAF,EAAA,IACAvoB,EAAA2B,GAAA+mB,YAAA,EACA1oB,EAAA2B,GAAA8mB,WAAA,WA7FAzoB,EAAA4oB,SAAA,iDACA5oB,EAAA2B,GAAAC,YAAA,EACA5B,EAAA2B,GAAAE,SAAA,EACA7B,EAAA2S,UAAA,GACA3S,EAAA2B,GAAA8mB,WAAA,GACAzoB,EAAA2B,GAAA+mB,YAAA,GACA1oB,EAAA2B,GAAAwgB,YAAAze,EAAAye,YAEAvc,EAAAgC,cAAA5H,EAAA2B,GAAAmmB,SAAA5kB,SAAAC,KAAA,SAAA/B,GACApB,EAAA2S,UAAAvR,EAAAkI,QAAAC,UACA,KAAAvJ,EAAA2B,GAAAsmB,KACApiB,EAAAgjB,iBAAA7oB,EAAA2B,GAAAkmB,SAAA7nB,EAAA2B,GAAAmmB,SAAA3kB,KAAA,SAAA/B,GACApB,EAAA2B,GAAAC,YAAA,EACA5B,EAAA2B,GAAAE,SAAA,EACA7B,EAAA2B,GAAAP,KAAAA,EACA8mB,EAAA9mB,IACA,SAAA2H,GACA/I,EAAA2B,GAAAE,SAAA,EACA7B,EAAA2B,GAAAC,YAAA,EACA,oBAAAmH,EAAA3H,KAAAkK,sBACAzO,EAAA0C,GAAA,sBAGA,KAAAS,EAAA2B,GAAAsmB,MACApiB,EAAAijB,kCAAA9oB,EAAA2B,GAAAomB,WAAA/nB,EAAA2B,GAAAmmB,SAAA3kB,KAAA,SAAA/B,GACApB,EAAA2B,GAAAC,YAAA,EACA5B,EAAA2B,GAAAE,SAAA,EACA7B,EAAA2B,GAAAP,KAAAA,EACA8mB,EAAA9mB,IACA,SAAA2H,GACA/I,EAAA2B,GAAAE,SAAA,EACA7B,EAAA2B,GAAAC,YAAA,EACA,oBAAAmH,EAAA3H,KAAAkK,uBACAtL,EAAA4oB,SAAA,+BAKA,WACA5oB,EAAA2B,GAAAE,SAAA,EACA7B,EAAA2B,GAAAC,YAAA,IAGA5B,EAAA+oB,cAAAljB,EAAAkjB,cAEA/oB,EAAAwf,iBAAA,SAAAC,GACA,OAAAuJ,OAAAvJ,EAAA,YAAAwJ,OAAA,gBAEAjpB,EAAAkpB,iBAAA,SAAA9nB,GACA,OAAAyE,EAAAkjB,cAAAI,MAAA/nB,EAAAua,MAAA9V,EAAAkjB,cAAAK,MAAAhoB,EAAAua,OAAA,IAAAva,EAAAia,QAEAxV,EAAAkjB,cAAAM,kBAAAjoB,EAAAua,MAAA9V,EAAAkjB,cAAAO,iBAAAloB,EAAAua,OAAAva,EAAAia,MAAApc,OAAA,KA6DAkG,aAAA,KACAokB,kBAAA,EACA1E,KAAA,SAAA7kB,EAAAumB,EAAAd,SlCpHA1pB,QAAAC,OAAA,aACA,aACA,YACA,YACA,YAEAyB,SAAA,gBAEAa,MACAkrB,OAAA,cmCVA,WAIA,SAAA9jB,EAAA9I,EAAA6G,EAAAmC,EAAAlC,EAAAC,EAAApH,GACA,IACAktB,KAgBAC,GACAC,yBAPAC,KAAA,OACAC,OAAA,SACAC,MAAA,QACAC,QAAA,UACAC,gBAAA,kBAIAzW,yBAdAO,mBAAA,kBACAE,gBAAA,gBACAC,wBAAA,wBACAT,6BAAA,4BAYAyW,eACAR,eAAAA,EACA1lB,cAuZA,WACA,IAAAC,EAAAxB,KACA5F,EAAAK,IAAA,wBAAA,WACA+G,EAAAkmB,mBAAA,KACAlmB,EAAAylB,kBACAzlB,EAAAkmB,yBA3ZAA,mBAvBA,KAwBAC,qBAyWA,WACA,OAAA3nB,KAAA0nB,oBAzWAE,qBA4WA,SAAA7sB,EAAAqV,GACA,MAAApQ,KAAA0nB,qBACA1nB,KAAA0nB,uBACA1nB,KAAA0nB,mBAAAG,UAAA9sB,EACAiF,KAAA0nB,mBAAAI,eAAA1X,GA/WA2X,YAqVA,SAAAlrB,EAAAuT,GACA,IACA4H,KAMA,OALAA,EAAA6P,UAAAhrB,EACAmb,EAAA8P,eAAA1X,EAGAlP,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,eAAAyG,KAAA+V,EAEA,SAAApZ,GACA,OAAAA,GAEA,SAAAM,GACA,OAAAA,KAlWA4S,UA8PA,SAAAkW,EAAA9iB,EAAAoN,GACA,IACA9V,EAAA,GASA,OARAA,EAAAzC,EAAAqB,IAAAI,SAAA,cAAAwsB,EAAA,mBAEApjB,GAAAM,IACA1I,GAAA,kBAAA0I,QACAN,GAAA0N,GAAAA,EAAA7V,OAAA,IACAD,GAAA,iBAAA8V,GAEApR,EAAAoT,uBACArT,EAAAzE,GAAAyF,QAEA,SAAArD,GACA,OAAAA,GAGA,SAAAM,GACA,OAAAA,KA/QA8G,8BAmRA,SAAAgiB,EAAA9iB,GAGA,OAAAjE,EAAAlH,EAAAqB,IAAAI,SAAA,cAAAwsB,EAAA,6BAAA9iB,GAAAjD,QAEA,SAAArD,GACA,OAAAA,GAGA,SAAAM,GACA,OAAAA,KA5RA+oB,WAgUA,SAAA3iB,GAGA,OADApE,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,cAAA8J,EAAAvG,QAAA,eAAAyY,UAEA,SAAA5Y,GACA0G,EAAA4iB,sBAAA,OACA,IAAAC,EAAA/kB,EAAAglB,mBAAA9iB,EAAAvG,SAIA,OAHAopB,IACAA,EAAAE,sBAAA/iB,EAAA4iB,uBAEAtpB,GAEA,SAAAM,GACA,OAAAA,KA7UAopB,iBA8OA,SAAAvpB,GAGA,OADAmC,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,cAAAuD,EAAA,YAAA4C,MAEA,SAAA/C,GACA,OAAAA,GAEA,SAAAM,GACA,OAAAA,KAtPAqpB,iBA6NA,SAAAnoB,EAAArF,GAGA,OADAmG,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,cAAA4E,EAAA,mBAAArF,GAAAkH,KAEA,SAAArD,GACA,IAAA0G,EAAAlC,EAAAglB,mBAAAhoB,GAGA,OAFA,MAAAkF,IACAA,EAAAI,SAAA3K,GACA6D,GAEA,SAAAM,GACA,OAAAA,KAxOAspB,gBAgMA,SAAApoB,GACA,IAAAoB,EAAAxB,KAEA,OADAkB,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,cAAA4E,EAAA,WAAAuB,MAEA,SAAA/C,UACAA,EAAA8B,gBACA9B,EAAAqY,UAEA,IAAA,IAAA1G,KAAA3R,EACAA,EAAA2R,GAAAnN,EAAAqlB,gBAAA7pB,EAAA2R,IACA,MAAA3R,EAAA2R,GAAAC,eACA,UAAA5R,EAAA2R,GAAA8X,sBACAzpB,EAAA2R,GAAAC,aAAA,SAEA5R,EAAA2R,GAAAC,aAAA,SAMA,OADAhP,EAAAylB,eAAA7mB,GAAAxB,EACAA,GAEA,SAAAM,GACA,OAAAA,KAvNAwpB,qBAyLA,SAAAtoB,GACA,YAAAwE,GAAAqiB,EAAA7mB,GACA6mB,EAAA7mB,OA1LAuoB,oBA6KA,SAAAX,EAAAjpB,GACA,QAAA6F,GAAAqiB,EAAAe,GAAA,CACA,IAAAY,EAAA3B,EAAAe,GACA,IAAA,IAAAzX,KAAAqY,EACA,GAAAA,EAAArY,GAAAsY,SAAA9pB,EACA,OAAA6pB,EAAArY,GAGA,OAAA,MApLAuY,uBAkKA,SAAAd,EAAAjpB,GACA,QAAA6F,GAAAqiB,EAAAe,GAAA,CACA,IAAAY,EAAA3B,EAAAe,GACA,IAAA,IAAAzX,KAAAqY,EACAA,EAAArY,GAAAsY,SAAA9pB,GACA6pB,EAAAxO,OAAA7J,EAAA,KAtKAwY,oBA0JA,SAAAf,EAAAgB,QACApkB,GAAAqiB,EAAAe,IACAf,EAAAe,GACA7rB,KAAA6sB,IA5JAC,cAqJA,WACA,OAAAjpB,KAAAynB,aArJAyB,cAgJA,SAAAlhB,GACAhI,KAAAynB,YAAAzf,GAhJAmhB,cA+HA,SAAAnB,EAAAoB,GACA,IAAA5nB,EAAAxB,KAEA,OADAkB,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,cAAAwsB,EAAA,WAAAxQ,QAAAzY,QAAAqqB,GAEA,SAAAxqB,GACA,IAAA,IAAA2R,KAAA6Y,EACA5nB,EAAAsnB,uBAAAd,EAAAoB,EAAA7Y,IAEA,OAAA3R,GAEA,SAAAM,GACA,OAAAA,KA1IAmqB,kBA+GA,SAAArB,EAAAjpB,EAAAhE,GACA,IAAAyG,EAAAxB,KAEA,OADAkB,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,wCAAA4E,GAAA4nB,EAAAjpB,QAAAA,IAAAqZ,QAAAC,OAAA,SAAAD,OAAArd,EAEA,SAAA6D,GAGA,OAFA4C,EAAAmnB,oBAAAX,EAAAjpB,GACAyR,aAAAzV,EACA6D,GAEA,SAAAM,GACA,OAAAA,KAzHAoqB,kBAqFA,SAAAhkB,EAAA8K,GAEAlP,EAAAoT,uBACA,IAAA8U,KACA,IAAA,IAAA7Y,KAAAH,EACAgZ,EAAAjtB,KAAAiU,EAAAG,GAAAsY,SAEA,OAAA5nB,EAAAlH,EAAAqB,IAAAI,SAAA,cAAA8J,EAAAujB,QAAA,WAAA5mB,KAAAmnB,EAEA,SAAAxqB,GASA,OADAqoB,EAAA3hB,EAAAujB,YACAjqB,GAEA,SAAAM,GACA,OAAAA,KAzGAkY,uBAkWA,SAAA9R,EAAA+R,GAGA,OADAnW,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,cAAA8J,EAAAujB,QAAA,iBAAA5mB,KAAAoV,EACA,SAAAzY,GAEA,OADAA,GAGA,SAAAM,GACA,OAAAA,KA1WAqqB,cA8WA,SAAAjkB,EAAAiU,GAGA,OADArY,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,cAAA8J,EAAAujB,QAAA,WAAArR,QAAAD,WAAAgC,GAEA,SAAA3a,GACA,IAAA,IAAA2R,KAAAjL,EAAAkkB,QACA,IAAA,IAAAC,KAAAlQ,EACAjU,EAAAkkB,QAAAjZ,GAAAqH,YAAA2B,EAAAkQ,IACAnkB,EAAAkkB,QAAApP,OAAA7J,EAAA,GAIA,OAAA3R,GAEA,SAAAM,GACA,OAAAA,KA7XA2Y,aA+DA,SAAAmQ,EAAA5nB,EAAAF,EAAA4X,EAAAC,GAEA7W,EAAAoT,uBAEA,IAAA0D,KAKA,OAJAA,EAAAC,MAAA/X,EACA8X,EAAAE,aAAAJ,EACAE,EAAAG,YAAAJ,EAEA9W,EAAAlH,EAAAqB,IAAAI,SAAA,gCAAAwsB,MAAAA,EAAA5nB,GAAAA,IAAAgY,QAAAC,OAAA,SAAAD,OAAAJ,EAEA,SAAApZ,GACA,OAAAA,GAEA,SAAAM,GACA,OAAAA,KA7EAwqB,0BA+CA,SAAA1B,EAAA9iB,GAGA,OAAAjE,EAAAlH,EAAAqB,IAAAI,SAAA,cAAAwsB,EAAA,WAAA9iB,GAAA8O,IAEA,SAAApV,GAGA,cAFAA,EAAA8B,gBACA9B,EAAAqY,UACArY,GAEA,SAAAM,GACA,OAAAA,KAzDAmR,sBA0CA,SAAA2X,EAAA9iB,GACA,OAAAjE,EAAAlH,EAAAqB,IAAAI,SAAA,cAAAwsB,EAAA,qBAAA9iB,GAAAvD,SA1CAuP,aA6BA,SAAA5L,GACA,MAAA,UAAAA,EAAAuL,cAAA8Y,iBAAA,eAAArkB,EAAAuL,cAAA+Y,qBACA,YACA,cAAAtkB,EAAAuL,cAAA8Y,iBAAA,eAAArkB,EAAAuL,cAAA+Y,qBACA,UACA,cAAAtkB,EAAAuL,cAAA8Y,iBAAA,UAAArkB,EAAAuL,cAAA+Y,qBACA,SACA,cAAAtkB,EAAAuL,cAAA8Y,iBAAA,aAAArkB,EAAAuL,cAAA+Y,qBACA,YAEA,IAtCAnkB,gBAMA,SAAAH,GACA,IAAA1G,GACA+G,QAAA,UACAE,cAAA,+EACAE,kBAAA,iEAGA,GAAAT,GAAAA,EAAAuL,eAAAvL,EAAAuL,cAAAgZ,SAAA,CACA,IAAAC,EAAAxkB,EAAAuL,cAAAgZ,SACAC,EAAAnkB,UACA/G,EAAA+G,QAAAmkB,EAAAnkB,SAEAmkB,EAAAjkB,gBACAjH,EAAAiH,cAAAikB,EAAAjkB,eAEAikB,EAAA/jB,oBACAnH,EAAAmH,kBAAA+jB,EAAA/jB,mBAGA,OAAAnH,IArBA,OADAsoB,EAAA3lB,gBACA2lB,EAxDA3tB,QAAAC,OAAA,aAAA4H,QAAA,gBAAA8B,GAEAA,EAAA5E,SAAA,aAAA,YAAA,iBAAA,QAAA,YAAA,UAHA,GnCCA/E,QAAAC,OAAA,cACA,aACA,YACA,YACA,YAEAyB,SAAA,iBAEAa,MACAiuB,QAAA,eoCVA,WAIA,SAAA3mB,EAAAnC,EAAA7G,EAAA8G,EAAAC,EAAApH,GACA,IASAiwB,GACAzoB,cAqQA,WACA,IAAAC,EAAAxB,KACA5F,EAAAK,IAAA,wBAAA,WACA+G,EAAA4O,QAAA,KACA5O,EAAAwnB,OAAA,QAxQAiB,oBAiFA,WACA,OAAAjqB,KAAAoQ,SAjFA8Z,eAiLA,WACA,IAAA1oB,EAAAxB,KAEA,OADAkB,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,eAAAmG,MAEA,SAAA/C,GACA4C,EAAA4O,QAAAxR,EACA,IAAA,IAAA4T,KAAAhR,EAAA4O,QACA,GAAA,YAAAoC,GAAA,aAAAA,EAAA,CACA,IAAAwW,EAAAxnB,EAAA4O,QAAAoC,GACAwW,EAAAxnB,EAAAinB,gBAAAO,GAGA,OAAAxnB,EAAA4O,SAGA,SAAA7J,GACA,OAAAA,KAjMAnB,cAqMA,SAAArG,GACA,IAAAyC,EAAAxB,KAEA,OADAkB,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,aAAAuD,GAAAiV,IAEA,SAAApV,GACA,IAAAoqB,EAAApqB,EAEA,OADAoqB,EAAAxnB,EAAAinB,gBAAAO,IAIA,SAAAziB,GACA,OAAAA,KAhNA4jB,yBAoKA,SAAAnB,EAAAjqB,GACA,OAAAkC,EAAAlH,EAAAqB,IAAAI,SAAA,eAAAuD,EAAA,qBAAAkD,KACA,SAAArD,GAEA,OADAoqB,EAAAoB,2BAAA,IAAAzU,KACA/W,GAEA,SAAA2H,GACA,OAAAA,KA1KA8jB,kBA4JA,SAAAtrB,GACA,IAAA,IAAAwR,KAAAvQ,KAAAoQ,QACA,GAAApQ,KAAAoQ,QAAAG,GAAAsY,SAAA9pB,EACA,OAAA,EAEA,OAAA,GAhKAqpB,mBAmJA,SAAArpB,GACA,IAAA,IAAAwR,KAAAvQ,KAAAoQ,QACA,GAAApQ,KAAAoQ,QAAAG,GAAAsY,SAAA9pB,EACA,OAAAiB,KAAAoQ,QAAAG,GAEA,OAAA,MAvJA+Z,kBAiFA,SAAAtB,EAAAuB,GACA,IAAA/oB,EAAAxB,KACA,OAAAiB,EAAAlH,EAAAqB,IAAAI,SAAA,eAAAwtB,EAAAH,YAAAzQ,QAAAC,OAAA,SAAAD,OAAAmS,EAEA,SAAA3rB,GAKA,OAJAoqB,EAAAwB,YAAAD,EACA/oB,EAAAipB,yBAAAzB,GAGApqB,GAEA,SAAA2H,GACA,OAAAA,KA5FAmkB,qBA0PA,SAAA3rB,GACA,OAAAhF,EAAAqB,IAAAO,QAAA,QAAAoD,GA1PA4S,sBA+HA,WACA,OAAA3R,KAAAgpB,QA/HA1Y,sBA0HA,SAAAqa,GACA3qB,KAAAgpB,OAAA2B,GA1HAC,UA6FA,SAAA5B,GACA,IAAAxnB,EAAAxB,KACA,OAAAiB,EAAAlH,EAAAqB,IAAAI,SAAA,kBAAA4c,QAAAC,OAAA,SAAAD,QAAA4Q,EAAAH,SAEA,SAAAjqB,GAEA,OADA4C,EAAAipB,yBAAAzB,GACApqB,GAEA,SAAA2H,GACA,OAAAA,KArGAskB,qBAyGA,SAAA7B,GACAhpB,KAAAyqB,yBAAAzB,IAzGA8B,aA+HA,SAAA/rB,GACA,IAAAyC,EAAAxB,KACA,OAAAiB,EAAAlH,EAAAqB,IAAAI,SAAA,mBAAAgc,QAAApX,GAAArB,GAEA,SAAAH,GAEA,OADA4C,EAAAupB,sBAAAhsB,GACAH,GAEA,SAAA2H,GACA,OAAAA,KAvIAykB,WArBAC,UAAA,EACAC,UAAA,EACAC,WAAA,GACAC,eAAA,IAmBAC,cAkBA,WACArrB,KAAAgrB,WACAC,UAAA,EACAC,UAAA,EACAC,WAAA,GACAC,eAAA,KAtBAE,qBA0BA,SAAAtjB,GACAhI,KAAAgrB,YACAhrB,KAAAgrB,cACAhrB,KAAAgrB,UAAAC,UAAAjjB,GA5BAujB,sBA+BA,SAAAvjB,GACAhI,KAAAgrB,YACAhrB,KAAAgrB,cACAhrB,KAAAgrB,UAAAG,WAAAnjB,GAjCAwjB,0BAoCA,SAAAxjB,GACAhI,KAAAgrB,YACAhrB,KAAAgrB,cACAhrB,KAAAgrB,UAAAI,eAAApjB,GAtCAyjB,oBAyCA,SAAAzjB,GACAhI,KAAAgrB,YACAhrB,KAAAgrB,cACAhrB,KAAAgrB,UAAAE,SAAAljB,GA3CA0jB,oBA8CA,WACA,OAAA1rB,KAAAgrB,UAAAE,UA9CAS,qBAiDA,WACA,OAAA3rB,KAAAgrB,UAAAC,WAjDAW,sBAoDA,WACA,OAAA5rB,KAAAgrB,UAAAG,YApDAU,0BAuDA,WACA,OAAA7rB,KAAAgrB,UAAAI,gBAvDAL,sBAiGA,SAAAhsB,GACA,IAAA,IAAAwR,KAAAvQ,KAAAoQ,QACA,GAAApQ,KAAAoQ,QAAAG,GAAAsY,SAAA9pB,EAAA,CACAiB,KAAAoQ,QAAAgK,OAAA7J,EAAA,GAGA,QAtGAkY,gBAmNA,SAAAO,GAmBA,OAlBAA,EAAA8C,cAAA,cACA9C,EAAA+C,iBAAA7qB,EAAAgZ,gBAAA8O,EAAAH,cACAjkB,GAAAokB,EAAAliB,UACAkiB,EAAAtjB,SAAAsjB,EAAAliB,QAAAC,UAAA,IAAAiiB,EAAAliB,QAAAQ,UACA,cAAA0hB,EAAAgD,cACAhD,EAAAliB,QAAA/C,QAAA5C,EAAAyI,qBAAAof,EAAAliB,QAAAjD,iBAEAmlB,EAAAiD,kBAAA,EACA,MAAAjD,EAAAliB,QAAAsK,kBACA4X,EAAAiD,kBAAA,GACA,cAAAjD,EAAAgD,cACAhD,EAAAliB,QAAAsK,gBAAAlQ,EAAAyP,8BAAAqY,EAAAliB,QAAAsK,kBACA,SAAA4X,EAAAgD,cACAhD,EAAAkD,0BAAAhrB,EAAA+Y,sBAAA+O,EAAAliB,QAAAsK,iBACA4X,EAAAliB,QAAAsK,gBAAAlQ,EAAA8Y,sBAAAgP,EAAAliB,QAAAsK,kBAEA4X,EAAAmD,gBAAAnD,EAAAliB,QAAAsK,gBACA4X,EAAAjqB,QAAAiqB,EAAAH,QACAG,GArOAyB,yBA8LA,SAAAzB,GACA,GAAA,MAAAhpB,KAAAoQ,QACApQ,KAAAoQ,SAAA4Y,OACA,CACA,IAAAoD,GAAA,EACA,IAAA,IAAA7b,KAAAvQ,KAAAoQ,QACA,GAAApQ,KAAAoQ,QAAAG,GAAAsY,SAAAG,EAAAH,QAAA,CACAG,EAAAqD,gBAAA,EACArsB,KAAAoQ,QAAAG,GAAAyY,EACAoD,GAAA,EACA,MAGAA,IACApD,EAAAqD,gBAAA,EACArsB,KAAAoQ,QAAAjU,KAAA6sB,OAxMA,OAFAgB,EAAAzoB,gBAEAyoB,EA7CAzwB,QAAAC,OAAA,cAAA4H,QAAA,iBAAAgC,GAEAA,EAAA9E,SAAA,YAAA,aAAA,QAAA,YAAA,UAHA,GpCCA/E,QAAAC,OAAA,eACA,aACA,YAIA,YACA,YAEAyB,SAAA,kBAEAa,MACAwwB,QAAA,eAiBAnyB,KAAA,aACA,YACA,oBACA,SACA,iBACA,SAAAC,EAAAkC,EAAAhC,EAAAP,EAAAwyB,OqCnCA,WAIA,SAAA7tB,EAAAuC,EAAA7G,EAAA8G,EAAAC,EAAApH,GAgDA,SAAAyyB,EAAA5tB,GACAoB,KAAAysB,YAAA1lB,UAAAnI,EAAAmI,UACA/G,KAAAysB,YAAAnlB,SAAA1I,EAAA0I,SACAtH,KAAAysB,YAAA5oB,eAAAjF,EAAA8tB,WAGA,SAAAC,EAAApmB,IArDA,IAEAqmB,GACArrB,cAqEA,WACA,IAAAC,EAAAxB,KACA5F,EAAAK,IAAA,wBAAA,WACA+G,EAAAqrB,mBAAA,EACArrB,EAAAirB,YAAA,QAxEAI,mBAHA,EAIAJ,YALA,KAMAhsB,oBAaA,WACA,IAAAe,EAAAxB,KAEA,OADAkB,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,aAAAwY,IACA,SAAApV,GACA4C,EAAAqrB,mBAAA,EACA,IAAA3V,EAAAtY,EASA,OARAsY,EAAAnY,QAAAH,EAAAkuB,YACA5V,EAAA6V,YAAA7rB,EAAAgZ,gBAAAtb,EAAAkuB,aACA5V,EAAA8V,qBAAA9rB,EAAA6Y,wBAAAnb,EAAAwS,iBACA8F,EAAA+V,wBAAA,MAAAruB,EAAAwS,gBACA8F,EAAAgW,YAAA/rB,EAAAyI,qBAAAhL,EAAAiF,gBACAqT,EAAA7D,SAAAzU,EAAAmI,UAAA,IAAAnI,EAAA0I,SACA4P,EAAArT,eAAAjF,EAAAiF,eACArC,EAAAirB,YAAAvV,EACAA,GAEA,SAAAhY,GACA,OAAAA,KA9BAiuB,yBAQA,WACA,OAAAntB,KAAAysB,aARAW,gBAiCA,SAAAjmB,EAAAC,EAAAyE,GACA,IAAAjN,GAAAmI,UAAAI,EAAAG,SAAAF,EAAAslB,WAAA7gB,GAEA,OAAA5K,EAAAlH,EAAAqB,IAAAG,cAAA,qBAAA0G,KAAArD,EAAArE,EAAA8yB,MAAAb,EAAAxsB,MAAA2sB,IAnCAW,oBAgDA,SAAA/lB,GACA,IAAA/F,EAAAxB,KAEA,OADAkB,EAAAoT,uBACArT,EAAAlH,EAAAqB,IAAAI,SAAA,wCAAA4E,GAAAmH,IAAA6Q,QAAAC,OAAA,SAAAD,UAEA,SAAAxZ,GAGA,OAFA4C,EAAAirB,YAAA5oB,eAAA0D,EACA3I,GAGA,SAAAM,GACA,OAAAA,MAvDA,OADA0tB,EAAArrB,gBACAqrB,EAjBArzB,QAAAC,OAAA,eAAA4H,QAAA,iBAAA1C,GAEAA,EAAAJ,SAAA,YAAA,aAAA,QAAA,YAAA,UAHA,GrCAA,WAiCA,SAAAivB,EAAA7zB,EAAAE,EAAAE,EAAA0zB,GACA5zB,EACA8D,MAAA,cACAlB,IAAA,UACAkG,YAAA,iCACArE,WAAA,uBACAsE,aAAA,KACAC,gBAAA,EACA7H,MAAA,gBAEA2C,MAAA,iBACAlB,IAAA,UACAkG,YAAA,iCACArE,WAAA,uBACAsE,aAAA,KACAC,gBAAA,EACA7H,MAAA,YAEA2C,MAAA,YACAlB,IAAA,iBACAkG,YAAA,+BACArE,WAAA,qBACAsE,aAAA,KACAC,gBAAA,EACA7H,MAAA,cAEA2C,MAAA,eACAlB,IAAA,oBACAkG,YAAA,+BACArE,WAAA,qBACAsE,aAAA,KACAC,gBAAA,EACA7H,MAAA,iBAKA,SAAA0yB,EAAArzB,EAAAkC,EAAAhC,GACAF,EAAAK,IAAA,uBAAA,SAAAC,EAAAmI,EAAAC,MAtEAvJ,QAAAC,OAAA,kBACA,aACA,aACA,aACA,UACA,cAEAyB,SAAA,sBACAa,MACA4xB,YAAA,MACAC,eAAA,SAGAl0B,OAAA8zB,GACApzB,IAAAszB,GAEAl0B,QAAAC,OAAA,kBAAA8R,OAAA,WAAA,OAAA,SAAAsiB,GACA,OAAA,SAAAxwB,GAIA,OAFA,MADAA,EAAAogB,MAAA,mBAEApgB,EAAA,UAAAA,GACAA,MAIAmwB,EAAAjvB,SACA,iBACA,iBACA,oBACA,sBAuCAmvB,EAAAnvB,SAAA,aAAA,YAAA,qBArEA,GsCCA,WAoBA,SAAAuvB,EACAzzB,EACAoD,EACAlB,EACAjC,EACA2I,EACA8qB,EACAtkB,EACAlG,EACA5E,EACAwC,EACAC,EACA7G,EACAmD,EACA1D,GAyCA,SAAAg0B,EAAAnvB,GAKA,GAJApB,EAAAwwB,YAyDA,SAAAzuB,GACA,OAAAA,GAAA+D,EAAA2qB,eAAA3sB,QACA,UACA/B,GAAA+D,EAAA2qB,eAAAxuB,UACA,YACAF,GAAA+D,EAAA2qB,eAAAtuB,KACA,OACAJ,GAAA+D,EAAA2qB,eAAAruB,aACA,eACAL,GAAA+D,EAAA2qB,eAAApuB,OACA,SACAN,GAAA+D,EAAA2qB,eAAAluB,aACA,eACAR,GAAA+D,EAAA2qB,eAAAC,cACA,gBACA3uB,GAAA+D,EAAA2qB,eAAAE,UACA,YAEA,UA3EAC,CAAAxvB,EAAAiD,QACArE,EAAA+B,OAAAX,EAAAiD,OACAwsB,EAAAzvB,EACA0vB,EAAA9E,QAAAlmB,EAAAirB,2BAAAD,EAAA9E,SACA7N,EAAA,EA+CA,WACA,IAAA,IAAApL,KAAA+d,EAAA9E,QACA8E,EAAA9E,QAAAjZ,GAAAie,WAAA,EAhDAC,GAeA,IAAA,IAAAle,KAAA+d,EAAA9E,QAAA,CACA,IAAAkF,EAAAJ,EAAA9E,QAAAjZ,GACA,IAAA,IAAAkZ,KAAA6E,EAAAK,WAAA,CACA,IAAAC,EAAAN,EAAAK,WAAAlF,GAEAmF,EAAAC,SADA,GAAApF,OAKA7kB,GAAAgqB,EAAAE,cACAF,EAAAE,gBAEA,IAAA,IAAAC,KAAAH,EAAAI,kBACAJ,EAAAI,kBAAAD,IAAAL,EAAA9W,aACA8W,EAAAF,WAAA,EACAI,EAAAE,YAAA3yB,KAAAuyB,MAqDAlxB,EAAA0S,UAAA,wCAAAoe,EAAAxnB,QAAAC,UAAA,IAAAunB,EAAAxnB,QAAAQ,SAAA,6BACA9J,EAAA8wB,eAAAA,EACA9wB,EAAAuvB,YAAA7rB,EAAAgZ,gBAAAoU,EAAAzF,SACArrB,EAAAmM,QAAAxI,EAAAyI,qBAAA0kB,EAAAxnB,QAAAjD,gBACA1E,EAAAE,SAAA,EACAF,EAAAC,YAAA,EA/CA,SAAA6vB,EAAArwB,GACAO,EAAAE,SAAA,EACAF,EAAAC,YAAA,EAuHA,SAAAsgB,EAAAtiB,GACA,GAAAA,EAAA,CAEA,MADAA,EAAAogB,MAAA,mBACA,GAAApgB,EAAAV,QAAA,UAAA,GAAAU,EAAAV,QAAA,UAAA,GAAAU,EAAAV,QAAA,aACAU,EAAA,UAAAA,GAEA,OAAAA,EArNAhD,EAAAW,MAAAV,EAAAW,QAAAD,MAEA,IAAAoE,EAAAa,KACAI,EAAA4C,EAAA5C,GACAub,EAAA,YAAAthB,EAAAW,QAAA6B,KAEAyxB,EAAA,KACAD,EAAA,KACA7wB,EAAA0xB,oBAAA,EACA1xB,EAAAzC,MAAA,eACAyC,EAAA8wB,eAAA,KACA9wB,EAAAme,aAAAA,EACAne,EAAA2xB,KAAAp1B,EAAAqB,IAAAI,SAAA,aACAgC,EAAA+B,OAAA,GACA/B,EAAAwwB,YAAA,GAEA7uB,EAAAC,YAAA,EACAD,EAAAE,SAAA,EAEAF,EAAAqB,KAAA,WACA8C,EAAAwB,cAAA1E,EAAAub,GAAA,GACAjb,SAAAC,KAAAyuB,EAAAC,IAMA,IAAAD,EAAA,SAAAxwB,IACA,EACA0vB,EAAA1vB,EACA0E,EAAAgsB,cAAAhB,EAAAzF,SAAAloB,KAAAotB,EAAAkB,IAGAI,EAAA,SAAAnwB,IACA,EACAC,EAAAE,SAAA,EACAF,EAAAC,YAAA,GAwJAD,EAAAqB,OAEAhD,EAAAsS,eAAA,WACA6L,EACAthB,EAAA0C,GAAA,SAAA8H,IAAAzE,EAAA2E,IAAA,OAEA1K,EAAA0C,GAAA,SAAA8H,IAAA,KAAAE,IAAA3E,KAEA5C,EAAA+xB,YAAA,WACA5T,EACAthB,EAAA0C,GAAA,sBAAA8H,IAAAzE,EAAA2E,IAAA,OAEA1K,EAAA0C,GAAA,sBAAA8H,IAAA,KAAAE,IAAA3E,KAeA5C,EAAAgyB,eAAA,SAAA90B,EAAA0F,EAAAhD,EAAAsxB,EAAAe,GAEA,GADAryB,EAAAsiB,EAAAtiB,GACAI,EAAA+B,QAAA+D,EAAA2qB,eAAAtuB,KACAjF,EAAAoC,iBACA0M,EAAA7F,MACA+rB,QACA30B,MAAA,OACA40B,QAAA,qCACAC,cAAAvB,EAAAplB,QACA4mB,cAAA,EACAC,cAAA,UACA1yB,KAAAA,EACAqyB,UAAAA,EACAf,OAAAA,EACAnvB,OAAA/B,EAAA+B,OACAwwB,SAAAzB,EAAAxnB,QAAAsK,iBAEA/S,WAAA,yBACA2N,qBAAA,EACAtJ,YAAA,qCAEA/B,KAAA,SAAAqvB,GACAxmB,EAAAwS,UACA,WACAxS,EAAAwS,gBAGA,GAAAxe,EAAA+B,QAAA+D,EAAA2qB,eAAAluB,aACArF,EAAAoC,iBACA0M,EAAA7F,MACA+rB,QACA30B,MAAA,gBACA40B,QAAA,gCACAC,cAAAvB,EAAAplB,QACA4mB,cAAA,EACAC,cAAA,KACA1yB,KAAAA,EACAqyB,UAAAA,EACAf,OAAAA,EACAnvB,OAAA/B,EAAA+B,OACAwwB,SAAAzB,EAAAxnB,QAAAsK,iBAEA/S,WAAA,yBACA2N,qBAAA,EACAtJ,YAAA,qCAEA/B,KAAA,SAAAqvB,GACAxmB,EAAAwS,UACA,WACAxS,EAAAwS,gBAGA,GAAAxe,EAAA+B,QAAA+D,EAAA2qB,eAAAC,cAAA,CACA,IAAA+B,EAAA3B,EAAA9E,QAAA,GAIA,GAHA9uB,EAAAoC,iBAGAsD,GAAA6vB,EAAArY,WAEA,YADArd,EAAA,IAAA6F,GAAA,GAAA8vB,QAIA,SAAAD,EAAA9W,MACA/b,EAAA,OAAA6yB,EAAApX,MACA4W,GAAA,GAEA,OAAAQ,EAAA9W,MACA/b,EAAA,OAAA6yB,EAAApX,MACA4W,GAAA,GAEA,SAAAQ,EAAA9W,MACA/b,EAAA,UAAA6yB,EAAApX,MACA4W,GAAA,GAEA,iBAAAQ,EAAA9W,MACA/b,EAAA,iCAAA6yB,EAAArX,iBAAA,OAAAqX,EAAArX,iBAAA,QACA6W,GAAA,GAEA,YAAAQ,EAAA9W,MAAA,QAAA8W,EAAA9W,MACA/b,EAAA6yB,EAAAE,YACAV,GAAA,IAGAryB,EAAAsiB,EAAAuQ,EAAApX,OACA4W,GAAA,GAGAjmB,EAAA7F,MACA+rB,QACA30B,MAAA,kBACA40B,QAAA,mCACAC,cAAAvB,EAAAplB,QACA4mB,cAAA,EACAC,cAAA,UACA1yB,KAAAA,EACAqyB,UAAAA,EACAf,OAAAuB,EACA1wB,OAAA/B,EAAA+B,OACAwwB,SAAAzB,EAAAxnB,QAAAsK,iBAEA/S,WAAA,yBACA2N,qBAAA,EACAtJ,YAAA,qCAEA/B,KAAA,SAAAqvB,GACAxmB,EAAAwS,UACA,WACAxS,EAAAwS,gBAGAxe,EAAA+B,QAAA+D,EAAA2qB,eAAAE,WACAzzB,EAAAoC,iBACA0M,EAAA7F,MACA+rB,QACA30B,MAAA,YACA40B,QAAA,qCACAC,cAAAvB,EAAAplB,QACA4mB,cAAA,EACAC,cAAA,UACA1yB,KAAAA,EACAqyB,UAAAA,EACAf,OAAAA,EACAnvB,OAAA/B,EAAA+B,OACAwwB,SAAAzB,EAAAxnB,QAAAsK,iBAEA/S,WAAA,yBACA2N,qBAAA,EACAtJ,YAAA,qCAEA/B,KAAA,SAAAqvB,GACAxmB,EAAAwS,UACA,WACAxS,EAAAwS,YAIAzhB,EAAA,IAAA6F,GAAA,GAAA8vB,SAlYA32B,QAAAC,OAAA,kBAAA6E,WAAA,qBAAAwvB,GAEAA,EAAAvvB,SACA,aACA,SACA,YACA,SACA,eACA,eACA,YACA,aACA,iBACA,QACA,YACA,oBACA,eACA,UAjBA,GCAA,WAmBA,SAAA8xB,EACAh2B,EACAoD,EACAlB,EACAjC,EACA2I,EACA8qB,EACAtkB,EACAlG,EACA5E,EACAwC,EACAC,EACA7G,EACAmD,EACA1D,GAyCA,SAAAg0B,EAAAnvB,GACApB,EAAAwwB,YAgCA,SAAAzuB,GACA,OAAAA,GAAA+D,EAAA2qB,eAAA3sB,QACA,UACA/B,GAAA+D,EAAA2qB,eAAAxuB,UACA,YACAF,GAAA+D,EAAA2qB,eAAAtuB,KACA,OACAJ,GAAA+D,EAAA2qB,eAAAruB,aACA,eACAL,GAAA+D,EAAA2qB,eAAApuB,OACA,SACAN,GAAA+D,EAAA2qB,eAAAluB,aACA,eACAR,GAAA+D,EAAA2qB,eAAAC,eAAA3uB,GAAA+D,EAAA2qB,eAAAnuB,QACA,gBACAP,GAAA+D,EAAA2qB,eAAAE,UACA,YAEA,UAlDAC,CAAAxvB,EAAAiD,QACArE,EAAA+B,OAAAX,EAAAiD,QAAAyB,EAAA2qB,eAAAnuB,QAAAwD,EAAA2qB,eAAAC,cAAAtvB,EAAAiD,OACAwsB,EAAAzvB,EACA0vB,EAAA9E,QAAAlmB,EAAAirB,2BAAAD,EAAA9E,SA2DA,WAKA,GAJAhsB,EAAA0S,UAAA,wCAAAoe,EAAAxnB,QAAAC,UAAA,IAAAunB,EAAAxnB,QAAAQ,SAAA,6BACA9J,EAAA8wB,eAAAA,EACA9wB,EAAAuvB,YAAA7rB,EAAAgZ,gBAAAoU,EAAAzF,SACArrB,EAAAmM,QAAAxI,EAAAyI,qBAAA0kB,EAAAxnB,QAAAjD,gBACA8X,EACA,GAAA2S,EAAAK,WAAAlyB,OAAA,EAAA,CACA,IAAA1B,EAAA,GAEAA,EADA,MAAAuzB,EAAAK,WAAA,GAAA0B,MACA,SAEA/B,EAAAK,WAAA,GAAA0B,MAEA7yB,EAAAoxB,UAAA7zB,EAAA,MAAAuzB,EAAAK,WAAA,GAAA9G,eAEArqB,EAAAoxB,UAAA,eAGApxB,EAAAoxB,UAAA,UAEAzvB,EAAAE,SAAA,EACAF,EAAAC,YAAA,EAjEAqR,GAGA,SAAAwe,EAAArwB,GACAO,EAAAE,SAAA,EACAF,EAAAC,YAAA,EA2EA,SAAAsgB,EAAAtiB,GACA,GAAAA,EAAA,CAEA,MADAA,EAAAogB,MAAA,mBACA,GAAApgB,EAAAV,QAAA,UAAA,GAAAU,EAAAV,QAAA,UAAA,GAAAU,EAAAV,QAAA,aACAU,EAAA,UAAAA,GAEA,OAAAA,EAhJAhD,EAAAW,MAAAV,EAAAW,QAAAD,MAEA,IAAAoE,EAAAa,KACAI,EAAA4C,EAAA5C,GACAub,EAAA,cAAAthB,EAAAW,QAAA6B,KAEAyxB,EAAA,KACAD,EAAA,KACA7wB,EAAA0xB,oBAAA,EACA1xB,EAAAzC,MAAA,eACAyC,EAAA8wB,eAAA,KACA9wB,EAAAme,aAAAA,EACAne,EAAA+B,OAAA,GACA/B,EAAAwwB,YAAA,GAEA7uB,EAAAC,YAAA,EACAD,EAAAE,SAAA,EAEAF,EAAAqB,KAAA,WACA8C,EAAAwB,cAAA1E,EAAAub,GAAA,GACAjb,SAAAC,KAAAyuB,EAAAC,IAMA,IAAAD,EAAA,SAAAxwB,IACA,EACA0vB,EAAA1vB,EACA0E,EAAAgsB,cAAAhB,EAAAzF,SAAAloB,KAAAotB,EAAAkB,IAGAI,EAAA,SAAAnwB,IACA,EACAC,EAAAE,SAAA,EACAF,EAAAC,YAAA,GA2FAD,EAAAqB,OAEAhD,EAAAoU,aAAA,WACAvX,EAAA0C,GAAA,sBAAA8H,IAAA,KAAAE,IAAA,QAEAvH,EAAA8yB,oBAAA,WACA3U,EACAthB,EAAA0C,GAAA,YAAAqD,GAAAA,IAEA/F,EAAA0C,GAAA,eAAAqD,GAAAA,KAWA5C,EAAAgyB,eAAA,SAAA90B,EAAA0F,EAAAhD,EAAAsxB,EAAAe,GAEA,GADAryB,EAAAsiB,EAAAtiB,GACAI,EAAA+B,QAAA+D,EAAA2qB,eAAAtuB,KACAjF,EAAAoC,iBACA0M,EAAA7F,MACAtF,WAAA,yBACAqE,YAAA,mCACAsJ,qBAAA,EACA0jB,QACA30B,MAAA,OACA40B,QAAA,qCACAC,cAAAvB,EAAAplB,QACA4mB,cAAA,EACAC,cAAA,UACA1yB,KAAAA,EACAqyB,UAAAA,EACAf,OAAAA,EACAnvB,OAAA/B,EAAA+B,OACAwwB,SAAAzB,EAAAxnB,QAAAsK,mBAGAzQ,KAAA,SAAAqvB,GACAxmB,EAAAwS,UACA,WACAxS,EAAAwS,gBAGA,GAAAxe,EAAA+B,QAAA+D,EAAA2qB,eAAAluB,aACArF,EAAAoC,iBACA0M,EAAA7F,MACAtF,WAAA,yBACAqE,YAAA,mCACAsJ,qBAAA,EACA0jB,QACA30B,MAAA,gBACA40B,QAAA,gCACAC,cAAAvB,EAAAplB,QACA4mB,cAAA,EACAC,cAAA,KACA1yB,KAAAA,EACAqyB,UAAAA,EACAf,OAAAA,EACAnvB,OAAA/B,EAAA+B,OACAwwB,SAAAzB,EAAAxnB,QAAAsK,mBAGAzQ,KAAA,SAAAqvB,GACAxmB,EAAAwS,UACA,WACAxS,EAAAwS,gBAGA,GAAAxe,EAAA+B,QAAA+D,EAAA2qB,eAAAC,cAAA,CACA,IAAA+B,EAAA3B,EAAA9E,QAAA,GAGA,GAFA9uB,EAAAoC,iBAEAsD,GAAA6vB,EAAArY,WAEA,YADArd,EAAA,IAAA6F,GAAA,GAAA8vB,QAIA,SAAAD,EAAA9W,MACA/b,EAAA,OAAA6yB,EAAApX,MACA4W,GAAA,GAEA,OAAAQ,EAAA9W,MACA/b,EAAA,OAAA6yB,EAAApX,MACA4W,GAAA,GAEA,SAAAQ,EAAA9W,MACA/b,EAAA,UAAA6yB,EAAApX,MACA4W,GAAA,GAEA,iBAAAQ,EAAA9W,MACA/b,EAAA,iCAAA6yB,EAAArX,iBAAA,OAAAqX,EAAArX,iBAAA,QACA6W,GAAA,GAEA,YAAAQ,EAAA9W,MAAA,QAAA8W,EAAA9W,MACA/b,EAAA6yB,EAAAE,YACAV,GAAA,IAGAryB,EAAAsiB,EAAAuQ,EAAApX,OACA4W,GAAA,GAGAjmB,EAAA7F,MACAtF,WAAA,yBACAqE,YAAA,mCACAsJ,qBAAA,EACA0jB,QACA30B,MAAA,kBACA40B,QAAA,mCACAC,cAAAvB,EAAAplB,QACA4mB,cAAA,EACAC,cAAA,UACA1yB,KAAAA,EACAqyB,UAAAA,EACAf,OAAAuB,EACA1wB,OAAA/B,EAAA+B,OACAwwB,SAAAzB,EAAAxnB,QAAAsK,mBAGAzQ,KAAA,SAAAqvB,GACAxmB,EAAAwS,UACA,WACAxS,EAAAwS,gBAGAxe,EAAA+B,QAAA+D,EAAA2qB,eAAAE,WACAzzB,EAAAoC,iBACA0M,EAAA7F,MACAtF,WAAA,yBACAqE,YAAA,mCACAsJ,qBAAA,EACA0jB,QACA30B,MAAA,YACA40B,QAAA,qCACAC,cAAAvB,EAAAplB,QACA4mB,cAAA,EACAC,cAAA,UACA1yB,KAAAA,EACAqyB,UAAAA,EACAf,OAAAA,EACAnvB,OAAA/B,EAAA+B,OACAwwB,SAAAzB,EAAAxnB,QAAAsK,mBAGAzQ,KAAA,SAAAqvB,GACAxmB,EAAAwS,UACA,WACAxS,EAAAwS,YAIAzhB,EAAA,IAAA6F,GAAA,GAAA8vB,SA3TA32B,QAAAC,OAAA,kBAAA6E,WAAA,uBAAA+xB,GACAA,EAAA9xB,SACA,aACA,SACA,YACA,SACA,eACA,eACA,YACA,aACA,iBACA,QACA,YACA,oBACA,eACA,UAhBA,GCDA,WAIA,SAAAgF,EAAArC,EAAA3E,EAAAkY,EAAA5G,EAAA1M,EAAAC,EAAApH,GAEA,IAAAw2B,GAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,MAwBA,OArBAtC,gBACA3sB,QAAA,UACA7B,UAAA,YACAE,KAAA,OACAC,aAAA,eACAC,OAAA,SACAC,QAAA,UACAC,aAAA,eACAmuB,cAAA,gBACAC,UAAA,YACAruB,QAAA,WAEA0wB,uBAmDA,SAAA7mB,GAEA,OAAA,GADA4mB,EAAA7zB,QAAAiN,IAnDA7E,cAuDA,SAAA1E,EAAAub,EAAA/e,GAWA,SAAAwyB,EAAAxwB,GACA,IAAAsY,EAAAtY,EAIA,OAHAsY,EAAA6V,YAAA7rB,EAAAgZ,gBAAAtb,EAAAiqB,SACA3R,EAAApQ,QAAA2pB,qBAAAvvB,EAAA6Y,wBAAAnb,EAAAkI,QAAAsK,iBACA8F,EAAApQ,QAAAomB,YAAA/rB,EAAAyI,qBAAAhL,EAAAkI,QAAAjD,gBACAqT,EAEA,SAAAmY,EAAAnwB,GACA,OAAAA,EAlBA,IAAAwxB,EAAA32B,EAAAqB,IAAAI,SAAA,2BAAA,EAAA,OAAA,SACAm1B,EAAA52B,EAAAqB,IAAAI,SAAA,iBAKA,OAJAoB,GACAsE,EAAAoT,uBAGAqH,EACA1a,EAAAyvB,GAAA1c,KAAA5T,GAAAA,GAAAgvB,EAAAC,GAEApuB,EAAA0vB,GAAA3c,KAAA5T,GAAAA,GAAAgvB,EAAAC,IAhEAuB,cA6FA,SAAAhyB,GACA,IAAAiyB,KACAA,EAAA9xB,QAAAH,EAAAmuB,YACA8D,EAAAnrB,SAAA9G,EAAAkI,QAAAC,UAAA,IAAAnI,EAAAkI,QAAAQ,SACAupB,EAAAC,UACAD,EAAAE,YACAF,EAAAG,UACAH,EAAAI,aACAJ,EAAAK,OAIA,IAAA,IAFA3X,EAAA3a,EAAA4qB,QAEAjZ,EAAA,EAAAA,EAAAgJ,EAAA9c,OAAA8T,IAAA,CACA,IAAAme,EAAAnV,EAAAhJ,GACA,SAAAme,EAAAvV,KACA0X,EAAAC,OAAA30B,KAAAuyB,EAAA7V,OACA,WAAA6V,EAAAvV,KACA0X,EAAAE,SAAA50B,KAAAuyB,EAAA7V,OACA,SAAA6V,EAAAvV,KACA0X,EAAAG,OAAA70B,KAAAuyB,EAAA7V,OACA,iBAAA6V,EAAAvV,KACA0X,EAAAI,UAAA90B,MAAA2c,KAAA4V,EAAA5V,KAAAD,MAAA6V,EAAA7V,MAAAsY,WAAAzC,EAAAyC,WAAAptB,QAAA2qB,EAAA3qB,UACA,OAAA2qB,EAAAvV,MACA0X,EAAAK,IAAA/0B,KAAAuyB,EAAA7V,OAIA,MAAA,cAAAte,EAAAiM,MAAAqqB,IAvHAO,qBA2HA,SAAAC,GACA,IAAAC,EAAA,GACA,GAAA,MAAAD,EAAAE,WACA,GAAA,SAAAF,EAAAE,WAAA1vB,OAAA,CACA,IAAA2vB,EAAAH,EAAAE,WAAAE,aACA,GAAA,GAAAD,EAAA90B,QAAA,KAGA,MAAA,8BAFA40B,EAAA,8BAAAE,EAAA,GAAA,cAIA,GAAA,iBAAAH,EAAAE,WAAA1vB,OAAA,CACA,IAAAob,EAAA,IAAAtH,KAAA0b,EAAAE,WAAAG,WACAJ,EAAA,mBAAApwB,EAAA8b,iBAAAC,OACA,gBAAAoU,EAAAE,WAAA1vB,QACAob,EAAA,IAAAtH,KAAA0b,EAAAE,WAAAG,WACAJ,EAAA,mBAAApwB,EAAA8b,iBAAAC,KAEAA,EAAA,IAAAtH,KAAA0b,EAAAE,WAAAI,kBACAL,EAAA,mBAAApwB,EAAA8b,iBAAAC,SAEA,MAAAoU,EAAAO,aACA3U,EAAA,IAAAtH,KAAA0b,EAAAO,YACAN,EAAA,mBAAApwB,EAAA8b,iBAAAC,IAGA,OAAAqU,GAnJAtsB,WA2EA,SAAAjG,GACA,IAAA4xB,EAAA52B,EAAAqB,IAAAI,SAAA,mBAKA,OAHA0F,EAAAoT,uBAGArT,EAAA0vB,GAAAvwB,GAAArB,IAAAqZ,QAAAC,OAAA,SAAAD,OAEA,SAAAxZ,GACAvB,QAAA8M,IAAA,YAEA,SAAAjL,GACA7B,QAAA8M,IAAA,YAtFAokB,2BAsBA,SAAAhV,GACA,IAAA,IAAAhJ,KAAAgJ,EAAA,CACA,IAAAzB,EAAAyB,EAAAhJ,GAAAsI,MACAf,EAAApb,QAAA,mBAAA,GAGAob,EAAA,KADAA,GADAA,EAAAA,EAAAnb,QAAA,iBAAA,KACAA,QAAA,IAAA,KAEA4c,EAAAhJ,GAAA4I,KAAA,WACAI,EAAAhJ,GAAA4f,YAAA5W,EAAAhJ,GAAAsI,MAAAlc,QAAA,IAAA,IACA4c,EAAAhJ,GAAAsI,MAAAf,GAEAA,EAAApb,QAAA,qCAAA,IAGAob,EAAA,KADAA,GADAA,EAAAA,EAAAnb,QAAA,mCAAA,KACAA,QAAA,IAAA,KAEA4c,EAAAhJ,GAAA4I,KAAA,OACAI,EAAAhJ,GAAA4f,YAAA5W,EAAAhJ,GAAAsI,MAAAlc,QAAA,IAAA,IACA4c,EAAAhJ,GAAAsI,MAAAf,GAIA,OAAAyB,GA1CA+V,cAKA,SAAAlvB,GACA,IAAA0e,EAAAtK,EAAAsK,QACAtiB,EAAAzC,EAAAqB,IAAAI,SAAA,oBAWA,OAVAyF,EAAAzE,GAAAwX,KAAA5T,GAAAA,GAEA,SAAAxB,GACA,IAAAsY,EAAAtY,EACAkgB,EAAAC,QAAA7H,IAEA,SAAAhY,GACA4f,EAAAlK,OAAA1V,EAAAN,KAAAqK,WAGA6V,EAAAM,UA5CA7lB,QAAAC,OAAA,kBAAA4H,QAAA,aAAAkC,GAEAA,EAAAhF,SAAA,YAAA,YAAA,KAAA,QAAA,QAAA,YAAA,UAHA,GCCA,WAmBA,SAAAuzB,EAAAr0B,EAAAgM,EAAAzO,EAAA40B,EAAAC,EAAAC,EAAAC,EAAA1yB,EAAAqyB,EAAAf,EAAAnvB,EAAAwwB,EAAAzsB,GACA9F,EAAAzC,MAAAA,EACAyC,EAAAmyB,QAAAA,EACAnyB,EAAAoyB,cAAAA,EACApyB,EAAAqyB,aAAAA,EACAryB,EAAAsyB,cAAAA,EAAAgC,cACAt0B,EAAAJ,KAAAA,EACAI,EAAAiyB,UAAAA,EACAjyB,EAAAuyB,SAAAA,EAGAF,IACAryB,EAAAJ,KAAA,IAaAI,EAAAwyB,OAAA,SAAAhoB,GACAxK,EAAAiyB,UACAl1B,EAAA,oBAAA,GAAA21B,QAEA31B,EAAA,qBAAA,GAAA21B,QAEA1mB,EAAAhP,KAAAwN,IAGAxK,EAAAwe,OAAA,WACAxS,EAAAwS,UArDAziB,QAAAC,OAAA,kBAAA6E,WAAA,yBAAAwzB,GAEAA,EAAAvzB,SACA,SACA,YACA,QACA,UACA,gBACA,eACA,gBACA,OACA,YACA,SACA,SACA,WACA,cAhBA,GCDA,WAsBA,SAAAivB,EAAA7zB,EAAAE,EAAAE,EAAA0zB,GACA5zB,EACA8D,MAAA,iBACAlB,IAAA,mCACAkG,YAAA,uCACArE,WAAA,0BACAsE,aAAA,KACAC,gBAAA,EACA7H,MAAA,mBAEA2C,MAAA,kBACAlB,IAAA,oCACAkG,YAAA,0CACArE,WAAA,4BACAsE,aAAA,KACAC,gBAAA,EACA7H,MAAA,oBAEA2C,MAAA,kBACAlB,IAAA,oCACAkG,YAAA,0CACArE,WAAA,4BACAsE,aAAA,KACAC,gBAAA,EACA7H,MAAA,oBAEA2C,MAAA,oBACAlB,IAAA,gEACAkG,YAAA,0CACArE,WAAA,6BACAsE,aAAA,KACAC,gBAAA,EACA7H,MAAA,sBArDAxB,QAAAC,OAAA,qBACA,aACA,aACA,aACA,UACA,cAEAyB,SAAA,sBACAa,UAIArC,OAAA8zB,GAEAA,EAAAjvB,SACA,iBACA,iBACA,oBACA,sBAnBA,GCAA,WAIA,SAAAyzB,EAAAv0B,EAAAnD,EAAAD,EAAA4I,EAAA9B,EAAA5G,GACAkD,EAAAmJ,QAAA3D,EAAA2D,QACAnJ,EAAAoJ,WAAA5D,EAAA4D,WAEApJ,EAAAzC,MAAAiI,EAAAjI,MACAR,EAAA,aAAAgS,KAAAvJ,EAAA9F,UASA5C,EAAA2C,kBAEA,IAAAuP,EAAApS,EAAAK,IAAA,oBAAA,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACAJ,EAAAoC,mBAGAU,EAAA/C,IAAA,WAAA,WACA+R,MAGAhP,EAAAiP,eAAA,WACAvL,EAAA+E,mBAAA,kCAGAzI,EAAAkP,mBAAA,WACAxL,EAAA+E,mBAAA,mCAhCA1M,QAAAC,OAAA,qBAAA6E,WAAA,6BAAA0zB,GAEAA,EAAAzzB,SAAA,SAAA,SAAA,aAAA,eAAA,QAAA,qBAHA,GCAA,WAqBA,SAAA0zB,EACA53B,EACAoD,EACAlB,EACAjC,EACA2I,EACA8qB,EACAtkB,EACAlG,EACA5E,EACAwC,EACAC,EACA7G,EACAmD,EACA4F,EACAtJ,GAEAK,EAAAW,MAAAV,EAAAW,QAAAD,MAEAyC,EAAAy0B,mBAAA,EACAz0B,EAAAqJ,SAAA7D,EAAA6D,SACArJ,EAAAmJ,QAAA3D,EAAA2D,QAEA3G,KAEAZ,YAAA,EAFAY,KAGAX,SAAA,EAHAW,KAKAQ,KAAA,aALAR,KASAQ,OAEAhD,EAAA00B,eAAA,WACA73B,EAAA0C,GAAA,kBAAA4J,QAAA3D,EAAA2D,QAAAE,SAAA7D,EAAA6D,YAEArJ,EAAA20B,eAAA,WACA93B,EAAA0C,GAAA,kBAAA4J,QAAA3D,EAAA2D,QAAAE,SAAA7D,EAAA6D,YAGArJ,EAAA40B,aAAA,SAAAxzB,GACA,WAAAA,EAAAunB,gBACA3oB,EAAAy0B,mBAAA,IA/DA14B,QAAAC,OAAA,qBAAA6E,WAAA,0BAAA2zB,GAEAA,EAAA1zB,SACA,aACA,SACA,YACA,SACA,eACA,eACA,YACA,aACA,iBACA,QACA,YACA,oBACA,eACA,uBACA,UAlBA,GCAA,WAIA,SAAA+zB,EAAApxB,EAAA3E,EAAAsR,EAAA4G,EAAAtT,EAAAnH,GAcA,OANAwsB,eANAI,KAAA,OACAC,KAAA,OACAC,iBAAA,kBACAC,gBAAA,kBAIAT,iBAwBA,SAAAnhB,EAAAyB,GACA,IAAA2rB,EAAAv4B,EAAAqB,IAAAI,SAAA,mDAEAsjB,EAAAtK,EAAAsK,QAWA,OAVA7d,EAAAqxB,GAAAte,KAAArN,QAAAA,EAAAzB,IAAAA,GAEA,SAAAtG,GACA,IAAAsY,EAAAtY,EACAkgB,EAAAC,QAAA7H,IAEA,SAAAhY,GACA4f,EAAAlK,OAAA1V,KAGA4f,EAAAM,SArCAkH,kCAwCA,SAAA1f,EAAAD,GACA,IAAA2rB,EAAAv4B,EAAAqB,IAAAI,SAAA,2CAEAsjB,EAAAtK,EAAAsK,QAWA,OAVA7d,EAAAqxB,GAAAte,KAAArN,QAAAA,EAAAC,WAAAA,GAEA,SAAAhI,GACA,IAAAsY,EAAAtY,EACAkgB,EAAAC,QAAA7H,IAEA,SAAAhY,GACA4f,EAAAlK,OAAA1V,KAGA4f,EAAAM,SArDA1Y,uBAKA,SAAAC,EAAAC,EAAArH,EAAAsH,GACA,IAAAyrB,EAAAv4B,EAAAqB,IAAAI,SAAA,cAAAmL,EAAA,aAAAC,EAAA,qBAAArH,EAAA,aAAAsH,EAEAiY,EAAAtK,EAAAsK,QAWA,OAVA7d,EAAAqxB,GAAArwB,QAEA,SAAArD,GACA,IAAAsY,EAAAtY,EACAkgB,EAAAC,QAAA7H,IAEA,SAAAhY,GACA4f,EAAAlK,OAAA1V,EAAAN,KAAAqK,WAGA6V,EAAAM,UAjCA7lB,QAAAC,OAAA,qBAAA4H,QAAA,uBAAAixB,GAEAA,EAAA/zB,SAAA,YAAA,YAAA,QAAA,KAAA,QAAA,UAHA,GCAA,WAkBA,SAAAi0B,EACAn4B,EACAoD,EACAlB,EACAjC,EACA2I,EACA8qB,EACAtkB,EACAtI,EACA5G,EACA+I,EACAD,EACArJ,GACA,IAAAy4B,EAAA,KAEAp4B,EAAAW,MAAAV,EAAAW,QAAAD,MAEAyC,EAAAqJ,SAAA7D,EAAA6D,SACArJ,EAAAmJ,QAAA3D,EAAA2D,QAEAnJ,EAAAi1B,kBAAA,EACAj1B,EAAAy0B,mBAAA,EACAz0B,EAAAk1B,kBAAA,EACAl1B,EAAAg1B,SAAA,KACAh1B,EAAAnD,OAAAA,EACAmD,EAAAzC,MAAA,kBACAyC,EAAA0C,MAAA,wDAEA,kBAAA7F,EAAAW,QAAA6B,OACAW,EAAAzC,MAAA,kBACAyC,EAAA0C,MAAA,sFAGAF,KAEAQ,KAAA,aAFAR,KAMAQ,OAEAhD,EAAAsS,eAAA,WACAzV,EAAA0C,GAAA,SACA4J,QAAA3D,EAAA2D,QACAE,SAAA7D,EAAA6D,SACAD,WAAA4rB,EAAA5a,WACArY,OAAA,WACA4F,KAAA,oBAGA3H,EAAA+xB,YAAA,WACAl1B,EAAA0C,GAAA,sBACA4J,QAAA3D,EAAA2D,QACAE,SAAA7D,EAAA6D,SACAD,WAAA4rB,EAAA5a,WACArY,OAAA,WACA4F,KAAA,oBAGA3H,EAAAm1B,gBAAA,WACAn1B,EAAAk1B,kBAAA,EACArvB,EAAAqD,uBACA1D,EAAA2D,QACA6rB,EAAA5a,WACA,WACA5U,EAAA6D,UAAAlG,KAAA,SAAA/B,GACAwE,EAAAgC,cAAApC,EAAA2D,SAAAjG,SAAAC,KAAA,SAAA/B,GACApB,EAAAk1B,kBAAA,EACAr4B,EAAA0C,GAAA,oBAAAG,SAAA,mBAAAs1B,EAAA5a,WAAA,eAAAhZ,EAAAkI,QAAAC,UAAA,wBAAAyf,OAAA5nB,EAAAg0B,gBAAAnM,OAAA,eAAA1rB,MAAA,oBAAA4L,QAAA3D,EAAA2D,QAAAE,SAAA7D,EAAA6D,SAAAD,WAAA5D,EAAA4D,cACA,SAAAL,GACA/I,EAAAk1B,kBAAA,EACAhuB,MAAA,4CAEA,SAAA6B,GAEA7B,MAAA,6BACArK,EAAA0C,GAAA,iBAAA4J,QAAA3D,EAAA2D,QAAAE,SAAA7D,EAAA6D,cAGArJ,EAAAq1B,eAAA,WACAx4B,EAAA0C,GAAA,iBAAA4J,QAAA3D,EAAA2D,QAAAE,SAAA7D,EAAA6D,YAGArJ,EAAA40B,aAAA,SAAAxzB,GACA4zB,EAAA5zB,EACA,WAAAA,EAAAunB,cACA3oB,EAAAy0B,mBAAA,EACA,WAAArzB,EAAAunB,eACA3oB,EAAAzC,MAAA,oBACAyC,EAAA0C,MAAA,iCACA1C,EAAAi1B,kBAAA,GACA,cAAA7zB,EAAAunB,gBACA3oB,EAAAzC,MAAA,oBACAyC,EAAA0C,MAAA,oCACA1C,EAAAi1B,kBAAA,IA/GAl5B,QAAAC,OAAA,qBAAA6E,WAAA,4BAAAk0B,GAEAA,EAAAj0B,SACA,aACA,SACA,YACA,SACA,eACA,eACA,YACA,QACA,oBACA,uBACA,iBACA,UAfA,GJAA,WAwBA,SAAAivB,EAAA7zB,EAAAE,EAAAE,EAAA0zB,GACA5zB,EACA8D,MAAA,gBACAlB,IAAA,yBACAkG,YAAA,qCACArE,WAAA,yBACAsE,aAAA,KACAC,gBAAA,EACA7H,MAAA,iBA/BAxB,QAAAC,OAAA,oBACA,aACA,aACA,aACA,aACA,UACA,YACA,eAEAyB,SAAA,sBACAa,UAIArC,OAAA8zB,GAEAA,EAAAjvB,SACA,iBACA,iBACA,oBACA,sBArBA,GKAA,WAgCA,SAAAw0B,EACA14B,EACAoD,EACAlB,EACAjC,EACA2I,EACA8qB,EACAtkB,EACAtI,EACA6xB,EACA3vB,EACAwqB,EACA7zB,GACAyD,EAAAw1B,QACAx1B,EAAAoB,KAAA,KACApB,EAAAy1B,SAAA,GACAz1B,EAAA01B,OAAA,wCACA94B,EAAAW,MAAAV,EAAAW,QAAAD,MACAyC,EAAA21B,QAAA,GACA31B,EAAA41B,YAAA,GACA51B,EAAA61B,gBAAA,KACA71B,EAAA81B,UAAA,GACA91B,EAAA2S,UAAA,GAGA3S,EAAA+1B,YAAA,GACA/1B,EAAAg2B,WAAA,GACAh2B,EAAAi2B,cAAA,GACAj2B,EAAAk2B,kBAAA,GACAl2B,EAAAm2B,iBAAA,GAEA,IAAAx0B,EAAAa,KAQAb,EAAAC,YAAA,EACAD,EAAAE,SAAA,EAEAF,EAAAqB,KAAA,WAgBAuyB,EAAAa,gBAAA5wB,EAAAiC,IAAAjC,EAAA6wB,KAAAlzB,KAAA,SAAA/B,GAEA,IAAAk1B,KACA,GAAA,MAAAl1B,EAAAqK,QAEA,GAAA,MAAArK,EAAAm1B,WAAAn1B,EAAAm1B,UAAAt3B,OAAA,GACA,IAAA,IAAA8T,KAAA3R,EAAAm1B,UACA,GAAA,sBAAAn1B,EAAAm1B,UAAAxjB,GAAA4I,KAAA,CACA,IAAA6a,EAAAlT,KAAAE,MAAApiB,EAAAm1B,UAAAxjB,GAAA0jB,WACArvB,GAAAovB,EAAAE,WACAnB,EAAAoB,eAAAH,EAAAI,UAAAzzB,KAAA,SAAA/B,GACApB,EAAA61B,mBACA71B,EAAA61B,gBAAAluB,KAAA,kBACA3H,EAAA61B,gBAAAt4B,MAAAi5B,EAAAE,WACA12B,EAAA61B,gBAAAgB,MAAA,MAAAz1B,EAAAy1B,MAAA,GAAAz1B,EAAAy1B,MAIA,IAAAtE,EAAA7uB,EAAAue,oBAAAjiB,EAAA61B,gBAAAgB,OACAtE,GAAAA,EAAAtzB,OAAA,EACAe,EAAA61B,gBAAAgB,MAAAtE,EAAA,GAEAvyB,EAAA61B,gBAAAgB,MAAA,GACA72B,EAAA61B,gBAAAgB,MAAA,IAAA72B,EAAA61B,gBAAAgB,MAAAL,EAAAM,iBAAA92B,EAAA61B,gBAAAgB,MAEA72B,EAAA81B,UAAAU,EAAAI,SAEA52B,EAAA61B,gBAAAkB,YAAA,MAAA/2B,EAAA61B,gBAAAkB,YAAA,GAAA/2B,EAAA61B,gBAAAkB,YACA,IAAA/2B,EAAA61B,gBAAAkB,cACA/2B,EAAA61B,gBAAAkB,YAAA,qBAIA/2B,EAAA61B,mBACA71B,EAAA61B,gBAAAluB,KAAA,iBACA3H,EAAA61B,gBAAAt4B,MAAAi5B,EAAA3e,KAAA,IAAA2e,EAAAQ,cACAh3B,EAAA61B,gBAAAkB,YAAAh7B,QAAAk7B,UAAAT,EAAAU,UACAl3B,EAAA61B,gBAAAgB,MAAA,KACA72B,EAAA81B,UAAAU,EAAAW,aAEA,YAKAb,EAAA5yB,EAAAue,oBAAA7gB,EAAAqK,WACA6qB,EAAAr3B,OAAA,IACAe,EAAA81B,UAAApyB,EAAAwe,qBAAAoU,EAAA,IACAf,EAAAoB,eAAAL,EAAA,IAAAnzB,KAAA,SAAA/B,GACApB,EAAA61B,gBAAAz0B,EACApB,EAAA61B,gBAAAgB,MAAA,MAAA72B,EAAA61B,gBAAAgB,MAAA,GAAA72B,EAAA61B,gBAAAgB,MAIA,IAAAtE,EAAA7uB,EAAAue,oBAAAjiB,EAAA61B,gBAAAgB,OACAtE,GAAAA,EAAAtzB,OAAA,EACAe,EAAA61B,gBAAAgB,MAAAtE,EAAA,GAEAvyB,EAAA61B,gBAAAgB,MAAA,GAEA72B,EAAA61B,gBAAAt4B,MAAA,MAAAyC,EAAA61B,gBAAAt4B,MAAA,GAAAyC,EAAA61B,gBAAAt4B,MACAyC,EAAA61B,gBAAAkB,YAAA,MAAA/2B,EAAA61B,gBAAAkB,YAAA,GAAA/2B,EAAA61B,gBAAAkB,YACA/2B,EAAA61B,gBAAAluB,KAAA,MAAA3H,EAAA61B,gBAAAluB,KAAA,GAAA3H,EAAA61B,gBAAAluB,KACA,IAAA3H,EAAA61B,gBAAAt4B,OACA,IAAAyC,EAAA61B,gBAAAkB,aACA,IAAA/2B,EAAA61B,gBAAAgB,MACA72B,EAAA61B,gBAAA,MAEA71B,EAAA61B,gBAAAluB,KAAAzI,QAAA,UAAA,IACAc,EAAA61B,gBAAAluB,KAAA,SACA,IAAA3H,EAAA61B,gBAAAt4B,QACAyC,EAAA61B,gBAAAt4B,MAAA,YACA,IAAAyC,EAAA61B,gBAAAkB,cACA/2B,EAAA61B,gBAAAkB,YAAA,sBAUA,IAAAK,EAAApO,OAAA,IAAA7Q,MACAwd,EAAA3M,OAAA5nB,EAAAi2B,UACAD,EAAA1Z,KAAAiY,EAAA,QAAA,GAAAA,EAAAlW,QAAA2X,EAAA3X,OACAzf,EAAA21B,QAAAA,EAAA1M,OAAA,aAEAjpB,EAAA21B,QAAAA,EAAA1M,OAAA,WAEAjpB,EAAAoB,KAAAA,EACA,MAAAA,EAAAk2B,gBACAl2B,EAAAk2B,cAAA,WACA,EACA31B,EAAAC,YAAA,EACAD,EAAAE,SAAA,GAQA,SAAAkH,GACApH,EAAAC,YAAA,EACAD,EAAAE,SAAA,GACA,KAAAkH,EAAAhH,QAAA,KAAAgH,EAAAhH,QAAA,aAAAgH,EAAA3H,KAAAkK,wBACAtL,EAAAy1B,SAAA,0BACAz1B,EAAA01B,OAAA,iFAIA9vB,EAAAgC,cAAApC,EAAAiC,KAAAvE,SAAAC,KAAA,SAAA/B,GAEA,GADApB,EAAA2S,UAAAvR,EAAAkI,QAAAC,UAAA,IAAAnI,EAAAkI,QAAAQ,SACA1I,EAAAiS,cAAAgZ,SAAA,CACA,IAAAC,EAAAlrB,EAAAiS,cAAAgZ,SACArsB,EAAA+1B,YAAAzJ,EAAAnkB,QACAnI,EAAAg2B,WAAA1J,EAAAiL,YACAv3B,EAAAi2B,cAAA3J,EAAA/jB,kBACAvI,EAAAk2B,kBAAA5J,EAAAjkB,cAsCA,SAAAwZ,GACA,IAEA2V,EAAAC,OAFA,EACA,KAEAD,EAAAE,QAAA7V,GACA2V,EAAAG,OACAv3B,SAAAw3B,eAAA,cAAAC,UAAAL,EAAAM,eA3CAC,CAAAzL,EAAA0L,sBAEAh4B,EAAA+1B,YAAA/1B,EAAA2S,UACA3S,EAAAg2B,WAAA,yEACAh2B,EAAAi2B,cAAA,gEACAj2B,EAAAk2B,kBAAA,+EACAl2B,EAAAm2B,iBAAA,8BAEA,eA2BAx0B,EAAAqB,OAiCAhD,EAAAmiB,YAAA,SAAA7H,GACA,IAAA8H,EAAA,EACA,OAAA9H,EAAA,IACAA,EAAA,MACA8H,GAAA9H,EAAA,MAAA+H,QAAA,IACA,KACAD,EAAA,KAAAC,QAAA,GAAA,MAEAD,EAAA,OAGApiB,EAAAi4B,aAAA,WACAjsB,EAAA7F,MACAjB,YAAA,sCAEA/B,KAAA,SAAAqvB,GACAxmB,EAAAwS,UACA,WACAxS,EAAAwS,YAvSAziB,QAAAC,OAAA,oBAAA8R,OAAA,YAAA,OAAA,SAAAsiB,GACA,OAAA,SAAA8H,GACA,OAAA9H,EAAA+H,mBAAAD,OAIAn8B,QAAAC,OAAA,oBAAA8R,OAAA,SAAA,YAAA,SAAAsqB,GACA,IAAAC,EAAA,SAAA7iB,KAAApV,SAAAk4B,SAAA,SAAA,OACA,OAAA,SAAAC,GAGA,OADAA,GAAAA,EAAA,IAAAp5B,QAAA,uDAAAk5B,EAAA,MACAD,EAAAG,OAGAx8B,QAAAC,OAAA,oBAAA6E,WAAA,yBAAAy0B,GAEAA,EAAAx0B,SACA,aACA,SACA,YACA,SACA,eACA,eACA,YACA,QACA,sBACA,iBACA,OACA,UA7BA,GCAA,WAIA,SAAAy0B,EAAA9xB,EAAA3E,EAAAsR,EAAA4G,EAAAtT,EAAAnH,GACA,OACA65B,gBAkCA,SAAAjtB,EAAAqvB,GACA,IAAA1D,EAAAv4B,EAAAqB,IAAAI,SAAA,wCAEAsjB,EAAAtK,EAAAsK,QAWA,OAVA7d,EAAAqxB,GAAAte,KAAArN,QAAAA,EAAAqvB,IAAAA,GAEA,SAAAp3B,GACA,IAAAsY,EAAAtY,EACAkgB,EAAAC,QAAA7H,IAEA,SAAAhY,GACA4f,EAAAlK,OAAA1V,KAGA4f,EAAAM,SA/CA6W,wBAkDA,SAAAtvB,EAAAqvB,EAAAE,EAAAC,GACA,IAAA7D,EAAAv4B,EAAAqB,IAAAI,SAAA,qDAAA06B,EAEApX,EAAAtK,EAAAsK,QAWA,OAVA7d,EAAAqxB,GAAA3wB,OAAAgF,QAAAA,EAAAqvB,IAAAA,GAEA,SAAAp3B,GACA,IAAAsY,EAAAtY,EACAkgB,EAAAC,QAAA7H,IAEA,SAAAhY,GACA4f,EAAAlK,OAAA1V,KAGA4f,EAAAM,SA/DAgX,aAcA,SAAAzvB,GACA,IAAA2rB,EAAAv4B,EAAAqB,IAAAI,SAAA,uCAEAsjB,EAAAtK,EAAAsK,QAWA,OAVA7d,EAAAqxB,GAAA3wB,OAAAgF,QAAAA,GAEA,SAAA/H,GACA,IAAAsY,EAAAtY,EACAkgB,EAAAC,QAAA7H,IAEA,SAAAhY,GACA4f,EAAAlK,OAAA1V,KAGA4f,EAAAM,SA3BA+U,eAGA,SAAA9R,GACA,IAAAvD,EAAAtK,EAAAsK,QAMA,OALAlR,EAAAoG,IAAAja,EAAAqB,IAAAO,QAAA,iBAAA0mB,GACApD,QAAA,SAAArgB,GACAkgB,EAAAC,QAAAngB,KAGAkgB,EAAAM,UAlBA7lB,QAAAC,OAAA,oBAAA4H,QAAA,sBAAA2xB,GAEAA,EAAAz0B,SAAA,YAAA,YAAA,QAAA,KAAA,QAAA,UAHA,GCCA/E,QAAAC,OAAA,oBAAA0oB,UAAA,WAAA,sBAAA,SAAA6Q,GA6BA,OACAzsB,OACA+vB,YAAA,KAEA3zB,YAAA,gCACA0f,SAAA,IACA/jB,YAlCA,SAAA,YAAA,SAAAb,EAAAic,GAUA,SAAA6c,IACA1B,EAAA1Z,KAAAqb,EAAA,QAAA,GACA/4B,EAAAg5B,YAAAD,EAAA9P,OAAA,cAEAjpB,EAAAg5B,YAAAD,EAAAE,UAbAj5B,EAAAoB,KAAAkiB,KAAAE,MAAAxjB,EAAA2B,GAAAk3B,aACA74B,EAAAg5B,YAAA,GAEA,IAAA5B,EAAApO,OAAA,IAAA7Q,MACA4gB,EAAA/P,OAAAhpB,EAAAoB,KAAAi2B,UACA6B,EAAA,KAEAA,EAAAjd,EAAA6c,EAAA,IAAA,GAAA,GAUAA,IAEA94B,EAAA/C,IAAA,WAAA,WACAlB,QAAAo9B,UAAAD,KACAjd,EAAAuC,OAAA0a,GACAA,OAAA9xB,OAYAjC,aAAA,KACAokB,kBAAA,EACA1E,KAAA,SAAA7kB,EAAAumB,EAAAd,SCvCA,WAIA,SAAA2T,EAAAx8B,EAAAoD,EAAAnD,EAAAmP,EAAAqtB,GAEAr5B,EAAAs5B,WAAA,EACA,IACAC,EAAA,KADA/2B,KAEAQ,KAAA,WACAhD,EAAA6kB,KAAAxH,OAAA1d,SAAAC,KAEA6e,WAAA,YACA8a,EAAA,IAAAC,YAAA,cAEA1S,GAAA,UAAA,SAAAjc,GACAhL,QAAA8M,IAAA,WACA0sB,EAAAlzB,KACAkzB,EAAAI,SACAhrB,YAAA,WACAirB,SAAA,eACAC,UAAA,QAIAJ,EAAAzS,GAAA,QAAA,SAAAjc,GACAhL,QAAA8hB,MAAA,qBAEA,MArBAnf,KAyBAQ,OAEAhD,EAAA/C,IAAA,WAAA,WACAlB,QAAAo9B,UAAAI,IACAA,EAAAK,YAGA55B,EAAAwyB,OAAA,SAAAA,GACA,GAAAA,IACAxyB,EAAAs5B,WAAA,GAEAttB,EAAAhP,KAAAw1B,IA1CAz2B,QAAAC,OAAA,oBAAA6E,WAAA,kBAAAu4B,GAEAA,EAAAt4B,SAAA,aAAA,SAAA,SAAA,YAAA,YAHA","file":"app.min.js","sourcesContent":["(function () {\r\n \r\n angular.module('app', [\r\n 'ngMaterial',\r\n 'ngMessages',\r\n 'ui.router',\r\n 'app.utils',\r\n 'app.signin',\r\n 'app.registration',\r\n 'app.sharedcard',\r\n 'app.smartcontract',\r\n 'app.announcement',\r\n 'app.main',\r\n 'app.contact'\r\n ]).config([\r\n '$routeProvider',\r\n '$compileProvider',\r\n '$stateProvider',\r\n '$urlRouterProvider',\r\n '$locationProvider',\r\n 'CONFIG',\r\n function Config($routeProvider, $compileProvider, $stateProvider, $urlRouterProvider, $locationProvider, CONFIG) {\r\n //Mainly used for SMS anchor link\r\n $compileProvider.aHrefSanitizationWhitelist(/^\\s*(https?|ftp|mailto|file|tel|sms):/);\r\n $urlRouterProvider.otherwise('/login/');\r\n //$stateProvider\r\n // .state(CONFIG.STATE.HOME, {\r\n // url: '/home/',\r\n // templateUrl: 'app/signin/home.html',\r\n // controller: 'SignInController',\r\n // });\r\n \r\n\r\n // use the HTML5 History API\r\n $locationProvider.html5Mode(true);\r\n }\r\n ])\r\n .run(['$rootScope',\r\n '$state',\r\n 'LocalstoreManager',\r\n 'CONFIG',\r\n function Run($rootScope, $state, LocalstoreManager, CONFIG) {\r\n $('#initial-loader').hide();\r\n $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\r\n //if (LocalstoreManager.isUserLoggedIn()) {\r\n // if (toState.name == \"home\") {\r\n // event.preventDefault();\r\n // //For release 1 3-21-2017\r\n // //$state.go('idenedi.tab.profile');\r\n // //$state.go('register_complete');\r\n // }\r\n //}\r\n });\r\n $rootScope.$on('$stateChangeSuccess', function () {\r\n $rootScope.title = $state.current.title;\r\n });\r\n } ])\r\n .constant('CONFIG', {\r\n STATE: {\r\n HOME: 'home'\r\n },\r\n API: {\r\n //Development URLS\r\n // RELEASE: 'DEV',\r\n // MIXPANEL: false,\r\n // PROVIDER_HOST: 'https://idenediprovider.azurewebsites.net',\r\n // API_HOST: 'https://idenediapi.azurewebsites.net',\r\n // BLOB_HOST: 'https://idenedistorage.blob.core.windows.net',\r\n // SEARCH_HOST: 'https://idenedisearch.azurewebsites.net',\r\n // WEB_URL: 'https://idenediapi.azurewebsites.net'\r\n\r\n //Stagging URLS\r\n RELEASE: 'STAG', \r\n MIXPANEL: false,\r\n PROVIDER_HOST: 'https://idenediprovider-prod-stag.azurewebsites.net',\r\n API_HOST: 'https://idenediapi-prod-stag.azurewebsites.net',\r\n BLOB_HOST: 'http://idenedistag.blob.core.windows.net',\r\n SEARCH_HOST: 'https://idenedisearch-prod-stag.azurewebsites.net',\r\n WEB_URL: 'https://idenedi-prod-stag.azurewebsites.net',\r\n INNER_APP_URL: 'https://idenedi-prod-stag.azurewebsites.net/web'\r\n\r\n //PRODUCTION URLS\r\n // RELEASE: 'PROD',\r\n // MIXPANEL: true,\r\n // PROVIDER_HOST: 'https://authapi.idenedi.com',\r\n // API_HOST: 'https://api.idenedi.com',\r\n // BLOB_HOST: 'https://idenediprod.blob.core.windows.net',\r\n // SEARCH_HOST: 'https://searchapi.idenedi.com',\r\n // WEB_URL: 'https://app.idenedi.com',\r\n // INNER_APP_URL: 'https://app.idenedi.com/web'\r\n\r\n //BETA URLS\r\n // RELEASE: 'BETA',\r\n // MIXPANEL: true,\r\n // PROVIDER_HOST: 'https://authapi.idenedi.com',\r\n // API_HOST: 'https://api.idenedi.com',\r\n // BLOB_HOST: 'https://idenediprod.blob.core.windows.net',\r\n // SEARCH_HOST: 'https://searchapi.idenedi.com',\r\n // WEB_URL: 'https://beta.idenedi.com',\r\n // INNER_APP_URL: 'https://beta.idenedi.com/web'\r\n },\r\n VERSION: \"v2.1\"\r\n });\r\n})();\r\n","(function () {\r\n angular.module('app.sharedcard', [\r\n 'ngMaterial',\r\n 'ngMessages',\r\n 'ngResource',\r\n 'ngRoute',\r\n 'ui.router'\r\n ])\r\n .constant('SHARED_CARD_CONFIG', {\r\n URLS: {\r\n SHARED_CARD: '/c/',\r\n PUBLIC_PROFILE: '/p/'\r\n }\r\n })\r\n .config(Config)\r\n .run(Run);\r\n\r\n angular.module('app.sharedcard').filter(\"addhttp\", ['$sce', function ($sce) {\r\n return function (href) {\r\n var m = href.match(/http:|https:/i)\r\n if (m == null)\r\n href = \"http://\" + href;\r\n return href;\r\n };\r\n }]);\r\n\r\n Config.$inject = [\r\n '$routeProvider',\r\n '$stateProvider',\r\n '$locationProvider',\r\n 'SHARED_CARD_CONFIG'\r\n ];\r\n\r\n function Config($routeProvider, $stateProvider, $locationProvider, SHARED_CARD_CONFIG) {\r\n $stateProvider\r\n .state('sharedcard', {\r\n url:'/c/:id/',\r\n templateUrl: 'app/sharedCard/sharedcard.html',\r\n controller: 'SharedCardController',\r\n controllerAs: 'vm',\r\n reloadOnSearch: false,\r\n title: \"Shared Card\"\r\n })\r\n .state('publicprofile', {\r\n url:'/p/:id/',\r\n templateUrl: 'app/sharedCard/sharedcard.html',\r\n controller: 'SharedCardController',\r\n controllerAs: 'vm',\r\n reloadOnSearch: false,\r\n title: \"Profile\"\r\n })\r\n .state('savecard', {\r\n url: '/savecard/:id/',\r\n templateUrl: 'app/sharedCard/savecard.html',\r\n controller: 'SaveCardController',\r\n controllerAs: 'vm',\r\n reloadOnSearch: false,\r\n title: \"Save Card\"\r\n })\r\n .state('saveprofile', {\r\n url: '/saveprofile/:id/',\r\n templateUrl: 'app/sharedCard/savecard.html',\r\n controller: 'SaveCardController',\r\n controllerAs: 'vm',\r\n reloadOnSearch: false,\r\n title: \"Save Profile\"\r\n })\r\n }\r\n\r\n Run.$inject = ['$rootScope', '$location', 'LocalstoreManager'];\r\n function Run($rootScope, $location, LocalstoreManager) {\r\n $rootScope.$on(\"$locationChangeStart\", function (event, newUrl, oldUrl) {\r\n\r\n });\r\n };\r\n})();","(function () {\r\n angular.module('app.main').controller('IdenediController', IdenediController);\r\n\r\n IdenediController.$inject = ['$rootScope', '$scope','$state','StateManager', 'LocalstoreManager'];\r\n function IdenediController($rootScope, $scope, $state, StateManager, LocalstoreManager) {\r\n //if (!LocalstoreManager.isUserLoggedIn())\r\n // $state.go('login');\r\n $scope.state = $state;\r\n StateManager.start();\r\n document.getElementsByTagName('html')[0].className = \"\";\r\n angular.element(document).find('html').addClass('sharedcard-bg');\r\n $rootScope.showWaitingOverlay = false;\r\n //Actually the new card button is not displaying correctly when placed in cards.html\r\n //the position is not fixed due to some transform property in some parent element of angular tab\r\n //so I have to put it here in order to fix it. for more info:\r\n //http://stackoverflow.com/questions/36855473/position-fixed-not-working-is-working-like-absolute\r\n $rootScope.showNewCardBtn = false;\r\n $rootScope.showNewGroupBtn = false;\r\n };\r\n})();","(function () {\r\n angular.module('app.main').controller('MainController', MainController);\r\n\r\n MainController.$inject = ['$rootScope', '$scope', '$state', 'AuthService', 'PresenceService', 'ProfileService', 'LocalstoreManager'];\r\n function MainController($rootScope, $scope, $state, AuthService, PresenceService, ProfileService, LocalstoreManager) {\r\n var vm = this;\r\n $scope.state = $state;\r\n\r\n vm.presenceList = [\r\n { label: 'Available', cssClass: 'available', id: PresenceService.PresenceStatus.Available },\r\n { label: 'Busy', cssClass: 'busy', id: PresenceService.PresenceStatus.Busy },\r\n { label: 'Enjoying Life', cssClass: 'enjoying-life', id: PresenceService.PresenceStatus.EnjoyingLife },\r\n { label: 'At Work', cssClass: 'at-work', id: PresenceService.PresenceStatus.AtWork },\r\n { label: 'Off Work', cssClass: 'off-work', id: PresenceService.PresenceStatus.OffWork },\r\n { label: 'Don\\'t Disturb', cssClass: 'dont-disturb', id: PresenceService.PresenceStatus.DoNotDisturb }\r\n ];\r\n\r\n $scope.selectedTabIndex = 0;\r\n $scope.presenceIconClass = 'unavailable';\r\n \r\n $scope.tabClicked = function (id) {\r\n if (id == \"profile\") {\r\n $state.go('idenedi.tab.profile');\r\n } else if (id == \"member\") {\r\n $state.go('idenedi.tab.member');\r\n } else if (id == \"card\") {\r\n $state.go('idenedi.tab.card');\r\n } else if (id == \"group\") {\r\n $state.go('idenedi.tab.group');\r\n }\r\n vm.selectTabForState();\r\n }\r\n\r\n vm.init = function () {\r\n $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {\r\n if (toState.name.indexOf('idenedi.tab.') > -1) {\r\n vm.selectTabForState();\r\n }\r\n });\r\n\r\n $scope.$on('PresenceService->LoggedInUserPresenceChanged', presenceChangedHandler);\r\n ProfileService.getUserBasicProfile().$promise.then(profileSuccess, profileError);\r\n vm.selectTabForState();\r\n };\r\n\r\n vm.presenceItemClicked = function (presenceId) {\r\n $rootScope.showWaitingOverlay = true;\r\n PresenceService.changeLoggedInUserPresence(presenceId).$promise.then(function () { $rootScope.showWaitingOverlay = false; }, function () { $rootScope.showWaitingOverlay = false; });\r\n };\r\n vm.selectTabForState = function () {\r\n if ($state.current.name == \"idenedi.tab.profile\") {\r\n $scope.selectedTabIndex = 0;\r\n } else if ($state.current.name == \"idenedi.tab.card\") {\r\n $scope.selectedTabIndex = 1;\r\n } else if ($state.current.name == \"idenedi.tab.member\") {\r\n $scope.selectedTabIndex = 2;\r\n } else if ($state.current.name == \"idenedi.tab.group\") {\r\n $scope.selectedTabIndex = 3;\r\n } else {\r\n $scope.selectedTabIndex = 0;\r\n }\r\n };\r\n vm.signout = function () {\r\n AuthService.signout();\r\n $state.go('login');\r\n };\r\n vm.init();\r\n\r\n function profileSuccess(data) {\r\n //We need idenedi for fetching presence\r\n var presence = PresenceService.getLoggedInUserPresence(data.idenedi);\r\n if (presence != null)\r\n changePresence(presence);\r\n };\r\n\r\n function profileError(response) {\r\n vm.dataLoaded = true;\r\n vm.isError = true;\r\n };\r\n\r\n function presenceChangedHandler(event, status) {\r\n changePresence(status);\r\n };\r\n\r\n function changePresence(status) {\r\n switch (status) {\r\n case PresenceService.PresenceStatus.Available:\r\n $scope.presenceIconClass = 'available';\r\n break;\r\n case PresenceService.PresenceStatus.Busy:\r\n $scope.presenceIconClass = 'busy';\r\n break;\r\n case PresenceService.PresenceStatus.EnjoyingLife:\r\n $scope.presenceIconClass = 'enjoying-life';\r\n break;\r\n case PresenceService.PresenceStatus.AtWork:\r\n $scope.presenceIconClass = 'at-work';\r\n break;\r\n case PresenceService.PresenceStatus.OffWork:\r\n $scope.presenceIconClass = 'off-work';\r\n break;\r\n case PresenceService.PresenceStatus.DoNotDisturb:\r\n $scope.presenceIconClass = 'dont-disturb';\r\n break;\r\n default:\r\n $scope.presenceIconClass = 'unavailable';\r\n }\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.main').factory('MainService', MainService);\r\n\r\n MainService.$inject = ['$resource', 'Utils', 'Countries', 'CONFIG'];\r\n function MainService($resource, Utils, Countries, CONFIG) {\r\n /*var mainService = {\r\n getUserBasicProfile: getUserBasicProfile\r\n };\r\n\r\n return mainService;\r\n\r\n function getUserBasicProfile() {\r\n return $resource(CONFIG.API.API_HOST + '/api/User').get(userProfileSuccess, userProfileError);\r\n function userProfileSuccess(data) {\r\n \r\n }\r\n function userProfileError(response) {\r\n return response;\r\n }\r\n };*/\r\n };\r\n})();","(function () {\r\n angular.module('app.main').factory('PresenceService', PresenceService);\r\n\r\n PresenceService.$inject = ['$resource', '$rootScope', 'Utils', 'Countries', 'CONFIG'];\r\n function PresenceService($resource, $rootScope, Utils, Countries, CONFIG) {\r\n var isCallSent = false;\r\n var loggedInUserPresence = null;\r\n var presenceService = {\r\n PresenceStatus: {\r\n Unknown: \"Unknown\",\r\n Available: \"Available\",\r\n Busy: \"Busy\",\r\n EnjoyingLife: \"EnjoyingLife\",\r\n AtWork: \"AtWork\",\r\n OffWork: \"OffWork\",\r\n DoNotDisturb: \"DoNotDisturb\"\r\n },\r\n _attachEvents: _attachEvents,\r\n isCallSent: isCallSent,\r\n loggedInUserPresence: loggedInUserPresence,\r\n getLoggedInUserPresence: getLoggedInUserPresence,\r\n getMembersPresence: getMembersPresence,\r\n getMemberPresence: getMemberPresence,\r\n changeLoggedInUserPresence: changeLoggedInUserPresence\r\n };\r\n\r\n presenceService._attachEvents();\r\n return presenceService;\r\n\r\n function getLoggedInUserPresence(idenedi) {\r\n var that = this;\r\n if (this.loggedInUserPresence != null)\r\n return this.loggedInUserPresence;\r\n if (this.isCallSent)\r\n return;\r\n\r\n this.isCallSent = true;\r\n $resource(CONFIG.API.API_HOST + '/api/Presence').query({ 'memberIdenedis': idenedi }, presenceFetchSuccess, presenceFetchError);\r\n function presenceFetchSuccess(data) {\r\n that.isCallSent = false;\r\n that.loggedInUserPresence = data[0].Status;\r\n $rootScope.$broadcast('PresenceService->LoggedInUserPresenceChanged', data[0].Status);\r\n }\r\n function presenceFetchError(response) {\r\n that.isCallSent = false;\r\n return response;\r\n }\r\n };\r\n\r\n function getMemberPresence(idenedi) {\r\n var that = this;\r\n\r\n return $resource(CONFIG.API.API_HOST + '/api/Presence').query({ 'memberIdenedis': idenedi }, presenceFetchSuccess, presenceFetchError);\r\n function presenceFetchSuccess(data) {\r\n return data;\r\n }\r\n function presenceFetchError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function getMembersPresence() {\r\n var that = this;\r\n \r\n return $resource(CONFIG.API.API_HOST + '/api/Presence').query({ }, presenceFetchSuccess, presenceFetchError);\r\n function presenceFetchSuccess(data) {\r\n return data;\r\n }\r\n function presenceFetchError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function changeLoggedInUserPresence(status) {\r\n var that = this;\r\n return $resource(CONFIG.API.API_HOST + '/api/Presence/' + status).save({ status: status }, statusChangeSuccess, statusChangeError);\r\n function statusChangeSuccess() {\r\n that.loggedInUserPresence = status;\r\n $rootScope.$broadcast('PresenceService->LoggedInUserPresenceChanged', status);\r\n }\r\n function statusChangeError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function _attachEvents() {\r\n var that = this;\r\n $rootScope.$on('SignInService->Logout', function () {\r\n that.isCallSent = false;\r\n that.loggedInUserPresence = null;\r\n });\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('RegistrationController', RegistrationController);\r\n\r\n RegistrationController.$inject = [\r\n '$scope',\r\n '$rootScope',\r\n '$location',\r\n '$state',\r\n '$stateParams',\r\n 'Utils',\r\n 'RegistrationService',\r\n 'AuthService',\r\n 'ProfileService',\r\n 'GroupsService',\r\n 'ContactInfoService',\r\n 'MembersService',\r\n 'SmartContractService',\r\n 'LocalstoreManager',\r\n 'Utils',\r\n 'SharedCard',\r\n 'REGISTRATION_CONFIG',\r\n 'CONFIG'\r\n ];\r\n function RegistrationController(\r\n $scope,\r\n $rootScope,\r\n $location,\r\n $state,\r\n $stateParams,\r\n Utils,\r\n RegistrationService,\r\n AuthService,\r\n ProfileService,\r\n GroupsService,\r\n ContactInfoService,\r\n MembersService,\r\n SmartContractService,\r\n LocalstoreManager,\r\n Utils,\r\n SharedCard,\r\n REGISTRATION_CONFIG,\r\n CONFIG) {\r\n\r\n $scope.$state = $state;\r\n $scope.showLoginLink = true;\r\n\r\n //document.getElementsByTagName('html')[0].className = \"\";\r\n //angular.element(document).find('html').addClass('sharedcard-bg');\r\n\r\n var currentStep = 1;\r\n var isPhoneRecordCreated = false;\r\n var isSmsRecordCreated = false;\r\n var cardId = \"\";\r\n var isGroupDetailsFetched = -1;\r\n var group = null;\r\n var isGroupJoined = false;\r\n\r\n var vm = this;\r\n \r\n $scope.regStepTemplateUrl = \"app/registration/step_basic_info.html\";\r\n $rootScope.showLoadingIconOnPasswordScreen = false;\r\n\r\n $scope.registration = {\r\n firstName: '',\r\n lastName: ''\r\n };\r\n\r\n vm.init = function () {\r\n //Getting the country name early\r\n Utils.getUserCountryThroughIP();\r\n //changeTemplate();\r\n Utils.trackMixpanelEvent(\"Tap on already have an account\");\r\n attachEvents();\r\n };\r\n\r\n function attachEvents() {\r\n /*$scope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) {\r\n if ($location.path() == \"/register/\")\r\n changeTemplate();\r\n });*/\r\n $scope.$on(REGISTRATION_CONFIG.EVENTS.BASIC_INFO_SUCCESS, function (event, data) {\r\n Utils.trackMixpanelEvent(\"Enter Basic information\");\r\n RegistrationService.registrationData.FirstName = data.firstName;\r\n RegistrationService.registrationData.LastName = data.lastName;\r\n changeState('register.primaryphone');\r\n //$location.search('step', 'primary_phone');\r\n });\r\n $scope.$on(REGISTRATION_CONFIG.EVENTS.PRIMARY_PHONE_SUCCESS, function (event, data) {\r\n Utils.trackMixpanelEvent(\"Enter Registration Number from Signup\");\r\n RegistrationService.registrationData.Country = data.countryCode;\r\n RegistrationService.registrationData.PhoneNo = data.phoneNumber;\r\n changeState('register.verification');\r\n //$location.search('step', 'verification');\r\n });\r\n $scope.$on(REGISTRATION_CONFIG.EVENTS.VERIFICATION_SUCCESS, function (event, data) {\r\n Utils.trackMixpanelEvent(\"Enter Code from Signup\");\r\n RegistrationService.registrationData.VerificationCode = data.verificationCode;\r\n changeState('register.password');\r\n //$location.search('step', 'password');\r\n });\r\n $scope.$on(REGISTRATION_CONFIG.EVENTS.REGISTRATION_SUCCESS, function (event, data) {\r\n Utils.trackMixpanelEvent(\"Setup Account\");\r\n RegistrationService.registrationData.Password = data.password;\r\n //Getting user basic profile after registration is necessary.\r\n ProfileService.getUserBasicProfile()\r\n .$promise.then(profileSuccess, profileError);\r\n });\r\n };\r\n\r\n function changeState(newState) {\r\n //Note: we are not using $stateParams because it does not give the params of child views\r\n //if ($state.params.cid != undefined) {\r\n // $state.go(newState, { 'cid': $state.params.cid, 'pid': null, 'gid': null, 'key': null });\r\n //} else if ($state.params.pid != undefined) {\r\n // $state.go(newState, { 'cid': null, 'pid': $state.params.pid, 'gid': null, 'key': null });\r\n //} else if ($state.params.gid != undefined && $state.params.key != undefined) {\r\n // $state.go(newState, { 'cid': null, 'pid': null, 'gid': $state.params.gid, 'key': $state.params.key });\r\n //} else {\r\n // $state.go(newState, { 'cid': null, 'pid': null, 'gid': null, 'key': null });\r\n //}\r\n $state.go(newState, $state.params);\r\n $('body').scrollTop(0);\r\n $(\".downa\").show();\r\n $(\".upa\").hide();\r\n };\r\n\r\n function profileSuccess(data) {\r\n //CardsService.getCards().$promise.then(function () {\r\n // CardsService.createCard(\"My First Card\", [], []).$promise.then(cardCreateSuccess, cardCreateError);\r\n //}, function (res) {\r\n // console.log('Cards not fetched');\r\n // $rootScope.showLoadingIconOnPasswordScreen = false;\r\n // alert(\"Some error occured\");\r\n //});\r\n var dynamicValue = {};\r\n dynamicValue.CountryISOCode = RegistrationService.registrationData.Country;\r\n dynamicValue.PhoneNumber = RegistrationService.registrationData.PhoneNo;\r\n\r\n ContactInfoService.createRecord(ContactInfoService.contactType.PHONE, \"Call\", dynamicValue, []).$promise.then(phoneCreateSuccess, phoneCreateError);\r\n };\r\n\r\n function phoneCreateSuccess() {\r\n var dynamicValue = {};\r\n dynamicValue.CountryISOCode = RegistrationService.registrationData.Country;\r\n dynamicValue.PhoneNumber = RegistrationService.registrationData.PhoneNo;\r\n\r\n ContactInfoService.createRecord(ContactInfoService.contactType.SMS, \"SMS\", dynamicValue, []).$promise.then(function () {\r\n navigateToScreen();\r\n }, function () {\r\n navigateToScreen();\r\n });\r\n \r\n }\r\n\r\n function phoneCreateError() {\r\n navigateToScreen();\r\n }\r\n\r\n function profileError(response) {\r\n $rootScope.showLoadingIconOnPasswordScreen = false;\r\n alert(\"Some error occured. Please try again.\");\r\n };\r\n\r\n function cardCreateSuccess(data) {\r\n cardId = data.str;\r\n var dynamicValue = {};\r\n dynamicValue.CountryISOCode = RegistrationService.registrationData.Country;\r\n dynamicValue.PhoneNumber = RegistrationService.registrationData.PhoneNo;\r\n\r\n ContactInfoService.createRecord(ContactInfoService.contactType.PHONE, \"For Calls\", dynamicValue, [cardId])\r\n .$promise.then(function (data) {\r\n isPhoneRecordCreated = true;\r\n ContactInfoService.createRecord(ContactInfoService.contactType.SMS, \"For SMS\", dynamicValue, [cardId])\r\n .$promise.then(function (data) {\r\n navigateToScreen();\r\n }, function (res) {\r\n $rootScope.showLoadingIconOnPasswordScreen = false;\r\n alert(\"Some error occured\");\r\n console.log('SMS not created');\r\n });\r\n }, function (res) {\r\n console.log('Phone not created');\r\n $rootScope.showLoadingIconOnPasswordScreen = false;\r\n alert(\"Some error occured\");\r\n });\r\n }\r\n\r\n function cardCreateError(res) {\r\n console.log('Card not created');\r\n $rootScope.showLoadingIconOnPasswordScreen = false;\r\n alert(\"Some error occured\");\r\n }\r\n\r\n function navigateToScreen() {\r\n //$rootScope.showLoadingIconOnPasswordScreen = false;\r\n RegistrationService.resetRegistrationData();\r\n if ($state.params.cid != undefined) {\r\n //We should not send autosave true ideally when the new registered user is same as shared card user\r\n //But even if we send this the server side has made a check which does not add the member to its own members list\r\n var sharedCard = SharedCard.getSharedCard($state.params.cid, true, true);\r\n sharedCard.$promise.then(function (data) {\r\n $state.go('register_complete', { subTitle: \"Sign-in to the app to view it.\", title: \"The card was saved successfully!\" });\r\n }, function () { });\r\n }\r\n else if ($state.params.pid != undefined) {\r\n //We should not send this call ideally when the new registered user is same as public profile user\r\n //But even if we send this the server side has made a check which does not add the member to its own members list\r\n SharedCard.saveMember($state.params.pid).$promise.then(function () {\r\n $state.go('register_complete', { subTitle: \"Sign-in to the app to view it.\", title: \"The contact was saved successfully!\" });\r\n }, function () { });\r\n } else if ($state.params.gid != undefined && $state.params.key != undefined) {\r\n if($state.params.type == \"recommend\"){ //for recommend group\r\n $state.go('recommend_join', $state.params);\r\n return;\r\n }\r\n MembersService.getUserDetail($state.params.gid).$promise.then(function (data) {\r\n isGroupDetailsFetched = 1;\r\n group = data;\r\n if (isGroupJoined) {\r\n var groupAppData = GroupsService.getGroupAppData(group)\r\n $state.go('register_complete', { \r\n subTitle: \"You are part of the \" + group.fullName + \" group. Please use \" + groupAppData.AppName + \" mobile app to access the group.\", \r\n title: \"Welcome to \" + groupAppData.AppName,\r\n playStoreLink: groupAppData.PlayStoreLink,\r\n appleAppStoreLink: groupAppData.AppleAppStoreLink\r\n });\r\n }\r\n }, function () {\r\n $rootScope.showLoadingIconOnPasswordScreen = false;\r\n isGroupDetailsFetched = 0;\r\n if (isGroupJoined) {\r\n $state.go('register_complete', { subTitle: \"You are part of the group. Please use IDENEDI mobile app to access the group.\", title: \"Welcome to IDENEDI\" });\r\n }\r\n });\r\n\r\n GroupsService.joinGroupThroughInvitationKey($state.params.gid, $state.params.key).$promise.then(function (data) {\r\n Utils.trackMixpanelEvent(\"Group joined through group invite\");\r\n LocalstoreManager.removeUserToken(); //Intentionally removing token so that user cannot signin through some way for release 1 3-21-2017\r\n isGroupJoined = true;\r\n if (isGroupDetailsFetched > -1) {\r\n if (isGroupDetailsFetched == 1){\r\n var groupAppData = GroupsService.getGroupAppData(group)\r\n $state.go('register_complete', { \r\n subTitle: \"You are part of the \" + group.fullName + \" group. Please use \" + groupAppData.AppName + \" mobile app to access the group.\", \r\n title: \"Welcome to \" + groupAppData.AppName,\r\n playStoreLink: groupAppData.PlayStoreLink,\r\n appleAppStoreLink: groupAppData.AppleAppStoreLink\r\n });\r\n } \r\n else\r\n $state.go('register_complete', { subTitle: \"Download the mobile app for the full IDENEDI experience.\", title: \"Welcome to IDENEDI\" });\r\n }\r\n }, function () {\r\n $rootScope.showLoadingIconOnPasswordScreen = false;\r\n alert('Group joining failed. Please try again.')\r\n });\r\n } else if ($state.params.client_id != undefined) { //OAtuh\r\n AuthService.getOAuthCode($state.params.response_type, $state.params.client_id, $state.params.redirect_uri, $state.params.scope)\r\n .then(function (data) {\r\n location.href = $state.params.redirect_uri + \"?code=\" + data.data + \"&state=\" + $state.params.state;\r\n }, function (res) {\r\n var param = AuthService.getReponseParamsForError(res.status);\r\n if (param.length > 0) {\r\n location.href = $state.params.redirect_uri + \"?error=\" + param + \"&state=\" + $state.params.state;\r\n return;\r\n }\r\n });\r\n } else if ($state.params.type == 'acceptcontract') {\r\n SmartContractService.changeStatusOfContract(\r\n $state.params.groupId,\r\n $state.params.contractId,\r\n 'Accepted',\r\n $state.params.shareKey).then(function (data) {\r\n LocalstoreManager.removeUserToken();\r\n MembersService.getUserDetail($state.params.groupId).$promise.then(function (data) {\r\n $state.go('contractcomplete', { subTitle: \"You're part of \" + data.Profile.FirstName + \". Please sign in using mobile app to access your data.\", title: \"Contract Accepted Successfully\", groupId: $state.params.groupId, shareKey: $state.params.shareKey, contractId: $state.params.contractId });\r\n }, function () {\r\n //alert('Some error occured. Please try again.');\r\n $state.go('contractcomplete', { subTitle: \"You're part of group. Please sign in using mobile app to access your data.\", title: \"Contract Accepted Successfully\", groupId: $state.params.groupId, shareKey: $state.params.shareKey, contractId: $state.params.contractId });\r\n });\r\n }, function (res) {\r\n LocalstoreManager.removeUserToken();\r\n alert(\"Unable to accept contract\");\r\n $state.go('smartcontract', { groupId: $state.params.groupId, shareKey: $state.params.shareKey })\r\n });\r\n } else {\r\n //CardsService.setCardIdForTutorial(cardId);\r\n //$state.go('idenedi.tab.card');\r\n Utils.trackMixpanelEvent(\"User register on web without any invitation\");\r\n if(CONFIG.API.RELEASE == 'PROD'){\r\n LocalstoreManager.removeUserToken(); //Intentionally removing token so that user cannot signin through some way for release 1 3-21-2017\r\n $state.go('register_complete', { subTitle: \"Download the mobile app for the full IDENEDI experience.\", title: \"Welcome to IDENEDI\" });\r\n } else{\r\n location.href = CONFIG.API.INNER_APP_URL;\r\n }\r\n }\r\n }\r\n \r\n $scope.loginClicked = function () {\r\n RegistrationService.resetRegistrationData();\r\n if ($state.params.client_id != undefined) {\r\n $state.go('authorization', $state.params)\r\n } else {\r\n $state.go('login', $state.params)\r\n } \r\n }\r\n $scope.changeLoginLinkVisiblity = function (val) {\r\n $scope.showLoginLink = val;\r\n }\r\n vm.init();\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('RegBasicInfoController', RegBasicInfoController);\r\n\r\n RegBasicInfoController.$inject = [\r\n '$rootScope',\r\n '$scope',\r\n '$state',\r\n '$stateParams',\r\n '$timeout',\r\n 'RegistrationService',\r\n 'GroupsService',\r\n 'REGISTRATION_CONFIG'\r\n ];\r\n function RegBasicInfoController($rootScope, $scope, $state, $stateParams, $timeout, RegistrationService, GroupsService, REGISTRATION_CONFIG) {\r\n var vm = this;\r\n $scope.verifyingLink = false;\r\n\r\n vm.init = function () {\r\n $scope.firstName = RegistrationService.registrationData.FirstName;\r\n $scope.lastName = RegistrationService.registrationData.LastName;\r\n\r\n //if ($stateParams.gid != undefined && $stateParams.key != undefined) {\r\n // $scope.verifyingLink = true;\r\n // $scope.changeLoginLinkVisiblity(false);\r\n // GroupsService.getGroupInvitationDetails($stateParams.gid, $stateParams.key).$promise.then(function (data) {\r\n // if (data.IsExpired == undefined || data.IsExpired == true)\r\n // $state.go('register_expired');\r\n // else {\r\n // $scope.verifyingLink = false;\r\n // $scope.changeLoginLinkVisiblity(true);\r\n // }\r\n // }, function () { });\r\n //} else\r\n // $scope.changeLoginLinkVisiblity(true);\r\n };\r\n\r\n vm.init();\r\n\r\n $scope.onNextButtonClick = function (e) {\r\n /* $timeout(function () {\r\n $scope.regForm['firstName'].$setValidity('required', false);\r\n },500); */\r\n };\r\n\r\n $scope.onSubmit = function (regForm) {\r\n //For release 1 27-Mar-2017\r\n //if ($stateParams.gid == undefined || $stateParams.key == undefined) {\r\n // alert('You cannot register without invitation.');\r\n // return;\r\n //}\r\n if (regForm.$valid) {\r\n $scope.$emit(REGISTRATION_CONFIG.EVENTS.BASIC_INFO_SUCCESS, { firstName: $scope.firstName, lastName: $scope.lastName });\r\n }\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('RegPasswordController', RegPasswordController);\r\n\r\n RegPasswordController.$inject = ['$rootScope', '$scope', '$stateParams', 'RegistrationService', 'REGISTRATION_CONFIG'];\r\n function RegPasswordController($rootScope, $scope, $stateParams, RegistrationService, REGISTRATION_CONFIG) {\r\n var vm = this;\r\n var hasAnyError = false;\r\n var registrationComplete = false;\r\n\r\n vm.init = function () {\r\n mixpanel.track_links('#terms', 'Open Terms of Use');\r\n mixpanel.track_links('#policy', 'Open Privacy Policy');\r\n };\r\n\r\n vm.init();\r\n\r\n $scope.onNextButtonClick = function (e) {\r\n\r\n };\r\n\r\n $scope.onSubmit = function (regForm) {\r\n //if ($stateParams.gid == undefined || $stateParams.key == undefined) {\r\n // alert('You cannot register without invitation.');\r\n // return;\r\n //}\r\n if (regForm.$valid && !$rootScope.showLoadingIconOnPasswordScreen) {\r\n $rootScope.showLoadingIconOnPasswordScreen = true;\r\n\r\n if (!registrationComplete) {\r\n RegistrationService.register(\r\n RegistrationService.registrationData.FirstName,\r\n RegistrationService.registrationData.LastName,\r\n RegistrationService.registrationData.Country,\r\n RegistrationService.registrationData.PhoneNo,\r\n RegistrationService.registrationData.VerificationCode,\r\n $scope.password)\r\n .$promise.then(registrationSuccess, registrationError);\r\n } else {\r\n registrationSuccess();\r\n } \r\n }\r\n };\r\n\r\n function registrationSuccess(data) {\r\n registrationComplete = true;\r\n $scope.$emit(REGISTRATION_CONFIG.EVENTS.REGISTRATION_SUCCESS, { password: $scope.password });\r\n }\r\n\r\n function registrationError(response) {\r\n $rootScope.showLoadingIconOnPasswordScreen = false;\r\n\r\n if (response.status == 500 && response.data.IdenediExceptionType == \"PHONE_ALREADY_EXISTS\") {\r\n $scope.regForm['password'].$setValidity('serverError', false);\r\n $scope.serverErrorMessage = response.data.Message;\r\n hasAnyError = true;\r\n } else {\r\n alert(\"Registration failed due to some error!\");\r\n }\r\n }\r\n\r\n $scope.fieldChanged = function () {\r\n if (hasAnyError) {\r\n $scope.regForm['password'].$setValidity('serverError', true);\r\n hasAnyError = false;\r\n }\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('RegPrimaryPhoneController', RegPrimaryPhoneController);\r\n \r\n\r\n RegPrimaryPhoneController.$inject = [\r\n '$scope',\r\n '$rootScope',\r\n '$location',\r\n '$state',\r\n '$mdDialog',\r\n '$filter',\r\n 'Countries',\r\n 'RegistrationService',\r\n 'Utils',\r\n 'REGISTRATION_CONFIG'\r\n ];\r\n function RegPrimaryPhoneController(\r\n $scope,\r\n $rootScope,\r\n $location,\r\n $state,\r\n $mdDialog,\r\n $filter,\r\n Countries,\r\n RegistrationService,\r\n Utils,\r\n REGISTRATION_CONFIG) {\r\n\r\n var vm = this;\r\n vm.selectedCountry = null;\r\n vm.country = null;\r\n\r\n var hasAnyError = false;\r\n var dialogVisible = false;\r\n $scope.countries = Countries.getCountriesSortedByName();\r\n $scope.serverErrorMessage = '';\r\n $scope.dataLimit = 20;\r\n $scope.btnDisabled = false;\r\n $scope.dataLoaded = false;\r\n $scope.callingCode = \"\";\r\n\r\n vm.init = function () {\r\n Utils.getUserCountryThroughIP().then(countryFetchSuccessOrError, countryFetchSuccessOrError);\r\n $scope.$watch('countryCode', function (newValue, oldValue, scope) {\r\n $scope.callingCode = Countries.getCountryCallingCode(newValue);\r\n });\r\n };\r\n\r\n vm.init();\r\n\r\n $scope.onNextButtonClick = function (e) {\r\n\r\n };\r\n\r\n $scope.onSubmit = function (regForm) {\r\n if (regForm.$valid && !$scope.btnDisabled) {\r\n var phoneNumber = /*$scope.callingCode + */$('#number').val().trim(); //Not using $scope.phoneNumber becuase it trims 0 from iput type tel\r\n $scope.btnDisabled = true;\r\n RegistrationService.sendSMSVerificationCode('', phoneNumber, '', '', $scope.countryCode)\r\n .$promise\r\n .then(smsCodeSentSuccess, smsCodeSentError)\r\n }\r\n };\r\n\r\n function countryFetchSuccessOrError(countryCode) {\r\n $scope.dataLoaded = true;\r\n\r\n //Country is found by IP\r\n var country = RegistrationService.registrationData.Country;\r\n if (country.length == 0 && countryCode && countryCode.length > 0 && Countries.getCountryNameByCode(countryCode).length > 0) {\r\n country = countryCode;\r\n }\r\n\r\n $scope.countryCode = country;\r\n vm.country = Countries.getCountryNameByCode(country);\r\n var callingCode = Countries.getCountryCallingCode(country);\r\n if (callingCode.length > 0)\r\n $scope.callingCode = callingCode;\r\n\r\n $scope.phoneNumber = RegistrationService.registrationData.PhoneNo;\r\n //Hacky way to get the data from dialog. It should be moved to directive or different controller for dialog.\r\n //$rootScope.$on('countryClicked', function (event, data) {\r\n // $scope.countryName = data.countryName;\r\n // $scope.callingCode = data.callingCode;\r\n // $scope.countryCode = data.countryCode; //This is not used any where in HTML\r\n // $scope.fieldChange();\r\n //});\r\n }\r\n\r\n\r\n function smsCodeSentSuccess(data) {\r\n $scope.btnDisabled = false;\r\n var phoneNumber = $('#number').val().trim(); //Not using $scope.phoneNumber becuase it trims 0 from iput type tel;\r\n $scope.$emit(REGISTRATION_CONFIG.EVENTS.PRIMARY_PHONE_SUCCESS, { countryCode: $scope.countryCode, phoneNumber: phoneNumber });\r\n };\r\n\r\n function smsCodeSentError(response) {\r\n $scope.btnDisabled = false;\r\n if (response.status == 500 && response.data.IdenediExceptionType == \"PHONE_ALREADY_EXISTS\") {\r\n $scope.regForm['phoneNumber'].$setValidity('serverError', false);\r\n $scope.serverErrorMessage = response.data.Message;\r\n hasAnyError = true;\r\n } else {\r\n alert('Some error occured. Please try again.');\r\n console.log('sms code not sent');\r\n }\r\n };\r\n\r\n //$scope.onCountryFieldClick = function (e) {\r\n // e.preventDefault();\r\n // e.stopImmediatePropagation();\r\n // $mdDialog.show({\r\n // controller: RegPrimaryPhoneController, //This will cause the controller to initialize twice\r\n // templateUrl: 'app/registration/countries.html',\r\n // parent: angular.element(document.body),\r\n // targetEvent: e,\r\n // clickOutsideToClose: true\r\n // }).finally(function () { //called on closing of dialog\r\n // dialogVisible = false;\r\n // });\r\n // dialogVisible = true;\r\n //};\r\n\r\n //$scope.countrySelected = function (name, code) {\r\n // var callingCode = \"+\" + Countries.getCountryCallingCode(code);\r\n // $scope.$emit('countryClicked', { countryName: name, countryCode: code, callingCode: callingCode });\r\n // $mdDialog.cancel();\r\n //};\r\n\r\n $scope.fieldChange = function () {\r\n if (hasAnyError) {\r\n $scope.regForm['phoneNumber'].$setValidity('serverError', true);\r\n hasAnyError = false;\r\n }\r\n };\r\n\r\n $scope.onCountryTextChange = function (text) {\r\n //$scope.regForm['countryAutocompleteField'].$setValidity('countryNotFound', true);\r\n }\r\n\r\n $scope.onCountryFieldBlur = function () {\r\n findCallingCode(vm.country);\r\n }\r\n\r\n vm.selectedItemChange = function (item) {\r\n vm.selectedCountry = item;\r\n findCallingCode(item.name);\r\n };\r\n\r\n vm.querySearch = function (query) {\r\n var countries = Countries.getCountriesSortedByName();\r\n var results = query ? countries.filter(createFilterFor(query)) : countries;\r\n return results;\r\n }\r\n\r\n function findCallingCode(country) {\r\n var callingCode = Countries.getCountryCallingCodeByName(country);\r\n if (callingCode != \"\") {\r\n $scope.callingCode = callingCode;\r\n $scope.countryCode = Countries.getCountryCodeByCallingCode(callingCode);\r\n $scope.regForm['countryAutocompleteField'].$setValidity('countryNotFound', true);\r\n $scope.regForm['phoneNumber'].$setValidity('serverError', true);\r\n } else {\r\n $scope.callingCode = \"\";\r\n $scope.regForm['countryAutocompleteField'].$setValidity('countryNotFound', false);\r\n }\r\n }\r\n function createFilterFor(query) {\r\n var lowercaseQuery = angular.lowercase(query);\r\n\r\n return function filterFn(state) {\r\n return (state.name.toLocaleLowerCase().indexOf(lowercaseQuery) != -1);\r\n };\r\n }\r\n //$scope.loadMoreCountries = function () {\r\n // $scope.dataLimit += 20;\r\n // $scope.$apply();\r\n //}\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('RegVerificationController', RegVerificationController);\r\n\r\n RegVerificationController.$inject = ['$scope', '$rootScope', '$mdDialog', 'RegistrationService', 'REGISTRATION_CONFIG', 'Utils'];\r\n function RegVerificationController($scope, $rootScope, $mdDialog, RegistrationService, REGISTRATION_CONFIG, Utils) {\r\n var vm = this;\r\n var hasAnyError = false;\r\n $scope.btnDisabled = false;\r\n\r\n vm.init = function () {\r\n \r\n };\r\n\r\n vm.init();\r\n\r\n $scope.onNextButtonClick = function (e) {\r\n\r\n };\r\n\r\n $scope.onSubmit = function (regForm) {\r\n if (regForm.$valid && !$scope.btnDisabled) {\r\n $scope.btnDisabled = true;\r\n var code = getCodeVal();\r\n RegistrationService.verifySMSCode(\r\n '',\r\n RegistrationService.registrationData.PhoneNo,\r\n '',\r\n code,\r\n RegistrationService.registrationData.Country)\r\n .$promise\r\n .then(verificationSuccess, verificationError);\r\n }\r\n };\r\n\r\n function verificationSuccess(data) {\r\n $scope.btnDisabled = false;\r\n var code = getCodeVal();\r\n $scope.$emit(REGISTRATION_CONFIG.EVENTS.VERIFICATION_SUCCESS, { verificationCode: code });\r\n };\r\n\r\n function verificationError(response) {\r\n $scope.btnDisabled = false;\r\n if (response.status == 500 && response.data.IdenediExceptionType == \"INVALID_VERIFICATION_CODE\") {\r\n $scope.regForm['verificationCode'].$setValidity('serverError', false);\r\n $scope.serverErrorMessage = response.data.Message;\r\n hasAnyError = true;\r\n } else {\r\n alert('Some error occured. Please try again.');\r\n }\r\n };\r\n\r\n $scope.fieldChange = function () {\r\n if (hasAnyError) {\r\n $scope.regForm['verificationCode'].$setValidity('serverError', true);\r\n hasAnyError = false;\r\n }\r\n };\r\n\r\n $scope.onResendCodeClick = function ($event) {\r\n Utils.trackMixpanelEvent(\"Resend Code from Signup\");\r\n $rootScope.showWaitingOverlay = true;\r\n $event.preventDefault();\r\n RegistrationService.sendSMSVerificationCode('', RegistrationService.registrationData.PhoneNo, '', '', RegistrationService.registrationData.Country)\r\n .$promise\r\n .then(smsCodeSentSuccess, smsCodeSentError)\r\n };\r\n\r\n function smsCodeSentSuccess(data) {\r\n $rootScope.showWaitingOverlay = false;\r\n //alert(\"We've resend a validation code to the mobile number you registered. Try entering the new code.\");\r\n $mdDialog.show(\r\n $mdDialog.alert()\r\n .clickOutsideToClose(true)\r\n .title('')\r\n .textContent('We\\'ve resend a validation code to the mobile number you registered. Try entering the new code.')\r\n .ok('Ok')\r\n );\r\n };\r\n\r\n function smsCodeSentError(response) {\r\n $rootScope.showWaitingOverlay = false;\r\n alert('SMS could not be sent. Please try again.')\r\n };\r\n\r\n //Bug fix: If we get it through scope it casue someissue.\r\n //e.g. 0012 will be 12. It removes leading zero so we are using jquery here.\r\n function getCodeVal() {\r\n return $('input[type=tel]').val();\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('RegCompleteController', RegCompleteController);\r\n\r\n RegCompleteController.$inject = ['$scope', '$state', '$rootScope', '$stateParams', 'Utils', 'LocalstoreManager'];\r\n function RegCompleteController($scope, $state, $rootScope, $stateParams, Utils, LocalstoreManager) {\r\n $scope.playStoreLink = \"https://play.google.com/store/apps/details?id=com.exceedgulf.idenedi.android\"\r\n $scope.appleAppStoreLink = \"https://itunes.apple.com/us/app/idenedi/id995899662?ls=1&mt=8\"\r\n\r\n //$scope.groupJoined = false;\r\n //$scope.groupName = \"\";\r\n\r\n //if ($stateParams.name != undefined) {\r\n // var name = \"\";\r\n // if ($stateParams.name.trim().length > 0)\r\n // $scope.groupName = $stateParams.name.trim();\r\n // $scope.groupJoined = true;\r\n //}\r\n $scope.title = $stateParams.title;\r\n $(\"#htmlText\").html($stateParams.subTitle);\r\n\r\n if($stateParams.appleAppStoreLink){\r\n $scope.appleAppStoreLink = $stateParams.appleAppStoreLink\r\n }\r\n if($stateParams.playStoreLink){\r\n $scope.playStoreLink = $stateParams.playStoreLink\r\n }\r\n\r\n if ($state.current.name == \"register_expired\") {\r\n Utils.trackMixpanelEvent(\"Link expired\");\r\n mixpanel.track_links('#terms', 'Open Terms of Use');\r\n mixpanel.track_links('#policy', 'Open Privacy Policy');\r\n mixpanel.track_links('#support-email', 'Support email clicked');\r\n }\r\n\r\n //$scope.isNewUser = ($stateParams.newuser == 'true') ? true : false;\r\n //$scope.title = \"Welcome to IDENEDI\";\r\n //if ($stateParams.title == \"1\")\r\n // $scope.title = \"Join Confirmation\";\r\n\r\n //document.getElementsByTagName('html')[0].className = \"\";\r\n //angular.element(document).find('html').addClass('sharedcard-bg');\r\n LocalstoreManager.removeUserToken(); //Intentionally removing token so that user cannot signin through some way for release 1 3-21-2017\r\n\r\n var cleanupCB = $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\r\n event.preventDefault();\r\n });\r\n\r\n $scope.$on('$destroy', function () {\r\n cleanupCB();\r\n });\r\n\r\n $scope.iOSAppDownload = function () {\r\n Utils.trackMixpanelEvent(\"Web: IPhone app link clicked.\");\r\n }\r\n\r\n $scope.androidAppDownload = function () {\r\n Utils.trackMixpanelEvent(\"Web: Android app link clicked.\");\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('PasswordNumberController', PasswordNumberController);\r\n\r\n PasswordNumberController.$inject = ['$scope', '$state', '$stateParams', '$location', 'StateManager', 'LocalstoreManager', 'RegistrationService', 'Countries', 'Utils'];\r\n function PasswordNumberController($scope, $state, $stateParams, $location, StateManager, LocalstoreManager, RegistrationService, Countries, Utils) {\r\n var vm = this;\r\n vm.callingCode = \"\";\r\n\r\n var hasAnyError = false;\r\n $scope.params = $stateParams;\r\n $scope.btnDisabled = false;\r\n\r\n vm.init = function () {\r\n Utils.trackMixpanelEvent(\"Open Forgot password Screen\");\r\n Utils.getUserCountryThroughIP().then(countryFetchSuccessOrError, countryFetchSuccessOrError);\r\n };\r\n vm.init();\r\n $scope.onSubmit = function (form) {\r\n if (form.$valid && !$scope.btnDisabled) {\r\n $scope.btnDisabled = true;\r\n\r\n var countryCode = Countries.getCountryCodeByCallingCode(vm.callingCode.trim());\r\n var mobileNumber = vm.callingCode.trim() + $('#number').val().trim(); //Not using $scope.phoneNumber becuase it trims 0 from iput type tel\r\n if (mobileNumber.substr(0, 1) != \"+\" && mobileNumber.substr(0, 2) != \"00\") //If code is not added in mobile number\r\n mobileNumber = \"+\" + mobileNumber;\r\n RegistrationService.passwordData.Region = countryCode;\r\n RegistrationService.passwordData.Number = mobileNumber;\r\n RegistrationService.sendSMSVerificationCode(RegistrationService.passwordData.Number, '', '', '', countryCode)\r\n .$promise\r\n .then(smsCodeSentSuccess, smsCodeSentError)\r\n }\r\n };\r\n\r\n function smsCodeSentSuccess(data) {\r\n Utils.trackMixpanelEvent(\"Enter Registration Number from forgot password\");\r\n $scope.btnDisabled = false;\r\n $state.go('passwordverify', $stateParams);\r\n };\r\n\r\n function countryFetchSuccessOrError(countryCode) {\r\n if (RegistrationService.passwordData.Region && RegistrationService.passwordData.Region != \"\") {\r\n vm.callingCode = Countries.getCountryCallingCode(RegistrationService.passwordData.Region);\r\n } else {\r\n vm.callingCode = Countries.getCountryCallingCode(countryCode);\r\n }\r\n\r\n if (RegistrationService.passwordData.Number && RegistrationService.passwordData.Number != \"\") {\r\n var number = RegistrationService.passwordData.Number;\r\n if (number.substr(0, 1) == \"+\") {\r\n number = number.substr(1);\r\n } else if (number.substr(0, 2) != \"00\") {\r\n number = number.substr(2);\r\n }\r\n number = number.substr(vm.callingCode.length);\r\n $scope.phoneNumber = number;\r\n }\r\n }\r\n\r\n function smsCodeSentError(response) {\r\n $scope.btnDisabled = false;\r\n if (response.status == 500 && response.data.IdenediExceptionType == \"INVALID_USER\") {\r\n $scope.passForm['number'].$setValidity('serverError', false);\r\n $scope.serverErrorMessage = \"Mobile number was not found.\" ;//response.data.Message;\r\n hasAnyError = true;\r\n } else {\r\n alert('Some error occured. Please try again.');\r\n console.log('sms code not sent');\r\n }\r\n };\r\n\r\n $scope.fieldChange = function () {\r\n //if (hasAnyError) {\r\n $scope.passForm['number'].$setValidity('serverError', true);\r\n hasAnyError = false;\r\n //}\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('PasswordVerifyController', PasswordVerifyController);\r\n\r\n PasswordVerifyController.$inject = ['$scope','$rootScope', '$state', '$stateParams', '$location', '$mdDialog', 'AuthService', 'SharedCard', 'StateManager', 'LocalstoreManager', 'RegistrationService', 'Utils'];\r\n function PasswordVerifyController($scope, $rootScope, $state, $stateParams, $location, $mdDialog, AuthService, SharedCard, StateManager, LocalstoreManager, RegistrationService, Utils) {\r\n var vm = this;\r\n var hasAnyError = false;\r\n $scope.params = $stateParams;\r\n document.getElementsByTagName('html')[0].className = \"\";\r\n angular.element(document).find('html').addClass('sharedcard-bg');\r\n vm.init = function () {\r\n \r\n };\r\n vm.init();\r\n $scope.onSubmit = function (form) {\r\n if (form.$valid && !$scope.btnDisabled) {\r\n var code = getCodeVal();\r\n $scope.btnDisabled = true;\r\n RegistrationService.verifySMSCode(\r\n RegistrationService.passwordData.Number,\r\n '',\r\n '',\r\n code,\r\n RegistrationService.passwordData.Region)\r\n .$promise\r\n .then(verificationSuccess, verificationError);\r\n }\r\n };\r\n\r\n function verificationSuccess(data) {\r\n Utils.trackMixpanelEvent(\"Enter Code from forgot password\");\r\n $scope.btnDisabled = false;\r\n RegistrationService.passwordData.Code = getCodeVal();\r\n $state.go('passwordchange', $stateParams);\r\n };\r\n\r\n function verificationError(response) {\r\n $scope.btnDisabled = false;\r\n if (response.status == 500 && response.data.IdenediExceptionType == \"INVALID_VERIFICATION_CODE\") {\r\n $scope.passForm['code'].$setValidity('serverError', false);\r\n $scope.serverErrorMessage = response.data.Message;\r\n hasAnyError = true;\r\n } else {\r\n alert('Some error occured. Please try again.');\r\n }\r\n };\r\n\r\n $scope.onResendCodeClick = function ($event) {\r\n Utils.trackMixpanelEvent(\"Resend Code from forgot password\");\r\n $rootScope.showWaitingOverlay = true;\r\n $event.preventDefault();\r\n RegistrationService.sendSMSVerificationCode(RegistrationService.passwordData.Number, '', '', '', RegistrationService.passwordData.Region)\r\n .$promise\r\n .then(smsCodeSentSuccess, smsCodeSentError)\r\n };\r\n\r\n function smsCodeSentSuccess(data) {\r\n $rootScope.showWaitingOverlay = false;\r\n //alert(\"We've resend a validation code to the mobile number you registered. Try entering the new code.\");\r\n $mdDialog.show(\r\n $mdDialog.alert()\r\n .clickOutsideToClose(true)\r\n .title('')\r\n .textContent('We\\'ve resend a validation code to the mobile number you registered. Try entering the new code.')\r\n .ok('Ok')\r\n );\r\n };\r\n\r\n function smsCodeSentError(response) {\r\n $rootScope.showWaitingOverlay = false;\r\n alert('SMS could not be sent. Please try again.')\r\n };\r\n\r\n $scope.fieldChange = function () {\r\n if (hasAnyError) {\r\n $scope.passForm['code'].$setValidity('serverError', true);\r\n hasAnyError = false;\r\n }\r\n };\r\n\r\n //Bug fix: If we get it through scope it casue someissue.\r\n //e.g. 0012 will be 12. It removes leading zero so we are using jquery here.\r\n function getCodeVal() { \r\n return $('input[type=tel]').val();\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('PasswordChangeController', PasswordChangeController);\r\n\r\n PasswordChangeController.$inject = ['$scope', '$state', '$stateParams', '$location', 'StateManager', 'LocalstoreManager', 'RegistrationService', 'Utils'];\r\n function PasswordChangeController($scope, $state, $stateParams, $location, StateManager, LocalstoreManager, RegistrationService, Utils) {\r\n var vm = this;\r\n var hasAnyError = false;\r\n $scope.params = $stateParams;\r\n document.getElementsByTagName('html')[0].className = \"\";\r\n angular.element(document).find('html').addClass('sharedcard-bg');\r\n vm.init = function () {\r\n\r\n };\r\n vm.init();\r\n $scope.onSubmit = function (form) {\r\n if (form.$valid && !$scope.btnDisabled) {\r\n if ($scope.password == $scope.confirmpassword) {\r\n $scope.btnDisabled = true;\r\n RegistrationService.resetPassword(RegistrationService.passwordData.Number, $scope.password, RegistrationService.passwordData.Code, RegistrationService.passwordData.Region)\r\n .$promise\r\n .then(resetSuccess, resetError)\r\n } else {\r\n $scope.passForm['confirmpassword'].$setValidity('mismatch', false);\r\n hasAnyError = true;\r\n }\r\n }\r\n };\r\n\r\n function resetSuccess(data) {\r\n Utils.trackMixpanelEvent(\"Reset Password\");\r\n $scope.btnDisabled = false;\r\n RegistrationService.passwordData = {}; //Resetting\r\n $state.go('passwordcomplete', $stateParams);\r\n };\r\n\r\n function resetError(response) {\r\n $scope.btnDisabled = false;\r\n if (response.status == 500 && (response.data.IdenediExceptionType == \"INVALID_USER\" || response.data.IdenediExceptionType == \"INVALID_VERIFICATION_CODE\")) {\r\n $scope.passForm['confirmpassword'].$setValidity('serverError', false);\r\n $scope.serverErrorMessage = response.data.Message;\r\n hasAnyError = true;\r\n } else {\r\n alert('Some error occured. Please try again.');\r\n console.log('resetting password failed');\r\n }\r\n };\r\n\r\n $scope.fieldChange = function () {\r\n if (hasAnyError) {\r\n $scope.passForm['confirmpassword'].$setValidity('mismatch', true);\r\n $scope.passForm['confirmpassword'].$setValidity('serverError', true);\r\n hasAnyError = false;\r\n }\r\n };\r\n\r\n //Used in password_step_complete.html\r\n $scope.onSignInClick = function () {\r\n if ($stateParams.client_id != undefined) //It means OAuth verification is on way. User has come to change password from OAuth screen\r\n {\r\n $state.go('authorization', { 'response_type': $stateParams.response_type, 'client_id': $stateParams.client_id, 'redirect_uri': $stateParams.redirect_uri, 'scope': $stateParams.scope, 'state': $stateParams.state });\r\n } else {\r\n $state.go('login', $stateParams);\r\n }\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').factory('RegistrationService', RegistrationService);\r\n\r\n RegistrationService.$inject = ['$resource', '$http', 'CONFIG', 'LocalstoreManager'];\r\n function RegistrationService($resource, $http, CONFIG, LocalstoreManager) {\r\n var registrationData = {\r\n PhoneNo: '',\r\n VerificationCode: '',\r\n FirstName: '',\r\n LastName: '',\r\n Country: '',\r\n Password: ''\r\n };\r\n var passwordData = {\r\n\r\n };\r\n\r\n var registrationService = {\r\n sendSMSVerificationCode: sendSMSVerificationCode,\r\n verifySMSCode: verifySMSCode,\r\n registrationData: registrationData,\r\n register: register,\r\n resetRegistrationData: resetRegistrationData,\r\n passwordData: passwordData,\r\n resetPassword: resetPassword\r\n };\r\n\r\n return registrationService;\r\n\r\n function resetPassword(identity, newpassword, verificationCode, region) {\r\n var postData = {};\r\n\r\n postData.Identity = identity;\r\n postData.NewPassword = newpassword;\r\n postData.VerificationCode = verificationCode;\r\n postData.Region = region;\r\n\r\n return $resource(CONFIG.API.PROVIDER_HOST + '/api/account/ResetPassword').save(postData, success, error);\r\n\r\n function success(data) {\r\n return data;\r\n }\r\n\r\n function error(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function resetRegistrationData() {\r\n this.registrationData = {\r\n PhoneNo: '',\r\n VerificationCode: '',\r\n FirstName: '',\r\n LastName: '',\r\n Country: '',\r\n Password: ''\r\n };\r\n }\r\n\r\n function sendSMSVerificationCode(identity, phoneNumber, smsMessage, verificationCode, region) {\r\n var postData = {};\r\n\r\n postData.Identity = identity;\r\n postData.PhoneNumber = phoneNumber;\r\n postData.SMSMessage = smsMessage;\r\n postData.VerificationCode = verificationCode;\r\n postData.Region = region;\r\n\r\n return $resource(CONFIG.API.PROVIDER_HOST + '/api/account/SendSMSVerificationCode').save(postData, smsCodeSentSuccess, smsCodeSentError);\r\n\r\n function smsCodeSentSuccess(data) {\r\n return data;\r\n }\r\n\r\n function smsCodeSentError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function verifySMSCode(identity, phoneNumber, smsMessage, verificationCode, region) {\r\n var postData = {};\r\n\r\n postData.Identity = identity;\r\n postData.PhoneNumber = phoneNumber;\r\n postData.SMSMessage = smsMessage;\r\n postData.VerificationCode = verificationCode;\r\n postData.Region = region;\r\n\r\n return $resource(CONFIG.API.PROVIDER_HOST + '/api/account/VerifySMSVerificationCode').save(postData, verificationCodeSuccess, verificationCodeError);\r\n\r\n function verificationCodeSuccess(data) {\r\n return data;\r\n }\r\n\r\n function verificationCodeError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function register(firstName, lastName, country, phoneNumber, verificationCode, password) {\r\n var postData = {};\r\n\r\n postData.FirstName = firstName;\r\n postData.LastName = lastName;\r\n postData.Country = country;\r\n postData.PhoneNo = phoneNumber;\r\n postData.VerificationCode = verificationCode;\r\n postData.Password = password;\r\n\r\n return $resource(CONFIG.API.PROVIDER_HOST + '/api/account/Register').save(postData, registrationSuccess, registrationError);\r\n\r\n function registrationSuccess(data) {\r\n LocalstoreManager.saveUserToken(data.Token);\r\n $http.defaults.headers.common['Authorization'] = 'Bearer ' + data.Token;\r\n return data;\r\n }\r\n\r\n function registrationError(response) {\r\n return response;\r\n }\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.registration').controller('DoneController', DoneController);\r\n\r\n DoneController.$inject = ['$scope', '$rootScope', '$stateParams', 'Utils', 'LocalstoreManager'];\r\n function DoneController($scope, $rootScope, $stateParams, Utils, LocalstoreManager) {\r\n $scope.playStoreLink = \"https://play.google.com/store/apps/details?id=com.exceedgulf.idenedi.android\"\r\n $scope.appleAppStoreLink = \"https://itunes.apple.com/us/app/idenedi/id995899662?ls=1&mt=8\"\r\n\r\n $scope.title = $stateParams.title;\r\n $(\"#htmlText\").html($stateParams.html); //Should be changed. But angular sanitize is not working when I compile with requireJS\r\n\r\n if($stateParams.appleAppStoreLink){\r\n $scope.appleAppStoreLink = $stateParams.appleAppStoreLink\r\n }\r\n if($stateParams.playStoreLink){\r\n $scope.playStoreLink = $stateParams.playStoreLink\r\n }\r\n\r\n LocalstoreManager.removeUserToken(); //Intentionally removing token so that user cannot signin through some way\r\n\r\n mixpanel.track_links('#ios-link', 'IPhone app link clicked on web');\r\n mixpanel.track_links('#android-link', 'Android app link clicked on web');\r\n\r\n var cleanupCB = $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\r\n event.preventDefault();\r\n });\r\n\r\n $scope.$on('$destroy', function () {\r\n cleanupCB();\r\n });\r\n };\r\n})();","(function () {\r\n angular.module('app.signin').controller('SignInController', SignInController);\r\n\r\n SignInController.$inject = ['$scope', '$state', '$stateParams', '$location', '$timeout', '$element', '$compile', 'AuthService', 'StateManager', 'GroupsService', 'LocalstoreManager', 'MembersService', 'SmartContractService', 'Utils', 'Countries', 'SharedCard', 'CONFIG'];\r\n function SignInController($scope, $state, $stateParams, $location, $timeout, $element, $compile, AuthService, StateManager, GroupsService, LocalstoreManager, MembersService, SmartContractService, Utils, Countries, SharedCard, CONFIG) {\r\n\r\n $scope.$state = $state;\r\n $scope.signing = false;\r\n\r\n var vm = this;\r\n vm.callingCode = \"\";\r\n vm.selectedCallingCode = null;\r\n\r\n var isGroupDetailsFetched = -1;\r\n var group = null;\r\n var isGroupJoined = false;\r\n\r\n //document.getElementsByTagName('html')[0].className = \"\";\r\n //angular.element(document).find('html').addClass('sharedcard-bg');\r\n vm.init = function () {\r\n Utils.trackMixpanelEvent(\"Open Application\");\r\n Utils.getUserCountryThroughIP().then(countryCodeFetched, countryCodeFetched);\r\n };\r\n\r\n vm.signIn = function (signInForm) {\r\n if (signInForm.$valid) {\r\n $scope.signing = true;\r\n var countryCode = Countries.getCountryCodeByCallingCode(vm.callingCode.trim());\r\n var mobileNumber = vm.callingCode.trim() + $('#number').val().trim(); //Not using $scope.idenedi becuase it trims 0 from iput type tel\r\n if (mobileNumber.substr(0, 1) != \"+\" && mobileNumber.substr(0, 2) != \"00\") //If code is not added in mobile number\r\n mobileNumber = \"+\" + mobileNumber;\r\n AuthService.signIn(mobileNumber, $scope.password, countryCode).$promise.then(signInSuccess, signInError);\r\n //Utils.getUserCountryThroughIP().then(countryFetchSuccessOrError, countryFetchSuccessOrError);\r\n }\r\n };\r\n\r\n function countryFetchSuccessOrError(countryCode) {\r\n //AuthService.signIn($scope.idenedi, $scope.password, countryCode).$promise.then(signInSuccess, signInError);\r\n }\r\n\r\n function countryCodeFetched(countryCode) {\r\n vm.callingCode = Countries.getCountryCallingCode(countryCode);\r\n }\r\n\r\n var signInSuccess = function (data) {\r\n if ($stateParams.cid != undefined) {\r\n //We should not send autosave true ideally when the signedin user is same as shared card user\r\n //But even if we send this the server side has made a check which does not add the member to its own members list\r\n var sharedCard = SharedCard.getSharedCard($stateParams.cid, true, true);\r\n sharedCard.$promise.then(function (data) {\r\n StateManager.skip();\r\n //We are restting because we want the user to go back from member to members list which is handled in member.controller\r\n StateManager.resetStates();\r\n //$state.go('idenedi.member', { id: data.Idenedi });\r\n $state.go('register_complete', { subTitle: \"Sign-in to the app to view it.\", title: \"The card was saved successfully!\" });\r\n }, function () { });\r\n }\r\n else if ($stateParams.pid != undefined) {\r\n //We should not send this call ideally when the signedin user is same as public profile user\r\n //But even if we send this the server side has made a check which does not add the member to its own members list\r\n SharedCard.saveMember($stateParams.pid).$promise.then(function (data) {\r\n StateManager.skip();\r\n //We are restting because we want the user to go back from member to members list which is handled in member.controller\r\n StateManager.resetStates();\r\n $state.go('register_complete', { subTitle: \"Sign-in to the app to view it.\", title: \"The contact was saved successfully!\" });\r\n }, function () {\r\n\r\n });\r\n }\r\n else if ($stateParams.gid != undefined && $stateParams.key != undefined && $stateParams.type == \"recommend\") {\r\n LocalstoreManager.shiftTokenToTemporaryStorage(); //so that we dont have to deal with reload issues and localstorage scenarios\r\n $state.go('recommend_join', $stateParams);\r\n }\r\n else if ($stateParams.gid != undefined && $stateParams.key != undefined) {\r\n MembersService.getUserDetail($stateParams.gid).$promise.then(function (data) {\r\n isGroupDetailsFetched = 1;\r\n group = data;\r\n if (isGroupJoined) {\r\n var groupAppData = GroupsService.getGroupAppData(group)\r\n $state.go('register_complete', { \r\n subTitle: \"You are part of the \" + group.fullName + \" group. Please use \" + groupAppData.AppName + \" mobile app to access the group.\", \r\n title: \"Join Confirmation\",\r\n playStoreLink: groupAppData.PlayStoreLink,\r\n appleAppStoreLink: groupAppData.AppleAppStoreLink\r\n });\r\n }\r\n }, function (res) {\r\n isGroupDetailsFetched = 0;\r\n if (isGroupJoined) {\r\n $state.go('register_complete', { subTitle: \"You are part of the group. Please use IDENEDI mobile app to access the group.\", title: \"Join Confirmation\" });\r\n }\r\n });\r\n\r\n GroupsService.joinGroupThroughInvitationKey($stateParams.gid, $stateParams.key).$promise.then(function (data) {\r\n Utils.trackMixpanelEvent(\"Group joined through group invite\");\r\n LocalstoreManager.removeUserToken(); //Intentionally removing token so that user cannot signin through some way for release 1 3-21-2017\r\n isGroupJoined = true;\r\n if (isGroupDetailsFetched > -1) {\r\n if(isGroupDetailsFetched == 1){\r\n var groupAppData = GroupsService.getGroupAppData(group)\r\n $state.go('register_complete', { \r\n subTitle: \"You are part of the \" + group.fullName + \" group. Please use \" + groupAppData.AppName + \" mobile app to access the group.\", \r\n title: \"Join Confirmation\",\r\n playStoreLink: groupAppData.PlayStoreLink,\r\n appleAppStoreLink: groupAppData.AppleAppStoreLink\r\n });\r\n }\r\n else\r\n $state.go('register_complete', { subTitle: \"Download the mobile app for the full IDENEDI experience.\", title: \"Join Confirmation\" });\r\n }\r\n }, function () {\r\n LocalstoreManager.removeUserToken();\r\n $scope.signing = false;\r\n alert('Group joining failed. Please try again.')\r\n });\r\n } else if ($stateParams.type == 'acceptcontract') {\r\n SmartContractService.changeStatusOfContract(\r\n $stateParams.groupId,\r\n $stateParams.contractId,\r\n 'Accepted',\r\n $stateParams.shareKey).then(function (data) {\r\n LocalstoreManager.removeUserToken();\r\n MembersService.getUserDetail($stateParams.groupId).$promise.then(function (data) {\r\n $scope.signing = false;\r\n $state.go('contractcomplete', { subTitle: \"You're part of \" + data.Profile.FirstName + \". Please sign in using mobile app to access your data.\", title: \"Contract Accepted Successfully\", groupId: $stateParams.groupId, shareKey: $stateParams.shareKey, contractId: $stateParams.contractId });\r\n }, function () {\r\n $scope.signing = false;\r\n //alert('Some error occured. Please try again.');\r\n $state.go('contractcomplete', { subTitle: \"You're part of group. Please sign in using mobile app to access your data.\", title: \"Contract Accepted Successfully\", groupId: $stateParams.groupId, shareKey: $stateParams.shareKey, contractId: $stateParams.contractId });\r\n });\r\n }, function (res) {\r\n LocalstoreManager.removeUserToken();\r\n $scope.signing = false;\r\n alert(\"Unable to accept contract\");\r\n $state.go('smartcontract', { groupId: $stateParams.groupId, shareKey: $stateParams.shareKey })\r\n });\r\n } else {\r\n Utils.trackMixpanelEvent(\"User signin on web without any invitation.\");\r\n if(CONFIG.API.RELEASE == 'PROD'){\r\n LocalstoreManager.removeUserToken();\r\n $state.go('register_complete', { subTitle: \"Download the mobile app for the full IDENEDI experience.\", title: \"Welcome to IDENEDI\" });\r\n } else{\r\n location.href = CONFIG.API.INNER_APP_URL;\r\n }\r\n }\r\n };\r\n\r\n var signInError = function (response) {\r\n $scope.signing = false;\r\n\r\n if (response.status == 500) {\r\n $scope.signInForm['password'].$setValidity('invalidAuth', false);\r\n }\r\n else {\r\n alert(\"Your network is down. \" + response.status)\r\n }\r\n };\r\n\r\n vm.init();\r\n\r\n vm.onNumberFieldChange = function () {\r\n $scope.signInForm['password'].$setValidity('invalidAuth', true);\r\n };\r\n\r\n vm.querySearch = function (query) {\r\n var countries = Countries.getCountriesSortedByCallingCode();\r\n var results = query ? countries.filter(createFilterFor(query)) : countries;\r\n return results;\r\n }\r\n\r\n function createFilterFor(query) {\r\n var lowercaseQuery = angular.lowercase(query);\r\n\r\n return function filterFn(state) {\r\n var text = state.callingCode;\r\n var text2 = \"+\" + state.callingCode;\r\n var text3 = \"00\" + state.callingCode;\r\n return (text.indexOf(lowercaseQuery) === 0 || text2.indexOf(lowercaseQuery) === 0 || text3.indexOf(lowercaseQuery) === 0);\r\n };\r\n\r\n }\r\n\r\n $scope.signInBtnClick = function () {\r\n $state.go('login', $stateParams)\r\n };\r\n\r\n $scope.goToRegistration = function () {\r\n $state.go('register.basicinfo', $stateParams)\r\n }\r\n\r\n $scope.goToPasswordChange = function () {\r\n $state.go('passwordnumber', $stateParams);\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.signin').controller('InviteController', InviteController);\r\n\r\n InviteController.$inject = ['$rootScope','$scope', '$state', '$stateParams', '$location', 'AuthService', 'StateManager', 'GroupsService', 'LocalstoreManager', 'MembersService', 'Countries','Utils'];\r\n function InviteController($rootScope, $scope, $state, $stateParams, $location, AuthService, StateManager, GroupsService, LocalstoreManager, MembersService, Countries, Utils) {\r\n\r\n $scope.$state = $state;\r\n $scope.title = \"\";\r\n $scope.labelText = \"\";\r\n $scope.groupName = \"\";\r\n\r\n var vm = this;\r\n var isGroupFeteched = false;\r\n var group = null;\r\n var members = [];\r\n\r\n vm.init = function () {\r\n Utils.trackMixpanelEvent(\"User lands on group invitation screen\");\r\n if ($stateParams.gid == undefined || $stateParams.key == undefined) {\r\n $state.go('login', $stateParams);\r\n return;\r\n }\r\n //if ($state.current.name == \"invite\") {\r\n $scope.title = \"Group Invitation\";\r\n $scope.labelText = \"Sign In or Register to join the group\";\r\n //} else { //if recommend\r\n // $scope.title = \"Checkout this Group\";\r\n // $scope.labelText = \"Sign In or Register to join the group\";\r\n //}\r\n\r\n $rootScope.showWaitingOverlay = true;\r\n GroupsService.getGroupInviteMembers($stateParams.gid, $stateParams.key).$promise.then(function (data) {\r\n members = data;\r\n MembersService.getUserDetail($stateParams.gid).$promise.then(function (data) {\r\n $rootScope.showWaitingOverlay = false;\r\n isGroupFeteched = true;\r\n group = data;\r\n MembersService.setMemberForJoinGroup(data);\r\n displayData();\r\n }, function () {\r\n $rootScope.showWaitingOverlay = false;\r\n isGroupFeteched = false;\r\n alert('Some error occured');\r\n });\r\n }, function (response) {\r\n $rootScope.showWaitingOverlay = false;\r\n if (response.data != undefined && response.data.IdenediExceptionType == \"INVALID_LINK_KEY\") {\r\n $state.go('register_expired');\r\n } else {\r\n alert('Some error occured.')\r\n }\r\n });\r\n };\r\n\r\n vm.init();\r\n \r\n function displayData() {\r\n // if ((group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ONLY_ADMIN_CAN_ADD\r\n // || GroupsService.getGroupType(group) == \"Secret\") && $state.current.name == \"recommend\") { //Only for recommend\r\n // $rootScope.showWaitingOverlay = false;\r\n // $state.go('register_expired', $stateParams); //for secret and only admin can add, redirect to expired page\r\n // return;\r\n // }\r\n for (var i in members) {\r\n if (members[i].TitleInGroup == null) {\r\n members[i].TitleInGroup = \"Member\";\r\n }\r\n }\r\n $scope.groupName = group.fullName.trim();\r\n $scope.members = members;\r\n }\r\n\r\n $scope.signInBtnClick = function () {\r\n if($state.current.name == \"recommend\")\r\n $stateParams.type = $state.current.name;\r\n $state.go('login', $stateParams);\r\n };\r\n\r\n $scope.goToRegistration = function () {\r\n if ($state.current.name == \"recommend\")\r\n $stateParams.type = $state.current.name;\r\n $state.go('register.basicinfo', $stateParams);\r\n }\r\n\r\n $scope.getMemberCountry = function (code) {\r\n return Countries.getCountryNameByCode(code);\r\n }\r\n\r\n $scope.getMemberProfileImageSmallUrl = function (url) {\r\n return Utils.getMemberProfileImageSmallUrl(url);\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.signin').controller('RecommendJoinController', RecommendJoinController);\r\n\r\n RecommendJoinController.$inject = ['$rootScope', '$scope', '$state', '$stateParams', '$location', 'GroupsService', 'MembersService', 'Utils'];\r\n function RecommendJoinController($rootScope, $scope, $state, $stateParams, $location, GroupsService, MembersService, Utils) {\r\n\r\n $scope.$state = $state;\r\n $scope.title = \"\";\r\n $scope.groupType = \"\";\r\n $scope.groupName = \"\";\r\n $scope.groupApproval = \"\";\r\n $scope.groupImgUrl = \"\";\r\n $scope.isDataLoaded = false;\r\n\r\n var vm = this;\r\n var group = null;\r\n var cleanup = null;\r\n\r\n vm.init = function () {\r\n if ($stateParams.gid == undefined || $stateParams.key == undefined) {\r\n $state.go('login', $stateParams);\r\n return;\r\n }\r\n\r\n group = MembersService.getMemberForJoinGroup();\r\n if (group != null) {\r\n displayData();\r\n } else {\r\n $rootScope.showWaitingOverlay = true;\r\n MembersService.getUserDetail($stateParams.gid).$promise.then(function (data) {\r\n $rootScope.showWaitingOverlay = false;\r\n group = data;\r\n MembersService.setMemberForJoinGroup(data);\r\n displayData();\r\n }, function () {\r\n $rootScope.showWaitingOverlay = false;\r\n alert('Some error occured');\r\n });\r\n }\r\n\r\n cleanup = $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\r\n if (toState.name == \"login\") {\r\n MembersService.setMemberForJoinGroup(null); //removing the group because user is going to login page\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', function () {\r\n cleanup();\r\n });\r\n };\r\n\r\n vm.init();\r\n\r\n function displayData() {\r\n // if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ONLY_ADMIN_CAN_ADD\r\n // || GroupsService.getGroupType(group) == \"Secret\") {\r\n // $rootScope.showWaitingOverlay = false;\r\n // $state.go('register_expired', $stateParams); //for secret and only admin can add, redirect to expired page\r\n // return;\r\n // }\r\n if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.JOIN_BY_EMAIL_ADDRESS_DOMAIN) {\r\n $state.go('recommend_join_email', $stateParams);\r\n return;\r\n }\r\n\r\n $scope.title = group.fullName.trim();\r\n $scope.groupType = GroupsService.getGroupType(group);\r\n $scope.groupImgUrl = group.Profile.ProfileImageUrl;\r\n $scope.isDataLoaded = true;\r\n if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ONLY_ADMIN_CAN_ADD) {\r\n $scope.groupApproval = \"Only admin can add\";\r\n } else if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ANYONE_CAN_JOIN) {\r\n $scope.groupApproval = \"Anyone can join this group\";\r\n } else if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ADMIN_APPROVAL_REQUIRED) {\r\n $scope.groupApproval = \"Joining this group requires admin approval\";\r\n } else if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.JOIN_BY_EMAIL_ADDRESS_DOMAIN) {\r\n $scope.groupApproval = \"Joining this group requires email approval\";\r\n }\r\n }\r\n \r\n $scope.joinBtnClick = function () {\r\n if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.JOIN_BY_EMAIL_ADDRESS_DOMAIN) {\r\n $state.go('recommend_join_email', $stateParams);\r\n } else {\r\n $rootScope.showWaitingOverlay = true;\r\n MembersService.getUserDetail($stateParams.gid).$promise.then(function (data) {\r\n var _group = data;\r\n // if (_group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ONLY_ADMIN_CAN_ADD\r\n // || GroupsService.getGroupType(_group) == \"Secret\") {\r\n // $rootScope.showWaitingOverlay = false;\r\n // $state.go('register_expired', $stateParams); //for secret and only admin can add, redirect to expired page\r\n // return;\r\n // } else \r\n if (_group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.JOIN_BY_EMAIL_ADDRESS_DOMAIN) { //IF settings are changed to email domain\r\n $rootScope.showWaitingOverlay = false;\r\n MembersService.setMemberForJoinGroup(data);\r\n $state.go('recommend_join_email', $stateParams);\r\n } else{\r\n GroupsService.joinGroup($stateParams.gid, $stateParams.key).$promise.then(function (data) {\r\n $rootScope.showWaitingOverlay = false;\r\n var params = {};\r\n var groupAppData = GroupsService.getGroupAppData(_group)\r\n if (_group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ANYONE_CAN_JOIN) {\r\n params.title = \"Join Confirmation\";\r\n params.html = \"
You are part of the \" + $scope.title + \" group. Please use \" + groupAppData.AppName + \" mobile app to access the group.
\";\r\n params.playStoreLink = groupAppData.PlayStoreLink;\r\n params.appleAppStoreLink = groupAppData.AppleAppStoreLink;\r\n }\r\n\r\n else if (_group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ADMIN_APPROVAL_REQUIRED) {\r\n if (data[0] == \"J\") { //Joined\r\n params.title = \"Join Confirmation\";\r\n params.html = \"You are part of the \" + $scope.title + \" group. Please use \" + groupAppData.AppName + \" mobile app to access the group.
\";\r\n } else {\r\n params.title = \"Join Request Sent\";\r\n params.html = \"Thanks! Your request has been sent to group admin.\";\r\n }\r\n params.playStoreLink = groupAppData.PlayStoreLink;\r\n params.appleAppStoreLink = groupAppData.AppleAppStoreLink;\r\n }\r\n Utils.trackMixpanelEvent(\"Group joined through group invite\");\r\n $state.go('complete', params);\r\n }, function (res) {\r\n $rootScope.showWaitingOverlay = false;\r\n //if (res.ExceptionMessage && res.ExceptionMessage.length > 0)\r\n // alert(res.ExceptionMessage);\r\n //else\r\n alert(\"Some error occured.\");\r\n });\r\n }\r\n }, function () {\r\n $rootScope.showWaitingOverlay = false;\r\n $state.go('register_expired');\r\n });\r\n }\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.signin').controller('RecommendJoinEmailController', RecommendJoinEmailController);\r\n\r\n RecommendJoinEmailController.$inject = ['$rootScope', '$scope', '$state', '$stateParams', '$timeout','$location', 'GroupsService', 'MembersService', 'Utils'];\r\n function RecommendJoinEmailController($rootScope, $scope, $state, $stateParams, $timeout, $location, GroupsService, MembersService, Utils) {\r\n\r\n $scope.$state = $state;\r\n $scope.title = \"\";\r\n $scope.groupType = \"\";\r\n $scope.domainTyped = \"\";\r\n $scope.selectedDomain = \"\";\r\n $scope.emailLimit = 50;\r\n $scope.caretPos = 0;\r\n $scope.email = \"\";\r\n $scope.isDataLoaded = false;\r\n var vm = this;\r\n var group = null;\r\n \r\n vm.init = function () {\r\n if ($stateParams.gid == undefined || $stateParams.key == undefined) {\r\n $state.go('login', $stateParams);\r\n return;\r\n }\r\n\r\n group = MembersService.getMemberForJoinGroup();\r\n if (group != null) {\r\n displayData();\r\n } else {\r\n $rootScope.showWaitingOverlay = true;\r\n MembersService.getUserDetail($stateParams.gid).$promise.then(function (data) {\r\n $rootScope.showWaitingOverlay = false;\r\n group = data;\r\n MembersService.setMemberForJoinGroup(data);\r\n displayData();\r\n }, function () {\r\n $rootScope.showWaitingOverlay = false;\r\n alert('Some error occured');\r\n });\r\n }\r\n };\r\n\r\n vm.init();\r\n\r\n $scope.fieldChanged = function () {\r\n $scope.joinForm['email'].$setValidity('invalidEmail', true);\r\n var email = $scope.email;\r\n if(email){\r\n var index = email.indexOf(\"@\");\r\n if (index > -1) {\r\n var isFound = false;\r\n var domain = email.substring(index + 1, email.length);\r\n\r\n $scope.domainTyped = domain;\r\n\r\n for (var i in $scope.domains) {\r\n var d = $scope.domains[i];\r\n if (d.toLocaleLowerCase().indexOf(domain.toLocaleLowerCase()) == 0) {\r\n isFound = true;\r\n if (d.toLocaleLowerCase() == domain.toLocaleLowerCase())\r\n $scope.selectedDomain = d;\r\n else\r\n $scope.selectedDomain = \"\";\r\n break;\r\n }\r\n }\r\n if (isFound) {\r\n $scope.joinForm['email'].$setValidity('invalidDomain', true);\r\n } else {\r\n $scope.joinForm['email'].$setValidity('invalidDomain', false);\r\n $scope.selectedDomain = \"\";\r\n $scope.domainTyped = \"\";\r\n }\r\n } else { //not found\r\n $scope.joinForm['email'].$setValidity('invalidDomain', true);\r\n $scope.selectedDomain = \"\";\r\n $scope.domainTyped = \"\";\r\n }\r\n } else { //not found\r\n $scope.joinForm['email'].$setValidity('invalidDomain', true);\r\n $scope.selectedDomain = \"\";\r\n $scope.domainTyped = \"\";\r\n }\r\n }\r\n\r\n vm.join = function (joinForm) {\r\n if (joinForm.$valid) {\r\n //Later if regex is not working tey input type email\r\n var isValid = false;\r\n var regex = new RegExp();\r\n var emailPattern = regex.compile(\"^[_A-Za-z0-9-\\\\+]+(\\\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\\\.[A-Za-z0-9]+)*(\\\\.[A-Za-z]{2,})$\");\r\n\r\n isValid = emailPattern.test($scope.email);\r\n if (!isValid) {\r\n $scope.joinForm['email'].$setValidity('invalidEmail', false);\r\n return;\r\n }\r\n\r\n var isDomainFound = false;\r\n var domainEntered = getDomainOfEmail($scope.email);\r\n for (var i in $scope.domains) {\r\n var d = $scope.domains[i];\r\n if (d.toLocaleLowerCase() == domainEntered.toLocaleLowerCase()) {\r\n isDomainFound = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!isDomainFound) {\r\n $scope.joinForm['email'].$setValidity('invalidDomain', false);\r\n return;\r\n }\r\n\r\n $rootScope.showWaitingOverlay = true;\r\n MembersService.getUserDetail($stateParams.gid).$promise.then(function (data) {\r\n _group = data;\r\n // if (_group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ONLY_ADMIN_CAN_ADD\r\n // || GroupsService.getGroupType(_group) == \"Secret\") {\r\n // $rootScope.showWaitingOverlay = false;\r\n // $state.go('register_expired', $stateParams); //for secret and only admin can add, redirect to expired page\r\n // return;\r\n // } else{\r\n GroupsService.joinGroup($stateParams.gid, $stateParams.key, $scope.email).$promise.then(function (data) {\r\n $rootScope.showWaitingOverlay = false;\r\n var params = {};\r\n var groupAppData = GroupsService.getGroupAppData(_group)\r\n \r\n params.playStoreLink = groupAppData.PlayStoreLink;\r\n params.appleAppStoreLink = groupAppData.AppleAppStoreLink;\r\n \r\n if (_group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ANYONE_CAN_JOIN) {\r\n params.title = \"Join Confirmation\";\r\n params.html = \"You are part of the \" + $scope.title + \" group. Please use \" + groupAppData.AppName + \" mobile app to access the group.
\";\r\n }\r\n\r\n else if (_group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ADMIN_APPROVAL_REQUIRED) {\r\n if (data[0] == \"J\") { //Joined\r\n params.title = \"Join Confirmation\";\r\n params.html = \"You are part of the \" + $scope.title + \" group. Please use \" + groupAppData.AppName + \" mobile app to access the group.
\";\r\n } else {\r\n params.title = \"Join Request Sent\";\r\n params.html = \"Thanks! Your request has been sent to group admin.\";\r\n } \r\n }\r\n\r\n else if (_group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.JOIN_BY_EMAIL_ADDRESS_DOMAIN) {\r\n if (data[0] == \"J\") { //Joined\r\n params.title = \"Join Confirmation\";\r\n params.html = \"You are part of the \" + $scope.title + \" group. Please use \" + groupAppData.AppName + \" mobile app to access the group.
\";\r\n } else {\r\n params.title = \"Verification Email Sent\";\r\n params.html = \"Thanks! We've sent you a verification email to \" + $scope.email + \"\";\r\n }\r\n \r\n }\r\n Utils.trackMixpanelEvent(\"Group joined through group invite\");\r\n $state.go('complete', params);\r\n }, function () {\r\n $rootScope.showWaitingOverlay = false;\r\n alert(\"Some error occured.\")\r\n });\r\n // }\r\n }, function () {\r\n $rootScope.showWaitingOverlay = false;\r\n $state.go('register_expired');\r\n });\r\n }\r\n }\r\n\r\n function displayData() {\r\n // if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ONLY_ADMIN_CAN_ADD\r\n // || GroupsService.getGroupType(group) == \"Secret\") {\r\n // $rootScope.showWaitingOverlay = false;\r\n // $state.go('register_expired', $stateParams); //for secret and only admin can add, redirect to expired page\r\n // return;\r\n // }\r\n\r\n $scope.title = group.fullName.trim();\r\n $scope.groupType = GroupsService.getGroupType(group);\r\n $scope.groupImgUrl = group.Profile.ProfileImageUrl;\r\n $scope.domains = group.GroupSettings.GroupMembershipEmailAddressDomains;\r\n $scope.isDataLoaded = true;\r\n\r\n if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ONLY_ADMIN_CAN_ADD) {\r\n $scope.groupApproval = \"Only admin can add\";\r\n } else if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ANYONE_CAN_JOIN) {\r\n $scope.groupApproval = \"Anyone can join this group\";\r\n } else if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.ADMIN_APPROVAL_REQUIRED) {\r\n $scope.groupApproval = \"Joining this group requires admin approval\";\r\n } else if (group.GroupSettings.GroupMembershipOption == GroupsService.GROUP_MEMBERSHIP_OPTION.JOIN_BY_EMAIL_ADDRESS_DOMAIN) {\r\n $scope.groupApproval = \"Joining this group requires email approval\";\r\n }\r\n }\r\n \r\n function getDomainOfEmail(email) {\r\n var index = email.indexOf(\"@\");\r\n return email.substring(index + 1, email.length);\r\n }\r\n\r\n $scope.domainChanged = function () {\r\n var email = $scope.email;\r\n email = (email == undefined) ? \"\" : email;\r\n var username = \"\";\r\n if (email.indexOf(\"@\") > -1) { //already available\r\n username = email.substring(0, email.indexOf(\"@\"));\r\n } else {\r\n username = email;\r\n }\r\n\r\n var temp = username + \"@\" + $scope.selectedDomain;\r\n temp = temp.substring(0, $scope.emailLimit);\r\n $scope.caretPos = $scope.caretPos + 1;\r\n $timeout(function () { $scope.caretPos = username.length; }, 100);\r\n $scope.email = temp;\r\n $scope.joinForm['email'].$setValidity('invalidDomain', true);\r\n $scope.domainTyped = $scope.email.substring($scope.email.indexOf(\"@\") + 1, $scope.email.length);\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.signin').controller('JoinConfirmController', JoinConfirmController);\r\n\r\n JoinConfirmController.$inject = ['$rootScope', '$scope', '$state', '$stateParams', '$location', 'AuthService', 'StateManager', 'GroupsService', 'LocalstoreManager', 'MembersService', 'Utils'];\r\n function JoinConfirmController($rootScope, $scope, $state, $stateParams, $location, AuthService, StateManager, GroupsService, LocalstoreManager, MembersService, Utils) {\r\n\r\n $scope.$state = $state;\r\n $scope.groupName = \"Group\";\r\n \r\n //$scope.appName = groupAppData.AppName\r\n //$scope.playStoreLink = groupAppData.PlayStoreLink\r\n //$scope.appleAppStoreLink = groupAppData.AppleAppStoreLink\r\n\r\n $scope.dataLoaded = false;\r\n\r\n var vm = this;\r\n var isGroupFeteched = false;\r\n var group = null;\r\n\r\n vm.init = function () {\r\n mixpanel.track_links('#ios-link', 'IPhone app link clicked on web');\r\n mixpanel.track_links('#android-link', 'Android app link clicked on web');\r\n\r\n if ($stateParams.gid == undefined || $stateParams.key == undefined) {\r\n $state.go('login', $stateParams);\r\n return;\r\n }\r\n LocalstoreManager.removeUserToken(); //Intentionally removing token if any user is already logged in.\r\n $rootScope.showWaitingOverlay = true;\r\n //GroupsService.getGroupInvitationDetails($stateParams.gid, $stateParams.key).$promise.then(function (data) {\r\n // if (data.IsExpired == undefined || data.IsExpired == true){\r\n // $state.go('register_expired');\r\n // $rootScope.showWaitingOverlay = false;\r\n // }\r\n // else {\r\n MembersService.getUserDetail($stateParams.gid).$promise.then(function (data) {\r\n isGroupFeteched = true;\r\n group = data;\r\n GroupsService.joinGroupThroughInvitationKey($stateParams.gid, $stateParams.key).$promise.then(function (data) {\r\n Utils.trackMixpanelEvent(\"Group joined by email verification\");\r\n displayData();\r\n $rootScope.showWaitingOverlay = false;\r\n }, function () {\r\n $rootScope.showWaitingOverlay = false;\r\n alert('Group joining failed. Please try again.')\r\n });\r\n }, function () {\r\n $rootScope.showWaitingOverlay = false;\r\n isGroupFeteched = false;\r\n alert('Some error occured. Please try again.');\r\n });\r\n //}\r\n //}, function () {\r\n // $rootScope.showWaitingOverlay = false;\r\n // alert('Some error occured. Please try again.');\r\n //});\r\n };\r\n\r\n vm.init();\r\n \r\n function displayData() {\r\n $scope.dataLoaded = true;\r\n $scope.groupName = group.fullName.trim();\r\n var groupAppData = GroupsService.getGroupAppData(group)\r\n $scope.appName = groupAppData.AppName\r\n $scope.playStoreLink = groupAppData.PlayStoreLink\r\n $scope.appleAppStoreLink = groupAppData.AppleAppStoreLink\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.signin').controller('VerifyEmailController', VerifyEmailController);\r\n\r\n VerifyEmailController.$inject = ['$rootScope', '$scope', '$state', '$stateParams', '$location', 'AuthService', 'StateManager', 'GroupsService', 'LocalstoreManager', 'MembersService', 'Utils'];\r\n function VerifyEmailController($rootScope, $scope, $state, $stateParams, $location, AuthService, StateManager, GroupsService, LocalstoreManager, MembersService, Utils) {\r\n\r\n $scope.isLoading = true;\r\n $scope.isError = false\r\n $scope.title = ''\r\n var vm = this;\r\n\r\n vm.init = function(){\r\n verifyEmail()\r\n }\r\n\r\n function verifyEmail(){\r\n AuthService.verifyEmail($stateParams.id,$stateParams.key).$promise.then(\r\n function(data){\r\n $scope.isLoading = false\r\n $scope.title = 'Your email has been verified'\r\n \r\n }, function(res){\r\n $scope.title = 'Sorry, this link has expired!'\r\n \r\n $scope.isError = true\r\n $scope.isLoading = false\r\n }\r\n )\r\n }\r\n \r\n vm.init()\r\n };\r\n})();","(function () {\r\n angular.module('app.signin').factory('AuthService', AuthService);\r\n angular.module('app.signin').factory('HttpInterceptor', HttpInterceptor);\r\n\r\n AuthService.$inject = ['$resource', '$rootScope', '$http', 'LocalstoreManager','Utils', 'CONFIG'];\r\n function AuthService($resource, $rootScope, $http, LocalstoreManager, Utils, CONFIG) {\r\n var authService = {\r\n signIn: signIn,\r\n signout: signout,\r\n forceSignIn: forceSignIn,\r\n changePassword: changePassword,\r\n getUserDetails: getUserDetails,\r\n getOAuthClient: getOAuthClient,\r\n getOAuthCode: getOAuthCode,\r\n getReponseParamsForError: getReponseParamsForError,\r\n verifyEmail:verifyEmail\r\n };\r\n\r\n return authService;\r\n\r\n function verifyEmail(idenedi,key){\r\n return $resource(CONFIG.API.API_HOST + '/api/user/email?verifyKey=' + key + '&idenedi=' + idenedi).save({}, success, error);\r\n\r\n function success(data) {\r\n return data;\r\n }\r\n\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n function getReponseParamsForError(status) {\r\n var param = \"\";\r\n switch (status) {\r\n case 400:\r\n param = \"invalid_request\";\r\n break;\r\n case 401:\r\n param = \"unauthorized_client\";\r\n break;\r\n case 403:\r\n param = \"access_denied\";\r\n break;\r\n case 501:\r\n param = \"unsupported_response_type\";\r\n break;\r\n case 416:\r\n param = \"invalid_scope\";\r\n break;\r\n case 500:\r\n param = \"server_error\";\r\n break;\r\n case 503:\r\n param = \"temporarily_unavailable\";\r\n break;\r\n default:\r\n param = \"\";\r\n }\r\n return param;\r\n }\r\n\r\n function getOAuthClient(responseType, clientId, redirectUri, scope) {\r\n return $resource(CONFIG.API.PROVIDER_HOST + '/api/oauth/:verb').get({verb:'GetClient', response_type: responseType, client_id: clientId, redirect_uri: redirectUri, scope: scope});\r\n }\r\n\r\n function getOAuthCode(responseType, clientId, redirectUri, scope) {\r\n Utils.addTokenInHttpHeader();\r\n return $http.get(CONFIG.API.PROVIDER_HOST + '/api/oauth/GetAuthorizationCode', { params: { response_type: responseType, client_id: clientId, redirect_uri: redirectUri, scope: scope } });\r\n //return $http(CONFIG.API.PROVIDER_HOST + '/api/oauth/:verb').get({ verb: 'GetAuthorizationCode', response_type: responseType, client_id: clientId, redirect_uri: redirectUri, scope: scope });\r\n }\r\n\r\n function getUserDetails() {\r\n return $resource(CONFIG.API.API_HOST + '/api/User').get({}, userDetailsSuccess, userDetailsError);\r\n function userDetailsSuccess(data) {\r\n return data;\r\n }\r\n\r\n function userDetailsError(response) {\r\n return response;\r\n }\r\n };\r\n function signIn(identity, password, region) {\r\n var postData = {};\r\n postData.Identity = identity;\r\n postData.Password = password;\r\n postData.Region = region;\r\n\r\n return $resource(CONFIG.API.PROVIDER_HOST + '/api/account/Login').save(postData, singInSuccess, singInError);\r\n function singInSuccess(data) {\r\n LocalstoreManager.saveUserToken(data.Token);\r\n $http.defaults.headers.common['Authorization'] = 'Bearer ' + data.Token;\r\n return data;\r\n }\r\n\r\n function singInError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function signout() {\r\n $rootScope.$broadcast('SignInService->Logout');\r\n \r\n LocalstoreManager.removeUserToken();\r\n }\r\n\r\n function forceSignIn(identity, password, region) {\r\n LocalstoreManager.removeUserToken();\r\n return this.signIn(identity, password, region);\r\n }\r\n\r\n function changePassword(newPassword) {\r\n var postData = {};\r\n postData.NewPassword = newPassword;\r\n //Move it to some centeral place like on signin successful the header should be updated\r\n //Similarly on signin failed it should be removed\r\n //$http.defaults.headers.common['Authorization'] = 'Bearer ' + LocalstoreManager.getUserToken();\r\n\r\n return $resource(CONFIG.API.PROVIDER_HOST + '/api/account/ChangePassword').save(postData);\r\n function passwordChangeSuccess() {\r\n \r\n }\r\n function passwordChangeError(response) {\r\n return response;\r\n }\r\n }\r\n };\r\n\r\n HttpInterceptor.$inject = ['$injector','$q', 'CONFIG'];\r\n \r\n function HttpInterceptor($injector, $q, CONFIG) {\r\n return {\r\n request: function (config) {\r\n //if (config.headers.Accept == \"text/html\") //html cache busting is done over here. We are \r\n // //updating the html url by addition of timestamp\r\n // //so that everytime new html page is received on client side e.g. members.html?1239123123\r\n // config.url += \"?\" + CONFIG.VERSION;\r\n //config.timeout = 30 * 1000;\r\n return config;\r\n },\r\n\r\n requestError: function (config) {\r\n return config;\r\n },\r\n\r\n response: function (res) {\r\n return res;\r\n },\r\n\r\n responseError: function (res) {\r\n if (res.status == 401) {\r\n if ($injector.get('$state').current.name != \"app_permission\"\r\n && $injector.get('$state').current.name != \"announcement\") {\r\n $injector.get('AuthService').signout();\r\n $injector.get('$state').go('login');\r\n }\r\n }\r\n return $q.reject(res);\r\n }\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.signin').controller('AuthorizationController', AuthorizationController);\r\n\r\n AuthorizationController.$inject = ['$rootScope','$scope', '$state', '$stateParams', '$location', 'AuthService', 'ProfileService', 'LocalstoreManager', 'Countries', 'Utils'];\r\n function AuthorizationController($rootScope, $scope, $state, $stateParams, $location, AuthService, ProfileService, LocalstoreManager, Countries, Utils) {\r\n\r\n $scope.$state = $state;\r\n $scope.signing = false;\r\n $scope.year = new Date().getFullYear();\r\n var vm = this;\r\n var isUserFetched = false;\r\n var isClientNameFetched = false;\r\n\r\n angular.element(document).find('body').addClass('authorization-page');\r\n\r\n vm.init = function () {\r\n $rootScope.showWaitingOverlay = true;\r\n AuthService.getOAuthClient($stateParams.response_type, $stateParams.client_id, $stateParams.redirect_uri, $stateParams.scope)\r\n .$promise.then(clientFetchSuccess, clientFetchError);\r\n if ($state.current.name == \"app_permission\") {\r\n ProfileService.getUserBasicProfile().$promise.then(userFetchSuccess, userFetchError);\r\n }\r\n Utils.getUserCountryThroughIP().then(countryCodeFetched, countryCodeFetched);\r\n $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\r\n angular.element(document).find('body').removeClass('authorization-page');\r\n });\r\n };\r\n\r\n function countryCodeFetched(countryCode) {\r\n vm.callingCode = Countries.getCountryCallingCode(countryCode);\r\n }\r\n\r\n function userFetchSuccess(data) {\r\n $scope.user = data;\r\n isUserFetched = true;\r\n if (isClientNameFetched) {\r\n $rootScope.showWaitingOverlay = false;\r\n }\r\n }\r\n\r\n function userFetchError(res) {\r\n if (res.status == 401) {\r\n AuthService.signout();\r\n $state.go('authorization', $state.params);\r\n $rootScope.showWaitingOverlay = false;\r\n return;\r\n }\r\n $rootScope.showWaitingOverlay = false;\r\n alert('Some error occurred. Please try again.');\r\n }\r\n\r\n function clientFetchSuccess(data){\r\n $scope.clientName = data.Name;\r\n isClientNameFetched = true;\r\n if ($state.current.name == \"app_permission\") {\r\n if(isUserFetched)\r\n $rootScope.showWaitingOverlay = false;\r\n } else {\r\n $rootScope.showWaitingOverlay = false;\r\n }\r\n }\r\n\r\n function clientFetchError(res) {\r\n redirectToUriOnError(res.status);\r\n }\r\n\r\n //This is only for client name fetch and OAuth token fetch\r\n function redirectToUriOnError(status) {\r\n var param = AuthService.getReponseParamsForError(status);\r\n if (param.length > 0) {\r\n location.href = $stateParams.redirect_uri + \"?error=\" + param + \"&state=\" + $stateParams.state;\r\n return;\r\n }\r\n }\r\n\r\n vm.signIn = function (signInForm) {\r\n if (signInForm.$valid) {\r\n $scope.signing = true;\r\n var countryCode = Countries.getCountryCodeByCallingCode(vm.callingCode.trim());\r\n var mobileNumber = vm.callingCode.trim() + $('#number').val().trim(); //Not using $scope.idenedi becuase it trims 0 from iput type tel\r\n if (mobileNumber.substr(0, 1) != \"+\" && mobileNumber.substr(0, 2) != \"00\") //If code is not added in mobile number\r\n mobileNumber = \"+\" + mobileNumber;\r\n AuthService.signIn(mobileNumber, $scope.password, countryCode).$promise.then(signInSuccess, signInError);\r\n }\r\n };\r\n\r\n var signInSuccess = function (data) {\r\n AuthService.getOAuthCode($stateParams.response_type, $stateParams.client_id, $stateParams.redirect_uri, $stateParams.scope)\r\n .then(oauthCodeSuccess, oauthCodeError);\r\n };\r\n\r\n function oauthCodeSuccess(data){\r\n location.href = $stateParams.redirect_uri + \"?code=\" + data.data + \"&state=\" + $stateParams.state;\r\n }\r\n\r\n function oauthCodeError(res) {\r\n redirectToUriOnError(res.status);\r\n }\r\n\r\n var signInError = function (response) {\r\n $scope.signing = false;\r\n\r\n if (response.status == 500) {\r\n $scope.signInForm['password'].$setValidity('invalidAuth', false);\r\n }\r\n else {\r\n alert(\"Your network is down. \" + response.status)\r\n }\r\n };\r\n\r\n vm.init();\r\n\r\n vm.onNumberFieldChange = function () {\r\n $scope.signInForm['password'].$setValidity('invalidAuth', true);\r\n };\r\n\r\n $scope.goToPasswordChange = function () {\r\n $state.go('passwordnumber', { 'response_type': $stateParams.response_type, 'client_id': $stateParams.client_id, 'redirect_uri': $stateParams.redirect_uri, 'scope':$stateParams.scope , 'state':$stateParams.state});\r\n }\r\n\r\n $scope.onDiffUser = function (e) {\r\n e.preventDefault();\r\n AuthService.signout();\r\n $state.go('authorization', { 'response_type': $stateParams.response_type, 'client_id': $stateParams.client_id, 'redirect_uri': $stateParams.redirect_uri, 'scope': $stateParams.scope, 'state': $stateParams.state })\r\n }\r\n\r\n $scope.onNoThanks = function (e) {\r\n e.preventDefault();\r\n location.href = $stateParams.redirect_uri + \"?error=access_denied\";\r\n }\r\n\r\n $scope.onProceed = function (e) {\r\n e.preventDefault();\r\n $rootScope.showWaitingOverlay = true;\r\n signInSuccess();\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.contact').factory('ContactInfoService', ContactInfoService);\r\n //This service is dependent on CardsService. If cardsService will need this service then circular dependency will occur.\r\n\r\n ContactInfoService.$inject = ['$resource', '$rootScope', 'Utils', 'Countries', 'CONFIG'];\r\n function ContactInfoService($resource, $rootScope, Utils, Countries, CONFIG) {\r\n var contactItems = [];\r\n var _isCardsListChanged = false;\r\n var _isSuggestionChanged = false;\r\n var _locationContactItem = null;\r\n var _contactItem = null;\r\n var _phoneContactItem = null;\r\n var _isLocationChanged = false;\r\n var cardIdForNewContact = \"\";\r\n\r\n var contactType = {\r\n EMAIL: 'Email',\r\n PHONE: 'Phone',\r\n SMS: 'Sms',\r\n POSTAL_ADDRESS: 'PostalAddress',\r\n WEBSITE: 'Website',\r\n SOCIAL: 'Social'\r\n }\r\n var contactInfoService = {\r\n contactType: contactType,\r\n contactItems: contactItems,\r\n _attachEvents: _attachEvents,\r\n _isCardsListChanged: _isCardsListChanged,\r\n _locationContactItem: _locationContactItem,\r\n _contactItem: _contactItem,\r\n _phoneContactItem: _phoneContactItem,\r\n _isLocationChanged: _isLocationChanged,\r\n cardIdForNewContact: cardIdForNewContact,\r\n isGeoLocationChanged: isGeoLocationChanged,\r\n setGeoLocationChanged: setGeoLocationChanged,\r\n getContactRecords: getContactRecords,\r\n getContactRecordsLocal: getContactRecordsLocal,\r\n setNewOrderForContacts: setNewOrderForContacts,\r\n deleteContactItem: deleteContactItem,\r\n getContactRecord: getContactRecord,\r\n getContactRecordLocal: getContactRecordLocal,\r\n updateRecord: updateRecord,\r\n createRecord: createRecord,\r\n replaceContactRecordLocal: replaceContactRecordLocal,\r\n setCardsListChange: setCardsListChange,\r\n setSuggestionChange: setSuggestionChange,\r\n isCardsListChanged: isCardsListChanged,\r\n isSuggestionChanged: isSuggestionChanged,\r\n //Location\r\n getNewLocationItemObject: getNewLocationItemObject,\r\n resetLocationItemObject: resetLocationItemObject,\r\n //Contact item\r\n getNewContactItemObject: getNewContactItemObject,\r\n resetContactItemObject: resetContactItemObject,\r\n //Phone item\r\n getNewPhoneItemObject: getNewPhoneItemObject,\r\n resetPhoneItemObject: resetPhoneItemObject,\r\n resetContactItems: resetContactItems,\r\n addRecordsInCard: addRecordsInCard\r\n };\r\n\r\n contactInfoService._attachEvents();\r\n return contactInfoService;\r\n\r\n function addRecordsInCard(id, records) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/card/:id/records/add', { id: id }, { 'update': { method: 'PUT' } }).update(records, success, error);\r\n\r\n function success(data) {\r\n //we are explicitly removing the contact items because when new record is added we cannot add that contact item\r\n //as its data is not available. For that we have to fetch the card adn then add that in contac items which is little\r\n //complex. so we are removing the contact items becuase of that when some view will get the contact items it will be empty\r\n //so that view will fetch the fresh list of contact items.\r\n that.resetContactItems();\r\n //TODO: add cards module. It was remove becuase its not used right now\r\n //var card = CardsService.getCardLocal(id);\r\n //if (card) {\r\n // card.Records = card.Records.concat(records);\r\n //}\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function resetContactItems() {\r\n this.contactItems = [];\r\n }\r\n\r\n function setGeoLocationChanged(val) {\r\n this._isLocationChanged = val;\r\n }\r\n\r\n function isGeoLocationChanged() {\r\n return this._isLocationChanged;\r\n }\r\n\r\n //Location item\r\n function getNewLocationItemObject() {\r\n if (!_locationContactItem) {\r\n _locationContactItem = {};\r\n _locationContactItem.GeoLocationPoint = \"39.8333333,-98.585522\";\r\n _locationContactItem.PartOfCards = [];\r\n _locationContactItem.Value = \"\";\r\n _locationContactItem.City = \"\";\r\n _locationContactItem.Country = \"\";\r\n }\r\n\r\n return _locationContactItem;\r\n }\r\n\r\n function resetLocationItemObject() {\r\n _locationContactItem = null;\r\n }\r\n\r\n //Contact item\r\n function getNewContactItemObject() {\r\n if (!_contactItem) {\r\n _contactItem = {};\r\n _contactItem.PartOfCards = [];\r\n _contactItem.Value = \"\";\r\n _contactItem.Label = \"\";\r\n }\r\n\r\n return _contactItem;\r\n }\r\n\r\n function resetContactItemObject() {\r\n _contactItem = null;\r\n }\r\n\r\n //Phone item\r\n function getNewPhoneItemObject() {\r\n if (!_phoneContactItem) {\r\n _phoneContactItem = {};\r\n _phoneContactItem.Type = \"\";\r\n _phoneContactItem.PartOfCards = [];\r\n _phoneContactItem.Value = \"\";\r\n _phoneContactItem.Label = \"\";\r\n _phoneContactItem.CountryISOCode = \"\";\r\n }\r\n\r\n return _phoneContactItem;\r\n }\r\n\r\n function resetPhoneItemObject() {\r\n _phoneContactItem = null;\r\n }\r\n\r\n function isCardsListChanged() {\r\n return this._isCardsListChanged;\r\n }\r\n\r\n function isSuggestionChanged() {\r\n return this._isSuggestionChanged;\r\n }\r\n\r\n function setCardsListChange(value) {\r\n this._isCardsListChanged = value;\r\n }\r\n\r\n function setSuggestionChange(value) {\r\n this._isSuggestionChanged = value;\r\n }\r\n \r\n function getContactRecordsLocal() {\r\n return this.contactItems;\r\n }\r\n\r\n function getContactRecords() {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/record').query(contactInfoSuccess, contactInfoError);\r\n function contactInfoSuccess(data) {\r\n delete data.$promise;\r\n delete data.$resolved;\r\n\r\n var _data = data;\r\n that.contactItems = data;\r\n return _data;\r\n }\r\n function contactInfoError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function replaceContactRecordLocal(item) {\r\n for ($index in this.contactItems) {\r\n if (this.contactItems[$index].InstanceId == item.InstanceId) {\r\n this.contactItems[$index] = item;\r\n }\r\n }\r\n };\r\n\r\n function getContactRecordLocal(id) {\r\n for ($index in this.contactItems) {\r\n if (this.contactItems[$index].InstanceId == id) {\r\n return this.contactItems[$index];\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n function getContactRecord(id) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/record/:id/').get({id: id}, contactInfoSuccess, contactInfoError);\r\n function contactInfoSuccess(data) {\r\n var _data = data;\r\n that.contactItems.push(data);\r\n return _data;\r\n }\r\n function contactInfoError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n //Update contactItems for newOrderList\r\n function setNewOrderForContacts(newOrderList) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/record/order').save(newOrderList, contactListUpdatedSuccess, contactListUpdatedError);\r\n function contactListUpdatedSuccess(data) {\r\n var _data = data;\r\n return _data;\r\n }\r\n function contactListUpdatedError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function createRecord(type, label, value, partOfCards) {\r\n var serverObj = {};\r\n serverObj.Label = label;\r\n serverObj.DynamicValue = value;\r\n serverObj.PartOfCards = partOfCards;\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/record/:type', { type: type }).save(serverObj, recordCreatedSuccess, recordCreatedError);\r\n\r\n function recordCreatedSuccess(data) {\r\n var _data = data;\r\n //TODO: add cards module. It was remove becuase its not used right now\r\n //CardsService.addRecordInCardLocal(data.str, partOfCards);\r\n return _data;\r\n }\r\n function recordCreatedError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function updateRecord(id, label, value, partOfCards) {\r\n var serverObj = {};\r\n serverObj.Label = label;\r\n serverObj.DynamicValue = value;\r\n serverObj.PartOfCards = partOfCards;\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/record/:id', { id: id }, { 'update': { method: 'PUT' } }).update(serverObj, recordUpdatedSuccess, recordUpdatedError);\r\n\r\n function recordUpdatedSuccess(data) {\r\n var _data = data;\r\n //TODO: add cards module. It was remove becuase its not used right now\r\n //CardsService.updateRecordFromCardLocal(id, partOfCards);\r\n return _data;\r\n }\r\n function recordUpdatedError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function deleteContactItem(type, instanceId) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/record/:type/:id/').delete({ type: type, id: instanceId }, contactItemDeletedSuccess, contactItemDeletedError);\r\n function contactItemDeletedSuccess(data) {\r\n var _data = data;\r\n //TODO: add cards module. It was remove becuase its not used right now\r\n //CardsService.removeRecordFromCardLocal(instanceId);\r\n return _data;\r\n }\r\n function contactItemDeletedError(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function _attachEvents() {\r\n var that = this;\r\n $rootScope.$on('SignInService->Logout', function () {\r\n that.contactItems = [];\r\n that._isCardsListChanged = false;\r\n that._isSuggestionChanged = false;\r\n that._locationContactItem = null;\r\n that._contactItem = null;\r\n that._phoneContactItem = null;\r\n that._isLocationChanged = false;\r\n that.cardIdForNewContact = \"\";\r\n });\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.utils').factory('Utils', Utils);\r\n\r\n Utils.$inject = [ '$q','$resource', '$window', '$mdDialog', '$timeout', '$interval', 'CONFIG', '$http', 'LocalstoreManager'];\r\n function Utils($q, $resource, $window, $mdDialog, $timeout, $interval, CONFIG, $http, LocalstoreManager) {\r\n\r\n var utils = {\r\n countryCodeFromIP: \"\",\r\n tempStorage: {},\r\n //Static\r\n DEVICE_IPHONE: \"iphone\",\r\n DEVICE_ANDROID: \"android\",\r\n DEVICE_WINDOWS: \"windows\",\r\n //Functions\r\n getMemberProfileImageSmallUrl: getMemberProfileImageSmallUrl,\r\n getProfileImageSmallUrl: getProfileImageSmallUrl,\r\n getGroupImageSmallUrl: getGroupImageSmallUrl,\r\n getGroupImageLargeUrl: getGroupImageLargeUrl,\r\n formatIdenediId: formatIdenediId,\r\n adjustbodyAreaHeight: adjustbodyAreaHeight,\r\n adjustHeightOfComponent: adjustHeightOfComponent,\r\n adjustMemberDetailListHeight: adjustMemberDetailListHeight,\r\n adjustCardDetailListHeight: adjustCardDetailListHeight,\r\n adjustGroupBodyAreaHeight: adjustGroupBodyAreaHeight,\r\n adjustTabContent: adjustTabContent,\r\n openApplication: openApplication,\r\n logDeviceTypeRepeatedly: logDeviceTypeRepeatedly,\r\n addTokenInHttpHeader: addTokenInHttpHeader,\r\n getFormattedDate: getFormattedDate,\r\n //Mobile functions\r\n getMobileDevice: getMobileDevice,\r\n isBrowserChrome: isBrowserChrome,\r\n isBrowserFirefox: isBrowserFirefox,\r\n isBrowserSafari: isBrowserSafari,\r\n isBrowserIE: isBrowserIE,\r\n getScrollbarWidth: getScrollbarWidth,\r\n getUserCountryThroughIP: getUserCountryThroughIP,\r\n trackMixpanelEvent: trackMixpanelEvent,\r\n extractUrlsFromText: extractUrlsFromText,\r\n appendHttpIfRequired: appendHttpIfRequired,\r\n convertToKB: convertToKB\r\n };\r\n\r\n return utils;\r\n\r\n function convertToKB(value) {\r\n var kb = 0;\r\n if (value < 1000)\r\n return value + \" B\";\r\n kb = (value / 1024).toFixed(1);\r\n if (kb > 999) {\r\n return (kb / 1000).toFixed(1) + \" MB\";\r\n }\r\n return kb + \" KB\";\r\n }\r\n function appendHttpIfRequired(href) {\r\n if (href && href.length > 0) {\r\n var m = href.match(/http:|https:/i)\r\n if (m == null && href.indexOf('tel:') == -1 && href.indexOf('sms:') == -1 && href.indexOf('mailto:') == -1)\r\n href = \"http://\" + href;\r\n }\r\n return href;\r\n }\r\n\r\n function extractUrlsFromText(str) {\r\n var regex = /(https:\\/\\/|http:\\/\\/|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]/ig;\r\n return str.match(regex);\r\n }\r\n\r\n function trackMixpanelEvent(str) {\r\n if (CONFIG.API.MIXPANEL) //It will be on for production only\r\n mixpanel.track(str, {\"version\": \"1.0\", \"Platform\": \"Web\"});\r\n }\r\n\r\n function getUserCountryThroughIP() {\r\n var deferred = $q.defer();\r\n var that = this;\r\n if (this.countryCodeFromIP.length > 0){\r\n $timeout(function(){\r\n deferred.resolve(that.countryCodeFromIP);\r\n },100)\r\n }\r\n else {\r\n $.ajax({\r\n url: \"https://api.ipdata.co/?api-key=f48d272d3d35f95b06a8ea3f1b49cdce960d8c37fe62903810febddb\",\r\n type: \"GET\",\r\n success: function (data) {\r\n that.countryCodeFromIP = data.country_code;\r\n deferred.resolve(data.country_code);\r\n },\r\n error: function (data) {\r\n deferred.resolve(\"\");\r\n }\r\n });\r\n } \r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getMemberProfileImageSmallUrl(url) {\r\n var avatarsUrls = ['/assets/img/ic_nodp.png',\r\n '/assets/img/icons/member_avatar_green.png',\r\n '/assets/img/icons/member_avatar_purple.png',\r\n '/assets/img/icons/member_avatar_red.png',\r\n '/assets/img/icons/member_avatar_yellow.png'];\r\n if (!url) {\r\n //var r = Math.random() * (5 - 0) + 0;\r\n //return avatarsUrls[Math.floor(r)];\r\n return avatarsUrls[0];\r\n }\r\n \r\n return url.replace('profileimages', 'profileimages-small')\r\n };\r\n\r\n function getGroupImageSmallUrl(url) {\r\n if (!url) {\r\n return '/assets/img/ic_thumb_group_list.png';\r\n }\r\n\r\n return url.replace('profileimages', 'profileimages-small');\r\n };\r\n\r\n function getGroupImageLargeUrl(url) {\r\n if (!url) {\r\n return '/assets/img/icons/group_thumb.png';\r\n }\r\n\r\n return url;\r\n };\r\n\r\n function getProfileImageSmallUrl(url) {\r\n if (!url)\r\n return \"/assets/img/ic_nodp.png\";\r\n return url.replace('profileimages', 'profileimages-small')\r\n };\r\n\r\n function formatIdenediId(id) {\r\n if (!id)\r\n return \"\";\r\n var idenedi = id.split(\"\");\r\n var endingString = \"00\";\r\n var check = (id.indexOf(endingString, id.length - endingString.length) !== -1);\r\n if (check) { //new idenedi format\r\n idenedi.splice(1, 0, \"-\");\r\n idenedi.splice(4, 0, \"-\");\r\n idenedi.splice(9, 0, \"-\");\r\n idenedi.splice(12, 0, \"-\");\r\n idenedi.splice(15, 0, \"-\");\r\n idenedi = idenedi.join(\"\").replace(\"-00\",\"\");\r\n } else {\r\n idenedi.splice(1, 0, \"-\");\r\n idenedi.splice(4, 0, \"-\");\r\n idenedi.splice(9, 0, \"-\");\r\n idenedi.splice(12, 0, \"-\");\r\n idenedi.splice(15, 0, \"-\");\r\n idenedi = idenedi.join(\"\");\r\n }\r\n \r\n return idenedi;\r\n };\r\n function getFormattedDate(date) {\r\n var monthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"June\", \"July\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\r\n if (date != undefined && date != null) {\r\n var day = date.getDate();\r\n day = parseInt(day);\r\n if (day < 10)\r\n day = \"0\" + day.toString();\r\n return day + \"-\" + monthNames[date.getMonth()] + \"-\" + date.getUTCFullYear();\r\n }\r\n \r\n return \"\";\r\n }\r\n\r\n function adjustbodyAreaHeight() {\r\n var height = $window.innerHeight;\r\n var width = $window.innerWidth;\r\n var minHeight = 0\r\n if (width <= 600) {\r\n minHeight = height - 300 + 225 - 50;\r\n } else {\r\n minHeight = height - 300 - 40 + 225 - 50;\r\n }\r\n\r\n $('.contact-info').css('min-height', minHeight);\r\n \r\n function resize() {\r\n var height = $window.innerHeight\r\n if (height <= 600) {\r\n minHeight = height - 300 + 225 - 50;\r\n } else {\r\n minHeight = height - 300 - 40 + 225 - 50;\r\n }\r\n $('.contact-info').css('min-height', minHeight);\r\n }\r\n $(window).off(\"resize\", window, resize);\r\n $(window).resize(resize);\r\n };\r\n\r\n function adjustHeightOfComponent(component, otherComponent, diff, topDiff) {\r\n function computeHeight() {\r\n var height = $window.innerHeight;\r\n var width = $window.innerWidth;\r\n var otherComponentHeight = 0;\r\n if (otherComponent != \"\") {\r\n otherComponentHeight = $(otherComponent).innerHeight();\r\n }\r\n var minHeight = 0\r\n if (width <= 600) {\r\n minHeight = height - diff - otherComponentHeight;\r\n } else {\r\n minHeight = height - diff - topDiff - otherComponentHeight;\r\n }\r\n\r\n $(component).css('height', minHeight);\r\n }\r\n\r\n computeHeight();\r\n\r\n function resize() {\r\n computeHeight();\r\n }\r\n $(window).off(\"resize\", window, resize);\r\n $(window).resize(resize);\r\n };\r\n\r\n function adjustTabContent() {\r\n var height = $window.innerHeight;\r\n var width = $window.innerWidth;;\r\n var minHeight = 0\r\n if (width <= 600) {\r\n minHeight = height - 108;\r\n } else {\r\n minHeight = height - 148;\r\n }\r\n\r\n $('.tab-content').css('height', minHeight);\r\n\r\n function resize() {\r\n var height = $window.innerHeight\r\n if (height <= 600) {\r\n minHeight = height - 108;\r\n } else {\r\n minHeight = height - 148;\r\n }\r\n $('.tab-content').css('height', minHeight);\r\n }\r\n $(window).off(\"resize\");\r\n $(window).resize(resize);\r\n };\r\n\r\n function adjustCardDetailListHeight() {\r\n var height = $window.innerHeight;\r\n var width = $window.innerWidth;;\r\n var minHeight = 0\r\n if (width <= 600) {\r\n minHeight = height - 350;\r\n } else {\r\n minHeight = height - 350 - 40;\r\n }\r\n\r\n $('.card-contact-list').css('height', minHeight);\r\n\r\n function resize() {\r\n var height = $window.innerHeight\r\n if (height <= 600) {\r\n minHeight = height - 350;\r\n } else {\r\n minHeight = height - 350;\r\n }\r\n $('.card-contact-list').css('height', minHeight);\r\n }\r\n $(window).off(\"resize\", window, resize);\r\n $(window).resize(resize);\r\n };\r\n\r\n function adjustMemberDetailListHeight() {\r\n var height = $window.innerHeight;\r\n var width = $window.innerWidth;;\r\n var minHeight = 0\r\n if (width <= 600) {\r\n minHeight = height - 350;\r\n } else {\r\n minHeight = height - 350 - 40;\r\n }\r\n\r\n $('.member-contact-list').css('height', minHeight);\r\n\r\n function resize() {\r\n var height = $window.innerHeight\r\n if (height <= 600) {\r\n minHeight = height - 350;\r\n } else {\r\n minHeight = height - 350;\r\n }\r\n $('.member-contact-list').css('height', minHeight);\r\n }\r\n $(window).off(\"resize\", window, resize);\r\n $(window).resize(resize);\r\n };\r\n\r\n function adjustGroupBodyAreaHeight() {\r\n var height = $window.innerHeight;\r\n var width = $window.innerWidth;;\r\n var minHeight = 0\r\n if (width <= 600) {\r\n minHeight = height - 350;\r\n } else {\r\n minHeight = height - 350 - 40;\r\n }\r\n\r\n $('.group-body-area').css('height', minHeight);\r\n\r\n function resize() {\r\n var height = $window.innerHeight\r\n if (height <= 600) {\r\n minHeight = height - 350;\r\n } else {\r\n minHeight = height - 350;\r\n }\r\n $('.group-body-area').css('height', minHeight);\r\n }\r\n $(window).off(\"resize\", window, resize);\r\n $(window).resize(resize);\r\n };\r\n\r\n //This will show open application dialog for chrome because chrome does not open\r\n //application with out user gesture\r\n function openApplication(data, isSharedCard) {\r\n //For testing\r\n //this.logDeviceTypeRepeatedly();\r\n var device = this.getMobileDevice();\r\n\r\n if (device == this.DEVICE_ANDROID && this.isBrowserChrome()) {\r\n // Appending dialog to document.body to cover sidenav in docs app\r\n var confirm = $mdDialog.confirm()\r\n .title('Open Idenedi application?')\r\n .ok('Yes')\r\n .cancel('No');\r\n $mdDialog.show(confirm);\r\n //Some hacky way to open link. we could have used promises for this but that does not change the url and does not open the application.\r\n setTimeout(function () {\r\n var _isSharedCard = isSharedCard;\r\n $('md-dialog').find('button[md-autofocus]').bind('click', function () {\r\n //window.location = 'intent://shared_card?id=' + data + '/#Intent;scheme=idenedi;package=com.exceedgulf.idenedi.android;S.browser_fallback_url=' + encodeURI(window.location.href) + ';end';\r\n if (_isSharedCard)\r\n window.location = 'Idenedi://shared_card?id=' + data;\r\n else\r\n window.location = 'Idenedi://user?id=' + data;\r\n });\r\n }, 1000);\r\n }\r\n else if (device == this.DEVICE_ANDROID && this.isBrowserFirefox()) {\r\n var iframe = document.createElement('iframe');\r\n iframe.style.visibility = \"hidden\";\r\n if (isSharedCard)\r\n iframe.src = 'Idenedi://shared_card?id=' + data;\r\n else\r\n iframe.src = 'Idenedi://user?id=' + data;\r\n document.body.appendChild(iframe);\r\n }\r\n else if (device == this.DEVICE_ANDROID) {\r\n if (isSharedCard)\r\n window.location = 'Idenedi://shared_card?id=' + data;\r\n else\r\n window.location = 'Idenedi://user?id=' + data;\r\n }\r\n else if (device == this.DEVICE_IPHONE) { //Intentionally set empty. Code for opening iOS app is in ios-app-script.js\r\n //window.location = 'Idenedi://shared_card?id=' + data;\r\n }\r\n else if (device == this.DEVICE_WINDOWS) {\r\n if (isSharedCard)\r\n window.location = 'Idenedi://mem?card_key=' + data;\r\n else\r\n window.location = 'Idenedi://mem?id=' + data;\r\n }\r\n };\r\n\r\n function logDeviceTypeRepeatedly() {\r\n $interval(log.bind(this), 2000);\r\n function log(){\r\n console.log(navigator.userAgent + \" ====> \" + this.getMobileDevice());\r\n }\r\n };\r\n\r\n function getMobileDevice() {\r\n if (navigator.userAgent.match(\"iPhone\") && !navigator.userAgent.match(\"Windows Phone\"))\r\n return this.DEVICE_IPHONE;\r\n if (navigator.userAgent.match(\"Android\") && !navigator.userAgent.match(\"Windows Phone\"))\r\n return this.DEVICE_ANDROID;\r\n if (navigator.userAgent.match(\"Windows Phone\"))\r\n return this.DEVICE_WINDOWS;\r\n };\r\n\r\n function isBrowserChrome() {\r\n var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;\r\n return !!window.chrome && !isOpera; // Chrome 1+\r\n };\r\n function isBrowserFirefox() {\r\n return typeof InstallTrigger !== 'undefined'; // Firefox 1.0+\r\n };\r\n function isBrowserSafari() {\r\n return Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;\r\n };\r\n function isBrowserIE() {\r\n return false || !!document.documentMode; // At least IE6\r\n };\r\n\r\n function getScrollbarWidth() {\r\n var outer = document.createElement(\"div\");\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"100px\";\r\n document.body.appendChild(outer);\r\n\r\n var widthNoScroll = outer.offsetWidth;\r\n // force scrollbars\r\n outer.style.overflow = \"scroll\";\r\n\r\n // add innerdiv\r\n var inner = document.createElement(\"div\");\r\n inner.style.width = \"100%\";\r\n outer.appendChild(inner);\r\n\r\n var widthWithScroll = inner.offsetWidth;\r\n\r\n // remove divs\r\n outer.parentNode.removeChild(outer);\r\n\r\n return widthNoScroll - widthWithScroll;\r\n }\r\n\r\n function addTokenInHttpHeader() {\r\n $http.defaults.headers.common['Authorization'] = 'Bearer ' + LocalstoreManager.getUserToken();\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.utils').factory('LocalstoreManager', LocalstoreManager);\r\n\r\n function LocalstoreManager() {\r\n var USER_TOKEN = \"user_token\";\r\n var temporary_token_storage = \"\";\r\n\r\n var localstoreManager = {\r\n temporary_token_storage: temporary_token_storage,\r\n isUserLoggedIn: isUserLoggedIn,\r\n saveUserToken: saveUserToken,\r\n removeUserToken: removeUserToken,\r\n getUserToken: getUserToken,\r\n getStorage: getStorage,\r\n LocalStorageAlternative: LocalStorageAlternative,\r\n shiftTokenToTemporaryStorage: shiftTokenToTemporaryStorage,\r\n storageImpl: null\r\n };\r\n\r\n return localstoreManager;\r\n\r\n function LocalStorageAlternative() {\r\n\r\n this.setItem = function (key, value) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + (365 * 24 * 60 * 60 * 1000));\r\n var expires = \"expires=\" + d.toGMTString();\r\n document.cookie = key + \"=\" + value + \";\" + expires + \";path=/\";\r\n }\r\n\r\n this.getItem = function (key) {\r\n var name = key + \"=\";\r\n var ca = document.cookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) == 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n this.removeItem = function (key) {\r\n this.setItem(key, \"\");\r\n }\r\n }\r\n\r\n function getStorage() {\r\n if (this.storageImpl != null)\r\n return this.storageImpl;\r\n try {\r\n localStorage.setItem(\"storage\", \"\");\r\n localStorage.removeItem(\"storage\");\r\n this.storageImpl = localStorage;\r\n }\r\n catch (err) {\r\n this.storageImpl = new LocalStorageAlternative();\r\n }\r\n\r\n return this.storageImpl;\r\n }\r\n\r\n function isUserLoggedIn() {\r\n var token = this.getUserToken();\r\n if (token.length != \"\")\r\n return true;\r\n else\r\n return false;\r\n };\r\n\r\n function saveUserToken(token) {\r\n this.getStorage().setItem(USER_TOKEN, JSON.stringify(token));\r\n };\r\n\r\n function removeUserToken() {\r\n this.getStorage().removeItem(USER_TOKEN);\r\n }\r\n\r\n function shiftTokenToTemporaryStorage() {\r\n var token = this.getUserToken();\r\n this.removeUserToken();\r\n this.temporary_token_storage = token;\r\n }\r\n\r\n function getUserToken() {\r\n if (this.temporary_token_storage != \"\")\r\n return this.temporary_token_storage;\r\n\r\n var token = this.getStorage().getItem(USER_TOKEN);\r\n if (token) {\r\n try{\r\n token = JSON.parse(token)\r\n } catch(e){\r\n token = \"FailedToken\";\r\n }\r\n return token;\r\n }\r\n return \"\";\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('app.utils').factory('StateManager', StateManager);\r\n\r\n StateManager.$inject = ['$rootScope', '$state', 'CONFIG'];\r\n function StateManager($rootScope, $state, CONFIG) {\r\n\r\n var _prevState = null;\r\n var _skip = false;\r\n var cleanup = null;\r\n var stateManager = {\r\n _skip: _skip,\r\n skip: skip,\r\n _attachEvents: _attachEvents,\r\n _prevState: _prevState,\r\n start: start,\r\n cleanup: cleanup,\r\n goBackToPrevScreen: goBackToPrevScreen,\r\n previousStateAvailable: previousStateAvailable,\r\n resetStates: resetStates\r\n };\r\n\r\n return stateManager;\r\n\r\n //this is the init function which is called through idenedi.controller\r\n function start() {\r\n this._attachEvents();\r\n }\r\n\r\n function resetStates() {\r\n this._prevState = null;\r\n }\r\n\r\n function skip() {\r\n _skip = true;\r\n }\r\n\r\n function _attachEvents() {\r\n var that = this;\r\n this.cleanup = $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\r\n if (!_skip) {\r\n console.log(\"Saving state: \" + fromState.name);\r\n var prevState = { toState: toState, toParams: toParams, fromState: fromState, fromParams: fromParams };\r\n if (that._prevState == null)\r\n that._prevState = [];\r\n that._prevState.push(prevState);\r\n } \r\n _skip = false;\r\n });\r\n\r\n var that = this;\r\n $rootScope.$on('SignInService->Logout', function () {\r\n if (that.cleanup)\r\n that.cleanup();\r\n that._prevState = null;\r\n that._skip = false;\r\n });\r\n };\r\n\r\n function goBackToPrevScreen() {\r\n if (this._prevState != null && this._prevState.length > 0) {\r\n var prevState = this._prevState.pop();\r\n $state.go(prevState.fromState.name, prevState.fromParams);\r\n }\r\n }\r\n\r\n function previousStateAvailable() {\r\n if (this._prevState != null && this._prevState.length > 0)\r\n return true;\r\n return false;\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.utils').service('Countries', Countries);\r\n\r\n function Countries() {\r\n var countries_list = [\r\n { \"name\": \"Afghanistan\", \"code\": \"AF\" },\r\n { \"name\": \"Aland Islands\", \"code\": \"AX\" },\r\n { \"name\": \"Albania\", \"code\": \"AL\" },\r\n { \"name\": \"Algeria\", \"code\": \"DZ\" },\r\n { \"name\": \"American Samoa\", \"code\": \"AS\" },\r\n { \"name\": \"AndorrA\", \"code\": \"AD\" },\r\n { \"name\": \"Angola\", \"code\": \"AO\" },\r\n { \"name\": \"Anguilla\", \"code\": \"AI\" },\r\n { \"name\": \"Antarctica\", \"code\": \"AQ\" },\r\n { \"name\": \"Antigua and Barbuda\", \"code\": \"AG\" },\r\n { \"name\": \"Argentina\", \"code\": \"AR\" },\r\n { \"name\": \"Armenia\", \"code\": \"AM\" },\r\n { \"name\": \"Aruba\", \"code\": \"AW\" },\r\n { \"name\": \"Australia\", \"code\": \"AU\" },\r\n { \"name\": \"Austria\", \"code\": \"AT\" },\r\n { \"name\": \"Azerbaijan\", \"code\": \"AZ\" },\r\n { \"name\": \"Bahamas\", \"code\": \"BS\" },\r\n { \"name\": \"Bahrain\", \"code\": \"BH\" },\r\n { \"name\": \"Bangladesh\", \"code\": \"BD\" },\r\n { \"name\": \"Barbados\", \"code\": \"BB\" },\r\n { \"name\": \"Belarus\", \"code\": \"BY\" },\r\n { \"name\": \"Belgium\", \"code\": \"BE\" },\r\n { \"name\": \"Belize\", \"code\": \"BZ\" },\r\n { \"name\": \"Benin\", \"code\": \"BJ\" },\r\n { \"name\": \"Bermuda\", \"code\": \"BM\" },\r\n { \"name\": \"Bhutan\", \"code\": \"BT\" },\r\n { \"name\": \"Bolivia\", \"code\": \"BO\" },\r\n { \"name\": \"Bosnia and Herzegovina\", \"code\": \"BA\" },\r\n { \"name\": \"Botswana\", \"code\": \"BW\" },\r\n { \"name\": \"Brazil\", \"code\": \"BR\" },\r\n { \"name\": \"Brunei Darussalam\", \"code\": \"BN\" },\r\n { \"name\": \"Bulgaria\", \"code\": \"BG\" },\r\n { \"name\": \"Burkina Faso\", \"code\": \"BF\" },\r\n { \"name\": \"Burundi\", \"code\": \"BI\" },\r\n { \"name\": \"Cambodia\", \"code\": \"KH\" },\r\n { \"name\": \"Cameroon\", \"code\": \"CM\" },\r\n { \"name\": \"Canada\", \"code\": \"CA\" },\r\n { \"name\": \"Cape Verde\", \"code\": \"CV\" },\r\n { \"name\": \"Cayman Islands\", \"code\": \"KY\" },\r\n { \"name\": \"Central African Republic\", \"code\": \"CF\" },\r\n { \"name\": \"Chad\", \"code\": \"TD\" },\r\n { \"name\": \"Chile\", \"code\": \"CL\" },\r\n { \"name\": \"China\", \"code\": \"CN\" },\r\n { \"name\": \"Christmas Island\", \"code\": \"CX\" },\r\n { \"name\": \"Cocos (Keeling) Islands\", \"code\": \"CC\" },\r\n { \"name\": \"Colombia\", \"code\": \"CO\" },\r\n { \"name\": \"Comoros\", \"code\": \"KM\" },\r\n { \"name\": \"Congo\", \"code\": \"CG\" },\r\n { \"name\": \"Congo, The Democratic Republic of the\", \"code\": \"CD\" },\r\n { \"name\": \"Cook Islands\", \"code\": \"CK\" },\r\n { \"name\": \"Costa Rica\", \"code\": \"CR\" },\r\n { \"name\": \"Cote D\\\"Ivoire\", \"code\": \"CI\" },\r\n { \"name\": \"Croatia\", \"code\": \"HR\" },\r\n { \"name\": \"Cuba\", \"code\": \"CU\" },\r\n { \"name\": \"Cyprus\", \"code\": \"CY\" },\r\n { \"name\": \"Czech Republic\", \"code\": \"CZ\" },\r\n { \"name\": \"Denmark\", \"code\": \"DK\" },\r\n { \"name\": \"Djibouti\", \"code\": \"DJ\" },\r\n { \"name\": \"Dominica\", \"code\": \"DM\" },\r\n { \"name\": \"Dominican Republic\", \"code\": \"DO\" },\r\n { \"name\": \"Ecuador\", \"code\": \"EC\" },\r\n { \"name\": \"Egypt\", \"code\": \"EG\" },\r\n { \"name\": \"El Salvador\", \"code\": \"SV\" },\r\n { \"name\": \"Equatorial Guinea\", \"code\": \"GQ\" },\r\n { \"name\": \"Eritrea\", \"code\": \"ER\" },\r\n { \"name\": \"Estonia\", \"code\": \"EE\" },\r\n { \"name\": \"Ethiopia\", \"code\": \"ET\" },\r\n { \"name\": \"Falkland Islands (Malvinas)\", \"code\": \"FK\" },\r\n { \"name\": \"Faroe Islands\", \"code\": \"FO\" },\r\n { \"name\": \"Fiji\", \"code\": \"FJ\" },\r\n { \"name\": \"Finland\", \"code\": \"FI\" },\r\n { \"name\": \"France\", \"code\": \"FR\" },\r\n { \"name\": \"French Polynesia\", \"code\": \"PF\" },\r\n { \"name\": \"Gabon\", \"code\": \"GA\" },\r\n { \"name\": \"Gambia\", \"code\": \"GM\" },\r\n { \"name\": \"Georgia\", \"code\": \"GE\" },\r\n { \"name\": \"Germany\", \"code\": \"DE\" },\r\n { \"name\": \"Ghana\", \"code\": \"GH\" },\r\n { \"name\": \"Gibraltar\", \"code\": \"GI\" },\r\n { \"name\": \"Greece\", \"code\": \"GR\" },\r\n { \"name\": \"Greenland\", \"code\": \"GL\" },\r\n { \"name\": \"Grenada\", \"code\": \"GD\" },\r\n { \"name\": \"Guam\", \"code\": \"GU\" },\r\n { \"name\": \"Guatemala\", \"code\": \"GT\" },\r\n { \"name\": \"Guinea\", \"code\": \"GN\" },\r\n { \"name\": \"Guinea-Bissau\", \"code\": \"GW\" },\r\n { \"name\": \"Guyana\", \"code\": \"GY\" },\r\n { \"name\": \"Haiti\", \"code\": \"HT\" },\r\n { \"name\": \"Holy See (Vatican City State)\", \"code\": \"VA\" },\r\n { \"name\": \"Honduras\", \"code\": \"HN\" },\r\n { \"name\": \"Hong Kong\", \"code\": \"HK\" },\r\n { \"name\": \"Hungary\", \"code\": \"HU\" },\r\n { \"name\": \"Iceland\", \"code\": \"IS\" },\r\n { \"name\": \"India\", \"code\": \"IN\" },\r\n { \"name\": \"Indonesia\", \"code\": \"ID\" },\r\n { \"name\": \"Iran, Islamic Republic Of\", \"code\": \"IR\" },\r\n { \"name\": \"Iraq\", \"code\": \"IQ\" },\r\n { \"name\": \"Ireland\", \"code\": \"IE\" },\r\n { \"name\": \"Isle of Man\", \"code\": \"IM\" },\r\n { \"name\": \"Israel\", \"code\": \"IL\" },\r\n { \"name\": \"Italy\", \"code\": \"IT\" },\r\n { \"name\": \"Jamaica\", \"code\": \"JM\" },\r\n { \"name\": \"Japan\", \"code\": \"JP\" },\r\n { \"name\": \"Jersey\", \"code\": \"JE\" },\r\n { \"name\": \"Jordan\", \"code\": \"JO\" },\r\n { \"name\": \"Kazakhstan\", \"code\": \"KZ\" },\r\n { \"name\": \"Kenya\", \"code\": \"KE\" },\r\n { \"name\": \"Kiribati\", \"code\": \"KI\" },\r\n { \"name\": \"Korea, Democratic People'S Republic of\", \"code\": \"KP\" },\r\n { \"name\": \"Korea, Republic of\", \"code\": \"KR\" },\r\n { \"name\": \"Kuwait\", \"code\": \"KW\" },\r\n { \"name\": \"Kyrgyzstan\", \"code\": \"KG\" },\r\n { \"name\": \"Lao People\\\"S Democratic Republic\", \"code\": \"LA\" },\r\n { \"name\": \"Latvia\", \"code\": \"LV\" },\r\n { \"name\": \"Lebanon\", \"code\": \"LB\" },\r\n { \"name\": \"Lesotho\", \"code\": \"LS\" },\r\n { \"name\": \"Liberia\", \"code\": \"LR\" },\r\n { \"name\": \"Libyan Arab Jamahiriya\", \"code\": \"LY\" },\r\n { \"name\": \"Liechtenstein\", \"code\": \"LI\" },\r\n { \"name\": \"Lithuania\", \"code\": \"LT\" },\r\n { \"name\": \"Luxembourg\", \"code\": \"LU\" },\r\n { \"name\": \"Macao\", \"code\": \"MO\" },\r\n { \"name\": \"Macedonia, The Former Yugoslav Republic of\", \"code\": \"MK\" },\r\n { \"name\": \"Madagascar\", \"code\": \"MG\" },\r\n { \"name\": \"Malawi\", \"code\": \"MW\" },\r\n { \"name\": \"Malaysia\", \"code\": \"MY\" },\r\n { \"name\": \"Maldives\", \"code\": \"MV\" },\r\n { \"name\": \"Mali\", \"code\": \"ML\" },\r\n { \"name\": \"Malta\", \"code\": \"MT\" },\r\n { \"name\": \"Marshall Islands\", \"code\": \"MH\" },\r\n { \"name\": \"Mauritania\", \"code\": \"MR\" },\r\n { \"name\": \"Mauritius\", \"code\": \"MU\" },\r\n { \"name\": \"Mayotte\", \"code\": \"YT\" },\r\n { \"name\": \"Mexico\", \"code\": \"MX\" },\r\n { \"name\": \"Micronesia, Federated States of\", \"code\": \"FM\" },\r\n { \"name\": \"Moldova, Republic of\", \"code\": \"MD\" },\r\n { \"name\": \"Monaco\", \"code\": \"MC\" },\r\n { \"name\": \"Mongolia\", \"code\": \"MN\" },\r\n { \"name\": \"Montserrat\", \"code\": \"MS\" },\r\n { \"name\": \"Morocco\", \"code\": \"MA\" },\r\n { \"name\": \"Mozambique\", \"code\": \"MZ\" },\r\n { \"name\": \"Myanmar\", \"code\": \"MM\" },\r\n { \"name\": \"Namibia\", \"code\": \"NA\" },\r\n { \"name\": \"Nauru\", \"code\": \"NR\" },\r\n { \"name\": \"Nepal\", \"code\": \"NP\" },\r\n { \"name\": \"Netherlands\", \"code\": \"NL\" },\r\n { \"name\": \"Netherlands Antilles\", \"code\": \"AN\" },\r\n { \"name\": \"New Caledonia\", \"code\": \"NC\" },\r\n { \"name\": \"New Zealand\", \"code\": \"NZ\" },\r\n { \"name\": \"Nicaragua\", \"code\": \"NI\" },\r\n { \"name\": \"Niger\", \"code\": \"NE\" },\r\n { \"name\": \"Nigeria\", \"code\": \"NG\" },\r\n { \"name\": \"Niue\", \"code\": \"NU\" },\r\n { \"name\": \"Norfolk Island\", \"code\": \"NF\" },\r\n { \"name\": \"Northern Mariana Islands\", \"code\": \"MP\" },\r\n { \"name\": \"Norway\", \"code\": \"NO\" },\r\n { \"name\": \"Oman\", \"code\": \"OM\" },\r\n { \"name\": \"Pakistan\", \"code\": \"PK\" },\r\n { \"name\": \"Palau\", \"code\": \"PW\" },\r\n { \"name\": \"Palestinian Territory, Occupied\", \"code\": \"PS\" },\r\n { \"name\": \"Panama\", \"code\": \"PA\" },\r\n { \"name\": \"Papua New Guinea\", \"code\": \"PG\" },\r\n { \"name\": \"Paraguay\", \"code\": \"PY\" },\r\n { \"name\": \"Peru\", \"code\": \"PE\" },\r\n { \"name\": \"Philippines\", \"code\": \"PH\" },\r\n { \"name\": \"Pitcairn\", \"code\": \"PN\" },\r\n { \"name\": \"Poland\", \"code\": \"PL\" },\r\n { \"name\": \"Portugal\", \"code\": \"PT\" },\r\n { \"name\": \"Puerto Rico\", \"code\": \"PR\" },\r\n { \"name\": \"Qatar\", \"code\": \"QA\" },\r\n { \"name\": \"Romania\", \"code\": \"RO\" },\r\n { \"name\": \"Russian Federation\", \"code\": \"RU\" },\r\n { \"name\": \"RWANDA\", \"code\": \"RW\" },\r\n { \"name\": \"Saint Helena\", \"code\": \"SH\" },\r\n { \"name\": \"Saint Kitts and Nevis\", \"code\": \"KN\" },\r\n { \"name\": \"Saint Lucia\", \"code\": \"LC\" },\r\n { \"name\": \"Saint Pierre and Miquelon\", \"code\": \"PM\" },\r\n { \"name\": \"Saint Vincent and the Grenadines\", \"code\": \"VC\" },\r\n { \"name\": \"Samoa\", \"code\": \"WS\" },\r\n { \"name\": \"San Marino\", \"code\": \"SM\" },\r\n { \"name\": \"Sao Tome and Principe\", \"code\": \"ST\" },\r\n { \"name\": \"Saudi Arabia\", \"code\": \"SA\" },\r\n { \"name\": \"Senegal\", \"code\": \"SN\" },\r\n { \"name\": \"Serbia and Montenegro\", \"code\": \"CS\" },\r\n { \"name\": \"Seychelles\", \"code\": \"SC\" },\r\n { \"name\": \"Sierra Leone\", \"code\": \"SL\" },\r\n { \"name\": \"Singapore\", \"code\": \"SG\" },\r\n { \"name\": \"Slovakia\", \"code\": \"SK\" },\r\n { \"name\": \"Slovenia\", \"code\": \"SI\" },\r\n { \"name\": \"Solomon Islands\", \"code\": \"SB\" },\r\n { \"name\": \"Somalia\", \"code\": \"SO\" },\r\n { \"name\": \"South Africa\", \"code\": \"ZA\" },\r\n { \"name\": \"Spain\", \"code\": \"ES\" },\r\n { \"name\": \"Sri Lanka\", \"code\": \"LK\" },\r\n { \"name\": \"Sudan\", \"code\": \"SD\" },\r\n { \"name\": \"Suriname\", \"code\": \"SR\" },\r\n { \"name\": \"Swaziland\", \"code\": \"SZ\" },\r\n { \"name\": \"Sweden\", \"code\": \"SE\" },\r\n { \"name\": \"Switzerland\", \"code\": \"CH\" },\r\n { \"name\": \"Syrian Arab Republic\", \"code\": \"SY\" },\r\n { \"name\": \"Taiwan, Province of China\", \"code\": \"TW\" },\r\n { \"name\": \"Tajikistan\", \"code\": \"TJ\" },\r\n { \"name\": \"Tanzania, United Republic of\", \"code\": \"TZ\" },\r\n { \"name\": \"Thailand\", \"code\": \"TH\" },\r\n { \"name\": \"Timor-Leste\", \"code\": \"TL\" },\r\n { \"name\": \"Togo\", \"code\": \"TG\" },\r\n { \"name\": \"Tokelau\", \"code\": \"TK\" },\r\n { \"name\": \"Tonga\", \"code\": \"TO\" },\r\n { \"name\": \"Trinidad and Tobago\", \"code\": \"TT\" },\r\n { \"name\": \"Tunisia\", \"code\": \"TN\" },\r\n { \"name\": \"Turkey\", \"code\": \"TR\" },\r\n { \"name\": \"Turkmenistan\", \"code\": \"TM\" },\r\n { \"name\": \"Turks and Caicos Islands\", \"code\": \"TC\" },\r\n { \"name\": \"Tuvalu\", \"code\": \"TV\" },\r\n { \"name\": \"Uganda\", \"code\": \"UG\" },\r\n { \"name\": \"Ukraine\", \"code\": \"UA\" },\r\n { \"name\": \"United Arab Emirates\", \"code\": \"AE\" },\r\n { \"name\": \"United Kingdom\", \"code\": \"GB\" },\r\n { \"name\": \"United States\", \"code\": \"US\" },\r\n { \"name\": \"Uruguay\", \"code\": \"UY\" },\r\n { \"name\": \"Uzbekistan\", \"code\": \"UZ\" },\r\n { \"name\": \"Vanuatu\", \"code\": \"VU\" },\r\n { \"name\": \"Venezuela\", \"code\": \"VE\" },\r\n { \"name\": \"Viet Nam\", \"code\": \"VN\" },\r\n { \"name\": \"Virgin Islands, U.S.\", \"code\": \"VI\" },\r\n { \"name\": \"Wallis and Futuna\", \"code\": \"WF\" },\r\n { \"name\": \"Yemen\", \"code\": \"YE\" },\r\n { \"name\": \"Zambia\", \"code\": \"ZM\" },\r\n { \"name\": \"Zimbabwe\", \"code\": \"ZW\" }\r\n ];\r\n\r\n var countries_code = [\r\n { code: 'AF', callingCode: '93' },\r\n { code: 'AX', callingCode: '358' },\r\n { code: 'AL', callingCode: '355' },\r\n { code: 'DZ', callingCode: '213' },\r\n { code: 'AS', callingCode: '1684' },\r\n { code: 'AD', callingCode: '376' },\r\n { code: 'AO', callingCode: '244' },\r\n { code: 'AI', callingCode: '1264' },\r\n { code: 'AQ', callingCode: '672' },\r\n { code: 'AG', callingCode: '1268' },\r\n { code: 'AR', callingCode: '54' },\r\n { code: 'AM', callingCode: '374' },\r\n { code: 'AW', callingCode: '297' },\r\n { code: 'AU', callingCode: '61' },\r\n { code: 'AT', callingCode: '43' },\r\n { code: 'AZ', callingCode: '994' },\r\n { code: 'BS', callingCode: '1242' },\r\n { code: 'BH', callingCode: '973' },\r\n { code: 'BD', callingCode: '880' },\r\n { code: 'BB', callingCode: '1246' },\r\n { code: 'BY', callingCode: '375' },\r\n { code: 'BE', callingCode: '32' },\r\n { code: 'BZ', callingCode: '501' },\r\n { code: 'BJ', callingCode: '229' },\r\n { code: 'BM', callingCode: '1441' },\r\n { code: 'BT', callingCode: '975' },\r\n { code: 'BO', callingCode: '591' },\r\n { code: 'BA', callingCode: '387' },\r\n { code: 'BW', callingCode: '267' },\r\n { code: 'BR', callingCode: '55 ' },\r\n { code: 'BN', callingCode: '673' },\r\n { code: 'BG', callingCode: '359' },\r\n { code: 'BF', callingCode: '226' },\r\n { code: 'BI', callingCode: '257' },\r\n { code: 'KH', callingCode: '855' },\r\n { code: 'CM', callingCode: '237' },\r\n { code: 'CA', callingCode: '1' },\r\n { code: 'CV', callingCode: '238' },\r\n { code: 'KY', callingCode: '1345' },\r\n { code: 'CF', callingCode: '236' },\r\n { code: 'TD', callingCode: '235' },\r\n { code: 'CL', callingCode: '56 ' },\r\n { code: 'CN', callingCode: '86 ' },\r\n { code: 'CX', callingCode: '61' },\r\n { code: 'CC', callingCode: '61 ' },\r\n { code: 'CO', callingCode: '57 ' },\r\n { code: 'KM', callingCode: '269 ' },\r\n { code: 'CG', callingCode: '242 ' },\r\n { code: 'CD', callingCode: '243 ' },\r\n { code: 'CK', callingCode: '682 ' },\r\n { code: 'CR', callingCode: '506 ' },\r\n { code: 'CI', callingCode: '225' },\r\n { code: 'HR', callingCode: '385 ' },\r\n { code: 'CU', callingCode: '53 ' },\r\n { code: 'CY', callingCode: '357 ' },\r\n { code: 'CZ', callingCode: '420 ' },\r\n { code: 'DK', callingCode: '45 ' },\r\n { code: 'DJ', callingCode: '253 ' },\r\n { code: 'DM', callingCode: '1767 ' },\r\n { code: 'DO', callingCode: '1809 ' },\r\n { code: 'EC', callingCode: '593 ' },\r\n { code: 'EG', callingCode: '20 ' },\r\n { code: 'SV', callingCode: '503 ' },\r\n { code: 'GQ', callingCode: '240 ' },\r\n { code: 'ER', callingCode: '291 ' },\r\n { code: 'EE', callingCode: '372 ' },\r\n { code: 'ET', callingCode: '251 ' },\r\n { code: 'FK', callingCode: '500 ' },\r\n { code: 'FO', callingCode: '298 ' },\r\n { code: 'FJ', callingCode: '679 ' },\r\n { code: 'FI', callingCode: '358 ' },\r\n { code: 'FR', callingCode: '33 ' },\r\n { code: 'PF', callingCode: '689 ' },\r\n { code: 'GA', callingCode: '241 ' },\r\n { code: 'GM', callingCode: '220 ' },\r\n { code: 'GE', callingCode: '995 ' },\r\n { code: 'DE', callingCode: '49 ' },\r\n { code: 'GH', callingCode: '233 ' },\r\n { code: 'GI', callingCode: '350 ' },\r\n { code: 'GR', callingCode: '30 ' },\r\n { code: 'GL', callingCode: '299 ' },\r\n { code: 'GD', callingCode: '1473' },\r\n { code: 'GU', callingCode: '1671' },\r\n { code: 'GT', callingCode: '502 ' },\r\n { code: 'GN', callingCode: '224 ' },\r\n { code: 'GW', callingCode: '245 ' },\r\n { code: 'GY', callingCode: '592 ' },\r\n { code: 'HT', callingCode: '509 ' },\r\n { code: 'VA', callingCode: '39 ' },\r\n { code: 'HN', callingCode: '504 ' },\r\n { code: 'HK', callingCode: '852' },\r\n { code: 'HU', callingCode: '36 ' },\r\n { code: 'IS', callingCode: '354 ' },\r\n { code: 'IN', callingCode: '91 ' },\r\n { code: 'ID', callingCode: '62 ' },\r\n { code: 'IR', callingCode: '98 ' },\r\n { code: 'IQ', callingCode: '964 ' },\r\n { code: 'IE', callingCode: '353 ' },\r\n { code: 'IM', callingCode: '44 ' },\r\n { code: 'IL', callingCode: '972 ' },\r\n { code: 'IT', callingCode: '39 ' },\r\n { code: 'JM', callingCode: '1876 ' },\r\n { code: 'JP', callingCode: '81 ' },\r\n { code: 'JE', callingCode: 'Jersey' },\r\n { code: 'JO', callingCode: '962 ' },\r\n { code: 'KZ', callingCode: '7 ' },\r\n { code: 'KE', callingCode: '254 ' },\r\n { code: 'KI', callingCode: '686 ' },\r\n { code: 'KR', callingCode: '82' },\r\n { code: 'KW', callingCode: '965 ' },\r\n { code: 'KG', callingCode: '996 ' },\r\n { code: 'LA', callingCode: '856 ' },\r\n { code: 'LV', callingCode: '371 ' },\r\n { code: 'LB', callingCode: '961 ' },\r\n { code: 'LS', callingCode: '266 ' },\r\n { code: 'LR', callingCode: '231 ' },\r\n { code: 'LY', callingCode: '218 ' },\r\n { code: 'LI', callingCode: '423 ' },\r\n { code: 'LT', callingCode: '370 ' },\r\n { code: 'LU', callingCode: '352 ' },\r\n { code: 'MO', callingCode: '853 ' },\r\n { code: 'MK', callingCode: '389 ' },\r\n { code: 'MG', callingCode: '261 ' },\r\n { code: 'MW', callingCode: '265 ' },\r\n { code: 'MY', callingCode: '60 ' },\r\n { code: 'MV', callingCode: '960 ' },\r\n { code: 'ML', callingCode: '223 ' },\r\n { code: 'MT', callingCode: '356 ' },\r\n { code: 'MH', callingCode: '692 ' },\r\n { code: 'MR', callingCode: '222 ' },\r\n { code: 'MU', callingCode: '230 ' },\r\n { code: 'YT', callingCode: '262 ' },\r\n { code: 'MX', callingCode: '52 ' },\r\n { code: 'FM', callingCode: '691 ' },\r\n { code: 'MD', callingCode: '373 ' },\r\n { code: 'MC', callingCode: '377 ' },\r\n { code: 'MN', callingCode: '976 ' },\r\n { code: 'ME', callingCode: '382 ' },\r\n { code: 'MS', callingCode: '1664 ' },\r\n { code: 'MA', callingCode: '212 ' },\r\n { code: 'MZ', callingCode: '258' },\r\n { code: 'MM', callingCode: '95' },\r\n { code: 'NA', callingCode: '264 ' },\r\n { code: 'NR', callingCode: '674 ' },\r\n { code: 'NP', callingCode: '977 ' },\r\n { code: 'NL', callingCode: '31 ' },\r\n { code: 'AN', callingCode: '599 ' },\r\n { code: 'NC', callingCode: '687 ' },\r\n { code: 'NZ', callingCode: '64 ' },\r\n { code: 'NI', callingCode: '505 ' },\r\n { code: 'NE', callingCode: '227 ' },\r\n { code: 'NG', callingCode: '234 ' },\r\n { code: 'NU', callingCode: '683 ' },\r\n { code: 'NF', callingCode: '672 ' },\r\n { code: 'MP', callingCode: '850 ' },\r\n { code: 'NO', callingCode: '47 ' },\r\n { code: 'OM', callingCode: '968 ' },\r\n { code: 'PK', callingCode: '92 ' },\r\n { code: 'PW', callingCode: '680 ' },\r\n { code: 'PS', callingCode: '970' },\r\n { code: 'PA', callingCode: '507 ' },\r\n { code: 'PG', callingCode: '675 ' },\r\n { code: 'PY', callingCode: '595 ' },\r\n { code: 'PE', callingCode: '51 ' },\r\n { code: 'PH', callingCode: '63 ' },\r\n { code: 'PN', callingCode: '870 ' },\r\n { code: 'PL', callingCode: '48 ' },\r\n { code: 'PT', callingCode: '351 ' },\r\n { code: 'PR', callingCode: '1 ' },\r\n { code: 'QA', callingCode: '974 ' },\r\n { code: 'RO', callingCode: '40 ' },\r\n { code: 'RU', callingCode: '7 ' },\r\n { code: 'RW', callingCode: '250 ' },\r\n { code: 'BL', callingCode: '590 ' },\r\n { code: 'SH', callingCode: '290 ' },\r\n { code: 'KN', callingCode: '1869 ' },\r\n { code: 'LC', callingCode: '1758' },\r\n { code: 'PM', callingCode: '508 ' },\r\n { code: 'VC', callingCode: '1784 ' },\r\n { code: 'WS', callingCode: '685 ' },\r\n { code: 'SM', callingCode: '378 ' },\r\n { code: 'ST', callingCode: '239 ' },\r\n { code: 'SA', callingCode: '966 ' },\r\n { code: 'SN', callingCode: '221 ' },\r\n \r\n { code: 'SC', callingCode: '248 ' },\r\n { code: 'SL', callingCode: '232 ' },\r\n { code: 'SG', callingCode: '65 ' },\r\n { code: 'SK', callingCode: '421 ' },\r\n { code: 'SI', callingCode: '386 ' },\r\n { code: 'SB', callingCode: '677 ' },\r\n { code: 'SO', callingCode: '252 ' },\r\n { code: 'ZA', callingCode: '27 ' },\r\n { code: 'ES', callingCode: '34 ' },\r\n { code: 'LK', callingCode: '94 ' },\r\n { code: 'SD', callingCode: '249 ' },\r\n { code: 'SR', callingCode: '597 ' },\r\n { code: 'SZ', callingCode: '268 ' },\r\n { code: 'SE', callingCode: '46 ' },\r\n { code: 'CH', callingCode: '41 ' },\r\n { code: 'SY', callingCode: '963 ' },\r\n { code: 'TW', callingCode: '886 ' },\r\n { code: 'TJ', callingCode: '992 ' },\r\n { code: 'TZ', callingCode: '255 ' },\r\n { code: 'TH', callingCode: '66' },\r\n { code: 'TL', callingCode: '670 ' },\r\n { code: 'TG', callingCode: '228 ' },\r\n { code: 'TK', callingCode: '690 ' },\r\n { code: 'TO', callingCode: '676 ' },\r\n { code: 'TT', callingCode: '1868' },\r\n { code: 'TN', callingCode: '216 ' },\r\n { code: 'TR', callingCode: '90 ' },\r\n { code: 'TM', callingCode: '993 ' },\r\n { code: 'TC', callingCode: '1649 ' },\r\n { code: 'TV', callingCode: '688 ' },\r\n { code: 'UG', callingCode: '256 ' },\r\n { code: 'UA', callingCode: '380 ' },\r\n { code: 'AE', callingCode: '971 ' },\r\n { code: 'GB', callingCode: '44 ' },\r\n { code: 'US', callingCode: '1' },\r\n { code: 'UY', callingCode: '598 ' },\r\n { code: 'UZ', callingCode: '998 ' },\r\n { code: 'VU', callingCode: '678 ' },\r\n { code: 'VE', callingCode: '58 ' },\r\n { code: 'VN', callingCode: '84 ' },\r\n { code: 'VI', callingCode: '1340 ' },\r\n { code: 'WF', callingCode: '681 ' },\r\n { code: 'YE', callingCode: '967 ' },\r\n { code: 'ZM', callingCode: '260 ' },\r\n { code: 'ZW', callingCode: '263 ' },\r\n ];\r\n\r\n var countries = [{ \"code\": \"AF\", \"callingCode\": \"93\", \"name\": \"Afghanistan\" }, { \"code\": \"AX\", \"callingCode\": \"358\", \"name\": \"Aland Islands\" }, { \"code\": \"AL\", \"callingCode\": \"355\", \"name\": \"Albania\" }, { \"code\": \"DZ\", \"callingCode\": \"213\", \"name\": \"Algeria\" }, { \"code\": \"AS\", \"callingCode\": \"1684\", \"name\": \"American Samoa\" }, { \"code\": \"AD\", \"callingCode\": \"376\", \"name\": \"AndorrA\" }, { \"code\": \"AO\", \"callingCode\": \"244\", \"name\": \"Angola\" }, { \"code\": \"AI\", \"callingCode\": \"1264\", \"name\": \"Anguilla\" }, { \"code\": \"AQ\", \"callingCode\": \"672\", \"name\": \"Antarctica\" }, { \"code\": \"AG\", \"callingCode\": \"1268\", \"name\": \"Antigua and Barbuda\" }, { \"code\": \"AR\", \"callingCode\": \"54\", \"name\": \"Argentina\" }, { \"code\": \"AM\", \"callingCode\": \"374\", \"name\": \"Armenia\" }, { \"code\": \"AW\", \"callingCode\": \"297\", \"name\": \"Aruba\" }, { \"code\": \"AU\", \"callingCode\": \"61\", \"name\": \"Australia\" }, { \"code\": \"AT\", \"callingCode\": \"43\", \"name\": \"Austria\" }, { \"code\": \"AZ\", \"callingCode\": \"994\", \"name\": \"Azerbaijan\" }, { \"code\": \"BS\", \"callingCode\": \"1242\", \"name\": \"Bahamas\" }, { \"code\": \"BH\", \"callingCode\": \"973\", \"name\": \"Bahrain\" }, { \"code\": \"BD\", \"callingCode\": \"880\", \"name\": \"Bangladesh\" }, { \"code\": \"BB\", \"callingCode\": \"1246\", \"name\": \"Barbados\" }, { \"code\": \"BY\", \"callingCode\": \"375\", \"name\": \"Belarus\" }, { \"code\": \"BE\", \"callingCode\": \"32\", \"name\": \"Belgium\" }, { \"code\": \"BZ\", \"callingCode\": \"501\", \"name\": \"Belize\" }, { \"code\": \"BJ\", \"callingCode\": \"229\", \"name\": \"Benin\" }, { \"code\": \"BM\", \"callingCode\": \"1441\", \"name\": \"Bermuda\" }, { \"code\": \"BT\", \"callingCode\": \"975\", \"name\": \"Bhutan\" }, { \"code\": \"BO\", \"callingCode\": \"591\", \"name\": \"Bolivia\" }, { \"code\": \"BA\", \"callingCode\": \"387\", \"name\": \"Bosnia and Herzegovina\" }, { \"code\": \"BW\", \"callingCode\": \"267\", \"name\": \"Botswana\" }, { \"code\": \"BR\", \"callingCode\": \"55 \", \"name\": \"Brazil\" }, { \"code\": \"BN\", \"callingCode\": \"673\", \"name\": \"Brunei Darussalam\" }, { \"code\": \"BG\", \"callingCode\": \"359\", \"name\": \"Bulgaria\" }, { \"code\": \"BF\", \"callingCode\": \"226\", \"name\": \"Burkina Faso\" }, { \"code\": \"BI\", \"callingCode\": \"257\", \"name\": \"Burundi\" }, { \"code\": \"KH\", \"callingCode\": \"855\", \"name\": \"Cambodia\" }, { \"code\": \"CM\", \"callingCode\": \"237\", \"name\": \"Cameroon\" }, { \"code\": \"CA\", \"callingCode\": \"1\", \"name\": \"Canada\" }, { \"code\": \"CV\", \"callingCode\": \"238\", \"name\": \"Cape Verde\" }, { \"code\": \"KY\", \"callingCode\": \"1345\", \"name\": \"Cayman Islands\" }, { \"code\": \"CF\", \"callingCode\": \"236\", \"name\": \"Central African Republic\" }, { \"code\": \"TD\", \"callingCode\": \"235\", \"name\": \"Chad\" }, { \"code\": \"CL\", \"callingCode\": \"56 \", \"name\": \"Chile\" }, { \"code\": \"CN\", \"callingCode\": \"86 \", \"name\": \"China\" }, { \"code\": \"CX\", \"callingCode\": \"61\", \"name\": \"Christmas Island\" }, { \"code\": \"CC\", \"callingCode\": \"61 \", \"name\": \"Cocos (Keeling) Islands\" }, { \"code\": \"CO\", \"callingCode\": \"57 \", \"name\": \"Colombia\" }, { \"code\": \"KM\", \"callingCode\": \"269 \", \"name\": \"Comoros\" }, { \"code\": \"CG\", \"callingCode\": \"242 \", \"name\": \"Congo\" }, { \"code\": \"CD\", \"callingCode\": \"243 \", \"name\": \"Congo, The Democratic Republic of the\" }, { \"code\": \"CK\", \"callingCode\": \"682 \", \"name\": \"Cook Islands\" }, { \"code\": \"CR\", \"callingCode\": \"506 \", \"name\": \"Costa Rica\" }, { \"code\": \"CI\", \"callingCode\": \"225\", \"name\": \"Cote D\\\"Ivoire\" }, { \"code\": \"HR\", \"callingCode\": \"385 \", \"name\": \"Croatia\" }, { \"code\": \"CU\", \"callingCode\": \"53 \", \"name\": \"Cuba\" }, { \"code\": \"CY\", \"callingCode\": \"357 \", \"name\": \"Cyprus\" }, { \"code\": \"CZ\", \"callingCode\": \"420 \", \"name\": \"Czech Republic\" }, { \"code\": \"DK\", \"callingCode\": \"45 \", \"name\": \"Denmark\" }, { \"code\": \"DJ\", \"callingCode\": \"253 \", \"name\": \"Djibouti\" }, { \"code\": \"DM\", \"callingCode\": \"1767 \", \"name\": \"Dominica\" }, { \"code\": \"DO\", \"callingCode\": \"1809 \", \"name\": \"Dominican Republic\" }, { \"code\": \"EC\", \"callingCode\": \"593 \", \"name\": \"Ecuador\" }, { \"code\": \"EG\", \"callingCode\": \"20 \", \"name\": \"Egypt\" }, { \"code\": \"SV\", \"callingCode\": \"503 \", \"name\": \"El Salvador\" }, { \"code\": \"GQ\", \"callingCode\": \"240 \", \"name\": \"Equatorial Guinea\" }, { \"code\": \"ER\", \"callingCode\": \"291 \", \"name\": \"Eritrea\" }, { \"code\": \"EE\", \"callingCode\": \"372 \", \"name\": \"Estonia\" }, { \"code\": \"ET\", \"callingCode\": \"251 \", \"name\": \"Ethiopia\" }, { \"code\": \"FK\", \"callingCode\": \"500 \", \"name\": \"Falkland Islands (Malvinas)\" }, { \"code\": \"FO\", \"callingCode\": \"298 \", \"name\": \"Faroe Islands\" }, { \"code\": \"FJ\", \"callingCode\": \"679 \", \"name\": \"Fiji\" }, { \"code\": \"FI\", \"callingCode\": \"358 \", \"name\": \"Finland\" }, { \"code\": \"FR\", \"callingCode\": \"33 \", \"name\": \"France\" }, { \"code\": \"PF\", \"callingCode\": \"689 \", \"name\": \"French Polynesia\" }, { \"code\": \"GA\", \"callingCode\": \"241 \", \"name\": \"Gabon\" }, { \"code\": \"GM\", \"callingCode\": \"220 \", \"name\": \"Gambia\" }, { \"code\": \"GE\", \"callingCode\": \"995 \", \"name\": \"Georgia\" }, { \"code\": \"DE\", \"callingCode\": \"49 \", \"name\": \"Germany\" }, { \"code\": \"GH\", \"callingCode\": \"233 \", \"name\": \"Ghana\" }, { \"code\": \"GI\", \"callingCode\": \"350 \", \"name\": \"Gibraltar\" }, { \"code\": \"GR\", \"callingCode\": \"30 \", \"name\": \"Greece\" }, { \"code\": \"GL\", \"callingCode\": \"299 \", \"name\": \"Greenland\" }, { \"code\": \"GD\", \"callingCode\": \"1473\", \"name\": \"Grenada\" }, { \"code\": \"GU\", \"callingCode\": \"1671\", \"name\": \"Guam\" }, { \"code\": \"GT\", \"callingCode\": \"502 \", \"name\": \"Guatemala\" }, { \"code\": \"GN\", \"callingCode\": \"224 \", \"name\": \"Guinea\" }, { \"code\": \"GW\", \"callingCode\": \"245 \", \"name\": \"Guinea-Bissau\" }, { \"code\": \"GY\", \"callingCode\": \"592 \", \"name\": \"Guyana\" }, { \"code\": \"HT\", \"callingCode\": \"509 \", \"name\": \"Haiti\" }, { \"code\": \"VA\", \"callingCode\": \"39 \", \"name\": \"Holy See (Vatican City State)\" }, { \"code\": \"HN\", \"callingCode\": \"504 \", \"name\": \"Honduras\" }, { \"code\": \"HK\", \"callingCode\": \"852\", \"name\": \"Hong Kong\" }, { \"code\": \"HU\", \"callingCode\": \"36 \", \"name\": \"Hungary\" }, { \"code\": \"IS\", \"callingCode\": \"354 \", \"name\": \"Iceland\" }, { \"code\": \"IN\", \"callingCode\": \"91 \", \"name\": \"India\" }, { \"code\": \"ID\", \"callingCode\": \"62 \", \"name\": \"Indonesia\" }, { \"code\": \"IR\", \"callingCode\": \"98 \", \"name\": \"Iran, Islamic Republic Of\" }, { \"code\": \"IQ\", \"callingCode\": \"964 \", \"name\": \"Iraq\" }, { \"code\": \"IE\", \"callingCode\": \"353 \", \"name\": \"Ireland\" }, { \"code\": \"IM\", \"callingCode\": \"44 \", \"name\": \"Isle of Man\" }, { \"code\": \"IL\", \"callingCode\": \"972 \", \"name\": \"Israel\" }, { \"code\": \"IT\", \"callingCode\": \"39 \", \"name\": \"Italy\" }, { \"code\": \"JM\", \"callingCode\": \"1876 \", \"name\": \"Jamaica\" }, { \"code\": \"JP\", \"callingCode\": \"81 \", \"name\": \"Japan\" }, { \"code\": \"JE\", \"callingCode\": \"Jersey\", \"name\": \"Jersey\" }, { \"code\": \"JO\", \"callingCode\": \"962 \", \"name\": \"Jordan\" }, { \"code\": \"KZ\", \"callingCode\": \"7 \", \"name\": \"Kazakhstan\" }, { \"code\": \"KE\", \"callingCode\": \"254 \", \"name\": \"Kenya\" }, { \"code\": \"KI\", \"callingCode\": \"686 \", \"name\": \"Kiribati\" }, { \"code\": \"KR\", \"callingCode\": \"82\", \"name\": \"Korea, Republic of\" }, { \"code\": \"KW\", \"callingCode\": \"965 \", \"name\": \"Kuwait\" }, { \"code\": \"KG\", \"callingCode\": \"996 \", \"name\": \"Kyrgyzstan\" }, { \"code\": \"LA\", \"callingCode\": \"856 \", \"name\": \"Lao People\\\"S Democratic Republic\" }, { \"code\": \"LV\", \"callingCode\": \"371 \", \"name\": \"Latvia\" }, { \"code\": \"LB\", \"callingCode\": \"961 \", \"name\": \"Lebanon\" }, { \"code\": \"LS\", \"callingCode\": \"266 \", \"name\": \"Lesotho\" }, { \"code\": \"LR\", \"callingCode\": \"231 \", \"name\": \"Liberia\" }, { \"code\": \"LY\", \"callingCode\": \"218 \", \"name\": \"Libyan Arab Jamahiriya\" }, { \"code\": \"LI\", \"callingCode\": \"423 \", \"name\": \"Liechtenstein\" }, { \"code\": \"LT\", \"callingCode\": \"370 \", \"name\": \"Lithuania\" }, { \"code\": \"LU\", \"callingCode\": \"352 \", \"name\": \"Luxembourg\" }, { \"code\": \"MO\", \"callingCode\": \"853 \", \"name\": \"Macao\" }, { \"code\": \"MK\", \"callingCode\": \"389 \", \"name\": \"Macedonia, The Former Yugoslav Republic of\" }, { \"code\": \"MG\", \"callingCode\": \"261 \", \"name\": \"Madagascar\" }, { \"code\": \"MW\", \"callingCode\": \"265 \", \"name\": \"Malawi\" }, { \"code\": \"MY\", \"callingCode\": \"60 \", \"name\": \"Malaysia\" }, { \"code\": \"MV\", \"callingCode\": \"960 \", \"name\": \"Maldives\" }, { \"code\": \"ML\", \"callingCode\": \"223 \", \"name\": \"Mali\" }, { \"code\": \"MT\", \"callingCode\": \"356 \", \"name\": \"Malta\" }, { \"code\": \"MH\", \"callingCode\": \"692 \", \"name\": \"Marshall Islands\" }, { \"code\": \"MR\", \"callingCode\": \"222 \", \"name\": \"Mauritania\" }, { \"code\": \"MU\", \"callingCode\": \"230 \", \"name\": \"Mauritius\" }, { \"code\": \"YT\", \"callingCode\": \"262 \", \"name\": \"Mayotte\" }, { \"code\": \"MX\", \"callingCode\": \"52 \", \"name\": \"Mexico\" }, { \"code\": \"FM\", \"callingCode\": \"691 \", \"name\": \"Micronesia, Federated States of\" }, { \"code\": \"MD\", \"callingCode\": \"373 \", \"name\": \"Moldova, Republic of\" }, { \"code\": \"MC\", \"callingCode\": \"377 \", \"name\": \"Monaco\" }, { \"code\": \"MN\", \"callingCode\": \"976 \", \"name\": \"Mongolia\" }, { \"code\": \"MS\", \"callingCode\": \"1664 \", \"name\": \"Montserrat\" }, { \"code\": \"MA\", \"callingCode\": \"212 \", \"name\": \"Morocco\" }, { \"code\": \"MZ\", \"callingCode\": \"258\", \"name\": \"Mozambique\" }, { \"code\": \"MM\", \"callingCode\": \"95\", \"name\": \"Myanmar\" }, { \"code\": \"NA\", \"callingCode\": \"264 \", \"name\": \"Namibia\" }, { \"code\": \"NR\", \"callingCode\": \"674 \", \"name\": \"Nauru\" }, { \"code\": \"NP\", \"callingCode\": \"977 \", \"name\": \"Nepal\" }, { \"code\": \"NL\", \"callingCode\": \"31 \", \"name\": \"Netherlands\" }, { \"code\": \"AN\", \"callingCode\": \"599 \", \"name\": \"Netherlands Antilles\" }, { \"code\": \"NC\", \"callingCode\": \"687 \", \"name\": \"New Caledonia\" }, { \"code\": \"NZ\", \"callingCode\": \"64 \", \"name\": \"New Zealand\" }, { \"code\": \"NI\", \"callingCode\": \"505 \", \"name\": \"Nicaragua\" }, { \"code\": \"NE\", \"callingCode\": \"227 \", \"name\": \"Niger\" }, { \"code\": \"NG\", \"callingCode\": \"234 \", \"name\": \"Nigeria\" }, { \"code\": \"NU\", \"callingCode\": \"683 \", \"name\": \"Niue\" }, { \"code\": \"NF\", \"callingCode\": \"672 \", \"name\": \"Norfolk Island\" }, { \"code\": \"MP\", \"callingCode\": \"850 \", \"name\": \"Northern Mariana Islands\" }, { \"code\": \"NO\", \"callingCode\": \"47 \", \"name\": \"Norway\" }, { \"code\": \"OM\", \"callingCode\": \"968 \", \"name\": \"Oman\" }, { \"code\": \"PK\", \"callingCode\": \"92 \", \"name\": \"Pakistan\" }, { \"code\": \"PW\", \"callingCode\": \"680 \", \"name\": \"Palau\" }, { \"code\": \"PS\", \"callingCode\": \"970\", \"name\": \"Palestinian Territory, Occupied\" }, { \"code\": \"PA\", \"callingCode\": \"507 \", \"name\": \"Panama\" }, { \"code\": \"PG\", \"callingCode\": \"675 \", \"name\": \"Papua New Guinea\" }, { \"code\": \"PY\", \"callingCode\": \"595 \", \"name\": \"Paraguay\" }, { \"code\": \"PE\", \"callingCode\": \"51 \", \"name\": \"Peru\" }, { \"code\": \"PH\", \"callingCode\": \"63 \", \"name\": \"Philippines\" }, { \"code\": \"PN\", \"callingCode\": \"870 \", \"name\": \"Pitcairn\" }, { \"code\": \"PL\", \"callingCode\": \"48 \", \"name\": \"Poland\" }, { \"code\": \"PT\", \"callingCode\": \"351 \", \"name\": \"Portugal\" }, { \"code\": \"PR\", \"callingCode\": \"1 \", \"name\": \"Puerto Rico\" }, { \"code\": \"QA\", \"callingCode\": \"974 \", \"name\": \"Qatar\" }, { \"code\": \"RO\", \"callingCode\": \"40 \", \"name\": \"Romania\" }, { \"code\": \"RU\", \"callingCode\": \"7 \", \"name\": \"Russian Federation\" }, { \"code\": \"RW\", \"callingCode\": \"250 \", \"name\": \"RWANDA\" }, { \"code\": \"SH\", \"callingCode\": \"290 \", \"name\": \"Saint Helena\" }, { \"code\": \"KN\", \"callingCode\": \"1869 \", \"name\": \"Saint Kitts and Nevis\" }, { \"code\": \"LC\", \"callingCode\": \"1758\", \"name\": \"Saint Lucia\" }, { \"code\": \"PM\", \"callingCode\": \"508 \", \"name\": \"Saint Pierre and Miquelon\" }, { \"code\": \"VC\", \"callingCode\": \"1784 \", \"name\": \"Saint Vincent and the Grenadines\" }, { \"code\": \"WS\", \"callingCode\": \"685 \", \"name\": \"Samoa\" }, { \"code\": \"SM\", \"callingCode\": \"378 \", \"name\": \"San Marino\" }, { \"code\": \"ST\", \"callingCode\": \"239 \", \"name\": \"Sao Tome and Principe\" }, { \"code\": \"SA\", \"callingCode\": \"966 \", \"name\": \"Saudi Arabia\" }, { \"code\": \"SN\", \"callingCode\": \"221 \", \"name\": \"Senegal\" }, { \"code\": \"SC\", \"callingCode\": \"248 \", \"name\": \"Seychelles\" }, { \"code\": \"SL\", \"callingCode\": \"232 \", \"name\": \"Sierra Leone\" }, { \"code\": \"SG\", \"callingCode\": \"65 \", \"name\": \"Singapore\" }, { \"code\": \"SK\", \"callingCode\": \"421 \", \"name\": \"Slovakia\" }, { \"code\": \"SI\", \"callingCode\": \"386 \", \"name\": \"Slovenia\" }, { \"code\": \"SB\", \"callingCode\": \"677 \", \"name\": \"Solomon Islands\" }, { \"code\": \"SO\", \"callingCode\": \"252 \", \"name\": \"Somalia\" }, { \"code\": \"ZA\", \"callingCode\": \"27 \", \"name\": \"South Africa\" }, { \"code\": \"ES\", \"callingCode\": \"34 \", \"name\": \"Spain\" }, { \"code\": \"LK\", \"callingCode\": \"94 \", \"name\": \"Sri Lanka\" }, { \"code\": \"SD\", \"callingCode\": \"249 \", \"name\": \"Sudan\" }, { \"code\": \"SR\", \"callingCode\": \"597 \", \"name\": \"Suriname\" }, { \"code\": \"SZ\", \"callingCode\": \"268 \", \"name\": \"Swaziland\" }, { \"code\": \"SE\", \"callingCode\": \"46 \", \"name\": \"Sweden\" }, { \"code\": \"CH\", \"callingCode\": \"41 \", \"name\": \"Switzerland\" }, { \"code\": \"SY\", \"callingCode\": \"963 \", \"name\": \"Syrian Arab Republic\" }, { \"code\": \"TW\", \"callingCode\": \"886 \", \"name\": \"Taiwan, Province of China\" }, { \"code\": \"TJ\", \"callingCode\": \"992 \", \"name\": \"Tajikistan\" }, { \"code\": \"TZ\", \"callingCode\": \"255 \", \"name\": \"Tanzania, United Republic of\" }, { \"code\": \"TH\", \"callingCode\": \"66\", \"name\": \"Thailand\" }, { \"code\": \"TL\", \"callingCode\": \"670 \", \"name\": \"Timor-Leste\" }, { \"code\": \"TG\", \"callingCode\": \"228 \", \"name\": \"Togo\" }, { \"code\": \"TK\", \"callingCode\": \"690 \", \"name\": \"Tokelau\" }, { \"code\": \"TO\", \"callingCode\": \"676 \", \"name\": \"Tonga\" }, { \"code\": \"TT\", \"callingCode\": \"1868\", \"name\": \"Trinidad and Tobago\" }, { \"code\": \"TN\", \"callingCode\": \"216 \", \"name\": \"Tunisia\" }, { \"code\": \"TR\", \"callingCode\": \"90 \", \"name\": \"Turkey\" }, { \"code\": \"TM\", \"callingCode\": \"993 \", \"name\": \"Turkmenistan\" }, { \"code\": \"TC\", \"callingCode\": \"1649 \", \"name\": \"Turks and Caicos Islands\" }, { \"code\": \"TV\", \"callingCode\": \"688 \", \"name\": \"Tuvalu\" }, { \"code\": \"UG\", \"callingCode\": \"256 \", \"name\": \"Uganda\" }, { \"code\": \"UA\", \"callingCode\": \"380 \", \"name\": \"Ukraine\" }, { \"code\": \"AE\", \"callingCode\": \"971 \", \"name\": \"United Arab Emirates\" }, { \"code\": \"GB\", \"callingCode\": \"44 \", \"name\": \"United Kingdom\" }, { \"code\": \"US\", \"callingCode\": \"1\", \"name\": \"United States\" }, { \"code\": \"UY\", \"callingCode\": \"598 \", \"name\": \"Uruguay\" }, { \"code\": \"UZ\", \"callingCode\": \"998 \", \"name\": \"Uzbekistan\" }, { \"code\": \"VU\", \"callingCode\": \"678 \", \"name\": \"Vanuatu\" }, { \"code\": \"VE\", \"callingCode\": \"58 \", \"name\": \"Venezuela\" }, { \"code\": \"VN\", \"callingCode\": \"84 \", \"name\": \"Viet Nam\" }, { \"code\": \"VI\", \"callingCode\": \"1340 \", \"name\": \"Virgin Islands, U.S.\" }, { \"code\": \"WF\", \"callingCode\": \"681 \", \"name\": \"Wallis and Futuna\" }, { \"code\": \"YE\", \"callingCode\": \"967 \", \"name\": \"Yemen\" }, { \"code\": \"ZM\", \"callingCode\": \"260 \", \"name\": \"Zambia\" }, { \"code\": \"ZW\", \"callingCode\": \"263 \", \"name\": \"Zimbabwe\" }];\r\n countries = countries.sort(function (a, b) {\r\n if (a.callingCode > b.callingCode)\r\n return 1;\r\n if (a.callingCode == b.callingCode)\r\n return 0;\r\n return -1;\r\n });\r\n\r\n //console.log(JSON.stringify(countries));\r\n\r\n this.getCountriesSortedByCallingCode = function () {\r\n return countries.sort(function (a, b) {\r\n if (a.callingCode > b.callingCode)\r\n return 1;\r\n if (a.callingCode == b.callingCode)\r\n return 0;\r\n return -1;\r\n });\r\n };\r\n\r\n this.getCountriesSortedByName = function () {\r\n return countries.sort(function (a, b) {\r\n if (a.name > b.name)\r\n return 1;\r\n if (a.name == b.name)\r\n return 0;\r\n return -1;\r\n });\r\n };\r\n\r\n this.getCountryCallingCode = function(code){\r\n for (var i = 0 ; i < countries_code.length ; i++) {\r\n if (countries_code[i].code == code)\r\n return countries_code[i].callingCode.trim();\r\n }\r\n return \"\";\r\n };\r\n\r\n this.getCountryCodeByCallingCode = function (callingCode) {\r\n var _callingCode = callingCode.trim();\r\n _callingCode = _callingCode.replace(/^\\+/, \"\");\r\n _callingCode = _callingCode.replace(/^00/, \"\");\r\n\r\n for (var i = 0 ; i < countries.length ; i++) {\r\n if (countries[i].callingCode.trim() == _callingCode)\r\n return countries[i].code.trim();\r\n }\r\n return \"\";\r\n };\r\n\r\n this.getCountryNameByCode = function (code) {\r\n \r\n for(var i = 0 ; i < countries_list.length ; i++)\r\n {\r\n if (countries_list[i].code == code)\r\n return countries_list[i].name;\r\n }\r\n return \"\";\r\n };\r\n\r\n this.getCountryCodeByName = function (name) {\r\n name = name.toLocaleLowerCase();\r\n\r\n for (var i = 0 ; i < countries_list.length ; i++) {\r\n if (countries_list[i].name.toLocaleLowerCase() == name)\r\n return countries_list[i].code;\r\n }\r\n return \"\";\r\n };\r\n\r\n this.getCountryCallingCodeByName = function (name) {\r\n name = (name != undefined) ? name.trim() : name;\r\n if (name == undefined || name == \"\")\r\n return \"\";\r\n name = name.toLocaleLowerCase();\r\n\r\n for (var i = 0 ; i < countries.length ; i++) {\r\n if (countries[i].name.toLocaleLowerCase() == name)\r\n return countries[i].callingCode;\r\n }\r\n return \"\";\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.utils').directive('onlyDigits', function () {\r\n return {\r\n require: 'ngModel',\r\n restrict: 'A',\r\n link: function (scope, element, attr, ctrl) {\r\n function inputValue(val) {\r\n if (val) {\r\n var digits = val.replace(/[^0-9]/g, '');\r\n\r\n if (digits !== val) {\r\n ctrl.$setViewValue(digits);\r\n ctrl.$render();\r\n }\r\n return parseInt(digits, 10);\r\n }\r\n return undefined;\r\n }\r\n ctrl.$parsers.push(inputValue);\r\n }\r\n };\r\n });\r\n})();","//TODO: Make it transclude and make it more generic later on\r\n(function () {\r\n angular.module('app.utils').directive('scrollBottomNotifier', ['$document', function ($document) {\r\n return {\r\n restrict: 'A',\r\n scope:{\r\n onScrollEndReached: '&',\r\n onScrollUp: '&',\r\n onScrollDown: '&',\r\n setResetCallback: '&'\r\n },\r\n link: function (scope, element, attrs) {\r\n var raw = element[0];\r\n var prevPos = 0;\r\n element.bind('scroll', function () {\r\n if ( raw.scrollTop > 0 && (raw.scrollTop + raw.offsetHeight) >= (raw.scrollHeight - 50)) { //at the bottom\r\n scope.onScrollEndReached();\r\n }\r\n if (prevPos != 0 && (prevPos - raw.scrollTop) < 0) { //e.g 100 - 80 = -20 moving up\r\n scope.onScrollUp();\r\n }\r\n else if ((prevPos - raw.scrollTop) > 0) {\r\n scope.onScrollDown();\r\n }\r\n prevPos = raw.scrollTop;\r\n });\r\n\r\n scope.reset = function(){\r\n prevPos = 0;\r\n }\r\n\r\n scope.setResetCallback({ callback: scope.reset });\r\n }\r\n }\r\n }]); \r\n})();","(function () {\r\n angular.module('app.utils').directive('charLimit', function () {\r\n return {\r\n restrict: \"A\",\r\n link: function (scope, elem, attrs) {\r\n var limit = parseInt(attrs.charLimit);\r\n elem.bind(\"keydown\", function (event) {\r\n if ((event.ctrlKey && (event.which == 65 || event.which == 88 || event.which == 90 || event.which == 67 || event.which == 82)) // ctrl + A + C + X + Z + R\r\n || (event.which == 46 || event.which == 8) //Backspace and del\r\n || (event.which >= 37 && event.which <= 40) //Arrow keys\r\n || event.which == 9\r\n ) {\r\n //Allow these keys\r\n } else {\r\n if (limit <= this.value.length) {\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n event.stopPropagation();\r\n \r\n this.value = this.value.substring(0, limit);\r\n\r\n return false;\r\n }\r\n }\r\n });\r\n angular.element(elem).on(\"paste\", function (event) {\r\n event.preventDefault();\r\n });\r\n }\r\n }\r\n });\r\n angular.module('app.utils').directive('focusIf', focusIf);\r\n\r\n focusIf.$inject = ['$timeout'];\r\n\r\n function focusIf($timeout) {\r\n function link($scope, $element, $attrs) {\r\n var dom = $element[0];\r\n if ($attrs.focusIf) {\r\n $scope.$watch($attrs.focusIf, focus);\r\n } else {\r\n focus(true);\r\n }\r\n function focus(condition) {\r\n if (condition) {\r\n $timeout(function () {\r\n dom.focus();\r\n }, $scope.$eval($attrs.focusDelay) || 0);\r\n }\r\n }\r\n }\r\n return {\r\n restrict: 'A',\r\n link: link\r\n };\r\n }\r\n\r\n angular.module('app.utils').directive('caret', function () {\r\n\r\n function setCaretPosition(elem, caretPos) {\r\n if (elem !== null) {\r\n if (elem.createTextRange) {\r\n var range = elem.createTextRange();\r\n range.move('character', caretPos);\r\n range.select();\r\n } else {\r\n if (elem.setSelectionRange) {\r\n elem.focus();\r\n elem.setSelectionRange(caretPos, caretPos);\r\n } else\r\n elem.focus();\r\n }\r\n }\r\n }\r\n\r\n return {\r\n scope: { caretpos: '=' },\r\n link: function (scope, element, attrs) {\r\n //var caret = Number(attrs.caret);\r\n scope.$watch('caretpos', function (newValue, oldValue) {\r\n //if (newValue && newValue != oldValue) {\r\n setCaretPosition(element[0], newValue);\r\n //}\r\n });\r\n }\r\n };\r\n });\r\n})();","(function () {\r\n angular.module('app.utils').directive('carousel', ['$interval', function ($interval) {\r\n \r\n return {\r\n scope:{},\r\n templateUrl: \"app/utils/carousel/template.html\",\r\n restrict: \"E\",\r\n replace: true,\r\n link: function (scope, elem, attrs) {\r\n //$('body').scrollTop(0);\r\n //$(\".downa\").show();\r\n //$(\".upa\").hide();\r\n var p = null;\r\n //try {\r\n if ($(\"#owl-demo\").owlCarousel != undefined) {\r\n $(\"#owl-demo\").owlCarousel({\r\n autoPlay: 3000,\r\n singleItem: true\r\n });\r\n } else {\r\n p = $interval(function () {\r\n if ($(\"#owl-demo\").owlCarousel == undefined) {\r\n $(\"#owl-demo\").owlCarousel({\r\n autoPlay: 3000,\r\n singleItem: true\r\n });\r\n }\r\n console.log(\"carousel timer\");\r\n }, 2000, 5);\r\n }\r\n //} catch (e) {\r\n // $timeout(function () {\r\n // $(\"#owl-demo\").owlCarousel({\r\n // autoPlay: 3000,\r\n // singleItem: true\r\n // });\r\n // }, 2000);\r\n // console.log(e);\r\n //}\r\n\r\n //$(\".downa a\").click(function () {\r\n // $(\".downa\").hide();\r\n // $(\".upa\").show();\r\n // $('html, body').animate({\r\n // scrollTop: 1000\r\n // }, 1000);\r\n //});\r\n //$(\".upa a\").click(function () {\r\n // $(\".upa\").hide();\r\n // $(\".downa\").show();\r\n // $('html, body').animate({\r\n // scrollTop: 1\r\n // }, 1000);\r\n //});\r\n }\r\n }\r\n }]);\r\n})();","(function () {\r\n angular.module('app.utils').directive('countryAutocomplete', function () {\r\n \r\n var controller = ['Countries', '$scope', function (Countries, $scope) {\r\n\r\n var vm = this;\r\n\r\n vm.querySearch = function (query) {\r\n var countries = Countries.getCountriesSortedByCallingCode();\r\n var results = query ? countries.filter(createFilterFor(query)) : countries;\r\n return results;\r\n }\r\n\r\n function createFilterFor(query) {\r\n var lowercaseQuery = angular.lowercase(query);\r\n\r\n return function filterFn(state) {\r\n var text = state.callingCode;\r\n var text2 = \"+\" + state.callingCode;\r\n var text3 = \"00\" + state.callingCode;\r\n return (text.indexOf(lowercaseQuery) === 0 || text2.indexOf(lowercaseQuery) === 0 || text3.indexOf(lowercaseQuery) === 0);\r\n };\r\n\r\n }\r\n }];\r\n\r\n\r\n return {\r\n scope:{\r\n callingCode: \"=\",\r\n isError: \"@\",\r\n isTouched: \"@\",\r\n onFieldChange: \"&\"\r\n },\r\n templateUrl: \"app/utils/countryAutocomplete/template.html\",\r\n restrict: \"E\",\r\n controller: controller,\r\n controllerAs: 'vm',\r\n transclude: true,\r\n //bindToController: true, //required in 1.3+ with controllerAs\r\n link: function (scope, elem, attrs) {\r\n \r\n }\r\n }\r\n });\r\n})();","(function () {\r\n angular.module('app.utils').directive('contract', [ 'SmartContractService', function (SmartContractService) {\r\n var controller = ['$scope', 'SmartContractService', 'MembersService', '$state', 'Utils', function ($scope, SmartContractService, MembersService, $state, Utils) {\r\n $scope.errorMsg = \"Some error occured while fetching information.\";\r\n $scope.vm.dataLoaded = false;\r\n $scope.vm.isError = false;\r\n $scope.groupName = \"\";\r\n $scope.vm.statusText = \"\";\r\n $scope.vm.statusColor = \"\"; //1: yellow 2: green 3: red 4: orange 5: grey\r\n $scope.vm.convertToKB = Utils.convertToKB;\r\n\r\n MembersService.getUserDetail($scope.vm.groupid).$promise.then(function (data) {\r\n $scope.groupName = data.Profile.FirstName;\r\n if ($scope.vm.mode == '1') {\r\n SmartContractService.getSmartContract($scope.vm.sharekey, $scope.vm.groupid).then(function (data) {\r\n $scope.vm.dataLoaded = true;\r\n $scope.vm.isError = false;\r\n $scope.vm.data = data;\r\n adjustStatusColorAndText(data);\r\n }, function (res) {\r\n $scope.vm.isError = true;\r\n $scope.vm.dataLoaded = true;\r\n if (res.data.IdenediExceptionType == \"INVALID_LINK_KEY\") {\r\n $state.go('register_expired');\r\n }\r\n })\r\n } else if ($scope.vm.mode == '2') {\r\n SmartContractService.getSmartContractThroughContractId($scope.vm.contractid, $scope.vm.groupid).then(function (data) {\r\n $scope.vm.dataLoaded = true;\r\n $scope.vm.isError = false;\r\n $scope.vm.data = data;\r\n adjustStatusColorAndText(data);\r\n }, function (res) {\r\n $scope.vm.isError = true;\r\n $scope.vm.dataLoaded = true;\r\n if (res.data.IdenediExceptionType == \"INVALID_LINK_KEY\") {\r\n $scope.errorMsg = \"Error: Invalid link key.\"\r\n }\r\n })\r\n }\r\n \r\n }, function () {\r\n $scope.vm.isError = true;\r\n $scope.vm.dataLoaded = true;\r\n });\r\n\r\n $scope.CUSTOM_FIELDS = SmartContractService.CUSTOM_FIELDS;\r\n\r\n $scope.getFormattedDate = function (date) {\r\n return moment(date, 'YYYYMMDD').format('MMM DD,YYYY');\r\n }\r\n $scope.hasNonEmptyValue = function (data) {\r\n if ((SmartContractService.CUSTOM_FIELDS.TEXT == data.Type || SmartContractService.CUSTOM_FIELDS.DATE == data.Type) && data.Value != '')\r\n return true;\r\n if ((SmartContractService.CUSTOM_FIELDS.SINGLE_SELECTION == data.Type || SmartContractService.CUSTOM_FIELDS.MULTI_SELECTION == data.Type) && data.Value.length > 0)\r\n return true;\r\n return false;\r\n }\r\n function adjustStatusColorAndText(data) {\r\n var daysFromStartDate = Math.abs(parseInt(data.DaysToStartDate));\r\n var daysFromEndDate = parseInt(data.DaysFromEndDate);\r\n \r\n $scope.vm.statusText = \"\";\r\n $scope.vm.statusColor = \"\";\r\n if ($scope.vm.datareceived != undefined)\r\n $scope.vm.datareceived({ data: data });\r\n\r\n if (data.CurrentStatus == 'Deleted') {\r\n $scope.vm.statusColor = 5;\r\n $scope.vm.statusText = \"Deleted\";\r\n return;\r\n }\r\n\r\n if (data.CurrentStatus == 'Rejected' || data.CurrentStatus == 'Terminated') {\r\n $scope.vm.statusColor = 3;\r\n $scope.vm.statusText = data.CurrentStatus;\r\n } else {\r\n if (daysFromStartDate >= 0 && daysFromEndDate <= 0) {\r\n if (data.CurrentStatus == 'Pending') {\r\n $scope.vm.statusColor = 1;\r\n $scope.vm.statusText = \"Pending\";\r\n } else if (data.CurrentStatus == 'Accepted') {\r\n $scope.vm.statusColor = 2;\r\n $scope.vm.statusText = \"Accepted\";\r\n }\r\n } else {\r\n if (daysFromStartDate < 0) {\r\n if (data.CurrentStatus == 'Pending') {\r\n $scope.vm.statusColor = 1;\r\n $scope.vm.statusText = \"Pending\";\r\n } else if (data.CurrentStatus == 'Accepted') {\r\n $scope.vm.statusColor = 4;\r\n $scope.vm.statusText = \"Accepted\";\r\n }\r\n } else if (daysFromEndDate > 0) {\r\n $scope.vm.statusColor = 5;\r\n $scope.vm.statusText = \"Expired\";\r\n }\r\n }\r\n }\r\n }\r\n }];\r\n\r\n return {\r\n scope: {\r\n small: \"@\",\r\n sharekey: \"@\",\r\n groupid: \"@\",\r\n contractid: \"@\",\r\n datareceived: \"&\",\r\n mode: \"@\"\r\n },\r\n templateUrl: \"app/utils/contract/template.html\",\r\n restrict: \"E\",\r\n controller: controller,\r\n controllerAs: 'vm',\r\n bindToController: true, //required in 1.3+ with controllerAs\r\n link: function ($scope, elem, attrs) {\r\n \r\n }\r\n }\r\n }]);\r\n})();","(function () {\r\n angular.module('app.group').factory('GroupsService', GroupsService);\r\n\r\n GroupsService.$inject = ['$rootScope', '$resource', 'MembersService', 'Utils', 'Countries', 'CONFIG'];\r\n function GroupsService($rootScope, $resource, MembersService, Utils, Countries, CONFIG) {\r\n var _groupCreationData = null;\r\n var _groupsMembers = {};\r\n var _sharedData = {};\r\n //http://idenediapi-prod-stag.azurewebsites.net/Help/ResourceModel?modelName=GroupMembershipOption\r\n var GROUP_MEMBERSHIP_OPTION = {\r\n ONLY_ADMIN_CAN_ADD: \"OnlyAdminCanAdd\",\r\n ANYONE_CAN_JOIN: \"AnyoneCanJoin\",\r\n ADMIN_APPROVAL_REQUIRED: \"AdminApprovalRequired\",\r\n JOIN_BY_EMAIL_ADDRESS_DOMAIN: \"JoinByEmailAddressDomain\"\r\n };\r\n var GROUP_MEMBERSHIP_STATUS = {\r\n NONE: 'None',\r\n MEMBER: 'Member',\r\n ADMIN: 'Admin',\r\n BLOCKED: 'Blocked',\r\n REQUEST_PENDING: 'RequestPending'\r\n };\r\n var groupService = {\r\n GROUP_MEMBERSHIP_STATUS: GROUP_MEMBERSHIP_STATUS,\r\n GROUP_MEMBERSHIP_OPTION: GROUP_MEMBERSHIP_OPTION,\r\n _sharedData: _sharedData,\r\n _groupsMembers:_groupsMembers,\r\n _attachEvents: _attachEvents,\r\n _groupCreationData: _groupCreationData,\r\n getGroupCreationData: getGroupCreationData,\r\n setGroupCreationData: setGroupCreationData,\r\n createGroup: createGroup,\r\n joinGroup: joinGroup,\r\n joinGroupThroughInvitationKey: joinGroupThroughInvitationKey,\r\n leaveGroup: leaveGroup,\r\n getGroupRequests: getGroupRequests,\r\n changeGroupTitle: changeGroupTitle,\r\n getGroupMembers: getGroupMembers,\r\n getGroupMembersLocal: getGroupMembersLocal,\r\n getGroupMemberLocal: getGroupMemberLocal,\r\n removeGroupMemberLocal: removeGroupMemberLocal,\r\n addGroupMemberLocal: addGroupMemberLocal,\r\n getSharedData: getSharedData,\r\n setSharedData: setSharedData,\r\n removeMembers: removeMembers,\r\n changeMemberTitle: changeMemberTitle,\r\n addMembersInGroup: addMembersInGroup,\r\n setNewOrderForContacts: setNewOrderForContacts,\r\n deleteRecords: deleteRecords,\r\n updateRecord: updateRecord,\r\n getGroupInvitationDetails: getGroupInvitationDetails,\r\n getGroupInviteMembers: getGroupInviteMembers,\r\n getGroupType: getGroupType,\r\n getGroupAppData: getGroupAppData\r\n };\r\n\r\n groupService._attachEvents();\r\n return groupService;\r\n\r\n function getGroupAppData(group){\r\n var data = {\r\n AppName: 'IDENEDI',\r\n PlayStoreLink: 'https://play.google.com/store/apps/details?id=com.exceedgulf.idenedi.android',\r\n AppleAppStoreLink:'https://itunes.apple.com/us/app/idenedi/id995899662?ls=1&mt=8'\r\n }\r\n\r\n if(group && group.GroupSettings && group.GroupSettings.GroupApp){\r\n var groupApp = group.GroupSettings.GroupApp\r\n if(groupApp.AppName){\r\n data.AppName = groupApp.AppName\r\n }\r\n if(groupApp.PlayStoreLink){\r\n data.PlayStoreLink = groupApp.PlayStoreLink\r\n }\r\n if(groupApp.AppleAppStoreLink){\r\n data.AppleAppStoreLink = groupApp.AppleAppStoreLink\r\n }\r\n }\r\n return data\r\n }\r\n //http://idenediapi-prod-stag.azurewebsites.net/Help/Api/PUT-api-group-groupIdenedi-visibility_groupVisibility_memberListVisibility_1\r\n function getGroupType( group ) {\r\n if (group.GroupSettings.GroupVisibility == \"Hidden\" && group.GroupSettings.MemberListVisibility == \"MembersOnly\") {\r\n return \"Invisible\";\r\n } else if (group.GroupSettings.GroupVisibility == \"Searchable\" && group.GroupSettings.MemberListVisibility == \"MembersOnly\") {\r\n return \"Private\";\r\n } else if (group.GroupSettings.GroupVisibility == \"Searchable\" && group.GroupSettings.MemberListVisibility == \"Public\") {\r\n return \"Public\";\r\n } else if (group.GroupSettings.GroupVisibility == \"Searchable\" && group.GroupSettings.MemberListVisibility == \"AdminOnly\") {\r\n return \"Incognito\";\r\n }\r\n return ''\r\n }\r\n function getGroupInviteMembers(grpId, key) {\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + grpId + '/member?inviteKey=' + key).query();\r\n }\r\n\r\n function getGroupInvitationDetails(grpId, key) {\r\n var that = this;\r\n \r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + grpId + '/invite/' + key).get(success, error);\r\n\r\n function success(data) {\r\n delete data.$promise;\r\n delete data.$resolved;\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function updateRecord(grpId, id, label, value, partOfCards) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n\r\n var serverObj = {};\r\n serverObj.Label = label;\r\n serverObj.DynamicValue = value;\r\n serverObj.PartOfCards = partOfCards;\r\n\r\n return $resource(CONFIG.API.API_HOST + '/api/group/:grpId/record/:id', { grpId: grpId, id: id }, { 'update': { method: 'PUT' } }).update(serverObj, success, error);\r\n\r\n function success(data) {\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function addMembersInGroup(group, members) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n var idenedis = [];\r\n for (var i in members) {\r\n idenedis.push(members[i].Idenedi);\r\n }\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + group.Idenedi + '/member').save(idenedis, success, error);\r\n\r\n function success(data) {\r\n //we are not explictly adding members here because there are some search members if added.\r\n //their model is different from normal online membder model. So we are removing all members from local \r\n //so on load the fresh members of group are fetched\r\n //for (var i in members) {\r\n // that.addGroupMemberLocal(group.Idenedi, members[i]);\r\n //}\r\n //resetting so that groups members will be fetech on group members screen.\r\n _groupsMembers[group.Idenedi] = [];\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function changeMemberTitle(grpId, idenedi, title) {\r\n var that = this\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/group/:id/member/:idenedi/title', { id: grpId, idenedi: idenedi }, { 'update': { method: 'PUT' } }).update(title, success, error);\r\n\r\n function success(data) {\r\n var member = that.getGroupMemberLocal(grpId, idenedi);\r\n member.TitleInGroup = title;\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function removeMembers(grpId, idenedis) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + grpId + '/member').delete({ idenedi: idenedis }, success, error);\r\n\r\n function success(data) {\r\n for(var i in idenedis){\r\n that.removeGroupMemberLocal(grpId, idenedis[i]);\r\n }\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function setSharedData(val) {\r\n this._sharedData = val;\r\n }\r\n\r\n function getSharedData() {\r\n return this._sharedData;\r\n }\r\n\r\n function addGroupMemberLocal(grpId, member) {\r\n if (_groupsMembers[grpId] != undefined) {\r\n var groupMembers = _groupsMembers[grpId];\r\n groupMembers.push(member);\r\n }\r\n }\r\n\r\n function removeGroupMemberLocal(grpId, idenedi) {\r\n if (_groupsMembers[grpId] != undefined) {\r\n var groupMembers = _groupsMembers[grpId];\r\n for (var i in groupMembers) {\r\n if (groupMembers[i].Idenedi == idenedi)\r\n groupMembers.splice(i,1);\r\n }\r\n }\r\n }\r\n\r\n function getGroupMemberLocal(grpId, idenedi) {\r\n if (_groupsMembers[grpId] != undefined) {\r\n var groupMembers = _groupsMembers[grpId];\r\n for (var i in groupMembers) {\r\n if (groupMembers[i].Idenedi == idenedi)\r\n return groupMembers[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function getGroupMembersLocal(id) {\r\n if (_groupsMembers[id] != undefined)\r\n return _groupsMembers[id];\r\n return [];\r\n }\r\n\r\n function getGroupMembers(id) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + id + '/member').query(success, error);\r\n\r\n function success(data) {\r\n delete data.$promise;\r\n delete data.$resolved;\r\n\r\n for (var i in data) {\r\n data[i] = MembersService.modifyMemberObj(data[i]);\r\n if (data[i].TitleInGroup == null) {\r\n if (data[i].GroupMembershipStatus == \"Member\")\r\n data[i].TitleInGroup = \"Member\";\r\n else {\r\n data[i].TitleInGroup = \"Admin\";\r\n }\r\n }\r\n }\r\n\r\n that._groupsMembers[id] = data;\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function changeGroupTitle(id, title) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + id + '/name?groupName=' + title).save(success, error);\r\n\r\n function success(data) {\r\n var group = MembersService.getMemberFromLocal(id);\r\n if(group != null) //If that group is a member\r\n group.fullName = title;\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function getGroupRequests(idenedi) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + idenedi + '/request').query(success, error);\r\n\r\n function success(data) {\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function joinGroup(grpId, key, email) {\r\n var that = this;\r\n var url = \"\";\r\n url = CONFIG.API.API_HOST + '/api/group/' + grpId + '/membership';\r\n\r\n if (key != undefined)\r\n url += \"?inviteLinkKey=\" + key;\r\n if (email != undefined && email.length > 0)\r\n url += \"&emailAddress=\" + email;\r\n\r\n Utils.addTokenInHttpHeader();\r\n return $resource(url).save({}, success, error);\r\n\r\n function success(data) {\r\n return data;\r\n }\r\n\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function joinGroupThroughInvitationKey(grpId, key) {\r\n var that = this;\r\n //Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + grpId + '/membership?inviteLinkKey=' + key).save({}, success, error);\r\n\r\n function success(data) {\r\n return data;\r\n }\r\n\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n //function joinGroup(group) {\r\n // var that = this;\r\n // Utils.addTokenInHttpHeader();\r\n // return $resource(CONFIG.API.API_HOST + '/api/group/' + group.idenedi + '/membership').save({}, success, error);\r\n\r\n // function success(data) {\r\n // delete data.$promise;\r\n // delete data.$resolved;\r\n \r\n // if (data[0] == \"P\") { //Pending\r\n // group.groupMembershipStatus = \"RequestPending\";\r\n // } else {\r\n // group.groupMembershipStatus = \"Member\";\r\n // }\r\n\r\n // group.isMember = true;\r\n // var localGroup = MembersService.getMemberFromLocal(group.idenedi);\r\n // if (localGroup) {\r\n // localGroup.GroupMembershipStatus = group.groupMembershipStatus;\r\n // } else { //Add this in memberslist\r\n // MembersService.getUserDetail(group.idenedi).$promise.then(function (data) {\r\n // MembersService.addMemberInLocalList(data);\r\n // }, function () {});\r\n // }\r\n // return data;\r\n // }\r\n\r\n // function error(response) {\r\n // return response;\r\n // }\r\n //}\r\n\r\n function leaveGroup(group) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + group.idenedi + '/membership').delete({}, success, error);\r\n\r\n function success(data) {\r\n group.groupMembershipStatus = \"None\";\r\n var localGroup = MembersService.getMemberFromLocal(group.idenedi);\r\n if (localGroup) {\r\n localGroup.GroupMembershipStatus = group.groupMembershipStatus;\r\n }\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function createGroup(name, members) {\r\n var that = this;\r\n var serverObj = {};\r\n serverObj.GroupName = name;\r\n serverObj.MemberIdenedis = members;\r\n\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/Group/').save(serverObj, success, error);\r\n\r\n function success(data) {\r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function getGroupCreationData() {\r\n return this._groupCreationData;\r\n }\r\n\r\n function setGroupCreationData(title, members) {\r\n if(this._groupCreationData == null)\r\n this._groupCreationData = {};\r\n this._groupCreationData.GroupName = title;\r\n this._groupCreationData.MemberIdenedis = members;\r\n }\r\n\r\n function setNewOrderForContacts(group, newOrderList) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + group.Idenedi + '/record/order').save(newOrderList, success, error);\r\n function success(data) {\r\n var _data = data;\r\n return _data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function deleteRecords(group, records) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/group/' + group.Idenedi + '/record').delete({ instanceId: records }, success, error);\r\n\r\n function success(data) {\r\n for (var i in group.Records) {\r\n for (var j in records) {\r\n if (group.Records[i].InstanceId == records[j]) {\r\n group.Records.splice(i, 1);\r\n }\r\n }\r\n } \r\n return data;\r\n }\r\n function error(response) {\r\n return response;\r\n }\r\n }\r\n\r\n function _attachEvents() {\r\n var that = this;\r\n $rootScope.$on('SignInService->Logout', function () {\r\n that._groupCreationData = null;\r\n that._groupsMembers = {};\r\n that._groupCreationData = {};\r\n });\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.member').factory('MembersService', MembersService);\r\n\r\n MembersService.$inject = ['$resource', '$rootScope','Utils', 'Countries', 'CONFIG'];\r\n function MembersService($resource, $rootScope, Utils, Countries, CONFIG) {\r\n var members = null;\r\n var member = null;\r\n var _viewData = {\r\n scrollPos: 0,\r\n gridView: false,\r\n searchTerm: '',\r\n expandedMember: ''\r\n };\r\n\r\n var memberService = {\r\n _attachEvents: _attachEvents,\r\n getUserMembersLocal: getUserMembersLocal,\r\n getUserMembers: getUserMembers,\r\n getUserDetail: getUserDetail,\r\n requestMemberInformation: requestMemberInformation,\r\n isMemberAvailable: isMemberAvailable,\r\n getMemberFromLocal: getMemberFromLocal,\r\n updateMemberCards: updateMemberCards,\r\n getSharedProfileLink: getSharedProfileLink,\r\n getMemberForJoinGroup: getMemberForJoinGroup,\r\n setMemberForJoinGroup: setMemberForJoinGroup,\r\n addMember: addMember,\r\n addMemberInLocalList: addMemberInLocalList,\r\n removeMember: removeMember,\r\n _viewData: _viewData,\r\n resetViewData: resetViewData,\r\n setViewDataScrollPos: setViewDataScrollPos,\r\n setViewDataSearchTerm: setViewDataSearchTerm,\r\n setViewDataExpandedMember: setViewDataExpandedMember,\r\n setViewDataGridView: setViewDataGridView,\r\n getViewDataGridView: getViewDataGridView,\r\n getViewDataScrollPos: getViewDataScrollPos,\r\n getViewDataSearchTerm: getViewDataSearchTerm,\r\n getViewDataExpandedMember: getViewDataExpandedMember,\r\n _removeMemberFromList: _removeMemberFromList,\r\n modifyMemberObj: modifyMemberObj,\r\n _addOrUpdateMemberInList: _addOrUpdateMemberInList\r\n };\r\n\r\n memberService._attachEvents();\r\n\r\n return memberService;\r\n\r\n function resetViewData() {\r\n this._viewData = {\r\n scrollPos: 0,\r\n gridView: false,\r\n searchTerm: '',\r\n expandedMember: ''\r\n };\r\n }\r\n\r\n function setViewDataScrollPos(val) {\r\n if (!this._viewData)\r\n this._viewData = {};\r\n this._viewData.scrollPos = val;\r\n }\r\n\r\n function setViewDataSearchTerm(val) {\r\n if (!this._viewData)\r\n this._viewData = {};\r\n this._viewData.searchTerm = val;\r\n }\r\n\r\n function setViewDataExpandedMember(val) {\r\n if (!this._viewData)\r\n this._viewData = {};\r\n this._viewData.expandedMember = val;\r\n }\r\n\r\n function setViewDataGridView(val) {\r\n if (!this._viewData)\r\n this._viewData = {};\r\n this._viewData.gridView = val;\r\n }\r\n\r\n function getViewDataGridView() {\r\n return this._viewData.gridView;\r\n }\r\n\r\n function getViewDataScrollPos() {\r\n return this._viewData.scrollPos;\r\n }\r\n\r\n function getViewDataSearchTerm() {\r\n return this._viewData.searchTerm;\r\n }\r\n\r\n function getViewDataExpandedMember() {\r\n return this._viewData.expandedMember;\r\n }\r\n\r\n function getUserMembersLocal() {\r\n return this.members;\r\n };\r\n\r\n //this will update the member object given by controller after the operation is successfull\r\n //Also it will then add the member in local members list\r\n function updateMemberCards(member, cards) {\r\n var that = this;\r\n return $resource(CONFIG.API.API_HOST + '/api/Member/' + member.Idenedi, {}, { 'update': { method: 'PUT' } }).update(cards, updateSuccess, updateError);\r\n\r\n function updateSuccess(data) {\r\n member.SharedCards = cards;\r\n that._addOrUpdateMemberInList(member);\r\n //TODO: add cards module. It was remove becuase its not used right now\r\n //CardsService.addMemberToCardsLocal(member.Idenedi, cards);\r\n return data;\r\n }\r\n function updateError(res) {\r\n return res;\r\n }\r\n }\r\n\r\n function addMember(member) {\r\n var that = this;\r\n return $resource(CONFIG.API.API_HOST + '/api/Member', {}, { 'update': { method: 'PUT' } }).update([member.Idenedi], addSuccess, addError);\r\n\r\n function addSuccess(data) {\r\n that._addOrUpdateMemberInList(member);\r\n return data;\r\n }\r\n function addError(res) {\r\n return res;\r\n }\r\n };\r\n\r\n function addMemberInLocalList(member) {\r\n this._addOrUpdateMemberInList(member);\r\n };\r\n\r\n function _removeMemberFromList(idenedi) {\r\n for (var i in this.members) {\r\n if (this.members[i].Idenedi == idenedi) {\r\n this.members.splice(i, 1);\r\n //TODO: add cards module. It was remove becuase its not used right now\r\n //CardsService.removeMemberFromCardsLocal(idenedi);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n function setMemberForJoinGroup(m) {\r\n this.member = m;\r\n }\r\n\r\n function getMemberForJoinGroup() {\r\n return this.member;\r\n }\r\n\r\n function removeMember(idenedi) {\r\n var that = this;\r\n return $resource(CONFIG.API.API_HOST + '/api/member/:id').delete({ id: idenedi }, removeSuccess, removeError);\r\n\r\n function removeSuccess(data) {\r\n that._removeMemberFromList(idenedi);\r\n return data;\r\n }\r\n function removeError(res) {\r\n return res;\r\n }\r\n };\r\n\r\n function getMemberFromLocal(idenedi) {\r\n for (var i in this.members) {\r\n if (this.members[i].Idenedi == idenedi)\r\n return this.members[i];\r\n }\r\n return null;\r\n };\r\n\r\n function isMemberAvailable(idenedi) {\r\n for (var i in this.members) {\r\n if (this.members[i].Idenedi == idenedi)\r\n return true;\r\n }\r\n return false;\r\n }\r\n function requestMemberInformation(member, idenedi) {\r\n return $resource(CONFIG.API.API_HOST + '/api/member/' + idenedi + '/request_contacts').save(infoSuccess, infoError);\r\n function infoSuccess(data) {\r\n member.LastContactInfoRequestedOn = new Date();\r\n return data;\r\n };\r\n function infoError(res) {\r\n return res;\r\n };\r\n };\r\n\r\n function getUserMembers() {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/Member').query(membersSuccess, membersError);\r\n\r\n function membersSuccess(data) {\r\n that.members = data;\r\n for (var index in that.members) {\r\n if (index != \"$promise\" && index != \"$resolved\") {\r\n var member = that.members[index];\r\n member = that.modifyMemberObj(member);\r\n }\r\n }\r\n return that.members;\r\n };\r\n\r\n function membersError(res) {\r\n return res;\r\n };\r\n };\r\n\r\n function getUserDetail(idenedi) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/user/' + idenedi).get(memberSuccess, memberError);\r\n\r\n function memberSuccess(data) {\r\n var member = data;\r\n member = that.modifyMemberObj(member);\r\n return member;\r\n };\r\n\r\n function memberError(res) {\r\n return res;\r\n };\r\n };\r\n\r\n function _addOrUpdateMemberInList(member) {\r\n if(this.members == null){\r\n this.members = [member];\r\n } else {\r\n var updated = false;\r\n for(var i in this.members){\r\n if (this.members[i].Idenedi == member.Idenedi) {\r\n member.IsMemberHidden = false;\r\n this.members[i] = member; //TODO: we have to update the member by keeping it reference same\r\n updated = true; \r\n break;\r\n }\r\n }\r\n if (!updated) {\r\n member.IsMemberHidden = false;\r\n this.members.push(member);\r\n }\r\n }\r\n };\r\n\r\n function modifyMemberObj(member) {\r\n member.presenceClass = \"unavailable\";\r\n member.formattedIdenedi = Utils.formatIdenediId(member.Idenedi);\r\n if (member.Profile != undefined)\r\n member.fullName = member.Profile.FirstName + \" \" + member.Profile.LastName;\r\n if (member.IdenediType == \"Individual\") {\r\n member.Profile.Country = Countries.getCountryNameByCode(member.Profile.CountryISOCode);\r\n }\r\n member.isImageAvailable = true;\r\n if (member.Profile.ProfileImageUrl == null)\r\n member.isImageAvailable = false;\r\n if (member.IdenediType == \"Individual\") \r\n member.Profile.ProfileImageUrl = Utils.getMemberProfileImageSmallUrl(member.Profile.ProfileImageUrl);\r\n if (member.IdenediType == \"Group\") {\r\n member.groupLargeProfileImageUrl = Utils.getGroupImageLargeUrl(member.Profile.ProfileImageUrl);\r\n member.Profile.ProfileImageUrl = Utils.getGroupImageSmallUrl(member.Profile.ProfileImageUrl);\r\n }\r\n member.profileImageUrl = member.Profile.ProfileImageUrl;\r\n member.idenedi = member.Idenedi;\r\n return member;\r\n };\r\n\r\n function getSharedProfileLink(idenedi){\r\n return CONFIG.API.WEB_URL + \"/#/p/\" + idenedi;\r\n }\r\n function _attachEvents() {\r\n var that = this;\r\n $rootScope.$on('SignInService->Logout', function () {\r\n that.members = null;\r\n that.member = null;\r\n });\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.profile').factory('ProfileService', ProfileService);\r\n\r\n ProfileService.$inject = ['$resource', '$rootScope','Utils', 'Countries', 'CONFIG'];\r\n function ProfileService($resource, $rootScope, Utils, Countries, CONFIG) {\r\n var profileData = null;\r\n var profileDataLoaded = false;\r\n var profileService = {\r\n _attachEvents: _attachEvents,\r\n profileDataLoaded: profileDataLoaded,\r\n profileData: profileData,\r\n getUserBasicProfile: getUserBasicProfile,\r\n getUserBasicProfileLocal: getUserBasicProfileLocal,\r\n saveAccountInfo: saveAccountInfo,\r\n changeCountryOfUser: changeCountryOfUser\r\n };\r\n\r\n profileService._attachEvents();\r\n return profileService;\r\n\r\n function getUserBasicProfileLocal() {\r\n return this.profileData;\r\n };\r\n\r\n function getUserBasicProfile() {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/User').get(userProfileSuccess, userProfileError);\r\n function userProfileSuccess(data) {\r\n that.profileDataLoaded = true;\r\n var _data = data;\r\n _data.idenedi = data.UserIdenedi;\r\n _data.formattedId = Utils.formatIdenediId(data.UserIdenedi);\r\n _data.profileImageSmallUrl = Utils.getProfileImageSmallUrl(data.ProfileImageUrl);\r\n _data.isProfileImageAvailable = (data.ProfileImageUrl == null) ? false : true;\r\n _data.countryName = Countries.getCountryNameByCode(data.CountryISOCode);\r\n _data.username = data.FirstName + \" \" + data.LastName;\r\n _data.CountryISOCode = data.CountryISOCode;\r\n that.profileData = _data;\r\n return _data;\r\n }\r\n function userProfileError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function saveAccountInfo(firstName, lastName, code) {\r\n var data = { FirstName: firstName, LastName: lastName, CountryIso: code };\r\n\r\n return $resource(CONFIG.API.PROVIDER_HOST + '/api/account/info').save(data, $.proxy(saveAccountInfoSuccess, this), saveAccountInfoError);\r\n };\r\n\r\n function saveAccountInfoSuccess(data) {\r\n this.profileData.FirstName = data.FirstName;\r\n this.profileData.LastName = data.LastName;\r\n this.profileData.CountryISOCode = data.CountryIso;\r\n };\r\n\r\n function saveAccountInfoError(res) {\r\n\r\n };\r\n\r\n function changeCountryOfUser(countryCode) {\r\n var that = this;\r\n Utils.addTokenInHttpHeader();\r\n return $resource(CONFIG.API.API_HOST + '/api/user/country?countryIsoCode=:id', { id: countryCode }, { 'update': { method: 'PUT' } }).update({}, countryUpdatedSuccess, countryUpdatedError);\r\n\r\n function countryUpdatedSuccess(data) {\r\n that.profileData.CountryISOCode = countryCode;\r\n var _data = data;\r\n return _data;\r\n }\r\n function countryUpdatedError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function _attachEvents() {\r\n var that = this;\r\n $rootScope.$on('SignInService->Logout', function () {\r\n that.profileDataLoaded = false;\r\n that.profileData = null;\r\n });\r\n };\r\n };\r\n})();","//This is a controller for both public profile and shared card\r\n(function () {\r\n angular.module('app.sharedcard').controller('SaveCardController', SaveCardController);\r\n\r\n SaveCardController.$inject = [\r\n '$rootScope',\r\n '$scope',\r\n '$location',\r\n '$state',\r\n '$stateParams',\r\n '$routeParams',\r\n '$mdDialog',\r\n 'SharedCard',\r\n 'ProfileService',\r\n 'Utils',\r\n 'Countries',\r\n 'LocalstoreManager',\r\n 'StateManager',\r\n 'CONFIG'\r\n ];\r\n\r\n function SaveCardController(\r\n $rootScope,\r\n $scope,\r\n $location,\r\n $state,\r\n $stateParams,\r\n $routeParams,\r\n $mdDialog,\r\n SharedCard,\r\n ProfileService,\r\n Utils,\r\n Countries,\r\n LocalstoreManager,\r\n StateManager,\r\n CONFIG) {\r\n\r\n $rootScope.title = $state.current.title;\r\n\r\n var vm = this;\r\n var id = $stateParams.id;\r\n var isSharedCard = ( $state.current.name == 'savecard') ? true : false; //else public card\r\n var isSharedCardFetch = false;\r\n var sharedCardData = null;\r\n var presenceInfo = null;\r\n $scope.isLoggedInUserSame = true;\r\n $scope.title = \"Save Contact\";\r\n $scope.sharedCardData = null;\r\n $scope.isSharedCard = isSharedCard;\r\n $scope.host = CONFIG.API.API_HOST + '/api/user/';\r\n $scope.status = \"\";\r\n $scope.statusClass = \"\";\r\n\r\n vm.dataLoaded = false;\r\n vm.isError = false;\r\n\r\n vm.init = function () {\r\n var sharedCard = SharedCard.getSharedCard(id, isSharedCard, false/*LocalstoreManager.isUserLoggedIn()*/);\r\n sharedCard.$promise.then(sharedCardSuccess, sharedCardError);\r\n };\r\n\r\n //*************************************\r\n // Shared Card Handlers\r\n //*************************************\r\n var sharedCardSuccess = function (data) {\r\n isSharedCardFetch = true;\r\n sharedCardData = data;\r\n SharedCard.fetchPresence(sharedCardData.Idenedi).then(presenceSuccess, presenceError);\r\n };\r\n\r\n var sharedCardError = function (response) {\r\n isSharedCardFetch = false;\r\n vm.isError = true;\r\n vm.dataLoaded = true;\r\n };\r\n\r\n function presenceSuccess(data) {\r\n $scope.statusClass = getStatusClass(data.Status);\r\n $scope.status = data.Status;\r\n presenceInfo = data;\r\n sharedCardData.Records = SharedCard.createWhatsAppAndVegaLinks(sharedCardData.Records);\r\n if (isSharedCard) {\r\n markAllPrivate();\r\n //var expand = true; //Just first group should be expanded\r\n //for (var i in sharedCardData.UserTitles) {\r\n // sharedCardData.UserTitles[i].fullRecords = [];\r\n // sharedCardData.UserTitles[i].expanded = expand;\r\n // expand = false;\r\n // for (var j in sharedCardData.UserTitles[i].RecordInstanceIds) {\r\n // var record = getRecordData(sharedCardData.UserTitles[i].RecordInstanceIds[j]);\r\n // if (sharedCardData.UserTitles[i].GroupIdenedi == \"GAA0000000000\") //To maintain order\r\n // sharedCardData.UserTitles[i].fullRecords.unshift(record);\r\n // else\r\n // sharedCardData.UserTitles[i].fullRecords.push(record);\r\n // }\r\n //}\r\n\r\n for (var i in sharedCardData.Records) {\r\n var record = sharedCardData.Records[i]\r\n for (var j in sharedCardData.UserTitles) {\r\n var userTitle = sharedCardData.UserTitles[j];\r\n if (j == 0) {\r\n userTitle.expanded = true;\r\n } else {\r\n userTitle.expanded = false;\r\n }\r\n if (userTitle.fullRecords == undefined) {\r\n userTitle.fullRecords = [];\r\n }\r\n for (var k in userTitle.RecordInstanceIds) {\r\n if (userTitle.RecordInstanceIds[k] == record.InstanceId) {\r\n record.isPrivate = false;\r\n userTitle.fullRecords.push(record)\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n displayData();\r\n }\r\n\r\n function presenceError(data) {\r\n vm.isError = true;\r\n vm.dataLoaded = true;\r\n }\r\n\r\n function markAllPrivate() {\r\n for (var i in sharedCardData.Records) {\r\n sharedCardData.Records[i].isPrivate = true;\r\n }\r\n }\r\n\r\n function getStatusClass(status) {\r\n if (status == SharedCard.PRESENCE_TYPES.Unknown) {\r\n return \"Unknown\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.Available) {\r\n return \"Available\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.Busy) {\r\n return \"Busy\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.EnjoyingLife) {\r\n return \"EnjoyingLife\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.AtWork) {\r\n return \"AtWork\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.DoNotDisturb) {\r\n return \"DoNotDisturb\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.PreferredOnly) {\r\n return \"PreferredOnly\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.Traveling) {\r\n return \"Traveling\"\r\n } else {\r\n return \"Unknown\"\r\n }\r\n }\r\n\r\n function getRecordData(id) {\r\n for (var i in sharedCardData.Records) {\r\n if (sharedCardData.Records[i].InstanceId == id) {\r\n sharedCardData.Records[i].isPrivate = false;\r\n return sharedCardData.Records[i];\r\n }\r\n }\r\n }\r\n function displayData() {\r\n $scope.labelText = \"Sign In or Register to always access \" + sharedCardData.Profile.FirstName + \" \" + sharedCardData.Profile.LastName + \"'s updated contact details\";\r\n $scope.sharedCardData = sharedCardData;\r\n $scope.formattedId = Utils.formatIdenediId(sharedCardData.Idenedi);\r\n $scope.country = Countries.getCountryNameByCode(sharedCardData.Profile.CountryISOCode);\r\n vm.isError = false;\r\n vm.dataLoaded = true;\r\n //var canDisplayData = false;\r\n //if (isSharedCardFetch) {\r\n // if (LocalstoreManager.isUserLoggedIn()) {\r\n // if (isProfileFetch)\r\n // canDisplayData = true;\r\n // } else {\r\n // canDisplayData = true;\r\n // }\r\n //}\r\n\r\n //if (canDisplayData) {\r\n // //If the logged in user is not same as shared card or profile user\r\n // var isLoggedInUserSame = false;\r\n\r\n // if (profileData && (sharedCardData.Idenedi == profileData.UserIdenedi)) {\r\n // isLoggedInUserSame = true;\r\n // }\r\n\r\n // if (LocalstoreManager.isUserLoggedIn() && !isLoggedInUserSame) {\r\n // StateManager.skip();\r\n // //We are restting because we want the user to go back from member to members list which is handled in member.controller\r\n // StateManager.resetStates();\r\n // $state.go('idenedi.member', { id: sharedCardData.Idenedi });\r\n // return;\r\n // }\r\n\r\n // //Assigning to scope\r\n // vm.dataLoaded = true;\r\n // $scope.sharedCard = sharedCardData;\r\n // $scope.vcardUrl = SharedCard.downloadVcard(sharedCardData);\r\n // $scope.timestamp = SharedCard.getLastupdatedString(sharedCardData);\r\n // $scope.isLoggedInUserSame = isLoggedInUserSame;\r\n // $scope.showDownloadButton = !isLoggedInUserSame;\r\n\r\n // //For beta release\r\n // var isAvailable = SharedCard.isCountryImageAvaiable(sharedCardData.Profile.CountryISOCode);\r\n\r\n // if (isAvailable) {\r\n // //document.getElementsByClassName('.shared-card-body')[0].className = '';\r\n // angular.element(document.getElementsByClassName('basic-info')[0]).addClass('country-' + sharedCardData.Profile.CountryISOCode);\r\n // } else {\r\n // //document.getElementsByTagName('html')[0].className = '';\r\n // angular.element(document.getElementsByClassName('basic-info')[0]).addClass('country-default');\r\n // }\r\n\r\n // $scope.isUserLoggedIn = LocalstoreManager.isUserLoggedIn();\r\n\r\n // //If both are not same user\r\n // if ($scope.isUserLoggedIn && !isSharedCard && !isLoggedInUserSame) {\r\n // SharedCard.saveMember(id);\r\n // }\r\n //}\r\n };\r\n\r\n vm.init();\r\n\r\n $scope.signInBtnClick = function () {\r\n if(isSharedCard)\r\n $state.go('login', {'cid': id, 'pid': null});\r\n else\r\n $state.go('login', { 'cid': null, 'pid': id });\r\n }\r\n $scope.regBtnClick = function () {\r\n if(isSharedCard)\r\n $state.go('register.basicinfo', { 'cid': id, 'pid': null });\r\n else\r\n $state.go('register.basicinfo', { 'cid': null, 'pid': id });\r\n }\r\n\r\n //$scope.downloadVcard = function () {\r\n // if (!vm.isError && vm.dataLoaded)\r\n // SharedCard.downloadVcard($scope.sharedCard);\r\n //}\r\n function appendHttpIfRequired(href) {\r\n if (href) {\r\n var m = href.match(/http:|https:/i)\r\n if (m == null && href.indexOf('tel:') == -1 && href.indexOf('sms:') == -1 && href.indexOf('mailto:') == -1)\r\n href = \"http://\" + href;\r\n }\r\n return href;\r\n }\r\n $scope.onContactClick = function (event, id, href, record, newWindow) {\r\n href = appendHttpIfRequired(href);\r\n if ($scope.status == SharedCard.PRESENCE_TYPES.Busy) {\r\n event.preventDefault();\r\n $mdDialog.show({\r\n locals: {\r\n title: \"Busy\",\r\n message: \"Member prefers not to be contacted\",\r\n customMessage: presenceInfo.Message,\r\n hideCloseBtn: false,\r\n actionBtnText: \"Contact\",\r\n href: href,\r\n newWindow: newWindow,\r\n record: record,\r\n status: $scope.status,\r\n imageUrl: sharedCardData.Profile.ProfileImageUrl\r\n },\r\n controller: 'StatusDialogController',\r\n clickOutsideToClose: true,\r\n templateUrl: 'app/sharedCard/statusdialog.html'\r\n })\r\n .then(function (answer) {\r\n $mdDialog.cancel();\r\n }, function () {\r\n $mdDialog.cancel();\r\n });\r\n }\r\n else if ($scope.status == SharedCard.PRESENCE_TYPES.DoNotDisturb) {\r\n event.preventDefault();\r\n $mdDialog.show({\r\n locals: {\r\n title: \"Don't Disturb\",\r\n message: \"Member can't be contacted now\",\r\n customMessage: presenceInfo.Message,\r\n hideCloseBtn: true,\r\n actionBtnText: \"Ok\",\r\n href: href,\r\n newWindow: newWindow,\r\n record: record,\r\n status: $scope.status,\r\n imageUrl: sharedCardData.Profile.ProfileImageUrl\r\n },\r\n controller: 'StatusDialogController',\r\n clickOutsideToClose: true,\r\n templateUrl: 'app/sharedCard/statusdialog.html'\r\n })\r\n .then(function (answer) {\r\n $mdDialog.cancel();\r\n }, function () {\r\n $mdDialog.cancel();\r\n });\r\n }\r\n else if ($scope.status == SharedCard.PRESENCE_TYPES.PreferredOnly) {\r\n var r = sharedCardData.Records[0]\r\n event.preventDefault();\r\n\r\n //If user clicks on first record then dont show dialog, just proceed\r\n if (id == r.InstanceId) {\r\n $('#' + id)[0].click()\r\n return;\r\n }\r\n //Create href for first link\r\n if (r.Type == \"Phone\") {\r\n href = \"tel:\" + r.Value;\r\n newWindow = false;\r\n }\r\n else if (r.Type == \"Sms\") {\r\n href = \"sms:\" + r.Value;\r\n newWindow = false;\r\n }\r\n else if (r.Type == \"Email\") {\r\n href = \"mailto:\" + r.Value;\r\n newWindow = false;\r\n }\r\n else if (r.Type == \"PostalAddress\") {\r\n href = 'http://maps.google.com/maps?q=' + r.GeoLocationPoint + '&ll=' + r.GeoLocationPoint + '&z=13';\r\n newWindow = true;\r\n }\r\n else if (r.Type == \"WhatsApp\" || r.Type == \"Vega\") {\r\n href = r.CustomValue;\r\n newWindow = true;\r\n }\r\n else {// Social or Website\r\n href = appendHttpIfRequired(r.Value)\r\n newWindow = true;\r\n }\r\n\r\n $mdDialog.show({\r\n locals: {\r\n title: \"Preference Only\",\r\n message: \"Please use the preferred contact\",\r\n customMessage: presenceInfo.Message,\r\n hideCloseBtn: false,\r\n actionBtnText: \"Proceed\",\r\n href: href,\r\n newWindow: newWindow,\r\n record: r, //This is different from rest of status \r\n status: $scope.status,\r\n imageUrl: sharedCardData.Profile.ProfileImageUrl\r\n },\r\n controller: 'StatusDialogController',\r\n clickOutsideToClose: true,\r\n templateUrl: 'app/sharedCard/statusdialog.html'\r\n })\r\n .then(function (answer) {\r\n $mdDialog.cancel();\r\n }, function () {\r\n $mdDialog.cancel();\r\n });\r\n }\r\n else if ($scope.status == SharedCard.PRESENCE_TYPES.Traveling) {\r\n event.preventDefault();\r\n $mdDialog.show({\r\n locals: {\r\n title: \"Traveling\",\r\n message: \"Member prefers not to be contacted\",\r\n customMessage: presenceInfo.Message,\r\n hideCloseBtn: false,\r\n actionBtnText: \"Contact\",\r\n href: href,\r\n newWindow: newWindow,\r\n record: record, //This is different from rest of status \r\n status: $scope.status,\r\n imageUrl: sharedCardData.Profile.ProfileImageUrl\r\n },\r\n controller: 'StatusDialogController',\r\n clickOutsideToClose: true,\r\n templateUrl: 'app/sharedCard/statusdialog.html'\r\n })\r\n .then(function (answer) {\r\n $mdDialog.cancel();\r\n }, function () {\r\n $mdDialog.cancel();\r\n });\r\n }\r\n else {\r\n $('#' + id)[0].click()\r\n }\r\n }\r\n };\r\n})();","//This is a controller for both public profile and shared card\r\n(function () {\r\n angular.module('app.sharedcard').controller('SharedCardController', SharedCardController);\r\n SharedCardController.$inject = [\r\n '$rootScope',\r\n '$scope',\r\n '$location',\r\n '$state',\r\n '$stateParams',\r\n '$routeParams',\r\n '$mdDialog',\r\n 'SharedCard',\r\n 'ProfileService',\r\n 'Utils',\r\n 'Countries',\r\n 'LocalstoreManager',\r\n 'StateManager',\r\n 'CONFIG'\r\n ];\r\n\r\n function SharedCardController(\r\n $rootScope,\r\n $scope,\r\n $location,\r\n $state,\r\n $stateParams,\r\n $routeParams,\r\n $mdDialog,\r\n SharedCard,\r\n ProfileService,\r\n Utils,\r\n Countries,\r\n LocalstoreManager,\r\n StateManager,\r\n CONFIG) {\r\n\r\n $rootScope.title = $state.current.title;\r\n\r\n var vm = this;\r\n var id = $stateParams.id;\r\n var isSharedCard = ( $state.current.name == 'sharedcard') ? true : false; //else public card\r\n var isSharedCardFetch = false;\r\n var sharedCardData = null;\r\n var presenceInfo = null;\r\n $scope.isLoggedInUserSame = true;\r\n $scope.title = \"Save Contact\";\r\n $scope.sharedCardData = null;\r\n $scope.isSharedCard = isSharedCard;\r\n $scope.status = \"\";\r\n $scope.statusClass = \"\";\r\n\r\n vm.dataLoaded = false;\r\n vm.isError = false;\r\n\r\n vm.init = function () {\r\n var sharedCard = SharedCard.getSharedCard(id, isSharedCard, false/*LocalstoreManager.isUserLoggedIn()*/);\r\n sharedCard.$promise.then(sharedCardSuccess, sharedCardError);\r\n };\r\n\r\n //*************************************\r\n // Shared Card Handlers\r\n //*************************************\r\n var sharedCardSuccess = function (data) {\r\n isSharedCardFetch = true;\r\n sharedCardData = data;\r\n SharedCard.fetchPresence(sharedCardData.Idenedi).then(presenceSuccess, presenceError);\r\n };\r\n\r\n var sharedCardError = function (response) {\r\n isSharedCardFetch = false;\r\n vm.isError = true;\r\n vm.dataLoaded = true;\r\n };\r\n\r\n\r\n function presenceSuccess(data) {\r\n $scope.statusClass = getStatusClass(data.Status);\r\n $scope.status = (data.Status == SharedCard.PRESENCE_TYPES.OffWork) ? SharedCard.PRESENCE_TYPES.PreferredOnly : data.Status;\r\n presenceInfo = data;\r\n sharedCardData.Records = SharedCard.createWhatsAppAndVegaLinks(sharedCardData.Records);\r\n //if (isSharedCard) {\r\n // markAllPrivate(); \r\n // var expand = true; //Just first group should be expanded\r\n // for (var i in sharedCardData.UserTitles) {\r\n // sharedCardData.UserTitles[i].fullRecords = [];\r\n // sharedCardData.UserTitles[i].expanded = expand;\r\n // expand = false;\r\n // for (var j in sharedCardData.UserTitles[i].RecordInstanceIds) {\r\n // var record = getRecordData(sharedCardData.UserTitles[i].RecordInstanceIds[j]);\r\n // sharedCardData.UserTitles[i].fullRecords.push(record);\r\n // }\r\n // }\r\n //}\r\n\r\n displayData();\r\n }\r\n\r\n function presenceError(data) {\r\n vm.isError = true;\r\n vm.dataLoaded = true;\r\n }\r\n\r\n function markAllPrivate() {\r\n for (var i in sharedCardData.Records) {\r\n sharedCardData.Records[i].isPrivate = true;\r\n }\r\n }\r\n\r\n function getStatusClass(status) {\r\n if (status == SharedCard.PRESENCE_TYPES.Unknown) {\r\n return \"Unknown\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.Available) {\r\n return \"Available\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.Busy) {\r\n return \"Busy\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.EnjoyingLife) {\r\n return \"EnjoyingLife\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.AtWork) {\r\n return \"AtWork\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.DoNotDisturb) {\r\n return \"DoNotDisturb\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.PreferredOnly || status == SharedCard.PRESENCE_TYPES.OffWork) {\r\n return \"PreferredOnly\"\r\n } else if (status == SharedCard.PRESENCE_TYPES.Traveling) {\r\n return \"Traveling\"\r\n } else {\r\n return \"Unknown\"\r\n }\r\n }\r\n\r\n function getRecordData(id) {\r\n for (var i in sharedCardData.Records) {\r\n if (sharedCardData.Records[i].InstanceId == id) {\r\n sharedCardData.Records[i].isPrivate = false;\r\n return sharedCardData.Records[i];\r\n }\r\n }\r\n }\r\n function displayData() {\r\n $scope.labelText = \"Sign In or Register to always access \" + sharedCardData.Profile.FirstName + \" \" + sharedCardData.Profile.LastName + \"'s updated contact details\";\r\n $scope.sharedCardData = sharedCardData;\r\n $scope.formattedId = Utils.formatIdenediId(sharedCardData.Idenedi);\r\n $scope.country = Countries.getCountryNameByCode(sharedCardData.Profile.CountryISOCode);\r\n if (isSharedCard) {\r\n if (sharedCardData.UserTitles.length > 1) {\r\n var title = \"\";\r\n if (sharedCardData.UserTitles[0].Title == null) {\r\n title = \"Member\"\r\n } else {\r\n title = sharedCardData.UserTitles[0].Title;\r\n }\r\n $scope.userTitle = title + \" - \" + sharedCardData.UserTitles[0].GroupName;\r\n } else {\r\n $scope.userTitle = \"Idenedi\";\r\n }\r\n } else {\r\n $scope.userTitle = \"Idenedi\";\r\n }\r\n vm.isError = false;\r\n vm.dataLoaded = true;\r\n };\r\n\r\n vm.init();\r\n\r\n $scope.joinBtnClick = function () {\r\n $state.go('register.basicinfo', { 'cid': null, 'pid': null });\r\n }\r\n $scope.saveContactBtnClick = function () {\r\n if(isSharedCard)\r\n $state.go('savecard', { 'id': id});\r\n else\r\n $state.go('saveprofile', { 'id': id });\r\n }\r\n\r\n function appendHttpIfRequired(href) {\r\n if (href) {\r\n var m = href.match(/http:|https:/i)\r\n if (m == null && href.indexOf('tel:') == -1 && href.indexOf('sms:') == -1 && href.indexOf('mailto:') == -1)\r\n href = \"http://\" + href;\r\n }\r\n return href;\r\n }\r\n $scope.onContactClick = function (event, id, href, record, newWindow) {\r\n href = appendHttpIfRequired(href);\r\n if ($scope.status == SharedCard.PRESENCE_TYPES.Busy) {\r\n event.preventDefault();\r\n $mdDialog.show({\r\n controller: 'StatusDialogController',\r\n templateUrl: 'app/sharedCard/statusdialog.html',\r\n clickOutsideToClose: true,\r\n locals: {\r\n title: \"Busy\",\r\n message: \"Member prefers not to be contacted\",\r\n customMessage: presenceInfo.Message,\r\n hideCloseBtn: false,\r\n actionBtnText: \"Contact\",\r\n href: href,\r\n newWindow: newWindow,\r\n record: record,\r\n status: $scope.status,\r\n imageUrl: sharedCardData.Profile.ProfileImageUrl\r\n }\r\n })\r\n .then(function (answer) {\r\n $mdDialog.cancel();\r\n }, function () {\r\n $mdDialog.cancel();\r\n });\r\n }\r\n else if ($scope.status == SharedCard.PRESENCE_TYPES.DoNotDisturb) {\r\n event.preventDefault();\r\n $mdDialog.show({\r\n controller: 'StatusDialogController',\r\n templateUrl: 'app/sharedCard/statusdialog.html',\r\n clickOutsideToClose: true,\r\n locals: {\r\n title: \"Don't Disturb\",\r\n message: \"Member can't be contacted now\",\r\n customMessage: presenceInfo.Message,\r\n hideCloseBtn: true,\r\n actionBtnText: \"Ok\",\r\n href: href,\r\n newWindow: newWindow,\r\n record: record,\r\n status: $scope.status,\r\n imageUrl: sharedCardData.Profile.ProfileImageUrl\r\n }\r\n })\r\n .then(function (answer) {\r\n $mdDialog.cancel();\r\n }, function () {\r\n $mdDialog.cancel();\r\n });\r\n }\r\n else if ($scope.status == SharedCard.PRESENCE_TYPES.PreferredOnly) {\r\n var r = sharedCardData.Records[0];\r\n event.preventDefault();\r\n //If user clicks on first record then dont show dialog, just proceed\r\n if (id == r.InstanceId) {\r\n $('#' + id)[0].click()\r\n return;\r\n }\r\n //Create href for first link\r\n if(r.Type == \"Phone\"){\r\n href = \"tel:\" + r.Value;\r\n newWindow = false;\r\n }\r\n else if (r.Type == \"Sms\") {\r\n href = \"sms:\" + r.Value;\r\n newWindow = false;\r\n }\r\n else if (r.Type == \"Email\") {\r\n href = \"mailto:\" + r.Value;\r\n newWindow = false;\r\n }\r\n else if (r.Type == \"PostalAddress\") {\r\n href = 'http://maps.google.com/maps?q=' + r.GeoLocationPoint + '&ll=' + r.GeoLocationPoint + '&z=13';\r\n newWindow = true;\r\n }\r\n else if (r.Type == \"WhatsApp\" || r.Type == \"Vega\") {\r\n href = r.CustomValue;\r\n newWindow = true;\r\n }\r\n else {// Social or Website\r\n href = appendHttpIfRequired(r.Value)\r\n newWindow = true;\r\n }\r\n\r\n $mdDialog.show({\r\n controller: 'StatusDialogController',\r\n templateUrl: 'app/sharedCard/statusdialog.html',\r\n clickOutsideToClose: true,\r\n locals: {\r\n title: \"Preference Only\",\r\n message: \"Please use the preferred contact\",\r\n customMessage: presenceInfo.Message,\r\n hideCloseBtn: false,\r\n actionBtnText: \"Proceed\",\r\n href: href,\r\n newWindow: newWindow,\r\n record: r, //This is different from rest of status \r\n status: $scope.status,\r\n imageUrl: sharedCardData.Profile.ProfileImageUrl\r\n }\r\n })\r\n .then(function (answer) {\r\n $mdDialog.cancel();\r\n }, function () {\r\n $mdDialog.cancel();\r\n });\r\n }\r\n else if ($scope.status == SharedCard.PRESENCE_TYPES.Traveling) {\r\n event.preventDefault();\r\n $mdDialog.show({\r\n controller: 'StatusDialogController',\r\n templateUrl: 'app/sharedCard/statusdialog.html',\r\n clickOutsideToClose: true,\r\n locals: {\r\n title: \"Traveling\",\r\n message: \"Member prefers not to be contacted\",\r\n customMessage: presenceInfo.Message,\r\n hideCloseBtn: false,\r\n actionBtnText: \"Contact\",\r\n href: href,\r\n newWindow: newWindow,\r\n record: record,\r\n status: $scope.status,\r\n imageUrl: sharedCardData.Profile.ProfileImageUrl\r\n }\r\n })\r\n .then(function (answer) {\r\n $mdDialog.cancel();\r\n }, function () {\r\n $mdDialog.cancel();\r\n });\r\n }\r\n else {\r\n $('#' + id)[0].click()\r\n }\r\n }\r\n\r\n \r\n //function dialogController($scope, $mdDialog, title, message, customMessage, hideCloseBtn, actionBtnText, href, newWindow) {\r\n // $scope.title = title;\r\n // $scope.message = message;\r\n // $scope.customMessage = customMessage;\r\n // $scope.hideCloseBtn = hideCloseBtn;\r\n // $scope.actionBtnText = actionBtnText;\r\n // $scope.href = href;\r\n // $scope.newWindow = newWindow;\r\n\r\n // $scope.answer = function (val) {\r\n // $mdDialog.hide(val)\r\n // }\r\n\r\n // $scope.cancel = function () {\r\n // $mdDialog.cancel()\r\n // }\r\n //}\r\n };\r\n})();","(function () {\r\n angular.module('app.sharedcard').factory('SharedCard', SharedCard);\r\n\r\n SharedCard.$inject = ['$resource', '$location', '$q', '$http', 'Utils', 'Countries', 'CONFIG'];\r\n function SharedCard($resource, $location, $q, $http, Utils, Countries, CONFIG) {\r\n //For beta release\r\n var countriesForBetaRelease = ['IQ', 'PS', 'OM', 'BH', 'QA', 'SA', 'PK', 'AR', 'BE', 'FR', 'LB', 'AE', 'JO'];\r\n\r\n var sharedCardService = {\r\n PRESENCE_TYPES: {\r\n Unknown: \"Unknown\",\r\n Available: \"Available\",\r\n Busy: \"Busy\",\r\n EnjoyingLife: \"EnjoyingLife\",\r\n AtWork: \"AtWork\",\r\n OffWork: \"OffWork\",\r\n DoNotDisturb: \"DoNotDisturb\",\r\n PreferredOnly: \"PreferredOnly\",\r\n Traveling: \"Traveling\",\r\n OffWork: \"OffWork\"\r\n },\r\n isCountryImageAvaiable: isCountryImageAvaiable,\r\n getSharedCard: getSharedCard,\r\n downloadVcard: downloadVcard,\r\n getLastupdatedString: getLastupdatedString,\r\n saveMember: saveMember,\r\n createWhatsAppAndVegaLinks: createWhatsAppAndVegaLinks,\r\n fetchPresence: fetchPresence\r\n };\r\n\r\n return sharedCardService;\r\n\r\n function fetchPresence(id) {\r\n var defer = $q.defer()\r\n var url = CONFIG.API.API_HOST + '/api/Presence/:id';\r\n $resource(url).get({ id: id }, success, error);\r\n\r\n function success(data) {\r\n var _data = data;\r\n defer.resolve(_data);\r\n }\r\n function error(response) {\r\n defer.reject(response.data.Message);\r\n }\r\n\r\n return defer.promise;\r\n };\r\n\r\n function createWhatsAppAndVegaLinks(records) {\r\n for (var i in records) {\r\n var value = records[i].Value;\r\n if (value.indexOf(\"https://wa.me/\") > -1) {\r\n value = value.replace(\"https://wa.me/\", \"\")\r\n value = value.replace(\"&\", \"\")\r\n value = \"+\" + value\r\n records[i].Type = \"WhatsApp\"\r\n records[i].CustomValue = records[i].Value.replace('&', '')\r\n records[i].Value = value\r\n\r\n } else if (value.indexOf(\"https://vega-messenger.com/chat/\") > -1) {\r\n value = value.replace(\"https://vega-messenger.com/chat/\", \"\")\r\n value = value.replace(\"&\", \"\")\r\n value = \"+\" + value\r\n records[i].Type = \"Vega\"\r\n records[i].CustomValue = records[i].Value.replace('&','')\r\n records[i].Value = value\r\n }\r\n }\r\n\r\n return records;\r\n }\r\n //For beta release\r\n function isCountryImageAvaiable(country) {\r\n var index = countriesForBetaRelease.indexOf(country);\r\n return (index == -1) ? false : true;\r\n };\r\n\r\n function getSharedCard(id, isSharedCard, isUserLoggedIn) {\r\n var sharedCardAPI = CONFIG.API.API_HOST + '/api/card/:id?autoSave=' + ((isUserLoggedIn) ? \"true\" : \"false\" );\r\n var publicProfileAPI = CONFIG.API.API_HOST + '/api/user/:id/';\r\n if (isUserLoggedIn) {\r\n Utils.addTokenInHttpHeader();\r\n }\r\n\r\n if (isSharedCard)\r\n return $resource(sharedCardAPI).get({ id: id }, sharedCardSuccess, sharedCardError);\r\n else\r\n return $resource(publicProfileAPI).get({ id: id }, sharedCardSuccess, sharedCardError);\r\n function sharedCardSuccess(data) {\r\n var _data = data;\r\n _data.formattedId = Utils.formatIdenediId(data.Idenedi);\r\n _data.Profile.ProfileImageSmallUrl = Utils.getProfileImageSmallUrl(data.Profile.ProfileImageUrl);\r\n _data.Profile.countryName = Countries.getCountryNameByCode(data.Profile.CountryISOCode);\r\n return _data;\r\n }\r\n function sharedCardError(response) {\r\n return response;\r\n }\r\n };\r\n\r\n function saveMember(idenedi) {\r\n var publicProfileAPI = CONFIG.API.API_HOST + '/api/member/:id/';\r\n //if (isUserLoggedIn) {\r\n Utils.addTokenInHttpHeader();\r\n //}\r\n\r\n return $resource(publicProfileAPI, { id: idenedi }, { 'update': { method: 'PUT' } }).update(saveSuccess, saveError);\r\n\r\n function saveSuccess(data) {\r\n console.log(\"success\");\r\n }\r\n function saveError(response) {\r\n console.log(\"error\");\r\n }\r\n };\r\n\r\n function downloadVcard(data) {\r\n var vCardInfo = {};\r\n vCardInfo.idenedi = data.formattedId;\r\n vCardInfo.fullName = data.Profile.FirstName + \" \" + data.Profile.LastName;\r\n vCardInfo.phones = [];\r\n vCardInfo.websites = [];\r\n vCardInfo.emails = [];\r\n vCardInfo.addresses = [];\r\n vCardInfo.sms = [];\r\n\r\n var records = data.Records;\r\n\r\n for (var i = 0; i < records.length; i++) {\r\n var record = records[i];\r\n if (record.Type == \"Phone\") {\r\n vCardInfo.phones.push(record.Value);\r\n } else if (record.Type == \"Website\") {\r\n vCardInfo.websites.push(record.Value);\r\n } else if (record.Type == \"Email\") {\r\n vCardInfo.emails.push(record.Value);\r\n } else if (record.Type == \"PostalAddress\") {\r\n vCardInfo.addresses.push({ \"City\": record.City, \"Value\": record.Value, \"PostalCode\": record.PostalCode, \"Country\": record.Country });\r\n } else if (record.Type == \"Sms\") {\r\n vCardInfo.sms.push(record.Value);\r\n }\r\n }\r\n\r\n return \"/vcard.php?\" + $.param(vCardInfo);\r\n //window.open(\"/vcard.php?\" + $.param(vCardInfo), \"_blank\");\r\n };\r\n\r\n function getLastupdatedString(sharedCard) {\r\n var displayTime = \"\";\r\n if (sharedCard.Expiration != null) {\r\n if (sharedCard.Expiration.Status == \"Valid\") {\r\n var timeLeft = sharedCard.Expiration.TimeToExpire;\r\n if (timeLeft.indexOf(\".\") == 1) {\r\n displayTime = \"The card will expire after \" + timeLeft[0] + \" days.\";\r\n } else {\r\n return \"The card will expire today.\"\r\n }\r\n } else if (sharedCard.Expiration.Status == \"ExpiredByTime\") { //When card is expired status is undefined\r\n var date = new Date(sharedCard.Expiration.ExpiredOn);\r\n displayTime = \"Last updated on \" + Utils.getFormattedDate(date);\r\n } else if (sharedCard.Expiration.Status == \"ExpiredByUse\") {\r\n var date = new Date(sharedCard.Expiration.ExpiredOn);\r\n displayTime = \"Last updated on \" + Utils.getFormattedDate(date);\r\n } else {\r\n var date = new Date(sharedCard.Expiration.NormalExpiryDate);\r\n displayTime = \"Last updated on \" + Utils.getFormattedDate(date);\r\n }\r\n } else if (sharedCard.ModifiedOn != null) {\r\n var date = new Date(sharedCard.ModifiedOn);\r\n displayTime = \"Last updated on \" + Utils.getFormattedDate(date);\r\n }\r\n \r\n return displayTime;\r\n };\r\n };\r\n})();","//This is a controller for both public profile and shared card\r\n(function () {\r\n angular.module('app.sharedcard').controller('StatusDialogController', StatusDialogController);\r\n\r\n StatusDialogController.$inject = [\r\n '$scope',\r\n '$mdDialog',\r\n 'title',\r\n 'message',\r\n 'customMessage',\r\n 'hideCloseBtn',\r\n 'actionBtnText',\r\n 'href',\r\n 'newWindow',\r\n 'record',\r\n 'status',\r\n 'imageUrl',\r\n 'SharedCard'\r\n ];\r\n\r\n function StatusDialogController($scope, $mdDialog, title, message, customMessage, hideCloseBtn, actionBtnText, href, newWindow, record, status, imageUrl, SharedCard) {\r\n $scope.title = title;\r\n $scope.message = message;\r\n $scope.customMessage = customMessage;\r\n $scope.hideCloseBtn = hideCloseBtn;\r\n $scope.actionBtnText = actionBtnText.toUpperCase();\r\n $scope.href = href;\r\n $scope.newWindow = newWindow;\r\n $scope.imageUrl = imageUrl;\r\n\r\n //For Dont Disturb\r\n if (hideCloseBtn)\r\n $scope.href = \"\"\r\n //if (status == SharedCard.PRESENCE_TYPES.PreferredOnly) {\r\n // var prefix = record.Label;\r\n // prefix = prefix.toUpperCase()\r\n // var postfix = record.Value;\r\n // if (record.Type == \"Sms\" || record.Type == \"Phone\" || record.Type == \"WhatsApp\" || record.Type == \"Vega\") {\r\n // postfix = postfix.replace(\"+\", \"00\")\r\n // }\r\n\r\n // prefix += \" \";\r\n // $scope.actionBtnText = prefix + postfix;\r\n //}\r\n\r\n $scope.answer = function (val) {\r\n if ($scope.newWindow) {\r\n $('#link-new-window')[0].click()\r\n } else {\r\n $('#link-same-window')[0].click()\r\n }\r\n $mdDialog.hide(val)\r\n }\r\n\r\n $scope.cancel = function () {\r\n $mdDialog.cancel()\r\n }\r\n }\r\n \r\n})();","(function () {\r\n angular.module('app.announcement', [\r\n 'app.member',\r\n 'ngMaterial',\r\n 'ngMessages',\r\n 'ngResource',\r\n 'ngRoute',\r\n 'ui.router',\r\n 'ngSanitize'\r\n ])\r\n .constant('SHARED_CARD_CONFIG', {\r\n URLS: {\r\n\r\n }\r\n })\r\n .config(Config);\r\n\r\n Config.$inject = [\r\n '$routeProvider',\r\n '$stateProvider',\r\n '$locationProvider',\r\n 'SHARED_CARD_CONFIG'\r\n ];\r\n\r\n function Config($routeProvider, $stateProvider, $locationProvider, SHARED_CARD_CONFIG) {\r\n $stateProvider\r\n .state('announcement', {\r\n url: '/announcement/?gid&aid',\r\n templateUrl: 'app/announcement/announcement.html',\r\n controller: 'AnnouncementController',\r\n controllerAs: 'vm',\r\n reloadOnSearch: false,\r\n title: \"Announcement\"\r\n })\r\n }\r\n})();","(function () {\r\n angular.module('app.smartcontract').controller('ContractCompleteController', ContractCompleteController);\r\n\r\n ContractCompleteController.$inject = ['$scope', '$state', '$rootScope', '$stateParams', 'Utils', 'LocalstoreManager'];\r\n function ContractCompleteController($scope, $state, $rootScope, $stateParams, Utils, LocalstoreManager) {\r\n $scope.groupId = $stateParams.groupId;\r\n $scope.contractId = $stateParams.contractId;\r\n\r\n $scope.title = $stateParams.title;\r\n $(\"#htmlText\").html($stateParams.subTitle);\r\n\r\n //if ($state.current.name == \"register_expired\") {\r\n // Utils.trackMixpanelEvent(\"Link expired\");\r\n // mixpanel.track_links('#terms', 'Open Terms of Use');\r\n // mixpanel.track_links('#policy', 'Open Privacy Policy');\r\n // mixpanel.track_links('#support-email', 'Support email clicked');\r\n //}\r\n\r\n LocalstoreManager.removeUserToken(); //Intentionally removing token so that user cannot signin through some way for release 1 3-21-2017\r\n\r\n var cleanupCB = $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\r\n event.preventDefault();\r\n });\r\n\r\n $scope.$on('$destroy', function () {\r\n cleanupCB();\r\n });\r\n\r\n $scope.iOSAppDownload = function () {\r\n Utils.trackMixpanelEvent(\"Web: IPhone app link clicked.\");\r\n }\r\n\r\n $scope.androidAppDownload = function () {\r\n Utils.trackMixpanelEvent(\"Web: Android app link clicked.\");\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.smartcontract').controller('SmartContractController', SmartContractController);\r\n\r\n SmartContractController.$inject = [\r\n '$rootScope',\r\n '$scope',\r\n '$location',\r\n '$state',\r\n '$stateParams',\r\n '$routeParams',\r\n '$mdDialog',\r\n 'SharedCard',\r\n 'ProfileService',\r\n 'Utils',\r\n 'Countries',\r\n 'LocalstoreManager',\r\n 'StateManager',\r\n 'SmartContractService',\r\n 'CONFIG'\r\n ];\r\n\r\n function SmartContractController(\r\n $rootScope,\r\n $scope,\r\n $location,\r\n $state,\r\n $stateParams,\r\n $routeParams,\r\n $mdDialog,\r\n SharedCard,\r\n ProfileService,\r\n Utils,\r\n Countries,\r\n LocalstoreManager,\r\n StateManager,\r\n SmartContractService,\r\n CONFIG) {\r\n\r\n $rootScope.title = $state.current.title;\r\n\r\n $scope.canAcceptOrReject = false;\r\n $scope.shareKey = $stateParams.shareKey;\r\n $scope.groupId = $stateParams.groupId;\r\n\r\n var vm = this;\r\n \r\n vm.dataLoaded = false;\r\n vm.isError = false;\r\n\r\n vm.init = function () {\r\n \r\n };\r\n\r\n vm.init();\r\n\r\n $scope.rejectBtnClick = function () {\r\n $state.go('rejectcontract', { 'groupId': $stateParams.groupId, 'shareKey': $stateParams.shareKey });\r\n }\r\n $scope.acceptBtnClick = function () {\r\n $state.go('acceptcontract', { 'groupId': $stateParams.groupId, 'shareKey': $stateParams.shareKey });\r\n }\r\n\r\n $scope.dataReceived = function (data) {\r\n if (data.CurrentStatus == 'Pending') {\r\n $scope.canAcceptOrReject = true;\r\n }\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.smartcontract').factory('SmartContractService', SmartContract);\r\n\r\n SmartContract.$inject = ['$resource', '$location', '$http', '$q', 'Utils', 'CONFIG'];\r\n function SmartContract($resource, $location, $http, $q, Utils, CONFIG) {\r\n var customFields = {\r\n TEXT: 'Text',\r\n DATE: 'Date',\r\n SINGLE_SELECTION: 'SingleSelection',\r\n MULTI_SELECTION: 'MultiSelection'\r\n }\r\n var smartContractService = {\r\n CUSTOM_FIELDS: customFields,\r\n getSmartContract: getSmartContract,\r\n getSmartContractThroughContractId: getSmartContractThroughContractId,\r\n changeStatusOfContract: changeStatusOfContract\r\n };\r\n\r\n return smartContractService;\r\n\r\n function changeStatusOfContract(groupId, contractId, status, shareKey) {\r\n var api = CONFIG.API.API_HOST + '/api/group/' + groupId + '/contract/' + contractId + '/status?newStatus=' + status + '&shareKey=' + shareKey;\r\n\r\n var defer = $q.defer()\r\n $resource(api).save({ }, success, error);\r\n\r\n function success(data) {\r\n var _data = data;\r\n defer.resolve(_data);\r\n }\r\n function error(response) {\r\n defer.reject(response.data.Message);\r\n }\r\n\r\n return defer.promise;\r\n }\r\n\r\n function getSmartContract(key, groupId) {\r\n var api = CONFIG.API.API_HOST + '/api/group/:groupId/contract/share?shareKey=:key';\r\n\r\n var defer = $q.defer()\r\n $resource(api).get({ groupId: groupId, key: key}, success, error);\r\n\r\n function success(data) {\r\n var _data = data;\r\n defer.resolve(_data);\r\n }\r\n function error(response) {\r\n defer.reject(response);\r\n }\r\n\r\n return defer.promise;\r\n };\r\n\r\n function getSmartContractThroughContractId(contractId, groupId) {\r\n var api = CONFIG.API.API_HOST + '/api/group/:groupId/contract/:contractId';\r\n\r\n var defer = $q.defer()\r\n $resource(api).get({ groupId: groupId, contractId: contractId }, success, error);\r\n\r\n function success(data) {\r\n var _data = data;\r\n defer.resolve(_data);\r\n }\r\n function error(response) {\r\n defer.reject(response);\r\n }\r\n\r\n return defer.promise;\r\n };\r\n };\r\n})();","(function () {\r\n angular.module('app.smartcontract').controller('SmartContractAcceptReject', SmartContractAcceptReject);\r\n\r\n SmartContractAcceptReject.$inject = [\r\n '$rootScope',\r\n '$scope',\r\n '$location',\r\n '$state',\r\n '$stateParams',\r\n '$routeParams',\r\n '$mdDialog',\r\n 'Utils',\r\n 'LocalstoreManager',\r\n 'SmartContractService',\r\n 'MembersService',\r\n 'CONFIG'\r\n ];\r\n\r\n function SmartContractAcceptReject(\r\n $rootScope,\r\n $scope,\r\n $location,\r\n $state,\r\n $stateParams,\r\n $routeParams,\r\n $mdDialog,\r\n Utils,\r\n LocalstoreManager,\r\n SmartContractService,\r\n MembersService,\r\n CONFIG) {\r\n var contract = null;\r\n\r\n $rootScope.title = $state.current.title;\r\n\r\n $scope.shareKey = $stateParams.shareKey;\r\n $scope.groupId = $stateParams.groupId;\r\n\r\n $scope.hideCancelButton = false;\r\n $scope.canAcceptOrReject = false;\r\n $scope.disableRejectBtn = false;\r\n $scope.contract = null;\r\n $scope.$state = $state;\r\n $scope.title = \"Reject Contract\";\r\n $scope.label = \"Please confirm that you want to reject this contract.\";\r\n \r\n if ($state.current.name == \"acceptcontract\") {\r\n $scope.title = \"Accept Contract\";\r\n $scope.label = \"Sign in or Register to officially accept this contract and view it on IDENEDI app.\";\r\n }\r\n\r\n var vm = this;\r\n\r\n vm.init = function () {\r\n\r\n };\r\n\r\n vm.init();\r\n\r\n $scope.signInBtnClick = function () {\r\n $state.go('login', {\r\n groupId: $stateParams.groupId,\r\n shareKey: $stateParams.shareKey,\r\n contractId: contract.InstanceId,\r\n status: 'Accepted',\r\n type: 'acceptcontract'\r\n });\r\n }\r\n $scope.regBtnClick = function () {\r\n $state.go('register.basicinfo', {\r\n groupId: $stateParams.groupId,\r\n shareKey: $stateParams.shareKey,\r\n contractId: contract.InstanceId,\r\n status: 'Accepted',\r\n type: 'acceptcontract'\r\n });\r\n }\r\n $scope.confirmBtnClick = function () {\r\n $scope.disableRejectBtn = true;\r\n SmartContractService.changeStatusOfContract(\r\n $stateParams.groupId,\r\n contract.InstanceId,\r\n 'Rejected',\r\n $stateParams.shareKey).then(function (data) {\r\n MembersService.getUserDetail($stateParams.groupId).$promise.then(function (data) {\r\n $scope.disableRejectBtn = false;\r\n $state.go('contractcomplete', { subTitle: \"Contract number \" + contract.InstanceId + \" with group \" + data.Profile.FirstName + \" is rejected on date \" + moment(data.LastActivityOn).format('DD MMM YYYY'), title: \"Contract Rejected\", groupId: $stateParams.groupId, shareKey: $stateParams.shareKey, contractId: $stateParams.contractId });\r\n }, function (res) {\r\n $scope.disableRejectBtn = false;\r\n alert('Some error occured. Please try again.');\r\n });\r\n }, function (res) {\r\n //$scope.disableRejectBtn = false;\r\n alert(\"Unable to reject contract\");\r\n $state.go('smartcontract', { groupId: $stateParams.groupId, shareKey: $stateParams.shareKey })\r\n });\r\n }\r\n $scope.cancelBtnClick = function () {\r\n $state.go('smartcontract', { 'groupId': $stateParams.groupId, 'shareKey': $stateParams.shareKey });\r\n }\r\n\r\n $scope.dataReceived = function (data) {\r\n contract = data;\r\n if (data.CurrentStatus == 'Pending') {\r\n $scope.canAcceptOrReject = true;\r\n } else if (data.CurrentStatus == 'Deleted') {\r\n $scope.title = \"Unable to process\";\r\n $scope.label = \"The contract has been deleted.\";\r\n $scope.hideCancelButton = true;\r\n } else if (data.CurrentStatus == 'Terminated') {\r\n $scope.title = \"Unable to process\";\r\n $scope.label = \"The contract has been terminated.\";\r\n $scope.hideCancelButton = true;\r\n }\r\n }\r\n };\r\n})();","(function () {\r\n angular.module('app.announcement').filter(\"trustUrl\", ['$sce', function ($sce) {\r\n return function (recordingUrl) {\r\n return $sce.trustAsResourceUrl(recordingUrl);\r\n };\r\n }]);\r\n //New line filter after linky filter\r\n angular.module('app.announcement').filter('nl2br', ['$sanitize', function ($sanitize) {\r\n var tag = (/xhtml/i).test(document.doctype) ? '