{"version":3,"sources":["extend.js","angular-credit-cards.js","dd.breakpoints.js","moment.min.js","sha256.min.js","moment-timezone.min.js","moment-timezone-with-data-2012-2022.min.js","app.js","BikeQuote.model.js","CaravanQuote.model.js","CTP.model.js","HomeQuote.model.js","PaymentsQuote.model.js","Quote.model.js","JsonMapper.js","MergedQuoteResultModel.js","PortalServiceWrapper.js","QuoteRequestRepository.js","QuoteResultModelBuilder.js","QuoteServiceResponseTransformer.js","ServiceResponseRepository.js","SplitterRequestTransformer.js","bike/BikeCleanRequestTransformer.js","bike/BikeCoverTypeTransformer.js","bike/BikeDefaultValueRequestTransformer.js","bike/BikeFormatConverterTransformer.js","bike/BikePolicyHolderHandler.js","bike/BikePublicIDTransformer.js","bike/BikeQuoteResultModel.js","bike/BikeRetrieveSavedQuoteResponseTransformer.js","bike/BikeStructureRequestTransformer.js","bike/BikeTriggleTransformer.js","home/HomeCleanRequestTransformer.js","home/HomeCoverTypeTransformer.js","home/HomeDefaultValueRequestTransformer.js","home/HomeFormatConverterTransformer.js","home/HomePolicyHolderHandler.js","home/HomePublicIDTransformer.js","home/HomeQuoteResultModel.js","home/HomeRetrieveSavedQuoteResponseTransformer.js","home/HomeSplitterRequestTransformer.js","home/HomeStructureRequestTransformer.js","vehicle/VehicleCleanRequestTransformer.js","vehicle/VehicleCoverTypeTransformer.js","vehicle/VehicleDefaultValueRequestTransformer.js","vehicle/VehicleFormatConverterTransformer.js","vehicle/VehiclePolicyHolderHandler.js","vehicle/VehiclePublicIDTransformer.js","vehicle/VehicleQuoteResultModel.js","vehicle/VehicleRetrieveSavedQuoteResponseTransformer.js","vehicle/VehicleStructureRequestTransformer.js","caravan/CaravanCleanRequestTransformer.js","caravan/CaravanCoverTypeTransformer.js","caravan/CaravanDefaultValueRequestTransformer.js","caravan/CaravanFormatConverterTransformer.js","caravan/CaravanPolicyHolderHandler.js","caravan/CaravanPublicIDTransformer.js","caravan/CaravanQuoteResultModel.js","caravan/CaravanRetrieveSavedQuoteResponseTransformer.js","caravan/CaravanStructureRequestTransformer.js","caravan/CaravanTriggleTransformer.js","GtmService.js","pageView.run.js","AggregatedRemoveService.js","BikeQuoteConfiguration.js","CampaignService.js","CaravanQuoteConfiguration.js","checkRouteAllowed.run.js","config.js","CoverOfferingResolverService.js","CoverTypeResolverService.js","DynamicRouter.js","EmbargoTest.service.js","FormSchemaService.js","GenericConfiguration.js","GuideWireService.js","HierarchyDecorator.js","HomeQuoteConfiguration.js","HouseCommonData.js","JWTTimeoutService.js","LabelService.js","MAService.js","PaymentLogger.service.js","PaymentService.js","QuoteModelFactory.js","QuoteOptions.js","QuoteResultFilter.js","QuoteResultModelFactory.js","QuoteService.js","RegisterFieldDecorator.js","RegoSearchService.js","SessionStorage.js","SmartLink.service.js","UserInputRepository.js","Util.js","ValidationService.js","VehicleQuoteConfiguration.js","addressValidation.directive.js","fullEmailValidation.directive.js","mutuallyExclusiveValidation.directive.js","qbAmountDue.directive.js","qbAutoSubmitForm.directive.js","qbConfirmDialog.directive.js","qbCoverIncludes.directive.js","qbCtpProgress.directive.js","qbCvcNumeric.directive.js","qbDatePicker.directive.js","qbDateRange.directive.js","qbDateValidation.directive.js","qbEmptyShedValidation.directive.js","qbEmptyTableValidation.directive.js","qbFieldLabel.directive.js","qbFieldWrapper.directive.js","qbFormField.directive.js","qbFormSection.directive.js","qbFrequentlyAskedQuestions.directive.js","qbGroupCheckboxMaxLimit.directive.js","qbHeadBar.directive.js","qbHeadBarCtp.directive.js","qbModal.directive.js","qbNgDialog.directive.js","qbParentClass.directive.js","qbPaybillProgress.directive.js","qbPaymentSummary.directive.js","qbPhoneNumberValidation.directive.js","qbPromoBox.directive.js","qbPromoCode.directive.js","qbRestrictInput.directive.js","qbSimpleSelectArrowClick.directive.js","qbSmartLink.directive.js","portal.js","qbSummarySection.directive.js","qbTabs.directive.js","qbThankYou.directive.js","qbTooltip.directive.js","qbValidBSB.directive.js","qbValidExpiryDate.directive.js","ui-bootstrap-typeahead-1.3.3.js","uiSelectRequired.directive.js","bikeForm.controller.js","bikeRapidEstimate.controller.js","caravanForm.controller.js","caravanRapidEstimate.controller.js","CtpForm.controller.js","cybersourceCallbackController.controller.js","cybersourcePaymentController.controller.js","decline.controller.js","error.controller.js","form.controller.js","home.controller.js","payment.controller.js","paymentsForm.controller.js","paypalCallbackController.controller.js","PlaneForm.controller.js","policyStartDate.controller.js","rapidEstimate.controller.js","qbAddressSearch.component.js","qbCampaign.component.js","qbCombinedValidation.component.js","qbCrossSell.component.js","qbCtpValidation.component.js","qbCurrency.component.js","qbCycleCoverSummary.component.js","qbListAccordion.component.js","qbListAggregator.component.js","qbListReducer.component.js","qbLoadingAnimation.component.js","qbMaxNoClaimBonus.component.js","qbMultiEntryTable.component.js","qbMultiselectDropdown.component.js","qbNoClaimBonus.component.js","qbPaymentRefNum.component.js","qbPremiumBreakdown.component.js","qbProgressBar.component.js","qbRangeBar.component.js","qbRapidEstimateQuotesPanel.component.js","qbRegoSearch.component.js","qbSaveQuote.component.js","qbTopBanner.component.js","qbValidation.component.js","qbVehicleSubTypeSelector.component.js","qbYearMakeModel.component.js","qbYearsHeld.component.js","qbYesNo.component.js","routing.js","routes.js"],"names":["Object","extend","destination","source","$","values","object","property","hasOwnProperty","push","Number","isNumeric","n","isNaN","parseFloat","isFinite","isFunction","functionToCheck","getType","toString","call","f","exports","module","define","amd","g","window","global","self","this","angularCreditCards","e","t","r","s","o","u","a","require","i","Error","code","l","length","1","_dereq_","ap","args","fn","rest","slice","arguments","first","apply","pa","apa","left","right","concat","partial","partialRight","curry","curryRight","2","upperCase","sentenceCase","string","locale","replace","m","$1","sentence-case","upper-case","3","isArray","castArray","value","isarray","4","types","Type","find","findCardType","callback","typeName","type","result","./src/type","./src/types","5","CardType","name","config","prototype","cvcLength","luhn","groupPattern","group","number","match","filter","Boolean","test","eager","xtend/mutable","6","group19","visa","pattern","eagerPattern","maestro","forbrugsforeningen","dankort","masterCard","americanExpress","dinersClub","discover","jcb","unionPay","./type","7","card","cvc","expiration","./src/card","./src/cvc","./src/expiration","8","parse","parseCard","format","formatCard","cardType","isValid","isCardValid","separator","join","undefined","get","./types","fast-luhn","9","cvcRegex","cvcIsValid","10","isValidMonth","parseIntStrict","parseYear","isPast","month","parseMonth","year","formatExpYear","isExpYearValid","isExpYearPast","Date","now","strip","substr","getFullYear","is-valid-month","parse-int","parse-year","11","ccTypes","camel","getTypeByName","camel-case","creditcards-types","xtend","12","zeroFill","pad","expandYear","base","zero-fill","13","array","bit","sum","parseInt","charAt","14","ERROR_MESSAGE","Array","toStr","funcType","bind","that","target","TypeError","binder","bound","boundLength","Math","max","boundArgs","Function","Empty","15","numberIsNan","val","Infinity","number-is-nan","16","isInteger","floor","is-finite","17","is-integer","18","arr","19","LANGUAGES","tr","regexp","map","İ","I","İ","az","lt","J","Į","Ì","Í","Ĩ","str","lang","String","toLowerCase","20","x","21","int","22","expand","expand-year","23","lowerCase","NON_WORD_REGEXP","CAMEL_CASE_REGEXP","TRAILING_DIGIT_REGEXP","replacement","index","./vendor/camel-case-regexp","./vendor/non-word-regexp","./vendor/trailing-digit-regexp","lower-case","24","25","26","27","i̇","j̇","į̇","i̇̀","i̇́","i̇̃","toUpperCase","28","key","29","30","width","31","factory","$inject","$parse","restrict","compile","element","attributes","$set","scope","ngModel","$validators","ccCvc","$isEmpty","$viewValue","ccType","$watch","$validate","creditcards","function-bind","32","ccExp","controller","CcExpController","link","$scope","$element","nullFormCtrl","$setValidity","noop","parentForm","inheritedData","setMonth","monthCtrl","setYear","yearCtrl","setValidity","exp","expMonth","expYear","valid","$watchExp","watchExp","$modelValue","nullCcExp","ccExpMonth","controllers","$parsers","unshift","validateExpMonth","ccExpYear","fullYear","$formatters","validateExpYear","33","eagerType","$attributes","ccNumber","$ccType","setCursorPostion","position","setSelectionRange","createTextRange","range","move","select","ccEagerType","eagerTypeCheck","$ccEagerType","ccFormat","on","formatInput","input","previous","formatted","selectionEnd","$setViewValue","$render","trim","validateCcNumber","ccNumberType","validateCcNumberType","some","cast-array","34","angular","directive","./cvc","./expiration","./number","DD","bp","_minBreakpoints","_maxBreakpoints","_options","isResponsive","baseFontSize","breakpoints","px","staticRange","min","_initBreakpoints","_parseMinMaxInputs","_pxToEms","_bpToEms","_bpIsValidForStatic","_bpMin","_bpMax","_bpBetween","getHeight","is","isHeight","options","sortedBreakpoints","sort","b","len","last","parseValue","bpArray","resultMin","resultMax","indexOf","split","breakpoint","isMax","list","ems","bpValidMin","bpValidMax","parsed","bpMin","bpMax","bpType","matchMedia","matches","opts","bps","moment","fd","c","d","valueOf","h","Ja","utc","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","j","_pf","k","_isValid","gd","_d","getTime","invalidWeekday","_strict","bigHour","NaN","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","hd","id","updateOffset","p","q","ceil","abs","suppressDeprecationWarnings","console","warn","deprecationHandler","stack","v","jd","w","y","_config","_ordinalParseLenient","RegExp","_ordinalParse","z","A","set","B","C","D","nd","ld","_abbr","E","H","F","abbr","parentLocale","G","kd","od","K","L","M","O","N","P","Q","pow","R","sd","localeData","ordinal","S","T","pd","U","V","rd","invalidDate","longDateFormat","qd","lastIndex","W","Kd","X","Y","Z","Ld","_","_w","aa","_a","ba","UTC","getUTCDate","ca","_months","Vd","da","_monthsShort","ea","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","monthsShort","months","md","fa","_monthsParseExact","ga","monthsParse","date","ha","ia","ja","la","_monthsShortStrictRegex","_monthsShortRegex","ka","_monthsStrictRegex","_monthsRegex","ma","Nd","Od","Md","Pd","Qd","Rd","Sd","_overflowDayOfYear","_overflowWeeks","Td","_overflowWeekday","Ud","na","$d","exec","be","ce","ae","Ca","oa","de","createFromInputFallback","setFullYear","qa","getUTCFullYear","setUTCFullYear","ra","sa","ta","ua","getUTCDay","va","dayOfYear","wa","xa","week","ya","za","_useUTC","getUTCMonth","getMonth","getDate","Aa","Ba","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","GG","Ka","_week","dow","doy","gg","ISO_8601","_meridiem","Da","meridiemHour","isPM","Ea","score","Fa","day","hour","minute","second","millisecond","Ga","Ha","add","preparse","Ia","La","Ma","Na","Oa","quarter","_milliseconds","_days","_data","_bubble","Pa","Qa","utcOffset","Ra","ie","Sa","clone","setTime","local","Ta","round","getTimezoneOffset","Ua","Hd","_changeInProgress","jb","db","Va","Wa","Xa","subtract","Ya","Gd","Za","$a","_isDSTShifted","toArray","ab","bb","cb","ms","milliseconds","je","ke","eb","gb","from","to","fb","isAfter","isBefore","hb","ib","kb","startOf","diff","calendar","lb","mb","nb","endOf","ob","pb","qb","isSame","rb","sb","tb","ub","vb","toISOString","toDate","wb","isUtc","defaultFormatUtc","defaultFormat","postformat","xb","humanize","yb","zb","Ab","Bb","Cb","Db","hours","minutes","seconds","weekday","isoWeekday","Eb","Fb","Gb","Hb","Ib","Jb","years","Kb","Lb","Mb","Nb","Ob","isUTC","strict","Pb","Qb","Ub","Rb","isoWeek","Sb","Tb","Vb","Wb","Xb","Yb","Zb","$b","_b","ac","weekdaysParse","bc","_weekdays","isFormat","cc","_weekdaysShort","dc","_weekdaysMin","ec","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","weekdaysMin","weekdaysShort","weekdays","fc","_weekdaysParseExact","_fullWeekdaysParse","gc","getDay","hc","ic","jc","mc","_weekdaysStrictRegex","_weekdaysRegex","kc","_weekdaysShortStrictRegex","_weekdaysShortRegex","lc","_weekdaysMinStrictRegex","_weekdaysMinRegex","nc","oc","pc","qc","rc","_meridiemParse","sc","tc","uc","vc","wc","xc","yc","parseZone","zc","_calendar","Ac","_longDateFormat","Bc","_invalidDate","Cc","_ordinal","Dc","Ec","_relativeTime","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Le","Pc","Qc","Rc","Sc","Tc","Vc","Uc","days","Wc","Xc","Yc","as","Zc","$c","_c","ad","relativeTime","bd","_e","af","cd","dd","pastFuture","ed","bf","asSeconds","momentProperties","keys","td","ud","vd","wd","xd","yd","zd","Ad","Bd","Cd","Dd","Ed","Fd","Id","Jd","monthsShortRegex","monthsRegex","Wd","Xd","Yd","Zd","parseTwoDigitYear","ee","fe","ge","he","le","me","ne","weekYear","isoWeekYear","oe","pe","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","qe","re","se","te","ue","ve","_isPm","we","xe","ye","ze","Ae","Be","Ce","fromNow","toNow","invalidAt","isBetween","isSameOrAfter","isSameOrBefore","parsingFlags","toObject","toJSON","unix","creationData","isLeapYear","quarters","daysInMonth","weeks","isoWeeks","weeksInYear","isoWeeksInYear","hasAlignedHourOffset","isDST","isDSTShifted","isLocal","isUtcOffset","zoneAbbr","zoneName","dates","zone","De","Ee","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","Fe","LTS","LT","LL","LLL","LLLL","Ge","He","Ie","Je","future","past","mm","hh","MM","yy","Ke","firstDayOfYear","firstDayOfWeek","ordinalParse","langData","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","cf","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","toIsoString","version","isDate","invalid","duration","isMoment","isDuration","defineLocale","updateLocale","locales","normalizeUnits","relativeTimeThreshold","df","blocks","h0","h1","h2","h3","h4","h5","h6","h7","block","start","bytes","hBytes","finalized","hashed","is224","charCodeAt","constructor","ArrayBuffer","Uint8Array","isView","update","oKeyPad","inner","sharedMemory","JS_SHA256_NO_WINDOW","JS_SHA256_NO_NODE_JS","process","versions","node","JS_SHA256_NO_COMMON_JS","JS_SHA256_NO_ARRAY_BUFFER","JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW","buffer","create","eval","createHash","digest","lastByteIndex","hash","finalize","hex","arrayBuffer","DataView","setUint32","sha256","sha224","hmac","default","abbrs","offsets","untils","population","_set","zones","toTimeString","at","offset","offsetScore","abbrScore","localeCompare","Intl","DateTimeFormat","resolvedOptions","timeZone","scoreOffsetAt","didShowError","error","tz","_index","countries","moveAmbiguousForward","moveInvalidForward","dataVersion","_zones","_links","_names","_countries","load","links","zoneExists","guess","names","Zone","unpack","unpackBase60","needsOffset","zonesForCountry","_z","defaultZone","setDefault","app","BikeQuoteModel","MODULE_INFO","userInputRepository","serviceResponseRepository","quoteOptions","quoteRequestRepository","Util","selectedQuote","getSelectedQuoteResult","selectedQuoteForPayment","getSelectedQuoteResultForPayment","_getUserInputValueFor","dotSeperatedFieldPath","userInput","findHierarchyStringInObject","_getServiceResponseValueFor","serviceName","getLastResponseFrom","_ridersHave_threeYears_restrictedSuspendedDisqualifiedCancelled","riders","ridersLength","atLeastOneRiderHas","rider","threeYears_restrictedSuspendedDisqualifiedCancelled","_ridersHave_threeYears_accidentsClaims","threeYears_accidentsClaims","_ridersHave_fiveYears_chargedOrConvicted","fiveYears_chargedOrConvicted","email","bikeForm","regoDetails","tellUsYourRegoNumber","regoNumber","goodRetailPrice","bikeRetailValue","annualCoverType","getAnnual","monthlyCoverType","getMonthly","quoteResult","coverageOptions","coverageOptionsToShow","op","required","hasCoverageOptions","excess","namedRiderExcess","findNamedRiderExcess","motorcycleValue","sumInsuredAmount","displayableExcessList","getDisplayableExcess","isCoverSummary","filterOut","flexiExcessExcess","feItemValue","standardValue","excessValue","getSelectionExcess","flexiExcessRange","flexiExcessOptions","idx","standardExcess","qr","response","motorcycles","forEach","calculatedExcess","firstName","person","lastName","dob","dateOfBirth","savedQuoteResult","excludedRiders","riderUsage","hasExcludedRiders","postCode","campaignCode","bikeDetails","bikeDetailsUsage","primaryBikeUse","commercialActivityType","label","businessActivityType","getStarted","personOrCompany","policyStartDate","additionalRiders","mainRider","mainPolicyHolderContact","phoneNumber","primaryPhoneNumber","splice","noClaimBonus","aboutYourBike","address","postalCode","state","promotionalCode","quoteId","getSelectedQuoteCredentials","quoteID","gtmPolicyHolder","gtmTransactionAffiliation","insuranceType","productCode","CaravanQuoteModel","_driversHave_fourYears_licenceRSDC","drivers","driversLength","atLeastOneDriverHas","driver","fourYears_licenceRSDC","_driversHave_fourYears_chargedOrConvictedOffences","fourYears_chargedOrConvictedOffences","_driversHave_fourYears_vehicleAccidentsClaims","fourYears_vehicleAccidentsClaims","_driversHave_tenYears_chargedOrConvictedOffences","tenYears_chargedOrConvictedOffences","caravanForm","vehicleInfo","caravans","caravanInfo","vehicleType","agreedValue","generalContentsValue","specifiedContentItems","totalSpecifiedContentValue","items","total","item","totalContentsValue","annexeCost","sumInsured","contentsSumInsured","purchaseMonth","purchaseYear","purchaseDate","isCaravanRegistered","vehicleOptionalEquipments","optionalEquipments","showLayupDiscount","showOnsiteDiscount","namedDriverExcess","findNamedDriverExcess","excludedDrivers","findExcludedDrivers","quote","driverUsage","hasExcludedDrivers","caravanDetails","primaryUse","additionalDrivers","mainDriver","aboutYourCaravan","searchType","make","model","bodyType","berths","weight","caravanLength","manualLength","lengthUnits","manualLengthUnits","customBuilt","yearMakeModel","modelYear","mainPolicyHolder","CTPModel","HomeQuoteModel","$rootScope","selectedOffering","getSelectedOffering","rootScope","maxSumInsured","minSumInsured","getHomeNeedType","homeForm","tellUsHowWeCanInsureYou","coverNeeds","building","content","contents","getAge","dateString","homeHowIsHomeOccupied","tellUsAboutTheProperty","howIsHomeOccupied","showIsBuiltToCycloneStandards","cycloneParams","cycloneRating","enrichment","addressLine1","floodRisk","cycloneRiskSeverity","cycloneRisk","getOfferings","homeOccupancy","buildingType","needs","typeOfBuilding","offerings","_getOfferings","needRapidEstimate","getCycleData","cycleCover","isByCompany","letsGetStarted","getinsuranceHistoryYear","insuranceHeldFor","insuranceHeldForMapping","noPreviousInsurance","lessThan1year","oneYear","twoYears","threeYears","fourOrMoreYears","isRapidEstimatePanelVisible","display","isLowRisk","isBuildingFloodSafe","floodRiskSeverity","isInFloodZone","risk","isSumInsuredInLowerRange","isSumInsuredInUpperRange","cordelInfo","upperBand","floodZoneAccuracy","fireRiskSeverity","fireRisk","fireZoneAccuracy","dwelling","lowerBand","offering","aboutYourHome","policyContactType","startCoverDate","policyContact","aboutCompanyContact","PaymentsQuoteModel","QuoteModel","_aggregator","markedForDelete","isReplacementAvailable","selectedCar","modelAge","getValidReplacementMonths","whenDidYouBuyYear","replacementMonths","monthOptions","monthIndex","yearsOld","getValidReplacementYears","replacementYears","yearOptions","startYear","currentYear","vehicleForm","vehicles","carDetails","carDetailsUsage","primaryCarUse","aboutYourCar","retrievedQuoteRego","JsonMapper","responseRepository","mapValues","valueStringArray","mappedValueStarIndices","isDefault","lastKey","pop","nextKey","vsa","startIndices","propetyName","substring","propetyVal","indiceValue","createChildProperty","fetchValue","requestData","sourceIdentifier","getSource","shift","transform","mapping","inflated","convert","converterFn","setDefaultValues","MergedQuoteResultModel","coverType","quoteResults","addQuoteResult","freq","paymentFrequencyMapping","paymentFrequency","getQuoteResult","forgeQuoteResult","everyyear","monthly","everyotherweek","premiumConstant","fortnightly","deepClone","annual","isForgedPremium","totalPremium","paymentPlan","installment","getFortnightly","PortalServiceWrapper","guideWireService","retrieveSavedQuoteResponseTransformer","quoteServiceResponseTransformer","updateQuote","getLastRequest","getLastResponse","handleSaveQuoteResponse","resp","data","updateQuoteCredentials","saveQuote","paymentOption","params","getSaveQuoteRequest","credentials","qq","then","quickQuoteParams","rating","checkUWQuote","checkUWBind","ruleSet","getQuoteParams","rules","price","purchase","handleQuickQuoteResponse","setAvailableQuoteResults","updateSelectedCoverTypeIfNoLongerAvailableIn","setDefaultCoverType","checkEmbargo","postcode","embargoes","catch","err","getQuickQuote","permutations","updateSelectedCoverType","coverTypes","getSelectedCoverType","multiQuoteRequest","splitQuotes","triggerGoalSaveQuote","marketingAuto","marketingAutomations","maCreateQuote","createQuote","request","getQuoteTriggerRequest","QuoteId","QuoteStatus","GoalId","Source","ChannelId","EventId","triggerGoal","triggerGoalCompleteQuote","maCompleteQuote","completeQuote","testQuoteDecline","declineQuoteOptions","handleDeclineAndReferralResponse","declineType","detectDeclineType","declineParams","declineCodes","uwIssues","typeCode","sendDeclineMessagesTOGTM","dataLayer","trackingData","event","declineCode","errors","messages","message","decline","embargo","referral","retrieveSavedQuote","refreshAddress","refreshVehicleDetails","vgiId","effectiveDate","searchedData","refreshCaravanDetails","doesUserExist","QuoteRequestRepository","storage","quoteConfiguration","structuredRequestTransformer","defaultValueRequestTransformer","formatConverterTransformer","cleanRequestTransformer","splitterRequestTransformer","publicIDTransformer","policyHolderHandler","coverTypeTransformer","coverTypeResolver","coverOfferingResolver","triggerGoalTransformer","lastQuoteResponse","getUserInput","updateQuoteRequest","quoteRequest","forgePublicId","moduleName","stringFormat","generateRandomString","moduleNameMapping","vehiclesDriver","vehiclesPolicyDriver","vehiclesPerson","vehiclesDriverHistory","caravansDriver","caravansPolicyDriver","caravansPerson","caravansDriverHistory","motorcyclesDriver","motorcyclesPolicyDriver","motorcyclesPerson","motorcyclesDriverHistory","quotePermutations","transformQuickQuoteRequest","quotes","structuredRequest","valueSubbedRequest","valueReformattedRequest","cleanedRequest","transformSaveQuoteRequest","quoteType","paymentForm","paymentDetails","paymentStartDate","firstAnchorDate","firstDayOfMonth","offeringDescriptor","descriptor","cred","secret","lastResponse","findMatchingQuoteResponse","productType","isObject","policyHolderhandledRequest","handle","lastQuote","lastQuickQuote","resolve","addDriverFromQuickQuote","getCoverTypeSelector","quoteResponse","coverTypeSelector","fullQuoteResponse","respBody","headers","quoteRequestCredentials","eyUserToken","setItem","allCoverTypesByKey","selectedCoverType","getItem","creds","clearQuoteCredentials","driverType","lastQuick","quickQuoteLength","quoteLength","lengthDiff","quickQuoteItems","quoteItems","startIndex","policyDriver","driverHistory","historyType","publicID","isDefined","history","QuoteResultModelBuilder","quoteResultsByType","quoteCoverIndicator","getMergedQuoteResults","clear","QuoteServiceResponseTransformer","quoteResultModelBuilder","quoteResultModelFactory","quoteResponses","newQuoteResultModel","oldResults","updatedQuoteResults","updateQuoteResults","filteredQuoteResults","filterQuoteResults","currentResults","cqr","isCoverAvailable","addOrUpdateQuoteResult","removeAllCoverTypeMatches","matchingOldResult","findCompleteMatch","oldResultIndex","partialMatches","findCoverTypeMatches","matchingQuoteResponses","matchingQuoteResponse","ServiceResponseRepository","serviceResponses","SplitterRequestTransformer","jsonMapper","getQuoteResponseValue","qouteResponse","pathString","transformedRequest","transformExistingQuote","transformNewQuote","generatePermutationsArray","paymentFrequencies","permutation","option1","option2","quoteResponseBody","matchingResponse","nr","arrayFill","BikeCleanRequestTransformer","intermediateRequest","bike","policyHolders","motorcycleInfo","description","bikeType","ratingGrade","vehicleKey","accountLocation","totalAccessoriesPrice","totalModificationsPrice","youngestRiderDateOfBirth","policyRider","_HTMLID","threeYears_accidentsClaimsDetails","threeYears_restrictedSuspendedDisqualifiedCancelledDetails","fiveYears_chargedOrConvictedDetails","title","isMemberOfClub","isTheMainRider","licensedToRide","motorcycleClub","yearsHeld","previousInsurer","isMainRiderMainPolicyHolder","postalOption","hasClaim","hasConviction","currentInsurer","relationWithMainRider","policyHolder","contact","$$hashKey","anyInfringements","anyLostLicences","MaxNoClaimBonus","numberOfOtherRiders","provisionalLicence","youngestRider","youngestRiderDob","youngestRiderGender","primaryAddress","contactType","authorisedPersons","sumInsuredType","ex","BikeCoverTypeTransformer","util","coverTypeDescriptor","BikeDefaultValueRequestTransformer","formatDateAndTimeTheGuidewireWay","time","timeFormatted","staticValuesMapping","motorcycles.0.bikeUsage","motorcycles.0.damage","motorcycles.0.isMemberOfClub","motorcycles.0.isTheMainRider","motorcycles.0.motorCycleUsage","motorcycles.0.isFinanced","motorcycles.0.isBikeModified","motorcycles.0.businessUsage","motorcycles.0.garageType","motorcycles.0.motorcycleClub","motorcycles.0.sumInsuredType","motorcycles.0.motorCycleKilometers","motorcycles.0.isAccessoriesAdded","motorcycles.0.coverType","motorcycles.0.accessoriesPrice","motorcycles.0.totalModificationsPrice","motorcycles.0.totalAccessoriesPrice","motorcycles.0.accountLocation.addressType","motorcycles.0.sumInsuredAmount","motorcycles.0.riders.*.licensedToRide","motorcycles.0.riders.*.rider.currentInsurer","motorcycles.0.riders.*.rider.yearsLicenced","motorcycles.0.riders.*.rider.licenceType","motorcycles.0.riders.*.rider.relationWithMainRider","motorcycles.0.riders.*.rider.noClaimBonus","motorcycles.0.riders.*.rider.person.gender","motorcycles.0.riders.*.rider.person.firstName","motorcycles.0.riders.*.rider.person.lastName","motorcycles.0.riders.*.rider.person.contactType","motorcycles.0.riders.*.rider.person.dateOfBirth","policyHolders.*.contact.primaryAddress.addressType","motorcycles.0.availableCoverTypes","motorcycles.0.availableSumInsuredTypes","motorcycles.0.excess.ageExcess","motorcycles.0.excess.flexiExcessExcess","motorcycles.0.excess.inexperiencedRiderExcess","motorcycles.0.excess.riderTrainingExcess","motorcycles.0.excess.standardExcess","motorcycles.0.excess.theftClaimsExcess","motorcycles.0.excess.unListedRiderExcess","policyHolders.0.mainHolder","policyHolders.0.contact.contactType","policyHolders.0.contact.firstName","policyHolders.0.contact.lastName","policyHolders.0.contact.dateOfBirth","policyHolders.0.contact.primaryPhone","status","documentDeliveryMethod","displayStatus","periodStartDateTimeAEDT","periodEndDateTimeAEDT","channel","motorcycles.0.riders.*.riderUsage","BikeFormatConverterTransformer","convertDateAndTimeTheGuidewireWay","dateTime","convertDate","formattedDate","convertDateToGWTimeZone","convertGender","gender","male","female","intersex","convertFalsyToUnknown","convertBooleanToYesNo","convertStringToInt","convertIntToString","convertValueMapping","periodStartDate","policyHolders.*.contact.gender","policyHolders.*.contact.hasClaim","policyHolders.*.contact.hasConviction","policyHolders.*.contact.anyLostLicence","policyHolders.*.contact.anyInfringements","policyHolders.*.contact.dateOfBirth","policyHolders.*.contact.authorisedPersons.0.person.dateOfBirth","policyHolders.*.contact.authorisedPersons.0.person.gender","motorcycles.0.purchaseDate","motorcycles.0.youngestRiderDOB","motorcycles.0.youngestRiderGender","motorcycles.0.motorcycleInfo.modelYear","motorcycles.0.riders.*.rider.hasConviction","motorcycles.0.riders.*.rider.person.hasConviction","motorcycles.0.riders.*.rider.hasClaim","motorcycles.0.riders.*.rider.person.hasClaim","motorcycles.0.riders.*.rider.hasLostLicence","motorcycles.0.riders.*.rider.riderHistory.*.year","BikePolicyHolderHandler","mainPolicyholder","passwordQuestion","passwordAnswer","primaryPhone","cellPhone","homePhone","workPhone","BikePublicIDTransformer","aggregatedRemoveService","currentResponse","driverUniqueIdCtr","historyUniqueIdCtr","hasValidGWPublicID","md5","fetchFromPreviousResponse","path","convertPublicID","lastPublicID","policyAddress","motorcycle","modification","accessories","riderHistory","drivingHistory","publicIDTransformationMapping","policyAddress.publicID","motorcycles.0.publicID","motorcycles.0.accountLocation.publicID","motorcycles.0.qpyCycleModifications.*.publicID","motorcycles.0.qpyMotorcycleAccessories.*.publicID","motorcycles.0.riders.*.publicID","motorcycles.0.riders.*.uniqueID","motorcycles.0.riders.*.rider.publicID","motorcycles.0.riders.*.rider.person.publicID","motorcycles.0.riders.*.rider.person.primaryAddress.publicID","motorcycles.0.riders.*.rider.riderHistory.*.publicID","motorcycles.0.riders.*.rider.riderHistory.*.uniqueID","policyHolders.*.contact.publicID","policyHolders.*.contact.primaryAddress.publicID","policyHolders.*.contact.drivingHistory.*.publicID","authorisedPersonsPublicIDTransformationMapping","policyHolders.*.contact.authorisedPersons.0.person.publicID","policyHolders.*.contact.authorisedPersons.0.person.primaryAddress.publicID","publicIDConversionMapping","mappedValueStarIndex","modifications","authorisedPersonsPublicIDConversionMapping","removeDeletedAdditionalRiders","removedRiders","getList","savedRiders","removedRider","matchingRider","removeDeletedRiderHistoryArrays","savedHistories","riderHistories","savedHistory","matchingInput","removeEmptyRiderHistoryArrays","addUniqueHistoryID","uniqueID","BikeQuoteResultModel","quoteResultResponse","totalFSL","totalGST","totalStampDuty","premiumAfterDiscount","availableSumInsuredTypes","upper","agreedValueUpper","lower","agreedValueLower","BikeRetrieveSavedQuoteResponseTransformer","$filter","transformers","camelcase","today","financeType","yesNo","checkbox","purchaseMonthFromMonthYear","monthYear","purchaseYearFromMonthYear","thirdPartyPref","mod","accessory","transformPerson","transformMapping","returnObject.title","returnObject.firstName","returnObject.lastName","returnObject.gender","returnObject.dateOfBirth","convertMapping","transformedPerson","returnObject","transformRider","returnObject.yearsHeld","returnObject.licenceType","returnObject.noClaimBonus","returnObject.previousInsurer","returnObject.licensedToRide","returnObject.threeYears_accidentsClaims","returnObject.fiveYears_chargedOrConvicted","returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled","returnObject.visaType","mappedRider","transformedRider","record","filter1","extractHistory","globals","collection","matchedPattern","opt","capitalize","extractPolicyHolderHistory","riderPattern","riderMonth","transformPolicyHolder","holder","transformedPolicyHolder","retrievedQuoteResponse","returnObject.getStarted.policyStartDate","returnObject.getStarted.personOrCompany","returnObject.tellUsABitMore.yourEmailAddress","returnObject.tellUsABitMore.promotionalCode","returnObject.address","returnObject.motorcycleInfo","returnObject.aboutYourBike.purchaseDate","returnObject.aboutYourBike.bikeCost","returnObject.modificationsAccessories.modifications","returnObject.modificationsAccessories.accessories","returnObject.bikeDetails.locationParked","returnObject.bikeDetails.isItFinanced","returnObject.bikeDetails.financeWith","returnObject.bikeDetails.kilometres","returnObject.bikeDetails.primaryBikeUse","returnObject.bikeDetails.businessActivityType","returnObject.bikeDetails.commercialActivityType","returnObject.bikeDetails.existingDamage","returnObject.tellUsYourRegoNumber.regoNumber","returnObject.mainPolicyHolderContact.passwordQuestion","returnObject.mainPolicyHolderContact.passwordAnswer","returnObject.mainPolicyHolderContact.primaryPhone","transformedQuote","qpyCycleModifications","mods","modificationsAccessories","modificationsTable","modificationValue","purchasePrice","qpyMotorcycleAccessories","acc","accessoriesTable","accessoryValue","mainHolder","personalContactDetailsMailingPreference","aboutCompany","abn","emailAddress1","officePhone","companyAddress","companyContact","authorisedPerson","companyContactDetailsPostalOption","companyContactTitle","prefix","companyContactFirstName","companyContactLastName","companyContactGender","companyContactDateOfBirth","companyContactDetailsAddress","companyContactDetailsEmail","companyContactDetailsPostalAddress","companyContactDetailsMailingPreference","preferredNumber","enterAQuestion","passwordQuestionStr","additionalPolicyHolders","BikeStructureRequestTransformer","structureQuoteMapping","motorcycles.0","motorcycles.0.otherRidersCount","motorcycles.0.motorcycleInfo","motorcycles.0.accountLocation","motorcycles.0.purchasePrice","motorcycles.0.youngestRiderDateOfBirth","motorcycles.0.riders","motorcycles.0.riders.0.licensedToRide","policyHolders.*.contact.prefix","policyHolders.0","policyHolders.0.contact.gender","policyHolders.0.contact.emailAddress1","policyHolders.0.contact.primaryAddress","policyAddress.addressType","mainContactAddress","postalAddress","updateIsMotorRegistered","isMotorRegistered","updatePolicyHolderPrimaryAddress","addressType","findYoungestRider","youngest","isYounger","otherRider","updateModifications","updateKilometres","kilometres","motorCycleKilometers","updateGarageType","locationParked","garageType","updateFinancier","isItFinanced","isFinanced","financier","financeWith","updateDamage","existingDamage","damage","updateUsage","motorCycleUsage","updateMotorcycleInfo","businessUsage","commercialUsage","updateRiders","yearsLicenced","hasLostLicence","rh","updatePolicyHolders","companyDetails","transformedContact","tellUsABitMore","yourEmailAddress","updateAccountLocation","updateAdditionalRiders","fromRapidEstimate","fromFullQuote","youngRider","otherRiderHasProLicense","licenceType","youngestRiderDOB","otherRiderUsageTimes","updateRegoDetails","registrationNumber","updateCompanyContactDetails","isJustInsured","updateMotorcycleInsuranceTypeAndAmount","insuredExcessValue","comprehensivePref","flexiExcess","updateEmail","updatePolicyAddress","isPostalOption","transposeMonth","monthName","January","February","March","April","May","June","July","August","September","October","November","December","BikeTriggerGoalTransformer","Email","FirstName","LastName","AddressLine","City","city","State","PostCode","CountryCode","Product","UserAgent","HomeCleanRequestTransformer","contactNumber","cleanPolicyHoldersPhoneNumber","personContactSamePostalAddress","additionalContactSamePostalAddress","tenYears_chargedOrConvictedOffencesDetails","dwellingHistory","companyContactSamePostalAddress","dwellings","location","phoneType","contactInfo","HomeCoverTypeTransformer","HomeDefaultValueRequestTransformer","isInsuredsOverTheAge","isInsuredsRetired","anyConvictionsQuestion","hasPortableContentsClaims","includeFloodCover","policyHolders.0.contact.authorisedPersons.*.person.firstName","policyHolders.0.contact.authorisedPersons.*.person.lastName","policyHolders.0.contact.authorisedPersons.*.person.dateOfBirth","policyHolders.*.contact.passwordQuestionStr","policyHolders.*.contact.passwordQuestion","policyHolders.*.contact.passwordAnswer","dwellings.0.buildingType","dwellings.0.externalWallMaterial","dwellings.0.homeOccupancy","dwellings.0.coverType","dwellings.0.buildingSumInsured","dwellings.0.contentSumInsured","dwellings.0.offering","dwellings.0.hasGeneralPortableContents","dwellings.0.portableCoverCountry","dwellings.0.hasPortableContentsHomeAway","dwellings.0.policyOption","dwellings.0.policyOption.isBuildingAccidentalDamage","dwellings.0.policyOption.isContentsAccidentalDamage","dwellings.0.policyOption.isContentsDomesticWorkerComp","dwellings.0.policyOption.isContentsStoredAway","dwellings.0.policyOption.specifyCycleEquipment","dwellings.0.policyOption.isContentsCycleCover","dwellings.0.isSubUrbanLocated","dwellings.0.isRenovated","dwellings.0.isIncomeGenerated","dwellings.0.isMortgagePresent","dwellings.0.isUnrelatedPeople","dwellings.0.isUnitAboveGround","dwellings.0.isPortionAboveGround","dwellings.0.isCommunitySurrounded","dwellings.0.hasSpecifiedPortableContList","dwellings.0.hasIndividualContents","dwellings.0.homeLevels","dwellings.0.isGroundLevelElevated","dwellings.0.roofMaterial","dwellings.0.yearsContInsurance","dwellings.0.hasEntertainmentEquipment","dwellings.0.hasWorksArt","dwellings.0.homeBuiltYear","dwellings.0.isWaterTight","dwellings.0.renovationCost","dwellings.0.locationProperty","dwellings.0.locationProperty.knowHomeSize","dwellings.0.locationProperty.hasDuctedAirConditioning","dwellings.0.locationProperty.hasInGroundPool","dwellings.0.locationProperty.hasTennisCourt","dwellings.0.locationProperty.hasGrannyFlat","dwellings.0.locationSecurity","dwellings.0.locationSecurity.hasWindowScreenBars","dwellings.0.locationSecurity.isGatedCommunity","dwellings.0.locationSecurity.hasFixedHomeSafe","dwellings.0.locationSecurity.haveSecurityAlarm","dwellings.0.locationSecurity.hasWindowKeylocks","dwellings.0.locationSecurity.hasDoorSecurityScreen","dwellings.0.locationSecurity.hasDoorDeadlocks","dwellings.0.locationSecurity.has24HourConcierge","dwellings.0.locationSecurity.isSecurityRatedBuilding","dwellings.0.locationProperty.hasSheds","dwellings.0.isCycloneStandardlyBuilt","staticValuesMappingNew","ApplyDefaultExcess","getStateDefaultVoluntaryExcess","tempObj","dwellings.0.excess.voluntaryExcess","portableExcessValue","tempObj2","dwellings.0.excess.portableContentVoluntaryExcess","HomeFormatConverterTransformer","getMonthString","monthInFigure","objDate","toLocaleString","getMonthNumber","monthInString","monthObj","convertHomelevels","convertNumberToStringPattern","zeroValue","stringValue","convertNumberToStringPatternZeroSingular","dwellings.*.isUnitAboveGround","dwellings.*.isPortionAboveGround","dwellings.*.isCycloneStandardlyBuilt","dwellings.*.homeLevels","dwellings.*.locationSecurity.hasDoorDeadlocks","dwellings.*.locationSecurity.hasDoorSecurityScreen","dwellings.*.locationSecurity.hasWindowKeylocks","dwellings.*.locationSecurity.hasWindowRollerShutter","dwellings.*.locationSecurity.hasWindowScreenBars","dwellings.*.locationSecurity.isGatedCommunity","dwellings.*.locationSecurity.hasFixedHomeSafe","dwellings.*.locationSecurity.isSecurityRatedBuilding","dwellings.*.locationSecurity.haveSecurityAlarm","dwellings.*.locationSecurity.has24HourConcierge","policyHolders.*.contact.dwellingHistory.*.eventMonth","policyHolders.*.contact.authorisedPersons.*.person.gender","policyHolders.*.contact.authorisedPersons.*.person.dateOfBirth","dwellings.0.locationProperty.numberOfBedrooms","dwellings.0.locationProperty.numberOfBalconies","dwellings.0.locationProperty.numberOfVerandahs","dwellings.0.locationProperty.numberOfCarports","dwellings.0.locationProperty.numberOfGarages","dwellings.0.locationProperty.numberOfLargeSheds","dwellings.0.locationProperty.numberOfSmallSheds","HomePolicyHolderHandler","HomePublicIDTransformer","policyHoldersContact","mortgagees","cycles","cycleEquipments","dwellingHistories","policyHolders.*.publicID","policyHolders.*.contact.dwellingHistory.*.publicID","dwellings.0.publicID","dwellings.0.location.publicID","policyHolders.*.contact.authorisedPersons.*.person.publicID","policyHolders.*.contact.authorisedPersons.*.person.primaryAddress.publicID","dwellings.*.mortgagees.*.publicID","dwellings.*.policyOption.cycles.*.publicID","dwellings.*.policyOption.cycleEquipments.*.publicID","dwellings.*.dwellingHistories.*.publicID","quickQuote","HomeQuoteResultModel","isStandardOffering","isPrestigeOffering","HomeRetrieveSavedQuoteResponseTransformer","returnDate","hasValue","itemCount","itemString","itemObj","no_balconies_or_decks","no_verandahs","0_item","1_item","2_items","3_items","4_items","5_items","6_items","7_items","8_items","9_items","10_items","11_items","itemCountGarages","no_garages","garage_for_1_car","garage_for_2_cars","garage_for_3_cars","garage_for_4_cars","garage_for_5_cars","garage_for_6_cars","itemCountCarPort","no_carports","carport_for_1_car","carport_for_2_cars","carport_for_3_cars","carport_for_4_cars","carport_for_5_cars","carport_for_6_cars","cycleNameMapping","mountain_bike","road_bike","bmx","track_bike","motorised_bike","custom_parts","travel_case","cycling_apparel","cycling_computer","coverMapping","building_only","contents_only","building_and_contents","multi_item_loss","bicycle","camping_equipment","clothing","computer_equipment","eye_ware","firearm","gps_device","hearing_aid","in_vault_item","jewellery","mobile_phone","music_games_media","personal_medical_item","personal_valuable_item","photographic_equipment","portable_music_instrument","prosthetics","other_portable_item","sporting_equipment","tablet","watch","monthFromNumber","monthNumber","01","02","03","04","05","06","07","08","09","transformBuilding","buildingDetails","slope","landSlope","slopeType","transformTellUsAboutBuilding","isHomeElevated","transformInsuranceHistory","insuranceHistory","_portableClaimHistory","_claimHistory","isPortableContents","coverAffected","contentCategory","eventMonth","claimType","claimDetails","portableClaimDetails","transformCycleCover","_cycleList","_coverItemsList","cycleList","typeOfBicycle","coverItemsList","category","coverItems","transformMortgageOnProperty","mortgageOnProperty","propertyMortgagedWith","isPropertyUnderMortgage","_mortgageWith","mortgagee","transformSecurity","securityTransform","_securityExternalDoors","deadlocks","security","hasDoorDeadlocks","door_security_screen","hasDoorSecurityScreen","_securityExternalWindows","keylocks","hasWindowKeylocks","roller_shutter","hasWindowRollerShutter","security_screens_or_bars","hasWindowScreenBars","_otherSecurity","gated_community","isGatedCommunity","24_hour_concierge","has24HourConcierge","fixed_home_sage","hasFixedHomeSafe","security_rated_building","isSecurityRatedBuilding","24_hour_monitored_alarm","haveSecurityAlarm","securityExternalDoors","securityExternalWindows","otherSecurity","transformNeeds","needTransform","fullData","rent_default","malicious_damage","policyOption","isRentDefaultCover","theftAndVandalismByTenants","theftCoverContents","theftCoverBuilding","transformMainPolicyHolder","mainPolicyHolder.gender","mainPolicyHolder.dateOfBirth","mappedValue","_convictionHistory","conviction","_conviction","personContactResidentialAddress","personContactMailingPreference","personContactEnterAQuestion","aboutTheCompany","companyContactContact","companyContactResidentialAddress","companyContactMailingPreference","transformOtherPolicyHolder","_contact","transformPolicyHolders","_policyHolders","_policyHolderOldestDOB","tellUsAboutInsured","dobOldestInsured","returnObject.tellUsAboutTheProperty.address","returnObject.tellUsAboutTheProperty.typeOfBuilding","returnObject.tellUsAboutTheProperty.wallsMadeOf","returnObject.tellUsAboutTheProperty.howIsHomeOccupied","returnObject.tellUsAboutTheProperty.propertyProfessionalAgent","returnObject.tellUsHowWeCanInsureYou.coverType","returnObject.tellUsHowWeCanInsureYou.policyOption","returnObject.tellUsHowWeCanInsureYou.needCoverOutsideHome","returnObject.letsGetStarted.personOrCompany","returnObject.letsGetStarted.startCoverDate","returnObject.tellUsAboutTheBuilding.yearHomeBuilt","returnObject.tellUsAboutTheBuilding.isStrataRegdCorp","returnObject.tellUsAboutTheBuilding.areUnitAboveBelow","returnObject.tellUsAboutTheBuilding.corpInsureUnit","returnObject.tellUsAboutTheBuilding.isSuburbanBlock","returnObject.tellUsAboutTheBuilding.isBlockLarger","returnObject.tellUsAboutTheBuilding.waterSource","returnObject.tellUsAboutTheBuilding.waterTankCapacity","returnObject.tellUsAboutTheBuilding.isEmergencyFuelWaterTank","returnObject.tellUsAboutTheBuilding.isBuildingRelocatable","returnObject.tellUsAboutTheBuilding.areFoundationsSecured","returnObject.tellUsAboutTheBuilding.isFixedPlumbingElectricityConnect","returnObject.tellUsAboutTheBuilding.roofMake","returnObject.tellUsAboutTheBuilding.isHomeElevated","returnObject.tellUsAboutTheBuilding.isPortionBelowGround","returnObject.tellUsAboutTheBuilding.homeLevels","returnObject.tellUsAboutTheBuilding.isNationalTrustListed","returnObject.tellUsAboutTheBuilding.isHomeWired","returnObject.tellUsAboutTheSecurity.security","returnObject.renovationsAndResidents.isHomeUnderRepairs","returnObject.propertyUsage.isPropertyForBusiness","returnObject.propertyUsage.propertyActivityDegree","returnObject.propertyUsage.propertyActivities","returnObject.propertyUsage.propertyAgricultureActivities","returnObject.mortgageOnProperty.propertyMortgagedWith","returnObject.buildingDetails.homeBuiltStandard","returnObject.buildingDetails.landSlope","returnObject.buildingDetails.slopeType","returnObject.buildingDetails.homeTotalArea","returnObject.buildingDetails.homeArea","returnObject.buildingDetails.homeAreaUnit","returnObject.buildingDetails.homeBedrooms","returnObject.buildingDetails.homeBedroomSize","returnObject.buildingDetails.homeDecks","returnObject.buildingDetails.homeVerandahs","returnObject.buildingDetails.homeCarports","returnObject.buildingDetails.homeGarages","returnObject.buildingDetails.homeSheds","returnObject.buildingDetails.largeSheds","returnObject.buildingDetails.smallSheds","returnObject.buildingDetails.homeFeatures.ducted_airconditioning","returnObject.buildingDetails.homeFeatures.in_ground_swimming_pool","returnObject.buildingDetails.homeFeatures.tennis_court","returnObject.buildingDetails.homeFeatures.granny_flat","returnObject.buildingDetails.grannyFlatSize","returnObject.buildingDetails.isBuiltToCycloneStandards","returnObject.yourBuilding.buildingSumInsured","returnObject.yourContents.contentsSumInsured","returnObject.portableContents.coverPortableContents","returnObject.portableContents.coverPortableContentsRegion","returnObject.portableContents.coverPortableContentLimit","returnObject.portableContents.portableContentsSpecifiedCover","returnObject.accidentalLossOrDamage.coverAccDmgBuilding","returnObject.accidentalLossOrDamage.coverAccDmgContents","returnObject.cycleCover.coverCycle","returnObject.cycleCover.coverCycleExtendOption","returnObject.cycleCover.cycleList","returnObject.cycleCover.coverItemsList","returnObject.rentDefault.rentDefault","returnObject.rentDefault.rentCurrentWeekly","returnObject.rentDefault.rentXWeeks","returnObject.theftAndVandalismByTenants.theftCoverContents","returnObject.theftAndVandalismByTenants.theftCoverBuilding","returnObject.specifiedHighRiskItems.riskCoverIndividualWorks","returnObject.specifiedHighRiskItems.riskEntertainmentEquipment","returnObject.domesticWorkerCompensation.domesticWorkerCompCover","returnObject.tellUsAboutInsured.dobOldestInsured","returnObject.tellUsAboutInsured.isRetired","returnObject.insuranceHistory.history","returnObject.insuranceHistory.insuranceHeldFor","returnObject.insuranceHistory.previousInsurer","returnObject.insuranceHistory.claimInLastYear","returnObject.insuranceHistory.portableClaim","returnObject.policyHolders","returnObject.info","returnObject.info.offering","returnObject.tellUsAboutTheBuilding.isBuiltToCycloneStandards","tellUsAboutTheSecurity","tellUsAboutTheBuilding","HomeSplitterRequestTransformer","counter","HomeStructureRequestTransformer","dwellings.0","dwellings.0.location","dwellings.0.policyOption.rentDefaultAmount","dwellings.0.policyOption.rentDefaultWeeks","dwellings.0.policyOption.isPropertyAgentManaged","dwellings.0.previousInsurer","dwellings.0.hasInsuredClaims","dwellings.0.dwellingHistories","dwellings.0.dwellingClaimHistories","dwellings.0.dwellingPortableClaimHistories","dwellings.0.isStrataRegisteredBody","dwellings.0.isUnitsAvailable","dwellings.0.isOwnersInsureUnits","dwellings.0.isPropertySize","dwellings.0.waterSourced","dwellings.0.waterTankCapacity","dwellings.0.isSecondaryFitted","dwellings.0.isCaravanHomeLocated","dwellings.0.isSecuredFoundation","dwellings.0.isPlumbingConnect","dwellings.0.groundElevated","dwellings.0.isNationalTrustListed","dwellings.0.isFullyRewired","dwellings.0.policyOption.isBuildingVandalismCover","dwellings.0.policyOption.isContentVandalismCover","dwellings.0.locationSecurity.hasWindowRollerShutter","dwellings.0.incomeGeneratingDegree","dwellings.0.incomeGeneratingActivities","dwellings.0.agriculturalActivities","dwellings.0.locationProperty.homeStandard","dwellings.0.locationProperty.isLandSloped","dwellings.0.locationProperty.sizeOfHome","dwellings.0.locationProperty.areaUnit","dwellings.0.locationProperty.sizeOfBedroom","dwellings.0.locationProperty.grannyFlatSize","dwellings.0.generalPortableContents","dwellings.0.policyOption.isContentsCycleRacingCover","dwellings.0.policyOption.isRentDefaultCover","dwellings.0.excess","policyHolders.0.contact","policyHolders.0.contact.primaryAddress.addressType","updateProductCode","landlordConditions","updateMortgagees","isMortgagePresent","_mortgagees","_mortgagee","UpdateAlarmType","localAlarm","_24HourAlarm","locationSecurity","typeOfAlarm","UpdateRentDefault","isPropertyAgentManaged","updateCoverType","updateDwellingHistory","transformedHistoryList","hasInsuredClaims","dwellingClaimHistory","dwellingClaimHistories","transformedHistory","dwellingPortableClaimHistory","dwellingPortableClaimHistories","UpdateCycles","cycle","cycleItems","updateSumInsured","dwellingsInfo","confirmYourSumsInsured","yourBuildingSumInsured","buildingSumInsured","yourBuilding","rapidEstimate","buildingInsureAmount","yourContentsSumInsured","contentSumInsured","yourContents","contentInsureAmount","updateBuildingDetails","locationProperty","isLandSloped","updatePersonContactDetails","isCompany","_authorisedPerson","constructPhoneNumberObject","_mainPolicyHolder","_additionalPolicyHolders","policyHolderItem","_additionalPolicyHolder","constructConvictionHistoryObject","incident","updateCordelInfo","updateConfirmedValue","generalPortableContentsLimit","generalPortableContents","confirmYourOptionalBenefits","accdLossDmgCoverBuilding","isBuildingAccidentalDamage","accdLossDmgCoverContents","isContentsAccidentalDamage","domesticWrkCompCover","isContentsDomesticWorkerComp","updateRequoteCompanyContactForBlank","updatePropertyDetails","isGroundLevelElevated","yearBuilt","yearHomeBuilt","isCycloneStandardlyBuilt","determineIsInsuredsOverTheAge","updateWebBots","isSyntheticTransaction_Ext","syntheticSource_Ext","IsSyntheticTransaction_Ext","SyntheticSource_Ext","VehicleCleanRequestTransformer","vehicle","paymentOptions","modificationsOptions","modificationsBuilt","modificationsBuiltOptions","carFinance","last12Months","averageKM","cylinders","engineDescription","goodKM","imageUrls","inductionDescription","kerbWeight","power","standardEquipments","vin","maxNoClaimBonus","fourYears_chargedOrConvictedOffencesDetails","fourYears_licenceRSDCDetails","fourYears_vehicleAccidentsClaimsDetails","ph","isMainDriverMainPolicyHolder","additionalPolicyHolderFourYears_chargedOrConvictedOffences","additionalPolicyHolderFourYears_chargedOrConvictedOffencesDetails","additionalPolicyHolderFourYears_licenceRSDC","additionalPolicyHolderFourYears_licenceRSDCDetails","additionalPolicyHolderFourYears_vehicleAccidentsClaims","additionalPolicyHolderFourYears_vehicleAccidentsClaimsDetails","additionalPolicyHolderTenYears_chargedOrConvictedOffences","additionalPolicyHolderTenYears_chargedOrConvictedOffencesDetails","VehicleCoverTypeTransformer","VehicleDefaultValueRequestTransformer","vehicles.0.primaryUsage","vehicles.0.afterMarketModifications","vehicles.0.isEligibleforSDExemption","vehicles.0.financeType","vehicles.0.sumInsuredType","vehicles.0.garageType","vehicles.0.unrepairedDamage","vehicles.0.colour","vehicles.0.coverType","vehicles.0.recentPurchase","vehicles.0.otherDriverHasProLicense","vehicles.0.youngestDriverGender","vehicles.0.otherDriverUsageTimes","vehicles.0.sumInsuredAmount","vehicles.0.garageAddress.addressType","vehicles.0.drivers.*.driver.licenceType","vehicles.0.drivers.*.driver.yearsLicenced","vehicles.0.drivers.*.driver.hasConviction","vehicles.0.drivers.*.driver.hasClaim","vehicles.0.drivers.*.driver.hasInfringement","vehicles.0.drivers.*.driver.hasLostLicence","vehicles.0.drivers.*.driver.zeroDemerits","vehicles.0.drivers.*.driver.previousInsurer","vehicles.0.drivers.*.driver.noClaimBonus","vehicles.0.drivers.*.driver.maxNoClaimBonusLength","vehicles.0.drivers.*.driver.person.contactType","vehicles.0.drivers.*.driver.person.gender","vehicles.0.drivers.*.driver.person.firstName","vehicles.0.drivers.*.driver.person.lastName","vehicles.0.drivers.*.driver.person.isJustInsured","vehicles.0.drivers.*.driver.person.dateOfBirth","vehicles.0.availableCoverTypes","vehicles.0.coverageOptions","selected","vehicles.0.excess.standardVehicleExcess","vehicles.0.excess.ageExcessTier1","vehicles.0.excess.ageExcessTier2","vehicles.0.excess.undeclaredDriverTier2","vehicles.0.excess.inexperiencedDriver","policyHolders.0.contact.isJustInsured","vehicles.0.drivers.*.driverUsage","vehicles.0.excess.voluntaryVehicleExcess","VehicleFormatConverterTransformer","addAUToStateValue","policyHolders.*.contact.anyLostLicences","vehicles.0.youngestDriverDOB","vehicles.0.registrationState","vehicles.0.drivers.*.driver.person.hasClaim","vehicles.0.drivers.*.driver.person.hasConviction","companyConvertValueMapping","policyHolders.*.contact.authorisedPersons.0.person.hasClaim","policyHolders.*.contact.authorisedPersons.0.person.hasConviction","policyHolders.*.contact.authorisedPersons.0.person.anyLostLicences","policyHolders.*.contact.authorisedPersons.0.person.anyInfringements","VehiclePolicyHolderHandler","VehiclePublicIDTransformer","vehicles.0.publicID","vehicles.0.garageAddress.publicID","vehicles.0.drivers.*.publicID","vehicles.0.drivers.*.uniqueID","vehicles.0.drivers.*.driver.publicID","vehicles.0.drivers.*.driver.person.publicID","vehicles.0.drivers.*.driver.person.primaryAddress.publicID","vehicles.0.drivers.*.driver.driverHistory.*.publicID","vehicles.0.drivers.*.driver.driverHistory.*.uniqueID","vehicles.0.drivers.*[driverUsage].publicID","vehicles.0.drivers.*[driverUsage].driver.publicID","vehicles.0.drivers.*[driverUsage].driver.person.publicID","vehicles.0.drivers.*[driverUsage].driver.driverHistory.*.publicID","vehicles.0.drivers.*[driverUsage].driver.person.primaryAddress.publicID","removeDeletedAdditionalDrivers","removedDrivers","savedDrivers","removedDriver","matchingDriver","removeDeletedDriverHistoryArrays","fieldName","fieldValue","locator","driverHistories","removeEmptyDriverHistoryArrays","VehicleQuoteResultModel","vehicleValue","VehicleRetrieveSavedQuoteResponseTransformer","defaultNull","hasModifications","transformDriver","returnObject.maxNoClaimBonusLength","returnObject.NSWDemeritPoints","returnObject.fourYears_chargedOrConvictedOffences","returnObject.fourYears_licenceRSDC","returnObject.fourYears_vehicleAccidentsClaims","returnObject.tenYears_chargedOrConvictedOffences","transformedDriver","fourYears_offences","incidents","accidents","tenYears_offences","returnObject.aboutYourCar.address","returnObject.carDetails.locationParked","returnObject.carDetails.primaryCarUse","returnObject.carDetails.colour","returnObject.carDetails.last12Months","returnObject.carDetails.carCost","returnObject.carDetails.originalOwner","returnObject.carDetails.whenDidYouBuyYear","returnObject.carDetails.whenDidYouBuyMonth","returnObject.carDetails.carFinance","returnObject.carDetails.financeWith","returnObject.carDetails.existingDamage","returnObject.carDetails.writtenEvidence","returnObject.carDetails.salvageValue","returnObject.carDetails.modificationsBuilt","returnObject.stampDutyExemption.isSmallBusiness","returnObject.insuredExcessValue.coverType","returnObject.insuredExcessValue.comprehensivePref","returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft","returnObject.insuredExcessValue.vehicleExcess","returnObject.insuredExcessValue.standardVehicleExcess","returnObject.insuredExcessValue.voluntaryVehicleExcess","returnObject.insuredExcessValue.ageExcessTier1","returnObject.insuredExcessValue.ageExcessTier2","returnObject.insuredExcessValue.undeclaredDriverTier2","returnObject.insuredExcessValue.inexperiencedDriver","returnObject.insuredExcessValue.agreedValue","returnObject.optionalBenefits.QPMMotVehHireCar","returnObject.optionalBenefits.QPMMotVehWindscreen","returnObject.optionalBenefits.QPMMotVehNCB","returnObject.optionalBenefits.QPMMotVehLifetimeNCB","returnObject.aboutYourCar.regoSearchResponse","returnObject.aboutYourCar.retrievedQuoteRego.rego","returnObject.aboutYourCar.retrievedQuoteRego.state","returnObject.mainPolicyHolderContact.personalContactDetailsMailingPreference","returnObject.mainPolicyHolderContact.emailAddress1","returnObject.retrievedQuoteRego.state","primaryUsage","usage","selectedEquipments","optionKey","afterMarketMods","VehicleStructureRequestTransformer","vehicles.0","vehicles.0.vin","vehicles.0.drivers","vehicles.0.vehicleInfo","vehicles.0.garageAddress","updateVehicleDetails","carCost","purchaseMonthYear","whenDidYouBuyMonth","garageAddress","dh","updateDrivers","hasInfringement","zeroDemerits","NSWDemeritPoints","driverObj","updateVehicleRegoDetails","updateAdditionalDrivers","youngestDriver","rapidEstimateYoungerDriver","numberOfOtherDrivers","findYoungestDriver","youngestDriverGender","otherDriverHasProLicense","youngestDriverDOB","youngestDriverDob","otherDriverUsageTimes","num","updateMainDriverAddress","phs","phAddress","applyAddressForGoodDriverBonus","otherDriver","updateVehicleInsuranceTypeAndAmount","updateVehicleInsuranceOptionalBenefits","optionalBenefits","updateModificationOptions","modsKeys","eq","updateAfterMarketModifications","updateExistingDamage","unrepairedDamage","salvageValue","evidenceOfValueOrPrice","writtenEvidence","updateFinanceType","financeCompany","updateRecentPurchase","recentPurchase","updateStampDutyEligibility","stampDutyEligible","stampDutyExemption","isSmallBusiness","CaravanCleanRequestTransformer","caravan","cost","finance","locationDescription","vehicleSubType","caravanType","caravanSubType","fourYears_bikeAccidentsClaims","fourYears_bikeAccidentsClaimsDetails","CaravanCoverTypeTransformer","CaravanDefaultValueRequestTransformer","caravans.0.financeType","caravans.0.sumInsuredType","caravans.0.garageType","caravans.0.coverType","caravans.0.specifiedContents","caravans.0.existingDamageType","caravans.0.hasCurrentInsurance","caravans.0.isEligibleforSDExemption","caravans.0.isCaravanRegistered","caravans.0.isCycloneRatedSecurity","caravans.0.locationType","caravans.0.securityType","caravans.0.registrationNumber","caravans.0.chassisNumber","caravans.0.isCaravanOnNonRetractableJacks","caravans.0.isCaravanConnectedToPlumbing","caravans.0.isPermResidence","caravans.0.caravanUsageType","caravans.0.contentsCover","caravans.0.purchaseMonthYear","caravans.0.yearsContinuousInsurance","caravans.0.garageAddress.addressType","caravans.0.drivers.*.driver.licenceType","caravans.0.drivers.*.driver.yearsLicenced","caravans.0.drivers.*.driver.hasConviction","caravans.0.drivers.*.driver.hasClaim","caravans.0.drivers.*.driver.hasInfringement","caravans.0.drivers.*.driver.hasLostLicence","caravans.0.drivers.*.driver.zeroDemerits","caravans.0.drivers.*.driver.previousInsurer","caravans.0.drivers.*.driver.person.contactType","caravans.0.drivers.*.driver.person.gender","caravans.0.drivers.*.driver.person.firstName","caravans.0.drivers.*.driver.person.lastName","caravans.0.drivers.*.driver.person.isJustInsured","caravans.0.drivers.*.driver.person.dateOfBirth","caravans.0.availableCoverTypes","caravans.0.excess.standardVehicleExcess","caravans.0.excess.ageExcessTier1","caravans.0.excess.ageExcessTier2","caravans.0.excess.undeclaredDriverTier2","caravans.0.excess.inexperiencedDriver","caravans.0.drivers.*.driverUsage","caravans.0.excess.voluntaryVehicleExcess","CaravanFormatConverterTransformer","convertLengthUnits","inUnit","units","feet","metres","convertYearsContinuousInsurance","caravans.0.caravanInfo.weight","caravans.0.caravanInfo.caravanLength","caravans.0.caravanInfo.lengthUnits","caravans.0.timeSinceLastClaim","caravans.0.drivers.*.driver.person.hasConviction","caravans.0.drivers.*.driver.person.hasClaim","CaravanPolicyHolderHandler","CaravanPublicIDTransformer","contentsItems","caravans.0.publicID","caravans.0.garageAddress.publicID","caravans.0.drivers.*.publicID","caravans.0.drivers.*.uniqueID","caravans.0.drivers.*.driver.publicID","caravans.0.drivers.*.driver.person.publicID","caravans.0.drivers.*.driver.person.primaryAddress.publicID","caravans.0.drivers.*.driver.driverHistory.*.publicID","caravans.0.drivers.*.driver.driverHistory.*.uniqueID","caravans.0.specifiedItems.*.publicID","updateSpecifiedItems","specifiedContents","specifiedItems","CaravanQuoteResultModel","CaravanRetrieveSavedQuoteResponseTransformer","minimumTodaysDate","biggerDate","convertUnit","unit","ft","convertSpecifiedCategory","commnav_equipment","electrical_equipment","entertain_equipment","other","convertToLabelValue","returnObject.email","returnObject.aboutYourCaravan.vehicleType","returnObject.aboutYourCaravan.address","returnObject.caravanDetails.vehicleSubType","returnObject.caravanDetails.isCaravanRegistered","returnObject.caravanDetails.regoNumber","returnObject.caravanDetails.locationDescription","returnObject.caravanDetails.security","returnObject.caravanDetails.primaryUse","returnObject.caravanDetails.existingDamage","returnObject.caravanDetails.finance","returnObject.caravanDetails.financeWith","returnObject.caravanDetails.whenDidYouBuyYear","returnObject.caravanDetails.whenDidYouBuyMonth","returnObject.caravanDetails.purchasePrice","returnObject.caravanDetails.cost","returnObject.caravanDetails.isPremanentResidence","returnObject.caravanDetails.nonRetractableJacksorPermanantFoundations","returnObject.caravanDetails.permanentlyConnected","returnObject.aboutYourContents.insureContents","returnObject.aboutYourContents.generalContentsValue","returnObject.aboutYourContents.contentsItems","returnObject.sumInsured.agreedValue","returnObject.sumInsured.annexeReplacementCost","returnObject.excess.voluntaryVehicleExcess","returnObject.caravanInfo","returnObject.retrievedQuoteRego.rego","bodyStyle","numOfAxels","numberOfAxles","yearsContinuousInsurance","claims","timeSinceLastClaim","aboutYourContents","_label","_category","caravanUsageType","businessUsageType","CaravanStructureRequestTransformer","caravans.0","caravans.0.caravanType","caravans.0.caravanInfo","caravans.0.garageAddress","caravans.0.replacementCostValue","caravans.0.agreedAmountValue","caravans.0.contentsCoverAmount","updateCaravanInfo","updateContentsItems","updateTotalSpecifiedContentsValue","totalSpecifiedItemsValue","updateTotalContentsSpecifiedValue","contentsCoverAmount","totalContentsAndSpecifiedValue","contentsCover","insureContents","accident","updateVehicleSubType","updateTotalCaravanValue","annexeReplacementCost","totalCaravanValue","updateDiscountLayup","discountOptions","discountLayup","discountLayupMonths","activeLayupMonths","layupMonths","monthItem","updateOnSiteDiscount","onSiteDiscount","updateAgreedValue","agreedAmountValue","updateAnnexeValue","replacementCostValue","updatePurchasePrice","updateCurrentInsurance","hasCurrentInsurance","CaravanTriggerGoalTransformer","GtmService","$window","campaignService","addStandardTrackingToDataLayer","obj","dataLayerLastItem","isMatched","eventAction","eventCategory","eventLabel","nonInteraction","trackTransactionCompleted","page","policyDetails","quoteModel","paymentRef","receiptNumber","paymentType","combinedCoverType","getCombinedCoverType","activeCampaign","getCampaign","campaignId","sc_camp","virtualPageUrl","url","virtualPageTitle","transactionId","policyNumber","transactionAffiliation","transactionTotal","paymentReference","policyId","transactionProducts","sku","coupon","quantity","trackTransaction","trackEvent","eventName","evt","validationError","paymentError","getSha256","dataString","streetTypeAbbreviation","addressLine","nomalizeAddress","addr","harshAddress","harshEmail","emailAddress","harshPhoneNumber","phoneNo","harshRego","regoNo","getPhoneNumber","trackPageView","qqOption","qqEstimate","DOB","custGender","quoteNo","sitecoreCampaignId","route","registrationHash","emailHash","phoneHash","addressHash","trackUnauthPayments","paymentData","progressBarShortTitle","selectInsuranceType","enterPaymentRef","paymentMethod","howToPay","amount","amountPay","profile","referenceNumber","trackCTPEvent","action","progressBarTitle","expiryDate","paymentNumber","clientNumber","trackStandardEvent","qbeTrack","trackProductSelect","meta","appProduct","trackTooltipMouseOver","tooltipMessage","trackPayBillVirtualPageLanding","virtualPagePath","trackPayBillVirtualBillFound","dataObj","trackPayBillVirtualPageDetails","trackApiError","errCode","errMessage","errorCode","createGtmValidationErrorEvent","errorMessageTitle","run","$run","$state","gtmService","quoteModelFactory","$on","current","AggregatedRemoveService","markForDelete","itemsMarkedForDelete","BikeQuoteConfiguration","coverTypeClasses","comprehensive","subClasses","standard","superType","third_party","fire_and_theft","allCoverTypes","comprehensive_standard","third_party_fire_theft","third_party_standard","allPaymentFrequencies","defaultPaymentFrequency","_reversePaymentFrequenciesLookup","yearly","allQuoteTypes","full","quick","quoteRuleOptions","bike.riders","bike.quote","bike.contact","bike.payment","testQuoteDeclineOptions","bike.bike","defaultCoverType","defaultRequotePageName","CampaignService","ipCookie","labelService","CAMPAIGN_COOKIE_EXPIRY","init","campaignIdFromCookie","campaignIdFromQS","getQueryStringByName","hasActiveCampaign","getActiveCampaignId","campaign","extractCampaignInfoFor","getCampaignConfig","isCampaignNextStep","campaignText","isUndefinedOrNull","getGlobalOptionLabel","getGlobalOption","bannerContent","campaignData","isCampaignCodeValid","CaravanQuoteConfiguration","caravan.drivers","caravan.quote","caravan.contact","caravan.payment","caravan.caravan","$stateParams","completed","isRetrieval","dispatchCustomEvent","startRouteName","removeItem","addEventListener","redirect","detail","go","constant","service","baseExcess","LabelService","ValidationService","SessionStorage","UserInputRepository","HierarchyDecorator","MAService","QuoteResultModelFactory","QuoteOptions","GuideWireService","RegoSearchService","CoverTypeResolverService","CoverOfferingResolverService","QuoteResultFilter","JWTTimeoutService","routePrefix","availableCoverTypes","mainFormName","paymentPageRouteName","donePageRouteName","paymentPanelButtonText","QuoteModelFactory","$http","portalServiceWrapper","paymentLoggerService","PaymentService","bootstrap","vehicleTypes","campertrailer","slideoncamper","goodscarryingtrailer","campervan","relocatablehome","motorhome","home.quote","home.contact","HomeQuoteConfiguration","vehicle.quote","vehicle.contact","VehicleQuoteConfiguration","GenericConfiguration","payments.quote","payments.contact","dynamicRouterProvider","$stateProvider","$get","DynamicRouter","stacks","registerCommonRoutes","conf","routeName","pages","routeConfig","views","@","templateUrl","controllerAs","header@","template","registerStepsRoutes","stackName","allRoutes","steps","home","stepNum","abstract","sidebarTemplateUrl","metaTemplateUrl","stateName","routes","common","currentStack","currentState","currentStep","totalSteps","conditions","lastCompletedStep","initialise","stepConditions","markCompletedFn","clearSteps","getSteps","currentStepDef","findStepByName","checkRouteAllowed","step","msg","selectedStep","getPageTitle","addStep","stepNumber","next","getCurrentState","getNextState","back","getState","embargoTestService","testEmbargoDecline","FormSchemaService","DOM","schema","structure","registerSchema","qbe","formSchema","formStructure","extractGroup","groupName","param","field","extractField","getGenericValidationMessageFor","rule","mulesoftApiHeaders","endpointUrls","rego","X-SourceSystem","X-TrackingID","X-Mockable","mulesoftApiHeader","method","embargoxMockable","X-TargetEnv","regoSearch","EY-Access-Key","EY-Product-Type","X-Requested-By","UserID","makeSearch","getMulesoftApiHeadersForVgi","modelSearch","carSearch","addressSearch","addresses","Accept","Cache-Control","Pragma","refresh","isBSBValid","bsbValidation","getPayment","payments","req","checkUserID","quoteRequests","timestamp","categoryId","bsb","bsbReformatted","getPaymentInfo","refNumber","uuidv4","embargoTargetEnv","embargoPolicyLine","uKey","newKey","random","mulesoftApiHeadersConfig","gwService","attach","hierarchy","$id","hierarchyList","setHierarchy","setHierarchyFn","parentHierarchy","HTMLId","attr","$emit","preferred","allOfferings","QPHStandardOffering","QPHPrestigeOffering","QPHLandlordOffering","QPHStrataContentsOffering","getOfferingPermutations","coverOptions","applicableOfferings","permutationsBasedOnSelection","defaultOffering","useSelectedOffering","home.property","home.building","home.covers","home.details","home.payment","home.estimate","HouseCommonData","houseForm","commonData","getCommonMaterial","commonMaterial","jwtHelper","isSessionTimedout","isTokenExpired","handleTimeout","sessionTimeoutMessage","section_schema","remoteOptions","genericValidationMessages","campaigns","registerLabels","fieldLabels","sectionLabels","validationMessages","extractLabelsFor","extractSectionLabelsFor","extractContentLabelsFor","findCampaignById","getObjectValue","fieldLabel","getLabelFor","getSectionLabelFor","getSectionDescriptionFor","getHintTextFor","getHelpTextFor","getTooltipFor","getSecondaryInfoTextFor","getValidationMessagesFor","validations","getOptionsFor","getGlobalOptionsFor","getLabelForRemoteOption","option","getSecondaryInfoTextFlag","getContent","optionType","optionValue","optionKeyValues","returnOption","serviceWrapper","endpoint","send","marketing","Marketing","isSave","isfromRapidEstimate","pageName","isDeclined","qbeContact","EmailAddress","policyEmail","Enrol","Unenrol","Address","ContactNumber","InceptionDate","inceptionDate","QuoteReferenceId","CoverType","annualResult","monthlyResult","PromotionalCode","NoClaimBonus","Declined","Surname","SaveQuoteOutcomeId","SaveOutcome","TriggerSaveOutcome","SaveQuoteGoalId","SaveGoal","OutcomeId","Outcome","EngagementPlanId","EngagementPlan","EngagementStateId","EngagementState","InsuranceType","isFullQuote","FullQuoteAnnualPremium","toFixed","FullQuoteMonthlyPremium","FullQuoteMonthlyTotal","createPremiumBreakdown","QuickQuoteAnnualPremium","QuickQuoteMonthlyPremium","CampaignId","CampaignHeader","header","CampaignImgUrl","emailImageUrl","imgURL","CampaignTerms","termsAndConditions","mergeContacts","AnnualPremium","AnnualTotalFSL","AnnualTotalGST","AnnualStampDuty","MonthlyPremium","MonthlyTotalFSL","MonthlyTotalGST","MonthlyStampDuty","$log","trackQuoteStatus","serviceCallStatus","nextStep","processData","b64DecodeUnicode","currentService","nextService","JSON","stringify","log","sendLogs","statusText","EMBARGO_STATE","getItemById","configs","getPaybillConfig","appConfigs","ausPortalUISettings","initialCreditcardPayment","initialCreditcardPaymentUrl","host","guid","merchantId","clientId","clientSecret","successCallback","errorCallback","jwk","generateUniqueId","getKeyData","cardNumberFieldId","cardNumberLabelId","placeholderText","keyId","kid","keystore","container","placeholder","styles","font-family","font-size","line-height","color",":focus",":disabled","cursor","encryptionType","flexiFormFunction","microformInstance","payButton","cardExpirationMonth","cardExpirationYear","flexResponse","submitForm","createToken","payByCreditCard","creditCard","getSelectedPaymentFrequencyForService","issueCheck","_createCreditCardPayment","_createCreditCardPaymentResponse","formData","_generateCybersourceFormData","unAuthCreditCardPayment","referenceID","redirectUrl","href","absolute","payWithToken","payment_token","cardToken","createCreditcardPayment","unAuthPaypalPayment","paymentInfo","createPaypalPayment","_createPaypalPaymentResponse","redirectURL","payByPaypal","_createPaypalPayment","unAuthDirectDebitPayment","bankAccount","convertBsbNumberToGuidewireFormat","bsbNumber","bankAccountNumber","accountNumber","accountHolderName","accountName","createDirectDebitPayment","_createDirectDebitPaymentResponse","payByDirectDebit","_createDirectDebitPayment","padNumber","sendPaypalPaymentToGW","payerId","sessionId","payerID","sessionID","sendPaypalPaymentToGw","unAuthSendPaypalPaymentToGW","paymentId","paymentID","cardExpiryDate","card_type","_getCyberSourceCardType","card_number","cardNumber","card_expiry_date","card_cvn","merchant_secure_data1","cardHolderName","userToken","paybillConfig","host1","initPaymentToken","initPaymentTokenUrl","X-ClientId","X-ClientSecret","X-TargetOrigin","merchantIdentifier","EY-USER-TOKEN","availableQuoteResults","setSelectedCoverType","coverTypeClass","coverTypeSubClass","setSelectedOffering","so","subType","setSelectedPaymentFrequency","selectedPaymentFrequency","ct","getSelectedPaymentFrequency","selectedQuoteResult","mergedQuoteResults","clearQuoteResults","getAvailableCoverTypes","getAvailableSumInsuredTypes","isSumInsuredTypeAvailable","insuredType","isCoverTypeAvailable","isCoverSubTypeAvailable","expectedType","getRequoteOptions","sumInsuredTypes","getTestQuoteDeclineOptions","stepName","getQuickQuoteOptionsForStep","getAllOfferings","qqOptions","itemIndex","defaultExcessMapping","excessMapping","getAllCoverTypes","getAllPaymentFrequencies","getAllQuoteTypes","filteredList","displayCover","displayOffering","orderedList","cover1","cover2","order","orderByPrice","cover1Bigger","cheapestFirst","QuoteService","getQuote","createDummyService","$q","reject","return","http","success","createPayment","RegisterFieldDecorator","gwResponse","serviceResponse","lastStatus","transformGWResponse","processErrorResponse","errorFn","processSuccessResponse","successFn","search","searchMake","data1","convertSearchMakeResponse","makes","idx1","priorityNum1","priority","makeCode","searchModel","data2","convertSearchModelResponse","models","idx2","priorityNum","modelCode","searchCar","series","body","transmission","gearType","drive","driveDescription","engine","sessionStorage","smartLinkService","generateLink","customerData","smartLinkURL","sharedkey","hashKey","merchantidentifer","policyHolderName","orderref","descriptions","productrefs","productRefs","productlink","markerstart","markers","EMAIL","NAME","DATE","FEEDBACKDATE","DESCRIPTION","LINK","PRODUCTREF","ORDERREF","AMOUNT","CURRENCY","CUSTOMERREF","MERCHANTIDENTIFIER","TAG","productlinks","tags","amounts","initialparams","customerref","feedbackdate","currencyid","count","Sha1","smartlink","bin2hex","utf8encode","Utf8","encode","fromCharCode","H0","H1","H2","H3","H4","ROTL","toHexStr","strUni","strUtf","defaultData","hasClass","newEvent","document","createEvent","initCustomEvent","dispatchEvent","CustomEvent","delimiter","findHierarchyArrayInObject","hierarchyArray","propertyName","propertyValue","matchingOne","propertyIndex","updateValueInObject","pathStringArray","padWith","jQuery","generateRandomChar","fill","relativeStart","end","relativeEnd","final","options1","options2","regex","results","decodeURIComponent","token","compareDays","responseDate","expiredQuote","quoteDate","dateDiff","linkBuilder","generalLink","sessionProt","protocol","sessionProtHost","sessionProtPath","sessionProtURL","arg","isUndefined","b64EncodeUnicode","btoa","encodeURIComponent","toSolidBytes","p1","atob","prop","nameA","nameB","parseState","filterName","inString","replaceWith","$$unwrapTrustedValue","finalString","dateObject","referenceDocuments","keyname","output","supressErrorTypes","isFormValid","clearAllErrors","getFieldErrors","fieldSelector","elementId","removeSupressedErrors","inputErrors","errorType","registerInputErrors","commonFieldArray","parents","parent","commonFieldId","wildcard","getAllErrors","getNonEmptyErrors","nonEmptyErrors","validateField","fieldKey","validateInput","messageKey","$error","nominated","comprehensive_nominated","comprehensive_preferred","vehicle.drivers","vehicle.payment","vehicle.vehicle","elm","attrs","ctrl","$eval","addressValidation","validateAddress","ngModelValue","EMAIL_REGEXP","modelValue","mutualExclusiveValidation","change","exclusiveOptions","isRequiredForValidation","$apply","amountDue","transclude","$timeout","$el","$attr","submit","QBConfirmDialog","ngDialog","$sce","$sanitize","vm","$root","openDialog","getFormName","openConfirm","className","appendClassName","closeByDocument","closeByEscape","showClose","disableAnimation","callSaveData","reason","$broadcast","incentiveDetails","formName","ctpForm","formConsent","contactDetails","sanitizeForm","directDebit","surName","trustAsHtml","coverIncludes","coverIncludesTitle","textDisplay","ctpStepTotal","ctpStepNum","ctpCompleted","backToForm","regexNumber","newValue","oldValue","ngModelCtrl","dateRange","qbDatePicker","startDate","endDate","datePickerOptions","changeYear","changeMonth","minDate","maxDate","dateFormat","yearRange","defaultDate","datepicker","getDateUnit","parseDate","unitSplit","dateUnit","qbDateRange","text","qbDateValidation","which","$valid","preventDefault","shedModels","trigger","hasValidSheds","zeroItems","checkValidSheds","tableData","validYears","tableHasData","rows","hasData","removedData","row","validMonths","isMonthValid","lastYearIndex","getEligibleMonths","validMonth","currentMonth","validateTable","qbRadioLabelController","isError","labelKey","labelFor","addTooltip","tooltip","FieldWrapper","qbTrack","showErrorBottom","hintCatcher","expandHintText","showHint","setTimeout","QBE","expandCollapse","labelWildcard","hideLabel","hintText","argArr","helpText","secondaryInfoText","getLabel","showImageRefForPayment","toggleClass","tooltipMouseOver","secondaryInfoTextDisplayOn","validationSelector","hierarchyDecorator","validationService","commonValue","spinner","hasError","_element","formIsSubmitted","$invalid","$dirty","addClass","removeClass","$viewChangeListeners","FormSection","paymentService","$location","userInputValues","children","sectionData","errorCount","sectionName","fieldValues","formSelector","aggregatedListName","fieldOptions","commonValues","isEligible","showError","showPaypalError","showAustpostBillpay","showSDExemption","showCreditCard","policyStartDateChanged","toolTipHover","trackformErrorByErrorMessage","AllowClaimsPayments","validationSummary","formErrorMessage","showPaymentSection","isEnterPaymentRefError","isEnterPaymentRefErrorLength","policyCategory","validateProducts","selectProduct","showContentsSumInsuredInLowerRange","showYourContentsSumInsuredInLowerRange","getBuildingEstimate","getBuildingMaximum","getBuildingMinimum","getEstimateRebuild","$current","validateBuildingSumInsured","toggleContentsSumInsuredInLowerRange","toggleYourContentsSumInsuredInLowerRange","showAggregate","csCCInvalid","csCVCInvalid","requote","equals","startsWith","searchString","restoreDetails","formDetails","paybillForm","sessionLabels","sessionFunction","paypalCodeMessage","alreadyPaidMessage","paymentErrorMessage","paymentRefNoMatchFound","pleaseCheckRefNumber","directDebitMessage","campaignBanner","promoValue","initialiseListFor","initialiseFieldValue","formObjectName","defaultValue","getOptions","disableNext","disable","disableNextForConvictions","section","getCtpBanner","codeFromLink","getCampaignSteps","getObjectValueRaw","hasServiceResponseFrom","setCoverTypeClass","setCoverTypeClassWithMotorSubClass","comprehensiveCoverTypeSubClass","thirdPartyCoverTypeSubClass","setCoverTypeSubClass","getRentClaimValue","weeklyRent","getSelectedQuote","getSelectedQuoteResponse","getQuickQuoteData","isStrataOrRegisteredVisible","includedTypes","getAddressState","visible","coverNeeds_contents","coverNeeds_building","isDisplayRapidEstimate","rapidEstimateDisplay","$onInit","register","initFn","getValue","checkBuildingSumInsured","mode","uiSelectedInsuranceType","uiSelectedInsuranceTypeCode","uiRefNum","selectedInsuranceTypeOptions","selectedInsuranceTypeItem","findBillButton","getElementById","click","isGiftCardApplied","registerFormField","childName","initValueFn","getValueFn","registerIdGenerator","initIdFn","registerHierarchy","resetInsuredExcessValue","updateComponentValue","removeSection","aggregator","childSectionsToRemove","childSection","childValue","sectionKey","parentName","getCeilingAge","floatPoint","getAgeInDays","getPastYears","numYears","prevYear","getPastYearsFrom","errorResponse","form","isRequoteBlocked","setMainPolicyHolderEmail","onPaymentFrequencyChanged","updatePaymentSummary","updatePaymentStartDate","getRange","sDate","eDate","paymentMethodChanged","termsAndConditionsChanged","noItemIsChecked","numberOfItemsChecked","refreshPolicy","hostOrigin","origin","paymentConfig","errorDuringTokenization","mulesoftFlexiMicroformApiUrl","initialCreditcardPaymentSuccessCallback","initialCreditcardPaymentFailCallback","FLEX","microform","setupError","scrollViewTo","getOptionsForBuildingYearBuilt","isHomeCoverNeedAvailable","coverNeed","isPropertyProfessionalAgent","propertyProfessionalAgent","validateCybersourceError","cybersourceList","cybersourceCodeMessage","cybersourceError","splitKeyInValidation","animate","scrollTop","top","scrollLeft","getOptionsForCoverNeeds","returnOptions","showNeedsCoverOutsideHome","show","needCoverOutsideHome","submitRapidEstimate","isNavigatingForward","moveToPage","vehicleFormCtp","registeredOwnerCtp","bDate","birthDate","regEmail","regMobileNum","regPostCode","regDate","aboutYourCarCtp","registrationDueDate","driverLicenseNum","vehicleRegNum","insurancePeriod","insurancePeriodCtp","validateBirthDate","querySelector","birthYear","birthMonth","birthDay","age","getYearDiff","validateRegistrationDueDate","validatePostCode","regDueDate","regDueYear","regDueMonth","regDueDay","dateToday","setHours","setMinutes","setSeconds","setMilliseconds","maxRegDate","validateExpiryDate","fromDate","ageDifMs","ageDate","dateHasPartialValue","postCodeIsValid","flag","confirmSwitch","QBEProducts","NonQBEProducts","redirectLinks","nonQbeRedirect","productLabel","otherWaysLabel","containsInArray","productValue","nonQbeLink","NSW","QLD","Travel","SmallBusiness","MotorProducts","arrayList","backState","dynamicRouter","keyCode","spotValue","isEstimatedRebuildCost","isYourEstimatedRebuildCost","dutyClicked","$event","$target","currentTarget","validNumber","validPhoneNum","futureValue","delegateTarget","expiryMonth","expiryYear","getHTMLId","append","frequentlyAskedQuestions","frequentlyAskedQuestionsTitle","numberChecked","maxAllowed","headBar","headBarCtp","ddModals","openModal","open","modal","closeModal","close","QBNgDialog","ActivityMonitor","$interval","contentData","timerLengthMinutes","timerLengthSeconds","sessionLengthMinutes","sessionLengthSeconds","sessionCount","inactivityTimeMinutes","inactivityTimeSeconds","initSession","startTimeOut","stopTimeOut","continueTimer","inactivityTime","activeDialog","timeLeft","takeoverHeader","takeoverContent","yesLabel","noLabel","noRedirectURL","activate","storedSession","isNumber","inactive","validateSession","storedTime","startTimer","stopTimer","cancel","stopEvents","off","dialogCountdown","endTime","mins","msLeft","twoDigits","updateTimer","redirectLink","getUTCHours","getUTCSeconds","html","getUTCMilliseconds","QBParentClass","qbParentClass","qbParentElement","classes","QBPaymentSummary","quoteHasCoverType","saveSuccess","validateMail","assignEmail","$columns","classList","onNewQuoteReceived","setSelectedQuoteModel","updatePaymentOptions","mobileUnmatch","$colMain","$content","$floatingModule","style","removeProperty","remove","getPaymentButtonText","displayPaymentButton","frequency","refreshPrices","frequencyLabel","discounts","savings","mapServiceValue","discountType","paymentInstallment","quoteMonthly","monthlyQuoteAmount","monthlyDownPayment","downPayment","quoteFortnightly","fortnightlyQuoteAmount","fortnightlyDownPayment","premAfterDisc","documents","purchaseNow","printPage","print","getPage","isPaymentOptionVisible","lookupLabel","getDocument","gwDocument","pathname","bikePdsLink","caravanPdsLink","qbPaymentSummaryPosTop","getClientRects","qbPaymentSummaryPosLeft","qbPaymentSummaryWidth","$floatingModuleContainer","$floatingModulePosTop","$coverDetails","coverDetailsPosTop","colMainHeight","offsetHeight","colMainPosTop","$footer","footerHeight","enquire","windowPosition","$floatingModuleHeight","clientHeight","colMainPos","windowScroll","floatingModuleHeight","marginTop","unmatch","css","$sidebarContainer","$floatingSave","pageYOffset","removeAttribute","viewValue","validPhone","isConfirmed","coreData","showThankYou","promoData","clearUserForm","addValidPromoMessage","wrapper","promoMessage","removeValidPromoMessage","currentValue","promoWrapper","unique","_link","$asyncValidators","qbPromoCode","ngTrim","qbRestrictInput","$select","openSelect","worked","initMouseEvent","fireEvent","QBSmartLink","smartLink","star","feefoStar","feedbackButton","feefoLogo","submitFeedback","starCount","innerWidth","setFeefoPosition","feefoStyle","receiptPosition","offsetTop","feefoNewPosition","SummarySection","HTML_ID","summary","summaryModel","excessLabel","getRiderExcessLabel","getWallConstructionLabel","wallConstruction","labelSet","getLiability","liability","moveToState","moveToHomeState","getStateName","generateAddressText","addressText","getYearHomeBuilt","yearValue","yearHomeBuiltOptions","filteredResult","quickQuoteResponse","selectedTab","setSelectedTab","$activeTabId","$tab","tabId","initTabs","tabs","thankYou","ddTooltip","bsbResult","bankName","EXPIRY_DATE_REGEXP","validDate","monthValue","validYearAndMonth","yearMonthConcat","TYPEAHEAD_REGEXP","itemName","viewMapper","modelMapper","originalScope","$compile","$document","$$debounce","$position","typeaheadParser","HOT_KEYS","eventDebounceTime","modelCtrl","ngModelOptions","minLength","typeaheadMinLength","newVal","waitTime","typeaheadWaitMs","isEditable","typeaheadEditable","isLoadingSetter","typeaheadLoading","assign","isSelectEvent","typeaheadShouldSelect","vals","onSelectCallback","typeaheadOnSelect","isSelectOnBlur","typeaheadSelectOnBlur","isNoResultsSetter","typeaheadNoResults","inputFormatter","typeaheadInputFormatter","appendToBody","typeaheadAppendToBody","appendTo","typeaheadAppendTo","focusFirst","typeaheadFocusFirst","selectOnExact","typeaheadSelectOnExact","isOpenSetter","typeaheadIsOpen","typeaheadShowHint","parsedModel","invokeModelSetter","$setModelValue","$options","getterSetter","$$$p","parserResult","uibTypeahead","hasFocus","$new","offDestroy","$destroy","popupId","aria-autocomplete","aria-expanded","aria-owns","inputsContainer","hintInputElem","after","border-color","box-shadow","opacity","background","vertical-align","background-color","popUpEl","active","move-in-progress","query","assign-is-open","debounce","typeaheadTemplateUrl","typeaheadPopupTemplateUrl","resetHint","resetMatches","activeIdx","getMatchId","removeAttr","inputIsExactMatch","inputValue","getMatchesAsync","locals","when","onCurrentRequest","recalculatePosition","debounceUpdate","firstLabel","isString","fireRecalculating","debouncedRecalculate","moveInProgress","$digest","timeoutPromise","scheduleSearchWithTimeout","cancelPreviousTimeout","assignIsOpen","isOpen","$item","$model","$label","typeaheadFocusOnSelect","focus","shouldSelect","shiftKey","stopPropagation","parentNode","blur","editable","dismissClickHandler","$$phase","$popup","_modelCtrl","_ngModelOptions","candidateViewValue","emptyViewValue","ctrls","popupTemplateUrl","isDropdownOpen","isActive","matchIdx","selectActive","selectMatch","$templateRequest","tplUrl","$parent","tplContent","tplEl","$injector","isSanitizePresent","has","escapeRegexp","queryToEscape","containsHtml","matchItem","debounceTime","SCROLLBAR_WIDTH","BODY_SCROLLBAR_WIDTH","OVERFLOW_REGEX","normal","hidden","PLACEMENT_REGEX","auto","primary","secondary","vertical","BODY_REGEX","getRawNode","elem","nodeName","parseStyle","offsetParent","documentElement","isStaticPositioned","el","getComputedStyle","scrollbarWidth","isBody","bodyElem","clientWidth","scrollElem","offsetWidth","scrollbarPadding","elemStyle","paddingRight","paddingBottom","scrollParent","tagName","widthOverflow","scrollWidth","originalRight","heightOverflow","scrollHeight","bottom","originalBottom","isScrollable","includeHidden","overflowRegex","overflowY","overflowX","includeSelf","documentEl","excludeStatic","parentElement","spStyle","includeMagins","elemOffset","marginLeft","parentOffset","clientTop","clientLeft","height","elemBCR","getBoundingClientRect","pageXOffset","viewportOffset","useDocument","includePadding","offsetBCR","offsetParentBCR","offsetParentStyle","paddingTop","paddingLeft","parsePlacement","placement","autoPlace","positionElements","hostElem","targetElem","targetWidth","targetHeight","hostElemPos","targetElemPos","targetElemStyle","adjustedSize","marginRight","marginBottom","xOverflow","yOverflow","positionArrow","innerElem","isTooltip","arrowElem","arrowCss","borderProp","borderWidth","borderRadiusProp","borderRadius","$$csp","noInlineStyle","$$uibTypeaheadCss","prepend","$$uibPositionCss","uiSelectRequired","tokenTimeoutService","$ctrl","initialiseRouting","bike.done","bike.policy-start-date","markCompletedRouteCallback","elementName","validationErrors","sections","sideBarEmail","saveOnExit","onbeforeunload","exitSaveQuote","getDefaultValues","thirdPartyOrThirdPartyFireAndTheft","voluntaryMotorcycleExcess","registerSection","initValue","triggeredBy","performMAServices","invalidatePreviousQuote","save","getRequote","displayFormErrors","prepopulateRetrievedQuote","all","resps","bikeFormData","reload","expiredQuoteRedirect","bikeExpired","applyPromoCodeThroughLink","getFormInput","showErrorSummary","isInvalid","setDefaultContactValuesIfRequired","isRegistered","redirectToDecline","regoSearchDetails","quickQuoteResultList","quickQuoteResult","proceedToNextStep","contactValuesRequired","testRequired","setDefaultContactValues","testDeclineIfRequired","declineTestRequiredFor","testDecline","declineObj","redirectPage","saveQuoteIfRequired","saveQuoteNotRequiredFor","notRequired","triggerGoalCompleteQuoteIfRequired","userInputFromRepo","requoteOptions","broadcastError","quickQuoteOptions","errorMessage","savedQuote","maData","showInView","isSaveButtonEnabled","rapidEstimateUrl","isQuoteAvailable","initPage","overwritePromoCodeFromQueryString","currentPageName","displayBack","promoCode","initQuotePage","saveOnPremium","saveOnYourPremium","initContact","parseGender","constructDonePageViewModel","done","isAwaitingProcess","policyType","showYearMakeModelInSummary","initDonePage","campaignSteps","moveToStep","tellUsMore","applyFormPath","estimateRedirect","showRapidEstimatesPanel","rapidEstimateResults","caravan.done","caravan.policy-start-date","goToNextStep","defaultValues","defaultStateExcess","voluntaryVehicleExcess","caravanFormData","caravanExpired","isEligibleforSDExemption","initDriversPage","vcRecaptchaService","moduleId","recaptchaResponse","widgetId","textContent","execute","recaptchaConfiguration","recaptchaKey","setResponse","setWidgetId","cbExpiration","$controllerScope","onPaymentCallback","creditCardPaymentData","cybersourceEndpoint","trustAsResourceUrl","cybersourcePaymentEndpoint","declineMessages","getDeclineCodes","descriptionHTML","processWildCard","getStartRoute","initPayBills","phone","paymentDeclineLabel","paymentDecline","paymentDeclineDescription","paymentDeclineSubDescription","subDescription","chatAgentLabel","buttonLabel","chatAgent","callAgentLabel","callAgent","footHeight","outerHeight","windowHeight","documentHeight","minHeight","outerWidth","codes","currentURL","newURL","homeURL","targetString","wildcardValue","getProduct","defaultErrorTitle","tryAgainLinkMessage","retry","vehicle.done","vehicle.policy-start-date","QPMMotVehHireCar","QPMMotVehWindscreen","QPMMotVehNCB","regoSearchResponse","vehicleFormData","vehicleExpired","paymentConfirmationDetails","creditCardConfirmation","paypalConfirmationData","directDebitConfirmationData","creditCardConfirmationData","isSuccess","MAX_ACCESSORY_VALUE","displayBuildingStep","home.done","home.policy-start-date","isNextDisabled","showRapidEstimate","pageState","convicitonDataObject","getCoverOptions","getQuickQuoteWith","getRapidEstimate","rapidEstimateOptions","homeLevels","chooseYourExcess","homeExcess","defaultPortableContentStateExcess","portableContentsExcess","getFormItem","formNameWithField","finalValue","testEmbargo","getCoverType","clearPreviousQuotes","setOfferingOrDecline","checkEstimatedRebuildCost","checkPrerequestDecline","checkSpotValue","overwrite","declinePolicy","isStrataRegdCorp","areUnitAboveBelow","corpInsureUnit","availableOfferings","isRapidEstimateVisible","shouldRefer","getTotalValue","totalValue","convictionData","disabled","$name","setWebBotValues","info","homeExpired","updateFormDataBasedOnCommonValues","initEstimatePage","initPropertyPage","triggerPulse","isUnitAboveGround","initCoverPage","portableContents","coverPortableContents","rentDefault","rentDefaultCoverAmount","rentCurrentWeekly","uptoWeeks","rentXWeeks","confirmYourLevelOfCover","yourChosenCover","coverPortableContentLimit","accidentalLossOrDamage","coverAccDmgBuilding","coverAccDmgContents","domesticWorkerCompensation","domesticWorkerCompCover","initContactPage","initPaymentPage","CREDIT_CARD_ATTEMPT","showPaymentProcessError","paymentAttempCounter","cybersourceiFrameUrl","addCybersourceiFrame","addCybersourceRetryAttempt","addCybersourceLastAttempt","processPayment","paymentDetailsForm","cardCvc","directDebitPaymentData","confirmationData","paymentErrorDescription","referralParams","closeWindowLabel","closeWindow","payYourBillNowLabel","payYourBillNow","printLabel","payMoreBillLabel","payMoreBill","returnDeclineURLPath","DeclinePath","paymentsPath","PaymentsPath","frequentlyAsked","frequentlyAskedTitle","paymentDate","showQbAmountDue","otherWaysToPay","paymentConfirmation","paymentConfirmationLabel","paymentConfirmationDescription","paymentConfirmationSubDescription","paymentConfirmationSummary","paymentConfirmationSummaryLabel","paymentConfirmationSummaryDetailsLabel","initStep","Completed","showPayButton","paymentAttempt","ctpStepCounter","trackWindowPrint","paypalConfirmation","receiptNum","paymentConfirmationSummaryDetailsValue","loadAmount","directDebitConfirmation","bankSubDescription","cents","amountCents","dollars","amountDollars","showConfirm","showSwitchButton","targetUrl","goToPayments","creditCardForm","ccName","cvcNum","core","details","reference_number","referenceId","pType","instance","isCrditCardPaymentMethod","validateCybersourceCreditCardField","cardNumberContainerValidClass","getElementsByClassName","payBillNow","bankAccountForm","tokeniseAndPayByCreditCard","setPaymentErrorAfterCybersourceTokenization","setPaymentErrorAfterCybersourceTokenizationCvcInvalid","flexiResponse","declineParam","reasonCode","resizePayBills","PayerID","_guidewirePaypalPaymentResponse","isRetrieve","initPolicyStartDatePage","product","pastPolicyStartDateForm","pastPolicyStartDateDetails","stateParent","AddressSearchController","addressResponses","isSearchInProgress","messageAddressNotFound","addressFound","addressInput","addressResponse","refreshAddresses","onSelect","enrich","isAddressValid","component","bindings","qbCampaign","listAccordion","QBCombinedValidationController","errorsByField","resetFieldErrors","fetchErrorsByField","fieldErrors","wildcardErrorAttr","validationMessage","$$parentForm","processGTM","hasErrors","getErrorsByField","errorByFieldLabel","errorEvent","QBCrossSell","subheading","ctaLabel","hyperlinkLabel","image","hasContent","getRichText","heading","QBCtpValidationController","errorField","QBCurrency","onValueChanged","QBCycleCoverSummaryController","tableValues","generalEquipment","specifiedEquipment","includeCycleRacing","includedList","excludedList","$last","QBListAggregatorController","_aggregatorPrefix","setFullHeadingForItem","updateParentSection","addItem","fullHeading","QBListReducerController","QBLoadingAnimationController","onLoadAnimationStart","onLoadAnimationEnd","animationInProgress","QBMaxNoClaimBonus","calcAge","getFilteredOptions","fullOptions","QBTableController","selectedRows","editingRows","allRowsSelected","newRow","editDisabled","isAddable","addDisabled","IDPrefix","isRowInEditMode","onEditRow","isAddRequired","onEditDone","rowIndex","isAddEnabled","columns","col","onAdd","onSelectAllChanged","onRemoveSelection","valueAggregator","MultiselectDropdown","ls","selectedOptions","selectionLimit","QBNoClaimBonus","reverse","paymentRefNumController","findYourBill","imageTooltipPath","autoTrigger","searchForRefNum","getImagePath","validRef","paymentFlag","validatePaymentRefNum","checkProductIfInGuidewire","$$rawModelValue","referenceNo","refLength","refLengthIsValid","postBillPay","prodRefNum","searchForRefNumberSuccess","closeImageRefForPayment","paymentRefError","qbPremiumBreakdownController","monthlyResults","QBProgressBarController","lastSelectedStep","toState","toParams","fromState","fromParams","displayTopBanner","getStateByNumber","getPages","bannerText","pagesArray","declinePages","currentPage","isCurrent","canMoveToStep","moveToSelectedStep","qbRangeBar","getAverageWidth","averageWidth","minimum","maximum","average","getCirclePos","pos","getAveragePos","QBRapidEstimateQuotesPanel","quoteResultFilter","displayRapidEstimateResults","quotesTemp","scrollCTA","mergedQuotes","mergedQuote","monthlyQuote","coverIndicator","coverDetails","yearlyPayment","monthlyPayment","rapidEstimateFilter","animateToResults","scrollAnchor","RegoSearchController","STATES","regoSearchService","yearInput","makeInput","modelInput","carOption","states","modelResponse","makeResponse","isMakeSearchInProgress","isModelSearchInProgress","isRegoSearchError","bodyStyles","engineSizes","selectedBodyStyle","resetSearchLabel","carOptions","chosenResult","existsInArray","searchTerm","buildArray","yearsObject","searchBy","showSearch","getYears","searchRegoNo","regoForm","carRegoNumber","carRegoNumberState","selectedState","tempYear","tempMake","filterCarOptions","selectedEngineSize","filteredCarOptions","filterArrayByBody","filterArrayByEngine","filterArrayByBodyAndEngine","getCarDetails","engineSize","showChosenCar","isCarSelected","resetSearch","QBSaveQuote","opened","showForm","saveForm","QBTopBannerController","showTopBanner","closeTopBanner","QBValidationController","validationResult","validationMessageFor","isFieldInvalid","VehicleSubTypeSelector","YearMakeModelSearchController","yearMakeModelResult","yearMakeModelResults","recallGetDetails","getDetails","getPolicyStartDate","filterOptions","filteredOptions","updateRepository","selectOption","yearMakeModelOption","isResultSelected","hideSubFilters","QBYearsHeld","QBYesNoController","inputName","yesFieldId","noFieldId","valueChange","isRequired","condition","ariaLabel","provider","$locationProvider","$urlRouterProvider","otherwise","html5Mode","enabled","cybersourcePaymentForm","cybersourceCallback","paypalCallback","sidebar@","meta@","progressbar@","headbar@","ctp"],"mappings":"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mDACA,wCACAC,oDACA,6CAEAC,gDACA,iDACAC,2DACA,6CAGAC,wDACA,iCAIAC,iDACA,oDACAC,yCACA,oDACAC,yCACA,iDACAC,6CACA,oDACAC,wCACA,kDACAC,4CACA,gDACAC,4CACA,wDACAC,+CACA,qDAEAC,yCACA,yDACAC,6CACA,yDACAC,4CACA,wDACAC,2CACA,uDAEAC,yCACA,gDAEAC,0CACA,0DACAC,0CACA,0DAEAC,mEACA,gEACAC,oEACA,uDACAC,yDACA,sDACAC,wDACA,qDAEAC,8CACA,sDACAC,yDACA,+CAIAC,+CACA,yCAEAC,+CACA,wCAEAC,sDACA,kDACAC,4DACA,2CACAC,0DACA,8CACAC,+DACA,mDAGAC,0DACA,8DACAC,0DACA,8DAGAC,qCACA,wDACAC,iDACA,8DACAC,oCACA,0CACAC,yCACA,mDAGAC,uCACA,qDAEAC,6CACA,qDACAC,sCACA,oDAGAC,6DACA,2DACAC,6DACA,4DAIAC,+DACA,kCACAC,iEACA,gDAGAC,kEACA,gEAIAC,mDACA,8CACAC,4CACA,4BAGAC,wCACA,wCACAC,iDACA,yCACAC,gDACA,sCACAC,gDACA,uCACAC,8CACA,oCAeAC,6BAAA,wBAOAC,uBACAC,6BAAA,gCAEAjlB,gBACAqgB,6CAAAxhB,aAAAzwC,KACAi0D,4CACAxjB,aAAAmW,UACAuN,yCACA1jB,aAAAmW,UACAwN,6CACA3jB,aAAAmW,UACAyN,4CACA5jB,aAAA4X,iBACAiM,2CACA7jB,aAAAoX,iBACA2M,0CACA/jB,aAAAmW,UACA6N,0CACAhkB,aAAAmW,UACAgP,uCAAAnlB,aAAAkW,SACAqM,2DACAviB,aAAAI,MACAwlB,4CAAA5lB,aAAAI,MACAimB,gEACArmB,aAAAI,MAWA,IAAAmE,kBAAAjT,WAAAzO,QACAyO,WAAA5O,UAAAsgB,uBAAAnC,kBACAM,eAEAoD,kBAAAlD,aAAAilB,uBAAAnJ,kBACA5Y,iBAAAlD,aAAAilB,uBAEA/hB,kBAAAlD,aAAAvlB,wBAAAkjC,eACAza,iBAAAlD,aAAAvlB,wBACAyoB,iBAAAlD,aA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0W,8BACA,oDACAC,+BACA,oDAEAC,mCAGAC,qCACA,iDAEAC,6CACA,yDAEA3W,4BACA,wDACA4W,qCACA,2DACAC,+BACA,4DACAC,kCACA,yDACA9X,gCACA,0DACA+X,6BACA,wDACAC,2BACA,sDACAC,gCACA,4DACAC,gCACA,mEACAC,mCACA,gEACAC,kCACA,gEACAC,gCACA,4EACAzX,2BACA,mDACA0X,6BACA,yDACA5X,yBACA,qDACAL,gCACA,4DAEAC,mCACA,+DAEAiY,oCACA,gEACAC,6BACA,sDAGAC,oDACA,iEACAC,mDACA,iEAGAjX,kCACAO,gDACA,0EACAD,qDACA,qFAEAD,iDACA,2EACA6W,sDACA,iFACAjX,mDACA,2FAEAC,gDACA,wEACAM,kDACA,0EACAL,gDACA,wEACAM,uDACA,gFAGAjC,0BACA,8DACAM,oCACA,6DACAH,gCACA,oEAGAF,gCACA,uDACA0Y,qCACA,wDACAC,yCACA,oDACAC,qCACA,+DAGA3Y,gCACA,8DAIAgB,kCACA4X,4CACA,qDACAC,4CACA,6CACA5X,4CACA,iDACA6X,0CACA,4CACAC,wCACA,gDACAC,6CACA,mDACA/W,uCACA,6DAIAuC,gDACA,gDACAC,iDACA,6CACAC,iDACA,iDACAC,gDACA,gDACAC,+CACA,+CACA5C,wCACA,6CAEA6C,kDACA,8CACAC,kDACA,8CAEA5D,wDACA,uEACAC,+CACA,wEACAC,8CACA,6DACAC,6CACA,4DACA4X,8CACA,kDAIAja,iCACA,mDAGAC,gCACA,mDAGAI,0CACA,0DACAD,mCACA,gEACA8Z,sCACA,8DACA7Y,2CACA,mEACAlB,yCACA,0DAEAI,sDACA,8DACAC,sDACA,8DAGAI,gDACA,yCACAuZ,sDACA,qDACAxZ,iDACA,yCAGAyZ,8CACA,2CAEAC,wBACA/W,qCACA,+CACAG,oDACA,2DAGA7B,0BACA,mEACAD,wCACA,qEAGAlB,wDACA,sEAGAP,uBACA,2DAGArc,iBACA4U,qBACA6hB,6BACA1hB,yCAAA,kBACA/O,sCACA,uDACA+D,cAAA,kBACA2sB,qDAAA,cACA1hB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eACApoF,GAAA,UACAotB,cAAA,UACAi8D,YAAA,WACAvB,eAAA,kBACAz6D,YAAA,oBACAk8D,aAAA,cACAC,qBAAA,kBACAC,kBAAA,eACAC,wBACApC,gBAAA,eACAC,kBAAA,wBAGAc,QAAA,qBAAAjB,2BACAiB,QAAA,yCACA,UACA,aACA,OACA7Q,+CAEA6Q,QAAA,2BACA,OACA,aACAnW,iCAEAmW,QAAA,8BACA,OACA,aACA3S,oCAEA2S,QAAA,kCACA,OACA,aACA,sBACA,eACAxV,wCAEAwV,QAAA,gCACA,aACA,OACA,eACA,UACA3N,qCAEA2N,QAAA,uBACA,OACA,aACA,4BACA,0BACA7R,6BAEA6R,QAAA,uBACA,OACA,sBACA9R,6BAEA8R,QAAA,wBACA,OACA,aACAzV,8BAEAyV,QAAA,qBAAA,cAAAY,2BACAZ,QAAA,qBACA,cACA,sBACA,4BACA,eACA,yBACA,OACA,aACAsB,oBAEAtB,QAAA,kBACA,QACA,SACA,UACA,sBACA,uBACA,oBACA,OACA,eACA,uBACA,SACAuB,MACAjG,OACA5jD,QACAlZ,oBACAgjE,qBACAhG,kBACA58D,KACAF,aACA+iE,sBAEA,MAAAC,gBAAAC,UACAJ,MACAjG,OACA5jD,QACAlZ,oBACAgjE,qBACAhG,kBACA58D,KACAF,aACA+iE,yBAIAr/F,OAAA,cAAA,WACA,MAAA,UAAAf,MACA,GAAAugG,eACA9X,QAAA,UACA+X,cAAA,iBACAC,cAAA,kBACAC,qBAAA,yBACAC,UAAA,aACAC,gBAAA,mBACAC,UAAA,aAGA,OAAAN,cAAAvgG,SAGA2+F,QAAA,0BACA,aACA,OACArL,+BAGA7iF,SACAxU,OAAA,2BAEAyiG,SAAA,eACApoF,GAAA,OACAotB,cAAA,OACAi8D,YAAA,QACAvB,eAAA,gBACAz6D,YAAA,UACAi8D,uBACAC,aAAA,WACAC,qBAAA,eACAC,kBAAA,YACAC,wBACAc,aAAA,eACAC,eAAA,wBAIApC,QAAA,qBAAAqC,wBACArC,QAAA,yCACA,UACA,aACA,OACAp8B,4CAEAo8B,QAAA,8BACA,OACA,4BACA,aACA,sBACA,uBACA5rB,iCAEA4rB,QAAA,2BACA,OACA,aACArlC,8BAEAqlC,QAAA,8BACA,OACA,aACA9/B,iCAEA8/B,QAAA,kCACA,OACA,aACA,sBACA,eACAxkC,qCAEAwkC,QAAA,gCACA,aACA,OACA,eACA,UACA1rB,kCAEA0rB,QAAA,uBACA,OACA,aACA,4BACAx9B,0BAEAw9B,QAAA,uBACA,OACA,sBACAz9B,0BAEAy9B,QAAA,wBACA,OACA,aACAzkC,2BAEAykC,QAAA,qBAAA,cAAAY,2BACAZ,QAAA,qBACA,cACA,sBACA,4BACA,eACA,yBACA,OACA,aACAsB,oBAEAtB,QAAA,2BACA,cACAQ,0BAEAR,QAAA,kBACA,QACA,SACA,UACA,sBACA,uBACA,oBACA,OACA,eACA,uBACA,SACAuB,MACAjG,OACA5jD,QACAlZ,oBACAgjE,qBACAhG,kBACA58D,KACAF,aACA+iE,sBAEA,MAAAC,gBAAAC,UACAJ,MACAjG,OACA5jD,QACAlZ,oBACAgjE,qBACAhG,kBACA58D,KACAF,aACA+iE,yBAIAzB,QAAA,0BACA,aACA,OACAjmC,4BAGAjoD,SACAxU,OAAA,8BAEAyiG,SAAA,eACApoF,GAAA,UACAotB,cAAA,MACAi8D,YAAA,WACAvB,eAAA,kBACAz6D,YAAA,kBACAi8D,uBACAC,aAAA,cACAC,qBAAA,kBACAC,kBAAA,eACAC,wBACAiB,gBAAA,eACAC,kBAAA,wBAIAvC,QAAA,qBAAAwC,2BACAxC,QAAA,yCACA,UACA,aACA,OACAld,+CAEAkd,QAAA,2BACA,OACA,aACAvkB,iCAEAukB,QAAA,8BACA,OACA,aACA3f,oCAEA2f,QAAA,kCACA,OACA,aACA,sBACA,eACAtiB,wCAEAsiB,QAAA,gCACA,aACA,OACA,eACA,UACAzZ,qCAEAyZ,QAAA,uBACA,OACA,aACA,4BACA,0BACA9e,6BAEA8e,QAAA,uBACA,OACA,sBACA/e,6BAEA+e,QAAA,wBACA,OACA,aACAviB,8BAEAuiB,QAAA,qBAAA,cAAAY,2BACAZ,QAAA,qBACA,cACA,sBACA,4BACA,eACA,yBACA,OACA,aACAsB,oBAEAtB,QAAA,kBACA,QACA,SACA,UACA,sBACA,uBACA,oBACA,OACA,eACA,uBACA,SACAuB,MACAjG,OACA5jD,QACAlZ,oBACAgjE,qBACAhG,kBACA58D,KACAF,aACA+iE,sBAEA,MAAAC,gBAAAC,UACAJ,MACAjG,OACA5jD,QACAlZ,oBACAgjE,qBACAhG,kBACA58D,KACAF,aACA+iE,wBAKA3vF,SACAxU,OAAA,0BAEAyiG,SAAA,eACApoF,GAAA,MACAotB,cAAA,SACAi8D,YAAA,OACAvB,eAAA,UACAz6D,YAAA,GACAi8D,uBACAC,aAAA,UACAC,qBAAA,GACAC,kBAAA,GACAC,4BAEArB,QAAA,qBAAAyC,sBACAzC,QAAA,yCACA,UACA,aACA,OACAyC,uBAEAzC,QAAA,2BACA,OACA,aACAyC,uBAEAzC,QAAA,8BACA,OACA,aACAyC,uBAEAzC,QAAA,kCACA,OACA,aACAyC,uBAEAzC,QAAA,gCACA,aACA,OACA,eACAyC,uBAEAzC,QAAA,uBACA,OACA,aACA,4BACA,0BACAyC,uBAEAzC,QAAA,uBACA,OACA,sBACAyC,uBAEAzC,QAAA,wBACA,OACA,aACAyC,uBAEAzC,QAAA,qBAAA,cAAAyC,uBACAzC,QAAA,qBACA,cACA,sBACA,4BACA,eACA,yBACA,OACA,aACAsB,oBAEAtB,QAAA,kBACA,QACA,SACA,UACA,sBACA,uBACA,oBACA,OACA,eACA,SACAuB,MACAjG,OACA5jD,QACAlZ,oBACAgjE,qBACAhG,kBACA58D,KACAF,cAEA,MAAAgjE,gBAAAC,UACAJ,MACAjG,OACA5jD,QACAlZ,oBACAgjE,qBACAhG,kBACA58D,KACAF,iBAIAshE,QAAA,0BACA,aACA,OACAjmC,4BAGAjoD,SACAxU,OAAA,+BACAyiG,SAAA,eAEApoF,GAAA,WACAotB,cAAA,MACAi8D,YAAA,YACAvB,eAAA,oBACAz6D,YAAA,kBACAi8D,uBACAC,aAAA,cACAC,qBAAA,oBACAC,kBAAA,oBACAC,wBACAqB,iBAAA,eACAC,mBAAA,wBAGA3C,QAAA,qBAAAyC,s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ACA2nB,GAAA,oBACA54B,OAAA,cAGA,GACAwxF,YACAA,WAAApxD,SACAoxD,WAAApxD,QAAAkG,aACA,CACAo2G,OAAAt8G,QACAoxD,WAAApxD,QAAAkG,aACA,IACAkrD,WAAApxD,QAAA+1B,KAGA,GACAq7B,YACAA,WAAAjsD,UACAisD,WAAAjsD,SAAAzF,yBACA0xD,WAAAjsD,SAAAzF,wBAAA42B,cACA,CACAgmF,OAAAhmF,cACA86B,WAAAjsD,SAAAzF,wBAAA42B,cAGA2lC,UAAAsR,cAAA1a,UAAAypD,WAKA9uI,SAAAxU,OAAA,aAAAyQ,WAAA,qBACA,aACA,SACA,SACA,eACA,UACA,sBACA,4BACA,eACA,iBCliDA,oBACA,gBACA,uBACA,YACA,eACA,OACA,KACA,UACA,YACA,aACA,yBACA,cACA,WACA,OACA,uBACA,sBACA,SACAm7B,WACAh7B,OACAotF,OACA+D,aACAxK,QACAr2D,oBACAC,0BACAC,aACAyyF,eACA31B,kBACAskC,cACAt+B,qBACAjB,UACA3C,aACA16C,KACA45D,GACAplE,QACAu0D,UACA1Q,WACA58D,uBACAJ,YACA+vG,SACAzkB,KACApoB,qBACA2pD;AAEA,GAAAnO,OAAAp/I,IACAo/I,OAAAoO,wBAAA,KACApO,OAAAqO,qBAAA,CACApiH,YAAA0hF,WAAA,wBAGA,IAAA/1B,QAAA2R,IAAAmG,aAAAloG,UAAA,CACA,GAAAqN,QAAAmpC,SAAA45C,QAAA2R,IAAAmG,YAAA2nB,iBACAxiH,QACA/E,QAAA,8CACAklI,MAAA3D,SAAA,4BAAApgI,SAGAA,OAAAutF,IAAA,qBAAA,WACAvyD,WAAA0hF,WAAA,qBAGAqyB,OAAA7vC,YAAA,SAAA7qB,WACA,MAAAsnC,MAAAwB,YAAAztB,aAAAwP,YAAA7qB,YAOA,SAAA86D,4BAAAh5C,WACA3sD,QAAAsE,QAAA,iBAAAqoD,WAGA,QAAA64C,qBACA,OAAA5hD,OAAAi4B,SAAAjM,OAAA3lH,MACA,IAAA,UACA,GAAAojG,iBACAshD,4BAAA,WACA,MACA/qD,QAAAi4B,SAAA5xH,MACA,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kBACAC,QACA0hG,OACAC,KACAx1F,WAAA,oBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,eACAC,QACA0hG,OACAC,KACAx1F,WAAA,iBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,4BACAC,QACA0hG,OACAC,KACAx1F,WAAA,4BACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,eAOAp7D,QAAAu7D,KACA77D,MACAriG,KAAA,MACAC,QACAsiG,WAAA,KACAP,SAAA,qDAGAI,QACApiG,KAAA,UACAC,QACA0hG,OACAC,KACAx1F,WAAA,oBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAMAt7D,QAAAlkD,MACA4jD,MACAriG,KAAA,OACAC,QACAsiG,WAAA,KACAP,SAAA,qDAGAI,QACApiG,KAAA,YACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,cACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,aACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,eACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,eACAC,QACA0hG,OACAC,KACAx1F,WAAA,oBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,YACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,yBACAC,QACA0hG,OACAC,KACAx1F,WAAA,4BACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,eAOAp7D,QAAAN,MACAA,MACAriG,KAAA,OACAC,QACAsiG,WAAA,KACAP,SAAA,qDAGAI,QACApiG,KAAA,gBACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,gBACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,gBACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,gBAGAd,UAAA,WACA,MAAA,SAIAn9J,KAAA,cACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,eACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,aACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,eACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,eACAC,QACA0hG,OACAC,KACAx1F,WAAA,oBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA;AACAC,QACA0hG,OACAC,KACAx1F,WAAA,qBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,yBACAC,QACA0hG,OACAC,KACAx1F,WAAA,4BACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,eAQAp7D,QAAAxa,SACAka,MACAriG,KAAA,UACAC,QACAsiG,WAAA,KACAP,SAAA,qDAGAI,QACApiG,KAAA,kBACAC,QACA0hG,OACAC,KACAx1F,WAAA,wBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,kBACAC,QACA0hG,OACAC,KACAx1F,WAAA,wBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,gBACAC,QACA0hG,OACAC,KACAx1F,WAAA,wBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,kBACAC,QACA0hG,OACAC,KACAx1F,WAAA,wBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,kBACAC,QACA0hG,OACAC,KACAx1F,WAAA,oBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,eACAC,QACA0hG,OACAC,KACAx1F,WAAA,wBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,WACAC,kBACAC,kBAKAj+J,KAAA,4BACAC,QACA0hG,OACAC,KACAx1F,WAAA,4BACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,eAOAp7D,QAAAwE,UACA9E,MACAriG,KAAA,WACAC,QACAsiG,WAAA,KACAP,SAAA,qDAGAI,QACApiG,KAAA,oBACAC,QACA0hG,OACAC,KACAx1F,WAAA,yBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,eAKA/9J,KAAA,oBACAC,QACA0hG,OACAC,KACAx1F,WAAA,yBACA01F,aAAA,SAEAg8D,cACA/7D,aACAg8D,kBAOAhiK","file":"portal.js","sourcesContent":["if ( ! Object.extend ) {\r\n\tObject.extend = function(destination, source) {\r\n\t return $.extend(true, destination, source) ;\r\n // for (var property in source) {\r\n\t // if (source.hasOwnProperty(property)) {\r\n\t // destination[property] = source[property];\r\n\t // }\r\n\t // }\r\n\t // return destination;\r\n\t};\r\n}\r\n\r\nif ( ! Object.values ) {\r\n Object.values = function(object) {\r\n var values = [];\r\n for(var property in object) {\r\n if ( object.hasOwnProperty(property))\r\n values.push(object[property]);\r\n }\r\n return values;\r\n }\r\n}\r\n\r\n\r\nif ( ! Number.isNumeric ) {\r\n\tNumber.isNumeric = function(n) {\r\n\t return !isNaN(parseFloat(n)) && isFinite(n);\r\n\t};\r\n}\r\n\r\nfunction isFunction(functionToCheck) {\r\n\tvar getType = {};\r\n\treturn functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\r\n}\r\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.angularCreditCards = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= new Date(year, month)\r\n}\r\n\r\nfunction parseMonth (month) {\r\n return parseIntStrict(month)\r\n}\r\n\r\nfunction formatExpYear (year, strip) {\r\n year = year.toString()\r\n return strip ? year.substr(2, 4) : year\r\n}\r\n\r\nfunction isExpYearValid (year) {\r\n if (typeof year !== 'number') return false\r\n year = parseIntStrict(year)\r\n return year > 0\r\n}\r\n\r\nfunction isExpYearPast (year) {\r\n return new Date().getFullYear() > year\r\n}\r\n\r\n},{\"is-valid-month\":17,\"parse-int\":21,\"parse-year\":22}],11:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar ccTypes = _dereq_('creditcards-types')\r\nvar camel = _dereq_('camel-case')\r\nvar extend = _dereq_('xtend')\r\n\r\nmodule.exports = extend(ccTypes, {\r\n get: function getTypeByName (name) {\r\n return ccTypes.types[camel(name)]\r\n }\r\n})\r\n\r\n},{\"camel-case\":2,\"creditcards-types\":4,\"xtend\":28}],12:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar zeroFill = _dereq_('zero-fill')\r\nvar parseIntStrict = _dereq_('parse-int')\r\n\r\nvar pad = zeroFill(2)\r\n\r\nmodule.exports = function expandYear (year, now) {\r\n now = now || new Date()\r\n var base = now.getFullYear().toString().substr(0, 2)\r\n year = parseIntStrict(year)\r\n return parseIntStrict(base + pad(year))\r\n}\r\n\r\n},{\"parse-int\":21,\"zero-fill\":30}],13:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nmodule.exports = (function (array) {\r\n return function luhn (number) {\r\n if (!number) return false\r\n var length = number.length\r\n var bit = 1\r\n var sum = 0\r\n var value\r\n\r\n while (length) {\r\n value = parseInt(number.charAt(--length), 10)\r\n sum += (bit ^= 1) ? array[value] : value\r\n }\r\n\r\n return !!sum && sum % 10 === 0\r\n }\r\n}([0, 2, 4, 6, 8, 1, 3, 5, 7, 9]))\r\n\r\n},{}],14:[function(_dereq_,module,exports){\r\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\r\nvar slice = Array.prototype.slice;\r\nvar toStr = Object.prototype.toString;\r\nvar funcType = '[object Function]';\r\n\r\nmodule.exports = function bind(that) {\r\n var target = this;\r\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\r\n throw new TypeError(ERROR_MESSAGE + target);\r\n }\r\n var args = slice.call(arguments, 1);\r\n\r\n var binder = function () {\r\n if (this instanceof bound) {\r\n var result = target.apply(\r\n this,\r\n args.concat(slice.call(arguments))\r\n );\r\n if (Object(result) === result) {\r\n return result;\r\n }\r\n return this;\r\n } else {\r\n return target.apply(\r\n that,\r\n args.concat(slice.call(arguments))\r\n );\r\n }\r\n };\r\n\r\n var boundLength = Math.max(0, target.length - args.length);\r\n var boundArgs = [];\r\n for (var i = 0; i < boundLength; i++) {\r\n boundArgs.push('$' + i);\r\n }\r\n\r\n var bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\r\n\r\n if (target.prototype) {\r\n var Empty = function Empty() {};\r\n Empty.prototype = target.prototype;\r\n bound.prototype = new Empty();\r\n Empty.prototype = null;\r\n }\r\n\r\n return bound;\r\n};\r\n\r\n\r\n},{}],15:[function(_dereq_,module,exports){\r\n'use strict';\r\nvar numberIsNan = _dereq_('number-is-nan');\r\n\r\nmodule.exports = Number.isFinite || function (val) {\r\n\treturn !(typeof val !== 'number' || numberIsNan(val) || val === Infinity || val === -Infinity);\r\n};\r\n\r\n},{\"number-is-nan\":20}],16:[function(_dereq_,module,exports){\r\n// https://github.com/paulmillr/es6-shim\r\n// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isinteger\r\nvar isFinite = _dereq_(\"is-finite\");\r\nmodule.exports = Number.isInteger || function(val) {\r\n return typeof val === \"number\" &&\r\n isFinite(val) &&\r\n Math.floor(val) === val;\r\n};\r\n\r\n},{\"is-finite\":15}],17:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar isInteger = _dereq_('is-integer')\r\n\r\nmodule.exports = function isValidMonth (month) {\r\n if (typeof month !== 'number' || !isInteger(month)) return false\r\n return month >= 1 && month <= 12\r\n}\r\n\r\n},{\"is-integer\":16}],18:[function(_dereq_,module,exports){\r\nmodule.exports = Array.isArray || function (arr) {\r\n return Object.prototype.toString.call(arr) == '[object Array]';\r\n};\r\n\r\n},{}],19:[function(_dereq_,module,exports){\r\n/**\r\n * Special language-specific overrides.\r\n *\r\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\r\n *\r\n * @type {Object}\r\n */\r\nvar LANGUAGES = {\r\n tr: {\r\n regexp: /\\u0130|\\u0049|\\u0049\\u0307/g,\r\n map: {\r\n '\\u0130': '\\u0069',\r\n '\\u0049': '\\u0131',\r\n '\\u0049\\u0307': '\\u0069'\r\n }\r\n },\r\n az: {\r\n regexp: /[\\u0130]/g,\r\n map: {\r\n '\\u0130': '\\u0069',\r\n '\\u0049': '\\u0131',\r\n '\\u0049\\u0307': '\\u0069'\r\n }\r\n },\r\n lt: {\r\n regexp: /[\\u0049\\u004A\\u012E\\u00CC\\u00CD\\u0128]/g,\r\n map: {\r\n '\\u0049': '\\u0069\\u0307',\r\n '\\u004A': '\\u006A\\u0307',\r\n '\\u012E': '\\u012F\\u0307',\r\n '\\u00CC': '\\u0069\\u0307\\u0300',\r\n '\\u00CD': '\\u0069\\u0307\\u0301',\r\n '\\u0128': '\\u0069\\u0307\\u0303'\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Lowercase a string.\r\n *\r\n * @param {String} str\r\n * @return {String}\r\n */\r\nmodule.exports = function (str, locale) {\r\n var lang = LANGUAGES[locale]\r\n\r\n str = str == null ? '' : String(str)\r\n\r\n if (lang) {\r\n str = str.replace(lang.regexp, function (m) { return lang.map[m] })\r\n }\r\n\r\n return str.toLowerCase()\r\n}\r\n\r\n},{}],20:[function(_dereq_,module,exports){\r\n'use strict';\r\nmodule.exports = Number.isNaN || function (x) {\r\n\treturn x !== x;\r\n};\r\n\r\n},{}],21:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar isInteger = _dereq_('is-integer')\r\n\r\nmodule.exports = function parseIntStrict (int) {\r\n if (typeof int === 'number') {\r\n return isInteger(int) ? int : undefined\r\n }\r\n if (typeof int === 'string') {\r\n return /^\\d+$/.test(int) ? parseInt(int, 10) : undefined\r\n }\r\n}\r\n\r\n},{\"is-integer\":16}],22:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar parseIntStrict = _dereq_('parse-int')\r\nvar expandYear = _dereq_('expand-year')\r\n\r\nmodule.exports = function parseYear (year, expand, now) {\r\n year = parseIntStrict(year)\r\n if (year == null) return\r\n if (!expand) return year\r\n return expandYear(year, now)\r\n}\r\n\r\n},{\"expand-year\":12,\"parse-int\":21}],23:[function(_dereq_,module,exports){\r\nvar lowerCase = _dereq_('lower-case')\r\n\r\nvar NON_WORD_REGEXP = _dereq_('./vendor/non-word-regexp')\r\nvar CAMEL_CASE_REGEXP = _dereq_('./vendor/camel-case-regexp')\r\nvar TRAILING_DIGIT_REGEXP = _dereq_('./vendor/trailing-digit-regexp')\r\n\r\n/**\r\n * Sentence case a string.\r\n *\r\n * @param {String} str\r\n * @param {String} locale\r\n * @param {String} replacement\r\n * @return {String}\r\n */\r\nmodule.exports = function (str, locale, replacement) {\r\n if (str == null) {\r\n return ''\r\n }\r\n\r\n replacement = replacement || ' '\r\n\r\n function replace (match, index, string) {\r\n if (index === 0 || index === (string.length - match.length)) {\r\n return ''\r\n }\r\n\r\n return replacement\r\n }\r\n\r\n str = String(str)\r\n // Support camel case (\"camelCase\" -> \"camel Case\").\r\n .replace(CAMEL_CASE_REGEXP, '$1 $2')\r\n // Support digit groups (\"test2012\" -> \"test 2012\").\r\n .replace(TRAILING_DIGIT_REGEXP, '$1 $2')\r\n // Remove all non-word characters and replace with a single space.\r\n .replace(NON_WORD_REGEXP, replace)\r\n\r\n // Lower case the entire string.\r\n return lowerCase(str, locale)\r\n}\r\n\r\n},{\"./vendor/camel-case-regexp\":24,\"./vendor/non-word-regexp\":25,\"./vendor/trailing-digit-regexp\":26,\"lower-case\":19}],24:[function(_dereq_,module,exports){\r\nmodule.exports = /([\\u0061-\\u007A\\u00B5\\u00DF-\\u00F6\\u00F8-\\u00FF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0561-\\u0587\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7FA\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A])([\\u0041-\\u005A\\u00C0-\\u00D6\\u00D8-\\u00DE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA\\uFF21-\\uFF3A\\u0030-\\u0039\\u00B2\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19])/g\r\n\r\n},{}],25:[function(_dereq_,module,exports){\r\nmodule.exports = /[^\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u0030-\\u0039\\u00B2\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]+/g\r\n\r\n},{}],26:[function(_dereq_,module,exports){\r\nmodule.exports = /([\\u0030-\\u0039\\u00B2\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19])([^\\u0030-\\u0039\\u00B2\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19])/g\r\n\r\n},{}],27:[function(_dereq_,module,exports){\r\n/**\r\n * Special language-specific overrides.\r\n *\r\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\r\n *\r\n * @type {Object}\r\n */\r\nvar LANGUAGES = {\r\n tr: {\r\n regexp: /[\\u0069]/g,\r\n map: {\r\n '\\u0069': '\\u0130'\r\n }\r\n },\r\n az: {\r\n regexp: /[\\u0069]/g,\r\n map: {\r\n '\\u0069': '\\u0130'\r\n }\r\n },\r\n lt: {\r\n regexp: /[\\u0069\\u006A\\u012F]\\u0307|\\u0069\\u0307[\\u0300\\u0301\\u0303]/g,\r\n map: {\r\n '\\u0069\\u0307': '\\u0049',\r\n '\\u006A\\u0307': '\\u004A',\r\n '\\u012F\\u0307': '\\u012E',\r\n '\\u0069\\u0307\\u0300': '\\u00CC',\r\n '\\u0069\\u0307\\u0301': '\\u00CD',\r\n '\\u0069\\u0307\\u0303': '\\u0128'\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Upper case a string.\r\n *\r\n * @param {String} str\r\n * @return {String}\r\n */\r\nmodule.exports = function (str, locale) {\r\n var lang = LANGUAGES[locale]\r\n\r\n str = str == null ? '' : String(str)\r\n\r\n if (lang) {\r\n str = str.replace(lang.regexp, function (m) { return lang.map[m] })\r\n }\r\n\r\n return str.toUpperCase()\r\n}\r\n\r\n},{}],28:[function(_dereq_,module,exports){\r\nmodule.exports = extend\r\n\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nfunction extend() {\r\n var target = {}\r\n\r\n for (var i = 0; i < arguments.length; i++) {\r\n var source = arguments[i]\r\n\r\n for (var key in source) {\r\n if (hasOwnProperty.call(source, key)) {\r\n target[key] = source[key]\r\n }\r\n }\r\n }\r\n\r\n return target\r\n}\r\n\r\n},{}],29:[function(_dereq_,module,exports){\r\nmodule.exports = extend\r\n\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nfunction extend(target) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n var source = arguments[i]\r\n\r\n for (var key in source) {\r\n if (hasOwnProperty.call(source, key)) {\r\n target[key] = source[key]\r\n }\r\n }\r\n }\r\n\r\n return target\r\n}\r\n\r\n},{}],30:[function(_dereq_,module,exports){\r\n/**\r\n * Given a number, return a zero-filled string.\r\n * From http://stackoverflow.com/questions/1267283/\r\n * @param {number} width\r\n * @param {number} number\r\n * @return {string}\r\n */\r\nmodule.exports = function zeroFill (width, number, pad) {\r\n if (number === undefined) {\r\n return function (number, pad) {\r\n return zeroFill(width, number, pad)\r\n }\r\n }\r\n if (pad === undefined) pad = '0'\r\n width -= number.toString().length\r\n if (width > 0) return new Array(width + (/\\./.test(number) ? 2 : 1)).join(pad) + number\r\n return number + ''\r\n}\r\n\r\n},{}],31:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar cvc = _dereq_('creditcards').cvc\r\nvar bind = _dereq_('function-bind')\r\n\r\nmodule.exports = factory\r\n\r\nfactory.$inject = ['$parse']\r\nfunction factory ($parse) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n compile: function (element, attributes) {\r\n attributes.$set('maxlength', 4)\r\n attributes.$set('pattern', '[0-9]*')\r\n attributes.$set('xAutocompletetype', 'cc-csc')\r\n\r\n return function (scope, element, attributes, ngModel) {\r\n\r\n ngModel.$validators.ccCvc = function (value) {\r\n return ngModel.$isEmpty(ngModel.$viewValue) || cvc.isValid(value, $parse(attributes.ccType)(scope))\r\n }\r\n\r\n if (attributes.ccType) {\r\n scope.$watch(attributes.ccType, bind.call(ngModel.$validate, ngModel))\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n},{\"creditcards\":7,\"function-bind\":14}],32:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar expiration = _dereq_('creditcards').expiration\r\nvar month = expiration.month\r\nvar year = expiration.year\r\nvar ap = _dereq_('ap')\r\n\r\nexports = module.exports = function ccExp () {\r\n return {\r\n restrict: 'AE',\r\n require: 'ccExp',\r\n controller: CcExpController,\r\n link: function (scope, element, attributes, ccExp) {\r\n ccExp.$watch()\r\n }\r\n }\r\n}\r\n\r\nCcExpController.$inject = ['$scope', '$element']\r\nfunction CcExpController ($scope, $element) {\r\n var nullFormCtrl = {\r\n $setValidity: noop\r\n }\r\n var parentForm = $element.inheritedData('$formController') || nullFormCtrl\r\n var ngModel = {\r\n year: {},\r\n month: {}\r\n }\r\n\r\n this.setMonth = function (monthCtrl) {\r\n ngModel.month = monthCtrl\r\n }\r\n this.setYear = function (yearCtrl) {\r\n ngModel.year = yearCtrl\r\n }\r\n\r\n function setValidity (exp) {\r\n var expMonth = exp.month\r\n var expYear = exp.year\r\n var valid = (expMonth == null && expYear == null) || !!expMonth && !!expYear && !expiration.isPast(expMonth, expYear)\r\n parentForm.$setValidity('ccExp', valid, $element)\r\n }\r\n\r\n this.$watch = function $watchExp () {\r\n $scope.$watch(function watchExp () {\r\n return {\r\n month: ngModel.month.$modelValue,\r\n year: ngModel.year.$modelValue\r\n }\r\n }, setValidity, true)\r\n }\r\n}\r\n\r\nvar nullCcExp = {\r\n setMonth: noop,\r\n setYear: noop\r\n}\r\n\r\nexports.month = function ccExpMonth () {\r\n return {\r\n restrict: 'A',\r\n require: ['ngModel', '^?ccExp'],\r\n compile: function (element, attributes) {\r\n attributes.$set('maxlength', 2)\r\n attributes.$set('pattern', '[0-9]*')\r\n attributes.$set('xAutocompletetype', 'cc-exp-month')\r\n\r\n return function (scope, element, attributes, controllers) {\r\n var ngModel = controllers[0]\r\n var ccExp = controllers[1] || nullCcExp\r\n\r\n ccExp.setMonth(ngModel)\r\n ngModel.$parsers.unshift(month.parse)\r\n ngModel.$validators.ccExpMonth = function validateExpMonth (value) {\r\n return ngModel.$isEmpty(ngModel.$viewValue) || month.isValid(value)\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexports.year = function ccExpYear () {\r\n return {\r\n restrict: 'A',\r\n require: ['ngModel', '^?ccExp'],\r\n compile: function (element, attributes) {\r\n var fullYear = attributes.fullYear !== undefined\r\n\r\n attributes.$set('maxlength', fullYear ? 4 : 2)\r\n attributes.$set('pattern', '[0-9]*')\r\n attributes.$set('xAutocompletetype', 'cc-exp-year')\r\n\r\n return function (scope, element, attributes, controllers) {\r\n var ngModel = controllers[0]\r\n var ccExp = controllers[1] || nullCcExp\r\n\r\n ccExp.setYear(ngModel)\r\n\r\n ngModel.$parsers.unshift(ap.partialRight(year.parse, !fullYear))\r\n\r\n ngModel.$formatters.unshift(function formatExpYear (value) {\r\n return value ? year.format(value, !fullYear) : ''\r\n })\r\n\r\n ngModel.$validators.ccExpYear = function validateExpYear (value) {\r\n return ngModel.$isEmpty(ngModel.$viewValue) || (year.isValid(value) && !year.isPast(value))\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction noop () {}\r\n\r\n},{\"ap\":1,\"creditcards\":7}],33:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar card = _dereq_('creditcards').card\r\nvar array = _dereq_('cast-array')\r\nvar partial = _dereq_('ap').partial\r\n\r\nmodule.exports = factory\r\n\r\nfactory.$inject = ['$parse']\r\nfunction factory ($parse) {\r\n return {\r\n restrict: 'A',\r\n require: ['ngModel', 'ccNumber'],\r\n controller: function () {\r\n this.type = null\r\n this.eagerType = null\r\n },\r\n compile: function ($element, $attributes) {\r\n $attributes.$set('pattern', '[0-9]*')\r\n $attributes.$set('xAutocompletetype', 'cc-number')\r\n\r\n return function ($scope, $element, $attributes, controllers) {\r\n var ngModel = controllers[0]\r\n var ccNumber = controllers[1]\r\n\r\n $scope.$watch($attributes.ngModel, function (number) {\r\n ngModel.$ccType = ccNumber.type = card.type(number)\r\n })\r\n\r\n function $viewValue () {\r\n return ngModel.$viewValue\r\n }\r\n\r\n function setCursorPostion (element, position) {\r\n if (element.setSelectionRange) {\r\n element.setSelectionRange(position, position)\r\n } else if (element.createTextRange) {\r\n var range = element.createTextRange()\r\n range.move('character', position)\r\n range.select()\r\n }\r\n }\r\n\r\n if ($attributes.ccEagerType != null) {\r\n $scope.$watch($viewValue, function eagerTypeCheck (number) {\r\n if (!number) return\r\n number = card.parse(number)\r\n ngModel.$ccEagerType = ccNumber.eagerType = card.type(number, true)\r\n })\r\n }\r\n\r\n if ($attributes.ccType) {\r\n $scope.$watch($attributes.ccType, function () {\r\n ngModel.$validate()\r\n })\r\n }\r\n\r\n if ($attributes.ccFormat != null) {\r\n $element.on('input', function formatInput () {\r\n var input = $element.val()\r\n var previous = $viewValue()\r\n if (!input) return\r\n var element = $element[0]\r\n var formatted = card.format(card.parse(input))\r\n\r\n var selectionEnd = element.selectionEnd\r\n ngModel.$setViewValue(formatted)\r\n ngModel.$render()\r\n if (formatted && (!formatted.charAt(selectionEnd - 1).trim())) {\r\n if (previous && previous.length < formatted.length) {\r\n selectionEnd++\r\n } else {\r\n selectionEnd--\r\n }\r\n }\r\n setCursorPostion(element, selectionEnd)\r\n\r\n })\r\n }\r\n\r\n ngModel.$parsers.unshift(card.parse)\r\n\r\n ngModel.$validators.ccNumber = function validateCcNumber (number) {\r\n return ngModel.$isEmpty(ngModel.$viewValue) || card.isValid(number)\r\n }\r\n\r\n ngModel.$validators.ccNumberType = function validateCcNumberType (number) {\r\n if (ngModel.$isEmpty(ngModel.$viewValue)) return true\r\n var type = $parse($attributes.ccType)($scope)\r\n if (!type) card.isValid(number)\r\n return array(type).some(partial(card.isValid, number))\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n},{\"ap\":1,\"cast-array\":3,\"creditcards\":7}],34:[function(_dereq_,module,exports){\r\n(function (global){\r\n'use strict'\r\n\r\nvar angular = (typeof window !== \"undefined\" ? window['angular'] : typeof global !== \"undefined\" ? global['angular'] : null)\r\nvar creditcards = _dereq_('creditcards')\r\nvar number = _dereq_('./number')\r\nvar cvc = _dereq_('./cvc')\r\nvar expiration = _dereq_('./expiration')\r\n\r\nmodule.exports = angular\r\n .module('credit-cards', [])\r\n .value('creditcards', creditcards)\r\n .directive('ccNumber', number)\r\n .directive('ccExp', expiration)\r\n .directive('ccExpMonth', expiration.month)\r\n .directive('ccExpYear', expiration.year)\r\n .directive('ccCvc', cvc)\r\n .name\r\n\r\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\r\n},{\"./cvc\":31,\"./expiration\":32,\"./number\":33,\"creditcards\":7}]},{},[34])(34)\r\n});","/**\n * Deloitte Digital global namespace for modules\n * @namespace DD\n */\n;(function() {\n\t'use strict';\n\n\twindow.DD = window.DD || {};\n\n\t/**\n\t * Breakpoints for JavaScript. Works with the Deloitte Digital SCSS @bp mixin\n\t *\n\t * @namespace bp\n\t * @memberof DD\n\t * @version 1.0.0\n\t * @copyright 2012-2014 Deloitte Digital Australia - http://www.deloittedigital.com/au\n\t * @author Deloitte Digital Australia deloittedigital@deloitte.com.au\n\t * @license BSD 3-Clause (http://opensource.org/licenses/BSD-3-Clause)\n\t */\n\twindow.DD.bp = (function() {\n\t\tvar _minBreakpoints,\n\t\t\t_maxBreakpoints,\n\t\t\t_options = {\n\t\t\t\tisResponsive: true,\n\t\t\t\tbaseFontSize: 16,\n\t\t\t\tbreakpoints: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'xxs',\n\t\t\t\t\t\tpx: 359\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'xs',\n\t\t\t\t\t\tpx: 480\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 's',\n\t\t\t\t\t\tpx: 640\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'm',\n\t\t\t\t\t\tpx: 768\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'l',\n\t\t\t\t\t\tpx: 1024\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'xl',\n\t\t\t\t\t\tpx: 1244\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'xxl',\n\t\t\t\t\t\tpx: 1410\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tstaticRange: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 'xl'\n\t\t\t\t}\n\t\t\t},\n\t\t\t_initBreakpoints,\n\t\t\t_parseMinMaxInputs,\n\t\t\t_pxToEms,\n\t\t\t_bpToEms,\n\t\t\t_bpIsValidForStatic,\n\t\t\t_bpMin,\n\t\t\t_bpMax,\n\t\t\t_bpBetween,\n\t\t\tget,\n\t\t\tgetHeight,\n\t\t\tis,\n\t\t\tisHeight,\n\t\t\toptions;\n\n\t\t/**\n\t\t * Sorts the breakpoints and assigns them to an associative array for more efficient lookup.\n\t\t * Immediately invoked on initialisation\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t */\n\t\t_initBreakpoints = function() {\n\t\t\t//sort the breakpoints into order of smallest to largest\n\t\t\tvar sortedBreakpoints = _options.breakpoints.sort(function(a, b) {\n\t\t\t\t// only sort if the correct objects are present\n\t\t\t\tif (a.px < b.px) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\n\t\t\t\tif (a.px > b.px) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t\t// reset the breakpoints\n\t\t\t_minBreakpoints = {};\n\t\t\t_maxBreakpoints = {};\n\n\t\t\t// loop through sorted breakpoints to generate a quick lookup object using the name as a key\n\t\t\tfor (var i = 0, len = sortedBreakpoints.length, last = len - 1; i < len; i += 1) {\n\t\t\t\t_minBreakpoints[sortedBreakpoints[i].name] = parseInt(sortedBreakpoints[i].px, 10);\n\n\t\t\t\t// skip the last item in the list as we assume there is no maximum for the last\n\t\t\t\tif (i < last) {\n\t\t\t\t\t// the max breakpoint of the current size is the next breakpoints\n\t\t\t\t\t// width minus 1px so there is no overlap between breakpoints\n\t\t\t\t\t_maxBreakpoints[sortedBreakpoints[i].name] = parseInt(sortedBreakpoints[i + 1].px - 1, 10);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t_initBreakpoints();\n\n\t\t/**\n\t\t * Splits string syntax 'xs,m' into separate values 'xs' and 'm'\n\t\t * Converts string '5' to numeric 5\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} min Number in pixels or string notation\n\t\t * @param {String|Number} max Number in pixels or string notation\n\t\t * @return {Object} Object containing the min and max values parsed as a number\n\t\t */\n\t\t_parseMinMaxInputs = function(min, max) {\n\t\t\tvar parseValue = function(val) {\n\t\t\t\t\tif (typeof (val) === 'string') {\n\t\t\t\t\t\t// Strip whitespace\n\t\t\t\t\t\tval = val.replace(/\\s/g, '');\n\n\t\t\t\t\t\t// If val only contains digits, convert it to a number\n\t\t\t\t\t\tif (/^\\d+$/.test(val)) {\n\t\t\t\t\t\t\tval = parseInt(val, 10);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\t\t\t\tbpArray,\n\t\t\t\tresultMin = min,\n\t\t\t\tresultMax = max || 0;\n\n\t\t\t// check if it's using the string syntax, if so - split it\n\t\t\tif (typeof (min) === 'string' && min.indexOf(',') !== -1 && resultMax === 0) {\n\t\t\t\tbpArray = min.split(',');\n\t\t\t\tif (bpArray.length === 2) {\n\t\t\t\t\tresultMin = bpArray[0];\n\t\t\t\t\tresultMax = bpArray[1];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tmin: parseValue(resultMin),\n\t\t\t\tmax: parseValue(resultMax)\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t\t * Converts a number of pixels into em\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {Number} px Number in pixels\n\t\t * @return {String} The converted number in em as a string\n\t\t */\n\t\t_pxToEms = function(px) {\n\t\t\treturn px / _options.baseFontSize;\n\t\t};\n\n\t\t/**\n\t\t * Converts a breakpoint name/value (e.g. l) to the px variable then to ems\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} breakpoint Breakpoint name as a string, or as a number in pixels\n\t\t * @param {Boolean} [isMax=false] Flag to determine if the min or max of the breakpoint needs to be used\n\t\t * @return {String} The converted number in em as a string\n\t\t */\n\t\t_bpToEms = function(breakpoint, isMax) {\n\t\t\tif (typeof (breakpoint) === 'number') {\n\t\t\t\treturn _pxToEms(breakpoint);\n\t\t\t}\n\n\t\t\tvar list = (isMax === true) ? _maxBreakpoints : _minBreakpoints,\n\t\t\t\tems = '0';\n\n\t\t\tfor (var key in list) {\n\t\t\t\tif (list.hasOwnProperty(key)) {\n\t\t\t\t\tif (breakpoint === key.toLowerCase()) {\n\t\t\t\t\t\tems = _pxToEms(list[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ems === '0') {\n\t\t\t\tconsole.warn('DD.bp: Breakpoint \\'' + breakpoint + '\\' doesn\\'t exist - replacing with 0');\n\t\t\t}\n\n\t\t\treturn ems;\n\t\t};\n\n\t\t/**\n\t\t * Checks if the breakpoint provided falls inside the valid static min/max region\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} min Breakpoint name as a string, as a number in pixels, or as string notation containing both breakpoints\n\t\t * @param {String|Number} max Breakpoint name as a string, or as a number in pixels\n\t\t * @param {Boolean} [property='width'] which property to check for (e.g. width or height)\n\t\t * @return {Boolean} If the breakpoint fits inside the static range or not\n\t\t */\n\t\t_bpIsValidForStatic = function(min, max, property) {\n\t\t\tif (typeof (property) !== 'string') {\n\t\t\t\tproperty = 'width'; //default to width based media query\n\t\t\t}\n\n\t\t\tif (property !== 'width') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar bpValidMin = _bpToEms(_options.staticRange.min),\n\t\t\t\tbpValidMax = _bpToEms(_options.staticRange.max, true),\n\t\t\t\tparsed = _parseMinMaxInputs(min, max),\n\t\t\t\tbpMin = _bpToEms(parsed.min),\n\t\t\t\tbpMax = _bpToEms(parsed.max);\n\n\t\t\t// if max is 0 we have a min-and-above situation\n\t\t\tif (parsed.max === 0) {\n\t\t\t\t// need to check that the min is greater than the valid min,\n\t\t\t\t// AND also that the min is less than the valid maximum\n\t\t\t\tif (bpMin >= bpValidMin && bpMin < bpValidMax) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// if min is 0 we have a max-and-below situation\n\t\t\tif (parsed.min === 0) {\n\t\t\t\tif (bpMax >= bpValidMax) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// if the min is above the valid max, or the max is below the valid min\n\t\t\tif (bpMin > bpValidMax || bpMax < bpValidMin) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// if the breakpoint is a bp-between (assumed because $max and $min aren't 0)\n\t\t\t// don't show if the max isn't above the valid max\n\t\t\tif (bpMax < bpValidMax) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * Returns a min-width media query based on bp name or px\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {String} Media query string\n\t\t */\n\t\t_bpMin = function(min, property) {\n\t\t\tvar bpMin = _bpToEms(min),\n\t\t\t\tbpType = (typeof (property) === 'string') ? property : 'width';\n\n\t\t\treturn '(min-' + bpType + ': ' + bpMin + 'em)';\n\t\t};\n\n\t\t/**\n\t\t * Returns a max-width media query based on bp name or px\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} max Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {String} Media query string\n\t\t */\n\t\t_bpMax = function(max, property) {\n\t\t\tvar bpMax = _bpToEms(max, true),\n\t\t\t\tbpType = (typeof (property) === 'string') ? property : 'width';\n\n\t\t\treturn '(max-' + bpType + ': ' + bpMax + 'em)';\n\t\t};\n\n\t\t/**\n\t\t * Returns a min-width and max-width media query based on bp name (can be the same bp name) or px\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String|Number} max Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {String} Media query string\n\t\t */\n\t\t_bpBetween = function(min, max, property) {\n\t\t\tvar bpMin = _bpToEms(min),\n\t\t\t\tbpMax = _bpToEms(max, true),\n\t\t\t\tbpType = (typeof (property) === 'string') ? property : 'width';\n\n\t\t\treturn '(min-' + bpType + ': ' + bpMin + 'em) and (max-' + bpType + ': ' + bpMax + 'em)';\n\t\t};\n\n\t\t/**\n\t\t * Breakpoint function that can take the input of a min and max\n\t\t * breakpoint by name or number (in px) along with a property\n\t\t * (like width or height) and returns the media query as a string\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // large and above\n\t\t * DD.bp.get('l');\n\t\t *\n\t\t * @example\n\t\t * // 300px and above\n\t\t * DD.bp.get(300);\n\t\t *\n\t\t * @example\n\t\t * // large and below\n\t\t * DD.bp.get(0, 'l');\n\t\t *\n\t\t * @example\n\t\t * // 300px and below\n\t\t * DD.bp.get(0, 300);\n\t\t *\n\t\t * @example\n\t\t * // Between small and large\n\t\t * DD.bp.get('s', 'l');\n\t\t *\n\t\t * @example\n\t\t * // Between 100px and 300px\n\t\t * DD.bp.get(100, 300);\n\t\t *\n\t\t * @example\n\t\t * // High resolution displays (can use 'hdpi' as well)\n\t\t * DD.bp.get('retina');\n\t\t *\n\t\t * @example\n\t\t * // Can mix and match names and numbers - between 200px and xlarge\n\t\t * DD.bp.get(200, 'xl');\n\t\t *\n\t\t * @example\n\t\t * // Between small and 960px\n\t\t * DD.bp.get('s', 960);\n\t\t *\n\t\t * @example\n\t\t * // Can use a single string (no spaces) - useful for passing through from HTML to JS\n\t\t * DD.bp.get('m,l');\n\t\t *\n\t\t * @example\n\t\t * // Can also mix names and numbers\n\t\t * DD.bp.get('xs,1000');\n\t\t *\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels, or in comma separated string notation\n\t\t * @param {String|Number} [max=0] Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {String} Media query string\n\t\t */\n\t\tget = function(min, max, property) {\n\t\t\tvar parsed = _parseMinMaxInputs(min, max),\n\t\t\t\tbpMin = parsed.min,\n\t\t\t\tbpMax = parsed.max;\n\n\t\t\tif (typeof (property) !== 'string') {\n\t\t\t\tproperty = 'width'; //default to width based media query\n\t\t\t}\n\n\t\t\t//check what type of bp it is\n\t\t\tif (bpMin === 'retina' || bpMin === 'hdpi') {\n\t\t\t\treturn '(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-device-pixel-ratio: 1.5)';\n\t\t\t} else if (bpMax === 0) {\n\t\t\t\treturn _bpMin(bpMin, property);\n\t\t\t} else if (bpMin === 0) {\n\t\t\t\treturn _bpMax(bpMax, property);\n\t\t\t} else {\n\t\t\t\treturn _bpBetween(bpMin, bpMax, property);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Shortcut for the get() function that returns a height\n\t\t * based media query and returns the media query as a string\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // Height of 300px and above\n\t\t * DD.bp.getHeight(300);\n\t\t *\n\t\t * @example\n\t\t * // Height of 300px and below\n\t\t * DD.bp.getHeight(0, 300);\n\t\t *\n\t\t * @example\n\t\t * // Between 100px and 300px high\n\t\t * DD.bp.getHeight(100, 300);\n\t\t *\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels, or in comma separated string notation\n\t\t * @param {String|Number} [max=0] Breakpoint name as a string, or as a number in pixels\n\t\t * @return {String} Media query string\n\t\t */\n\t\tgetHeight = function(min, max) {\n\t\t\treturn get(min, max, 'height');\n\t\t};\n\n\t\t/**\n\t\t * Breakpoint function that takes the same inputs as get() but\n\t\t * instead of returning the media query as a string returns\n\t\t * if the current page matches that query as a boolean using\n\t\t * window.matchMedia(mq).matches\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // returns true if the page is between xs and s\n\t\t * DD.bp.is('xs,s');\n\t\t * DD.bp.is('xs','s');\n\t\t *\n\t\t * @example\n\t\t * // returns true if the page is between 0 and 300px wide\n\t\t * DD.bp.is('0,300');\n\t\t * DD.bp.is(0, 300);\n\t\t *\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels, or in comma separated string notation\n\t\t * @param {String|Number} [max=0] Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {Boolean}\n\t\t */\n\t\tis = function(min, max, property) {\n\t\t\tif (_options.isResponsive === false) {\n\t\t\t\treturn _bpIsValidForStatic(min, max, property);\n\t\t\t}\n\n\t\t\tif (window.matchMedia) {\n\t\t\t\treturn window.matchMedia(get(min, max, property)).matches;\n\t\t\t}\n\n\t\t\tconsole.warn('DD.bp: Match Media not supported by this browser. Consider adding a polyfill.');\n\n\t\t\treturn false;\n\t\t};\n\n\t\t/**\n\t\t * Shortcut for the is() function that returns a height\n\t\t * based media query and returns the media query as a boolean\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // returns true if the page is between 0 and 300px high\n\t\t * DD.bp.isHeight('0,300');\n\t\t * DD.bp.isHeight(0, 300);\n\t\t *\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels, or in comma separated string notation\n\t\t * @param {String|Number} [max=0] Breakpoint name as a string, or as a number in pixels\n\t\t * @return {Boolean}\n\t\t */\n\t\tisHeight = function(min, max) {\n\t\t\treturn is(min, max, 'height');\n\t\t};\n\n\t\t/**\n\t\t * Valid options for the Breakpoints array\n\t\t *\n\t\t * @typedef {Object} DD.bp.BreakpointOptions\n\t\t * @property {String} name Name of the breakpoint e.g. 's', 'm', 'l'\n\t\t * @property {Number} px Number in px for the size of the breakpoint\n\t\t */\n\n\t\t/**\n\t\t * Valid options for the Breakpoints library\n\t\t *\n\t\t * @typedef {Object} DD.bp.Options\n\t\t * @property {Number} [baseFontSize] Number in px to be used as a base font size in order to calculate em values\n\t\t * @property {DD.bp.BreakpointOptions[]} [breakpoints]\n\t\t */\n\n\t\t/**\n\t\t * User updatable options\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // update the base font size only\n\t\t * DD.bp.options({\n\t\t * baseFontSize: 14\n\t\t * });\n\t\t *\n\t\t * @example\n\t\t * // update the breakpoints\n\t\t * DD.bp.options({\n\t\t * breakpoints: [\n\t\t * { name: 'small', px: 400 },\n\t\t * { name: 'medium', px: 800 },\n\t\t * { name: 'large', px: 1200 }\n\t\t * ]\n\t\t * });\n\t\t *\n\t\t * @param {DD.bp.Options} opts Options inside the library to be updated\n\t\t * @return {Boolean}\n\t\t */\n\t\toptions = function(opts) {\n\t\t\tif (typeof (opts.isResponsive) === 'boolean') {\n\t\t\t\t_options.isResponsive = opts.isResponsive;\n\t\t\t}\n\n\t\t\tif (typeof (opts.baseFontSize) === 'number') {\n\t\t\t\t_options.baseFontSize = opts.baseFontSize;\n\t\t\t}\n\n\t\t\tif (typeof (opts.breakpoints) === 'object' && opts.breakpoints.length > 0) {\n\t\t\t\tvar isValid = true,\n\t\t\t\t\tbps = opts.breakpoints;\n\n\t\t\t\t// loop through the breakpoints to check validity\n\t\t\t\tfor (var i = 0, len = bps.length; i < len; i += 1) {\n\t\t\t\t\tif ((bps[i].hasOwnProperty('name') && bps[i].hasOwnProperty('px')) === false) {\n\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isValid) {\n\t\t\t\t\t_options.breakpoints = opts.breakpoints;\n\t\t\t\t\t_initBreakpoints();\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn('DD.bp: Invalid breakpoints array entered. Please use the format {name: \\'string\\', px: number}');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tgetHeight: getHeight,\n\t\t\tis: is,\n\t\t\tisHeight: isHeight,\n\t\t\toptions: options\n\t\t};\n\t}());\n\n}());\n","//! moment.js\n//! version : 2.13.0\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n!function(a,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=b():\"function\"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){\"use strict\";function a(){return fd.apply(null,arguments)}function b(a){fd=a}function c(a){return a instanceof Array||\"[object Array]\"===Object.prototype.toString.call(a)}function d(a){return a instanceof Date||\"[object Date]\"===Object.prototype.toString.call(a)}function e(a,b){var c,d=[];for(c=0;c0)for(c in hd)d=hd[c],e=b[d],m(e)||(a[d]=e);return a}function o(b){n(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),id===!1&&(id=!0,a.updateOffset(this),id=!1)}function p(a){return a instanceof o||null!=a&&null!=a._isAMomentObject}function q(a){return 0>a?Math.ceil(a):Math.floor(a)}function r(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=q(b)),c}function s(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&r(a[d])!==r(b[d]))&&g++;return g+f}function t(b){a.suppressDeprecationWarnings===!1&&\"undefined\"!=typeof console&&console.warn&&console.warn(\"Deprecation warning: \"+b)}function u(b,c){var d=!0;return g(function(){return null!=a.deprecationHandler&&a.deprecationHandler(null,b),d&&(t(b+\"\\nArguments: \"+Array.prototype.slice.call(arguments).join(\", \")+\"\\n\"+(new Error).stack),d=!1),c.apply(this,arguments)},c)}function v(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),jd[b]||(t(c),jd[b]=!0)}function w(a){return a instanceof Function||\"[object Function]\"===Object.prototype.toString.call(a)}function x(a){return\"[object Object]\"===Object.prototype.toString.call(a)}function y(a){var b,c;for(c in a)b=a[c],w(b)?this[c]=b:this[\"_\"+c]=b;this._config=a,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+\"|\"+/\\d{1,2}/.source)}function z(a,b){var c,d=g({},a);for(c in b)f(b,c)&&(x(a[c])&&x(b[c])?(d[c]={},g(d[c],a[c]),g(d[c],b[c])):null!=b[c]?d[c]=b[c]:delete d[c]);return d}function A(a){null!=a&&this.set(a)}function B(a){return a?a.toLowerCase().replace(\"_\",\"-\"):a}function C(a){for(var b,c,d,e,f=0;f0;){if(d=D(e.slice(0,b).join(\"-\")))return d;if(c&&c.length>=b&&s(e,c,!0)>=b-1)break;b--}f++}return null}function D(a){var b=null;if(!nd[a]&&\"undefined\"!=typeof module&&module&&module.exports)try{b=ld._abbr,require(\"./locale/\"+a),E(b)}catch(c){}return nd[a]}function E(a,b){var c;return a&&(c=m(b)?H(a):F(a,b),c&&(ld=c)),ld._abbr}function F(a,b){return null!==b?(b.abbr=a,null!=nd[a]?(v(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale\"),b=z(nd[a]._config,b)):null!=b.parentLocale&&(null!=nd[b.parentLocale]?b=z(nd[b.parentLocale]._config,b):v(\"parentLocaleUndefined\",\"specified parentLocale is not defined yet\")),nd[a]=new A(b),E(a),nd[a]):(delete nd[a],null)}function G(a,b){if(null!=b){var c;null!=nd[a]&&(b=z(nd[a]._config,b)),c=new A(b),c.parentLocale=nd[a],nd[a]=c,E(a)}else null!=nd[a]&&(null!=nd[a].parentLocale?nd[a]=nd[a].parentLocale:null!=nd[a]&&delete nd[a]);return nd[a]}function H(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return ld;if(!c(a)){if(b=D(a))return b;a=[a]}return C(a)}function I(){return kd(nd)}function J(a,b){var c=a.toLowerCase();od[c]=od[c+\"s\"]=od[b]=a}function K(a){return\"string\"==typeof a?od[a]||od[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)f(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(b,c){return function(d){return null!=d?(O(this,b,d),a.updateOffset(this,c),this):N(this,b)}}function N(a,b){return a.isValid()?a._d[\"get\"+(a._isUTC?\"UTC\":\"\")+b]():NaN}function O(a,b,c){a.isValid()&&a._d[\"set\"+(a._isUTC?\"UTC\":\"\")+b](c)}function P(a,b){var c;if(\"object\"==typeof a)for(c in a)this.set(c,a[c]);else if(a=K(a),w(this[a]))return this[a](b);return this}function Q(a,b,c){var d=\"\"+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function R(a,b,c,d){var e=d;\"string\"==typeof d&&(e=function(){return this[d]()}),a&&(sd[a]=e),b&&(sd[b[0]]=function(){return Q(e.apply(this,arguments),b[1],b[2])}),c&&(sd[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function S(a){return a.match(/\\[[\\s\\S]/)?a.replace(/^\\[|\\]$/g,\"\"):a.replace(/\\\\/g,\"\")}function T(a){var b,c,d=a.match(pd);for(b=0,c=d.length;c>b;b++)sd[d[b]]?d[b]=sd[d[b]]:d[b]=S(d[b]);return function(b){var e,f=\"\";for(e=0;c>e;e++)f+=d[e]instanceof Function?d[e].call(b,a):d[e];return f}}function U(a,b){return a.isValid()?(b=V(b,a.localeData()),rd[b]=rd[b]||T(b),rd[b](a)):a.localeData().invalidDate()}function V(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(qd.lastIndex=0;d>=0&&qd.test(a);)a=a.replace(qd,c),qd.lastIndex=0,d-=1;return a}function W(a,b,c){Kd[a]=w(b)?b:function(a,d){return a&&c?c:b}}function X(a,b){return f(Kd,a)?Kd[a](b._strict,b._locale):new RegExp(Y(a))}function Y(a){return Z(a.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function Z(a){return a.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function $(a,b){var c,d=b;for(\"string\"==typeof a&&(a=[a]),\"number\"==typeof b&&(d=function(a,c){c[b]=r(a)}),c=0;cd;++d)f=h([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,\"\").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,\"\").toLocaleLowerCase();return c?\"MMM\"===b?(e=md.call(this._shortMonthsParse,g),-1!==e?e:null):(e=md.call(this._longMonthsParse,g),-1!==e?e:null):\"MMM\"===b?(e=md.call(this._shortMonthsParse,g),-1!==e?e:(e=md.call(this._longMonthsParse,g),-1!==e?e:null)):(e=md.call(this._longMonthsParse,g),-1!==e?e:(e=md.call(this._shortMonthsParse,g),-1!==e?e:null))}function fa(a,b,c){var d,e,f;if(this._monthsParseExact)return ea.call(this,a,b,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;12>d;d++){if(e=h([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp(\"^\"+this.months(e,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[d]=new RegExp(\"^\"+this.monthsShort(e,\"\").replace(\".\",\"\")+\"$\",\"i\")),c||this._monthsParse[d]||(f=\"^\"+this.months(e,\"\")+\"|^\"+this.monthsShort(e,\"\"),this._monthsParse[d]=new RegExp(f.replace(\".\",\"\"),\"i\")),c&&\"MMMM\"===b&&this._longMonthsParse[d].test(a))return d;if(c&&\"MMM\"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function ga(a,b){var c;if(!a.isValid())return a;if(\"string\"==typeof b)if(/^\\d+$/.test(b))b=r(b);else if(b=a.localeData().monthsParse(b),\"number\"!=typeof b)return a;return c=Math.min(a.date(),ba(a.year(),b)),a._d[\"set\"+(a._isUTC?\"UTC\":\"\")+\"Month\"](b,c),a}function ha(b){return null!=b?(ga(this,b),a.updateOffset(this,!0),this):N(this,\"Month\")}function ia(){return ba(this.year(),this.month())}function ja(a){return this._monthsParseExact?(f(this,\"_monthsRegex\")||la.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex}function ka(a){return this._monthsParseExact?(f(this,\"_monthsRegex\")||la.call(this),a?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex}function la(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;12>b;b++)c=h([2e3,b]),d.push(this.monthsShort(c,\"\")),e.push(this.months(c,\"\")),f.push(this.months(c,\"\")),f.push(this.monthsShort(c,\"\"));for(d.sort(a),e.sort(a),f.sort(a),b=0;12>b;b++)d[b]=Z(d[b]),e[b]=Z(e[b]),f[b]=Z(f[b]);this._monthsRegex=new RegExp(\"^(\"+f.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+e.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+d.join(\"|\")+\")\",\"i\")}function ma(a){var b,c=a._a;return c&&-2===j(a).overflow&&(b=c[Nd]<0||c[Nd]>11?Nd:c[Od]<1||c[Od]>ba(c[Md],c[Nd])?Od:c[Pd]<0||c[Pd]>24||24===c[Pd]&&(0!==c[Qd]||0!==c[Rd]||0!==c[Sd])?Pd:c[Qd]<0||c[Qd]>59?Qd:c[Rd]<0||c[Rd]>59?Rd:c[Sd]<0||c[Sd]>999?Sd:-1,j(a)._overflowDayOfYear&&(Md>b||b>Od)&&(b=Od),j(a)._overflowWeeks&&-1===b&&(b=Td),j(a)._overflowWeekday&&-1===b&&(b=Ud),j(a).overflow=b),a}function na(a){var b,c,d,e,f,g,h=a._i,i=$d.exec(h)||_d.exec(h);if(i){for(j(a).iso=!0,b=0,c=be.length;c>b;b++)if(be[b][1].exec(i[1])){e=be[b][0],d=be[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=ce.length;c>b;b++)if(ce[b][1].exec(i[3])){f=(i[2]||\" \")+ce[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!ae.exec(i[4]))return void(a._isValid=!1);g=\"Z\"}a._f=e+(f||\"\")+(g||\"\"),Ca(a)}else a._isValid=!1}function oa(b){var c=de.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(na(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function pa(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 100>a&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function qa(a){var b=new Date(Date.UTC.apply(null,arguments));return 100>a&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function ra(a){return sa(a)?366:365}function sa(a){return a%4===0&&a%100!==0||a%400===0}function ta(){return sa(this.year())}function ua(a,b,c){var d=7+b-c,e=(7+qa(a,0,d).getUTCDay()-b)%7;return-e+d-1}function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return 0>=j?(f=a-1,g=ra(f)+j):j>ra(a)?(f=a+1,g=j-ra(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return 1>g?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(ra(a)-d+e)/7}function ya(a,b,c){return null!=a?a:null!=b?b:c}function za(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function Aa(a){var b,c,d,e,f=[];if(!a._d){for(d=za(a),a._w&&null==a._a[Od]&&null==a._a[Nd]&&Ba(a),a._dayOfYear&&(e=ya(a._a[Md],d[Md]),a._dayOfYear>ra(e)&&(j(a)._overflowDayOfYear=!0),c=qa(e,0,a._dayOfYear),a._a[Nd]=c.getUTCMonth(),a._a[Od]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[Pd]&&0===a._a[Qd]&&0===a._a[Rd]&&0===a._a[Sd]&&(a._nextDay=!0,a._a[Pd]=0),a._d=(a._useUTC?qa:pa).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[Pd]=24)}}function Ba(a){var b,c,d,e,f,g,h,i;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=ya(b.GG,a._a[Md],wa(Ka(),1,4).year),d=ya(b.W,1),e=ya(b.E,1),(1>e||e>7)&&(i=!0)):(f=a._locale._week.dow,g=a._locale._week.doy,c=ya(b.gg,a._a[Md],wa(Ka(),f,g).year),d=ya(b.w,1),null!=b.d?(e=b.d,(0>e||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f),1>d||d>xa(c,f,g)?j(a)._overflowWeeks=!0:null!=i?j(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[Md]=h.year,a._dayOfYear=h.dayOfYear)}function Ca(b){if(b._f===a.ISO_8601)return void na(b);b._a=[],j(b).empty=!0;var c,d,e,f,g,h=\"\"+b._i,i=h.length,k=0;for(e=V(b._f,b._locale).match(pd)||[],c=0;c0&&j(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),k+=d.length),sd[f]?(d?j(b).empty=!1:j(b).unusedTokens.push(f),aa(f,d,b)):b._strict&&!d&&j(b).unusedTokens.push(f);j(b).charsLeftOver=i-k,h.length>0&&j(b).unusedInput.push(h),j(b).bigHour===!0&&b._a[Pd]<=12&&b._a[Pd]>0&&(j(b).bigHour=void 0),j(b).parsedDateParts=b._a.slice(0),j(b).meridiem=b._meridiem,b._a[Pd]=Da(b._locale,b._a[Pd],b._meridiem),Aa(b),ma(b)}function Da(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function Ea(a){var b,c,d,e,f;if(0===a._f.length)return j(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;ef)&&(d=f,c=b));g(a,c||b)}function Fa(a){if(!a._d){var b=L(a._i);a._a=e([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),Aa(a)}}function Ga(a){var b=new o(ma(Ha(a)));return b._nextDay&&(b.add(1,\"d\"),b._nextDay=void 0),b}function Ha(a){var b=a._i,e=a._f;return a._locale=a._locale||H(a._l),null===b||void 0===e&&\"\"===b?l({nullInput:!0}):(\"string\"==typeof b&&(a._i=b=a._locale.preparse(b)),p(b)?new o(ma(b)):(c(e)?Ea(a):e?Ca(a):d(b)?a._d=b:Ia(a),k(a)||(a._d=null),a))}function Ia(b){var f=b._i;void 0===f?b._d=new Date(a.now()):d(f)?b._d=new Date(f.valueOf()):\"string\"==typeof f?oa(b):c(f)?(b._a=e(f.slice(0),function(a){return parseInt(a,10)}),Aa(b)):\"object\"==typeof f?Fa(b):\"number\"==typeof f?b._d=new Date(f):a.createFromInputFallback(b)}function Ja(a,b,c,d,e){var f={};return\"boolean\"==typeof c&&(d=c,c=void 0),f._isAMomentObject=!0,f._useUTC=f._isUTC=e,f._l=c,f._i=a,f._f=b,f._strict=d,Ga(f)}function Ka(a,b,c,d){return Ja(a,b,c,d,!1)}function La(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return Ka();for(d=b[0],e=1;ea&&(a=-a,c=\"-\"),c+Q(~~(a/60),2)+b+Q(~~a%60,2)})}function Ra(a,b){var c=(b||\"\").match(a)||[],d=c[c.length-1]||[],e=(d+\"\").match(ie)||[\"-\",0,0],f=+(60*e[1])+r(e[2]);return\"+\"===e[0]?f:-f}function Sa(b,c){var e,f;return c._isUTC?(e=c.clone(),f=(p(b)||d(b)?b.valueOf():Ka(b).valueOf())-e.valueOf(),e._d.setTime(e._d.valueOf()+f),a.updateOffset(e,!1),e):Ka(b).local()}function Ta(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Ua(b,c){var d,e=this._offset||0;return this.isValid()?null!=b?(\"string\"==typeof b?b=Ra(Hd,b):Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Ta(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,\"m\"),e!==b&&(!c||this._changeInProgress?jb(this,db(b-e,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Ta(this):null!=b?this:NaN}function Va(a,b){return null!=a?(\"string\"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Wa(a){return this.utcOffset(0,a)}function Xa(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Ta(this),\"m\")),this}function Ya(){return this._tzm?this.utcOffset(this._tzm):\"string\"==typeof this._i&&this.utcOffset(Ra(Gd,this._i)),this}function Za(a){return this.isValid()?(a=a?Ka(a).utcOffset():0,(this.utcOffset()-a)%60===0):!1}function $a(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function _a(){if(!m(this._isDSTShifted))return this._isDSTShifted;var a={};if(n(a,this),a=Ha(a),a._a){var b=a._isUTC?h(a._a):Ka(a._a);this._isDSTShifted=this.isValid()&&s(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function ab(){return this.isValid()?!this._isUTC:!1}function bb(){return this.isValid()?this._isUTC:!1}function cb(){return this.isValid()?this._isUTC&&0===this._offset:!1}function db(a,b){var c,d,e,g=a,h=null;return Pa(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:\"number\"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=je.exec(a))?(c=\"-\"===h[1]?-1:1,g={y:0,d:r(h[Od])*c,h:r(h[Pd])*c,m:r(h[Qd])*c,s:r(h[Rd])*c,ms:r(h[Sd])*c}):(h=ke.exec(a))?(c=\"-\"===h[1]?-1:1,g={y:eb(h[2],c),M:eb(h[3],c),w:eb(h[4],c),d:eb(h[5],c),h:eb(h[6],c),m:eb(h[7],c),s:eb(h[8],c)}):null==g?g={}:\"object\"==typeof g&&(\"from\"in g||\"to\"in g)&&(e=gb(Ka(g.from),Ka(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new Oa(g),Pa(a)&&f(a,\"_locale\")&&(d._locale=a._locale),d}function eb(a,b){var c=a&&parseFloat(a.replace(\",\",\".\"));return(isNaN(c)?0:c)*b}function fb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,\"M\").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,\"M\"),c}function gb(a,b){var c;return a.isValid()&&b.isValid()?(b=Sa(b,a),a.isBefore(b)?c=fb(a,b):(c=fb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function hb(a){return 0>a?-1*Math.round(-1*a):Math.round(a)}function ib(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(v(b,\"moment().\"+b+\"(period, number) is deprecated. Please use moment().\"+b+\"(number, period).\"),f=c,c=d,d=f),c=\"string\"==typeof c?+c:c,e=db(c,d),jb(this,e,a),this}}function jb(b,c,d,e){var f=c._milliseconds,g=hb(c._days),h=hb(c._months);b.isValid()&&(e=null==e?!0:e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&O(b,\"Date\",N(b,\"Date\")+g*d),h&&ga(b,N(b,\"Month\")+h*d),e&&a.updateOffset(b,g||h))}function kb(a,b){var c=a||Ka(),d=Sa(c,this).startOf(\"day\"),e=this.diff(d,\"days\",!0),f=-6>e?\"sameElse\":-1>e?\"lastWeek\":0>e?\"lastDay\":1>e?\"sameDay\":2>e?\"nextDay\":7>e?\"nextWeek\":\"sameElse\",g=b&&(w(b[f])?b[f]():b[f]);return this.format(g||this.localeData().calendar(f,this,Ka(c)))}function lb(){return new o(this)}function mb(a,b){var c=p(a)?a:Ka(a);return this.isValid()&&c.isValid()?(b=K(m(b)?\"millisecond\":b),\"millisecond\"===b?this.valueOf()>c.valueOf():c.valueOf()b-f?(c=a.clone().add(e-1,\"months\"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,\"months\"),d=(b-f)/(c-f)),-(e+d)||0}function ub(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function vb(){var a=this.clone().utc();return 0f&&(b=f),Vb.call(this,a,b,c,d,e))}function Vb(a,b,c,d,e){var f=va(a,b,c,d,e),g=qa(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Wb(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Xb(a){return wa(a,this._week.dow,this._week.doy).week}function Yb(){return this._week.dow}function Zb(){return this._week.doy}function $b(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),\"d\")}function _b(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),\"d\")}function ac(a,b){return\"string\"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),\"number\"==typeof a?a:null):parseInt(a,10)}function bc(a,b){return c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?\"format\":\"standalone\"][a.day()]}function cc(a){return this._weekdaysShort[a.day()]}function dc(a){return this._weekdaysMin[a.day()]}function ec(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;7>d;++d)f=h([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,\"\").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,\"\").toLocaleLowerCase();return c?\"dddd\"===b?(e=md.call(this._weekdaysParse,g),-1!==e?e:null):\"ddd\"===b?(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:null):(e=md.call(this._minWeekdaysParse,g),-1!==e?e:null):\"dddd\"===b?(e=md.call(this._weekdaysParse,g),-1!==e?e:(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:(e=md.call(this._minWeekdaysParse,g),-1!==e?e:null))):\"ddd\"===b?(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:(e=md.call(this._weekdaysParse,g),-1!==e?e:(e=md.call(this._minWeekdaysParse,g),-1!==e?e:null))):(e=md.call(this._minWeekdaysParse,g),-1!==e?e:(e=md.call(this._weekdaysParse,g),-1!==e?e:(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:null)))}function fc(a,b,c){var d,e,f;if(this._weekdaysParseExact)return ec.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;7>d;d++){if(e=h([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp(\"^\"+this.weekdays(e,\"\").replace(\".\",\".?\")+\"$\",\"i\"),this._shortWeekdaysParse[d]=new RegExp(\"^\"+this.weekdaysShort(e,\"\").replace(\".\",\".?\")+\"$\",\"i\"),this._minWeekdaysParse[d]=new RegExp(\"^\"+this.weekdaysMin(e,\"\").replace(\".\",\".?\")+\"$\",\"i\")),this._weekdaysParse[d]||(f=\"^\"+this.weekdays(e,\"\")+\"|^\"+this.weekdaysShort(e,\"\")+\"|^\"+this.weekdaysMin(e,\"\"),this._weekdaysParse[d]=new RegExp(f.replace(\".\",\"\"),\"i\")),c&&\"dddd\"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&\"ddd\"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&\"dd\"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function gc(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=ac(a,this.localeData()),this.add(a-b,\"d\")):b}function hc(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,\"d\")}function ic(a){return this.isValid()?null==a?this.day()||7:this.day(this.day()%7?a:a-7):null!=a?this:NaN}function jc(a){return this._weekdaysParseExact?(f(this,\"_weekdaysRegex\")||mc.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex}function kc(a){return this._weekdaysParseExact?(f(this,\"_weekdaysRegex\")||mc.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex}function lc(a){return this._weekdaysParseExact?(f(this,\"_weekdaysRegex\")||mc.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex}function mc(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],i=[],j=[],k=[];for(b=0;7>b;b++)c=h([2e3,1]).day(b),d=this.weekdaysMin(c,\"\"),e=this.weekdaysShort(c,\"\"),f=this.weekdays(c,\"\"),g.push(d),i.push(e),j.push(f),k.push(d),k.push(e),k.push(f);for(g.sort(a),i.sort(a),j.sort(a),k.sort(a),b=0;7>b;b++)i[b]=Z(i[b]),j[b]=Z(j[b]),k[b]=Z(k[b]);this._weekdaysRegex=new RegExp(\"^(\"+k.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+j.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+g.join(\"|\")+\")\",\"i\")}function nc(a){var b=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==a?b:this.add(a-b,\"d\")}function oc(){return this.hours()%12||12}function pc(){return this.hours()||24}function qc(a,b){R(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function rc(a,b){return b._meridiemParse}function sc(a){return\"p\"===(a+\"\").toLowerCase().charAt(0)}function tc(a,b,c){return a>11?c?\"pm\":\"PM\":c?\"am\":\"AM\"}function uc(a,b){b[Sd]=r(1e3*(\"0.\"+a))}function vc(){return this._isUTC?\"UTC\":\"\"}function wc(){return this._isUTC?\"Coordinated Universal Time\":\"\"}function xc(a){return Ka(1e3*a)}function yc(){return Ka.apply(null,arguments).parseZone()}function zc(a,b,c){var d=this._calendar[a];return w(d)?d.call(b,c):d}function Ac(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function Bc(){return this._invalidDate}function Cc(a){return this._ordinal.replace(\"%d\",a)}function Dc(a){return a}function Ec(a,b,c,d){var e=this._relativeTime[c];return w(e)?e(a,b,c,d):e.replace(/%d/i,a)}function Fc(a,b){var c=this._relativeTime[a>0?\"future\":\"past\"];return w(c)?c(b):c.replace(/%s/i,b)}function Gc(a,b,c,d){var e=H(),f=h().set(d,b);return e[c](f,a)}function Hc(a,b,c){if(\"number\"==typeof a&&(b=a,a=void 0),a=a||\"\",null!=b)return Gc(a,b,c,\"month\");var d,e=[];for(d=0;12>d;d++)e[d]=Gc(a,d,c,\"month\");return e}function Ic(a,b,c,d){\"boolean\"==typeof a?(\"number\"==typeof b&&(c=b,b=void 0),b=b||\"\"):(b=a,c=b,a=!1,\"number\"==typeof b&&(c=b,b=void 0),b=b||\"\");var e=H(),f=a?e._week.dow:0;if(null!=c)return Gc(b,(c+f)%7,d,\"day\");var g,h=[];for(g=0;7>g;g++)h[g]=Gc(b,(g+f)%7,d,\"day\");return h}function Jc(a,b){return Hc(a,b,\"months\")}function Kc(a,b){return Hc(a,b,\"monthsShort\")}function Lc(a,b,c){return Ic(a,b,c,\"weekdays\")}function Mc(a,b,c){return Ic(a,b,c,\"weekdaysShort\")}function Nc(a,b,c){return Ic(a,b,c,\"weekdaysMin\")}function Oc(){var a=this._data;return this._milliseconds=Le(this._milliseconds),this._days=Le(this._days),this._months=Le(this._months),a.milliseconds=Le(a.milliseconds),a.seconds=Le(a.seconds),a.minutes=Le(a.minutes),a.hours=Le(a.hours),a.months=Le(a.months),a.years=Le(a.years),this}function Pc(a,b,c,d){var e=db(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function Qc(a,b){return Pc(this,a,b,1)}function Rc(a,b){return Pc(this,a,b,-1)}function Sc(a){return 0>a?Math.floor(a):Math.ceil(a)}function Tc(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||0>=f&&0>=g&&0>=h||(f+=864e5*Sc(Vc(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=q(f/1e3),i.seconds=a%60,b=q(a/60),i.minutes=b%60,c=q(b/60),i.hours=c%24,g+=q(c/24),e=q(Uc(g)),h+=e,g-=Sc(Vc(e)),d=q(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function Uc(a){return 4800*a/146097}function Vc(a){return 146097*a/4800}function Wc(a){var b,c,d=this._milliseconds;if(a=K(a),\"month\"===a||\"year\"===a)return b=this._days+d/864e5,c=this._months+Uc(b),\"month\"===a?c:c/12;switch(b=this._days+Math.round(Vc(this._months)),a){case\"week\":return b/7+d/6048e5;case\"day\":return b+d/864e5;case\"hour\":return 24*b+d/36e5;case\"minute\":return 1440*b+d/6e4;case\"second\":return 86400*b+d/1e3;case\"millisecond\":return Math.floor(864e5*b)+d;default:throw new Error(\"Unknown unit \"+a)}}function Xc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*r(this._months/12)}function Yc(a){return function(){return this.as(a)}}function Zc(a){\nreturn a=K(a),this[a+\"s\"]()}function $c(a){return function(){return this._data[a]}}function _c(){return q(this.days()/7)}function ad(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function bd(a,b,c){var d=db(a).abs(),e=_e(d.as(\"s\")),f=_e(d.as(\"m\")),g=_e(d.as(\"h\")),h=_e(d.as(\"d\")),i=_e(d.as(\"M\")),j=_e(d.as(\"y\")),k=e=f&&[\"m\"]||f=g&&[\"h\"]||g=h&&[\"d\"]||h=i&&[\"M\"]||i=j&&[\"y\"]||[\"yy\",j];return k[2]=b,k[3]=+a>0,k[4]=c,ad.apply(null,k)}function cd(a,b){return void 0===af[a]?!1:void 0===b?af[a]:(af[a]=b,!0)}function dd(a){var b=this.localeData(),c=bd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function ed(){var a,b,c,d=bf(this._milliseconds)/1e3,e=bf(this._days),f=bf(this._months);a=q(d/60),b=q(a/60),d%=60,a%=60,c=q(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(0>m?\"-\":\"\")+\"P\"+(g?g+\"Y\":\"\")+(h?h+\"M\":\"\")+(i?i+\"D\":\"\")+(j||k||l?\"T\":\"\")+(j?j+\"H\":\"\")+(k?k+\"M\":\"\")+(l?l+\"S\":\"\"):\"P0D\"}var fd,gd;gd=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;c>d;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var hd=a.momentProperties=[],id=!1,jd={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var kd;kd=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)f(a,b)&&c.push(b);return c};var ld,md,nd={},od={},pd=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,qd=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,rd={},sd={},td=/\\d/,ud=/\\d\\d/,vd=/\\d{3}/,wd=/\\d{4}/,xd=/[+-]?\\d{6}/,yd=/\\d\\d?/,zd=/\\d\\d\\d\\d?/,Ad=/\\d\\d\\d\\d\\d\\d?/,Bd=/\\d{1,3}/,Cd=/\\d{1,4}/,Dd=/[+-]?\\d{1,6}/,Ed=/\\d+/,Fd=/[+-]?\\d+/,Gd=/Z|[+-]\\d\\d:?\\d\\d/gi,Hd=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,Id=/[+-]?\\d+(\\.\\d{1,3})?/,Jd=/[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i,Kd={},Ld={},Md=0,Nd=1,Od=2,Pd=3,Qd=4,Rd=5,Sd=6,Td=7,Ud=8;md=Array.prototype.indexOf?Array.prototype.indexOf:function(a){var b;for(b=0;b=a?\"\"+a:\"+\"+a}),R(0,[\"YY\",2],0,function(){return this.year()%100}),R(0,[\"YYYY\",4],0,\"year\"),R(0,[\"YYYYY\",5],0,\"year\"),R(0,[\"YYYYYY\",6,!0],0,\"year\"),J(\"year\",\"y\"),W(\"Y\",Fd),W(\"YY\",yd,ud),W(\"YYYY\",Cd,wd),W(\"YYYYY\",Dd,xd),W(\"YYYYYY\",Dd,xd),$([\"YYYYY\",\"YYYYYY\"],Md),$(\"YYYY\",function(b,c){c[Md]=2===b.length?a.parseTwoDigitYear(b):r(b)}),$(\"YY\",function(b,c){c[Md]=a.parseTwoDigitYear(b)}),$(\"Y\",function(a,b){b[Md]=parseInt(a,10)}),a.parseTwoDigitYear=function(a){return r(a)+(r(a)>68?1900:2e3)};var ee=M(\"FullYear\",!0);a.ISO_8601=function(){};var fe=u(\"moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548\",function(){var a=Ka.apply(null,arguments);return this.isValid()&&a.isValid()?this>a?this:a:l()}),ge=u(\"moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548\",function(){var a=Ka.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:l()}),he=function(){return Date.now?Date.now():+new Date};Qa(\"Z\",\":\"),Qa(\"ZZ\",\"\"),W(\"Z\",Hd),W(\"ZZ\",Hd),$([\"Z\",\"ZZ\"],function(a,b,c){c._useUTC=!0,c._tzm=Ra(Hd,a)});var ie=/([\\+\\-]|\\d\\d)/gi;a.updateOffset=function(){};var je=/^(\\-)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?\\d*)?$/,ke=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;db.fn=Oa.prototype;var le=ib(1,\"add\"),me=ib(-1,\"subtract\");a.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",a.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var ne=u(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(a){return void 0===a?this.localeData():this.locale(a)});R(0,[\"gg\",2],0,function(){return this.weekYear()%100}),R(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100}),Pb(\"gggg\",\"weekYear\"),Pb(\"ggggg\",\"weekYear\"),Pb(\"GGGG\",\"isoWeekYear\"),Pb(\"GGGGG\",\"isoWeekYear\"),J(\"weekYear\",\"gg\"),J(\"isoWeekYear\",\"GG\"),W(\"G\",Fd),W(\"g\",Fd),W(\"GG\",yd,ud),W(\"gg\",yd,ud),W(\"GGGG\",Cd,wd),W(\"gggg\",Cd,wd),W(\"GGGGG\",Dd,xd),W(\"ggggg\",Dd,xd),_([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(a,b,c,d){b[d.substr(0,2)]=r(a)}),_([\"gg\",\"GG\"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),R(\"Q\",0,\"Qo\",\"quarter\"),J(\"quarter\",\"Q\"),W(\"Q\",td),$(\"Q\",function(a,b){b[Nd]=3*(r(a)-1)}),R(\"w\",[\"ww\",2],\"wo\",\"week\"),R(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),J(\"week\",\"w\"),J(\"isoWeek\",\"W\"),W(\"w\",yd),W(\"ww\",yd,ud),W(\"W\",yd),W(\"WW\",yd,ud),_([\"w\",\"ww\",\"W\",\"WW\"],function(a,b,c,d){b[d.substr(0,1)]=r(a)});var oe={dow:0,doy:6};R(\"D\",[\"DD\",2],\"Do\",\"date\"),J(\"date\",\"D\"),W(\"D\",yd),W(\"DD\",yd,ud),W(\"Do\",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),$([\"D\",\"DD\"],Od),$(\"Do\",function(a,b){b[Od]=r(a.match(yd)[0],10)});var pe=M(\"Date\",!0);R(\"d\",0,\"do\",\"day\"),R(\"dd\",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),R(\"ddd\",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),R(\"dddd\",0,0,function(a){return this.localeData().weekdays(this,a)}),R(\"e\",0,0,\"weekday\"),R(\"E\",0,0,\"isoWeekday\"),J(\"day\",\"d\"),J(\"weekday\",\"e\"),J(\"isoWeekday\",\"E\"),W(\"d\",yd),W(\"e\",yd),W(\"E\",yd),W(\"dd\",function(a,b){return b.weekdaysMinRegex(a)}),W(\"ddd\",function(a,b){return b.weekdaysShortRegex(a)}),W(\"dddd\",function(a,b){return b.weekdaysRegex(a)}),_([\"dd\",\"ddd\",\"dddd\"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);null!=e?b.d=e:j(c).invalidWeekday=a}),_([\"d\",\"e\",\"E\"],function(a,b,c,d){b[d]=r(a)});var qe=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),re=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),se=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),te=Jd,ue=Jd,ve=Jd;R(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),J(\"dayOfYear\",\"DDD\"),W(\"DDD\",Bd),W(\"DDDD\",vd),$([\"DDD\",\"DDDD\"],function(a,b,c){c._dayOfYear=r(a)}),R(\"H\",[\"HH\",2],0,\"hour\"),R(\"h\",[\"hh\",2],0,oc),R(\"k\",[\"kk\",2],0,pc),R(\"hmm\",0,0,function(){return\"\"+oc.apply(this)+Q(this.minutes(),2)}),R(\"hmmss\",0,0,function(){return\"\"+oc.apply(this)+Q(this.minutes(),2)+Q(this.seconds(),2)}),R(\"Hmm\",0,0,function(){return\"\"+this.hours()+Q(this.minutes(),2)}),R(\"Hmmss\",0,0,function(){return\"\"+this.hours()+Q(this.minutes(),2)+Q(this.seconds(),2)}),qc(\"a\",!0),qc(\"A\",!1),J(\"hour\",\"h\"),W(\"a\",rc),W(\"A\",rc),W(\"H\",yd),W(\"h\",yd),W(\"HH\",yd,ud),W(\"hh\",yd,ud),W(\"hmm\",zd),W(\"hmmss\",Ad),W(\"Hmm\",zd),W(\"Hmmss\",Ad),$([\"H\",\"HH\"],Pd),$([\"a\",\"A\"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),$([\"h\",\"hh\"],function(a,b,c){b[Pd]=r(a),j(c).bigHour=!0}),$(\"hmm\",function(a,b,c){var d=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d)),j(c).bigHour=!0}),$(\"hmmss\",function(a,b,c){var d=a.length-4,e=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d,2)),b[Rd]=r(a.substr(e)),j(c).bigHour=!0}),$(\"Hmm\",function(a,b,c){var d=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d))}),$(\"Hmmss\",function(a,b,c){var d=a.length-4,e=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d,2)),b[Rd]=r(a.substr(e))});var we=/[ap]\\.?m?\\.?/i,xe=M(\"Hours\",!0);R(\"m\",[\"mm\",2],0,\"minute\"),J(\"minute\",\"m\"),W(\"m\",yd),W(\"mm\",yd,ud),$([\"m\",\"mm\"],Qd);var ye=M(\"Minutes\",!1);R(\"s\",[\"ss\",2],0,\"second\"),J(\"second\",\"s\"),W(\"s\",yd),W(\"ss\",yd,ud),$([\"s\",\"ss\"],Rd);var ze=M(\"Seconds\",!1);R(\"S\",0,0,function(){return~~(this.millisecond()/100)}),R(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),R(0,[\"SSS\",3],0,\"millisecond\"),R(0,[\"SSSS\",4],0,function(){return 10*this.millisecond()}),R(0,[\"SSSSS\",5],0,function(){return 100*this.millisecond()}),R(0,[\"SSSSSS\",6],0,function(){return 1e3*this.millisecond()}),R(0,[\"SSSSSSS\",7],0,function(){return 1e4*this.millisecond()}),R(0,[\"SSSSSSSS\",8],0,function(){return 1e5*this.millisecond()}),R(0,[\"SSSSSSSSS\",9],0,function(){return 1e6*this.millisecond()}),J(\"millisecond\",\"ms\"),W(\"S\",Bd,td),W(\"SS\",Bd,ud),W(\"SSS\",Bd,vd);var Ae;for(Ae=\"SSSS\";Ae.length<=9;Ae+=\"S\")W(Ae,Ed);for(Ae=\"S\";Ae.length<=9;Ae+=\"S\")$(Ae,uc);var Be=M(\"Milliseconds\",!1);R(\"z\",0,0,\"zoneAbbr\"),R(\"zz\",0,0,\"zoneName\");var Ce=o.prototype;Ce.add=le,Ce.calendar=kb,Ce.clone=lb,Ce.diff=sb,Ce.endOf=Eb,Ce.format=wb,Ce.from=xb,Ce.fromNow=yb,Ce.to=zb,Ce.toNow=Ab,Ce.get=P,Ce.invalidAt=Nb,Ce.isAfter=mb,Ce.isBefore=nb,Ce.isBetween=ob,Ce.isSame=pb,Ce.isSameOrAfter=qb,Ce.isSameOrBefore=rb,Ce.isValid=Lb,Ce.lang=ne,Ce.locale=Bb,Ce.localeData=Cb,Ce.max=ge,Ce.min=fe,Ce.parsingFlags=Mb,Ce.set=P,Ce.startOf=Db,Ce.subtract=me,Ce.toArray=Ib,Ce.toObject=Jb,Ce.toDate=Hb,Ce.toISOString=vb,Ce.toJSON=Kb,Ce.toString=ub,Ce.unix=Gb,Ce.valueOf=Fb,Ce.creationData=Ob,Ce.year=ee,Ce.isLeapYear=ta,Ce.weekYear=Qb,Ce.isoWeekYear=Rb,Ce.quarter=Ce.quarters=Wb,Ce.month=ha,Ce.daysInMonth=ia,Ce.week=Ce.weeks=$b,Ce.isoWeek=Ce.isoWeeks=_b,Ce.weeksInYear=Tb,Ce.isoWeeksInYear=Sb,Ce.date=pe,Ce.day=Ce.days=gc,Ce.weekday=hc,Ce.isoWeekday=ic,Ce.dayOfYear=nc,Ce.hour=Ce.hours=xe,Ce.minute=Ce.minutes=ye,Ce.second=Ce.seconds=ze,Ce.millisecond=Ce.milliseconds=Be,Ce.utcOffset=Ua,Ce.utc=Wa,Ce.local=Xa,Ce.parseZone=Ya,Ce.hasAlignedHourOffset=Za,Ce.isDST=$a,Ce.isDSTShifted=_a,Ce.isLocal=ab,Ce.isUtcOffset=bb,Ce.isUtc=cb,Ce.isUTC=cb,Ce.zoneAbbr=vc,Ce.zoneName=wc,Ce.dates=u(\"dates accessor is deprecated. Use date instead.\",pe),Ce.months=u(\"months accessor is deprecated. Use month instead\",ha),Ce.years=u(\"years accessor is deprecated. Use year instead\",ee),Ce.zone=u(\"moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779\",Va);var De=Ce,Ee={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},Fe={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},Ge=\"Invalid date\",He=\"%d\",Ie=/\\d{1,2}/,Je={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},Ke=A.prototype;Ke._calendar=Ee,Ke.calendar=zc,Ke._longDateFormat=Fe,Ke.longDateFormat=Ac,Ke._invalidDate=Ge,Ke.invalidDate=Bc,Ke._ordinal=He,Ke.ordinal=Cc,Ke._ordinalParse=Ie,Ke.preparse=Dc,Ke.postformat=Dc,Ke._relativeTime=Je,Ke.relativeTime=Ec,Ke.pastFuture=Fc,Ke.set=y,Ke.months=ca,Ke._months=Wd,Ke.monthsShort=da,Ke._monthsShort=Xd,Ke.monthsParse=fa,Ke._monthsRegex=Zd,Ke.monthsRegex=ka,Ke._monthsShortRegex=Yd,Ke.monthsShortRegex=ja,Ke.week=Xb,Ke._week=oe,Ke.firstDayOfYear=Zb,Ke.firstDayOfWeek=Yb,Ke.weekdays=bc,Ke._weekdays=qe,Ke.weekdaysMin=dc,Ke._weekdaysMin=se,Ke.weekdaysShort=cc,Ke._weekdaysShort=re,Ke.weekdaysParse=fc,Ke._weekdaysRegex=te,Ke.weekdaysRegex=jc,Ke._weekdaysShortRegex=ue,Ke.weekdaysShortRegex=kc,Ke._weekdaysMinRegex=ve,Ke.weekdaysMinRegex=lc,Ke.isPM=sc,Ke._meridiemParse=we,Ke.meridiem=tc,E(\"en\",{ordinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===r(a%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\";return a+c}}),a.lang=u(\"moment.lang is deprecated. Use moment.locale instead.\",E),a.langData=u(\"moment.langData is deprecated. Use moment.localeData instead.\",H);var Le=Math.abs,Me=Yc(\"ms\"),Ne=Yc(\"s\"),Oe=Yc(\"m\"),Pe=Yc(\"h\"),Qe=Yc(\"d\"),Re=Yc(\"w\"),Se=Yc(\"M\"),Te=Yc(\"y\"),Ue=$c(\"milliseconds\"),Ve=$c(\"seconds\"),We=$c(\"minutes\"),Xe=$c(\"hours\"),Ye=$c(\"days\"),Ze=$c(\"months\"),$e=$c(\"years\"),_e=Math.round,af={s:45,m:45,h:22,d:26,M:11},bf=Math.abs,cf=Oa.prototype;cf.abs=Oc,cf.add=Qc,cf.subtract=Rc,cf.as=Wc,cf.asMilliseconds=Me,cf.asSeconds=Ne,cf.asMinutes=Oe,cf.asHours=Pe,cf.asDays=Qe,cf.asWeeks=Re,cf.asMonths=Se,cf.asYears=Te,cf.valueOf=Xc,cf._bubble=Tc,cf.get=Zc,cf.milliseconds=Ue,cf.seconds=Ve,cf.minutes=We,cf.hours=Xe,cf.days=Ye,cf.weeks=_c,cf.months=Ze,cf.years=$e,cf.humanize=dd,cf.toISOString=ed,cf.toString=ed,cf.toJSON=ed,cf.locale=Bb,cf.localeData=Cb,cf.toIsoString=u(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",ed),cf.lang=ne,R(\"X\",0,0,\"unix\"),R(\"x\",0,0,\"valueOf\"),W(\"x\",Fd),W(\"X\",Id),$(\"X\",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),$(\"x\",function(a,b,c){c._d=new Date(r(a))}),a.version=\"2.13.0\",b(Ka),a.fn=De,a.min=Ma,a.max=Na,a.now=he,a.utc=h,a.unix=xc,a.months=Jc,a.isDate=d,a.locale=E,a.invalid=l,a.duration=db,a.isMoment=p,a.weekdays=Lc,a.parseZone=yc,a.localeData=H,a.isDuration=Pa,a.monthsShort=Kc,a.weekdaysMin=Nc,a.defineLocale=F,a.updateLocale=G,a.locales=I,a.weekdaysShort=Mc,a.normalizeUnits=K,a.relativeTimeThreshold=cd,a.prototype=De;var df=a;return df});","/**\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\n *\n * @version 0.9.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n!function(){\"use strict\";function t(t,i){i?(d[0]=d[16]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=d[9]=d[10]=d[11]=d[12]=d[13]=d[14]=d[15]=0,this.blocks=d):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],t?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=t}function i(i,r,s){var e,n=typeof i;if(\"string\"===n){var o,a=[],u=i.length,c=0;for(e=0;e>6,a[c++]=128|63&o):o<55296||o>=57344?(a[c++]=224|o>>12,a[c++]=128|o>>6&63,a[c++]=128|63&o):(o=65536+((1023&o)<<10|1023&i.charCodeAt(++e)),a[c++]=240|o>>18,a[c++]=128|o>>12&63,a[c++]=128|o>>6&63,a[c++]=128|63&o);i=a}else{if(\"object\"!==n)throw new Error(h);if(null===i)throw new Error(h);if(f&&i.constructor===ArrayBuffer)i=new Uint8Array(i);else if(!(Array.isArray(i)||f&&ArrayBuffer.isView(i)))throw new Error(h)}i.length>64&&(i=new t(r,!0).update(i).array());var y=[],p=[];for(e=0;e<64;++e){var l=i[e]||0;y[e]=92^l,p[e]=54^l}t.call(this,r,s),this.update(p),this.oKeyPad=y,this.inner=!0,this.sharedMemory=s}var h=\"input is invalid type\",r=\"object\"==typeof window,s=r?window:{};s.JS_SHA256_NO_WINDOW&&(r=!1);var e=!r&&\"object\"==typeof self,n=!s.JS_SHA256_NO_NODE_JS&&\"object\"==typeof process&&process.versions&&process.versions.node;n?s=global:e&&(s=self);var o=!s.JS_SHA256_NO_COMMON_JS&&\"object\"==typeof module&&module.exports,a=\"function\"==typeof define&&define.amd,f=!s.JS_SHA256_NO_ARRAY_BUFFER&&\"undefined\"!=typeof ArrayBuffer,u=\"0123456789abcdef\".split(\"\"),c=[-2147483648,8388608,32768,128],y=[24,16,8,0],p=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],l=[\"hex\",\"array\",\"digest\",\"arrayBuffer\"],d=[];!s.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(t){return\"[object Array]\"===Object.prototype.toString.call(t)}),!f||!s.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(t){return\"object\"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer});var A=function(i,h){return function(r){return new t(h,!0).update(r)[i]()}},w=function(i){var h=A(\"hex\",i);n&&(h=b(h,i)),h.create=function(){return new t(i)},h.update=function(t){return h.create().update(t)};for(var r=0;r>2]|=t[n]<>2]|=s<>2]|=(192|s>>6)<>2]|=(128|63&s)<=57344?(a[e>>2]|=(224|s>>12)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<>2]|=(240|s>>18)<>2]|=(128|s>>12&63)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<=64?(this.block=a[16],this.start=e-64,this.hash(),this.hashed=!0):this.start=e}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},t.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,i=this.lastByteIndex;t[16]=this.block,t[i>>2]|=c[3&i],this.block=t[16],i>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},t.prototype.hash=function(){var t,i,h,r,s,e,n,o,a,f=this.h0,u=this.h1,c=this.h2,y=this.h3,l=this.h4,d=this.h5,A=this.h6,w=this.h7,b=this.blocks;for(t=16;t<64;++t)i=((s=b[t-15])>>>7|s<<25)^(s>>>18|s<<14)^s>>>3,h=((s=b[t-2])>>>17|s<<15)^(s>>>19|s<<13)^s>>>10,b[t]=b[t-16]+i+b[t-7]+h<<0;for(a=u&c,t=0;t<64;t+=4)this.first?(this.is224?(e=300032,w=(s=b[0]-1413257819)-150054599<<0,y=s+24177077<<0):(e=704751109,w=(s=b[0]-210244248)-1521486534<<0,y=s+143694565<<0),this.first=!1):(i=(f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10),r=(e=f&u)^f&c^a,w=y+(s=w+(h=(l>>>6|l<<26)^(l>>>11|l<<21)^(l>>>25|l<<7))+(l&d^~l&A)+p[t]+b[t])<<0,y=s+(i+r)<<0),i=(y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10),r=(n=y&f)^y&u^e,A=c+(s=A+(h=(w>>>6|w<<26)^(w>>>11|w<<21)^(w>>>25|w<<7))+(w&l^~w&d)+p[t+1]+b[t+1])<<0,i=((c=s+(i+r)<<0)>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10),r=(o=c&y)^c&f^n,d=u+(s=d+(h=(A>>>6|A<<26)^(A>>>11|A<<21)^(A>>>25|A<<7))+(A&w^~A&l)+p[t+2]+b[t+2])<<0,i=((u=s+(i+r)<<0)>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),r=(a=u&c)^u&y^o,l=f+(s=l+(h=(d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&A^~d&w)+p[t+3]+b[t+3])<<0,f=s+(i+r)<<0;this.h0=this.h0+f<<0,this.h1=this.h1+u<<0,this.h2=this.h2+c<<0,this.h3=this.h3+y<<0,this.h4=this.h4+l<<0,this.h5=this.h5+d<<0,this.h6=this.h6+A<<0,this.h7=this.h7+w<<0},t.prototype.hex=function(){this.finalize();var t=this.h0,i=this.h1,h=this.h2,r=this.h3,s=this.h4,e=this.h5,n=this.h6,o=this.h7,a=u[t>>28&15]+u[t>>24&15]+u[t>>20&15]+u[t>>16&15]+u[t>>12&15]+u[t>>8&15]+u[t>>4&15]+u[15&t]+u[i>>28&15]+u[i>>24&15]+u[i>>20&15]+u[i>>16&15]+u[i>>12&15]+u[i>>8&15]+u[i>>4&15]+u[15&i]+u[h>>28&15]+u[h>>24&15]+u[h>>20&15]+u[h>>16&15]+u[h>>12&15]+u[h>>8&15]+u[h>>4&15]+u[15&h]+u[r>>28&15]+u[r>>24&15]+u[r>>20&15]+u[r>>16&15]+u[r>>12&15]+u[r>>8&15]+u[r>>4&15]+u[15&r]+u[s>>28&15]+u[s>>24&15]+u[s>>20&15]+u[s>>16&15]+u[s>>12&15]+u[s>>8&15]+u[s>>4&15]+u[15&s]+u[e>>28&15]+u[e>>24&15]+u[e>>20&15]+u[e>>16&15]+u[e>>12&15]+u[e>>8&15]+u[e>>4&15]+u[15&e]+u[n>>28&15]+u[n>>24&15]+u[n>>20&15]+u[n>>16&15]+u[n>>12&15]+u[n>>8&15]+u[n>>4&15]+u[15&n];return this.is224||(a+=u[o>>28&15]+u[o>>24&15]+u[o>>20&15]+u[o>>16&15]+u[o>>12&15]+u[o>>8&15]+u[o>>4&15]+u[15&o]),a},t.prototype.toString=t.prototype.hex,t.prototype.digest=function(){this.finalize();var t=this.h0,i=this.h1,h=this.h2,r=this.h3,s=this.h4,e=this.h5,n=this.h6,o=this.h7,a=[t>>24&255,t>>16&255,t>>8&255,255&t,i>>24&255,i>>16&255,i>>8&255,255&i,h>>24&255,h>>16&255,h>>8&255,255&h,r>>24&255,r>>16&255,r>>8&255,255&r,s>>24&255,s>>16&255,s>>8&255,255&s,e>>24&255,e>>16&255,e>>8&255,255&e,n>>24&255,n>>16&255,n>>8&255,255&n];return this.is224||a.push(o>>24&255,o>>16&255,o>>8&255,255&o),a},t.prototype.array=t.prototype.digest,t.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(this.is224?28:32),i=new DataView(t);return i.setUint32(0,this.h0),i.setUint32(4,this.h1),i.setUint32(8,this.h2),i.setUint32(12,this.h3),i.setUint32(16,this.h4),i.setUint32(20,this.h5),i.setUint32(24,this.h6),this.is224||i.setUint32(28,this.h7),t},i.prototype=new t,i.prototype.finalize=function(){if(t.prototype.finalize.call(this),this.inner){this.inner=!1;var i=this.array();t.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(i),t.prototype.finalize.call(this)}};var B=w();B.sha256=B,B.sha224=w(!0),B.sha256.hmac=_(),B.sha224.hmac=_(!0),o?module.exports=B:(s.sha256=B.sha256,s.sha224=B.sha224,a&&define(function(){return B}))}();","!function(t,e){\"use strict\";\"object\"==typeof module&&module.exports?module.exports=e(require(\"moment\")):\"function\"==typeof define&&define.amd?define([\"moment\"],e):e(t.moment)}(this,function(r){\"use strict\";void 0===r.version&&r.default&&(r=r.default);var e,a={},i={},s={},c={},l={},t=(r&&\"string\"==typeof r.version||D(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\"),r.version.split(\".\")),n=+t[0],o=+t[1];function f(t){return 96= 2.6.0. You are using Moment.js \"+r.version+\". See momentjs.com\"),d.prototype={_set:function(t){this.name=t.name,this.abbrs=t.abbrs,this.untils=t.untils,this.offsets=t.offsets,this.population=t.population},_index:function(t){t=function(t,e){var n,o=e.length;if(t=e[o-2])return o-1;if(t>=e[o-1])return-1;for(var r=0,i=o-1;1= 2.9.0. You are using Moment.js \"+r.version+\".\"),r.defaultZone=t?S(t):null,r};t=r.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(t)?(t.push(\"_z\"),t.push(\"_a\")):t&&(t._z=null),r});","!function(a,i){\"use strict\";\"object\"==typeof module&&module.exports?module.exports=i(require(\"moment\")):\"function\"==typeof define&&define.amd?define([\"moment\"],i):i(a.moment)}(this,function(o){\"use strict\";void 0===o.version&&o.default&&(o=o.default);var i,s={},c={},A={},u={},m={},a=(o&&\"string\"==typeof o.version||N(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\"),o.version.split(\".\")),e=+a[0],r=+a[1];function n(a){return 96= 2.6.0. You are using Moment.js \"+o.version+\". See momentjs.com\"),b.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){a=function(a,i){var e,r=i.length;if(a=i[r-2])return r-1;if(a>=i[r-1])return-1;for(var o=0,c=r-1;1= 2.9.0. You are using Moment.js \"+o.version+\".\"),o.defaultZone=a?S(a):null,o};a=o.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(a)?(a.push(\"_z\"),a.push(\"_a\")):a&&(a._z=null),k({version:\"2024a\",zones:[\"Africa/Abidjan|GMT|0|0||48e5\",\"Africa/Nairobi|EAT|-30|0||47e5\",\"Africa/Algiers|CET|-10|0||26e5\",\"Africa/Lagos|WAT|-10|0||17e6\",\"Africa/Maputo|CAT|-20|0||26e5\",\"Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6\",\"Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0|32e5\",\"Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6\",\"Africa/Johannesburg|SAST|-20|0||84e5\",\"Africa/Juba|EAT CAT|-30 -20|01|24nx0|\",\"Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5\",\"Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|\",\"Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5\",\"Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326\",\"America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4\",\"America/Santo_Domingo|AST|40|0||29e5\",\"America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4\",\"America/Fortaleza|-03|30|0||34e5\",\"America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5\",\"America/Panama|EST|50|0||15e5\",\"America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\",\"America/Bahia|-02 -03|20 30|01|1GCq0|27e5\",\"America/Managua|CST|60|0||22e5\",\"America/La_Paz|-04|40|0||19e5\",\"America/Lima|-05|50|0||11e6\",\"America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5\",\"America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5\",\"America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|MST MDT CST|70 60 60|01010101010101010101012|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\",\"America/Ciudad_Juarez|MST MDT CST|70 60 60|010101010101010101010120|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0|\",\"America/Phoenix|MST|70|0||42e5\",\"America/Whitehorse|PST PDT MST|80 70 70|0101010101010101012|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6\",\"America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4\",\"America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6\",\"America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4\",\"America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3\",\"America/Grand_Turk|EST EDT AST|50 40 40|010101021010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2\",\"America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5\",\"America/Mazatlan|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4\",\"America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2\",\"America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2\",\"America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Noronha|-02|20|0||30e2\",\"America/Ojinaga|MST MDT CST|70 60 60|01010101010101010101012|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0|23e3\",\"America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5\",\"Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|62e5\",\"America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4\",\"America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4\",\"Antarctica/Casey|+11 +08|-b0 -80|0101010101010|1GAF0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1|10\",\"Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70\",\"Pacific/Port_Moresby|+10|-a0|0||25e4\",\"Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Asia/Tashkent|+05|-50|0||23e5\",\"Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\",\"Asia/Baghdad|+03|-30|0||66e5\",\"Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40\",\"Asia/Bangkok|+07|-70|0||15e6\",\"Asia/Dhaka|+06|-60|0||16e6\",\"Asia/Amman|EET EEST +03|-20 -30 -30|010101010101010101012|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5\",\"Asia/Kamchatka|+12|-c0|0||18e4\",\"Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0|\",\"Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5\",\"Asia/Kuala_Lumpur|+08|-80|0||71e5\",\"Asia/Kolkata|IST|-5u|0||15e6\",\"Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4\",\"Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Shanghai|CST|-80|0||23e6\",\"Asia/Colombo|+0530|-5u|0||22e5\",\"Asia/Damascus|EET EEST +03|-20 -30 -30|01010101010101010101012|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|+09|-90|0||19e4\",\"Asia/Dubai|+04|-40|0||39e5\",\"Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0|18e5\",\"Asia/Hong_Kong|HKT|-80|0||73e5\",\"Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4\",\"Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|WIB|-70|0||31e6\",\"Asia/Jayapura|WIT|-90|0||26e4\",\"Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4\",\"Asia/Kabul|+0430|-4u|0||46e5\",\"Asia/Karachi|PKT|-50|0||24e6\",\"Asia/Kathmandu|+0545|-5J|0||12e5\",\"Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4\",\"Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5\",\"Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3\",\"Asia/Makassar|WITA|-80|0||15e5\",\"Asia/Manila|PST|-80|0||24e6\",\"Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5\",\"Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5\",\"Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5\",\"Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5\",\"Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4\",\"Asia/Rangoon|+0630|-6u|0||48e5\",\"Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4\",\"Asia/Seoul|KST|-90|0||23e6\",\"Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2\",\"Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\",\"Asia/Tokyo|JST|-90|0||38e6\",\"Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5\",\"Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4\",\"Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5\",\"Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5\",\"Atlantic/Cape_Verde|-01|10|0||50e4\",\"Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|AEST|-a0|0||20e5\",\"Australia/Darwin|ACST|-9u|0||12e4\",\"Australia/Eucla|+0845|-8J|0||368\",\"Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Perth|AWST|-80|0||18e5\",\"Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|30e2\",\"Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5\",\"Etc/GMT-1|+01|-10|0||\",\"Pacific/Guadalcanal|+11|-b0|0||11e4\",\"Pacific/Fakaofo|+13|-d0|0||483\",\"Pacific/Kiritimati|+14|-e0|0||51e2\",\"Etc/GMT-2|+02|-20|0||\",\"Pacific/Tahiti|-10|a0|0||18e4\",\"Pacific/Niue|-11|b0|0||12e2\",\"Etc/GMT+12|-12|c0|0||\",\"Pacific/Galapagos|-06|60|0||25e3\",\"Etc/GMT+7|-07|70|0||\",\"Pacific/Pitcairn|-08|80|0||56\",\"Pacific/Gambier|-09|90|0||125\",\"Etc/UTC|UTC|0|0||\",\"Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5\",\"Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6\",\"Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4\",\"Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4\",\"Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6\",\"Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810|\",\"Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Volgograd|MSK MSK +04|-40 -30 -40|0121|1N7y0 9Jd0 5gn0|10e5\",\"Pacific/Honolulu|HST|a0|0||37e4\",\"MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3\",\"Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4\",\"Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4\",\"Pacific/Guam|ChST|-a0|0||17e4\",\"Pacific/Marquesas|-0930|9u|0||86e2\",\"Pacific/Pago_Pago|SST|b0|0||37e2\",\"Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3\"],links:[\"Africa/Abidjan|Africa/Accra\",\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Bissau\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Monrovia\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|America/Danmarkshavn\",\"Africa/Abidjan|Atlantic/Reykjavik\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Abidjan|Etc/GMT\",\"Africa/Abidjan|Etc/GMT+0\",\"Africa/Abidjan|Etc/GMT-0\",\"Africa/Abidjan|Etc/GMT0\",\"Africa/Abidjan|Etc/Greenwich\",\"Africa/Abidjan|GMT\",\"Africa/Abidjan|GMT+0\",\"Africa/Abidjan|GMT-0\",\"Africa/Abidjan|GMT0\",\"Africa/Abidjan|Greenwich\",\"Africa/Abidjan|Iceland\",\"Africa/Algiers|Africa/Tunis\",\"Africa/Cairo|Egypt\",\"Africa/Casablanca|Africa/El_Aaiun\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Ndjamena\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|America/Juneau\",\"America/Anchorage|America/Nome\",\"America/Anchorage|America/Sitka\",\"America/Anchorage|America/Yakutat\",\"America/Anchorage|US/Alaska\",\"America/Campo_Grande|America/Cuiaba\",\"America/Chicago|America/Indiana/Knox\",\"America/Chicago|America/Indiana/Tell_City\",\"America/Chicago|America/Knox_IN\",\"America/Chicago|America/Matamoros\",\"America/Chicago|America/Menominee\",\"America/Chicago|America/North_Dakota/Beulah\",\"America/Chicago|America/North_Dakota/Center\",\"America/Chicago|America/North_Dakota/New_Salem\",\"America/Chicago|America/Rainy_River\",\"America/Chicago|America/Rankin_Inlet\",\"America/Chicago|America/Resolute\",\"America/Chicago|America/Winnipeg\",\"America/Chicago|CST6CDT\",\"America/Chicago|Canada/Central\",\"America/Chicago|US/Central\",\"America/Chicago|US/Indiana-Starke\",\"America/Denver|America/Boise\",\"America/Denver|America/Cambridge_Bay\",\"America/Denver|America/Edmonton\",\"America/Denver|America/Inuvik\",\"America/Denver|America/Shiprock\",\"America/Denver|America/Yellowknife\",\"America/Denver|Canada/Mountain\",\"America/Denver|MST7MDT\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Fortaleza|America/Argentina/Buenos_Aires\",\"America/Fortaleza|America/Argentina/Catamarca\",\"America/Fortaleza|America/Argentina/ComodRivadavia\",\"America/Fortaleza|America/Argentina/Cordoba\",\"America/Fortaleza|America/Argentina/Jujuy\",\"America/Fortaleza|America/Argentina/La_Rioja\",\"America/Fortaleza|America/Argentina/Mendoza\",\"America/Fortaleza|America/Argentina/Rio_Gallegos\",\"America/Fortaleza|America/Argentina/Salta\",\"America/Fortaleza|America/Argentina/San_Juan\",\"America/Fortaleza|America/Argentina/San_Luis\",\"America/Fortaleza|America/Argentina/Tucuman\",\"America/Fortaleza|America/Argentina/Ushuaia\",\"America/Fortaleza|America/Belem\",\"America/Fortaleza|America/Buenos_Aires\",\"America/Fortaleza|America/Catamarca\",\"America/Fortaleza|America/Cayenne\",\"America/Fortaleza|America/Cordoba\",\"America/Fortaleza|America/Jujuy\",\"America/Fortaleza|America/Maceio\",\"America/Fortaleza|America/Mendoza\",\"America/Fortaleza|America/Paramaribo\",\"America/Fortaleza|America/Recife\",\"America/Fortaleza|America/Rosario\",\"America/Fortaleza|America/Santarem\",\"America/Fortaleza|Antarctica/Rothera\",\"America/Fortaleza|Atlantic/Stanley\",\"America/Fortaleza|Etc/GMT+3\",\"America/Godthab|America/Nuuk\",\"America/Halifax|America/Glace_Bay\",\"America/Halifax|America/Goose_Bay\",\"America/Halifax|America/Moncton\",\"America/Halifax|America/Thule\",\"America/Halifax|Atlantic/Bermuda\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/La_Paz|America/Boa_Vista\",\"America/La_Paz|America/Guyana\",\"America/La_Paz|America/Manaus\",\"America/La_Paz|America/Porto_Velho\",\"America/La_Paz|Brazil/West\",\"America/La_Paz|Etc/GMT+4\",\"America/Lima|America/Bogota\",\"America/Lima|America/Guayaquil\",\"America/Lima|Etc/GMT+5\",\"America/Los_Angeles|America/Ensenada\",\"America/Los_Angeles|America/Santa_Isabel\",\"America/Los_Angeles|America/Tijuana\",\"America/Los_Angeles|America/Vancouver\",\"America/Los_Angeles|Canada/Pacific\",\"America/Los_Angeles|Mexico/BajaNorte\",\"America/Los_Angeles|PST8PDT\",\"America/Los_Angeles|US/Pacific\",\"America/Managua|America/Belize\",\"America/Managua|America/Costa_Rica\",\"America/Managua|America/El_Salvador\",\"America/Managua|America/Guatemala\",\"America/Managua|America/Regina\",\"America/Managua|America/Swift_Current\",\"America/Managua|America/Tegucigalpa\",\"America/Managua|Canada/Saskatchewan\",\"America/Mazatlan|Mexico/BajaSur\",\"America/Mexico_City|America/Bahia_Banderas\",\"America/Mexico_City|America/Merida\",\"America/Mexico_City|America/Monterrey\",\"America/Mexico_City|Mexico/General\",\"America/New_York|America/Detroit\",\"America/New_York|America/Fort_Wayne\",\"America/New_York|America/Indiana/Indianapolis\",\"America/New_York|America/Indiana/Marengo\",\"America/New_York|America/Indiana/Petersburg\",\"America/New_York|America/Indiana/Vevay\",\"America/New_York|America/Indiana/Vincennes\",\"America/New_York|America/Indiana/Winamac\",\"America/New_York|America/Indianapolis\",\"America/New_York|America/Iqaluit\",\"America/New_York|America/Kentucky/Louisville\",\"America/New_York|America/Kentucky/Monticello\",\"America/New_York|America/Louisville\",\"America/New_York|America/Montreal\",\"America/New_York|America/Nassau\",\"America/New_York|America/Nipigon\",\"America/New_York|America/Pangnirtung\",\"America/New_York|America/Thunder_Bay\",\"America/New_York|America/Toronto\",\"America/New_York|Canada/Eastern\",\"America/New_York|EST5EDT\",\"America/New_York|US/East-Indiana\",\"America/New_York|US/Eastern\",\"America/New_York|US/Michigan\",\"America/Noronha|Atlantic/South_Georgia\",\"America/Noronha|Brazil/DeNoronha\",\"America/Noronha|Etc/GMT+2\",\"America/Panama|America/Atikokan\",\"America/Panama|America/Cayman\",\"America/Panama|America/Coral_Harbour\",\"America/Panama|America/Jamaica\",\"America/Panama|EST\",\"America/Panama|Jamaica\",\"America/Phoenix|America/Creston\",\"America/Phoenix|America/Dawson_Creek\",\"America/Phoenix|America/Hermosillo\",\"America/Phoenix|MST\",\"America/Phoenix|US/Arizona\",\"America/Rio_Branco|America/Eirunepe\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Santo_Domingo|America/Anguilla\",\"America/Santo_Domingo|America/Antigua\",\"America/Santo_Domingo|America/Aruba\",\"America/Santo_Domingo|America/Barbados\",\"America/Santo_Domingo|America/Blanc-Sablon\",\"America/Santo_Domingo|America/Curacao\",\"America/Santo_Domingo|America/Dominica\",\"America/Santo_Domingo|America/Grenada\",\"America/Santo_Domingo|America/Guadeloupe\",\"America/Santo_Domingo|America/Kralendijk\",\"America/Santo_Domingo|America/Lower_Princes\",\"America/Santo_Domingo|America/Marigot\",\"America/Santo_Domingo|America/Martinique\",\"America/Santo_Domingo|America/Montserrat\",\"America/Santo_Domingo|America/Port_of_Spain\",\"America/Santo_Domingo|America/Puerto_Rico\",\"America/Santo_Domingo|America/St_Barthelemy\",\"America/Santo_Domingo|America/St_Kitts\",\"America/Santo_Domingo|America/St_Lucia\",\"America/Santo_Domingo|America/St_Thomas\",\"America/Santo_Domingo|America/St_Vincent\",\"America/Santo_Domingo|America/Tortola\",\"America/Santo_Domingo|America/Virgin\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Whitehorse|America/Dawson\",\"America/Whitehorse|Canada/Yukon\",\"Antarctica/Palmer|America/Punta_Arenas\",\"Asia/Baghdad|Antarctica/Syowa\",\"Asia/Baghdad|Asia/Aden\",\"Asia/Baghdad|Asia/Bahrain\",\"Asia/Baghdad|Asia/Kuwait\",\"Asia/Baghdad|Asia/Qatar\",\"Asia/Baghdad|Asia/Riyadh\",\"Asia/Baghdad|Etc/GMT-3\",\"Asia/Baghdad|Europe/Minsk\",\"Asia/Bangkok|Antarctica/Vostok\",\"Asia/Bangkok|Asia/Ho_Chi_Minh\",\"Asia/Bangkok|Asia/Novokuznetsk\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Saigon\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Bangkok|Etc/GMT-7\",\"Asia/Bangkok|Indian/Christmas\",\"Asia/Dhaka|Asia/Almaty\",\"Asia/Dhaka|Asia/Bishkek\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dhaka|Asia/Kashgar\",\"Asia/Dhaka|Asia/Qostanay\",\"Asia/Dhaka|Asia/Thimbu\",\"Asia/Dhaka|Asia/Thimphu\",\"Asia/Dhaka|Asia/Urumqi\",\"Asia/Dhaka|Etc/GMT-6\",\"Asia/Dhaka|Indian/Chagos\",\"Asia/Dili|Etc/GMT-9\",\"Asia/Dili|Pacific/Palau\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Dubai|Asia/Tbilisi\",\"Asia/Dubai|Asia/Yerevan\",\"Asia/Dubai|Etc/GMT-4\",\"Asia/Dubai|Europe/Samara\",\"Asia/Dubai|Indian/Mahe\",\"Asia/Dubai|Indian/Mauritius\",\"Asia/Dubai|Indian/Reunion\",\"Asia/Gaza|Asia/Hebron\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jakarta|Asia/Pontianak\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kamchatka|Asia/Anadyr\",\"Asia/Kamchatka|Etc/GMT-12\",\"Asia/Kamchatka|Kwajalein\",\"Asia/Kamchatka|Pacific/Funafuti\",\"Asia/Kamchatka|Pacific/Kwajalein\",\"Asia/Kamchatka|Pacific/Majuro\",\"Asia/Kamchatka|Pacific/Nauru\",\"Asia/Kamchatka|Pacific/Tarawa\",\"Asia/Kamchatka|Pacific/Wake\",\"Asia/Kamchatka|Pacific/Wallis\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Brunei\",\"Asia/Kuala_Lumpur|Asia/Kuching\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Etc/GMT-8\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Rangoon|Indian/Cocos\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|Asia/Macao\",\"Asia/Shanghai|Asia/Macau\",\"Asia/Shanghai|Asia/Taipei\",\"Asia/Shanghai|PRC\",\"Asia/Shanghai|ROC\",\"Asia/Tashkent|Antarctica/Mawson\",\"Asia/Tashkent|Asia/Aqtau\",\"Asia/Tashkent|Asia/Aqtobe\",\"Asia/Tashkent|Asia/Ashgabat\",\"Asia/Tashkent|Asia/Ashkhabad\",\"Asia/Tashkent|Asia/Atyrau\",\"Asia/Tashkent|Asia/Dushanbe\",\"Asia/Tashkent|Asia/Oral\",\"Asia/Tashkent|Asia/Samarkand\",\"Asia/Tashkent|Etc/GMT-5\",\"Asia/Tashkent|Indian/Kerguelen\",\"Asia/Tashkent|Indian/Maldives\",\"Asia/Tehran|Iran\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Choibalsan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Vladivostok|Asia/Ust-Nera\",\"Asia/Yakutsk|Asia/Khandyga\",\"Atlantic/Azores|America/Scoresbysund\",\"Atlantic/Cape_Verde|Etc/GMT+1\",\"Australia/Adelaide|Australia/Broken_Hill\",\"Australia/Adelaide|Australia/South\",\"Australia/Adelaide|Australia/Yancowinna\",\"Australia/Brisbane|Australia/Lindeman\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Darwin|Australia/North\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Antarctica/Macquarie\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/Currie\",\"Australia/Sydney|Australia/Hobart\",\"Australia/Sydney|Australia/Melbourne\",\"Australia/Sydney|Australia/NSW\",\"Australia/Sydney|Australia/Tasmania\",\"Australia/Sydney|Australia/Victoria\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Athens|Asia/Nicosia\",\"Europe/Athens|EET\",\"Europe/Athens|Europe/Bucharest\",\"Europe/Athens|Europe/Helsinki\",\"Europe/Athens|Europe/Kiev\",\"Europe/Athens|Europe/Kyiv\",\"Europe/Athens|Europe/Mariehamn\",\"Europe/Athens|Europe/Nicosia\",\"Europe/Athens|Europe/Riga\",\"Europe/Athens|Europe/Sofia\",\"Europe/Athens|Europe/Tallinn\",\"Europe/Athens|Europe/Uzhgorod\",\"Europe/Athens|Europe/Vilnius\",\"Europe/Athens|Europe/Zaporozhye\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Lisbon|Atlantic/Canary\",\"Europe/Lisbon|Atlantic/Faeroe\",\"Europe/Lisbon|Atlantic/Faroe\",\"Europe/Lisbon|Atlantic/Madeira\",\"Europe/Lisbon|Portugal\",\"Europe/Lisbon|WET\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|Europe/Kirov\",\"Europe/Moscow|W-SU\",\"Europe/Paris|Africa/Ceuta\",\"Europe/Paris|Arctic/Longyearbyen\",\"Europe/Paris|Atlantic/Jan_Mayen\",\"Europe/Paris|CET\",\"Europe/Paris|Europe/Amsterdam\",\"Europe/Paris|Europe/Andorra\",\"Europe/Paris|Europe/Belgrade\",\"Europe/Paris|Europe/Berlin\",\"Europe/Paris|Europe/Bratislava\",\"Europe/Paris|Europe/Brussels\",\"Europe/Paris|Europe/Budapest\",\"Europe/Paris|Europe/Busingen\",\"Europe/Paris|Europe/Copenhagen\",\"Europe/Paris|Europe/Gibraltar\",\"Europe/Paris|Europe/Ljubljana\",\"Europe/Paris|Europe/Luxembourg\",\"Europe/Paris|Europe/Madrid\",\"Europe/Paris|Europe/Malta\",\"Europe/Paris|Europe/Monaco\",\"Europe/Paris|Europe/Oslo\",\"Europe/Paris|Europe/Podgorica\",\"Europe/Paris|Europe/Prague\",\"Europe/Paris|Europe/Rome\",\"Europe/Paris|Europe/San_Marino\",\"Europe/Paris|Europe/Sarajevo\",\"Europe/Paris|Europe/Skopje\",\"Europe/Paris|Europe/Stockholm\",\"Europe/Paris|Europe/Tirane\",\"Europe/Paris|Europe/Vaduz\",\"Europe/Paris|Europe/Vatican\",\"Europe/Paris|Europe/Vienna\",\"Europe/Paris|Europe/Warsaw\",\"Europe/Paris|Europe/Zagreb\",\"Europe/Paris|Europe/Zurich\",\"Europe/Paris|Poland\",\"Europe/Ulyanovsk|Europe/Astrakhan\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Fakaofo|Etc/GMT-13\",\"Pacific/Fakaofo|Pacific/Enderbury\",\"Pacific/Fakaofo|Pacific/Kanton\",\"Pacific/Galapagos|Etc/GMT+6\",\"Pacific/Gambier|Etc/GMT+9\",\"Pacific/Guadalcanal|Etc/GMT-11\",\"Pacific/Guadalcanal|Pacific/Efate\",\"Pacific/Guadalcanal|Pacific/Kosrae\",\"Pacific/Guadalcanal|Pacific/Noumea\",\"Pacific/Guadalcanal|Pacific/Pohnpei\",\"Pacific/Guadalcanal|Pacific/Ponape\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|HST\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kiritimati|Etc/GMT-14\",\"Pacific/Niue|Etc/GMT+11\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Pitcairn|Etc/GMT+8\",\"Pacific/Port_Moresby|Antarctica/DumontDUrville\",\"Pacific/Port_Moresby|Etc/GMT-10\",\"Pacific/Port_Moresby|Pacific/Chuuk\",\"Pacific/Port_Moresby|Pacific/Truk\",\"Pacific/Port_Moresby|Pacific/Yap\",\"Pacific/Tahiti|Etc/GMT+10\",\"Pacific/Tahiti|Pacific/Rarotonga\"],countries:[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Puerto_Rico America/Antigua\",\"AI|America/Puerto_Rico America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla\",\"AW|America/Puerto_Rico America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Puerto_Rico America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Kuching Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Puerto_Rico America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Toronto America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston\",\"CC|Asia/Yangon Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Puerto_Rico America/Curacao\",\"CX|Asia/Bangkok Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Berlin Europe/Copenhagen\",\"DM|America/Puerto_Rico America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Puerto_Rico America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Abidjan Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Puerto_Rico America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Africa/Abidjan Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Puerto_Rico America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Puerto_Rico America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Brussels Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Paris Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Puerto_Rico America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Puerto_Rico America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana\",\"MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Brussels Europe/Amsterdam\",\"NO|Europe/Berlin Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Asia/Dubai Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Asia/Dubai Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Berlin Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Berlin Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Puerto_Rico America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Asia/Dubai Indian/Maldives Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Puerto_Rico America/Port_of_Spain\",\"TV|Pacific/Tarawa Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kyiv\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Puerto_Rico America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Puerto_Rico America/Tortola\",\"VI|America/Puerto_Rico America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Tarawa Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}),!1===o.suppressDeprecationWarnings&&\"undefined\"!=typeof console&&console.warn&&console.warn(\"Deprecation warning: Moment Timezone has been loaded from a file containing data from 2012 to 2022 only. This file is out of date and may be removed in a future release. Dates and times for the current year might be incorrect.\"),o});","(function (app) {\r\n\tapp.module('qbePortal', ['ui.date', 'ui.bootstrap', 'credit-cards', 'ui.select', 'ngSanitize', 'ipCookie', 'ui.mask', 'ngDialog', 'ActivityMonitor', 'vcRecaptcha']);\r\n\tapp.module('qbePortal.services', []);\r\n\r\n\t/** These need to be replaced with existing routes\r\n\t * when the right ng-app value is updated on the backend templates for qbePortal.routes.vehicle\r\n\t */\r\n\r\n\tapp.module('qbePortal.services.vehicle', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.bike', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.caravan', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.home', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.ctp', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.payments', ['qbePortal.services']);\r\n\r\n\tapp.module('qbePortal.routes', ['ui.router', 'qbePortal', 'angular-jwt', 'angulartics', 'angulartics.google.analytics']);\r\n\tapp.module('qbePortal.routes.vehicle', ['qbePortal.routes', 'qbePortal.services.vehicle']);\r\n\tapp.module('qbePortal.routes.bike', ['qbePortal.routes', 'qbePortal.services.bike']);\r\n\tapp.module('qbePortal.routes.caravan', ['qbePortal.routes', 'qbePortal.services.caravan', 'rzModule']);\r\n\tapp.module('qbePortal.routes.home', ['qbePortal.routes', 'qbePortal.services.home', 'rzModule']);\r\n\tapp.module('qbePortal.routes.ctp', ['qbePortal.routes', 'qbePortal.services.ctp']);\r\n\tapp.module('qbePortal.routes.payments', ['qbePortal.routes', 'qbePortal.services.payments']);\r\n\r\n\tapp.module('qbePortal.rapidEstimate.vehicle', ['ui.router', 'qbePortal', 'qbePortal.services.vehicle', 'rzModule']);\r\n\tapp.module('qbePortal.rapidEstimate.bike', ['ui.router', 'qbePortal', 'qbePortal.services.bike', 'rzModule']);\r\n\tapp.module('qbePortal.rapidEstimate.caravan', ['ui.router', 'qbePortal', 'qbePortal.services.caravan', 'rzModule']);\r\n\r\n})(angular);\r\n","\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction BikeQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util) {\r\n\tvar self = this;\r\n\r\n\tvar selectedQuote= quoteOptions.getSelectedQuoteResult() ;\r\n\tvar selectedQuoteForPayment = quoteOptions.getSelectedQuoteResultForPayment() ;\r\n\t/**\r\n\t * Retrieves values from UserInputRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from UserInputRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getUserInputValueFor = function (dotSeperatedFieldPath) {\r\n\t\tvar userInput = userInputRepository.get();\r\n\t\treturn Util.findHierarchyStringInObject(userInput, dotSeperatedFieldPath, '.');\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves values from ServiceResponseRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from ServiceResponseRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getServiceResponseValueFor = function (serviceName, dotSeperatedFieldPath) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._ridersHave_threeYears_restrictedSuspendedDisqualifiedCancelled = function () {\r\n\t\tif (this.riders) {\r\n\t\t\tvar ridersLength = this.riders.length,\r\n\t\t\t\tatLeastOneRiderHas = false,\r\n\t\t\t\trider;\r\n\r\n\t\t\tfor (var i = 0; i < ridersLength; i++) {\r\n\t\t\t\trider = this.riders[i];\r\n\r\n\t\t\t\tif (rider.threeYears_restrictedSuspendedDisqualifiedCancelled) {\r\n\t\t\t\t\tatLeastOneRiderHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneRiderHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._ridersHave_threeYears_accidentsClaims = function () {\r\n\t\tif (this.riders) {\r\n\t\t\tvar ridersLength = this.riders.length,\r\n\t\t\t\tatLeastOneRiderHas = false,\r\n\t\t\t\trider;\r\n\r\n\t\t\tfor (var i = 0; i < ridersLength; i++) {\r\n\t\t\t\trider = this.riders[i];\r\n\r\n\t\t\t\tif (rider.threeYears_accidentsClaims) {\r\n\t\t\t\t\tatLeastOneRiderHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneRiderHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._ridersHave_fiveYears_chargedOrConvicted = function () {\r\n\t\tif (this.riders) {\r\n\r\n\t\t\tvar ridersLength = this.riders.length,\r\n\t\t\t\tatLeastOneRiderHas = false,\r\n\t\t\t\trider;\r\n\r\n\t\t\tfor (var i = 0; i < ridersLength; i++) {\r\n\t\t\t\trider = this.riders[i];\r\n\r\n\t\t\t\tif (rider.fiveYears_chargedOrConvicted) {\r\n\t\t\t\t\tatLeastOneRiderHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneRiderHas;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.email = this._getUserInputValueFor('bikeForm.tellUsABitMore.yourEmailAddress')?this._getUserInputValueFor('bikeForm.tellUsABitMore.yourEmailAddress'):this._getUserInputValueFor('email');\r\n\r\n\tthis.bikeForm = this._getUserInputValueFor('bikeForm');\r\n\r\n\t// rego details\r\n\tthis.regoDetails = this._getServiceResponseValueFor('regoSearch');\r\n\r\n\tif ( !!this.regoDetails && !!this.bikeForm && !!this.bikeForm.tellUsYourRegoNumber && !!this.bikeForm.tellUsYourRegoNumber.regoNumber) {\r\n\t\tthis.regoDetails.regoNumber = this.bikeForm.tellUsYourRegoNumber.regoNumber;\r\n\t}\r\n\r\n\tif ( !! this.regoDetails && this.regoDetails.goodRetailPrice ) {\r\n\t\tthis.bikeRetailValue = parseInt( this.regoDetails.goodRetailPrice ) ;\r\n\t}\r\n\r\n\t// cover type\r\n\tthis.selectedQuote = selectedQuote ;\r\n\tthis.selectedQuoteForPayment = selectedQuoteForPayment;\r\n\t// this._getServiceResponseValueFor('quickQuote');\r\n\tif (selectedQuote ) {\r\n\t\tthis.annualCoverType = selectedQuote.getAnnual();\r\n\t\tthis.monthlyCoverType = selectedQuote.getMonthly();\r\n\r\n\t\tthis.quoteResult = this.selectedQuoteForPayment ; // selectedQuote.getQuoteResult();\r\n\t\tif ( this.quoteResult ) {\r\n\t\t\tthis.coverageOptions = this.quoteResult.coverageOptions ;\r\n\t\t\tif ( this.coverageOptions ) {\r\n\t\t\t\tthis.coverageOptionsToShow = this.coverageOptions.filter(function(op) {\r\n\t\t\t\t\treturn op.required === false ;\r\n\t\t\t\t});\r\n\t\t\t\tthis.hasCoverageOptions = this.coverageOptionsToShow.length > 0 ;\r\n\t\t\t}\r\n\t\t\tthis.excess = this.quoteResult.excess ;\r\n\t\t\tthis.namedRiderExcess = findNamedRiderExcess() ;\r\n\t\t}\r\n\r\n\t\tthis.motorcycleValue = this.quoteResult.motorcycleValue;\r\n\t\tthis.sumInsuredAmount = this.quoteResult.sumInsuredAmount;\r\n\t\t// console.log( ' sum insured ammount is ' , this.sumInsuredAmount ) ;\r\n\t}\r\n\r\n\t/** excess list to be displayed in the quote panel */\r\n\tthis.displayableExcessList = null;\r\n\r\n\tthis.getDisplayableExcess=function(isCoverSummary) {\r\n\t\tif ( ! this.excess )\r\n\t\t\treturn [] ;\r\n\r\n\t\tif ( ! this.displayableExcessList) {\r\n\t\t\tvar filterOut = ['voluntaryVehicleExcessOptions', 'voluntaryVehicleExcess', 'standardVehicleExcess'] ;\r\n\t\t\tthis.displayableExcessList = [] ;\r\n\r\n\t\t\tfor ( var key in this.excess) {\r\n\t\t\t\tif ( filterOut.indexOf(key) === -1){\r\n\t\t\t\t\t//dd-6058 - do not display Flexi excess if value is not greater than zero\t\t\t\t\t\r\n\t\t\t\t\tif((key == \"flexiExcessExcess\" || key == \"flexiExcessOptions\") && this.excess.flexiExcessExcess <= 0) continue;\r\n\t\t\t\t\tif (key == \"flexiExcessExcess\") { continue; }\r\n\t\t\t\t\tif (key == \"standardExcess\") {\r\n\t\t\t\t\t\tif (isCoverSummary) {\r\n\t\t\t\t\t\t var feItemValue = this.excess[\"flexiExcessExcess\"];\r\n\t\t\t\t\t\t\tvar standardValue = this.excess[key];\r\n\t\t\t\t\t\t\tif (!isNaN(feItemValue)) {\r\n\t\t\t\t\t\t\t\tstandardValue += feItemValue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.displayableExcessList.push({ key : key, excessValue : standardValue }) ;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.displayableExcessList.push({ key : key, excessValue : this.excess[key] }) ;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.displayableExcessList ;\r\n\t}\r\n\r\n\tthis.getSelectionExcess=function() {\r\n\t\tif (!this.excess)\r\n\t\t\treturn [] ;\r\n\t\tvar options = [-200, -100, 0, 100, 200, 300, 500, 1000, 1500];\r\n\t\tvar flexiExcessRange = this.excess.flexiExcessOptions.filter(function(x) {\r\n\t\t\treturn options.indexOf(x) != -1;\r\n\t\t});\r\n\r\n\t\tfor (var idx = 0; idx < flexiExcessRange.length; idx++) {\r\n\t\t\tflexiExcessRange[idx] += this.excess.standardExcess;\r\n\t\t}\r\n\r\n\t\treturn flexiExcessRange;\r\n\t}\r\n\r\n\tfunction findNamedRiderExcess() {\r\n\t\tvar namedRiderExcess = [],\r\n\t\t\tqr = selectedQuoteForPayment ? selectedQuoteForPayment.response : null ;\r\n\r\n\t\tif ( qr && qr.motorcycles) {\r\n\t\t\tvar riders = qr.motorcycles[0].riders ;\r\n\t\t\triders.forEach( function(rider) {\r\n\t\t\t\tif ( rider.rider\r\n\t\t\t\t\t&& rider.rider.calculatedExcess\r\n\t\t\t\t\t&& rider.rider.calculatedExcess > 0 ) {\r\n\t\t\t\t\tnamedRiderExcess.push({\r\n\t\t\t\t\t\tfirstName : rider.rider.person.firstName,\r\n\t\t\t\t\t\tlastName: rider.rider.person.lastName,\r\n\t\t\t\t\t\texcessValue : rider.rider.calculatedExcess,\r\n\t\t\t\t\t\tdob: rider.rider.person.dateOfBirth\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn namedRiderExcess ;\r\n\t}\r\n\r\n\t/**\r\n\t* Excluded riders\r\n\t*/\r\n\tvar savedQuoteResult = !!this.quoteResult ? this.quoteResult.response : null;\r\n\tif ( savedQuoteResult ) {\r\n\t\t/** excluded rider condition to be correctly diagnosed here */\r\n\t\t// this.excludedRiders = this.quoteResult.excludedRiders ;\r\n\t\tvar excludedRiders = [] ;\r\n\t\tsavedQuoteResult.motorcycles[0].riders.forEach(function(rider) {\r\n\t\t\tif ( rider.riderUsage == 'excluded')\r\n\t\t\t\texcludedRiders.push(rider.rider.person) ;\r\n\t\t});\r\n\t\tthis.excludedRiders = excludedRiders;\r\n\t}\r\n\r\n\tthis.hasExcludedRiders = function() {\r\n\t\treturn this.excludedRiders && this.excludedRiders.length > 0 ;\r\n\t}\r\n\r\n\tthis.riders = [];\r\n\tthis.postCode = null;\r\n\tthis.campaignCode = null ;\r\n\tif (this.bikeForm) {\r\n\t\t//TODO: set regoNumber based on step 1 or step 4\r\n\r\n\t\t// bikeDetails\r\n\t\tif (this.bikeForm.bikeDetails) {\r\n\t\t\tthis.bikeDetails = this.bikeForm.bikeDetails;\r\n\r\n\t\t\tthis.bikeDetailsUsage = this.bikeForm.bikeDetails.primaryBikeUse;\r\n\t\t\tswitch (this.bikeDetailsUsage) {\r\n\t\t\t\tcase 'commercial':\r\n\t\t\t\t\tthis.bikeDetailsUsage += ' - ' + this.bikeForm.bikeDetails.commercialActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n\t\t\t\t\tthis.bikeDetailsUsage += ' - ' + this.bikeForm.bikeDetails.businessActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( this.bikeForm.getStarted ) {\r\n\t\t\tthis.personOrCompany = this.bikeForm.getStarted.personOrCompany;\r\n\t\t\tthis.policyStartDate = this.bikeForm.getStarted.policyStartDate;\r\n\t\t}\r\n\r\n\t\t// Main riders & additional riders\r\n\t\tthis.additionalRiders = [];\r\n\r\n\t\tif (!!this.bikeForm.rider) {\r\n \t\tvar riders=this.bikeForm.rider.riders;\r\n \t\tif(riders){\r\n\r\n\t\t\t\tthis.mainRider = riders[0];\r\n\r\n\t\t\t\tif (!!this.bikeForm.mainPolicyHolderContact) {\r\n\t\t\t\t\tthis.mainRider.person.phoneNumber = this.bikeForm.mainPolicyHolderContact.primaryPhoneNumber;\r\n\t\t\t\t}\r\n\r\n \t\t\tif(riders.length>1){\r\n \t\t\tthis.additionalRiders=riders.splice(1,riders.length);\r\n \t\t\t}\r\n \t\t}\r\n\t\t};\r\n\r\n\t\t// riders\r\n\t\tif (this.mainRider) {\r\n\t\t\tthis.riders = [this.mainRider];\r\n\t\t\tthis.noClaimBonus = this.mainRider.noClaimBonus ; \r\n\t\t}\r\n\t\tif (this.additionalRiders) {\r\n\t\t\tthis.riders = this.riders.concat(this.additionalRiders);\r\n\t\t}\r\n\r\n\t\t// address\r\n\t\tvar aboutYourBike = this.bikeForm.aboutYourBike ;\r\n\t\tif ( aboutYourBike && aboutYourBike.address ) {\r\n\t\t\tthis.address = aboutYourBike.address\t;\r\n\t\t\tthis.postCode = this.address.postalCode;\r\n\t\t\tthis.state = this.address.state ;\r\n\t\t}\r\n\r\n\t\tif ( this.bikeForm.promotionalCode ) {\r\n\t\t\tthis.campaignCode = this.bikeForm.promotionalCode.promotionalCode ;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// this.quoteId = this._getServiceResponseValueFor('service-name', 'quote.quoteId');\r\n\tthis.quoteId = null ;\r\n\tif ( quoteRequestRepository.getSelectedQuoteCredentials() )\r\n\t\tthis.quoteId = quoteRequestRepository.getSelectedQuoteCredentials().quoteID ;\r\n\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmPolicyHolder = this.mainRider ? this.mainRider.person : null;\r\n\tthis.gtmTransactionAffiliation = 'QBE Direct' ;\r\n\tthis.insuranceType = MODULE_INFO.insuranceType ;\r\n\tthis.productCode = MODULE_INFO.productCode ;\r\n\r\n\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction CaravanQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util) {\r\n\tvar self = this;\r\n\r\n\tvar selectedQuote= quoteOptions.getSelectedQuoteResult() ;\r\n\tvar selectedQuoteForPayment = quoteOptions.getSelectedQuoteResultForPayment() ;\r\n\t// cover type\r\n\tthis.selectedQuote = selectedQuote;\r\n\tthis.selectedQuoteForPayment = selectedQuoteForPayment;\r\n\t/**\r\n\t * Retrieves values from UserInputRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from UserInputRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getUserInputValueFor = function (dotSeperatedFieldPath) {\r\n\t\tvar userInput = userInputRepository.get();\r\n\t\treturn Util.findHierarchyStringInObject(userInput, dotSeperatedFieldPath, '.');\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves values from ServiceResponseRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from ServiceResponseRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getServiceResponseValueFor = function (serviceName, dotSeperatedFieldPath) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates whether at least one driver in the last 4 years, has been charged or convicted of any driving offences\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_licenceRSDC = function () {\r\n\t\tif (this.drivers) {\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_licenceRSDC) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_chargedOrConvictedOffences = function () {\r\n\t\tif (this.drivers) {\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_vehicleAccidentsClaims = function () {\r\n\t\tif (this.drivers) {\r\n\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_tenYears_chargedOrConvictedOffences = function () {\r\n\t\tif (this.drivers) {\r\n\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.email = this._getUserInputValueFor('caravanForm.tellUsABitMore.yourEmailAddress')?this._getUserInputValueFor('caravanForm.tellUsABitMore.yourEmailAddress'):this._getUserInputValueFor('email');\r\n\r\n\t// vehicle form data\r\n\tthis.caravanForm = this._getUserInputValueFor('caravanForm');\r\n\r\n\t// rego details\r\n\tthis.regoDetails = this._getServiceResponseValueFor('regoSearch');\r\n\r\n\tif ( selectedQuoteForPayment ) {\r\n\t\tthis.vehicleInfo = selectedQuoteForPayment.response.caravans[0].caravanInfo;\r\n\t}\r\n\r\n\t// vehicle type\r\n\tthis.vehicleType = this._getUserInputValueFor('caravanForm.aboutYourCaravan.vehicleType');\r\n\r\n\t// vehicle agreed value\r\n\tthis.agreedValue = this._getUserInputValueFor('caravanForm.sumInsured.agreedValue');\r\n\tthis.generalContentsValue = this._getUserInputValueFor('caravanForm.aboutYourContents.generalContentsValue') ;\r\n\tthis.specifiedContentItems = this._getUserInputValueFor('caravanForm.aboutYourContents.contentsItems') || [] ;\r\n\tthis.totalSpecifiedContentValue = function(items) {\r\n\t\tvar total = 0 ;\r\n\t\tangular.forEach(items, function(item) { total += item.value ; });\r\n\t\treturn total ;\r\n\t}(this.specifiedContentItems);\r\n\r\n\tthis.totalContentsValue = this.totalSpecifiedContentValue + this.generalContentsValue ;\r\n\r\n\tthis.annexeCost = this._getUserInputValueFor('caravanForm.sumInsured.annexeReplacementCost');\r\n\tthis.sumInsured = this.agreedValue + this.annexeCost;\r\n\r\n\tthis.contentsSumInsured = 1000; // TODO: Aggregate the contents items + general contents value\r\n\r\n\tthis.purchaseMonth = this._getUserInputValueFor('caravanForm.caravanDetails.whenDidYouBuyMonth');\r\n\tthis.purchaseYear = this._getUserInputValueFor('caravanForm.caravanDetails.whenDidYouBuyYear');\r\n\tthis.purchaseDate = this.purchaseMonth + '/' + this.purchaseYear;\r\n\r\n\tthis.isCaravanRegistered = this._getUserInputValueFor('caravanForm.caravanDetails.isCaravanRegistered');\r\n\r\n\tif ( this.isCaravanRegistered ) {\r\n\t\tthis.regoNumber = this._getUserInputValueFor('caravanForm.caravanDetails.regoNumber');\r\n\t}\r\n\r\n\tif ( this.regoDetails ) {\r\n\t\tthis.vehicleOptionalEquipments = this.regoDetails.optionalEquipments ;\r\n\t}else if(this.caravanForm && this.caravanForm.caravanInfo){\r\n\t\tthis.regoDetails = this.caravanForm.caravanInfo;\r\n\t}\r\n\r\n\tthis.showLayupDiscount = (this.vehicleType == 'caravan' || this.vehicleType == 'campertrailer' || this.vehicleType == 'slideoncamper' || this.vehicleType == 'motorhome' || this.vehicleType == 'campervan') && this.isCaravanRegistered;\r\n\r\n\tthis.showOnsiteDiscount = (this.vehicleType == 'caravan' || this.vehicleType == 'campertrailer' || this.vehicleType == 'slideoncamper' || this.vehicleType == 'motorhome' || this.vehicleType == 'campervan') && !this.isCaravanRegistered;\r\n\r\n\r\n\t// this._getServiceResponseValueFor('quickQuote');\r\n\tif (selectedQuote ) {\r\n\t\tthis.annualCoverType = selectedQuote.getAnnual();\r\n\t\tthis.monthlyCoverType = selectedQuote.getMonthly();\r\n\t\tthis.quoteResult = selectedQuoteForPayment ;\r\n\t\tif ( this.quoteResult ) {\r\n\t\t\tthis.coverageOptions = this.quoteResult.coverageOptions ;\r\n\t\t\tif ( this.coverageOptions ) {\r\n\t\t\t\tthis.coverageOptionsToShow = this.coverageOptions.filter(function(op) {\r\n\t\t\t\t\treturn op.required === false && op.name !== 'QPCLayupCover' ;\r\n\t\t\t\t});\r\n\t\t\t\tthis.hasCoverageOptions = this.coverageOptionsToShow.length > 0 ;\r\n\t\t\t}\r\n\t\t\tthis.excess = this.quoteResult.excess ;\r\n\t\t\tthis.namedDriverExcess = findNamedDriverExcess() ;\r\n\t\t\tthis.excludedDrivers = findExcludedDrivers();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction findNamedDriverExcess() {\r\n\t\tvar namedDriverExcess = [],\r\n\t\t\tqr = selectedQuoteForPayment ? selectedQuoteForPayment.response : null ;\r\n\r\n\t\tif ( qr && qr.caravans ) {\r\n\t\t\tvar drivers = qr.caravans[0].drivers ;\r\n\t\t \tdrivers.forEach( function(driver) {\r\n\t\t \t\tif ( driver.driver\r\n\t\t \t\t\t&& driver.driver.calculatedExcess\r\n\t\t \t\t\t&& driver.driver.calculatedExcess > 0 ) {\r\n\t\t \t\t\t\tnamedDriverExcess.push({\r\n\t\t \t\t\t\t\tfirstName : driver.driver.person.firstName,\r\n\t\t \t\t\t\t\tlastName: driver.driver.person.lastName,\r\n\t\t \t\t\t\t\texcessValue : driver.driver.calculatedExcess,\r\n\t\t\t\t\t\t\tdob: driver.driver.dateOfBirth\r\n\t\t \t\t\t\t});\r\n\t\t \t\t}\r\n\t\t \t});\r\n\t\t}\r\n\r\n\t \treturn namedDriverExcess ;\r\n\t}\r\n\r\n\t/**\r\n\t* Excluded drivers\r\n\t*/\r\n\tfunction findExcludedDrivers() {\r\n\t\tvar excludedDrivers = [] ;\r\n\t\tif (selectedQuoteForPayment ) {\r\n\t\t\tvar quote = selectedQuoteForPayment.response ;\r\n\t\t\tquote.caravans[0].drivers.forEach(function(driver) {\r\n\t\t\t\tif ( driver.driverUsage == 'excluded')\r\n\t\t\t\t\texcludedDrivers.push(driver.driver.person) ;\r\n\t\t\t})\t;\r\n\t\t}\r\n\r\n\t\treturn excludedDrivers\r\n\t}\r\n\r\n\tthis.hasExcludedDrivers = function() {\r\n\t\treturn this.excludedDrivers && this.excludedDrivers.length > 0 ;\r\n\t}\r\n\r\n\t/** excess list to be displayed in the quote panel */\r\n\tthis.displayableExcessList = null;\r\n\r\n\tthis.getDisplayableExcess=function() {\r\n\t\tif ( ! this.excess )\r\n\t\t\treturn [] ;\r\n\r\n\t\tif ( ! this.displayableExcessList) {\r\n\t\t\tvar filterOut = ['voluntaryVehicleExcessOptions', 'voluntaryVehicleExcess', 'standardVehicleExcess'] ;\r\n\t\t\tthis.displayableExcessList = [] ;\r\n\r\n\t\t\tfor ( var key in this.excess) {\r\n\t\t\t\tif ( filterOut.indexOf(key) === -1)\r\n\t\t\t\t\tthis.displayableExcessList.push({ key : key, excessValue : this.excess[key] }) ;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.displayableExcessList ;\r\n\t}\r\n\r\n\r\n\r\n\tthis.drivers = [];\r\n\tthis.postCode = null;\r\n\tthis.campaignCode = null ;\r\n\tif (this.caravanForm) {\r\n\t\t//TODO: set regoNumber based on step 1 or step 4\r\n\r\n\t\t// vehicleDetails\r\n\t\tif (this.caravanForm.caravanDetails) {\r\n\t\t\tthis.primaryUse = this.caravanForm.caravanDetails.primaryUse;\r\n\t\t\tswitch (this.primaryUse) {\r\n\t\t\t\tcase 'commercial':\r\n\t\t\t\t\tthis.primaryUse += ' - ' + this.caravanForm.caravanDetails.commercialActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n\t\t\t\t\tthis.primaryUse += ' - ' + this.caravanForm.caravanDetails.businessActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( this.caravanForm.getStarted) {\r\n\t\t\tthis.personOrCompany = this.caravanForm.getStarted.personOrCompany;\r\n\t\t\tthis.policyStartDate = this.caravanForm.getStarted.policyStartDate;\r\n\t\t}\r\n\r\n\t\t// Main drivers & additional drivers\r\n\t\tthis.additionalDrivers = [];\r\n\r\n\t\tif (this.caravanForm.driver) {\r\n \t\tvar drivers=this.caravanForm.driver.drivers;\r\n \t\tif(drivers){\r\n\r\n\t\t\t\tthis.mainDriver = drivers[0];\r\n\r\n \t\t\tif(drivers.length>1){\r\n \t\t\tthis.additionalDrivers=drivers.splice(1,drivers.length);\r\n \t\t\t}\r\n \t\t}\r\n\t\t}\r\n\r\n\t\t// drivers\r\n\t\tif (this.mainDriver) {\r\n\t\t\tthis.drivers = [this.mainDriver];\r\n\t\t}\r\n\t\tif (this.additionalDrivers) {\r\n\t\t\tthis.drivers = this.drivers.concat(this.additionalDrivers);\r\n\t\t}\r\n\r\n\t\t// address\r\n\t\tvar aboutYourCaravan = this.caravanForm.aboutYourCaravan ;\r\n\t\tif ( aboutYourCaravan) {\r\n\t\t\tif (aboutYourCaravan.address ) {\r\n\t\t\t\tthis.address = aboutYourCaravan.address\t;\r\n\t\t\t\tthis.postCode = this.address.postalCode;\r\n\t\t\t\tthis.state = this.address.state.replace('AU_', '') ;\r\n\t\t\t}\r\n\t\t\tthis.searchType = aboutYourCaravan.searchType;\r\n\r\n\t\t\tif ( this.searchType == 'manually') {\r\n\t\t\t\tvar year = aboutYourCaravan.year,\r\n\t\t\t\t\tmake = aboutYourCaravan.make,\r\n\t\t\t\t\tmodel = aboutYourCaravan.model,\r\n\t\t\t\t\tbodyType = aboutYourCaravan.bodyType,\r\n\t\t\t\t\tberths = aboutYourCaravan.berths,\r\n\t\t\t\t\tweight = aboutYourCaravan.weight,\r\n\t\t\t\t\tcaravanLength = aboutYourCaravan.manualLength,\r\n\t\t\t\t\tlengthUnits = aboutYourCaravan.manualLengthUnits,\r\n\t\t\t\t\tcustomBuilt = aboutYourCaravan.customBuilt;\r\n\r\n\t\t\t\tthis.yearMakeModel = year + ', ' + make + ', ' + model+ ', ' + bodyType + ', ' + berths + ', ' + weight + ', ' + caravanLength + lengthUnits;\r\n\t\t\t} else if (this.regoDetails) {\r\n\t\t\t\tvar year = this.regoDetails.modelYear,\r\n\t\t\t\t\tmake = this.regoDetails.make,\r\n\t\t\t\t\tmodel = this.regoDetails.model;\r\n\r\n\t\t\t\tthis.yearMakeModel = year + ' ' + make + ' ' + model;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( this.caravanForm.promotionalCode ) {\r\n\t\t\tthis.campaignCode = this.caravanForm.promotionalCode.promotionalCode ;\r\n\t\t}\r\n\r\n\t\tif (this.caravanForm.mainPolicyHolderContact) {\r\n\t\t\tthis.mainPolicyHolder = this.caravanForm.mainPolicyHolderContact;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t// this.quoteId = this._getServiceResponseValueFor('service-name', 'quote.quoteId');\r\n\tthis.quoteId = null ;\r\n\tif ( quoteRequestRepository.getSelectedQuoteCredentials() )\r\n\t\tthis.quoteId = quoteRequestRepository.getSelectedQuoteCredentials().quoteID ;\r\n\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmPolicyHolder = this.mainDriver ? this.mainDriver.person : null;\r\n\tthis.gtmTransactionAffiliation = 'QBE Direct' ;\r\n\tthis.insuranceType = MODULE_INFO.insuranceType ;\r\n\tthis.productCode = MODULE_INFO.productCode ;\r\n\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction CTPModel(MODULE_INFO, userInputRepository, serviceResponseRepository, Util) {\r\n\tvar self = this;\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmTransactionAffiliation = 'payments';\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction HomeQuoteModel(\r\n\tMODULE_INFO,\r\n\tuserInputRepository,\r\n\tserviceResponseRepository,\r\n\tquoteOptions,\r\n\tquoteRequestRepository,\r\n\tUtil,\r\n\t$rootScope\r\n) {\r\n\tvar self = this;\r\n\r\n\tvar selectedQuote = quoteOptions.getSelectedQuoteResult();\r\n\tvar selectedQuoteForPayment = quoteOptions.getSelectedQuoteResultForPayment();\r\n\tvar selectedOffering = quoteOptions.getSelectedOffering();\r\n\r\n\tself.rootScope = $rootScope;\r\n\r\n\tself.maxSumInsured = 2000000;\r\n\t//value will come from quickQuote\r\n\tself.minSumInsured = 0;\r\n\r\n\t/**\r\n\t * Retrieves values from UserInputRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from UserInputRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getUserInputValueFor = function(dotSeperatedFieldPath) {\r\n\t\tvar userInput = userInputRepository.get();\r\n\t\treturn Util.findHierarchyStringInObject(\r\n\t\t\tuserInput,\r\n\t\t\tdotSeperatedFieldPath,\r\n\t\t\t\".\"\r\n\t\t);\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieves values from ServiceResponseRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from ServiceResponseRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getServiceResponseValueFor = function(\r\n\t\tserviceName,\r\n\t\tdotSeperatedFieldPath\r\n\t) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t};\r\n\r\n\t//retunr the home insurance need type : 'building_only'/'contents_only'/'building_and_contents'\r\n\tthis.getHomeNeedType = function() {\r\n\t\tif (\r\n\t\t\tthis.homeForm &&\r\n\t\t\tthis.homeForm.tellUsHowWeCanInsureYou &&\r\n\t\t\tthis.homeForm.tellUsHowWeCanInsureYou.coverNeeds\r\n\t\t) {\r\n\t\t\tvar building =\r\n\t\t\t\tthis.homeForm.tellUsHowWeCanInsureYou.coverNeeds.building ==\r\n\t\t\t\ttrue;\r\n\t\t\tvar content =\r\n\t\t\t\tthis.homeForm.tellUsHowWeCanInsureYou.coverNeeds.contents ==\r\n\t\t\t\ttrue;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (building && content) {\r\n\t\t\treturn \"building_and_contents\";\r\n\t\t} else if (building && !content) {\r\n\t\t\treturn \"building_only\";\r\n\t\t} else if (!building && content) {\r\n\t\t\treturn \"contents_only\";\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\r\n\tthis.getAge = function(dateString) {\r\n\t\tif (dateString) {\r\n\t\t\treturn moment().diff(moment(dateString, \"DD/MM/YYYY\"), \"years\");\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\r\n\tthis.homeHowIsHomeOccupied = function() {\r\n\t\tif (\r\n\t\t\tthis.homeForm &&\r\n\t\t\tthis.homeForm.tellUsAboutTheProperty &&\r\n\t\t\tthis.homeForm.tellUsAboutTheProperty.howIsHomeOccupied\r\n\t\t) {\r\n\t\t\treturn this.homeForm.tellUsAboutTheProperty.howIsHomeOccupied;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\r\n\tthis.showIsBuiltToCycloneStandards = function(cycloneParams) {\r\n\t\tif (cycloneParams[0] == \"19801989\") {\r\n\t\t\tvar cycloneRating = isNaN(cycloneParams[1]) ? 0 : cycloneParams[1];\r\n\t\t\tvar address = this._getServiceResponseValueFor(\"addressSearch\");\r\n\t\t\tif (address && address.enrichment && address.addressLine1) {\r\n\t\t\t\tif (address.enrichment.floodRisk.building) {\r\n\t\t\t\t\tvar cycloneRiskSeverity = parseInt(\r\n\t\t\t\t\t\taddress.enrichment.cycloneRisk.building\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (cycloneRiskSeverity >= cycloneRating) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t/*\r\n\t * Returns the list of avialble offerings based on the user selections\r\n\t */\r\n\tthis.getOfferings = function() {\r\n\t\t// this._getUserInputValueFor('formData.homeForm.tellUsAboutTheProperty.howIsHomeOccupied');\r\n\t\tvar homeOccupancy;\r\n\t\tvar buildingType;\r\n\t\tvar needs;\r\n\r\n\t\tif (this.homeForm && this.homeForm.tellUsAboutTheProperty) {\r\n\t\t\thomeOccupancy = this.homeForm.tellUsAboutTheProperty\r\n\t\t\t\t.howIsHomeOccupied;\r\n\t\t\tbuildingType = this.homeForm.tellUsAboutTheProperty.typeOfBuilding;\r\n\t\t\tneeds = this.homeForm.tellUsHowWeCanInsureYou.coverNeeds;\r\n\t\t} else {\r\n\t\t\tconsole.error(\r\n\t\t\t\t\"Not able to find the data for calculating permutations\"\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tvar offerings = _getOfferings(homeOccupancy, buildingType, needs, true);\r\n\r\n\t\treturn offerings;\r\n\t};\r\n\r\n\t//getOfferings is based on the exisitng portal\r\n\tfunction _getOfferings(\r\n\t\thomeOccupancy,\r\n\t\tbuildingType,\r\n\t\tneeds,\r\n\t\tneedRapidEstimate\r\n\t) {\r\n\t\t//logic from exsting portal\r\n\t\tvar offerings = [];\r\n\t\tif (\r\n\t\t\t(homeOccupancy === \"own_live\" ||\r\n\t\t\t\thomeOccupancy === \"rent_live\" ||\r\n\t\t\t\thomeOccupancy === \"own_holidayhome\") &&\r\n\t\t\t!(\r\n\t\t\t\tbuildingType === \"unit\" ||\r\n\t\t\t\tbuildingType === \"flat\" ||\r\n\t\t\t\tbuildingType === \"villa\" ||\r\n\t\t\t\tbuildingType === \"townhouse\"\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\tofferings.push(\"QPHStandardOffering\");\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push(\"QPHPrestigeOffering\");\r\n\t\t\t}\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === \"own_live\" ||\r\n\t\t\t\thomeOccupancy === \"rent_live\" ||\r\n\t\t\t\thomeOccupancy === \"own_holidayhome\") &&\r\n\t\t\t(buildingType === \"unit\" ||\r\n\t\t\t\tbuildingType === \"flat\" ||\r\n\t\t\t\tbuildingType === \"villa\" ||\r\n\t\t\t\tbuildingType === \"townhouse\") &&\r\n\t\t\tneeds.building\r\n\t\t) {\r\n\t\t\tofferings.push(\"QPHStandardOffering\");\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push(\"QPHPrestigeOffering\");\r\n\t\t\t}\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === \"own_live\" ||\r\n\t\t\t\thomeOccupancy === \"rent_live\" ||\r\n\t\t\t\thomeOccupancy === \"own_holidayhome\") &&\r\n\t\t\t(buildingType === \"unit\" ||\r\n\t\t\t\tbuildingType === \"flat\" ||\r\n\t\t\t\tbuildingType === \"villa\" ||\r\n\t\t\t\tbuildingType === \"townhouse\") &&\r\n\t\t\tneeds.contents\r\n\t\t) {\r\n\t\t\tofferings.push(\"QPHStrataContentsOffering\");\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push(\"QPHPrestigeOffering\");\r\n\t\t\t}\r\n\t\t} else if (\r\n\t\t\thomeOccupancy === \"own_rent_tenants\" ||\r\n\t\t\thomeOccupancy === \"own_rent_tenants_causalbasis\" ||\r\n\t\t\thomeOccupancy === \"property_used_hostel_or_guest\"\r\n\t\t) {\r\n\t\t\tofferings.push(\"QPHLandlordOffering\");\r\n\t\t}\r\n\t\treturn offerings;\r\n\t}\r\n\r\n\tthis.getSelectedOffering = function() {\r\n\t\treturn selectedOffering;\r\n\t};\r\n\r\n\tthis.address = {};\r\n\r\n\tthis.getCycleData = function() {\r\n\t\tif (this.homeForm && this.homeForm.cycleCover) {\r\n\t\t\treturn this.homeForm.cycleCover;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tthis.isByCompany = function() {\r\n\t\tif (this.homeForm && this.homeForm.letsGetStarted) {\r\n\t\t\treturn this.homeForm.letsGetStarted.personOrCompany == \"company\";\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t};\r\n\r\n\tthis.getinsuranceHistoryYear = function(insuranceHeldFor) {\r\n\t\tvar insuranceHeldForMapping = {\r\n\t\t\tnoPreviousInsurance: \"0\",\r\n\t\t\tlessThan1year: \"1\",\r\n\t\t\toneYear: \"1\",\r\n\t\t\ttwoYears: \"2\",\r\n\t\t\tthreeYears: \"3\",\r\n\t\t\tfourOrMoreYears: \"4\"\r\n\t\t};\r\n\t\tif (insuranceHeldForMapping[insuranceHeldFor]) {\r\n\t\t\treturn insuranceHeldForMapping[insuranceHeldFor];\r\n\t\t} else {\r\n\t\t\treturn \"1\";\r\n\t\t}\r\n\t};\r\n\r\n\tthis.isRapidEstimatePanelVisible = function() {\r\n\t\tvar address = this._getServiceResponseValueFor(\"addressSearch\");\r\n\t\tvar display = false;\r\n\t\tif (address && address.enrichment && address.addressLine1) {\r\n\t\t\t//address is available\r\n\t\t\tif (isLowRisk(address.enrichment)) {\r\n\t\t\t\tdisplay = true;\r\n\t\t\t} else {\r\n\t\t\t\t// console.log('--------------------------- no rapid estimate based on enrichment');\r\n\t\t\t\tdisplay = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn display;\r\n\t};\r\n\r\n\tthis.isBuildingFloodSafe = function() {\r\n\t\tvar address = this._getServiceResponseValueFor(\"addressSearch\");\r\n\t\tif (address && address.enrichment && address.addressLine1) {\r\n\t\t\tif (address.enrichment.floodRisk.building) {\r\n\t\t\t\tvar floodRiskSeverity = parseInt(\r\n\t\t\t\t\taddress.enrichment.floodRisk.building\r\n\t\t\t\t);\r\n\t\t\t\tif (floodRiskSeverity > 1) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//safe for 0 and 1\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.isInFloodZone = function() {\r\n\t\tvar address = this._getServiceResponseValueFor(\"addressSearch\");\r\n\t\tif (address && address.enrichment && address.addressLine1) {\r\n\t\t\tvar risk = address.enrichment;\r\n\t\t\t//check flood risk\r\n\t\t\tvar floodRiskSeverity = Math.max(\r\n\t\t\t\tparseInt(risk.floodRisk.building),\r\n\t\t\t\tparseInt(risk.floodRisk.content)\r\n\t\t\t);\r\n\t\t\t// var floodZoneAccuracy = risk.floodRisk.building.substr(2);\r\n\t\t\tif (floodRiskSeverity > 1) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\tthis.isSumInsuredInLowerRange = function(sumInsured) {\r\n\t\treturn (\r\n\t\t\tsumInsured <= self.minSumInsured * 1.75 &&\r\n\t\t\tsumInsured >= self.minSumInsured\r\n\t\t);\r\n\t};\r\n\r\n\tthis.isSumInsuredInUpperRange = function(sumInsured) {\r\n\t\treturn sumInsured > this.cordelInfo.upperBand;\r\n\t};\r\n\r\n\tfunction isLowRisk(risk) {\r\n\t\t//check cyclone risk\r\n\t\tvar cycloneRiskSeverity = Math.max(\r\n\t\t\tparseInt(risk.cycloneRisk.building),\r\n\t\t\tparseInt(risk.cycloneRisk.content)\r\n\t\t);\r\n\t\tif (cycloneRiskSeverity > 1) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t//check flood risk\r\n\t\tvar floodRiskSeverity = Math.max(\r\n\t\t\tparseInt(risk.floodRisk.building),\r\n\t\t\tparseInt(risk.floodRisk.content)\r\n\t\t);\r\n\t\tif (floodRiskSeverity > 59) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar floodZoneAccuracy = risk.floodRisk.building.substr(2);\r\n\t\tif (floodZoneAccuracy == \"A\" || floodZoneAccuracy == \"B\") {\r\n\t\t\t//is in zone\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t//check fire risk\r\n\t\tvar fireRiskSeverity = Math.max(\r\n\t\t\tparseInt(risk.fireRisk.building),\r\n\t\t\tparseInt(risk.fireRisk.content)\r\n\t\t);\r\n\t\tif (fireRiskSeverity > 59) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar fireZoneAccuracy = risk.fireRisk.building.substr(2);\r\n\t\tif (fireZoneAccuracy == \"A\" || fireZoneAccuracy == \"B\") {\r\n\t\t\t//is in zone\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tthis.email = this._getUserInputValueFor(\r\n\t\t\"homeForm.tellUsABitMore.yourEmailAddress\"\r\n\t)\r\n\t\t? this._getUserInputValueFor(\"homeForm.tellUsABitMore.yourEmailAddress\")\r\n\t\t: this._getUserInputValueFor(\"email\");\r\n\r\n\t// home form data\r\n\tthis.homeForm = this._getUserInputValueFor(\"homeForm\");\r\n\r\n\t// cover type\r\n\tthis.selectedQuote = selectedQuote;\r\n\tthis.selectedQuoteForPayment = selectedQuoteForPayment;\r\n\tthis.dwelling = null;\r\n\t// this._getServiceResponseValueFor('quickQuote');\r\n\tif (selectedQuote) {\r\n\t\tthis.annualCoverType = selectedQuote.getAnnual();\r\n\t\tthis.monthlyCoverType = selectedQuote.getMonthly();\r\n\t\t// this.fortnightlyCoverType = selectedQuote.getMonthly();\r\n\r\n\t\tthis.quoteResult = this.selectedQuoteForPayment; // selectedQuote.getQuoteResult();\r\n\t\tif (this.quoteResult) {\r\n\t\t\tthis.cordelInfo = this.quoteResult.cordelInfo;\r\n\t\t\tself.minSumInsured = Math.round(this.cordelInfo.lowerBand * 0.75);\r\n\r\n\t\t\tthis.excess = this.quoteResult.excess;\r\n\t\t\tthis.dwelling = this.quoteResult;\r\n\t\t\tthis.offering = this.quoteResult.offering;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.postCode = null;\r\n\tthis.campaignCode = null;\r\n\r\n\tif (this.homeForm) {\r\n\t\t// address\r\n\t\tvar aboutYourHome = this.homeForm.tellUsAboutTheProperty;\r\n\t\tif (aboutYourHome && aboutYourHome.address) {\r\n\t\t\tthis.address = aboutYourHome.address;\r\n\t\t\tthis.postCode = this.address.postalCode;\r\n\t\t\tthis.state = this.address.state;\r\n\t\t}\r\n\r\n\t\tif (this.homeForm.promotionalCode) {\r\n\t\t\tthis.campaignCode = this.homeForm.promotionalCode.promotionalCode;\r\n\t\t}\r\n\r\n\t\tif (this.homeForm.letsGetStarted) {\r\n\t\t\tthis.policyContactType = this.homeForm.letsGetStarted.personOrCompany;\r\n\t\t\tthis.policyStartDate = this.homeForm.letsGetStarted.startCoverDate;\r\n\r\n\t\t\tif (\r\n\t\t\t\tthis.policyContactType == \"person\" &&\r\n\t\t\t\tthis.homeForm.mainPolicyHolder\r\n\t\t\t)\r\n\t\t\t\tthis.policyContact = this.homeForm.mainPolicyHolder;\r\n\t\t\telse if (\r\n\t\t\t\tthis.policyContactType == \"contact\" &&\r\n\t\t\t\tthis.homeForm.aboutCompanyContact\r\n\t\t\t)\r\n\t\t\t\tthis.policyContact = this.this.homeForm.aboutCompanyContact;\r\n\t\t}\r\n\t}\r\n\r\n\t// this.quoteId = this._getServiceResponseValueFor('service-name', 'quote.quoteId');\r\n\tthis.quoteId = null;\r\n\tif (quoteRequestRepository.getSelectedQuoteCredentials())\r\n\t\tthis.quoteId = quoteRequestRepository.getSelectedQuoteCredentials().quoteID;\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmPolicyHolder = this.policyContact;\r\n\tthis.gtmTransactionAffiliation = \"QBE Direct\";\r\n\tthis.insuranceType = MODULE_INFO.insuranceType;\r\n\tthis.productCode = MODULE_INFO.productCode;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction PaymentsQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, Util) {\r\n\tvar self = this;\r\n\t\r\n\t/** Google Tag Manager data **/\t\r\n\tthis.gtmTransactionAffiliation = 'payments' ;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction QuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util) {\r\n\tvar self = this;\r\n\r\n\tvar selectedQuote = quoteOptions.getSelectedQuoteResult();\r\n\tvar selectedQuoteForPayment = quoteOptions.getSelectedQuoteResultForPayment();\r\n\t/**\r\n\t * Retrieves values from UserInputRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from UserInputRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getUserInputValueFor = function (dotSeperatedFieldPath) {\r\n\t\tvar userInput = userInputRepository.get();\r\n\t\treturn Util.findHierarchyStringInObject(userInput, dotSeperatedFieldPath, '.');\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves values from ServiceResponseRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from ServiceResponseRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getServiceResponseValueFor = function (serviceName, dotSeperatedFieldPath) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates whether at least one driver in the last 4 years, has been charged or convicted of any driving offences\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_licenceRSDC = function () {\r\n\t\tif (this.drivers) {\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_licenceRSDC &&\r\n\t\t\t\t\tdriver._aggregator.markedForDelete !== true) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_chargedOrConvictedOffences = function () {\r\n\t\tif (this.drivers) {\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\tdriver._aggregator.markedForDelete !== true\r\n\t\t\t\t) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_vehicleAccidentsClaims = function () {\r\n\t\tif (this.drivers) {\r\n\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\tdriver._aggregator.markedForDelete !== true) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_tenYears_chargedOrConvictedOffences = function () {\r\n\t\tif (this.drivers) {\r\n\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\tdriver._aggregator.markedForDelete !== true) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.isReplacementAvailable = function () {\r\n\r\n\t\tvar selectedCar = serviceResponseRepository.getLastResponseFrom('regoSearch')\r\n\t\tif (selectedCar && selectedCar.modelYear) {\r\n\t\t\tvar modelAge = new Date().getFullYear() - selectedCar.modelYear;\r\n\t\t\treturn (modelAge <= 2);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tthis.getValidReplacementMonths = function (whenDidYouBuyYear) {\r\n\t\tif (!this.replacementMonths)\r\n\t\t\tthis.replacementMonths = {};\r\n\r\n\t\tif (!this.replacementMonths[whenDidYouBuyYear]) {\r\n\t\t\tif (!whenDidYouBuyYear) {\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\r\n\t\t\tvar monthOptions = moment.months().map(\r\n\t\t\t\tfunction (month, index) {\r\n\t\t\t\t\tvar monthIndex = index + 1;\r\n\t\t\t\t\t//add leading zero\r\n\t\t\t\t\tmonthIndex = (monthIndex > 9) ? ('' + monthIndex) : ('0' + monthIndex);\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\t'label': month,\r\n\t\t\t\t\t\t'value': monthIndex\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\r\n\t\t\t//split month based on year\r\n\t\t\tvar yearsOld = moment().year() - whenDidYouBuyYear;\r\n\t\t\tif (yearsOld == 0) {\r\n\t\t\t\tmonthOptions = monthOptions.splice(0, moment().month() + 1);\r\n\t\t\t} else if (yearsOld > 1) {\r\n\t\t\t\tmonthOptions = monthOptions.splice(moment().month());\r\n\t\t\t}\r\n\t\t\tthis.replacementMonths[whenDidYouBuyYear] = monthOptions;\r\n\t\t}\r\n\r\n\t\treturn this.replacementMonths[whenDidYouBuyYear];\r\n\t}\r\n\r\n\tthis.getValidReplacementYears = function () {\r\n\t\tif (!this.replacementYears) {\r\n\t\t\tvar yearOptions = [];\r\n\t\t\t//get start year by subtracting 2 years\r\n\t\t\tvar startYear = moment().subtract(2, 'years').year();\r\n\t\t\tvar currentYear = moment().year();\r\n\t\t\tfor (var i = startYear; i <= currentYear; i++) {\r\n\t\t\t\tyearOptions.push({\r\n\t\t\t\t\t'label': i,\r\n\t\t\t\t\t'value': i\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tthis.replacementYears = yearOptions;\r\n\t\t}\r\n\r\n\t\treturn this.replacementYears;\r\n\t}\r\n\r\n\tthis.email = this._getUserInputValueFor('vehicleForm.tellUsABitMore.yourEmailAddress') ? this._getUserInputValueFor('vehicleForm.tellUsABitMore.yourEmailAddress') : this._getUserInputValueFor('email');\r\n\r\n\t// vehicle form data\r\n\tthis.vehicleForm = this._getUserInputValueFor('vehicleForm');\r\n\r\n\t// cover type\r\n\tthis.selectedQuote = selectedQuote;\r\n\tthis.selectedQuoteForPayment = selectedQuoteForPayment;\r\n\t// this._getServiceResponseValueFor('quickQuote');\r\n\tif (selectedQuote) {\r\n\t\tthis.annualCoverType = selectedQuote.getAnnual();\r\n\t\tthis.monthlyCoverType = selectedQuote.getMonthly();\r\n\t\t// this.fortnightlyCoverType = selectedQuote.getMonthly();\r\n\r\n\t\tthis.quoteResult = this.selectedQuoteForPayment; // selectedQuote.getQuoteResult();\r\n\t\tif (this.quoteResult) {\r\n\t\t\tthis.coverageOptions = this.quoteResult.coverageOptions;\r\n\t\t\tif (this.coverageOptions) {\r\n\t\t\t\tthis.coverageOptionsToShow = this.coverageOptions.filter(function (op) {\r\n\t\t\t\t\treturn op.required === false;\r\n\t\t\t\t});\r\n\t\t\t\tthis.hasCoverageOptions = this.coverageOptionsToShow.length > 0;\r\n\t\t\t}\r\n\t\t\tthis.excess = this.quoteResult.excess;\r\n\t\t\tthis.namedDriverExcess = findNamedDriverExcess();\r\n\t\t}\r\n\t}\r\n\r\n\t/** excess list to be displayed in the quote panel */\r\n\tthis.displayableExcessList = null;\r\n\r\n\tthis.getDisplayableExcess = function () {\r\n\t\tif (!this.excess)\r\n\t\t\treturn [];\r\n\r\n\t\tif (!this.displayableExcessList) {\r\n\t\t\tvar filterOut = ['voluntaryVehicleExcessOptions', 'voluntaryVehicleExcess', 'standardVehicleExcess'];\r\n\t\t\tthis.displayableExcessList = [];\r\n\r\n\t\t\tfor (var key in this.excess) {\r\n\t\t\t\tif (filterOut.indexOf(key) === -1)\r\n\t\t\t\t\tthis.displayableExcessList.push({\r\n\t\t\t\t\t\tkey: key,\r\n\t\t\t\t\t\texcessValue: this.excess[key]\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.displayableExcessList;\r\n\t}\r\n\r\n\tfunction findNamedDriverExcess() {\r\n\t\tvar namedDriverExcess = [],\r\n\t\t\tqr = selectedQuoteForPayment ? selectedQuoteForPayment.response : null;\r\n\r\n\t\tif (qr && qr.vehicles) {\r\n\t\t\tvar drivers = qr.vehicles[0].drivers;\r\n\t\t\tdrivers.forEach(function (driver) {\r\n\t\t\t\tif (driver.driver &&\r\n\t\t\t\t\tdriver.driver.calculatedExcess &&\r\n\t\t\t\t\tdriver.driver.calculatedExcess > 0) {\r\n\t\t\t\t\tnamedDriverExcess.push({\r\n\t\t\t\t\t\tfirstName: driver.driver.person.firstName,\r\n\t\t\t\t\t\tlastName: driver.driver.person.lastName,\r\n\t\t\t\t\t\texcessValue: driver.driver.calculatedExcess,\r\n\t\t\t\t\t\tdob: driver.driver.person.dateOfBirth\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn namedDriverExcess;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Excluded drivers\r\n\t */\r\n\tvar savedQuoteResult = this._getServiceResponseValueFor('quote');\r\n\tif (savedQuoteResult && savedQuoteResult.vehicles && savedQuoteResult.vehicles[0]) {\r\n\t\t/** excluded driver condition to be correctly diagnosed here */\r\n\t\t// this.excludedDrivers = this.quoteResult.excludedDrivers ;\r\n\t\tvar excludedDrivers = [];\r\n\r\n\t\tsavedQuoteResult.vehicles[0].drivers.forEach(function (driver) {\r\n\t\t\tif (driver.driverUsage == 'excluded')\r\n\t\t\t\texcludedDrivers.push(driver.driver.person);\r\n\t\t})\r\n\t\tthis.excludedDrivers = excludedDrivers;\r\n\t}\r\n\r\n\r\n\tthis.hasExcludedDrivers = function () {\r\n\t\treturn this.excludedDrivers && this.excludedDrivers.length > 0;\r\n\t}\r\n\r\n\tthis.drivers = [];\r\n\tthis.postCode = null;\r\n\tthis.campaignCode = null;\r\n\tif (this.vehicleForm) {\r\n\t\t//TODO: set regoNumber based on step 1 or step 4\r\n\r\n\t\t// vehicleDetails\r\n\t\tif (this.vehicleForm.carDetails) {\r\n\t\t\tthis.carDetailsUsage = this.vehicleForm.carDetails.primaryCarUse;\r\n\t\t\tswitch (this.carDetailsUsage) {\r\n\t\t\t\tcase 'commercial':\r\n\t\t\t\t\tthis.carDetailsUsage += ' - ' + this.vehicleForm.carDetails.commercialActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n\t\t\t\t\tthis.carDetailsUsage += ' - ' + this.vehicleForm.carDetails.businessActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.vehicleForm.getStarted && this.vehicleForm.getStarted.personOrCompany) {\r\n\t\t\tthis.policyStartDate = this.vehicleForm.getStarted.policyStartDate,\r\n\t\t\t\tthis.personOrCompany = this.vehicleForm.getStarted.personOrCompany;\r\n\t\t}\r\n\r\n\t\t// Main drivers & additional drivers\r\n\t\tthis.additionalDrivers = [];\r\n\r\n\t\tif (this.vehicleForm.driver) {\r\n\t\t\tvar drivers = this.vehicleForm.driver.drivers;\r\n\t\t\tif (drivers) {\r\n\r\n\t\t\t\tthis.mainDriver = drivers[0];\r\n\r\n\t\t\t\tif (drivers.length > 1) {\r\n\t\t\t\t\tthis.additionalDrivers = drivers.splice(1, drivers.length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// drivers\r\n\t\tif (this.mainDriver) {\r\n\t\t\tthis.drivers = [this.mainDriver];\r\n\t\t\tthis.noClaimBonus = this.mainDriver.noClaimBonus;\r\n\t\t}\r\n\t\tif (this.additionalDrivers) {\r\n\t\t\tthis.drivers = this.drivers.concat(this.additionalDrivers);\r\n\t\t}\r\n\r\n\t\t// address\r\n\t\tvar aboutYourCar = this.vehicleForm.aboutYourCar;\r\n\t\tif (aboutYourCar && aboutYourCar.address) {\r\n\t\t\tthis.address = aboutYourCar.address;\r\n\t\t\tthis.postCode = this.address.postalCode;\r\n\t\t\tthis.state = this.address.state;\r\n\t\t}\r\n\r\n\t\tif (this.vehicleForm.promotionalCode) {\r\n\t\t\tthis.campaignCode = this.vehicleForm.promotionalCode.promotionalCode;\r\n\t\t}\r\n\r\n\t\t// rego details\r\n\t\tthis.regoDetails = this._getServiceResponseValueFor('regoSearch');\r\n\r\n\t\tif (aboutYourCar && aboutYourCar.regoDetails) {\r\n\t\t\tthis.regoNumber = aboutYourCar.regoDetails.regoNumber;\r\n\t\t} else if (this.vehicleForm.tellUsYourRegoNumber &&\r\n\t\t\tthis.vehicleForm.tellUsYourRegoNumber.regoNumber && !this.vehicleForm.aboutYourCar.retrievedQuoteRego) {\r\n\t\t\tthis.regoNumber = this.vehicleForm.tellUsYourRegoNumber.regoNumber;\r\n\t\t}\r\n\r\n\t\tif (this.regoDetails) {\r\n\t\t\tthis.vehicleOptionalEquipments = this.regoDetails.optionalEquipments;\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\t// this.quoteId = this._getServiceResponseValueFor('service-name', 'quote.quoteId');\r\n\tthis.quoteId = null;\r\n\tif (quoteRequestRepository.getSelectedQuoteCredentials())\r\n\t\tthis.quoteId = quoteRequestRepository.getSelectedQuoteCredentials().quoteID;\r\n\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmPolicyHolder = this.mainDriver ? this.mainDriver.person : null;\r\n\tthis.gtmTransactionAffiliation = 'QBE Direct';\r\n\tthis.insuranceType = MODULE_INFO.insuranceType;\r\n\tthis.productCode = MODULE_INFO.productCode;\r\n}\r\n","function JsonMapper(responseRepository) {\r\n\r\n\t/**\r\n\t * places @value on a @source, in the spot indicated by @valueStringArray.\r\n\t * @mappedValueStarIndices is used for conversion callbacks and @isDefault determines if the value\r\n\t * is to be placed only if no current value exists.\r\n\t */\r\n\tfunction mapValues(source, valueStringArray, value, mappedValueStarIndices, isDefault) {\r\n\t\tvar lastKey = valueStringArray.pop();\r\n\t\tfor (var i = 0 ; i < valueStringArray.length; i++) {\r\n\t\t\tif ( ! source ) return null ;\r\n\r\n\t\t\tvar key = valueStringArray[i], nextKey = valueStringArray[i+1] ;\r\n\r\n\t\t\tif ( key === '*') {\r\n\t\t\t\tfor (var j = 0 ; j < source.length ; j++ ) {\r\n\t\t\t\t\tvar vsa = valueStringArray.slice(i+1, valueStringArray.length) ;\r\n\t\t\t\t\tvsa.push(lastKey);\r\n\t\t\t\t\tvar startIndices = mappedValueStarIndices ? mappedValueStarIndices: [];\r\n\t\t\t\t\tmapValues(source[j], vsa , value, startIndices.concat([j]), isDefault) ;\r\n\t\t\t\t}\r\n\t\t\t} else if (key.indexOf('*[') == 0 && key.indexOf(']') == (key.length - 1)) {\r\n\t\t\t\tvar propetyName = key.substring(2,key.length - 1);\r\n\t\t\t\tfor (var j = 0 ; j < source.length ; j++ ) {\r\n\t\t\t\t\tvar vsa = valueStringArray.slice(i+1, valueStringArray.length) ;\r\n\t\t\t\t\tvsa.push(lastKey);\r\n\t\t\t\t\tvar startIndices = mappedValueStarIndices ? mappedValueStarIndices: [];\r\n\t\t\t\t\t//get propety value and append to startIndices like this [name=value]\r\n\t\t\t\t\tvar propetyVal = source[j][propetyName];\r\n\t\t\t\t\tvar indiceValue = '['+propetyName+'='+propetyVal+']';\r\n\t\t\t\t\tmapValues(source[j], vsa , value, startIndices.concat([j + indiceValue]), isDefault) ;\r\n\t\t\t\t}\r\n\t\t\t} else if ( source[key] === undefined ) {\r\n\t\t\t\tcreateChildProperty(source, key, nextKey);\r\n\t\t\t}\r\n\r\n\t\t\tsource = source[key] ;\r\n\t\t}\r\n\r\n\t\tif ( ! source ) {\r\n\t\t\treturn ;\r\n\t\t}\r\n\r\n\t\tif ( ! (isDefault && ( source[lastKey] !== null && source[lastKey] !== undefined))) {\r\n\t\t\tvar val = isFunction(value) ? value(source[lastKey], mappedValueStarIndices) : value;\r\n\t\t\tsource[lastKey] = val;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction createChildProperty(target, key, nextKey) {\r\n\t\tif ( nextKey === '*' ) {\r\n\t\t\ttarget[key] = [];\r\n\t\t}\r\n\t\telse if ( Number.isNumeric(nextKey)){\r\n\t\t\ttarget[key] = [];\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttarget[key] = {} ;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction fetchValue(value, requestData) {\r\n\t\tif ( isFunction(value) )\r\n\t\t\treturn value() ;\r\n\r\n\t\tif ( typeof(value) !== 'string')\r\n\t\t\treturn value;\r\n\r\n\t\tif ( value.indexOf('=') === -1 )\r\n\t\t\treturn value ;\r\n\r\n\t\tvar valueStringArray = value.substring(1, value.length).split('.');\r\n\t\tvar sourceIdentifier = valueStringArray[0];\r\n\t\tvar source = getSource(sourceIdentifier, requestData);\r\n\r\n\t\tvalueStringArray.shift() ; /** first element in the array is the source identifier */\r\n\t\tfor (var i = 0 ; i < valueStringArray.length; i++) {\r\n\t\t\tif ( ! source ) return null ;\r\n\t\t\tsource = source[valueStringArray[i]] ;\r\n\t\t}\r\n\r\n\t\treturn source;\r\n\t}\r\n\r\n\tfunction getSource(source, requestData) {\r\n\t\tif ( source == '_input' )\r\n\t\t\treturn requestData;\r\n\r\n\t\tsource = source.substring(1, source.length); // remove _\r\n\t\treturn responseRepository.getLastResponseFrom(source);\r\n\t}\r\n\r\n\r\n\tfunction transform(requestData, mapping) {\r\n\t\tvar inflated = requestData ;\r\n\t\tfor (var key in mapping) {\r\n\t\t\tvalue = mapping[key];\r\n\t\t\tmapValues(requestData, key.split('.'), function() {\r\n\t\t\t\treturn fetchValue(value, requestData)\r\n\t\t\t} ) ;\r\n\t\t}\r\n\r\n\t\treturn inflated;\r\n\t}\r\n\r\n\tfunction convert(requestData, mapping) {\r\n\t\tfor (var key in mapping) {\r\n\t\t\tconverterFn = mapping[key];\r\n\t\t\tmapValues(requestData, key.split('.'), converterFn) ;\r\n\t\t}\r\n\r\n\t\treturn requestData;\r\n\t}\r\n\r\n\tfunction setDefaultValues(requestData, mapping) {\r\n\t\tfor (var key in mapping) {\r\n\t\t\tvalue = mapping[key];\r\n\t\t\tmapValues(requestData, key.split('.'), value, null, true) ;\r\n\t\t}\r\n\r\n\t\treturn requestData;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform,\r\n\t\tconvert: convert,\r\n\t\tsetDefault: setDefaultValues\r\n\t}\r\n}\r\n","function MergedQuoteResultModel(Util, coverType) {\r\n\tvar quoteResults = {} ;\r\n\r\n\tfunction addQuoteResult(quote) {\r\n\t\tvar freq = paymentFrequencyMapping[quote.paymentFrequency] ;\r\n\t\tquoteResults[freq] = quote ;\r\n\t}\r\n\r\n\tfunction getQuoteResult(paymentFrequency) {\r\n\t\tpaymentFrequency = paymentFrequencyMapping[paymentFrequency] || paymentFrequency ; \r\n\t\tif ( ! quoteResults[paymentFrequency] )\r\n\t\t\tquoteResults[paymentFrequency] = forgeQuoteResult(paymentFrequency) ;\r\n\r\n\t\treturn quoteResults[paymentFrequency] ;\r\n\t}\r\n\r\n\tvar paymentFrequencyMapping = {\r\n\t\teveryyear : 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\teveryotherweek: 'fortnightly'\r\n\t}\r\n\r\n\tvar premiumConstant = {\r\n\t\tmonthly : 1.07 / 12 ,\r\n\t\tfortnightly : 1.07 / 27.5 ,\r\n\t}\r\n\r\n\tfunction forgeQuoteResult(paymentFrequency) {\r\n\t\tvar qr = Util.deepClone(quoteResults.annual) ;\r\n\t\tqr.paymentFrequency = paymentFrequency ;\r\n\t\tqr.isForgedPremium = true ;\r\n\t\tif ( qr.quoteResult && qr.quoteResult.totalPremium) {\r\n\t\t\tqr.quoteResult.totalPremium = qr.quoteResult.totalPremium * premiumConstant[paymentFrequency] * 12 ;\r\n\t\t\tqr.paymentPlan = qr.paymentPlan || {} ; \r\n\t\t\tqr.paymentPlan.installment= qr.quoteResult.totalPremium * premiumConstant[paymentFrequency]; \r\n\t\t}\r\n\r\n\t\treturn qr;\r\n\t}\r\n\r\n\treturn {\r\n\t\taddQuoteResult: addQuoteResult,\r\n\t\tgetQuoteResult: getQuoteResult,\r\n\t\tgetAnnual: function() {return getQuoteResult('annual')},\r\n\t\tgetMonthly: function() {return getQuoteResult('monthly')},\r\n\t\tgetFortnightly: function() {return getQuoteResult('fortnightly')},\r\n\t}\r\n}\r\n","function PortalServiceWrapper(\r\n\tguideWireService,\r\n\tquoteRequestRepository,\r\n\tserviceResponseRepository,\r\n\tretrieveSavedQuoteResponseTransformer,\r\n\tquoteServiceResponseTransformer,\r\n\tquoteOptions) {\r\n\r\n\tfunction updateQuote(userInput) {\r\n\t\treturn quoteRequestRepository.update(userInput);\r\n\t}\r\n\r\n\tfunction getLastRequest() {\r\n\t\treturn quoteRequestRepository.getLastRequest();\r\n\t}\r\n\r\n\tfunction getLastResponse(serviceName) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t}\r\n\r\n\r\n\tfunction handleSaveQuoteResponse(resp) {\r\n\t\tvar data = resp.data;\r\n\t\tif (data.error) {\r\n\t\t\tconsole.error(data.error);\r\n\t\t\tthrow data.error;\r\n\t\t}\r\n\t\tserviceResponseRepository.update('quote', data);\r\n\t\tquoteRequestRepository.updateQuoteCredentials(resp);\r\n\t\treturn resp;\r\n\t}\r\n\r\n\tfunction saveQuote(paymentOption, params) {\r\n\t\tvar qr = quoteRequestRepository.getSaveQuoteRequest(paymentOption);\r\n\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\tvar qq = guideWireService.saveQuote(qr, credentials, params);\r\n\t\tqq.then(function (resp) {\r\n\t\t\treturn handleSaveQuoteResponse(resp);\r\n\t\t});\r\n\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tvar quickQuoteParams = {\r\n\t\trating: 'boolean',\r\n\t\tcheckUWQuote: 'boolean',\r\n\t\tcheckUWBind: 'boolean',\r\n\t\truleSet: 'string'\r\n\t};\r\n\r\n\tfunction getQuoteParams(rules) {\r\n\t\treturn {\r\n\t\t\trating: rules.price,\r\n\t\t\tcheckUWQuote: rules.quote,\r\n\t\t\tcheckUWBind: rules.purchase,\r\n\t\t\truleSet: rules.ruleSet\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handleQuickQuoteResponse(resp) {\r\n\t\tvar data = resp.data;\r\n\t\tif (data.error) {\r\n\t\t\tconsole.error(data.error);\r\n\t\t\tthrow data.error;\r\n\t\t}\r\n\r\n\t\tquoteResults = quoteServiceResponseTransformer.transform(data);\r\n\t\tserviceResponseRepository.update('quickQuote', quoteResults);\r\n\t\tquoteOptions.setAvailableQuoteResults(quoteResults);\r\n\t\tupdateSelectedCoverTypeIfNoLongerAvailableIn(quoteResults);\r\n\t\treturn resp;\r\n\t}\r\n\r\n\tfunction updateSelectedCoverTypeIfNoLongerAvailableIn(quoteResults) {\r\n\t\tif (!quoteOptions.getSelectedQuoteResult()) {\r\n\t\t\tconsole.log('Cover type is no longer available. Switching to default cover type.');\r\n\t\t\tquoteOptions.setDefaultCoverType();\r\n\t\t\tif (!quoteOptions.getSelectedQuoteResult()) {\r\n\t\t\t\tthrow 'No cover is available';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//type is 'bike' or 'caravan'\r\n\tfunction checkEmbargo(postcode, type) {\r\n\t\treturn guideWireService.checkEmbargo(postcode, type).then(function(resp) {\r\n\t\t\treturn (resp \r\n\t\t\t\t&& resp.data \r\n\t\t\t\t&& resp.data.embargoes \r\n\t\t\t\t&& resp.data.embargoes.length > 0);\r\n\t\t}).catch(function (err) {\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\r\n\tfunction getQuickQuote(permutations, rules, updateSelectedCoverType) {\r\n\t\tvar params = getQuoteParams(rules);\r\n\t\tif (updateSelectedCoverType || !permutations.coverTypes) {\r\n\t\t\tpermutations.coverTypes = [quoteOptions.getSelectedCoverType()];\r\n\t\t}\r\n\t\tvar multiQuoteRequest = quoteRequestRepository.splitQuotes(permutations);\r\n\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\tvar qq = guideWireService.getQuickQuote(multiQuoteRequest, params, credentials);\r\n\t\tqq.then(function (resp) {\r\n\t\t\treturn handleQuickQuoteResponse(resp);\r\n\t\t}).catch(function (err) {\r\n\t\t\treturn err;\r\n\t\t});\r\n\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction triggerGoalSaveQuote() {\t\t\r\n\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\tif (credentials && credentials.quoteID) {\r\n\t\t\tvar marketingAuto = window.marketingAutomations;\r\n\t\t\tvar maCreateQuote = (marketingAuto && marketingAuto.createQuote) ? marketingAuto.createQuote : undefined;\r\n\t\t\tvar request = quoteRequestRepository.getQuoteTriggerRequest();\r\n\t\t\trequest.QuoteId = credentials.quoteID;\r\n\t\t\trequest.QuoteStatus = \"Created\";\r\n\t\t\trequest.GoalId = (maCreateQuote) ? maCreateQuote.GoalId : '';\r\n\t\t\trequest.Source = (maCreateQuote) ? maCreateQuote.Source : '';\r\n\t\t\trequest.ChannelId = (maCreateQuote) ? maCreateQuote.ChannelId : '';\r\n\t\t\trequest.EventId = (maCreateQuote) ? maCreateQuote.EventId : '';\r\n\t\t\tif (request.GoalId && request.EventId) {\t\t\t\t\r\n\t\t\t\tguideWireService.triggerGoal(request);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction triggerGoalCompleteQuote() {\r\n\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\tif (credentials && credentials.quoteID) {\r\n\t\t\tvar marketingAuto = window.marketingAutomations;\r\n\t\t\tvar maCompleteQuote = (marketingAuto && marketingAuto.completeQuote) ? marketingAuto.completeQuote : undefined;\r\n\t\t\tvar request = quoteRequestRepository.getQuoteTriggerRequest();\r\n\t\t\trequest.QuoteId = credentials.quoteID;\r\n\t\t\trequest.QuoteStatus = \"Completed\";\r\n\t\t\trequest.GoalId = (maCompleteQuote) ? maCompleteQuote.GoalId : '';\r\n\t\t\trequest.Source = (maCompleteQuote) ? maCompleteQuote.Source : '';\r\n\t\t\trequest.ChannelId = (maCompleteQuote) ? maCompleteQuote.ChannelId : '';\r\n\t\t\trequest.EventId = (maCompleteQuote) ? maCompleteQuote.EventId : '';\r\n\r\n\t\t\tif (request.GoalId && request.EventId) {\t\t\t\t\r\n\t\t\t\tguideWireService.triggerGoal(request);\r\n\t\t\t}\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tfunction testQuoteDecline(declineQuoteOptions) {\r\n\t\tif (declineQuoteOptions) {\r\n\t\t\tvar params = getQuoteParams(declineQuoteOptions.rules);\r\n\t\t\tdeclineQuoteOptions.permutations.coverTypes = [quoteOptions.getSelectedCoverType()];\r\n\t\t\tvar multiQuoteRequest = quoteRequestRepository.splitQuotes(declineQuoteOptions.permutations);\r\n\t\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\t\tvar qq = guideWireService.getQuickQuote(multiQuoteRequest, params, credentials);\r\n\t\t\treturn qq.then(function (resp) {\r\n\t\t\t\treturn handleDeclineAndReferralResponse(resp);\r\n\t\t\t});\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tfunction handleDeclineAndReferralResponse(resp) {\r\n\t\tvar data = resp.data;\r\n\t\tif (data.error)\r\n\t\t\tthrow data.error;\r\n\r\n\t\tvar quote = data[0];\r\n\t\tif (quote.error)\r\n\t\t\tthrow quote.error;\r\n\r\n\t\tvar declineType = detectDeclineType(quote);\r\n\t\tif (declineType) {\r\n\t\t\tvar declineParams = {\r\n\t\t\t\tdeclineType: declineType,\r\n\t\t\t\tdeclineCodes: []\r\n\t\t\t};\r\n\r\n\t\t\tquote.quoteResult.uwIssues.forEach(function (element) {\r\n\t\t\t\tdeclineParams.declineCodes.push(element.typeCode);\r\n\t\t\t}, this);\r\n\r\n\t\t\tthrow declineParams;\r\n\t\t}\r\n\t\treturn resp;\r\n\t}\r\n\r\n\tfunction sendDeclineMessagesTOGTM(result) {\r\n\t\tvar dataLayer = window.dataLayer = window.dataLayer || [];\r\n\t\tvar trackingData = {\r\n\t\t\tevent: 'decline',\r\n\t\t\tdeclineCode: []\r\n\t\t}\r\n\r\n\t\tresult.uwIssues.forEach(function (element) {\r\n\t\t\ttrackingData.declineCode.push(element.typeCode);\r\n\t\t}, this);\r\n\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction detectDeclineType(quote) {\r\n\t\tif (quote.quoteResult) {\r\n\t\t\tif (quote.quoteResult.errors && quote.quoteResult.errors.messages) {\r\n\t\t\t\tvar message = quote.quoteResult.errors.messages.join('\\n') + '\\n';\r\n\t\t\t\treturn 'error';\r\n\t\t\t} else if (quote.quoteResult.decline && !quote.quoteResult.embargo) {\r\n\t\t\t\tsendDeclineMessagesTOGTM(quote.quoteResult);\r\n\t\t\t\treturn 'decline';\r\n\t\t\t} else if (quote.quoteResult.referral && !quote.quoteResult.embargo) {\r\n\t\t\t\treturn 'referral';\r\n\t\t\t} else if (quote.quoteResult.embargo) {\r\n\t\t\t\treturn 'embargo';\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction retrieveSavedQuote(quoteId, email) {\r\n\t\tvar qq = guideWireService.retrieveSavedQuote(quoteId, email)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tvar data = response.data;\r\n\t\t\t\tserviceResponseRepository.update('quote', data);\r\n\t\t\t\tquoteRequestRepository.updateQuoteCredentials(response);\r\n\t\t\t\treturn retrieveSavedQuoteResponseTransformer.transform(data);\r\n\t\t\t});\r\n\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction refreshAddress(address) {\r\n\t\tvar qq = guideWireService.refreshAddress(address);\r\n\t\tqq.then(function (resp) {\r\n\t\t\tserviceResponseRepository.update('addressSearch', resp.data);\r\n\t\t\treturn resp.data;\r\n\t\t})\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction refreshVehicleDetails(vgiId, effectiveDate) {\r\n\t\tvar qq = guideWireService.refreshVehicleDetails(vgiId, effectiveDate);\r\n\t\tqq.then(function (resp) {\r\n\t\t\tif (resp.data && resp.data.length > 0) {\r\n\t\t\t\tvar searchedData = resp.data[0];\r\n\t\t\t\tif (!searchedData.goodRetailPrice && searchedData.make) {\r\n\t\t\t\t\tsearchedData.goodRetailPrice = \"0\";\r\n\t\t\t\t}\r\n\t\t\t\tserviceResponseRepository.update('regoSearch', searchedData);\r\n\t\t\t\treturn searchedData;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t});\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction refreshCaravanDetails(vgiId, effectiveDate) {\r\n\t\tvar qq = guideWireService.refreshCaravanDetails(vgiId, effectiveDate);\r\n\t\tqq.then(function (resp) {\r\n\t\t\tif (resp.data && resp.data.length > 0) {\r\n\t\t\t\tserviceResponseRepository.update('regoSearch', resp.data[0]);\r\n\t\t\t\treturn resp.data;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t});\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction doesUserExist(email) {\r\n\t\treturn guideWireService.doesUserExist(email);\r\n\t}\r\n\r\n\treturn {\r\n\t\tupdateQuote: updateQuote,\r\n\t\tgetQuickQuote: getQuickQuote,\r\n\t\tsaveQuote: saveQuote,\r\n\t\ttriggerGoalSaveQuote: triggerGoalSaveQuote,\r\n\t\ttriggerGoalCompleteQuote: triggerGoalCompleteQuote,\r\n\t\ttestQuoteDecline: testQuoteDecline,\r\n\t\tgetLastRequest: getLastRequest,\r\n\t\tgetLastResponse: getLastResponse,\r\n\t\tretrieveSavedQuote: retrieveSavedQuote,\r\n\t\trefreshAddress: refreshAddress,\r\n\t\trefreshVehicleDetails: refreshVehicleDetails,\r\n\t\trefreshCaravanDetails: refreshCaravanDetails,\r\n\t\tdoesUserExist: doesUserExist,\r\n\t\tcheckEmbargo: checkEmbargo\r\n\t};\r\n}\r\n","\"use strict\";\r\n\r\nfunction QuoteRequestRepository(Util,\r\n\tstorage,\r\n\tquoteOptions,\r\n\tquoteConfiguration,\r\n\tuserInputRepository,\r\n\tserviceResponseRepository,\r\n\tstructuredRequestTransformer,\r\n\tdefaultValueRequestTransformer,\r\n\tformatConverterTransformer,\r\n\tcleanRequestTransformer,\r\n\tsplitterRequestTransformer,\r\n\tpublicIDTransformer,\r\n\tpolicyHolderHandler,\r\n\tcoverTypeTransformer,\r\n\tcoverTypeResolver,\r\n\tcoverOfferingResolver,\r\n\ttriggerGoalTransformer\r\n) {\r\n\r\n\tvar userInput = null;\r\n\r\n\tvar lastQuoteResponse = null;\r\n\r\n\tfunction getUserInput() {\r\n\t\treturn userInput;\r\n\t}\r\n\r\n\tfunction updateQuoteRequest(input) {\r\n\t\tuserInput = Util.deepClone(input);\r\n\t}\r\n\r\n\tfunction getLastRequest() {\r\n\t\treturn quoteRequest;\r\n\t}\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat('portal:{0}-{1}', moduleName, Util.generateRandomString(15));\r\n\t}\r\n\r\n\tvar moduleNameMapping = {\r\n\t\t\"vehiclesDriver\": 'QPMVehicleDriver',\r\n\t\t\"vehiclesPolicyDriver\": 'QPMPolicyDriver',\r\n\t\t\"vehiclesPerson\": 'person',\r\n\t\t\"vehiclesDriverHistory\": \"QPMDriverHistory\",\r\n\t\t\"caravansDriver\": \"QPCVehicleDriver\",\r\n\t\t\"caravansPolicyDriver\": \"QPCPolicyDriver\",\r\n\t\t\"caravansPerson\": \"Person\",\r\n\t\t\"caravansDriverHistory\": \"QPCDriverHistory\",\r\n\t\t\"motorcyclesDriver\": 'QPYMotorcycleRider',\r\n\t\t\"motorcyclesPolicyDriver\": 'QPYPolicyRider',\r\n\t\t\"motorcyclesPerson\": 'Person',\r\n\t\t\"motorcyclesDriverHistory\": \"QPYRiderHistory\",\r\n\t};\r\n\r\n\t/**\r\n\t * Generates the json for the body of the QuickQuote request, by applying\r\n\t * quote specific transformations (based on the corresponding response received from the service).\r\n\t * @quotePermutations: a list of coverType, paymentFrequency and quoteType permutations to generate the final request for.\r\n\t */\r\n\tfunction splitQuotes(quotePermutations) {\r\n\t\tvar quoteRequest = transformQuickQuoteRequest();\r\n\t\tif (!quotePermutations.offerings)\r\n\t\t\tquotePermutations.offerings = [quoteOptions.getSelectedOffering()];\r\n\r\n\t\tvar quotes = splitterRequestTransformer.transform(quotePermutations, quoteRequest);\r\n\t\treturn quotes;\r\n\t}\r\n\r\n\tfunction getQuoteTriggerRequest() {\r\n\t\tvar quoteRequest = transformQuickQuoteRequest();\r\n\t\tvar request = triggerGoalTransformer.transform(quoteRequest);\r\n\t\treturn request;\r\n\t}\r\n\r\n\tfunction transformQuickQuoteRequest() {\r\n\t\tvar input = Util.deepClone(userInput);\r\n\t\tvar structuredRequest = structuredRequestTransformer.transform(input);\r\n\t\tvar valueSubbedRequest = defaultValueRequestTransformer.transform(structuredRequest, input);\r\n\t\tvar valueReformattedRequest = formatConverterTransformer.transform(valueSubbedRequest);\r\n\t\tvar cleanedRequest = cleanRequestTransformer.transform(valueReformattedRequest);\r\n\t\treturn cleanedRequest;\r\n\t}\r\n\r\n\t/**\r\n\t * Generate the json body of a Full Quote Request. This body is used for both PUT and POST requests\r\n\t * and sent to the guideWire service.\r\n\t */\r\n\tfunction getSaveQuoteRequest(paymentFrequency) {\r\n\t\tvar quoteRequest = transformSaveQuoteRequest();\r\n\t\tvar q = Util.deepClone(quoteRequest);\r\n\t\tq = Object.extend(q, {\r\n\t\t\tquoteType: 'Full',\r\n\t\t\tpaymentFrequency: paymentFrequency\r\n\t\t});\r\n\r\n\t\t//added firstAnchorDate and firstDayOfMonth for monthly and fortnightly payments\r\n\t\tif (quoteRequest.paymentForm && quoteRequest.paymentForm.paymentDetails && quoteRequest.paymentForm.paymentDetails.paymentStartDate) {\r\n\t\t\tvar dateString = quoteRequest.paymentForm.paymentDetails.paymentStartDate;\r\n\t\t\tq.firstAnchorDate = moment(dateString, 'DD/MM/YYYY').toISOString();\r\n\t\t\tq.firstDayOfMonth = moment(dateString, 'DD/MM/YYYY').format('D');\r\n\t\t}\r\n\t\tvar coverType = quoteOptions.getSelectedCoverType();\r\n\t\tvar offering = quoteOptions.getSelectedOffering(),\r\n\t\t\tofferingDescriptor = offering ? offering.descriptor : null;;\r\n\r\n\t\tq = coverTypeTransformer.transform(q, coverType.descriptor, offeringDescriptor);\r\n\r\n\t\tvar cred = getSelectedQuoteCredentials();\r\n\t\tif (cred) {\r\n\t\t\tq.quoteID = cred.quoteID;\r\n\t\t\tq.secret = cred.secret;\r\n\t\t}\r\n\r\n\t\tvar lastResponse = findMatchingQuoteResponse(coverType, offering);\r\n\r\n\t\t//check from last response if added driver has excluded usage\r\n\t\tif (lastResponse !== null) {\r\n\t\t\tvar productType = null;\r\n\r\n\t\t\tif (angular.isObject(lastResponse.vehicles)) productType = 'vehicles';\r\n\r\n\t\t\tif (angular.isObject(lastResponse.caravans)) productType = 'caravans';\r\n\r\n\t\t\t//applicable for motor products\r\n\t\t\tif (productType != null) {\r\n\t\t\t\tangular.forEach(lastResponse[productType][0].drivers, function (driver, index) {\r\n\t\t\t\t\tif (driver.driverUsage === 'excluded') {\r\n\t\t\t\t\t\tq[productType][0].drivers[index].driverUsage = 'excluded';\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tq = publicIDTransformer.transform(q, lastResponse);\r\n\r\n\t\tvar policyHolderhandledRequest = policyHolderHandler.handle(q, userInput);\r\n\r\n\t\treturn policyHolderhandledRequest;\r\n\t}\r\n\r\n\tfunction findMatchingQuoteResponse(coverType, offering) {\r\n\t\tvar lastQuote = serviceResponseRepository.getLastResponseFrom('quote');\r\n\t\tvar lastQuickQuote = serviceResponseRepository.getLastResponseFrom('quickQuote');\r\n\t\tif (lastQuote &&\r\n\t\t\tcoverTypeResolver.resolve(lastQuote) == coverType.descriptor &&\r\n\t\t\t(!coverOfferingResolver.resolve(lastQuote) || coverOfferingResolver.resolve(lastQuote) == offering.descriptor)\r\n\t\t) {\r\n\r\n\t\t\tif (angular.isObject(lastQuote.vehicles) && lastQuickQuote.length > 0) {\r\n\t\t\t\tlastQuote = addDriverFromQuickQuote(lastQuote, 'vehicles');\r\n\t\t\t}\r\n\r\n\t\t\tif (angular.isObject(lastQuote.caravans) && lastQuickQuote.length > 0) {\r\n\t\t\t\tlastQuote = addDriverFromQuickQuote(lastQuote, 'caravans');\r\n\t\t\t}\r\n\r\n\t\t\tif (angular.isObject(lastQuote.motorcycles) && lastQuickQuote.length > 0) {\r\n\t\t\t\tlastQuote = addDriverFromQuickQuote(lastQuote, 'motorcycles');\r\n\t\t\t}\r\n\r\n\t\t\treturn lastQuote;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction transformSaveQuoteRequest() {\r\n\t\tvar input = Util.deepClone(userInput);\r\n\t\tstructuredRequestTransformer.transform(input);\r\n\t\tvar valueSubbedRequest = defaultValueRequestTransformer.transform(null, input);\r\n\t\tvar valueReformattedRequest = formatConverterTransformer.transform(valueSubbedRequest);\r\n\t\tvar cleanedRequest = cleanRequestTransformer.transform(valueReformattedRequest);\r\n\t\treturn cleanedRequest;\r\n\t}\r\n\r\n\tfunction getCoverTypeSelector(quoteResponse) {\r\n\t\tif (!quoteResponse)\r\n\t\t\treturn null;\r\n\r\n\t\tvar coverTypeSelector = coverTypeResolver.resolve(quoteResponse);\r\n\t\tvar offering = coverOfferingResolver.resolve(quoteResponse);\r\n\t\tif (offering)\r\n\t\t\tcoverTypeSelector += '_' + offering;\r\n\r\n\t\treturn coverTypeSelector;\r\n\t}\r\n\r\n\t/**\r\n\t * @fullQuoteResponse : full HTTP response including body and headers\r\n\t */\r\n\tfunction updateQuoteCredentials(fullQuoteResponse) {\r\n\t\tvar respBody = fullQuoteResponse.data;\r\n\t\tvar headers = fullQuoteResponse.headers;\r\n\t\tvar quoteRequestCredentials = {};\r\n\t\t/** remove all quote credentials after quote type has changed\r\n\t\t\t\t\t\t\t\t\t\t\t\t to not confuse guidewire :) */\r\n\r\n\t\tvar coverTypeSelector = getCoverTypeSelector(respBody);\r\n\t\tif (coverTypeSelector) {\r\n\t\t\tquoteRequestCredentials[coverTypeSelector] = {\r\n\t\t\t\tquoteID: respBody.quoteID,\r\n\t\t\t\tsecret: respBody.secret\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar eyUserToken = headers('ey-user-token');\r\n\t\tstorage.setItem('eyUserToken', eyUserToken);\r\n\t\tstorage.setItem('quoteRequestCredentials', quoteRequestCredentials);\r\n\t\tif (respBody.productCode == \"QPMMotorVehicle\")\r\n\t\t\tstorage.setItem('selectedCoverType', quoteConfiguration.allCoverTypesByKey[coverTypeSelector]);\r\n\t}\r\n\r\n\tfunction getSelectedQuoteCredentials() {\r\n\t\tvar selectedCoverType = quoteOptions.getSelectedCoverType();\r\n\t\tvar quoteRequestCredentials = storage.getItem('quoteRequestCredentials');\r\n\t\tvar creds;\r\n\t\tif (selectedCoverType) {\r\n\t\t\tvar coverTypeSelector = quoteOptions.getCoverTypeSelector();\r\n\t\t\tcreds = quoteRequestCredentials[coverTypeSelector];\r\n\t\t\tvar eyUserToken = storage.getItem('eyUserToken');\r\n\t\t\tif (creds && eyUserToken)\r\n\t\t\t\tcreds.eyUserToken = eyUserToken;\r\n\t\t}\r\n\r\n\t\treturn creds;\r\n\t}\r\n\r\n\tfunction clearQuoteCredentials() {\r\n\t\tstorage.setItem('eyUserToken', null);\r\n\t\tstorage.setItem('quoteRequestCredentials', {});\r\n\t}\r\n\r\n\t/*\r\n\t * Function - adds new driver from quick quote before submitting to public id transformer\r\n\t * Params - quote, product type\r\n\t * Return - quote\r\n\t */\r\n\tfunction addDriverFromQuickQuote(lastQuote, productType) {\r\n\t\tvar driverType = productType == 'motorcycles' ? 'riders' : 'drivers';\r\n\t\tvar lastQuick = serviceResponseRepository.getLastResponseFrom('quickQuote');\r\n\t\tvar quickQuoteLength = lastQuick[0].response[productType][0][driverType].length;\r\n\t\tvar quoteLength = lastQuote[productType][0][driverType].length;\r\n\t\tvar lengthDiff = quickQuoteLength - quoteLength;\r\n\t\tvar quickQuoteItems = lastQuick[0].response[productType][0][driverType];\r\n\t\tvar quoteItems = lastQuote[productType][0][driverType];\r\n\r\n\t\tif (lengthDiff > 0) {\r\n\t\t\tvar startIndex = quickQuoteLength - lengthDiff;\r\n\t\t\tvar driver = productType + 'Driver';\r\n\t\t\tvar policyDriver = productType + 'PolicyDriver';\r\n\t\t\tvar person = productType + 'Person';\r\n\t\t\tvar driverHistory = productType + 'DriverHistory';\r\n\t\t\tvar driverType = productType == 'motorcycles' ? 'rider' : 'driver';\r\n\t\t\tvar historyType = productType == 'motorcycles' ? 'riderHistory' : 'driverHistory';\r\n\r\n\t\t\tfor (var i = startIndex; i < quickQuoteLength; i++) {\r\n\t\t\t\tquickQuoteItems[i].publicID = forgePublicId(moduleNameMapping[driver]);\r\n\t\t\t\tquickQuoteItems[i][driverType].publicID = forgePublicId(moduleNameMapping[policyDriver]);\r\n\t\t\t\tquickQuoteItems[i][driverType].person.publicID = forgePublicId(moduleNameMapping[person]);\r\n\r\n\t\t\t\tif (angular.isDefined(quickQuoteItems[i][driverType][historyType])) {\r\n\t\t\t\t\tvar driverHistory = quickQuoteItems[i][driverType][historyType];\r\n\r\n\t\t\t\t\tangular.forEach(driverHistory, function (history, index) {\r\n\t\t\t\t\t\thistory.publicID = forgePublicId(moduleNameMapping[driverHistory]);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tquoteItems.push(quickQuoteItems[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn lastQuote;\r\n\t}\r\n\r\n\treturn {\r\n\t\tupdate: updateQuoteRequest,\r\n\t\tgetLastRequest: getLastRequest,\r\n\t\tsplitQuotes: splitQuotes,\r\n\t\tgetQuoteTriggerRequest: getQuoteTriggerRequest,\r\n\t\tgetSaveQuoteRequest: getSaveQuoteRequest,\r\n\t\tupdateQuoteCredentials: updateQuoteCredentials,\r\n\t\tgetSelectedQuoteCredentials: getSelectedQuoteCredentials,\r\n\t\tclearQuoteCredentials: clearQuoteCredentials,\r\n\t\tgetUserInput: getUserInput,\r\n\t};\r\n}\r\n","function QuoteResultModelBuilder(Util) {\r\n\tvar quoteResultsByType= {} ;\r\n\r\n\tfunction addQuoteResult(quoteResult) {\r\n\t\tvar quoteCoverIndicator = quoteResult.coverType;\r\n\t\tif ( quoteResult.offering )\r\n\t\t\tquoteCoverIndicator += '_' + quoteResult.offering ; \r\n\r\n\t\tif ( ! quoteResultsByType[quoteCoverIndicator] ) \r\n\t\t\tquoteResultsByType[quoteCoverIndicator] = new MergedQuoteResultModel(Util, quoteCoverIndicator);\r\n\r\n\t\tquoteResultsByType[quoteCoverIndicator].addQuoteResult(quoteResult) ; \r\n\t}\r\n\r\n\tfunction getMergedQuoteResults(quoteResults) {\r\n\t\treturn quoteResultsByType;\r\n\t}\r\n\r\n\tfunction clear() {\r\n\t\tquoteResultsByType = {}; \r\n\t}\r\n\r\n\treturn {\r\n\t\tclear: clear,\r\n\t\taddQuoteResult: addQuoteResult,\r\n\t\tgetMergedQuoteResults: getMergedQuoteResults,\r\n\t}\r\n}\r\n","function QuoteServiceResponseTransformer(quoteResultModelBuilder, serviceResponseRepository, quoteResultModelFactory) {\r\n\r\n\tfunction transform(quoteResponses) {\r\n\t\tvar quoteResults = [] ;\r\n\t\tquoteResponses.forEach(function(response) {\r\n\t\t\t// if ( response.quoteResult && ! response.quoteResult.errors )\r\n\t\t\t// response.productCode\r\n\t\t\t// quoteResults.push(new QuoteResultModel(response));\r\n\t\t\tquoteResults.push(quoteResultModelFactory.newQuoteResultModel(response));\r\n\t\t});\r\n\r\n\t\tvar oldResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\tvar updatedQuoteResults = updateQuoteResults(quoteResults , oldResults) ;\r\n\t\tvar filteredQuoteResults = filterQuoteResults(updatedQuoteResults);\r\n\t\treturn filteredQuoteResults;\r\n\t}\r\n\r\n\tfunction updateQuoteResults(currentResults, oldResults) {\r\n\t\tif ( ! oldResults || oldResults.length == 0 )\r\n\t\t\treturn currentResults ;\r\n\r\n\t\tcurrentResults.forEach(function(cqr) {\r\n\t\t\tif ( cqr.isCoverAvailable ) {\r\n\t\t\t\taddOrUpdateQuoteResult(oldResults, cqr)\r\n\t\t\t} else {\r\n\t\t\t\toldResults = removeAllCoverTypeMatches(oldResults, cqr) ;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn oldResults ;\r\n\t}\r\n\r\n\tfunction addOrUpdateQuoteResult(oldResults, quoteResult) {\r\n\t\tvar matchingOldResult = findCompleteMatch(oldResults, quoteResult) ;\r\n\t\tif ( matchingOldResult ) {\r\n\t\t\tvar oldResultIndex = oldResults.indexOf(matchingOldResult) ;\r\n\t\t\toldResults[oldResultIndex] = quoteResult ;\r\n\t\t} else {\r\n\t\t\toldResults.push(quoteResult);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction removeAllCoverTypeMatches(oldResults, quoteResult) {\r\n\t\tvar partialMatches = findCoverTypeMatches(oldResults, quoteResult) ;\r\n\t\tif ( partialMatches ) {\r\n\t\t\toldResults = oldResults.filter(function(qr) {\r\n\t\t\t\treturn partialMatches.indexOf(qr) === -1 ;\r\n\t\t\t}) ;\r\n\t\t}\r\n\t\treturn oldResults;\r\n\t}\r\n\r\n\tfunction findCoverTypeMatches(oldResults, quoteResult) {\r\n\t\tvar matchingQuoteResponses = [] ;\r\n\t\toldResults.forEach(function(qr) {\r\n\t\t\tif ( qr.coverType == quoteResult.coverType\r\n\t\t\t&& (!qr.offering || qr.offering == quoteResult.offering) ){\r\n\t\t\t\tmatchingQuoteResponses.push(qr);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn matchingQuoteResponses;\r\n\t}\r\n\r\n\tfunction findCompleteMatch(oldResults, quoteResult) {\r\n\t\tvar matchingQuoteResponse = null ;\r\n\t\toldResults.some(function(qr) {\r\n\t\t\tif ( qr.coverType == quoteResult.coverType\r\n\t\t\t\t&& qr.paymentFrequency == quoteResult.paymentFrequency \r\n\t\t\t\t&& (!qr.offering || qr.offering == quoteResult.offering)\r\n\t\t\t\t){\r\n\t\t\t\tmatchingQuoteResponse = qr;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn matchingQuoteResponse;\r\n\t}\r\n\r\n\tfunction filterQuoteResults(quoteResults) {\r\n\t\tquoteResults = quoteResults.filter(function(qr) {\r\n\t\t\treturn qr.isCoverAvailable;\r\n\t\t})\r\n\r\n\t\treturn quoteResults ;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform,\r\n\t}\r\n}\r\n","\"use strict\";\r\n\r\nfunction ServiceResponseRepository(storage) {\r\n\tfunction update(serviceName, response) {\r\n\t\t// var lastResponse = serviceResponses[serviceName] || {} ;\r\n\t\tvar serviceResponses = storage.getItem('service-response') || {} ; \r\n\t\tserviceResponses[serviceName] = response;\r\n\t\tstorage.setItem('service-response', serviceResponses) ;\r\n\t}\r\n\r\n\tfunction getLastResponseFrom(serviceName) {\r\n\t\tvar serviceResponses = storage.getItem('service-response') ;\r\n\t\treturn serviceResponses[serviceName] || null;\r\n\t}\r\n\r\n\treturn {\r\n\t\tupdate: update,\r\n\t\tgetLastResponseFrom: getLastResponseFrom\r\n\t};\r\n}\r\n","'use strict' ;\r\n\r\nfunction SplitterRequestTransformer(Util, serviceResponseRepository, jsonMapper, publicIDTransformer, coverTypeTransformer) {\r\n\r\n\tfunction getQuoteResponseValue(qouteResponse, pathString) {\r\n\t\treturn Util.findHierarchyStringInObject(qouteResponse, pathString, '.') ;\r\n\t}\r\n\r\n\tfunction transform(quotePermutations, quoteRequest) {\r\n\t\tvar quoteResponses = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\tvar transformedRequest = null ;\r\n\t\tif ( quoteResponses )\r\n\t\t\ttransformedRequest = transformExistingQuote(quotePermutations, quoteResponses, quoteRequest) ;\r\n\t\telse\r\n\t\t\ttransformedRequest = transformNewQuote(quotePermutations, quoteRequest) ;\r\n\r\n\t\treturn transformedRequest ;\r\n\t}\r\n\r\n\tfunction transformExistingQuote(quotePermutations, quoteResponses, quoteRequest) {\r\n\t\tvar quotes = Util.generatePermutationsArray(quotePermutations.coverTypes, quotePermutations.paymentFrequencies).map(function(permutation, index) {\r\n\t\t\tvar quote = Object.extend(permutation, quoteRequest);\r\n\r\n\t\t\tvar coverType = permutation.option1;\r\n\t\t\tvar paymentFrequency = permutation.option2 ; \r\n\t\t\tdelete quote.option1; delete quote.option2 ; \r\n\t\t\t\r\n\t\t\tvar quoteType = quotePermutations.quoteType ;\r\n\t\t\tvar q = Util.deepClone(quote) ;\r\n\t\t\tq = Object.extend(q,{\r\n\t\t\t\tquoteType: quoteType,\r\n\t\t\t\tpaymentFrequency: paymentFrequency,\r\n\t\t\t}) ;\r\n\r\n\t\t\tvar quoteResponseBody = null ;\r\n\t\t\t// var matchingQuoteResponse = findMatchingQuoteResponse(quoteResponses, coverType) ;\r\n\t\t\t// if ( matchingQuoteResponse )\r\n\t\t\t// \tquoteResponseBody = matchingQuoteResponse.response;\r\n\t\t\tq = publicIDTransformer.transform(q, null) ;\r\n\t\t\tq = coverTypeTransformer.transform(q, coverType.descriptor);\r\n\t\t\treturn q ;\r\n\t\t}) ;\r\n\r\n\t\treturn quotes.filter(function(quote) { return quote !== null }) ;\r\n\t}\r\n\r\n\tfunction findMatchingQuoteResponse(quoteResponses, coverType){\r\n\t\tif ( ! quoteResponses )\r\n\t\t\treturn;\r\n\r\n\t\tvar matchingResponse = null ;\r\n\t\tquoteResponses.some(function(qr) {\r\n\t\t\tif (qr.coverType == coverType.descriptor) {\r\n\t\t\t\tmatchingResponse = qr ;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matchingResponse;\r\n\t}\r\n\r\n\tfunction transformNewQuote(quotePermutations, quoteRequest) {\r\n\t\tvar nr = quotePermutations.coverTypes.length * quotePermutations.paymentFrequencies.length;\r\n\t\tvar quotes = Util.arrayFill(nr, quoteRequest).map(function(quote, index) {\r\n\t\t\tvar coverType = quotePermutations.coverTypes[index % quotePermutations.coverTypes.length];\r\n\t\t\tvar paymentFrequency = quotePermutations.paymentFrequencies[index % quotePermutations.paymentFrequencies.length];\r\n\t\t\tvar quoteType = quotePermutations.quoteType ;\r\n\t\t\tvar q = Util.deepClone(quote) ;\r\n\t\t\tq = Object.extend(q,{\r\n\t\t\t\tquoteType: quoteType,\r\n\t\t\t\tpaymentFrequency: paymentFrequency,\r\n\t\t\t}) ;\r\n\r\n\t\t\tq = coverTypeTransformer.transform(q, coverType.descriptor);\r\n\t\t\tq = publicIDTransformer.transform(q) ;\r\n\t\t\treturn q ;\r\n\t\t}) ;\r\n\r\n\t\treturn quotes ;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function BikeCleanRequestTransformer(Util, jsonMapper) {\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tdelete intermediateRequest.bikeForm;\r\n\r\n\t\t\tvar bike = intermediateRequest.motorcycles[0];\r\n\t\t\tvar policyHolders = intermediateRequest.policyHolders;\r\n\r\n\t\t\tdelete bike.motorcycleInfo.description;\r\n\t\t\tdelete bike.motorcycleInfo.goodRetailPrice;\r\n\t\t\tdelete bike.motorcycleInfo.bikeType;\r\n\t\t\tdelete bike.motorcycleInfo.ratingGrade;\r\n\t\t\tdelete bike.motorcycleInfo.vehicleKey;\r\n\t\t\tdelete bike.motorcycleInfo.enrichment;\r\n\t\t\tdelete bike.accountLocation.enrichment;\r\n\t\t\tdelete bike.totalAccessoriesPrice;\r\n\t\t\tdelete bike.totalModificationsPrice;\r\n\t\t\tdelete bike.youngestRiderDateOfBirth;\r\n\r\n\t\t\tif ( bike.riders ) {\r\n\t\t\t\tbike.riders.forEach(function(policyRider, index) {\r\n\t\t\t\t\tdelete policyRider.rider._HTMLID;\r\n\t\t\t\t\tdelete policyRider.rider._aggregator;\r\n\t\t\t\t\tdelete policyRider.rider.threeYears_accidentsClaims;\r\n\t\t\t\t\tdelete policyRider.rider.threeYears_accidentsClaimsDetails;\r\n\t\t\t\t\tdelete policyRider.rider.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\t\t\t\t\tdelete policyRider.rider.threeYears_restrictedSuspendedDisqualifiedCancelledDetails;\r\n\t\t\t\t\tdelete policyRider.rider.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tdelete policyRider.rider.fiveYears_chargedOrConvictedDetails;\r\n\t\t\t\t\tdelete policyRider.rider.person.noClaimBonus;\r\n\t\t\t\t\tdelete policyRider.rider.person.title;\r\n\t\t\t\t\tdelete policyRider.riders;\r\n\t\t\t\t\tdelete policyRider.rider.isMemberOfClub;\r\n\t\t\t\t\tdelete policyRider.rider.isTheMainRider;\r\n\t\t\t\t\tdelete policyRider.rider.licensedToRide;\r\n\t\t\t\t\tdelete policyRider.rider.motorcycleClub;\r\n\t\t\t\t\tdelete policyRider.rider.yearsHeld;\r\n\t\t\t\t\tdelete policyRider.rider.previousInsurer;\r\n\t\t\t\t\tdelete policyRider.rider.primaryPhoneNumber;\r\n\t\t\t\t\tdelete policyRider.rider.person.riders;\r\n\t\t\t\t\tdelete policyRider.rider.person.address;\r\n\t\t\t\t\tdelete policyRider.rider.person.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tdelete policyRider.rider.person.isMainRiderMainPolicyHolder;\r\n\t\t\t\t\tdelete policyRider.rider.person.postalOption;\r\n\t\t\t\t\tdelete policyRider.rider.person.threeYears_accidentsClaims;\r\n\t\t\t\t\tdelete policyRider.rider.person.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\r\n\t\t\t\t\tif (index > 0) {\r\n\t\t\t\t\t\tdelete policyRider.rider.person.hasClaim;\r\n\t\t\t\t\t\tdelete policyRider.rider.person.hasConviction;\r\n\t\t\t\t\t\tdelete policyRider.rider.currentInsurer;\r\n\t\t\t\t\t\tdelete policyRider.rider.noClaimBonus;\r\n\t\t\t\t\t\t// delete policyRider.rider.person.primaryAddress.addressType;\r\n\r\n\t\t\t\t\t\t// test\r\n\t\t\t\t\t\tdelete policyRider.rider.relationWithMainRider;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\t//\r\n\r\n\t\t\tpolicyHolders.forEach(function(policyHolder) {\r\n\t\t\t\tif ( policyHolder.contact ) {\r\n\t\t\t\t\tdelete policyHolder.contact._HTMLID;\r\n\t\t\t\t\tdelete policyHolder.contact.$$hashKey;\r\n\t\t\t\t\tdelete policyHolder.contact._aggregator;\r\n\r\n\t\t\t\t\tdelete policyHolder.contact.anyInfringements;\r\n\t\t\t\t\tdelete policyHolder.contact.anyLostLicences;\r\n\t\t\t\t\tdelete policyHolder.contact.riders;\r\n\t\t\t\t\tdelete policyHolder.contact.MaxNoClaimBonus;\r\n\t\t\t\t\tdelete policyHolder.contact.noClaimBonus;\r\n\t\t\t\t\tdelete policyHolder.contact.numberOfOtherRiders;\r\n\t\t\t\t\tdelete policyHolder.contact.provisionalLicence;\r\n\t\t\t\t\tdelete policyHolder.contact.title;\r\n\t\t\t\t\tdelete policyHolder.contact.youngestRider;\r\n\t\t\t\t\tdelete policyHolder.contact.youngestRiderDob;\r\n\t\t\t\t\tdelete policyHolder.contact.youngestRiderGender;\r\n\t\t\t\t\tdelete policyHolder.contact.address;\r\n\t\t\t\t\tdelete policyHolder.contact.postalOption;\r\n\t\t\t\t\tdelete policyHolder.contact.primaryPhoneNumber;\r\n\t\t\t\t\tdelete policyHolder.contact.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tdelete policyHolder.contact.fiveYears_chargedOrConvictedDetails;\r\n\t\t\t\t\tdelete policyHolder.contact.isMainRiderMainPolicyHolder;\r\n\t\t\t\t\tdelete policyHolder.contact.threeYears_accidentsClaims;\r\n\t\t\t\t\tdelete policyHolder.contact.threeYears_accidentsClaimsDetails;\r\n\t\t\t\t\tdelete policyHolder.contact.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\t\t\t\t\tdelete policyHolder.contact.threeYears_restrictedSuspendedDisqualifiedCancelledDetails;\r\n\t\t\t\t\tdelete policyHolder.contact.primaryAddress.enrichment;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!!policyHolder.contact.contactType && policyHolder.contact.contactType === 'person') {\r\n\t\t\t\t\tdelete policyHolder.contact.authorisedPersons;\r\n\t\t\t\t}\r\n\t\t\t\tif (!!policyHolder.contact.authorisedPersons) {\r\n\t\t\t\t\tdelete policyHolder.contact.dateOfBirth;\r\n\t\t\t\t\tdelete policyHolder.contact.firstName;\r\n\t\t\t\t\tdelete policyHolder.contact.lastName;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tif ( intermediateRequest.motorcycles[0].sumInsuredType !== 'agreed' ) {\r\n\t\t\t\tdelete intermediateRequest.motorcycles[0].sumInsuredAmount;\r\n\t\t\t}\r\n\r\n\t\t\tif ( ! intermediateRequest.email )\r\n\t\t\t\tdelete intermediateRequest.email ;\r\n\r\n\t\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\t\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function BikeCoverTypeTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(intermediateRequest, coverTypeDescriptor) {\r\n\r\n\t\tintermediateRequest.motorcycles[0].coverType = coverTypeDescriptor;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function BikeDefaultValueRequestTransformer(Util, jsonMapper, userInputRepository) {\r\n\r\n\tfunction formatDateAndTimeTheGuidewireWay(date, time) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\tvar timeFormatted = '4:00PM' ;\r\n\t\tif ( time )\r\n\t\t\ttimeFormatted = moment().tz(\"Australia/Sydney\").format('h:mma');\r\n\t\treturn Util.stringFormat(format, moment().tz(\"Australia/Sydney\").format('Do MMM YYYY') , timeFormatted) ;\r\n\t}\r\n\r\n\tvar staticValuesMapping = {\r\n\t\tquoteType:'Full',\r\n\t\tproductCode : 'QPYPersonalMotorcycle',\r\n\t\tpaymentFrequency: 'everyyear',\r\n\t\t// \"anyClaimsQuestion\": \"unknown\",\r\n\t\t// \"anyLostLicencesQuestion\": \"unknown\",\r\n\t\t// \"anyConvictionsQuestion\": \"unknown\",\r\n\t\t// \"anyInfringementsQuestion\": \"no\",\r\n\r\n\t\t\"motorcycles.0.bikeUsage\" : \"bike\",\r\n\t\t\"motorcycles.0.damage\": \"no_damage\",\r\n\t\t\"motorcycles.0.isMemberOfClub\": false,\r\n\t\t// is the main rider the registered owner of the bike\r\n\t\t\"motorcycles.0.isTheMainRider\": true,\r\n\t\t\"motorcycles.0.motorCycleUsage\": \"private\",\r\n\t\t\"motorcycles.0.isFinanced\": false,\r\n\t\t\"motorcycles.0.isBikeModified\": false,\r\n\t\t\"motorcycles.0.businessUsage\": \"courier\",\r\n\t\t\"motorcycles.0.garageType\": \"communal_garage\",\r\n\t\t\"motorcycles.0.motorcycleClub\": \"other\",\r\n\t\t\"motorcycles.0.sumInsuredType\": \"market\",\r\n\t\t\"motorcycles.0.motorCycleKilometers\": \"4001_8000km\",\r\n\t\t\"motorcycles.0.isAccessoriesAdded\": false,\r\n\t\t\"motorcycles.0.coverType\": \"comprehensive\",\r\n\t\t\"motorcycles.0.accessoriesPrice\": 0,\r\n\t\t\"motorcycles.0.totalModificationsPrice\": 0,\r\n\t\t\"motorcycles.0.totalAccessoriesPrice\": 0,\r\n\t\t\"motorcycles.0.accountLocation.addressType\": \"postal\",\r\n\r\n\r\n\t\t// \"motorcycles.0.financeType\": \"none\",\r\n\t\t\"motorcycles.0.sumInsuredAmount\": \"1000\",\r\n\t\t// \"motorcycles.0.riders.*.person.primaryAddress.addressType\": \"residential\",\r\n\r\n\t\t\"motorcycles.0.riders.*.licensedToRide\": \"yes\",\r\n\t\t\"motorcycles.0.riders.*.rider.currentInsurer\": \"nocurrentinsurance\",\r\n\t\t\"motorcycles.0.riders.*.rider.yearsLicenced\": \"1\",\r\n\t\t\"motorcycles.0.riders.*.rider.licenceType\": \"full\",\r\n\t\t\"motorcycles.0.riders.*.rider.relationWithMainRider\": \"other\",\r\n\t\t\"motorcycles.0.riders.*.rider.noClaimBonus\": \"nil\",\r\n\t\t// \"motorcycles.0.riders.*.rider.visaType\": \"distinguishedtalentvisa124\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.gender\": \"male\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.firstName\": \"An@n\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.lastName\": \"An@nym@us\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.contactType\": \"person\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.dateOfBirth\": \"01/06/2000\",\r\n\t\t\"policyHolders.*.contact.primaryAddress.addressType\": \"residential\",\r\n\r\n\r\n\t\t// \"email\": \"a@a.com\",\r\n\t\t\"motorcycles.0.availableCoverTypes\" : [\r\n\t\t\t\"comprehensive\",\r\n\t\t\t\"fireandtheft\",\r\n\t\t\t\"thirdpartyonly\",\r\n\t\t\t\"thirdpartyfiretheft\"\r\n ],\r\n\t\t\"motorcycles.0.availableSumInsuredTypes\": [\r\n \"market\",\r\n \"agreed\"\r\n ],\r\n\r\n\r\n\t\t\"motorcycles.0.excess.ageExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.flexiExcessExcess\" : 0,\r\n\t\t// \"motorcycles.0.excess.flexiExcessOptions\": [],\r\n\t\t\"motorcycles.0.excess.inexperiencedRiderExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.riderTrainingExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.standardExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.theftClaimsExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.unListedRiderExcess\" : 0,\r\n\r\n\t\t\"policyHolders.0.mainHolder\": true,\r\n\t\t\"policyHolders.0.contact.contactType\": \"person\",\r\n\t\t\"policyHolders.0.contact.firstName\": \"An@n\",\r\n\t\t\"policyHolders.0.contact.lastName\": \"An@nym@us\",\r\n\t\t\"policyHolders.0.contact.dateOfBirth\": \"01/06/2000\",\r\n\t\t\"policyHolders.0.contact.primaryPhone\": \"mobile\",\r\n\t\t// full quote transformation :\r\n \"status\" : \"Draft\",\r\n \"documentDeliveryMethod\": 'email',\r\n\t\t\"displayStatus\": 'Draft',\r\n\t\t\"periodStartDateTimeAEDT\": formatDateAndTimeTheGuidewireWay(moment(), moment()),\r\n\t\t\"periodEndDateTimeAEDT\" : formatDateAndTimeTheGuidewireWay(moment().add(1,'years')),\r\n\t\t\"channel\": 'portal',\r\n\t\t\"motorcycles.0.riders.*.riderUsage\" : \"other\"\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.setDefault(userInput, staticValuesMapping) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function BikeFormatConverterTransformer(Util, jsonMapper) {\r\n\r\n\tfunction convertDateAndTimeTheGuidewireWay(dateTime) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\treturn Util.stringFormat(format, dateTime.format('Do MMM YYYY') , dateTime.format('h:mma')) ;\r\n\t}\r\n\r\n\tfunction convertDate(dateString) {\r\n\t\tvar date = moment(dateString, 'DD/MM/YYYY') ;\r\n\t\tvar formattedDate = date.format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\r\n\t\t// throw 'date format exception formatting ' + dateString ;\r\n\t\treturn null;\r\n\t}\r\n\t\r\n\tfunction convertDateToGWTimeZone(dateString) {\r\n\t\tvar formattedDate = moment(dateString,'DDMMYYYY').tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertGender(gender) {\r\n\t\tvar gc = {\r\n\t\t\tmale : 'M',\r\n\t\t\tfemale : 'F',\r\n\t\t\tintersex : 'I',\r\n\t\t};\r\n\r\n\t\treturn gc[gender] ;\r\n\t}\r\n\r\n\tfunction convertFalsyToUnknown(value) {\r\n\t\tif ( value === null || value === undefined )\r\n\t\t\treturn 'unknown';\r\n\r\n\t\treturn convertBooleanToYesNo(value) ;\r\n\t}\r\n\r\n\tfunction convertBooleanToYesNo(value) {\r\n\t\treturn value ? 'yes' : 'no' ;\r\n\t}\r\n\r\n\tfunction convertStringToInt(value) {\r\n\t\treturn !!value ? parseInt(value) : value;\r\n\t}\r\n\r\n\tfunction convertIntToString(value) {\r\n\t\treturn !!value ? value.toString() : value;\r\n\t}\r\n\r\n\r\n\tvar convertValueMapping = {\r\n\t\t'periodStartDate': convertDateToGWTimeZone,\r\n\r\n\t\t'policyHolders.*.contact.gender' : convertGender,\r\n\t\t'policyHolders.*.contact.hasClaim' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.hasConviction' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyLostLicence' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyInfringements' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.dateOfBirth' : convertDate,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.dateOfBirth' : convertDate,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.gender' : convertGender,\r\n\r\n\r\n\t\t'motorcycles.0.purchaseDate' : convertDate,\r\n\r\n\t\t'motorcycles.0.youngestRiderDOB' : convertDate,\r\n\t\t'motorcycles.0.youngestRiderGender' : convertGender,\r\n\t\t\r\n\t\t'motorcycles.0.motorcycleInfo.modelYear' : convertStringToInt,\r\n\t\t\"motorcycles.0.sumInsuredAmount\": convertStringToInt,\r\n\r\n\t\t// 'motorcycles.0.purchasePrice' : convertIntToString,\r\n\t\t// 'motorcycles.0.sumInsuredAmount' : convertIntToString,\r\n\t\t'motorcycles.0.isFinanced' : convertBooleanToYesNo,\r\n\r\n\t\t'motorcycles.0.riders.*.rider.person.dateOfBirth' : convertDate,\r\n\t\t'motorcycles.0.riders.*.rider.person.gender' : convertGender,\r\n\t\t\"motorcycles.0.riders.*.rider.hasConviction\": convertFalsyToUnknown,\r\n\t\t\"motorcycles.0.riders.*.rider.person.hasConviction\": convertBooleanToYesNo,\r\n\t\t\"motorcycles.0.riders.*.rider.hasClaim\": convertFalsyToUnknown,\r\n\t\t\"motorcycles.0.riders.*.rider.person.hasClaim\": convertBooleanToYesNo,\r\n\t\t\"motorcycles.0.riders.*.rider.hasLostLicence\": convertFalsyToUnknown,\r\n\t\t\"motorcycles.0.riders.*.licensedToRide\": convertBooleanToYesNo,\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.year' : convertStringToInt,\r\n\t\t'motorcycles.0.sumInsuredAmount' : convertStringToInt\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.convert(intermediateRequest, convertValueMapping) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function BikePolicyHolderHandler(Util, publicIDTransformer) {\r\n\tfunction handle(quoteRequest, userInput) {\r\n\t\tvar mainPolicyholder = quoteRequest.policyHolders.filter(function (item) {\r\n return item['mainHolder'];\r\n })[0];\r\n\r\n var mainRider = quoteRequest.motorcycles[0].riders.filter(function (item) {\r\n return item['riderUsage'] == 'main';\r\n\t\t})[0];\t\t\r\n\t\t\r\n\t\tif (mainPolicyholder.contact.publicID == mainRider.rider.person.publicID) {\r\n mainRider.rider.person.passwordQuestion = mainPolicyholder.contact.passwordQuestion;\r\n mainRider.rider.person.passwordAnswer = mainPolicyholder.contact.passwordAnswer;\r\n mainRider.rider.person.primaryPhone = mainPolicyholder.contact.primaryPhone;\r\n \r\n\t\t\tswitch (mainPolicyholder.contact.primaryPhone) {\r\n\t\t\t\tcase 'mobile':\r\n\t\t\t\t\tmainRider.rider.person.cellPhone = mainPolicyholder.contact.cellPhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'home':\r\n\t\t\t\t\tmainRider.rider.person.homePhone = mainPolicyholder.contact.homePhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'work':\r\n\t\t\t\t\tmainRider.rider.person.workPhone = mainPolicyholder.contact.workPhone;\r\n\t\t\t\t\tbreak;\r\n }\r\n\t\t}\t\r\n\r\n\t\treturn quoteRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\thandle: handle\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nfunction BikePublicIDTransformer(\r\n\tUtil,\r\n\tjsonMapper,\r\n\tserviceResponseRepository,\r\n\taggregatedRemoveService\r\n) {\r\n\tvar currentResponse = null;\r\n\tvar driverUniqueIdCtr = 1;\r\n\tvar historyUniqueIdCtr = 1;\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat(\r\n\t\t\t'portal:{0}-{1}',\r\n\t\t\tmoduleName,\r\n\t\t\tUtil.generateRandomString(15)\r\n\t\t);\r\n\t}\r\n\r\n\tfunction hasValidGWPublicID(publicID) {\r\n\t\tif (publicID && publicID.indexOf('portal:') === -1) return true;\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction hash(value) {\r\n\t\treturn md5(value);\r\n\t}\r\n\r\n\tfunction fetchFromPreviousResponse(path) {\r\n\t\tif (currentResponse)\r\n\t\t\treturn Util.findHierarchyStringInObject(currentResponse, path, '.');\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertPublicID(path, moduleName) {\r\n\t\tif (currentResponse) {\r\n\t\t\tvar lastPublicID = fetchFromPreviousResponse(path);\r\n\t\t\tif (lastPublicID) return lastPublicID;\r\n\t\t}\r\n\r\n\t\treturn forgePublicId(moduleName);\r\n\t}\r\n\r\n\tvar moduleNameMapping = {\r\n\t\tpolicyHolders: 'PolicyHolder[]',\r\n\t\tpolicyAddress: 'Address',\r\n\t\tmotorcycle: 'QPYMotorcycle',\r\n\t\trider: 'QPYMotorcycleRider',\r\n\t\tpolicyRider: 'QPYPolicyRider',\r\n\t\tperson: 'Person',\r\n\t\tmodification: 'QPYCycleModification',\r\n\t\taccessories: 'QPYCycleAccessories',\r\n\t\triderHistory: 'QPYRiderHistory',\r\n\t\tdrivingHistory: 'DrivingHistory',\r\n\t\tpattern: 'qbePattern'\r\n\t};\r\n\r\n\tvar publicIDTransformationMapping = {\r\n\t\t'policyAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'motorcycles.0.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.motorcycle);\r\n\t\t},\r\n\t\t'motorcycles.0.accountLocation.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'motorcycles.0.qpyCycleModifications.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.modification);\r\n\t\t},\r\n\t\t'motorcycles.0.qpyMotorcycleAccessories.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.accessories);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.rider);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.uniqueID': function() {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyRider);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.person.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.person.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.riderHistory);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.uniqueID': function() {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t'policyHolders.*.contact.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.drivingHistory);\r\n\t\t}\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDTransformationMapping = {\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t}\r\n\t};\r\n\r\n\tvar publicIDConversionMapping = {\r\n\t\t'policyAddress.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.publicID',\r\n\t\t\t\tmoduleNameMapping.motorcycle\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.uniqueID': function() {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.uniqueID': function() {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t'motorcycles.0.accountLocation.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.accountLocation.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.qpyCycleModifications.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.qpyCycleModifications.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.modifications\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.qpyMotorcycleAccessories.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.qpyMotorcycleAccessories.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.accessories\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' + mappedValueStarIndex + '.contact.publicID',\r\n\t\t\t\tmoduleNameMapping.policyHolders\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.publicID': function(val, mappedValueStarIndex) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' + mappedValueStarIndex + '.publicID',\r\n\t\t\t\tmoduleNameMapping.rider\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.rider.publicID',\r\n\t\t\t\tmoduleNameMapping.policyRider\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.person.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.rider.person.publicID',\r\n\t\t\t\tmoduleNameMapping.person\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.person.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.rider.person.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.rider.riderHistory.' +\r\n\t\t\t\t\tmappedValueStarIndices[1] +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.riderHistory\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolder.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndex[0] +\r\n\t\t\t\t\t'.contact.drivingHistory.' +\r\n\t\t\t\t\tmappedValueStarIndex[1] +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.drivingHistory\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDConversionMapping = {\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.authorisedPersons.0.person.publicID',\r\n\t\t\t\tmoduleNameMapping.person\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.authorisedPersons.0.person.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tfunction removeDeletedAdditionalRiders(transformedRequest) {\r\n\t\tvar removedRiders = aggregatedRemoveService.getList()\r\n\t\t\t? aggregatedRemoveService.getList()['rider']\r\n\t\t\t: null;\r\n\t\tvar savedRiders = fetchFromPreviousResponse('motorcycles.0.riders');\r\n\t\tif (savedRiders && removedRiders) {\r\n\t\t\tangular.forEach(removedRiders, function(removedRider) {\r\n\t\t\t\tvar matchingRider = savedRiders.filter(function(rider) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\trider.rider.person.firstName ==\r\n\t\t\t\t\t\t\tremovedRider.person.firstName &&\r\n\t\t\t\t\t\trider.rider.person.lastName ==\r\n\t\t\t\t\t\t\tremovedRider.person.lastName\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t\tmatchingRider = matchingRider[0] || null;\r\n\t\t\t\tif (matchingRider) {\r\n\t\t\t\t\tmatchingRider.markedForDelete = true;\r\n\t\t\t\t\ttransformedRequest.motorcycles[0].riders.push(\r\n\t\t\t\t\t\tmatchingRider\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\taggregatedRemoveService.clear('rider');\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeDeletedRiderHistoryArrays(transformedRequest) {\r\n\t\tvar riders = transformedRequest.motorcycles[0].riders;\r\n\t\tangular.forEach(riders, function(rider, index) {\r\n\t\t\tvar savedHistories = fetchFromPreviousResponse(\r\n\t\t\t\t'motorcycles.0.riders.' + index + '.rider.riderHistory'\r\n\t\t\t);\r\n\t\t\tif (savedHistories && savedHistories.length > 0) {\r\n\t\t\t\tvar riderHistories = rider.rider.riderHistory;\r\n\t\t\t\tangular.forEach(savedHistories, function(savedHistory) {\r\n\t\t\t\t\tvar matchingInput = riderHistories.filter(function(\r\n\t\t\t\t\t\thistory\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn history.publicID == savedHistory.publicID;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!matchingInput || matchingInput.length == 0) {\r\n\t\t\t\t\t\tsavedHistory.markedForDelete = true;\r\n\t\t\t\t\t\triderHistories.push(savedHistory);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeEmptyRiderHistoryArrays(transformedRequest) {\r\n\t\tvar motorcycle = transformedRequest.motorcycles[0];\r\n\t\tif (motorcycle && motorcycle.riders) {\r\n\t\t\tmotorcycle.riders.forEach(function(policyRider) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tpolicyRider.rider &&\r\n\t\t\t\t\tpolicyRider.rider.riderHistory &&\r\n\t\t\t\t\tArray.isArray(policyRider.rider.riderHistory) &&\r\n\t\t\t\t\tpolicyRider.rider.riderHistory.length == 0\r\n\t\t\t\t)\r\n\t\t\t\t\tdelete policyRider.rider.riderHistory;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//dd-973 - requiring a sequence number for driver infringement\r\n\tfunction addUniqueHistoryID(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.motorcycles[0].riders;\r\n\r\n\t\tangular.forEach(drivers, function(driver, index) {\r\n\t\t\thistoryUniqueIdCtr = 1;\r\n\t\t\tvar driverHistory = driver.rider.riderHistory;\r\n\t\t\tif (driverHistory) {\r\n\t\t\t\tangular.forEach(driverHistory, function(driverHistory, index) {\r\n\t\t\t\t\tdriverHistory.uniqueID = historyUniqueIdCtr;\r\n\t\t\t\t\thistoryUniqueIdCtr++;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, response) {\r\n\t\tcurrentResponse = response;\r\n\t\tdriverUniqueIdCtr = 1;\r\n\t\tvar transformedRequest = intermediateRequest;\r\n\r\n\t\tif (\r\n\t\t\ttransformedRequest.policyHolders[0] &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact.authorisedPersons\r\n\t\t) {\r\n\t\t\tpublicIDConversionMapping = Object.extend(\r\n\t\t\t\tpublicIDConversionMapping,\r\n\t\t\t\tauthorisedPersonsPublicIDConversionMapping\r\n\t\t\t);\r\n\t\t\tpublicIDTransformationMapping = Object.extend(\r\n\t\t\t\tpublicIDTransformationMapping,\r\n\t\t\t\tauthorisedPersonsPublicIDTransformationMapping\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (!currentResponse)\r\n\t\t\ttransformedRequest = jsonMapper.transform(\r\n\t\t\t\tintermediateRequest,\r\n\t\t\t\tpublicIDTransformationMapping\r\n\t\t\t);\r\n\t\telse {\r\n\t\t\ttransformedRequest = jsonMapper.convert(\r\n\t\t\t\tintermediateRequest,\r\n\t\t\t\tpublicIDConversionMapping\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\ttransformedRequest = addUniqueHistoryID(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedAdditionalRiders(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedRiderHistoryArrays(\r\n\t\t\ttransformedRequest\r\n\t\t);\r\n\t\ttransformedRequest = removeEmptyRiderHistoryArrays(transformedRequest);\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n","function BikeQuoteResultModel(quoteResultResponse) {\r\n\tthis.isCoverAvailable = quoteResultResponse.quoteResult.totalPremium !== undefined ;\r\n\tthis.coverType = quoteResultResponse.motorcycles[0].coverType;\r\n\tthis.sumInsuredAmount = quoteResultResponse.motorcycles[0].sumInsuredAmount;\r\n\tthis.quoteResult = quoteResultResponse.quoteResult;\r\n\tthis.paymentPlan = quoteResultResponse.paymentPlan;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.totalFSL = quoteResultResponse.quoteResult.totalFSL ;\r\n\tthis.totalGST = quoteResultResponse.quoteResult.totalGST ;\r\n\tthis.totalStampDuty = quoteResultResponse.quoteResult.totalStampDuty ;\r\n\tthis.premiumAfterDiscount = quoteResultResponse.quoteResult.premiumAfterDiscount ;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.paymentFrequency = quoteResultResponse.paymentPlan ? quoteResultResponse.paymentPlan.paymentFrequency : null ;\r\n\tthis.excess = quoteResultResponse.motorcycles[0].excess ;\r\n\tthis.availableSumInsuredTypes = quoteResultResponse.motorcycles[0].availableSumInsuredTypes;\r\n\tthis.motorcycleValue = {\r\n\t\tupper: quoteResultResponse.motorcycles[0].agreedValueUpper,\r\n\t\tlower: quoteResultResponse.motorcycles[0].agreedValueLower\r\n\t};\r\n\tthis.coverageOptions = quoteResultResponse.motorcycles[0].coverageOptions;\r\n\tthis.response = quoteResultResponse ;\r\n\r\n}\r\n","function BikeRetrieveSavedQuoteResponseTransformer($filter, jsonMapper, Util) {\r\n // transform functions\r\n var transformers = {\r\n camelcase: function(value) {\r\n if(value) {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n },\r\n date: function(dateString) {\r\n var date = moment(dateString, 'YYYY-MM-DD') ;\r\n return date.format('DD/MM/YYYY') ;\r\n },\r\n\t\ttoday : function() {\r\n\t\t\treturn moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY') ;\r\n\t\t},\r\n financeType: function(financeType) {\r\n switch(financeType) {\r\n case 'none':\r\n return '';\r\n break;\r\n }\r\n },\r\n convertGender: function(gender) {\r\n var gc = {\r\n M : 'male',\r\n F : 'female',\r\n I : 'intersex',\r\n };\r\n return gc[gender] ;\r\n },\r\n yesNo: function(value) {\r\n return value == 'yes' ? true : false;\r\n },\r\n checkbox: function(value) {\r\n },\r\n state: function(state) {\r\n if ( state )\r\n return state.replace('AU_', '');\r\n },\r\n coverType: function(coverType) {\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n return 'third_party';\r\n }\r\n return coverType;\r\n },\r\n purchaseMonthFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n return monthYear.split('-')[1];\r\n }else{\r\n return '';\r\n }\r\n\r\n },\r\n purchaseYearFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n return monthYear.split('-')[0];\r\n }else{\r\n return '';\r\n }\r\n },\r\n thirdPartyPref: function(coverType) {\r\n if(coverType === 'comprehensive') {\r\n return null;\r\n }\r\n return coverType;\r\n },\r\n\t\tmodifications: function(mod) {\r\n\t\t\tif (!!mod) {\r\n\t\t\t\tvar values = [{\"label\":\"Big bore kit\",\"value\":\"big_bore_kit\"},{\"label\":\"Cam modified\",\"value\":\"cam_modified\"},{\"label\":\"Custom paint\",\"value\":\"custom_paint\"},{\"label\":\"Frame – non standard\",\"value\":\"frame_non_standard\"},{\"label\":\"Modified exhaust\",\"value\":\"modified_exhaust\"},{\"label\":\"Modified or non-standard engine\",\"value\":\"modified_or_non-standard_engine\"},{\"label\":\"Modified or non-standard fuel system\",\"value\":\"modified_or_non-standard_fuel_system\"},{\"label\":\"Modified suspension\",\"value\":\"modified_suspension\"},{\"label\":\"Nitrous oxide\",\"value\":\"nitrous_oxide\"},{\"label\":\"Other modifications and customisations\",\"value\":\"other_modifications_and_customisations\"},{\"label\":\"Side car\",\"value\":\"side_car\"},{\"label\":\"Supercharged\",\"value\":\"supercharged\"},{\"label\":\"Turbo charged\",\"value\":\"turbo_charged\"},{\"label\":\"Wheels – non standard\",\"value\":\"wheels_non_standard\"}];\r\n\t\t\t\treturn values.find(function(o) {\r\n\t\t\t\t\treturn o.value === mod;\r\n\t\t\t\t}).label;\r\n\t\t\t}\r\n\t\t},\r\n\t\taccessories: function(accessory) {\r\n\t\t\tif (!!accessory) {\r\n\t\t\t\tvar values = [{\"label\":\"Aftermarket levers (brake and clutch)\",\"value\":\"Aftermarketleversbrakeandclutch\"},{\"label\":\"Air filter\",\"value\":\"Airfilter\"},{\"label\":\"Bash plate\",\"value\":\"Bashplate\"},{\"label\":\"Braided brake lines\",\"value\":\"Braidedbrakelines\"},{\"label\":\"Brake discs\",\"value\":\"Brakediscs\"},{\"label\":\"Burglar alarm\",\"value\":\"Burglaralarm\"},{\"label\":\"Carbon fibre guards\",\"value\":\"Carbonfibreguards\"},{\"label\":\"Centre stand\",\"value\":\"Centrestand\"},{\"label\":\"Crash bars\",\"value\":\"Crashbars\"},{\"label\":\"Fender eliminator\",\"value\":\"Fendereliminator\"},{\"label\":\"Foot pegs\",\"value\":\"Footpegs\"},{\"label\":\"Forward controls\",\"value\":\"Forwardcontrols\"},{\"label\":\"GPS\",\"value\":\"GPS\"},{\"label\":\"Gear shift lever\",\"value\":\"Gearshiftlever\"},{\"label\":\"Hand guards\",\"value\":\"Handguards\"},{\"label\":\"Hand Grips\",\"value\":\"HandGrips\"},{\"label\":\"Handlebars\",\"value\":\"Handlebars\"},{\"label\":\"Headlight Protectors\",\"value\":\"HeadlightProtectors\"},{\"label\":\"Immobiliser\",\"value\":\"Immobiliser\"},{\"label\":\"Indicators\",\"value\":\"Indicators\"},{\"label\":\"Instrument clusters\",\"value\":\"Instrumentclusters\"},{\"label\":\"Intercom system\",\"value\":\"Intercomsystem\"},{\"label\":\"Kill switch\",\"value\":\"Killswitch\"},{\"label\":\"Lights\",\"value\":\"Lights\"},{\"label\":\"Mirrors\",\"value\":\"Mirrors\"},{\"label\":\"Motorcycle rack\",\"value\":\"Motorcyclerack\"},{\"label\":\"Oggy knobs\",\"value\":\"Oggyknobs\"},{\"label\":\"On road costs\",\"value\":\"Onroadcosts\"},{\"label\":\"Panniers\",\"value\":\"Panniers\"},{\"label\":\"Power commander\",\"value\":\"Powercommander\"},{\"label\":\"Radiator guard\",\"value\":\"Radiatorguard\"},{\"label\":\"Rear hugger\",\"value\":\"Rearhugger\"},{\"label\":\"Saddle bags\",\"value\":\"Saddlebags\"},{\"label\":\"Seat sissy bar\",\"value\":\"Seatsissybar\"},{\"label\":\"Steering damper\",\"value\":\"Steeringdamper\"},{\"label\":\"Stereo\",\"value\":\"Stereo\"},{\"label\":\"Tank bag\",\"value\":\"Tankbag\"},{\"label\":\"Tank pad\",\"value\":\"Tankpad\"},{\"label\":\"Tank protector\",\"value\":\"Tankprotector\"},{\"label\":\"Top Box\",\"value\":\"TopBox\"},{\"label\":\"Windshield\",\"value\":\"Windshield\"},{\"label\":\"Other non-standard accessories\",\"value\":\"Othernon-standardaccessories\"}];\r\n\t\t\t\treturn values.find(function(o) {\r\n\t\t\t\t\treturn o.value === accessory;\r\n\t\t\t\t}).label;\r\n\t\t\t}\r\n\t\t},\r\n\t\tyearsHeld: function(years) {\r\n\t\t\tvar yearsHeld;\r\n\r\n\t\t\tswitch (years) {\r\n\t\t\t\tcase '0':\r\n\t\t\t\t\tyearsHeld = 'lessThan_1';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase '6':\r\n\t\t\t\t\tyearsHeld = 'greaterThan_5';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tyearsHeld = years;\r\n\t\t\t}\r\n\r\n\t\t\treturn yearsHeld;\r\n\t\t},\r\n };\r\n function transformPerson(person) {\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date\r\n };\r\n var transformedPerson = jsonMapper.convert(jsonMapper.transform(person, transformMapping), convertMapping);\r\n return transformedPerson.returnObject;\r\n }\r\n\r\n function transformRider(rider) {\r\n var transformMapping = {\r\n \t'returnObject.yearsHeld': \t\t'=_input.rider.yearsLicenced',\r\n 'returnObject.licenceType': \t\t'=_input.rider.licenceType',\r\n 'returnObject.noClaimBonus': \t\t'=_input.rider.noClaimBonus',\r\n 'returnObject.previousInsurer': \t\t'=_input.rider.currentInsurer',\r\n 'returnObject.licensedToRide': \t\t'=_input.licensedToRide',\r\n\t\t\t'returnObject.threeYears_accidentsClaims': \t\t\t\t\t\t\t\t'=_input.rider.hasClaim',\r\n\t\t\t'returnObject.fiveYears_chargedOrConvicted': \t\t\t\t\t\t\t'=_input.rider.hasConviction',\r\n\t\t\t'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled': \t'=_input.rider.hasLostLicence',\r\n\t\t\t'returnObject.visaType':\t\t\t\t\t\t\t\t\t\t\t \t'=_input.rider.visaType',\r\n },\r\n convertMapping = {\r\n\t\t\t\t'returnObject.yearsHeld': \t\ttransformers.yearsHeld,\r\n 'returnObject.licensedToRide': \t\ttransformers.yesNo,\r\n\t\t\t\t'returnObject.threeYears_accidentsClaims': \t\t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t\t'returnObject.fiveYears_chargedOrConvicted': \t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t\t'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled':\ttransformers.yesNo\r\n };\r\n\r\n\t\tvar mappedRider = jsonMapper.transform(rider, transformMapping);\r\n var transformedRider = jsonMapper.convert(mappedRider, convertMapping);\r\n if(rider.rider.person) {\r\n transformedRider.returnObject.person = transformPerson(rider.rider.person);\r\n }\r\n\r\n // extract rider history\r\n\t\ttransformedRider.returnObject.threeYears_accidentsClaimsDetails = [];\r\n\t\ttransformedRider.returnObject.fiveYears_chargedOrConvictedDetails = [];\r\n\t\ttransformedRider.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelledDetails = [];\r\n\r\n\t\tif (!!rider.rider.riderHistory) {\r\n\t\t\trider.rider.riderHistory.forEach(function(record) {\r\n\t\t\t\tswitch (record.pattern.filter1) {\r\n\t\t\t\t\tcase 'claim' :\r\n\t\t\t\t\t\ttransformedRider.returnObject.threeYears_accidentsClaimsDetails.push(\r\n\t\t\t\t\t\t\textractHistory(globals.threeYears_accidentsClaimsDetails.options, record));\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'conviction' :\r\n\t\t\t\t\t\ttransformedRider.returnObject.fiveYears_chargedOrConvictedDetails.push(\r\n\t\t\t\t\t\t\textractHistory(globals.fiveYears_chargedOrConvictedDetails.options, record)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault: {\r\n\t\t\t\t\t\ttransformedRider.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.push(\r\n\t\t\t\t\t\t\textractHistory(globals.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.options, record)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n return transformedRider.returnObject;\r\n }\r\n\r\n function extractHistory(collection, record) {\r\n\t\tvar matchedPattern = {};\r\n\t\tvar month = {};\r\n\t\tvar year = {};\r\n\r\n\t\tmatchedPattern = collection.find(function(opt) {\r\n\t\t\treturn opt.publicID == record.pattern.publicID;\r\n\t\t});\r\n\t\tmonth.label = month.value = Util.capitalize(record.month.toString());\r\n\t\tyear.label = year.value = Util.capitalize(record.year.toString());\r\n\r\n\t\trecord.description = matchedPattern;\r\n\t\trecord.month = month;\r\n\t\trecord.year = year;\r\n\r\n\t\tdelete record.pattern;\r\n\r\n \treturn record;\r\n\t}\r\n\r\n\tfunction extractPolicyHolderHistory(collection, record) {\r\n\t\tvar matchedPattern = {};\r\n\t\tvar month = {};\r\n\t\tvar year = {};\r\n\r\n\t\tmatchedPattern = collection.find(function(opt) {\r\n\t\t\treturn opt.publicID = record.riderPattern.publicID;\r\n\t\t});\r\n\t\tmonth.label = month.value = Util.capitalize(record.riderMonth.toString());\r\n\t\tyear.label = year.value = Util.capitalize(record.year.toString());\r\n\r\n\t\trecord.description = matchedPattern;\r\n\t\trecord.month = month;\r\n\t\trecord.year = year;\r\n\r\n\t\tdelete record.pattern;\r\n\r\n \treturn record;\r\n\t}\r\n\r\n function transformPolicyHolder(holder) {\r\n var transformMapping = {\r\n\t\t\t'returnObject.title': \t\t'=_input.prefix',\r\n\t\t\t'returnObject.firstName': \t\t'=_input.firstName',\r\n\t\t\t'returnObject.lastName': \t\t'=_input.lastName',\r\n\t\t\t'returnObject.gender': \t\t'=_input.gender',\r\n\t\t\t'returnObject.dateOfBirth': \t\t'=_input.dateOfBirth',\r\n\t\t\t// 'returnObject.threeYears_accidentsClaims': \t\t\t\t\t\t\t\t'=_input.rider.hasClaim',\r\n\t\t\t// 'returnObject.fiveYears_chargedOrConvicted': \t\t\t\t\t\t\t'=_input.rider.hasConviction',\r\n\t\t\t// 'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled': \t'=_input.rider.hasLostLicence',\r\n\t\t},\r\n\t\tconvertMapping = {\r\n\t\t\t'returnObject.title': \t\ttransformers.camelcase,\r\n\t\t\t'returnObject.gender': \t\ttransformers.convertGender,\r\n\t\t\t'returnObject.dateOfBirth': \t\ttransformers.date,\r\n\t\t\t// 'returnObject.threeYears_accidentsClaims': \t\t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t// 'returnObject.fiveYears_chargedOrConvicted': \t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t// 'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled':\ttransformers.yesNo\r\n\t\t};\r\n\r\n var transformedPolicyHolder = jsonMapper.convert(jsonMapper.transform(holder, transformMapping), convertMapping);\r\n\r\n\t\t//region Policy Holder driving history\r\n\t\ttransformedPolicyHolder.returnObject.threeYears_accidentsClaims = false;\r\n\t\ttransformedPolicyHolder.returnObject.threeYears_accidentsClaimsDetails = [];\r\n\t\ttransformedPolicyHolder.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled = false;\r\n\t\ttransformedPolicyHolder.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelledDetails = [];\r\n\t\ttransformedPolicyHolder.returnObject.fiveYears_chargedOrConvicted = false;\r\n\t\ttransformedPolicyHolder.returnObject.fiveYears_chargedOrConvictedDetails = [];\r\n\r\n\t\tif (!!holder.drivingHistory) {\r\n\t\t\tholder.drivingHistory.forEach(function(record) {\r\n\t\t\t\tswitch(record.riderPattern.filter1) {\r\n\t\t\t\t\tcase 'claim' :\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.threeYears_accidentsClaims = true;\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.threeYears_accidentsClaimsDetails.push(\r\n\t\t\t\t\t\t\textractPolicyHolderHistory(globals.threeYears_accidentsClaimsDetails.options, record));\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'conviction' :\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.fiveYears_chargedOrConvicted = true;\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.fiveYears_chargedOrConvictedDetails.push(\r\n\t\t\t\t\t\t\textractPolicyHolderHistory(globals.fiveYears_chargedOrConvictedDetails.options, record)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault: {\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled = true;\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.push(\r\n\t\t\t\t\t\t\textractPolicyHolderHistory(globals.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.options, record)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t// endregion\r\n\r\n return transformedPolicyHolder.returnObject;\r\n }\r\n\r\n /**\r\n * Transforms the retrievedQuoteResponse into a format that can be injected into the userInputRepository\r\n * The returned value will populate all the forms in the quote process\r\n * @param {Object} retrievedQuoteResponse Response object from the retrieveSavedQuote service\r\n * @returns {Object} Transformed object ready to inject into the userInputRepository\r\n */\r\n function transform(retrievedQuoteResponse) {\r\n \tconsole.info('retrievedQuoteResponse', JSON.stringify(retrievedQuoteResponse));\r\n \tconsole.info('retrievedQuoteResponse', retrievedQuoteResponse);\r\n var transformMapping = {\r\n\t\t\t\t// getStarted\r\n\t\t\t\t// 'vehicleForm.getStarted.paymentOptions': '=_input.?',\r\n\t\t\t\t'returnObject.getStarted.policyStartDate':\r\n\t\t\t\t\t'=_input.periodStartDate', // find where this comes from\r\n\t\t\t\t'returnObject.getStarted.personOrCompany':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.contactType',\r\n\r\n\t\t\t\t//tell us a bit more -------------------------------------\r\n\t\t\t\t'returnObject.tellUsABitMore.yourEmailAddress': '=_input.email',\r\n\t\t\t\t'returnObject.tellUsABitMore.promotionalCode':\r\n\t\t\t\t\t'=_input.campaignCode',\r\n\r\n\t\t\t\t// aboutYourBike\r\n\t\t\t\t'returnObject.address': '=_input.motorcycles.0.accountLocation',\r\n\t\t\t\t'returnObject.motorcycleInfo':\r\n\t\t\t\t\t'=_input.motorcycles.0.motorcycleInfo',\r\n\t\t\t\t'returnObject.aboutYourBike.purchaseDate':\r\n\t\t\t\t\t'=_input.motorcycles.0.purchaseDate',\r\n\t\t\t\t'returnObject.aboutYourBike.bikeCost':\r\n\t\t\t\t\t'=_input.motorcycles.0.purchasePrice',\r\n\r\n\t\t\t\t// Modifications and Accessories\r\n\t\t\t\t'returnObject.modificationsAccessories.modifications':\r\n\t\t\t\t\t'=_input.motorcycles.0.isBikeModified',\r\n\t\t\t\t'returnObject.modificationsAccessories.accessories':\r\n\t\t\t\t\t'=_input.motorcycles.0.isAccessoriesAdded',\r\n\r\n\t\t\t\t// Bike Details\r\n\t\t\t\t'returnObject.bikeDetails.locationParked':\r\n\t\t\t\t\t'=_input.motorcycles.0.garageType',\r\n\t\t\t\t'returnObject.bikeDetails.isItFinanced':\r\n\t\t\t\t\t'=_input.motorcycles.0.isFinanced',\r\n\t\t\t\t'returnObject.bikeDetails.financeWith':\r\n\t\t\t\t\t'=_input.motorcycles.0.financier',\r\n\t\t\t\t'returnObject.bikeDetails.kilometres':\r\n\t\t\t\t\t'=_input.motorcycles.0.motorCycleKilometers',\r\n\t\t\t\t'returnObject.bikeDetails.primaryBikeUse':\r\n\t\t\t\t\t'=_input.motorcycles.0.motorCycleUsage',\r\n\t\t\t\t'returnObject.bikeDetails.businessActivityType':\r\n\t\t\t\t\t'=_input.motorcycles.0.businessUsage',\r\n\t\t\t\t'returnObject.bikeDetails.commercialActivityType':\r\n\t\t\t\t\t'=_input.motorcycles.0.businessUsage',\r\n\t\t\t\t'returnObject.bikeDetails.existingDamage':\r\n\t\t\t\t\t'=_input.motorcycles.0.damage',\r\n\r\n\t\t\t\t//driver\r\n\t\t\t\t// 'vehicleForm.driver.paymentOptions': '=_input.?',\r\n\r\n\t\t\t\t//quote\r\n\t\t\t\t// 'returnObject.insuredExcessValue.coverType': '=_input.vehicles.0.coverType',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.comprehensivePref': '=_input.vehicles.0.sumInsuredType',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft': '=_input.vehicles.0.coverType',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.vehicleExcess': '=_input.vehicles.0.excess.voluntaryVehicleExcessOptions',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.standardVehicleExcess': '=_input.vehicles.0.excess.standardVehicleExcess',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.voluntaryVehicleExcess': '=_input.vehicles.0.excess.voluntaryVehicleExcess',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.ageExcessTier1': '=_input.vehicles.0.excess.ageExcessTier1',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.ageExcessTier2': '=_input.vehicles.0.excess.ageExcessTier2',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.undeclaredDriverTier2': '=_input.vehicles.0.excess.undeclaredDriverTier2',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.inexperiencedDriver': '=_input.vehicles.0.excess.inexperiencedDriver',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.agreedValue': '=_input.vehicles.0.sumInsuredAmount',\r\n\r\n\t\t\t\t// optional benefits\r\n\t\t\t\t// 'returnObject.optionalBenefits.QPMMotVehHireCar': '=_input.vehicles.0.coverageOptions.0.selected',\r\n\t\t\t\t// 'returnObject.optionalBenefits.QPMMotVehWindscreen': '=_input.vehicles.0.coverageOptions.1.selected',\r\n\t\t\t\t// 'returnObject.optionalBenefits.QPMMotVehNCB': '=_input.vehicles.0.coverageOptions.2.selected',\r\n\r\n\t\t\t\t// registration details\r\n\t\t\t\t'returnObject.tellUsYourRegoNumber.regoNumber':\r\n\t\t\t\t\t'=_input.motorcycles.0.registrationNumber',\r\n\t\t\t\t// 'returnObject.vehicleInfo': \t\t\t '=_input.vehicles.0.vehicleInfo',\r\n\t\t\t\t// 'returnObject.retrievedQuoteRego.rego': '=_input.vehicles.0.registrationNumber',\r\n\t\t\t\t// 'returnObject.retrievedQuoteRego.state': '=_input.vehicles.0.garageAddress.state'\r\n\t\t\t\t// Contact\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordQuestion':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordQuestion',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordAnswer':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordAnswer',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.primaryPhone':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.primaryPhone'\r\n\t\t\t},\r\n\t\t\tconvertMapping = {\r\n\t\t\t\t'returnObject.aboutYourBike.purchaseDate': transformers.date,\r\n\t\t\t\t'returnObject.bikeDetails.isItFinanced': transformers.yesNo,\r\n\t\t\t\t'returnObject.getStarted.policyStartDate': transformers.date\r\n\t\t\t\t// 'returnObject.rider.isTheMainRider':\t\t\t\t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t\t// 'returnObject.rider.isMemberOfClub':\t\t\t\t\t\t\t\t\ttransformers.yesNo\r\n\r\n\t\t\t\t// 'returnObject.carDetails.colour': transformers.camelcase,\r\n\t\t\t\t// 'returnObject.carDetails.carFinance': \t\t\ttransformers.financeType,\r\n\t\t\t\t// 'returnObject.retrievedQuoteRego.state': transformers.state,\r\n\t\t\t\t// 'returnObject.insuredExcessValue.coverType': transformers.coverType,\r\n\t\t\t\t// 'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft': transformers.thirdPartyPref,\r\n\t\t\t\t// 'returnObject.carDetails.whenDidYouBuyYear': transformers.purchaseMonthFromMonthYear,\r\n\t\t\t\t// 'returnObject.carDetails.whenDidYouBuyMonth': transformers.purchaseYearFromMonthYear\r\n\t\t\t};\r\n var transformedQuote = jsonMapper.convert(jsonMapper.transform(retrievedQuoteResponse, transformMapping), convertMapping);\r\n\r\n // region set comprehensive preference to null if the coverType is third party\r\n /*if(retrievedQuoteResponse.motorcycles[0].coverType.length && retrievedQuoteResponse.motorcycles[0].sumInsuredType.length) {\r\n var coverType = retrievedQuoteResponse.motorcycles[0].coverType;\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n transformedQuote.returnObject.insuredExcessValue.comprehensivePref = null;\r\n }\r\n }*/\r\n\t\t// endregion\r\n\r\n // region Mods and Accessories\r\n\t\tif (retrievedQuoteResponse.motorcycles[0].qpyCycleModifications) {\r\n\t\t\tvar mods = retrievedQuoteResponse.motorcycles[0].qpyCycleModifications;\r\n\r\n\t\t\ttransformedQuote.returnObject.modificationsAccessories.modificationsTable = mods.map(function(mod) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t'modification' : {\r\n\t\t\t\t\t\t\t'label' : transformers.modifications(mod.modification),\r\n\t\t\t\t\t\t\t'value' : mod.modification\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'modificationValue' : mod.purchasePrice\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (retrievedQuoteResponse.motorcycles[0].qpyMotorcycleAccessories) {\r\n\t\t\tvar acc = retrievedQuoteResponse.motorcycles[0].qpyMotorcycleAccessories;\r\n\r\n\t\t\ttransformedQuote.returnObject.modificationsAccessories.accessoriesTable = acc.map(function(accessory) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t'accessories' : {\r\n\t\t\t\t\t\t'label' : transformers.accessories(accessory.accessory),\r\n\t\t\t\t\t\t'value' : accessory.accessory\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'accessoryValue' : accessory.purchasePrice\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t// endregion\r\n\r\n // region Sort drivers to put mainRider first in the list\r\n if(retrievedQuoteResponse.motorcycles && retrievedQuoteResponse.motorcycles.length && retrievedQuoteResponse.motorcycles[0].riders) {\r\n var riders = $filter('orderBy')(retrievedQuoteResponse.motorcycles[0].riders, function(rider) {\r\n return rider.riderUsage == 'main' ? 0 : 1;\r\n });\r\n transformedQuote.returnObject.rider = {};\r\n transformedQuote.returnObject.rider.riders = [];\r\n riders.forEach(function(rider, index) {\r\n transformedQuote.returnObject.rider.riders.push(transformRider(rider));\r\n\r\n\t\t\t\tif (index === 0) {\r\n\t\t\t\t\t// License and insurance details\r\n\t\t\t\t\ttransformedQuote.returnObject.rider.riders[0].isTheMainRider = retrievedQuoteResponse.motorcycles[0].isTheMainRider;\r\n\t\t\t\t\ttransformedQuote.returnObject.rider.riders[0].isMemberOfClub = retrievedQuoteResponse.motorcycles[0].isMemberOfClub;\r\n\t\t\t\t\ttransformedQuote.returnObject.rider.riders[0].motorcycleClub = retrievedQuoteResponse.motorcycles[0].motorcycleClub;\r\n\t\t\t\t}\r\n });\r\n }\r\n // endregion\r\n\r\n // region set contact policy holders\r\n if(!!retrievedQuoteResponse.policyHolders && !!retrievedQuoteResponse.policyHolders.length) {\r\n var policyHolders = retrievedQuoteResponse.policyHolders;\r\n\t\t\tvar response = retrievedQuoteResponse;\r\n\r\n transformedQuote.returnObject.mainPolicyHolder = {};\r\n\r\n policyHolders.forEach(function(holder, index) {\r\n if(holder.mainHolder) {\r\n transformedQuote.returnObject.mainPolicyHolder = transformPolicyHolder(holder.contact);\r\n transformedQuote.returnObject.mainPolicyHolder.isMainRiderMainPolicyHolder = true;\r\n\r\n\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact = holder.contact;\r\n\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact\r\n\t\t\t\t\t\t.personalContactDetailsMailingPreference = response.documentDeliveryMethod;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// if (transformedQuote.returnObject.mainPolicyHolderContact.returnObject !== undefined\r\n\t\t\t\t\t// \t&& transformedQuote.returnObject.mainPolicyHolderContact.returnObject.dateOfBirth) {\r\n\t\t\t\t\t// \t\ttransformedQuote.returnObject.mainPolicyHolderContact.returnObject.dateOfBirth =\r\n\t\t\t\t\t// \t\t\ttransformers.date(transformedQuote.returnObject.mainPolicyHolderContact.returnObject.dateOfBirth);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t// set primary phone number to mobile phone\r\n\t\t\t\t\tif(response.policyHolders[0].contact.cellPhone) {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = response.policyHolders[0].contact.cellPhone;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// set primary phone number to home phone\r\n\t\t\t\t\tif(response.policyHolders[0].contact.homePhone) {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = response.policyHolders[0].contact.homePhone;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// set primary phone number to work phone\r\n\t\t\t\t\tif(response.policyHolders[0].contact.workPhone) {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = response.policyHolders[0].contact.workPhone;\r\n\t\t\t\t\t}\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (holder.contact.contactType === 'company') {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany = {};\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.name = holder.contact.name;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.abn = holder.contact.abn;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.email = holder.contact.emailAddress1;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.officePhone = holder.contact.workPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.companyAddress = holder.contact.primaryAddress;\r\n\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact = {};\r\n\t\t\t\t\t\tvar authorisedPerson = holder.contact.authorisedPersons[0].person;\r\n\r\n\t\t\t\t\t\tif (response.policyAddress.addressLine1 === authorisedPerson.primaryAddress.addressLine1 &&\r\n\t\t\t\t\t\t\tresponse.policyAddress.postalCode === authorisedPerson.primaryAddress.postalCode) {\r\n\t\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsPostalOption = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsPostalOption = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactTitle = authorisedPerson.prefix;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactFirstName = authorisedPerson.firstName;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactLastName = authorisedPerson.lastName;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactGender = authorisedPerson.gender;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDateOfBirth = transformers.date(authorisedPerson.dateOfBirth);\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsAddress = authorisedPerson.primaryAddress;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsEmail = authorisedPerson.emailAddress1;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsPostalAddress = response.policyAddress;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsMailingPreference =\r\n\t\t\t\t\t\t\tresponse.documentDeliveryMethod;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.primaryPhone = authorisedPerson.primaryPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.preferredNumber = authorisedPerson.homePhone || authorisedPerson.workPhone || authorisedPerson.cellPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.passwordQuestion = holder.contact.passwordQuestion;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.enterAQuestion = holder.contact.passwordQuestionStr || '';\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.passwordAnswer = holder.contact.passwordAnswer;\r\n\t\t\t\t\t}\r\n } else {\r\n\t\t\t\t\tif (index === 1) {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.additionalPolicyHolders = {};\r\n\t\t\t\t\t\ttransformedQuote.returnObject.additionalPolicyHolders.policyHolders = [];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttransformedQuote.returnObject.additionalPolicyHolders.policyHolders.push(transformPolicyHolder(holder.contact));\r\n }\r\n });\r\n\r\n }\r\n // endregion\r\n\r\n console.info('final transform quote', JSON.stringify(transformedQuote.returnObject));\r\n console.info('final transform quote', transformedQuote.returnObject);\r\n\r\n return transformedQuote.returnObject;\r\n }\r\n return {\r\n transform: transform\r\n }\r\n}\r\n","function BikeStructureRequestTransformer(\r\n\tjsonMapper,\r\n\tutil,\r\n\tquoteOptions,\r\n\tstorage\r\n) {\r\n\tvar structureQuoteMapping = {\r\n\t\tperiodStartDate: '=_input.bikeForm.getStarted.policyStartDate',\r\n\t\tmotorcycles: [],\r\n\t\t'motorcycles.0': {},\r\n\t\t'motorcycles.0.sumInsuredType':\r\n\t\t\t'=_input.bikeForm.insuredExcessValue.comprehensivePref',\r\n\t\t'motorcycles.0.sumInsuredAmount': '=_regoSearch.goodRetailPrice',\r\n\t\t'motorcycles.0.otherRidersCount':\r\n\t\t\t'=_input.bikeForm.rider.numberOfOtherRiders',\r\n\t\t'motorcycles.0.motorcycleInfo':\r\n\t\t\t'=_input.bikeForm.aboutYourBike.yearMakeModelResponse',\r\n\t\t'motorcycles.0.accountLocation': '=_addressSearch',\r\n\t\t'motorcycles.0.purchasePrice':\r\n\t\t\t'=_input.bikeForm.aboutYourBike.bikeCost',\r\n\t\t'motorcycles.0.purchaseDate':\r\n\t\t\t'=_input.bikeForm.aboutYourBike.purchaseDate',\r\n\t\t'motorcycles.0.youngestRiderDateOfBirth':\r\n\t\t\t'=_input.bikeForm.rider.youngestRiderDob',\r\n\t\t'motorcycles.0.isBikeModified':\r\n\t\t\t'=_input.bikeForm.modificationsAccessories.modifications',\r\n\t\t'motorcycles.0.isAccessoriesAdded':\r\n\t\t\t'=_input.bikeForm.modificationsAccessories.accessories',\r\n\r\n\t\t'motorcycles.0.riders': [],\r\n\t\t'motorcycles.0.riders.0.licensedToRide':\r\n\t\t\t'_input.bikeForm.riders[0].licensedToRide',\r\n\r\n\t\tpolicyHolders: [],\r\n\t\t'policyHolders.*.contact.prefix':\r\n\t\t\t'=_input.bikeForm.rider.riders[0].person.title',\r\n\t\t'policyHolders.0': {},\r\n\t\t'policyHolders.0.contact.gender': '=_input.bikeForm.rider.gender',\r\n\t\t'policyHolders.0.contact.dateOfBirth':\r\n\t\t\t'=_input.bikeForm.rider.dateOfBirth',\r\n\t\t'policyHolders.0.contact.emailAddress1':\r\n\t\t\t'=_input.bikeForm.yourEmail.email',\r\n\t\t'policyHolders.0.contact.primaryAddress': '=_addressSearch',\r\n\t\t'policyHolders.0.contact.contactType':\r\n\t\t\t'=_input.bikeForm.getStarted.personOrCompany',\r\n\r\n\t\tpolicyAddress: '=_addressSearch',\r\n\t\t'policyAddress.addressType': 'postal',\r\n\r\n\t\temail: '=_input.email',\r\n\t\tcampaignCode: '=_input.bikeForm.promotionalCode.promotionalCode',\r\n\t\tmainContactAddress: '=_addressSearch-main-contact',\r\n\t\tpostalAddress: '=_addressSearch-postal-address'\r\n\t};\r\n\r\n\t// region Step 1\r\n\tfunction updateIsMotorRegistered(transformedRequest) {\r\n\t\ttry {\r\n\t\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\t\tif (bike.coverType === 'fireandtheft') {\r\n\t\t\t\tbike.isMotorRegistered = false;\r\n\t\t\t}\r\n\t\t\tif (bike.isMotorRegistered === undefined) {\r\n\t\t\t\tbike.isMotorRegistered = true;\r\n\t\t\t}\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyHolderPrimaryAddress(transformedRequest) {\r\n\t\ttry {\r\n\t\t\tvar policyHolder = transformedRequest.policyHolders[0];\r\n\r\n\t\t\tif (!!policyHolder.contact.primaryAddress) {\r\n\t\t\t\tpolicyHolder.contact.primaryAddress.addressType = 'residential';\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.policyHolders[0] = policyHolder;\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction findYoungestRider(riders) {\r\n\t\tvar youngest = null;\r\n\t\triders.forEach(function(rider) {\r\n\t\t\tif (!youngest) {\r\n\t\t\t\tyoungest = rider;\r\n\t\t\t} else if (isYounger(rider, youngest)) {\r\n\t\t\t\tyoungest = rider;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tfunction isYounger(rider, otherRider) {\r\n\t\t\treturn (\r\n\t\t\t\tmoment(rider.person.dateOfBirth, 'DD/MM/YYYY') >\r\n\t\t\t\tmoment(otherRider.person.dateOfBirth, 'DD/MM/YYYY')\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn youngest;\r\n\t}\r\n\r\n\tfunction updateModifications(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (!!userInput.bikeForm && !!userInput.bikeForm.modificationsAccessories) {\r\n\t\t\tif (!!userInput.bikeForm.modificationsAccessories.modifications) {\r\n\t\t\t\tvar modifications =\r\n\t\t\t\t\tuserInput.bikeForm.modificationsAccessories\r\n\t\t\t\t\t\t.modificationsTable;\r\n\r\n\t\t\t\tbike.qpyCycleModifications = modifications.map(function(\r\n\t\t\t\t\tmod,\r\n\t\t\t\t\ti\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tmodification: mod.modification.value,\r\n\t\t\t\t\t\tpurchasePrice: mod.modificationValue\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (!!userInput.bikeForm.modificationsAccessories.accessories) {\r\n\t\t\t\tvar accessories =\r\n\t\t\t\t\tuserInput.bikeForm.modificationsAccessories\r\n\t\t\t\t\t\t.accessoriesTable;\r\n\r\n\t\t\t\tbike.qpyMotorcycleAccessories = accessories.map(function(\r\n\t\t\t\t\tacc,\r\n\t\t\t\t\ti\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\taccessory: acc.accessories.value,\r\n\t\t\t\t\t\tpurchasePrice: acc.accessoryValue\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttransformedRequest.motorcycles[0] = bike;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateKilometres(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.kilometres\r\n\t\t) {\r\n\t\t\tbike.motorCycleKilometers =\r\n\t\t\t\tuserInput.bikeForm.bikeDetails.kilometres;\r\n\t\t\ttransformedRequest.motorcycles[0] = bike;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateGarageType(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.locationParked\r\n\t\t) {\r\n\t\t\tbike.garageType = userInput.bikeForm.bikeDetails.locationParked;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.motorcycles[0] = bike;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateFinancier(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.isItFinanced\r\n\t\t) {\r\n\t\t\tbike.isFinanced = userInput.bikeForm.bikeDetails.isItFinanced;\r\n\t\t\tbike.financier =\r\n\t\t\t\tuserInput.bikeForm.bikeDetails.financeWith.value ||\r\n\t\t\t\tuserInput.bikeForm.bikeDetails.financeWith;\r\n\t\t} else {\r\n\t\t\tbike.isFinanced = false;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateDamage(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.existingDamage\r\n\t\t) {\r\n\t\t\tbike.damage = userInput.bikeForm.bikeDetails.existingDamage;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.motorcycles[0] = bike;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateUsage(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.primaryBikeUse\r\n\t\t) {\r\n\t\t\tbike.motorCycleUsage =\r\n\t\t\t\tuserInput.bikeForm.bikeDetails.primaryBikeUse;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.motorcycles[0] = bike;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateMotorcycleInfo(transformedRequest, userInput) {\r\n\t\ttry{\r\n\t\t\tif (\r\n\t\t\t\t!!userInput.bikeForm &&\r\n\t\t\t\t!!userInput.bikeForm.aboutYourBike &&\r\n\t\t\t\t!!userInput.bikeForm.aboutYourBike.regoDetails\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].motorcycleInfo =\r\n\t\t\t\t\tuserInput.bikeForm.aboutYourBike.regoDetails;\r\n\t\t\t} else if (!!userInput.bikeForm.motorcycleInfo) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].motorcycleInfo =\r\n\t\t\t\t\tuserInput.bikeForm.motorcycleInfo;\r\n\t\t\t}\r\n\t\r\n\t\t\tif (!!userInput.bikeForm && \r\n\t\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t\t!!userInput.bikeForm.bikeDetails.businessActivityType) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].businessUsage =\r\n\t\t\t\t\tuserInput.bikeForm.bikeDetails.businessActivityType;\r\n\t\t\t} else if (!!userInput.bikeForm.bikeDetails.commercialActivityType) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].commercialUsage =\r\n\t\t\t\t\tuserInput.bikeForm.bikeDetails.commercialActivityType;\r\n\t\t\t}\r\n\t\t} catch(ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\t\t\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// endregion\r\n\r\n\t// region Step 2\r\n\tfunction updateRiders(transformedRequest, userInput) {\r\n\t\ttransformedRequest.motorcycles[0].riders = [];\r\n\t\tif (!!userInput.bikeForm && !!userInput.bikeForm.rider) {\r\n\t\t\tif (!!userInput.bikeForm.rider.riders) {\r\n\t\t\t\tuserInput.bikeForm.rider.riders.forEach(function(rider) {\r\n\t\t\t\t\trider.person.contactType = 'person';\r\n\t\t\t\t\trider.person.prefix = rider.person.title;\r\n\t\t\t\t\trider.person.primaryAddress =\r\n\t\t\t\t\t\ttransformedRequest.mainContactAddress !== null\r\n\t\t\t\t\t\t\t? transformedRequest.mainContactAddress\r\n\t\t\t\t\t\t\t: transformedRequest.policyAddress;\r\n\r\n\t\t\t\t\t//region yearsLicenced\r\n\t\t\t\t\trider.yearsLicenced = rider.yearsHeld;\r\n\t\t\t\t\tswitch (rider.yearsHeld) {\r\n\t\t\t\t\t\tcase 'lessThan_1':\r\n\t\t\t\t\t\t\trider.yearsLicenced = '0';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'greaterThan_5':\r\n\t\t\t\t\t\t\trider.yearsLicenced = '6';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\trider.yearsLicenced = rider.yearsHeld;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t// region riderHistory\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\trider.threeYears_accidentsClaims &&\r\n\t\t\t\t\t\trider.threeYears_accidentsClaimsDetails.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\trider.threeYears_accidentsClaims = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelled &&\r\n\t\t\t\t\t\trider\r\n\t\t\t\t\t\t\t.threeYears_restrictedSuspendedDisqualifiedCancelledDetails\r\n\t\t\t\t\t\t\t.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelled = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\trider.fiveYears_chargedOrConvicted &&\r\n\t\t\t\t\t\trider.fiveYears_chargedOrConvictedDetails.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\trider.fiveYears_chargedOrConvicted = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\trider.hasClaim = rider.threeYears_accidentsClaims;\r\n\t\t\t\t\trider.hasConviction = rider.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\trider.hasLostLicence =\r\n\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\t\t\t\t\trider.riderHistory = [];\r\n\r\n\t\t\t\t\tif (rider.threeYears_accidentsClaims) {\r\n\t\t\t\t\t\trider.riderHistory = rider.riderHistory.concat(\r\n\t\t\t\t\t\t\trider.threeYears_accidentsClaimsDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelled\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\trider.riderHistory = rider.riderHistory.concat(\r\n\t\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (rider.fiveYears_chargedOrConvicted) {\r\n\t\t\t\t\t\trider.riderHistory = rider.riderHistory.concat(\r\n\t\t\t\t\t\t\trider.fiveYears_chargedOrConvictedDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trider.riderHistory.forEach(function(rh) {\r\n\t\t\t\t\t\trh.pattern = {\r\n\t\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\trh.pattern.publicID = rh.description.publicID;\r\n\t\t\t\t\t\trh.pattern.description = rh.description.label;\r\n\t\t\t\t\t\trh.pattern.code = rh.description.code;\r\n\t\t\t\t\t\trh.pattern.filter1 = rh.description.filter1;\r\n\r\n\t\t\t\t\t\trh.month = rh.month.value.toLowerCase();\r\n\t\t\t\t\t\trh.year = rh.year.value;\r\n\r\n\t\t\t\t\t\tdelete rh.description;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t// region current insurer\r\n\t\t\t\t\tif (!!rider.previousInsurer) {\r\n\t\t\t\t\t\trider.currentInsurer = rider.previousInsurer;\r\n\r\n\t\t\t\t\t\tdelete rider.previousInsurer;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// endregion\r\n\r\n\t\t\t\t\ttransformedRequest.motorcycles[0].riders.push({\r\n\t\t\t\t\t\trider: rider\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// endregion\r\n\r\n\t\t\t\t\t// region motorcycle club\r\n\t\t\t\t\tif (!!rider.isMemberOfClub && rider.motorcycleClub) {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].isMemberOfClub =\r\n\t\t\t\t\t\t\trider.isMemberOfClub;\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].motorcycleClub =\r\n\t\t\t\t\t\t\trider.motorcycleClub;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttransformedRequest.motorcycles[0].riders[0].riderUsage = 'main';\r\n\t\t\t}\r\n\r\n\t\t\t// licensed to ride\r\n\t\t\ttransformedRequest.motorcycles[0].riders[0].licensedToRide =\r\n\t\t\t\tuserInput.bikeForm.rider.riders[0].licensedToRide;\r\n\r\n\t\t\t// is main rider\r\n\t\t\ttransformedRequest.motorcycles[0].isTheMainRider =\r\n\t\t\t\tuserInput.bikeForm.rider.riders[0].isTheMainRider;\r\n\t\t} else {\r\n\t\t\ttransformedRequest.motorcycles[0].riders = [\r\n\t\t\t\t{\r\n\t\t\t\t\triderUsage: 'main'\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyHolders(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar bikeForm = userInput.bikeForm,\r\n\t\t\t\tmainPolicyHolder = bikeForm.mainPolicyHolder,\r\n\t\t\t\tcompanyDetails = bikeForm.aboutCompany,\r\n\t\t\t\tmainPolicyHolderContact = bikeForm.mainPolicyHolderContact,\r\n\t\t\t\triders = transformedRequest.motorcycles[0].riders;\r\n\r\n\t\t\t// region mainPolicyHolder\r\n\t\t\tif (!!mainPolicyHolder) {\r\n\t\t\t\tvar policyHolders = [];\r\n\t\t\t\tif (!!mainPolicyHolderContact) {\r\n\t\t\t\t\t// set primary address\r\n\t\t\t\t\tif (!!mainPolicyHolderContact.address) {\r\n\t\t\t\t\t\tmainPolicyHolderContact.primaryAddress =\r\n\t\t\t\t\t\t\ttransformedRequest.mainContactAddress !== null\r\n\t\t\t\t\t\t\t\t? transformedRequest.mainContactAddress\r\n\t\t\t\t\t\t\t\t: transformedRequest.motorcycles[0].accountLocation;\r\n\t\t\t\t\t\tdelete mainPolicyHolderContact.address;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tmainPolicyHolder.policyContact = mainPolicyHolderContact;\r\n\r\n\t\t\t\tif (mainPolicyHolder.isMainRiderMainPolicyHolder) {\r\n\t\t\t\t\tvar rider = util.deepClone(\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider\r\n\t\t\t\t\t);\r\n\t\t\t\t\tObject.extend(mainPolicyHolder, rider.person);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpolicyHolders.push(mainPolicyHolder);\r\n\t\t\t\tif (\r\n\t\t\t\t\tbikeForm.additionalPolicyHolders &&\r\n\t\t\t\t\tbikeForm.additionalPolicyHolders.policyHolders\r\n\t\t\t\t) {\r\n\t\t\t\t\tpolicyHolders = policyHolders.concat(\r\n\t\t\t\t\t\tbikeForm.additionalPolicyHolders.policyHolders\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpolicyHolders.forEach(function(policyHolder, index) {\r\n\t\t\t\t\tvar contact = util.deepClone(policyHolder);\r\n\t\t\t\t\tif (!transformedRequest.policyHolders[index])\r\n\t\t\t\t\t\ttransformedRequest.policyHolders[index] = {};\r\n\r\n\t\t\t\t\tvar transformedContact =\r\n\t\t\t\t\t\ttransformedRequest.policyHolders[index];\r\n\t\t\t\t\tif (!contact.contactType) contact.contactType = 'person';\r\n\r\n\t\t\t\t\tcontact.prefix = contact.title;\r\n\t\t\t\t\tif (contact.policyContact) {\r\n\t\t\t\t\t\tObject.extend(contact, contact.policyContact);\r\n\t\t\t\t\t\tif (contact.primaryPhone == 'mobile')\r\n\t\t\t\t\t\t\tcontact.cellPhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\t\telse if (contact.primaryPhone == 'home')\r\n\t\t\t\t\t\t\tcontact.homePhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\t\telse if (contact.primaryPhone == 'work')\r\n\t\t\t\t\t\t\tcontact.workPhone = contact.primaryPhoneNumber;\r\n\r\n\t\t\t\t\t\tdelete contact.policyContact;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!contact.primaryAddress)\r\n\t\t\t\t\t\tcontact.primaryAddress = util.clone(\r\n\t\t\t\t\t\t\ttransformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t\t\t\t.primaryAddress\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t// region driving history\r\n\t\t\t\t\tcontact.hasClaim = contact.threeYears_accidentsClaims;\r\n\t\t\t\t\tcontact.hasConviction = contact.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tcontact.hasLostLicence =\r\n\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.threeYears_accidentsClaims &&\r\n\t\t\t\t\t\tcontact.threeYears_accidentsClaimsDetails.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.threeYears_accidentsClaims = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelled &&\r\n\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t.threeYears_restrictedSuspendedDisqualifiedCancelledDetails\r\n\t\t\t\t\t\t\t.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelled = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.fiveYears_chargedOrConvicted &&\r\n\t\t\t\t\t\tcontact.fiveYears_chargedOrConvictedDetails.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.fiveYears_chargedOrConvicted = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontact.drivingHistory = [];\r\n\r\n\t\t\t\t\tif (contact.threeYears_accidentsClaims) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.threeYears_accidentsClaimsDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelled\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (contact.fiveYears_chargedOrConvicted) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.fiveYears_chargedOrConvictedDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontact.drivingHistory.forEach(function(rh) {\r\n\t\t\t\t\t\trh.riderPattern = {\r\n\t\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\trh.riderPattern.publicID = rh.description.publicID;\r\n\t\t\t\t\t\trh.riderPattern.description = rh.description.label;\r\n\t\t\t\t\t\trh.riderPattern.code = rh.description.code;\r\n\t\t\t\t\t\trh.riderPattern.filter1 = rh.description.filter1;\r\n\r\n\t\t\t\t\t\trh.riderMonth = rh.month.value.toLowerCase();\r\n\t\t\t\t\t\trh.year = parseInt(rh.year.value);\r\n\r\n\t\t\t\t\t\tdelete rh.description;\r\n\t\t\t\t\t\tdelete rh.month;\r\n\t\t\t\t\t\tdelete rh.pattern;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\tif (!transformedContact.contact)\r\n\t\t\t\t\t\ttransformedContact.contact = {};\r\n\t\t\t\t\ttransformedContact.contact.drivingHistory = [];\r\n\t\t\t\t\tObject.extend(transformedContact.contact, contact);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// region rider person\r\n\t\t\t\tif (!!riders[0] && !!riders[0].rider && !!riders[0].rider.person) {\r\n\t\t\t\t\tvar riders = transformedRequest.motorcycles[0].riders;\r\n\r\n\t\t\t\t\triders.forEach(function(rider, index) {\r\n\t\t\t\t\t\t//rider.rider.person.primaryAddress = transformedRequest.policyAddress;\r\n\r\n\t\t\t\t\t\t// first rider\r\n\t\t\t\t\t\tif (index === 0) {\r\n\t\t\t\t\t\t\trider.rider.person.primaryPhone =\r\n\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.primaryPhone;\r\n\r\n\t\t\t\t\t\t\tswitch (mainPolicyHolder.policyContact.primaryPhone) {\r\n\t\t\t\t\t\t\t\tcase 'mobile':\r\n\t\t\t\t\t\t\t\t\trider.rider.person.cellPhone =\r\n\t\t\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.primaryPhoneNumber;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'home':\r\n\t\t\t\t\t\t\t\t\trider.rider.person.homePhone =\r\n\t\t\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.primaryPhoneNumber;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'work':\r\n\t\t\t\t\t\t\t\t\trider.rider.person.workPhone =\r\n\t\t\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.primaryPhoneNumber;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\tthrow new Error(\r\n\t\t\t\t\t\t\t\t\t\t'unknown primaryPhone ' + primaryPhone\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\trider.rider.person.passwordAnswer =\r\n\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.passwordAnswer;\r\n\t\t\t\t\t\t\trider.rider.person.passwordQuestion =\r\n\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.passwordQuestion;\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\trider.rider.person.passwordQuestion ===\r\n\t\t\t\t\t\t\t\t'customer_created_question'\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\trider.rider.person.passwordQuestionStr =\r\n\t\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.passwordQuestionStr;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\t// endregion\r\n\t\t\t} else if (!!companyDetails) {\r\n\t\t\t\tif (!!riders[0] && !!riders[0].rider && !!riders[0].rider.person) {\r\n\t\t\t\t\tvar riders = transformedRequest.motorcycles[0].riders;\r\n\r\n\t\t\t\t\triders.forEach(function(rider) {\r\n\t\t\t\t\t\trider.rider.person.primaryAddress =\r\n\t\t\t\t\t\t\ttransformedRequest.policyAddress;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else if (\r\n\t\t\t\ttransformedRequest.motorcycles[0].riders[0] &&\r\n\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider &&\r\n\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person\r\n\t\t\t) {\r\n\t\t\t\tvar rider = transformedRequest.motorcycles[0].riders[0].rider;\r\n\t\t\t\tvar contact = transformedRequest.policyHolders[0].contact;\r\n\t\t\t\tObject.extend(contact, rider.person);\r\n\t\t\t\tcontact.contactType = 'person';\r\n\t\t\t\tcontact.hasClaim = rider.hasClaim;\r\n\t\t\t\tcontact.hasConviction = rider.hasConviction;\r\n\t\t\t}\r\n\t\t\t// endregion\r\n\r\n\t\t\ttransformedRequest.policyHolders.forEach(function(holder, index) {\r\n\t\t\t\tholder.mainHolder = index === 0;\r\n\t\t\t});\r\n\r\n\t\t\t// var rider = transformedRequest.motorcycles[0].riders[0].rider;\r\n\t\t\t// Object.extend(rider.person, transformedRequest.policyHolders[0]);\r\n\t\t\t// rider.person.emailAddress1 = userInput.mainPolicyHolderContact.emailAddress1;\r\n\r\n\t\t\tif (userInput.email) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.email;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tangular.isDefined(\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.email;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (transformedRequest.policyHolders[0].contact.emailAddress1) {\r\n\t\t\t\t\t\t//use the existing if available\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person\r\n\t\t\t\t\t\t\t.emailAddress1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t//use the existing if available\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact\r\n\t\t\t\t\t.personalContactDetailsMailingPreference\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.personalContactDetailsMailingPreference;\r\n\t\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t.personalContactDetailsMailingPreference;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAccountLocation(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar accountLocation = transformedRequest.motorcycles[0].accountLocation,\r\n\t\t\t\tbikeForm = userInput.bikeForm;\r\n\r\n\t\t\taccountLocation.addressType = 'residential';\r\n\r\n\t\t\tif (!!accountLocation) {\r\n\t\t\t\tif (\r\n\t\t\t\t\t!!bikeForm.getStarted &&\r\n\t\t\t\t\t!!bikeForm.getStarted.personOrCompany &&\r\n\t\t\t\t\tbikeForm.getStarted.personOrCompany === 'company'\r\n\t\t\t\t) {\r\n\t\t\t\t\taccountLocation.addressType = 'business';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].accountLocation = accountLocation;\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAdditionalRiders(transformedRequest, userInput) {\r\n\t\ttry{\r\n\t\t\tvar fromRapidEstimate = !userInput.fromFullQuote,\r\n\t\t\t\trider = userInput.bikeForm.rider,\r\n\t\t\t\triders = rider ? rider.riders : null,\r\n\t\t\t\t/** required for when checking decline on step 1 */\r\n\t\t\t\tyoungRider = null;\r\n\r\n\t\t\tif (!rider) return transformedRequest;\r\n\r\n\t\t\tif (!fromRapidEstimate) youngRider = findYoungestRider(rider.riders);\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].youngestRiderGender = fromRapidEstimate\r\n\t\t\t\t? rider.youngestRiderGender /** value from rapid estimate */\r\n\t\t\t\t: youngRider\r\n\t\t\t\t? youngRider.person.gender\r\n\t\t\t\t: null; /** value from full quote */\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].otherRiderHasProLicense = fromRapidEstimate\r\n\t\t\t\t? rider.provisionalLicence /** value from rapid estimate */\r\n\t\t\t\t: youngRider\r\n\t\t\t\t? youngRider.licenceType == 'provisional'\r\n\t\t\t\t: null; /** value from full path */\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].youngestRiderDOB = fromRapidEstimate\r\n\t\t\t\t? rider.youngestRiderDob\r\n\t\t\t\t: youngRider\r\n\t\t\t\t? youngRider.person.dateOfBirth\r\n\t\t\t\t: null;\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].otherRiderUsageTimes = fromRapidEstimate\r\n\t\t\t\t? rider.numberOfOtherRiders /* value from rapid estimate */\r\n\t\t\t\t: riders.length; /* value from full quote */\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// endregion\r\n\r\n\t// region Step 3\r\n\r\n\t// endregion\r\n\r\n\t// region Step 4\r\n\tfunction updateRegoDetails(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar tellUsYourRegoNumber = userInput.bikeForm.tellUsYourRegoNumber,\r\n\t\t\t\tregoNumber = null;\r\n\r\n\t\t\tif (tellUsYourRegoNumber && tellUsYourRegoNumber.regoNumber) {\r\n\t\t\t\tregoNumber = tellUsYourRegoNumber.regoNumber;\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].registrationNumber = regoNumber;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// endregion\r\n\r\n\tfunction updateCompanyContactDetails(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar policyHolder = util.deepClone(transformedRequest.policyHolders[0]);\r\n\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.getStarted &&\r\n\t\t\t\tuserInput.bikeForm.getStarted.personOrCompany === 'company' &&\r\n\t\t\t\t!!userInput.bikeForm.companyContact &&\r\n\t\t\t\t!!userInput.bikeForm.aboutCompany\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email = userInput.bikeForm.aboutCompany.email;\r\n\r\n\t\t\t\tpolicyHolder = {};\r\n\t\t\t\tpolicyHolder.contact = policyHolder.contact || {};\r\n\t\t\t\tpolicyHolder.contact.abn = userInput.bikeForm.aboutCompany.abn;\r\n\t\t\t\tpolicyHolder.contact.contactType = 'company';\r\n\t\t\t\tpolicyHolder.contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.bikeForm.aboutCompany.email;\r\n\t\t\t\tpolicyHolder.contact.passwordQuestion =\r\n\t\t\t\t\tuserInput.bikeForm.companyContact.passwordQuestion;\r\n\t\t\t\tif (\r\n\t\t\t\t\tpolicyHolder.contact.passwordQuestion ===\r\n\t\t\t\t\t'customerCreatedQuestion'\r\n\t\t\t\t) {\r\n\t\t\t\t\tpolicyHolder.contact.passwordQuestionStr =\r\n\t\t\t\t\t\tuserInput.bikeForm.companyContact.enterAQuestion;\r\n\t\t\t\t}\r\n\t\t\t\tpolicyHolder.contact.passwordAnswer =\r\n\t\t\t\t\tuserInput.bikeForm.companyContact.passwordAnswer;\r\n\t\t\t\tpolicyHolder.contact.hasClaim = false;\r\n\t\t\t\tpolicyHolder.contact.hasConviction = false;\r\n\t\t\t\tpolicyHolder.contact.isJustInsured = false;\r\n\t\t\t\tpolicyHolder.contact.name = userInput.bikeForm.aboutCompany.name;\r\n\t\t\t\tpolicyHolder.contact.primaryAddress =\r\n\t\t\t\t\tuserInput.bikeForm.aboutCompany.companyAddress;\r\n\t\t\t\tpolicyHolder.contact.primaryPhone = 'work';\r\n\t\t\t\tpolicyHolder.contact.workPhone =\r\n\t\t\t\t\tuserInput.bikeForm.aboutCompany.officePhone;\r\n\r\n\t\t\t\t// region Authorised Person\r\n\t\t\t\tvar authorisedPerson = {};\r\n\t\t\t\tauthorisedPerson.contactType = 'person';\r\n\t\t\t\tvar contact = userInput.bikeForm.companyContact;\r\n\r\n\t\t\t\tauthorisedPerson.primaryAddress = contact.address;\r\n\t\t\t\tauthorisedPerson.primaryPhone = contact.primaryPhone;\r\n\t\t\t\tswitch (authorisedPerson.primaryPhone) {\r\n\t\t\t\t\tcase 'mobile':\r\n\t\t\t\t\t\tauthorisedPerson.cellPhone = contact.preferredNumber;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'home':\r\n\t\t\t\t\t\tauthorisedPerson.homePhone = contact.preferredNumber;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'work':\r\n\t\t\t\t\t\tauthorisedPerson.workPhone = contact.preferredNumber;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tthrow new Error('unknown primaryPhone ' + primaryPhone);\r\n\t\t\t\t}\r\n\t\t\t\tauthorisedPerson.dateOfBirth = contact.companyContactDateOfBirth;\r\n\t\t\t\tauthorisedPerson.firstName = contact.companyContactFirstName;\r\n\t\t\t\tauthorisedPerson.lastName = contact.companyContactLastName;\r\n\t\t\t\tauthorisedPerson.gender = contact.companyContactGender;\r\n\t\t\t\tauthorisedPerson.prefix = contact.companyContactTitle;\r\n\t\t\t\tauthorisedPerson.emailAddress1 = contact.companyContactDetailsEmail;\r\n\t\t\t\tauthorisedPerson.primaryAddress =\r\n\t\t\t\t\tcontact.companyContactDetailsAddress;\r\n\r\n\t\t\t\tpolicyHolder.contact.authorisedPersons = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tperson: authorisedPerson\r\n\t\t\t\t\t}\r\n\t\t\t\t];\r\n\r\n\t\t\t\tif (contact.postalOption === false) {\r\n\t\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\t\tcontact.companyContactDetailsPostalAddress;\r\n\t\t\t\t}\r\n\t\t\t\t// endregion\r\n\t\t\t} else {\r\n\t\t\t\tpolicyHolder.contact.contactType =\r\n\t\t\t\t\tuserInput.bikeForm.getStarted.personOrCompany;\r\n\t\t\t\tpolicyHolder.contact.authorisedPersons = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tperson: {\r\n\t\t\t\t\t\t\tcontactType: 'person',\r\n\t\t\t\t\t\t\tprimaryAddress: transformedRequest.policyAddress\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t];\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.policyHolders[0] = policyHolder;\r\n\t\t\ttransformedRequest.policyHolders[0].mainHolder = true;\r\n\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.companyContact &&\r\n\t\t\t\tuserInput.bikeForm.companyContact\r\n\t\t\t\t\t.companyContactDetailsMailingPreference\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\t\tuserInput.bikeForm.companyContact.companyContactDetailsMailingPreference;\r\n\t\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t.companyContactDetailsMailingPreference;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateMotorcycleInsuranceTypeAndAmount(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\ttry {\r\n\t\t\tvar insuredExcessValue = userInput.bikeForm.insuredExcessValue;\r\n\t\t\tif (insuredExcessValue) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].sumInsuredType =\r\n\t\t\t\t\tinsuredExcessValue.comprehensivePref;\r\n\t\t\t\tif (insuredExcessValue.comprehensivePref == 'agreed') {\r\n\t\t\t\t\tif (!!insuredExcessValue.agreedValue) {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].sumInsuredAmount =\r\n\t\t\t\t\t\t\tinsuredExcessValue.agreedValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ttransformedRequest.motorcycles[0].excess.flexiExcessExcess = userInput.bikeForm.insuredExcessValue.flexiExcess;\r\n\t\t\t}\r\n\t\t} catch (ex) { \r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//updates the email\r\n\tfunction updateEmail(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t} else {\r\n\t\t\t\t//set email from maincontact if not available in tellUsABitMore\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// send the campaign code to GW\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.bikeForm.tellUsABitMore.promotionalCode\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.campaignCode =\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.promotionalCode;\r\n\t\t\t}\r\n\t }\r\n\t\tcatch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyAddress(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar postalAddress = storage.getItem('policy-address');\r\n\r\n\t\t\tif (\r\n\t\t\t\tangular.isDefined(userInput.bikeForm.mainPolicyHolderContact) ||\r\n\t\t\t\tangular.isDefined(userInput.bikeForm.companyContact)\r\n\t\t\t) {\r\n\t\t\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar isPostalOption = true;\r\n\t\t\t\t\tif(userInput.bikeForm.getStarted.personOrCompany == 'person'){\r\n\t\t\t\t\t\tisPostalOption = userInput.bikeForm.mainPolicyHolderContact.postalOption;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tisPostalOption =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.companyContact.postalOption;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (Object.keys(postalAddress).length > 0 && !isPostalOption) {\r\n\t\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tdelete transformedRequest.postalAddress;\r\n\t\t\tdelete transformedRequest.mainContactAddress;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(userInput) {\r\n\t\tvar transformedRequest = jsonMapper.transform(\r\n\t\t\tuserInput,\r\n\t\t\tstructureQuoteMapping\r\n\t\t);\r\n\t\ttransformedRequest = updateIsMotorRegistered(transformedRequest);\r\n\t\ttransformedRequest = updatePolicyHolderPrimaryAddress(\r\n\t\t\ttransformedRequest\r\n\t\t);\r\n\t\ttransformedRequest = updateModifications(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateKilometres(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateGarageType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateFinancier(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateDamage(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateUsage(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateMotorcycleInfo(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateRiders(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePolicyHolders(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateAccountLocation(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateAdditionalRiders(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateRegoDetails(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateCompanyContactDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateMotorcycleInsuranceTypeAndAmount(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateEmail(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePolicyAddress(transformedRequest, userInput);\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transposeMonth(monthName) {\r\n\t\tvar months = {\r\n\t\t\tJanuary: '01',\r\n\t\t\tFebruary: '02',\r\n\t\t\tMarch: '03',\r\n\t\t\tApril: '04',\r\n\t\t\tMay: '05',\r\n\t\t\tJune: '06',\r\n\t\t\tJuly: '07',\r\n\t\t\tAugust: '08',\r\n\t\t\tSeptember: '09',\r\n\t\t\tOctober: '10',\r\n\t\t\tNovember: '11',\r\n\t\t\tDecember: '12'\r\n\t\t};\r\n\r\n\t\treturn months[monthName];\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n","function BikeTriggerGoalTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(userInput) {\r\n\t\tvar policyHolder = userInput.policyHolders[0];\r\n\t\tvar address = userInput.policyAddress;\r\n\t\t\r\n\t\tvar request = {\r\n\t\t\tEmail: policyHolder.contact.emailAddress1,\r\n\t\t\tFirstName: policyHolder.contact.firstName,\r\n\t\t\tLastName: policyHolder.contact.lastName,\r\n\t\t\tAddressLine: address.addressLine1,\r\n\t\t\tCity: address.city,\r\n\t\t\tState: address.state,\r\n\t\t\tPostCode: address.postalCode,\r\n\t\t\tCountryCode: \"Australia\",\r\n\t\t\tProduct: \"Bike\",\r\n\t\t\tUserAgent: \"SPA-Bike\"\r\n\t\t};\r\n\t\treturn request;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function HomeCleanRequestTransformer(Util, jsonMapper) {\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\r\n\t\tdelete intermediateRequest.homeForm;\r\n\r\n\t\t// var bike = intermediateRequest.motorcycles[0];\r\n\t\t var policyHolders = intermediateRequest.policyHolders;\r\n\t\t if(policyHolders){\r\n\t\t \tpolicyHolders.forEach(function(holder,idx){\r\n\t\t \t\tif(holder.contact)\r\n\t\t \t\t{\r\n\t\t\t\t\t\t//Address\r\n\t\t\t\t\t\tif(holder.contact.address) delete holder.contact.address;\r\n\r\n\t\t\t\t\t\t//Contact Number\r\n\t\t\t\t\t\tif(holder.contact.contactNumber) delete holder.contact.contactNumber;\r\n\r\n\t\t\t\t\t\t//Phone number items\r\n\t\t\t\t\t\tcleanPolicyHoldersPhoneNumber(holder.contact.primaryPhone,holder.contact);\r\n\r\n\t\t\t\t\t\t//same as postal address object\r\n\t\t\t\t\t\tif(holder.contact.personContactSamePostalAddress!==undefined) delete holder.contact.personContactSamePostalAddress;\r\n\t\t\t\t\t\tif(holder.contact.additionalContactSamePostalAddress!==undefined) delete holder.contact.additionalContactSamePostalAddress;\r\n\r\n\t\t\t\t\t\t//10 years offences objects\r\n\t\t\t\t\t\tif(holder.contact.tenYears_chargedOrConvictedOffences!== undefined) delete holder.contact.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\t\t\tif(holder.contact.tenYears_chargedOrConvictedOffencesDetails!== undefined) delete holder.contact.tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\t\t\tif(holder.contact.dwellingHistory && holder.contact.dwellingHistory.length>0){\r\n\t\t\t\t\t\t\tholder.contact.dwellingHistory.forEach(function(history,idx){\r\n\r\n\t\t\t\t\t\t\t// \tif(history.pattern.label) delete history.pattern.label;\r\n\t\t\t\t\t\t\t// \tif(history.pattern.value) delete history.pattern.value;\r\n\t\t\t\t\t\t\t// \tif(history.pattern.$$hashKey) delete history.pattern.$$hashKey;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(holder.contact.dwellingHistory) delete holder.contact.dwellingHistory;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//Contents from Additional\r\n\t\t\t\t\t\tif(holder.contact._aggregator) delete holder.contact._aggregator;\r\n\t\t\t\t\t\tif(holder.contact._HTMLID) delete holder.contact._HTMLID;\r\n\t\t\t\t\t\tif(holder.contact.$$hashKey) delete holder.contact.$$hashKey;\r\n\r\n\t\t\t\t\t\tif(holder.contact.authorisedPersons\r\n\t\t\t\t\t\t\t&& holder.contact.authorisedPersons!=null\r\n\t\t\t\t\t\t\t&& holder.contact.authorisedPersons.length>0\r\n\t\t\t\t\t\t\t&& holder.contact.authorisedPersons[0].person){\r\n\t\t\t\t\t\t\tif(holder.contact.authorisedPersons[0].person.companyContactSamePostalAddress!==undefined)\r\n\t\t\t\t\t\t\t\tdelete holder.contact.authorisedPersons[0].person.companyContactSamePostalAddress\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// if(holder.contact.dateOfBirth!==undefined)\r\n\t\t\t\t\t\t// \tdelete holder.contact.dateOfBirth;\r\n\t\t\t\t\t\t// if(holder.contact.hasConviction!==undefined)\r\n\t\t\t\t\t\t// \tdelete holder.contact.hasConviction;\r\n\r\n\t\t\t\t\t\t// if(holder.contact.dwellingHistory!==undefined)\r\n\t\t\t\t\t\t// \tdelete holder.contact.dwellingHistory;\r\n\t\t \t\t}\r\n\r\n\t\t \t});\r\n\t\t }\r\n\r\n\t\t delete intermediateRequest.dwellings[0].location.enrichment ;\r\n\t\t delete intermediateRequest.policyAddress.enrichment ;\r\n\t\t delete intermediateRequest.policyHolders[0].contact.primaryAddress.enrichment ;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\tfunction cleanPolicyHoldersPhoneNumber(phoneType,contactInfo){\r\n\t\tif(['home','mobile'].indexOf(phoneType)>-1){\r\n\t\t\tif(contactInfo.workPhone) { delete contactInfo.workPhone; }\r\n\t\t}\r\n\r\n\t\tif(['work','mobile'].indexOf(phoneType)>-1){\r\n\t\t\tif(contactInfo.homePhone) { delete contactInfo.homePhone; }\r\n\t\t}\r\n\r\n\t\tif(['work','home'].indexOf(phoneType)>-1){\r\n\t\t\tif(contactInfo.cellPhone) { delete contactInfo.cellPhone; }\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function HomeCoverTypeTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(intermediateRequest, coverType, offering) {\r\n\r\n\t\t// intermediateRequest.dwellings[0].coverType = coverType.descriptor;\r\n\t\tintermediateRequest.dwellings[0].offering = (offering.descriptor)?offering.descriptor:offering;\r\n\t\tintermediateRequest.dwellings[0].coverType = coverType;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function HomeDefaultValueRequestTransformer(Util, jsonMapper, userInputRepository, quoteOptions) {\r\n\r\n\tfunction formatDateAndTimeTheGuidewireWay(date, time) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\tvar timeFormatted = '4:00PM' ;\r\n\t\tif ( time )\r\n\t\t\ttimeFormatted = moment().tz(\"Australia/Sydney\").format('h:mma');\r\n\t\treturn Util.stringFormat(format, moment().tz(\"Australia/Sydney\").format('Do MMM YYYY') , timeFormatted) ;\r\n\t}\r\n\r\n\tvar staticValuesMapping = {\r\n\t\tquoteType:'Full',\r\n\t\tperiodStartDate: function() { return moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY')},\r\n\t\tproductCode : 'QPHHome',\r\n\t\tisInsuredsOverTheAge : false,\r\n\t\tisInsuredsRetired: false,\r\n\t\tanyConvictionsQuestion: 'no',\r\n\t\thasPortableContentsClaims: 'no',\r\n\t\tpaymentFrequency: 'everyyear',\r\n\t\temail : \"test@test.com\",\r\n\t\t\"includeFloodCover\" : true, // testing for cordelInfo\r\n\r\n\r\n\t\t\"policyHolders.0.mainHolder\": true,\r\n\t\t\"policyHolders.0.contact.contactType\": \"person\",\r\n\t\t\"policyHolders.0.contact.authorisedPersons.*.person.firstName\": \"An@n\",\r\n\t\t\"policyHolders.0.contact.authorisedPersons.*.person.lastName\": \"An@nym@us\",\r\n\t\t\"policyHolders.0.contact.authorisedPersons.*.person.dateOfBirth\": \"07/07/2000\",\r\n\t\t\"policyHolders.*.contact.passwordQuestionStr\" : '',\r\n\t\t\"policyHolders.*.contact.passwordQuestion\" : '',\r\n\t\t\"policyHolders.*.contact.passwordAnswer\" : '',\r\n\t\t\"policyHolders.0.contact.dateOfBirth\" : '07/07/2000',\r\n\t\t\"policyHolders.0.contact.firstName\" : 'An@n',\r\n\t\t\"policyHolders.0.contact.lastName\" : 'An@nym@us',\r\n\r\n\r\n\r\n\t\t\"dwellings.0.buildingType\" : \"house\",\r\n\t\t\"dwellings.0.externalWallMaterial\" : \"aluminium\",\r\n\t\t\"dwellings.0.homeOccupancy\" : \"own_live\",\r\n\t\t\"dwellings.0.coverType\" : \"building_and_contents\",\r\n\t\t\"dwellings.0.buildingSumInsured\" : \"200000\",\r\n\t\t\"dwellings.0.contentSumInsured\" : \"20000\",\r\n\t\t\"dwellings.0.offering\" : \"QPHStandardOffering\",\r\n\t\t\"dwellings.0.hasGeneralPortableContents\" : false,\r\n\t\t\"dwellings.0.portableCoverCountry\" : \"australia_nz\",\r\n\t\t\"dwellings.0.hasPortableContentsHomeAway\" : false,\r\n\r\n\r\n\t\t\"dwellings.0.policyOption\" : {},\r\n\t\t\"dwellings.0.policyOption.isBuildingAccidentalDamage\" : true,\r\n\t\t\"dwellings.0.policyOption.isContentsAccidentalDamage\" : true,\r\n\t\t\"dwellings.0.policyOption.isContentsDomesticWorkerComp\" : false,\r\n\t\t\"dwellings.0.policyOption.isContentsStoredAway\" : false,\r\n\t\t\"dwellings.0.policyOption.specifyCycleEquipment\" : false,\r\n\t\t\"dwellings.0.policyOption.isContentsCycleCover\" : false,\r\n\t\t// \"dwellings.0.isOwnersInsureUnits\":\"no\",\r\n\t\t\"dwellings.0.isSubUrbanLocated\" : true,\r\n\t\t\"dwellings.0.isRenovated\" : false,\r\n\t\t\"dwellings.0.isIncomeGenerated\" : false,\r\n\t\t\"dwellings.0.isMortgagePresent\" : false,\r\n\t\t\"dwellings.0.isUnrelatedPeople\" : false,\r\n\t\t\"dwellings.0.isUnitAboveGround\" : \"no\",\r\n\t\t\"dwellings.0.isPortionAboveGround\" : \"no\",\r\n\t\t\"dwellings.0.isCommunitySurrounded\" : true,\r\n\t\t\"dwellings.0.hasSpecifiedPortableContList\" : false,\r\n\t\t\"dwellings.0.hasIndividualContents\" : false,\r\n\t\t\"dwellings.0.homeLevels\" : '1',\r\n\t\t\"dwellings.0.isGroundLevelElevated\" : \"no\",\r\n\t\t\"dwellings.0.roofMaterial\" : \"concretetiles\",\r\n\t\t\"dwellings.0.yearsContInsurance\" : \"noPreviousInsurance\",\r\n\t\t\"dwellings.0.hasEntertainmentEquipment\" : false,\r\n\t\t\"dwellings.0.hasWorksArt\" : false,\r\n\t\t\"dwellings.0.homeBuiltYear\" : \"2000\",\r\n\t\t\"dwellings.0.isWaterTight\" : true, // no data\r\n\t\t\"dwellings.0.renovationCost\" : 0,\r\n\r\n\t\t\"dwellings.0.locationProperty\" : {},\r\n\t\t\"dwellings.0.locationProperty.knowHomeSize\" : false,\r\n\t\t\"dwellings.0.locationProperty.hasDuctedAirConditioning\" : false,\r\n\t\t\"dwellings.0.locationProperty.hasInGroundPool\" : false,\r\n\t\t\"dwellings.0.locationProperty.hasTennisCourt\" : false,\r\n\t\t\"dwellings.0.locationProperty.hasGrannyFlat\" : false,\r\n\t\t\"dwellings.0.locationSecurity\" : {},\r\n\t\t\"dwellings.0.locationSecurity.hasWindowScreenBars\" : false,\r\n\t\t\"dwellings.0.locationSecurity.isGatedCommunity\" : false,\r\n\t\t\"dwellings.0.locationSecurity.hasFixedHomeSafe\" : false,\r\n\t\t\"dwellings.0.locationSecurity.haveSecurityAlarm\" : false,\r\n\t\t\"dwellings.0.locationSecurity.hasWindowKeylocks\" : false,\r\n\t\t\"dwellings.0.locationSecurity.hasDoorSecurityScreen\" : false,\r\n\t\t\"dwellings.0.locationSecurity.hasDoorDeadlocks\" : false,\r\n\t\t\"dwellings.0.locationSecurity.has24HourConcierge\" : false,\r\n\t\t\"dwellings.0.locationSecurity.isSecurityRatedBuilding\" : false,\r\n\r\n\t\t\"dwellings.0.locationProperty.hasSheds\" : false,\r\n\r\n\t\t\"dwellings.0.isCycloneStandardlyBuilt\": 'yes',\r\n\t\t\"status\" : \"Draft\",\r\n\t\t\"documentDeliveryMethod\": 'email',\r\n\t\t\"displayStatus\": 'Draft',\r\n\t\t\"periodStartDateTimeAEDT\": formatDateAndTimeTheGuidewireWay(moment(), moment()),\r\n\t\t\"periodEndDateTimeAEDT\" : formatDateAndTimeTheGuidewireWay(moment().add(1,'years')),\r\n\t\t\"channel\": 'portal',\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar staticValuesMappingNew = ApplyDefaultExcess(userInput);\r\n\t\tvar transformedRequest = jsonMapper.setDefault(userInput, staticValuesMappingNew) ;\r\n\t\tconsole.log('transformedRequest', transformedRequest);\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t\r\n\tfunction ApplyDefaultExcess(userInput) {\r\n\t\tvar staticValuesMappingNew = staticValuesMapping;\r\n\r\n\t\tvar excessValue = quoteOptions.getStateDefaultVoluntaryExcess(userInput.policyAddress.state);\r\n\t\tif(excessValue != null){\r\n\t\t\tvar tempObj = {\"dwellings.0.excess.voluntaryExcess\": excessValue};\r\n\t\t\tstaticValuesMappingNew = Object.extend(staticValuesMapping, tempObj);\r\n\t\t}\r\n\r\n\t\tvar portableExcessValue = quoteOptions.getStateDefaultVoluntaryExcess(userInput.policyAddress.state, 1);\r\n\t\tif(portableExcessValue != null){\r\n\t\t\tvar tempObj2 = {\"dwellings.0.excess.portableContentVoluntaryExcess\": portableExcessValue};\r\n\t\t\tstaticValuesMappingNew = Object.extend(staticValuesMappingNew, tempObj2);\r\n\t\t}\r\n\t\t\r\n\t\treturn staticValuesMappingNew;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function HomeFormatConverterTransformer(Util, jsonMapper) {\r\n\r\n\tfunction convertDateAndTimeTheGuidewireWay(dateTime) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\treturn Util.stringFormat(format, dateTime.format('Do MMM YYYY') , dateTime.format('h:mma')) ;\r\n\t}\r\n\r\n\tfunction convertDate(dateString) {\r\n\t\tvar date = moment(dateString, 'DD/MM/YYYY') ;\r\n\t\tvar formattedDate = date.format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\t// throw 'date format exception formatting ' + dateString ;\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertDateToGWTimeZone(dateString) {\r\n\t\tvar formattedDate = moment(dateString,'DDMMYYYY').tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\treturn null;\r\n\t}\r\n\t \r\n\tfunction getMonthString(monthInFigure){\r\n\t\tif(monthInFigure){\r\n\t\t\tvar objDate = new Date(\"2000-\"+String(monthInFigure)+\"-01\");\r\n\t \treturn objDate.toLocaleString(\"en-au\", { month: \"long\" });\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tfunction getMonthNumber(monthInString){\r\n\t\tif(monthInString){\r\n\t\t\tvar monthObj = {\r\n\t\t\t\t'January': '01',\r\n\t\t\t\t'February': '02',\r\n\t\t\t\t'March': '03',\r\n\t\t\t\t'April': '04',\r\n\t\t\t\t'May': '05',\r\n\t\t\t\t'June': '06',\r\n\t\t\t\t'July': '07',\r\n\t\t\t\t'August': '08',\r\n\t\t\t\t'September': '09',\r\n\t\t\t\t'October': '10',\r\n\t\t\t\t'November': '11',\r\n\t\t\t\t'December': '12',\r\n\t\t\t}\r\n\r\n\t\t\treturn monthObj[monthInString];\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertGender(gender) {\r\n\t\tvar gc = {\r\n\t\t\tmale : 'M',\r\n\t\t\tfemale : 'F',\r\n\t\t\tintersex : 'I',\r\n\t\t};\r\n\r\n\t\treturn gc[gender] ;\r\n\t}\r\n\r\n\tfunction convertFalsyToUnknown(value) {\r\n\r\n\t\tif ( value === null || value === undefined)\r\n\t\t\treturn 'unknown';\r\n\r\n\t\tif(value === 'unknown')\r\n\t\t\treturn 'unknown';\r\n\r\n\t\treturn convertBooleanToYesNo(value) ;\r\n\t}\r\n\r\n\tfunction convertBooleanToYesNo(value) {\r\n\t\treturn !!value ? 'yes' : 'no' ;\r\n\t}\r\n\r\n\tfunction convertStringToInt(value) {\r\n\t\treturn parseInt(value);\r\n\t}\r\n\r\n\tfunction convertIntToString(value) {\r\n\t\treturn value.toString();\r\n\t}\r\n\r\n\tfunction convertHomelevels(value){\r\n\t\tif(value=='3+'){\r\n\t\t\tvalue = '3Plus';\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\tfunction convertNumberToStringPattern(value, pattern, zeroValue) {\r\n\t\tvar stringValue = value > 0 ? Util.stringFormat(pattern, value) : zeroValue ;\r\n\t\treturn ( value == 0 || value > 1) ? stringValue + 's' : stringValue ;\r\n\t}\r\n\r\n\tfunction convertNumberToStringPatternZeroSingular(value, pattern, zeroValue) {\r\n\t\tvar stringValue = value > 0 ? Util.stringFormat(pattern, value) : zeroValue ;\r\n\t\treturn (value > 1) ? stringValue + 's' : stringValue ;\r\n\t}\r\n\r\n\tvar convertValueMapping = {\r\n\t\t'dwellings.*.isUnitAboveGround' : convertBooleanToYesNo,\r\n\t\t'dwellings.*.isPortionAboveGround' : convertBooleanToYesNo,\r\n\t\t'dwellings.*.isCycloneStandardlyBuilt' : convertBooleanToYesNo,\r\n\t\t'isInsuredsRetired': convertBooleanToYesNo,\r\n\r\n\t\t\"dwellings.*.homeLevels\": convertHomelevels,\r\n\t\t\"dwellings.*.locationSecurity.hasDoorDeadlocks\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasDoorSecurityScreen\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasWindowKeylocks\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasWindowRollerShutter\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasWindowScreenBars\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.isGatedCommunity\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasFixedHomeSafe\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.isSecurityRatedBuilding\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.haveSecurityAlarm\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.has24HourConcierge\" : convertBooleanToYesNo,\r\n\r\n\r\n\t\t\"policyHolders.*.contact.dateOfBirth\" : convertDate,\r\n\t\t\"policyHolders.*.contact.dwellingHistory.*.eventMonth\":getMonthNumber,\r\n\t\t\"policyHolders.*.contact.gender\":convertGender,\r\n\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.gender\":convertGender,\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.dateOfBirth\":convertDate,\r\n\r\n\r\n\r\n\t\t/**\r\n\t\t* Guide Wire formatting for bedrooms, balconies and etc ...\r\n\t\t* bring popcorn\r\n\r\n\t\tfor none of each :\r\n\r\n\t\tnumberOfBalconies:\"no_balconies_or_decks\"\r\n\t\tnumberOfBedrooms:\"1_item\"\r\n\t\tnumberOfCarports:\"no_carports\"\r\n\t\tnumberOfGarages:\"no_garages\"\r\n\t\tnumberOfVerandahs:\"no_verandahs\"\r\n\r\n\t\tFor 1 of each :\r\n\r\n\t\tnumberOfBalconies:\"1_item\"\r\n\t\tnumberOfBedrooms:\"1_item\"\r\n\t\tnumberOfCarports:\"carport_for_1_car\"\r\n\t\tnumberOfGarages:\"garage_for_1_car\"\r\n\t\tnumberOfVerandahs:\"1_item\"\r\n\r\n\t\tFor 2 of each :\r\n\r\n\t\tnumberOfBalconies:\"2_items\"\r\n\t\tnumberOfBedrooms:\"2_items\"\r\n\t\tnumberOfCarports:\"carport_for_2_cars\"\r\n\t\tnumberOfGarages:\"garage_for_2_cars\"\r\n\t\tnumberOfVerandahs:\"2_items\"\r\n\r\n\t\tfor max of each :\r\n\r\n\t\tnumberOfBalconies:\"6_items\"\r\n\t\tnumberOfBedrooms:\"9_items\"\r\n\t\tnumberOfCarports:\"carport_for_6_cars\"\r\n\t\tnumberOfGarages:\"garage_for_6_cars\"\r\n\t\tnumberOfVerandahs:\"6_items\"\r\n\t\t*/\r\n\t\t\"dwellings.0.locationProperty.numberOfBedrooms\" : function(value) {return convertNumberToStringPattern(value, '{0}_item', '1_item')},\r\n\t\t\"dwellings.0.locationProperty.numberOfBalconies\" : function(value) {return convertNumberToStringPattern(value, '{0}_item', 'no_balconies_or_deck')},\r\n\t\t\"dwellings.0.locationProperty.numberOfVerandahs\" : function(value) {return convertNumberToStringPattern(value, '{0}_item', 'no_verandah')},\r\n\t\t\"dwellings.0.locationProperty.numberOfCarports\" : function(value) {return convertNumberToStringPattern(value, 'carport_for_{0}_car', 'no_carport')},\r\n\t\t\"dwellings.0.locationProperty.numberOfGarages\" : function(value) {return convertNumberToStringPattern(value, 'garage_for_{0}_car', 'no_garage')},\r\n\t\t\"dwellings.0.locationProperty.numberOfLargeSheds\" : function(value) {return convertNumberToStringPatternZeroSingular(value, '{0}_item', '0_item')},\r\n\t\t\"dwellings.0.locationProperty.numberOfSmallSheds\" : function(value) {return convertNumberToStringPatternZeroSingular(value, '{0}_item', '0_item')},\r\n\t\t\"periodStartDate\": convertDateToGWTimeZone,\r\n\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.convert(intermediateRequest, convertValueMapping) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function HomePolicyHolderHandler(Util, publicIDTransformer) {\r\n\r\n\t\r\n\tfunction handle(quoteRequest, userInput) {\r\n\t\t\r\n\t\t\r\n\t\treturn quoteRequest;\r\n\t}\r\n\r\n return {\r\n\t\thandle: handle\r\n\t}\r\n};","\"use strict\";\r\n\r\nfunction HomePublicIDTransformer(Util, jsonMapper, serviceResponseRepository) {\r\n\tvar currentResponse = null ;\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat('portal:{0}-{1}', moduleName, Util.generateRandomString(15) );\r\n\t}\r\n\r\n\tfunction hash(value) {\r\n\t\treturn md5(value);\r\n\t}\r\n\r\n\tfunction fetchFromPreviousResponse(path) {\r\n\t\tif ( currentResponse )\r\n\t\t\treturn Util.findHierarchyStringInObject(currentResponse, path , '.') ;\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tfunction convertPublicID(path, moduleName) {\r\n\t\tif ( currentResponse ) {\r\n\t\t\tvar lastPublicID = fetchFromPreviousResponse(path) ;\r\n\t\t\tif ( lastPublicID )\r\n\t\t\t\treturn lastPublicID;\r\n\t\t}\r\n\r\n\t\treturn forgePublicId(moduleName) ;\r\n\t}\r\n\r\n\r\n\tvar moduleNameMapping = {\r\n\t\t'policyHolders' : 'PolicyHolder',\r\n\t\t'policyHoldersContact' : 'PolicyHolder',\r\n\t\t'policyAddress' : 'Address',\r\n\t\t\"dwellings\":\"QPHDwelling\", // AbstractQPHDwelling\r\n\t\t\"mortgagees\":\"QPHMortgagee\",\r\n\t\t\"cycles\":\"QPHCycle\",\r\n\t\t\"cycleEquipments\":\"QPHCycleEquipment\",\r\n\t\t\"pattern\": \"qbePattern\",\r\n\t\t\"dwellingHistory\": \"QPHDwellingHistory\",\r\n\t\t\"dwellingHistories\": \"QPHDwellingHistoryDTO\"\r\n\t};\r\n\r\n\tvar publicIDTransformationMapping = {\r\n\t\t'policyAddress.publicID' : function() { return forgePublicId(moduleNameMapping.policyAddress) },\r\n\t\t'policyHolders.*.publicID' : function() { return forgePublicId(moduleNameMapping.policyHolders) },\r\n\t\t'policyHolders.*.contact.dwellingHistory.*.publicID' : function() { return forgePublicId(moduleNameMapping.dwellingHistory) },\r\n\t\t\"dwellings.0.publicID\": function() { return forgePublicId(moduleNameMapping.dwellings)},\r\n\t\t\"dwellings.0.location.publicID\": function() { return forgePublicId(moduleNameMapping.policyAddress)},\r\n\t\t\"policyHolders.*.contact.publicID\": function() { return forgePublicId(moduleNameMapping.policyHoldersContact)},\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.publicID\": function() { return forgePublicId(moduleNameMapping.policyHoldersContact)},\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.primaryAddress.publicID\": function() { return forgePublicId(moduleNameMapping.policyAddress)},\r\n\t\t\"policyHolders.*.contact.primaryAddress.publicID\": function() { return forgePublicId(moduleNameMapping.policyAddress)},\r\n\t\t\"dwellings.*.mortgagees.*.publicID\":function() { return forgePublicId(moduleNameMapping.mortgagees)},\r\n\t\t\"dwellings.*.policyOption.cycles.*.publicID\":function() { return forgePublicId(moduleNameMapping.cycles)},\r\n\t\t\"dwellings.*.policyOption.cycleEquipments.*.publicID\":function() { return forgePublicId(moduleNameMapping.cycleEquipments)},\r\n\t\t\"dwellings.*.dwellingHistories.*.publicID\":function() { return forgePublicId(moduleNameMapping.dwellingHistories)},\r\n\t};\r\n\r\n\tvar publicIDConversionMapping = {\r\n\t\t'policyAddress.publicID' : function(val) { return convertPublicID('policyAddress.publicID', moduleNameMapping.policyAddress);} ,\r\n\t\t'policyHolders.*.publicID' : function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.publicID', moduleNameMapping.policyHolders);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.dwellingHistory.*.publicID' : function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.dwellingHistory.' + mappedValueStarIndices[1] + '.publicID' , moduleNameMapping.dwellingHistory);\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.publicID\": function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.authorisedPersons.'+ mappedValueStarIndices[1] + '.person.publicID' , moduleNameMapping.policyHoldersContact);\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.primaryAddress.publicID\": function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.authorisedPersons.'+ mappedValueStarIndices[1] + '.person.primaryAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t\"dwellings.0.publicID\": function(val) { return convertPublicID('dwellings.0.publicID', moduleNameMapping.dwellings);} ,\r\n\t\t\"dwellings.0.location.publicID\": function(val) { return convertPublicID('dwellings.0.location.publicID', moduleNameMapping.policyAddress);},\r\n\t\t'policyHolders.*.contact.publicID' : function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.publicID', moduleNameMapping.policyHoldersContact);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID' : function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.primaryAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'dwellings.*.mortgagees.*.publicID':function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('dwellings.' + mappedValueStarIndices[0] + '.mortgagees.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.mortgagees);\r\n\t\t},\r\n\t\t'dwellings.*.policyOption.cycles.*.publicID':function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('dwellings.' + mappedValueStarIndices[0] + '.policyOption.cycles.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.cycles);\r\n\t\t},\r\n\t\t'dwellings.*.policyOption.cycleEquipments.*.publicID':function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('dwellings.' + mappedValueStarIndices[0] + '.policyOption.cycleEquipments.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.cycleEquipments);\r\n\t\t},\r\n\t\t'dwellings.*.dwellingHistories.*.publicID':function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('dwellings.' + mappedValueStarIndices[0] + '.dwellingHistories.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.dwellingHistories);\r\n\t\t},\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, response, quickQuote) {\r\n\r\n\t\tcurrentResponse = response ;\r\n\r\n\t\tvar transformedRequest = intermediateRequest;\r\n\t\tif ( !currentResponse || quickQuote )\r\n\t\t \ttransformedRequest = jsonMapper.transform(intermediateRequest, publicIDTransformationMapping) ;\r\n\t\telse\r\n\t\t \ttransformedRequest = jsonMapper.convert(intermediateRequest, publicIDConversionMapping) ;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function HomeQuoteResultModel(quoteResultResponse) {\r\n\tthis.isCoverAvailable = quoteResultResponse.quoteResult.totalPremium !== undefined ;\r\n\tthis.coverType = quoteResultResponse.dwellings[0].coverType;\r\n\tthis.quoteResult = quoteResultResponse.quoteResult;\r\n\tthis.paymentPlan = quoteResultResponse.paymentPlan;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.totalFSL = quoteResultResponse.quoteResult.totalFSL ;\r\n\tthis.totalGST = quoteResultResponse.quoteResult.totalGST ;\r\n\tthis.totalStampDuty = quoteResultResponse.quoteResult.totalStampDuty ;\r\n\tthis.premiumAfterDiscount = quoteResultResponse.quoteResult.premiumAfterDiscount ;\r\n\tthis.paymentFrequency = quoteResultResponse.paymentPlan ? quoteResultResponse.paymentPlan.paymentFrequency : null ;\r\n\tthis.excess = quoteResultResponse.dwellings[0].excess ;\r\n\tthis.cordelInfo = quoteResultResponse.dwellings[0].cordelInfo ;\r\n\tthis.availableSumInsuredTypes = quoteResultResponse.dwellings[0].availableSumInsuredTypes;\r\n\tthis.offering = quoteResultResponse.dwellings[0].offering;\r\n\tthis.isStandardOffering = this.offering === 'QPHStandardOffering' ; \r\n\tthis.isPrestigeOffering = this.offering === 'QPHPrestigeOffering' ; \r\n\tthis.coverageOptions = quoteResultResponse.dwellings[0].coverageOptions ;\r\n\tthis.response = quoteResultResponse ;\r\n\r\n}\r\n","function HomeRetrieveSavedQuoteResponseTransformer($filter, jsonMapper, Util) {\r\n\t// transform functions\r\n\tvar transformers = {\r\n\t\tcamelcase: function(value) {\r\n\t\t\tif (value) {\r\n\t\t\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tdate: function(dateString) {\r\n\t\t\tvar date = moment(dateString, 'YYYY-MM-DD');\r\n\t\t\treturn date.format('DD/MM/YYYY');\r\n\t\t},\r\n\t\ttoday: function(dateString) {\r\n\t\t\tvar returnDate = '';\r\n\t\t\tif (moment().diff(dateString, 'days') > 0) {\r\n\t\t\t\tvar date = moment();\r\n\t\t\t\treturnDate = date.format('DD/MM/YYYY');\r\n\t\t\t} else {\r\n\t\t\t\tvar date = moment(dateString, 'YYYY-MM-DD');\r\n\t\t\t\treturnDate = date.format('DD/MM/YYYY');\r\n\t\t\t}\r\n\t\t\treturn returnDate;\r\n\t\t},\r\n\t\thasValue: function(value) {\r\n\t\t\tif (value) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tfinanceType: function(financeType) {\r\n\t\t\tswitch (financeType) {\r\n\t\t\t\tcase 'none':\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t},\r\n\t\tconvertGender: function(gender) {\r\n\t\t\tvar gc = {\r\n\t\t\t\tM: 'male',\r\n\t\t\t\tF: 'female',\r\n\t\t\t\tI: 'intersex'\r\n\t\t\t};\r\n\t\t\treturn gc[gender];\r\n\t\t},\r\n\t\tyesNo: function(value) {\r\n\t\t\treturn value == 'yes' ? true : false;\r\n\t\t},\r\n\t\tcheckbox: function(value) {},\r\n\t\tstate: function(state) {\r\n\t\t\tif (state) return state.replace('AU_', '');\r\n\t\t},\r\n\t\tcoverType: function(coverType) {\r\n\t\t\tif (\r\n\t\t\t\tcoverType === 'third_party' ||\r\n\t\t\t\tcoverType === 'third_party_fire_theft'\r\n\t\t\t) {\r\n\t\t\t\treturn 'third_party';\r\n\t\t\t}\r\n\t\t\treturn coverType;\r\n\t\t},\r\n\t\tpurchaseMonthFromMonthYear: function(monthYear) {\r\n\t\t\tif (monthYear) {\r\n\t\t\t\treturn monthYear.split('-')[1];\r\n\t\t\t} else {\r\n\t\t\t\treturn '';\r\n\t\t\t}\r\n\t\t},\r\n\t\tpurchaseYearFromMonthYear: function(monthYear) {\r\n\t\t\tif (monthYear) {\r\n\t\t\t\treturn monthYear.split('-')[0];\r\n\t\t\t} else {\r\n\t\t\t\treturn '';\r\n\t\t\t}\r\n\t\t},\r\n\t\tthirdPartyPref: function(coverType) {\r\n\t\t\tif (coverType === 'comprehensive') {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn coverType;\r\n\t\t},\r\n\t\titemCount: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tno_balconies_or_decks: '0',\r\n\t\t\t\tno_verandahs: '0',\r\n\t\t\t\t'0_item': '0',\r\n\t\t\t\t'1_item': '1',\r\n\t\t\t\t'2_items': '2',\r\n\t\t\t\t'3_items': '3',\r\n\t\t\t\t'4_items': '4',\r\n\t\t\t\t'5_items': '5',\r\n\t\t\t\t'6_items': '6',\r\n\t\t\t\t'7_items': '7',\r\n\t\t\t\t'8_items': '8',\r\n\t\t\t\t'9_items': '9',\r\n\t\t\t\t'10_items': '10',\r\n\t\t\t\t'11_items': '11'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\titemCountGarages: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tno_garages: '0',\r\n\t\t\t\tgarage_for_1_car: '1',\r\n\t\t\t\tgarage_for_2_cars: '2',\r\n\t\t\t\tgarage_for_3_cars: '3',\r\n\t\t\t\tgarage_for_4_cars: '4',\r\n\t\t\t\tgarage_for_5_cars: '5',\r\n\t\t\t\tgarage_for_6_cars: '6'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\titemCountCarPort: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tno_carports: '0',\r\n\t\t\t\tcarport_for_1_car: '1',\r\n\t\t\t\tcarport_for_2_cars: '2',\r\n\t\t\t\tcarport_for_3_cars: '3',\r\n\t\t\t\tcarport_for_4_cars: '4',\r\n\t\t\t\tcarport_for_5_cars: '5',\r\n\t\t\t\tcarport_for_6_cars: '6'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\tcycleNameMapping: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tmountain_bike: 'Mountain Bike',\r\n\t\t\t\troad_bike: 'Road Bike',\r\n\t\t\t\tbmx: 'BMX',\r\n\t\t\t\ttrack_bike: 'Track Bike',\r\n\t\t\t\tmotorised_bike: 'Motorised Bike',\r\n\t\t\t\taccessories: 'Accessories',\r\n\t\t\t\tcustom_parts: 'Custom parts',\r\n\t\t\t\ttravel_case: 'Travel case',\r\n\t\t\t\tcycling_apparel: 'Cycling Apparel',\r\n\t\t\t\tcycling_computer: 'Cycling Computer'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\tcoverMapping: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tbuilding_only: 'Building only',\r\n\t\t\t\tcontents_only: 'Contents only',\r\n\t\t\t\tbuilding_and_contents: 'Building and Contents',\r\n\t\t\t\tmulti_item_loss: 'Multi Item Loss',\r\n\t\t\t\tbicycle: 'Bicycle',\r\n\t\t\t\tcamping_equipment: 'Camping Equipment',\r\n\t\t\t\tclothing: 'Clothing',\r\n\t\t\t\tcollection: 'Collection',\r\n\t\t\t\tcomputer_equipment: 'Computer Equipment',\r\n\t\t\t\teye_ware: 'Eye ware',\r\n\t\t\t\tfirearm: 'Firearm',\r\n\t\t\t\tgps_device: 'GPS Device',\r\n\t\t\t\thearing_aid: 'Hearing Aid',\r\n\t\t\t\tin_vault_item: 'In Vault Item',\r\n\t\t\t\tjewellery: 'Jewellery',\r\n\t\t\t\tmobile_phone: 'Mobile Phone',\r\n\t\t\t\tmusic_games_media: 'Music, Games and Media',\r\n\t\t\t\tpersonal_medical_item: 'Personal Medical Item',\r\n\t\t\t\tpersonal_valuable_item: 'Personal Valuable Item',\r\n\t\t\t\tphotographic_equipment: 'Photographic and Video Equipment',\r\n\t\t\t\tportable_music_instrument: 'Portable musical instrument',\r\n\t\t\t\tprosthetics: 'Prosthetics',\r\n\t\t\t\tother_portable_item: 'Other Portable Item',\r\n\t\t\t\tsporting_equipment: 'Sporting Equipment',\r\n\t\t\t\ttablet: 'Portable Computer Equipment',\r\n\t\t\t\twatch: 'Watch'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\tmonthFromNumber: function(monthNumber) {\r\n\t\t\tvar monthObj = {\r\n\t\t\t\t'01': 'January',\r\n\t\t\t\t'02': 'February',\r\n\t\t\t\t'03': 'March',\r\n\t\t\t\t'04': 'April',\r\n\t\t\t\t'05': 'May',\r\n\t\t\t\t'06': 'June',\r\n\t\t\t\t'07': 'July',\r\n\t\t\t\t'08': 'August',\r\n\t\t\t\t'09': 'September',\r\n\t\t\t\t'10': 'October',\r\n\t\t\t\t'11': 'November',\r\n\t\t\t\t'12': 'December'\r\n\t\t\t};\r\n\r\n\t\t\treturn monthObj[monthNumber];\r\n\t\t}\r\n\t};\r\n\r\n\tfunction transformBuilding(buildingDetails) {\r\n\t\tvar slope = buildingDetails.landSlope;\r\n\t\tif (slope === 'flat') {\r\n\t\t\tbuildingDetails.landSlope = 'flat';\r\n\t\t} else {\r\n\t\t\tbuildingDetails.landSlope = buildingDetails.slopeType;\r\n\t\t}\r\n\t\treturn buildingDetails;\r\n\t}\r\n\r\n\tfunction transformTellUsAboutBuilding(buildingDetails) {\r\n\t\tif (buildingDetails.isHomeElevated) {\r\n\t\t} else {\r\n\t\t\tbuildingDetails.isHomeElevated = 'notasked';\r\n\t\t}\r\n\t\treturn buildingDetails;\r\n\t}\r\n\r\n\tfunction transformInsuranceHistory(insuranceHistory) {\r\n\t\tvar _portableClaimHistory = [];\r\n\t\tvar _claimHistory = [];\r\n\r\n\t\tif (insuranceHistory.history) {\r\n\t\t\tinsuranceHistory.history.forEach(function(item) {\r\n\t\t\t\tif (item.isPortableContents) {\r\n\t\t\t\t\t_portableClaimHistory.push({\r\n\t\t\t\t\t\tcoverAffected: {\r\n\t\t\t\t\t\t\tvalue: item.contentCategory,\r\n\t\t\t\t\t\t\tlabel: transformers.coverMapping(\r\n\t\t\t\t\t\t\t\titem.contentCategory\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tyear: {\r\n\t\t\t\t\t\t\tvalue: item.year,\r\n\t\t\t\t\t\t\tlabel: item.year\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmonth: {\r\n\t\t\t\t\t\t\tvalue: transformers.monthFromNumber(\r\n\t\t\t\t\t\t\t\titem.eventMonth\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tlabel: transformers.monthFromNumber(item.eventMonth)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdescription: {\r\n\t\t\t\t\t\t\tvalue: item.pattern.description,\r\n\t\t\t\t\t\t\tlabel: item.pattern.description,\r\n\t\t\t\t\t\t\tdescription: item.pattern.description,\r\n\t\t\t\t\t\t\tpublicID: item.pattern.publicID,\r\n\t\t\t\t\t\t\tcode: item.pattern.code,\r\n\t\t\t\t\t\t\tfilter1: item.pattern.filter1\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_claimHistory.push({\r\n\t\t\t\t\t\tcoverAffected: {\r\n\t\t\t\t\t\t\tvalue: item.claimType,\r\n\t\t\t\t\t\t\tlabel: transformers.coverMapping(item.claimType)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tyear: {\r\n\t\t\t\t\t\t\tvalue: item.year,\r\n\t\t\t\t\t\t\tlabel: item.year\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmonth: {\r\n\t\t\t\t\t\t\tvalue: transformers.monthFromNumber(\r\n\t\t\t\t\t\t\t\titem.eventMonth\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tlabel: transformers.monthFromNumber(item.eventMonth)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdescription: {\r\n\t\t\t\t\t\t\tvalue: item.pattern.description,\r\n\t\t\t\t\t\t\tlabel: item.pattern.description,\r\n\t\t\t\t\t\t\tdescription: item.pattern.description,\r\n\t\t\t\t\t\t\tpublicID: item.pattern.publicID,\r\n\t\t\t\t\t\t\tcode: item.pattern.code,\r\n\t\t\t\t\t\t\tfilter1: item.pattern.filter1\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tinsuranceHistory.claimDetails = _claimHistory;\r\n\t\t\tinsuranceHistory.portableClaimDetails = _portableClaimHistory;\r\n\t\t}\r\n\r\n\t\treturn insuranceHistory;\r\n\t}\r\n\r\n\tfunction transformCycleCover(cycleCover) {\r\n\t\tvar _cycleList = [];\r\n\t\tvar _coverItemsList = [];\r\n\t\tif (cycleCover.cycleList) {\r\n\t\t\tcycleCover.cycleList.forEach(function(item) {\r\n\t\t\t\t_cycleList.push({\r\n\t\t\t\t\tbikeType: {\r\n\t\t\t\t\t\tvalue: item.typeOfBicycle,\r\n\t\t\t\t\t\tlabel: transformers.cycleNameMapping(item.typeOfBicycle)\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdescription: item.description,\r\n\t\t\t\t\tvalue: item.value\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cycleCover.coverItemsList) {\r\n\t\t\tcycleCover.coverItemsList.forEach(function(item) {\r\n\t\t\t\t_coverItemsList.push({\r\n\t\t\t\t\tcategory: {\r\n\t\t\t\t\t\tvalue: item.category,\r\n\t\t\t\t\t\tlabel: transformers.cycleNameMapping(item.category)\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdescription: item.description,\r\n\t\t\t\t\tvalue: item.value\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (_coverItemsList.length > 0) {\r\n\t\t\tcycleCover.coverItems = true;\r\n\t\t} else {\r\n\t\t\tcycleCover.coverItems = false;\r\n\t\t}\r\n\r\n\t\tcycleCover.cycleList = _cycleList;\r\n\t\tcycleCover.coverItemsList = _coverItemsList;\r\n\t\t// {\"bikeType\":{\"value\":\"mountain_bike\",\"label\":\"Mountain Bike\"},\"description\":\"mb\",\"value\":\"1000\"}\r\n\t\treturn cycleCover;\r\n\t}\r\n\r\n\tfunction transformMortgageOnProperty(mortgageOnProperty) {\r\n\t\tif (\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith &&\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith.length > 0\r\n\t\t) {\r\n\t\t\tmortgageOnProperty.isPropertyUnderMortgage = true;\r\n\t\t\tvar _mortgageWith = [];\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith.forEach(function(item) {\r\n\t\t\t\t_mortgageWith.push(item.mortgagee);\r\n\t\t\t});\r\n\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith = _mortgageWith;\r\n\t\t} else {\r\n\t\t\tmortgageOnProperty.isPropertyUnderMortgage = false;\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith = [];\r\n\t\t}\r\n\t\treturn mortgageOnProperty;\r\n\t}\r\n\r\n\tfunction transformSecurity(securityTransform) {\r\n\t\tvar _securityExternalDoors = {\r\n\t\t\tdeadlocks: securityTransform.security.hasDoorDeadlocks == 'yes',\r\n\t\t\tdoor_security_screen:\r\n\t\t\t\tsecurityTransform.security.hasDoorSecurityScreen == 'yes'\r\n\t\t};\r\n\r\n\t\tvar _securityExternalWindows = {\r\n\t\t\tkeylocks: securityTransform.security.hasWindowKeylocks == 'yes',\r\n\t\t\troller_shutter:\r\n\t\t\t\tsecurityTransform.security.hasWindowRollerShutter == 'yes',\r\n\t\t\tsecurity_screens_or_bars:\r\n\t\t\t\tsecurityTransform.security.hasWindowScreenBars == 'yes'\r\n\t\t};\r\n\r\n\t\tvar _otherSecurity = {\r\n\t\t\tgated_community:\r\n\t\t\t\tsecurityTransform.security.isGatedCommunity == 'yes',\r\n\t\t\t'24_hour_concierge':\r\n\t\t\t\tsecurityTransform.security.has24HourConcierge == 'yes',\r\n\t\t\tfixed_home_sage:\r\n\t\t\t\tsecurityTransform.security.hasFixedHomeSafe == 'yes',\r\n\t\t\tsecurity_rated_building:\r\n\t\t\t\tsecurityTransform.security.isSecurityRatedBuilding == 'yes',\r\n\t\t\t'24_hour_monitored_alarm':\r\n\t\t\t\tsecurityTransform.security.haveSecurityAlarm == 'yes'\r\n\t\t};\r\n\r\n\t\treturn {\r\n\t\t\tsecurityExternalDoors: _securityExternalDoors,\r\n\t\t\tsecurityExternalWindows: _securityExternalWindows,\r\n\t\t\totherSecurity: _otherSecurity\r\n\t\t};\r\n\t}\r\n\r\n\tfunction transformNeeds(needTransform, fullData) {\r\n\t\tvar coverType = needTransform.coverType;\r\n\t\tneedTransform.coverNeeds = {\r\n\t\t\tbuilding: false,\r\n\t\t\tcontents: false,\r\n\t\t\trent_default: false,\r\n\t\t\tmalicious_damage: false\r\n\t\t};\r\n\r\n\t\t//basic need\r\n\t\tif (coverType == 'building_and_contents') {\r\n\t\t\tneedTransform.coverNeeds.building = true;\r\n\t\t\tneedTransform.coverNeeds.contents = true;\r\n\t\t} else if (coverType == 'building_only') {\r\n\t\t\tneedTransform.coverNeeds.building = true;\r\n\t\t} else if (coverType == 'contents_only') {\r\n\t\t\tneedTransform.coverNeeds.contents = true;\r\n\t\t}\r\n\r\n\t\t//landlord needs\r\n\t\tvar policyOption = needTransform.policyOption;\r\n\t\tif (policyOption.isRentDefaultCover) {\r\n\t\t\tneedTransform.coverNeeds.rent_default = true;\r\n\t\t}\r\n\r\n\t\tif (fullData.theftAndVandalismByTenants) {\r\n\t\t\tif (\r\n\t\t\t\tfullData.theftAndVandalismByTenants.theftCoverContents ||\r\n\t\t\t\tfullData.theftAndVandalismByTenants.theftCoverBuilding\r\n\t\t\t) {\r\n\t\t\t\tneedTransform.coverNeeds.malicious_damage = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdelete needTransform.policyOption;\r\n\t\tdelete needTransform.coverType;\r\n\r\n\t\treturn needTransform;\r\n\t}\r\n\r\n\tfunction transformMainPolicyHolder(returnObject, policyHolder, response) {\r\n\t\t//tell us about the main policy holder -------------------------------------\r\n\t\treturnObject.mainPolicyHolder = {\r\n\t\t\tprefix: policyHolder.contact.prefix,\r\n\t\t\tfirstName: policyHolder.contact.firstName,\r\n\t\t\tlastName: policyHolder.contact.lastName,\r\n\t\t\tgender: policyHolder.contact.gender,\r\n\t\t\tdateOfBirth: policyHolder.contact.dateOfBirth,\r\n\t\t\ttenYears_chargedOrConvictedOffences:\r\n\t\t\t\tpolicyHolder.contact.hasConviction\r\n\t\t};\r\n\t\tconvertMapping = {\r\n\t\t\t'mainPolicyHolder.gender': transformers.convertGender,\r\n\t\t\t'mainPolicyHolder.dateOfBirth': transformers.date\r\n\t\t};\r\n\r\n\t\tvar mappedValue = jsonMapper.convert(returnObject, convertMapping);\r\n\t\tif (policyHolder.contact.hasConviction == 'yes') {\r\n\t\t\t//parse dwelling history only if the hasConviction is yes\r\n\t\t\tvar _convictionHistory = [];\r\n\t\t\tpolicyHolder.contact.dwellingHistory.forEach(function(conviction) {\r\n\t\t\t\t// tenYears_chargedOrConvictedOffences\r\n\r\n\t\t\t\tvar _conviction = {\r\n\t\t\t\t\tdescription: {\r\n\t\t\t\t\t\tpublicID: conviction.pattern.publicID,\r\n\t\t\t\t\t\tcode: conviction.pattern.code,\r\n\t\t\t\t\t\tdescription: conviction.pattern.description,\r\n\t\t\t\t\t\tvalue: conviction.pattern.description,\r\n\t\t\t\t\t\tlabel: conviction.pattern.description,\r\n\t\t\t\t\t\tfilter1: conviction.pattern.filter1\r\n\t\t\t\t\t},\r\n\t\t\t\t\tyear: {\r\n\t\t\t\t\t\tlabel: conviction.year,\r\n\t\t\t\t\t\tvalue: conviction.year\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmonth: {\r\n\t\t\t\t\t\tlabel: transformers.monthFromNumber(\r\n\t\t\t\t\t\t\tconviction.eventMonth\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\tvalue: transformers.monthFromNumber(\r\n\t\t\t\t\t\t\tconviction.eventMonth\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\t_convictionHistory.push(_conviction);\r\n\t\t\t});\r\n\r\n\t\t\treturnObject.mainPolicyHolder.tenYears_chargedOrConvictedOffencesDetails = _convictionHistory;\r\n\t\t}\r\n\r\n\t\t//main policy holder contact -------------------------------------\r\n\t\treturnObject.mainPolicyHolderContact = {\r\n\t\t\tpersonContactResidentialAddress:\r\n\t\t\t\tpolicyHolder.contact.primaryAddress,\r\n\t\t\taddress: policyHolder.contact.primaryAddress,\r\n\t\t\t//::'personContactSamePostalAddress' : policyHolder.contact,\r\n\t\t\t// 'personContactPostalAddress' : policyHolder.contact,\r\n\t\t\temailAddress1: policyHolder.contact.emailAddress1,\r\n\t\t\tprimaryPhone: policyHolder.contact.primaryPhone,\r\n\t\t\tpasswordQuestion: policyHolder.contact.passwordQuestion,\r\n\t\t\t// 'personContactEnterAQuestion' : policyHolder.contact,\r\n\t\t\tpasswordAnswer: policyHolder.contact.passwordAnswer,\r\n\t\t\tpersonContactMailingPreference: response.documentDeliveryMethod\r\n\t\t};\r\n\r\n\t\t//add number based on phone type\r\n\t\tif (policyHolder.contact.primaryPhone === 'work') {\r\n\t\t\treturnObject.mainPolicyHolderContact.contactNumber =\r\n\t\t\t\tpolicyHolder.contact.workPhone;\r\n\t\t} else if (policyHolder.contact.primaryPhone === 'home') {\r\n\t\t\treturnObject.mainPolicyHolderContact.contactNumber =\r\n\t\t\t\tpolicyHolder.contact.homePhone;\r\n\t\t} else if (policyHolder.contact.primaryPhone === 'mobile') {\r\n\t\t\treturnObject.mainPolicyHolderContact.contactNumber =\r\n\t\t\t\tpolicyHolder.contact.cellPhone;\r\n\t\t}\r\n\r\n\t\t//if custom question\r\n\t\tif (\r\n\t\t\tpolicyHolder.contact.passwordQuestion ===\r\n\t\t\t'customer_created_question'\r\n\t\t) {\r\n\t\t\treturnObject.mainPolicyHolderContact.personContactEnterAQuestion =\r\n\t\t\t\tpolicyHolder.contact.passwordQuestionStr;\r\n\t\t}\r\n\r\n\t\t// if contact type is company\r\n\t\tif (policyHolder.contact.contactType === 'company') {\r\n\t\t\tvar authorisedPerson =\r\n\t\t\t\tpolicyHolder.contact.authorisedPersons[0].person;\r\n\t\t\treturnObject.aboutTheCompany = {};\r\n\t\t\treturnObject.aboutTheCompany.name = policyHolder.contact.name;\r\n\t\t\treturnObject.aboutTheCompany.abn = policyHolder.contact.abn;\r\n\t\t\treturnObject.aboutTheCompany.emailAddress1 =\r\n\t\t\t\tpolicyHolder.contact.emailAddress1;\r\n\t\t\treturnObject.aboutTheCompany.workPhone =\r\n\t\t\t\tpolicyHolder.contact.workPhone;\r\n\t\t\treturnObject.aboutTheCompany.companyAddress =\r\n\t\t\t\tpolicyHolder.contact.primaryAddress;\r\n\r\n\t\t\treturnObject.aboutCompanyContact = {};\r\n\t\t\treturnObject.aboutCompanyContact.prefix = authorisedPerson.prefix;\r\n\t\t\treturnObject.aboutCompanyContact.firstName =\r\n\t\t\t\tauthorisedPerson.firstName;\r\n\t\t\treturnObject.aboutCompanyContact.lastName =\r\n\t\t\t\tauthorisedPerson.lastName;\r\n\t\t\treturnObject.aboutCompanyContact.gender = transformers.convertGender(\r\n\t\t\t\tauthorisedPerson.gender\r\n\t\t\t);\r\n\t\t\treturnObject.aboutCompanyContact.dateOfBirth = transformers.date(\r\n\t\t\t\tauthorisedPerson.dateOfBirth\r\n\t\t\t);\r\n\r\n\t\t\t// postal address and custom question is not saved in GW\r\n\t\t\treturnObject.companyContactContact = {};\r\n\t\t\treturnObject.companyContactContact.companyContactResidentialAddress =\r\n\t\t\t\tauthorisedPerson.primaryAddress;\r\n\t\t\treturnObject.companyContactContact.emailAddress1 =\r\n\t\t\t\tauthorisedPerson.emailAddress1;\r\n\t\t\t// returnObject.companyContactContact.companyContactDetailsPostalAddress = response.policyAddress;\r\n\t\t\treturnObject.companyContactContact.primaryPhone =\r\n\t\t\t\tauthorisedPerson.primaryPhone;\r\n\t\t\treturnObject.companyContactContact.contactNumber =\r\n\t\t\t\tauthorisedPerson.homePhone ||\r\n\t\t\t\tauthorisedPerson.workPhone ||\r\n\t\t\t\tauthorisedPerson.cellPhone;\r\n\t\t\treturnObject.companyContactContact.passwordQuestion =\r\n\t\t\t\tpolicyHolder.contact.passwordQuestion;\r\n\t\t\t// returnObject.companyContactContact.passwordQuestionStr = policyHolder.contact.passwordQuestionStr || '';\r\n\t\t\treturnObject.companyContactContact.passwordAnswer =\r\n\t\t\t\tpolicyHolder.contact.passwordAnswer;\r\n\t\t\treturnObject.companyContactContact.companyContactMailingPreference =\r\n\t\t\t\tresponse.documentDeliveryMethod;\r\n\t\t}\r\n\r\n\t\treturn returnObject;\r\n\t}\r\n\r\n\t//transform for the other policy holder\r\n\tfunction transformOtherPolicyHolder(returnObject, policyHolder) {\r\n\t\tif (!returnObject.additionalPolicyHolders) {\r\n\t\t\treturnObject.additionalPolicyHolders = {};\r\n\t\t}\r\n\r\n\t\tif (!returnObject.additionalPolicyHolders.policyHolders) {\r\n\t\t\treturnObject.additionalPolicyHolders.policyHolders = [];\r\n\t\t}\r\n\r\n\t\tvar _contact = {\r\n\t\t\tadditionalContactSamePostalAddress: 'yes',\r\n\t\t\taddress: policyHolder.contact.primaryAddress,\r\n\t\t\tcontactNumber: '',\r\n\t\t\tdateOfBirth: policyHolder.contact.dateOfBirth,\r\n\t\t\temailAddress1: policyHolder.contact.emailAddress1,\r\n\t\t\tfirstName: policyHolder.contact.firstName,\r\n\t\t\tgender: policyHolder.contact.gender,\r\n\t\t\tlastName: policyHolder.contact.lastName,\r\n\t\t\tpasswordAnswer: policyHolder.contact.passwordAnswer,\r\n\t\t\tpasswordQuestion: policyHolder.contact.passwordQuestion,\r\n\t\t\tprefix: policyHolder.contact.prefix,\r\n\t\t\tprimaryPhone: policyHolder.contact.primaryPhone\r\n\t\t\t// 'tenYears_chargedOrConvictedOffences':policyHolder.,\r\n\t\t\t// 'tenYears_chargedOrConvictedOffencesDetails':policyHolder.,\r\n\t\t};\r\n\r\n\t\t//add number based on phone type\r\n\t\tif (policyHolder.contact.primaryPhone === 'work') {\r\n\t\t\t_contact.contactNumber = policyHolder.contact.workPhone;\r\n\t\t} else if (policyHolder.contact.primaryPhone === 'home') {\r\n\t\t\t_contact.contactNumber = policyHolder.contact.homePhone;\r\n\t\t} else if (policyHolder.contact.primaryPhone === 'mobile') {\r\n\t\t\t_contact.contactNumber = policyHolder.contact.cellPhone;\r\n\t\t}\r\n\r\n\t\t//if custom question\r\n\t\tif (\r\n\t\t\tpolicyHolder.contact.passwordQuestion ===\r\n\t\t\t'customer_created_question'\r\n\t\t) {\r\n\t\t\t_contact.personContactEnterAQuestion =\r\n\t\t\t\tpolicyHolder.contact.passwordQuestionStr;\r\n\t\t}\r\n\r\n\t\tif (policyHolder.contact.hasConviction === 'yes') {\r\n\t\t\t_contact.tenYears_chargedOrConvictedOffences = 'yes';\r\n\t\t\t_contact.tenYears_chargedOrConvictedOffencesDetails = [];\r\n\t\t\tpolicyHolder.contact.dwellingHistory.forEach(function(history) {\r\n\t\t\t\t_contact.tenYears_chargedOrConvictedOffencesDetails.push({\r\n\t\t\t\t\tdescription: {\r\n\t\t\t\t\t\tpublicID: history.pattern.publicID,\r\n\t\t\t\t\t\tcode: history.pattern.code,\r\n\t\t\t\t\t\tdescription: history.pattern.description,\r\n\t\t\t\t\t\tvalue: history.pattern.description,\r\n\t\t\t\t\t\tlabel: history.pattern.description,\r\n\t\t\t\t\t\tfilter1: history.pattern.filter1\r\n\t\t\t\t\t},\r\n\t\t\t\t\tyear: {\r\n\t\t\t\t\t\tlabel: history.year,\r\n\t\t\t\t\t\tvalue: history.year\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmonth: {\r\n\t\t\t\t\t\tlabel: transformers.monthFromNumber(history.eventMonth),\r\n\t\t\t\t\t\tvalue: transformers.monthFromNumber(history.eventMonth)\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t_contact.tenYears_chargedOrConvictedOffences = 'no';\r\n\t\t}\r\n\r\n\t\tconvertMapping = {\r\n\t\t\tgender: transformers.convertGender,\r\n\t\t\tdateOfBirth: transformers.date\r\n\t\t};\r\n\r\n\t\tvar mappedValue = jsonMapper.convert(_contact, convertMapping);\r\n\t\treturnObject.additionalPolicyHolders.policyHolders.push(_contact);\r\n\r\n\t\treturn returnObject;\r\n\t}\r\n\r\n\t//transform policy holders\r\n\tfunction transformPolicyHolders(returnObject, response) {\r\n\t\tvar _policyHolders = returnObject.policyHolders;\r\n\t\tvar _policyHolderOldestDOB = moment();\r\n\t\t_policyHolders.forEach(function(policyHolder) {\r\n\t\t\tif (policyHolder.mainHolder == true) {\r\n\t\t\t\treturnObject = transformMainPolicyHolder(\r\n\t\t\t\t\treturnObject,\r\n\t\t\t\t\tpolicyHolder,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\treturnObject = transformOtherPolicyHolder(\r\n\t\t\t\t\treturnObject,\r\n\t\t\t\t\tpolicyHolder\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\t//sets as oldest date of birth if higher\r\n\t\t\tif (\r\n\t\t\t\t_policyHolderOldestDOB.diff(\r\n\t\t\t\t\tpolicyHolder.contact.dateOfBirth,\r\n\t\t\t\t\t'days'\r\n\t\t\t\t) > 0\r\n\t\t\t) {\r\n\t\t\t\t_policyHolderOldestDOB = moment(\r\n\t\t\t\t\tpolicyHolder.contact.dateOfBirth\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// sets the oldest persons date of birth\r\n\t\treturnObject.tellUsAboutInsured.dobOldestInsured = _policyHolderOldestDOB.format(\r\n\t\t\t'DD/MM/YYYY'\r\n\t\t);\r\n\r\n\t\treturn returnObject;\r\n\t}\r\n\r\n\t/**\r\n\t * Transforms the retrievedQuoteRepsonse into a format that can be injected into the userInputRepository\r\n\t * The returned value will populate all the forms in the quote process\r\n\t * @param {Object} retrievedQuoteResponse\t\t\t\t Response object from the retrieveSavedQuote service\r\n\t * @returns {Object}\t\t\t\t\t\t\t\t\t\tTransformed object ready to inject into the userInputRepository\r\n\t */\r\n\tfunction transform(retrievedQuoteResponse) {\r\n\t\tconsole.info('retrievedQuoteResponse', retrievedQuoteResponse);\r\n\r\n\t\tvar transformMapping = {\r\n\t\t\t\t//estimate =================================================\r\n\t\t\t\t//tell us about property -------------------------------------\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.address':\r\n\t\t\t\t\t'=_input.dwellings.0.location',\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.typeOfBuilding':\r\n\t\t\t\t\t'=_input.dwellings.0.buildingType',\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.wallsMadeOf':\r\n\t\t\t\t\t'=_input.dwellings.0.externalWallMaterial',\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.howIsHomeOccupied':\r\n\t\t\t\t\t'=_input.dwellings.0.homeOccupancy',\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.propertyProfessionalAgent':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isPropertyAgentManaged',\r\n\r\n\t\t\t\t//tell us how we can insure you -------------------------------------\r\n\t\t\t\t'returnObject.tellUsHowWeCanInsureYou.coverType':\r\n\t\t\t\t\t'=_input.dwellings.0.coverType',\r\n\t\t\t\t'returnObject.tellUsHowWeCanInsureYou.policyOption':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption',\r\n\t\t\t\t'returnObject.tellUsHowWeCanInsureYou.needCoverOutsideHome':\r\n\t\t\t\t\t'=_input.dwellings.0.hasPortableContentsHomeAway',\r\n\r\n\t\t\t\t//rapid estimate -------------------------------------\r\n\r\n\t\t\t\t//tell us a bit more -------------------------------------\r\n\t\t\t\t'returnObject.tellUsABitMore.yourEmailAddress': '=_input.email',\r\n\t\t\t\t'returnObject.tellUsABitMore.promotionalCode':\r\n\t\t\t\t\t'=_input.campaignCode',\r\n\r\n\t\t\t\t//property =================================================\r\n\t\t\t\t//lets get started -------------------------------------\r\n\t\t\t\t'returnObject.letsGetStarted.personOrCompany':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.contactType',\r\n\t\t\t\t'returnObject.letsGetStarted.startCoverDate':\r\n\t\t\t\t\t'=_input.periodStartDate',\r\n\r\n\t\t\t\t//tell us about the building -------------------------------------\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.yearHomeBuilt':\r\n\t\t\t\t\t'=_input.dwellings.0.homeBuiltYear',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isStrataRegdCorp':\r\n\t\t\t\t\t'=_input.dwellings.0.isStrataRegisteredBody',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.areUnitAboveBelow':\r\n\t\t\t\t\t'=_input.dwellings.0.isUnitsAvailable',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.corpInsureUnit':\r\n\t\t\t\t\t'=_input.dwellings.0.isOwnersInsureUnits',\r\n\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isSuburbanBlock':\r\n\t\t\t\t\t'=_input.dwellings.0.isSubUrbanLocated',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isBlockLarger':\r\n\t\t\t\t\t'=_input.dwellings.0.isPropertySize',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.waterSource':\r\n\t\t\t\t\t'=_input.dwellings.0.waterSourced',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.waterTankCapacity':\r\n\t\t\t\t\t'=_input.dwellings.0.waterTankCapacity',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isEmergencyFuelWaterTank':\r\n\t\t\t\t\t'=_input.dwellings.0.isSecondaryFitted',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isBuildingRelocatable':\r\n\t\t\t\t\t'=_input.dwellings.0.isCaravanHomeLocated',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.areFoundationsSecured':\r\n\t\t\t\t\t'=_input.dwellings.0.isSecuredFoundation',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isFixedPlumbingElectricityConnect':\r\n\t\t\t\t\t'=_input.dwellings.0.isPlumbingConnect',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.roofMake':\r\n\t\t\t\t\t'=_input.dwellings.0.roofMaterial',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isHomeElevated':\r\n\t\t\t\t\t'=_input.dwellings.0.groundElevated',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isPortionBelowGround':\r\n\t\t\t\t\t'=_input.dwellings.0.isPortionAboveGround',\r\n\r\n\t\t\t\t// 'returnObject.tellUsAboutTheBuilding.areContentsBelowGround':\t'=_input.dwellings.0.',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.homeLevels':\r\n\t\t\t\t\t'=_input.dwellings.0.homeLevels',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isNationalTrustListed':\r\n\t\t\t\t\t'=_input.dwellings.0.isNationalTrustListed',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isHomeWired':\r\n\t\t\t\t\t'=_input.dwellings.0.isFullyRewired',\r\n\r\n\t\t\t\t//tell us about the security -------------------------------------\r\n\t\t\t\t'returnObject.tellUsAboutTheSecurity.security':\r\n\t\t\t\t\t'=_input.dwellings.0.locationSecurity',\r\n\r\n\t\t\t\t//rennovation and residents -------------------------------------\r\n\t\t\t\t'returnObject.renovationsAndResidents.isHomeUnderRepairs':\r\n\t\t\t\t\t'=_input.dwellings.0.isRenovated',\r\n\r\n\t\t\t\t//property usage -------------------------------------\r\n\t\t\t\t'returnObject.propertyUsage.isPropertyForBusiness':\r\n\t\t\t\t\t'=_input.dwellings.0.isIncomeGenerated',\r\n\t\t\t\t'returnObject.propertyUsage.propertyActivityDegree':\r\n\t\t\t\t\t'=_input.dwellings.0.incomeGeneratingDegree',\r\n\r\n\t\t\t\t'returnObject.propertyUsage.propertyActivities':\r\n\t\t\t\t\t'=_input.dwellings.0.incomeGeneratingActivities',\r\n\t\t\t\t'returnObject.propertyUsage.propertyAgricultureActivities':\r\n\t\t\t\t\t'=_input.dwellings.0.agriculturalActivities',\r\n\r\n\t\t\t\t//mortgage on property -------------------------------------\r\n\t\t\t\t'returnObject.mortgageOnProperty.propertyMortgagedWith':\r\n\t\t\t\t\t'=_input.dwellings.0.mortgagees',\r\n\r\n\t\t\t\t//building =================================================\r\n\t\t\t\t//building details -------------------------------\r\n\t\t\t\t'returnObject.buildingDetails.homeBuiltStandard':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.homeStandard',\r\n\t\t\t\t'returnObject.buildingDetails.landSlope':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.isLandSloped',\r\n\t\t\t\t'returnObject.buildingDetails.slopeType':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.slopeType',\r\n\t\t\t\t'returnObject.buildingDetails.homeTotalArea':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.knowHomeSize',\r\n\t\t\t\t'returnObject.buildingDetails.homeArea':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.sizeOfHome',\r\n\t\t\t\t'returnObject.buildingDetails.homeAreaUnit':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.areaUnit',\r\n\t\t\t\t'returnObject.buildingDetails.homeBedrooms':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfBedrooms',\r\n\t\t\t\t'returnObject.buildingDetails.homeBedroomSize':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.sizeOfBedroom',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.homeDecks':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfBalconies',\r\n\t\t\t\t'returnObject.buildingDetails.homeVerandahs':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfVerandahs',\r\n\t\t\t\t'returnObject.buildingDetails.homeCarports':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfCarports',\r\n\t\t\t\t'returnObject.buildingDetails.homeGarages':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfGarages',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.homeSheds':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasSheds',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.largeSheds':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfLargeSheds',\r\n\t\t\t\t'returnObject.buildingDetails.smallSheds':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfSmallSheds',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.homeFeatures.ducted_airconditioning':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasDuctedAirConditioning',\r\n\t\t\t\t'returnObject.buildingDetails.homeFeatures.in_ground_swimming_pool':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasInGroundPool',\r\n\t\t\t\t'returnObject.buildingDetails.homeFeatures.tennis_court':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasTennisCourt',\r\n\t\t\t\t'returnObject.buildingDetails.homeFeatures.granny_flat':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasGrannyFlat',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.grannyFlatSize':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.grannyFlatSize',\r\n\t\t\t\t'returnObject.buildingDetails.isBuiltToCycloneStandards':\r\n\t\t\t\t\t'=_input.dwellings.0.isCycloneStandardlyBuilt',\r\n\r\n\t\t\t\t//covers =================================================\r\n\t\t\t\t//your buildings -------------------------------------\r\n\t\t\t\t'returnObject.yourBuilding.buildingSumInsured':\r\n\t\t\t\t\t'=_input.dwellings.0.buildingSumInsured',\r\n\t\t\t\t//your contents -------------------------------------\r\n\t\t\t\t'returnObject.yourContents.contentsSumInsured':\r\n\t\t\t\t\t'=_input.dwellings.0.contentSumInsured',\r\n\t\t\t\t//portable contents -------------------------------------\r\n\t\t\t\t'returnObject.portableContents.coverPortableContents':\r\n\t\t\t\t\t'=_input.dwellings.0.hasPortableContentsHomeAway',\r\n\t\t\t\t'returnObject.portableContents.coverPortableContentsRegion':\r\n\t\t\t\t\t'=_input.dwellings.0.portableCoverCountry',\r\n\t\t\t\t'returnObject.portableContents.coverPortableContentLimit':\r\n\t\t\t\t\t'=_input.dwellings.0.generalPortableContents',\r\n\t\t\t\t'returnObject.portableContents.portableContentsSpecifiedCover':\r\n\t\t\t\t\t'=_input.dwellings.0.hasSpecifiedPortableContList',\r\n\r\n\t\t\t\t//accidental loss or damage -------------------------------------\r\n\t\t\t\t'returnObject.accidentalLossOrDamage.coverAccDmgBuilding':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isBuildingAccidentalDamage',\r\n\t\t\t\t'returnObject.accidentalLossOrDamage.coverAccDmgContents':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentsAccidentalDamage',\r\n\r\n\t\t\t\t//cycle cover -------------------------------------\r\n\t\t\t\t'returnObject.cycleCover.coverCycle':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentsCycleCover',\r\n\t\t\t\t'returnObject.cycleCover.coverCycleExtendOption':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentsCycleRacingCover',\r\n\t\t\t\t'returnObject.cycleCover.cycleList':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.cycles',\r\n\t\t\t\t'returnObject.cycleCover.coverItemsList':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.cycleEquipments',\r\n\r\n\t\t\t\t//rent default\r\n\t\t\t\t'returnObject.rentDefault.rentDefault':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.rentDefaultAmount',\r\n\r\n\t\t\t\t'returnObject.rentDefault.rentCurrentWeekly':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.rentDefaultAmount',\r\n\t\t\t\t'returnObject.rentDefault.rentXWeeks':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.rentDefaultWeeks',\r\n\r\n\t\t\t\t//vandalism by tenanats\r\n\t\t\t\t'returnObject.theftAndVandalismByTenants.theftCoverContents':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentVandalismCover',\r\n\t\t\t\t'returnObject.theftAndVandalismByTenants.theftCoverBuilding':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isBuildingVandalismCover',\r\n\t\t\t\t// 'returnObject.tellUsHowWeCanInsureYou.coverNeeds.malicious_damage':\t'=_input.dwellings.0.isBuildingVandalismCover',\r\n\r\n\t\t\t\t//high risk items\r\n\t\t\t\t'returnObject.specifiedHighRiskItems.riskCoverIndividualWorks':\r\n\t\t\t\t\t'=_input.dwellings.0.hasWorksArt',\r\n\t\t\t\t'returnObject.specifiedHighRiskItems.riskEntertainmentEquipment':\r\n\t\t\t\t\t'=_input.dwellings.0.hasEntertainmentEquipment',\r\n\r\n\t\t\t\t//domestic worker compansation\r\n\t\t\t\t'returnObject.domesticWorkerCompensation.domesticWorkerCompCover':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentsDomesticWorkerComp',\r\n\r\n\t\t\t\t//details =================================================\r\n\t\t\t\t//tell us about insured -------------------------------------\r\n\t\t\t\t'returnObject.tellUsAboutInsured.dobOldestInsured':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.dateOfBirth',\r\n\t\t\t\t'returnObject.tellUsAboutInsured.isRetired':\r\n\t\t\t\t\t'=_input.isInsuredsRetired',\r\n\r\n\t\t\t\t// insurance history -------------------------------------\r\n\t\t\t\t'returnObject.insuranceHistory.history':\r\n\t\t\t\t\t'=_input.dwellings.0.dwellingHistories',\r\n\t\t\t\t'returnObject.insuranceHistory.insuranceHeldFor':\r\n\t\t\t\t\t'=_input.dwellings.0.yearsContInsurance',\r\n\t\t\t\t'returnObject.insuranceHistory.previousInsurer':\r\n\t\t\t\t\t'=_input.dwellings.0.previousInsurer',\r\n\t\t\t\t'returnObject.insuranceHistory.claimInLastYear':\r\n\t\t\t\t\t'=_input.dwellings.0.hasInsuredClaims',\r\n\t\t\t\t'returnObject.insuranceHistory.portableClaim':\r\n\t\t\t\t\t'=_input.hasPortableContentsClaims',\r\n\r\n\t\t\t\t//quote =================================================\r\n\t\t\t\t//insured excess value -------------------------------------\r\n\t\t\t\t//save on premium -------------------------------------\r\n\t\t\t\t// optional benifits -------------------------------------\r\n\t\t\t\t// promotonal code -------------------------------------\r\n\r\n\t\t\t\t//contact =================================================\r\n\t\t\t\t//tell us about the main policy holder -------------------------------------\r\n\t\t\t\t//main policy holder contact -------------------------------------\r\n\t\t\t\t//additional policy holder -------------------------------------\r\n\t\t\t\t//tell us about the company -------------------------------------\r\n\t\t\t\t//tell us about the authurised contact for the company -------------------------------------\r\n\t\t\t\t//compant contact -------------------------------------\r\n\t\t\t\t'returnObject.policyHolders': '=_input.policyHolders',\r\n\r\n\t\t\t\t//payment =================================================\r\n\t\t\t\t//payment details -------------------------------------\r\n\t\t\t\t//promotional code -------------------------------------\r\n\r\n\t\t\t\t//additional info\r\n\t\t\t\t'returnObject.info': {},\r\n\t\t\t\t'returnObject.info.offering': '=_input.dwellings.0.offering'\r\n\t\t\t},\r\n\t\t\tconvertMapping = {\r\n\t\t\t\t'returnObject.letsGetStarted.startCoverDate': transformers.date,\r\n\t\t\t\t'returnObject.buildingDetails.homeBedrooms':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.buildingDetails.homeDecks':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.buildingDetails.homeVerandahs':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.buildingDetails.homeCarports':\r\n\t\t\t\t\ttransformers.itemCountCarPort,\r\n\t\t\t\t'returnObject.buildingDetails.homeGarages':\r\n\t\t\t\t\ttransformers.itemCountGarages,\r\n\t\t\t\t'returnObject.buildingDetails.largeSheds':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.buildingDetails.smallSheds':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.rentDefault.rentDefault': transformers.hasValue,\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isPortionBelowGround':\r\n\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t\t'returnObject.tellUsAboutInsured.isRetired': transformers.yesNo,\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isBuiltToCycloneStandards':\r\n\t\t\t\t\ttransformers.yesNo\r\n\r\n\t\t\t\t// 'returnObject.carDetails.colour':\t\t\t\t\t\t\t\t\t transformers.camelcase,\r\n\t\t\t\t// 'returnObject.getStarted.policyStartDate':\t\t\t\t\t\t\t transformers.date,\r\n\t\t\t\t// 'returnObject.carDetails.carFinance':\t\t\t\t\t\t\t\t\ttransformers.financeType,\r\n\t\t\t\t// 'returnObject.retrievedQuoteRego.state':\t\t\t\t\t\t\t\ttransformers.state,\r\n\t\t\t\t// 'returnObject.insuredExcessValue.coverType':\t\t\t\t\t\t\ttransformers.coverType,\r\n\t\t\t\t// 'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft': transformers.thirdPartyPref,\r\n\t\t\t\t// 'returnObject.carDetails.whenDidYouBuyYear':\t\t\t\t\t\t\ttransformers.purchaseMonthFromMonthYear,\r\n\t\t\t\t// 'returnObject.carDetails.whenDidYouBuyMonth':\t\t\t\t\t\t transformers.purchaseYearFromMonthYear\r\n\t\t\t};\r\n\t\tvar transformedQuote = jsonMapper.convert(\r\n\t\t\tjsonMapper.transform(retrievedQuoteResponse, transformMapping),\r\n\t\t\tconvertMapping\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.tellUsAboutTheSecurity = transformSecurity(\r\n\t\t\ttransformedQuote.returnObject.tellUsAboutTheSecurity\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.tellUsHowWeCanInsureYou = transformNeeds(\r\n\t\t\ttransformedQuote.returnObject.tellUsHowWeCanInsureYou,\r\n\t\t\ttransformedQuote.returnObject\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.buildingDetails = transformBuilding(\r\n\t\t\ttransformedQuote.returnObject.buildingDetails\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.tellUsAboutTheBuilding = transformTellUsAboutBuilding(\r\n\t\t\ttransformedQuote.returnObject.tellUsAboutTheBuilding\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.mortgageOnProperty = transformMortgageOnProperty(\r\n\t\t\ttransformedQuote.returnObject.mortgageOnProperty\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.cycleCover = transformCycleCover(\r\n\t\t\ttransformedQuote.returnObject.cycleCover\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.insuranceHistory = transformInsuranceHistory(\r\n\t\t\ttransformedQuote.returnObject.insuranceHistory\r\n\t\t);\r\n\t\ttransformedQuote.returnObject = transformPolicyHolders(\r\n\t\t\ttransformedQuote.returnObject,\r\n\t\t\tretrievedQuoteResponse\r\n\t\t);\r\n\r\n\t\treturn transformedQuote.returnObject;\r\n\t}\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n","\t'use strict' ;\r\n\r\nfunction HomeSplitterRequestTransformer(Util, serviceResponseRepository, jsonMapper, publicIDTransformer, coverTypeTransformer) {\r\n\r\n\tfunction getQuoteResponseValue(qouteResponse, pathString) {\r\n\t\treturn Util.findHierarchyStringInObject(qouteResponse, pathString, '.') ;\r\n\t}\r\n\r\n\tfunction transform(quotePermutations, quoteRequest) {\r\n\t\tvar quoteResponses = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\tvar transformedRequest = null ;\r\n\t\tif ( quoteResponses )\r\n\t\t\ttransformedRequest = transformExistingQuote(quotePermutations, quoteResponses, quoteRequest) ;\r\n\t\telse\r\n\t\t\ttransformedRequest = transformNewQuote(quotePermutations, quoteRequest) ;\r\n\r\n\t\treturn transformedRequest ;\r\n\t}\r\n\r\n\tfunction transformExistingQuote(quotePermutations, quoteResponses, quoteRequest) {\r\n\t\tvar quotes = Util.generatePermutationsArray(quotePermutations.offerings, quotePermutations.paymentFrequencies).map(function(permutation, index) {\r\n\t\t\tvar quote = Object.extend(permutation, quoteRequest);\r\n\t\t\tvar offering = permutation.option1;\r\n\t\t\tvar paymentFrequency = permutation.option2;\r\n\t\t\tdelete quote.option1; delete quote.option2 ; \r\n\t\t\tvar quoteType = quotePermutations.quoteType ;\r\n\t\t\tvar coverType = quotePermutations.coverTypes[0] ;\r\n\t\t\tvar q = Util.deepClone(quote) ;\r\n\t\t\tq = Object.extend(q,{\r\n\t\t\t\tquoteType: quoteType,\r\n\t\t\t\tpaymentFrequency: paymentFrequency,\r\n\t\t\t}) ;\r\n\r\n\t\t\tvar quoteResponseBody = null ;\r\n\t\t\tvar matchingQuoteResponse = findMatchingQuoteResponse(quoteResponses, coverType, offering) ;\r\n\t\t\tif ( matchingQuoteResponse )\r\n\t\t\t\tquoteResponseBody = matchingQuoteResponse.response;\r\n\r\n\t\t\tq = publicIDTransformer.transform(q, quoteResponseBody, true) ;\r\n\t\t\tq = coverTypeTransformer.transform(q, coverType.descriptor, offering.descriptor);\r\n\t\t\treturn q ;\r\n\t\t}) ;\r\n\r\n\t\treturn quotes.filter(function(quote) { return quote !== null }) ;\r\n\t}\r\n\r\n\tfunction findMatchingQuoteResponse(quoteResponses, coverType, offering){\r\n\t\tif ( ! quoteResponses )\r\n\t\t\treturn;\r\n\r\n\t\tvar matchingResponse = null ;\r\n\t\tquoteResponses.some(function(qr) {\r\n\t\t\tif (qr.coverType == coverType.descriptor && qr.offering == offering.descriptor ) {\r\n\t\t\t\tmatchingResponse = qr ;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matchingResponse;\r\n\t}\r\n\r\n\tfunction transformNewQuote(quotePermutations, quoteRequest) {\r\n\t\tvar nr = quotePermutations.offerings.length * quotePermutations.paymentFrequencies.length;\r\n\t\tvar counter = 0 ; \r\n\t\tvar quotes = Util.arrayFill(nr, quoteRequest).map(function(quote, index) {\r\n\t\t\tvar offering = quotePermutations.offerings[index % quotePermutations.offerings.length];\t\t\t\r\n\t\t\tvar paymentFrequency = quotePermutations.paymentFrequencies[counter % quotePermutations.paymentFrequencies.length];\r\n\t\t\tvar quoteType = quotePermutations.quoteType ;\r\n\t\t\tvar coverType = quotePermutations.coverTypes[0];\r\n\t\t\tvar q = Util.deepClone(quote) ;\r\n\t\t\tq = Object.extend(q,{\r\n\t\t\t\tquoteType: quoteType,\r\n\t\t\t\tpaymentFrequency: paymentFrequency,\r\n\t\t\t}) ;\r\n\r\n\t\t\tq = coverTypeTransformer.transform(q, coverType.descriptor, offering.descriptor);\r\n\t\t\tq = publicIDTransformer.transform(q) ;\r\n\t\t\tif ( index == quotePermutations.offerings.length - 1 )\r\n\t\t\t\tcounter = ++counter % quotePermutations.paymentFrequencies.length ; \r\n\t\t\t\r\n\t\t\treturn q ;\r\n\t\t}) ;\r\n\r\n\t\treturn quotes ;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function HomeStructureRequestTransformer(\r\n\tjsonMapper,\r\n\tutil,\r\n\tquoteOptions,\r\n\tstorage\r\n) {\r\n\tvar structureQuoteMapping = {\r\n\t\tperiodStartDate: \"=_input.homeForm.letsGetStarted.startCoverDate\",\r\n\t\tdwellings: [],\r\n\t\t\"dwellings.0\": {},\r\n\t\t\"dwellings.0.location\": \"=_addressSearch\",\r\n\t\t\"dwellings.0.buildingType\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheProperty.typeOfBuilding\",\r\n\t\t\"dwellings.0.externalWallMaterial\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheProperty.wallsMadeOf\",\r\n\t\t\"dwellings.0.homeOccupancy\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheProperty.howIsHomeOccupied\",\r\n\t\t\"dwellings.0.buildingSumInsured\":\r\n\t\t\t\"=_input.homeForm.rapidEstimate.buildingInsureAmount\",\r\n\t\t\"dwellings.0.contentSumInsured\":\r\n\t\t\t\"=_input.homeForm.rapidEstimate.contentInsureAmount\",\r\n\r\n\t\t\"dwellings.0.policyOption\": {},\r\n\t\t\"dwellings.0.policyOption.rentDefaultAmount\":\r\n\t\t\t\"=_input.homeForm.rapidEstimate.rentDefaultCoverAmount\",\r\n\t\t\"dwellings.0.policyOption.rentDefaultWeeks\":\r\n\t\t\t\"=_input.homeForm.rapidEstimate.uptoWeeks\",\r\n\t\t\"dwellings.0.policyOption.isPropertyAgentManaged\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheProperty.propertyProfessionalAgent\",\r\n\r\n\t\t\"dwellings.0.yearsContInsurance\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.insuranceHeldFor\",\r\n\t\t\"dwellings.0.previousInsurer\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.previousInsurer\",\r\n\t\t\"dwellings.0.hasInsuredClaims\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.claimInLastYear\",\r\n\r\n\t\t\"dwellings.0.dwellingHistories\": [],\r\n\r\n\t\t//multiple data for portable and other contents\r\n\t\t\"dwellings.0.dwellingClaimHistories\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.claimDetails\",\r\n\r\n\t\t\"dwellings.0.dwellingPortableClaimHistories\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.portableClaimDetails\",\r\n\r\n\t\t\"dwellings.0.homeBuiltYear\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.yearHomeBuilt\",\r\n\t\t\"dwellings.0.isStrataRegisteredBody\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isStrataRegdCorp\",\r\n\t\t\"dwellings.0.isUnitsAvailable\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.areUnitAboveBelow\",\r\n\t\t\"dwellings.0.isOwnersInsureUnits\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.corpInsureUnit\",\r\n\t\t\"dwellings.0.isSubUrbanLocated\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isSuburbanBlock\",\r\n\t\t\"dwellings.0.isPropertySize\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isBlockLarger\",\r\n\t\t\"dwellings.0.waterSourced\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.waterSource\",\r\n\t\t\"dwellings.0.waterTankCapacity\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.waterTankCapacity\",\r\n\t\t\"dwellings.0.isSecondaryFitted\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isEmergencyFuelWaterTank\",\r\n\t\t\"dwellings.0.isCaravanHomeLocated\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isBuildingRelocatable\",\r\n\t\t\"dwellings.0.isSecuredFoundation\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.areFoundationsSecured\",\r\n\t\t\"dwellings.0.isPlumbingConnect\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isFixedPlumbingElectricityConnect\",\r\n\t\t\"dwellings.0.roofMaterial\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.roofMake\",\r\n\t\t\"dwellings.0.groundElevated\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isHomeElevated\",\r\n\t\t\"dwellings.0.homeLevels\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.homeLevels\",\r\n\t\t\"dwellings.0.isUnitAboveGround\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isUnitAboveGround\",\r\n\t\t//IMPORTANT: Setting isPortionBelowGround to isPortionAboveGround is intentional as this is how it is mapped in guide-wire\r\n\t\t\"dwellings.0.isPortionAboveGround\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isPortionBelowGround\",\r\n\t\t// \"dwellings.0.isPortionAboveGround\" : \"=_input.homeForm.tellUsAboutTheBuilding.areContentsBelowGround\",\r\n\t\t\"dwellings.0.isNationalTrustListed\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isNationalTrustListed\",\r\n\t\t\"dwellings.0.isFullyRewired\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isHomeWired\",\r\n\r\n\t\t//Theft and vandalism by tenants\r\n\t\t\"dwellings.0.policyOption.isBuildingVandalismCover\":\r\n\t\t\t\"=_input.homeForm.theftAndVandalismByTenants.theftCoverBuilding\",\r\n\t\t\"dwellings.0.policyOption.isContentVandalismCover\":\r\n\t\t\t\"=_input.homeForm.theftAndVandalismByTenants.theftCoverContents\",\r\n\r\n\t\t// Tell us About the Security Section\r\n\t\t\"dwellings.0.locationSecurity\": {},\r\n\t\t\"dwellings.0.locationSecurity.hasDoorDeadlocks\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalDoors.deadlocks\",\r\n\t\t\"dwellings.0.locationSecurity.hasDoorSecurityScreen\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalDoors.door_security_screen\",\r\n\r\n\t\t\"dwellings.0.locationSecurity.hasWindowKeylocks\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalWindows.keylocks\",\r\n\t\t\"dwellings.0.locationSecurity.hasWindowRollerShutter\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalWindows.roller_shutter\",\r\n\t\t\"dwellings.0.locationSecurity.hasWindowScreenBars\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalWindows.security_screens_or_bars\",\r\n\r\n\t\t\"dwellings.0.locationSecurity.isGatedCommunity\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.otherSecurity.gated_community\",\r\n\t\t\"dwellings.0.locationSecurity.has24HourConcierge\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.otherSecurity.24_hour_concierge\",\r\n\t\t\"dwellings.0.locationSecurity.hasFixedHomeSafe\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.otherSecurity.fixed_home_sage\",\r\n\t\t\"dwellings.0.locationSecurity.isSecurityRatedBuilding\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.otherSecurity.security_rated_building\",\r\n\r\n\t\t//Renovations and Residents\r\n\t\t\"dwellings.0.isRenovated\":\r\n\t\t\t\"=_input.homeForm.renovationsAndResidents.isHomeUnderRepairs\",\r\n\t\t\"dwellings.0.isCommunitySurrounded\":\r\n\t\t\t\"=_input.homeForm.renovationsAndResidents.isHomeInCommunity\",\r\n\t\t\"dwellings.0.isUnrelatedPeople\":\r\n\t\t\t\"=_input.homeForm.renovationsAndResidents.areUnrelatedPeopleInHome\",\r\n\r\n\t\t//Property Usage\r\n\t\t\"dwellings.0.isIncomeGenerated\":\r\n\t\t\t\"=_input.homeForm.propertyUsage.isPropertyForBusiness\",\r\n\t\t\"dwellings.0.incomeGeneratingDegree\":\r\n\t\t\t\"=_input.homeForm.propertyUsage.propertyActivityDegree\",\r\n\t\t\"dwellings.0.incomeGeneratingActivities\":\r\n\t\t\t\"=_input.homeForm.propertyUsage.propertyActivities\",\r\n\t\t\"dwellings.0.agriculturalActivities\":\r\n\t\t\t\"=_input.homeForm.propertyUsage.propertyAgricultureActivities\",\r\n\r\n\t\t//Mortgage on Property\r\n\t\t\"dwellings.0.isMortgagePresent\":\r\n\t\t\t\"=_input.homeForm.mortgageOnProperty.isPropertyUnderMortgage\",\r\n\r\n\t\t//Building step\r\n\t\t//Building Details\r\n\t\t\"dwellings.0.locationProperty\": {},\r\n\t\t\"dwellings.0.locationProperty.homeStandard\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeBuiltStandard\",\r\n\t\t\"dwellings.0.locationProperty.isLandSloped\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.landSlope\",\r\n\t\t\"dwellings.0.locationProperty.knowHomeSize\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeTotalArea\",\r\n\t\t\"dwellings.0.locationProperty.sizeOfHome\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeArea\",\r\n\t\t\"dwellings.0.locationProperty.areaUnit\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeAreaUnit\",\r\n\t\t\"dwellings.0.locationProperty.sizeOfBedroom\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeBedroomSize\",\r\n\t\t\"dwellings.0.isCycloneStandardlyBuilt\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.isBuiltToCycloneStandards\",\r\n\r\n\t\t/** These need to be be commented back in and converted to guide-wire expected values */\r\n\r\n\t\t\"dwellings.0.locationProperty.numberOfBedrooms\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeBedrooms\",\r\n\t\t\"dwellings.0.locationProperty.numberOfBalconies\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeDecks\",\r\n\t\t\"dwellings.0.locationProperty.numberOfVerandahs\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeVerandahs\",\r\n\t\t\"dwellings.0.locationProperty.numberOfCarports\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeCarports\",\r\n\t\t\"dwellings.0.locationProperty.numberOfGarages\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeGarages\",\r\n\t\t\"dwellings.0.locationProperty.hasSheds\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeSheds\",\r\n\r\n\t\t\"dwellings.0.locationProperty.numberOfLargeSheds\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.largeSheds\",\r\n\t\t\"dwellings.0.locationProperty.numberOfSmallSheds\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.smallSheds\",\r\n\r\n\t\t\"dwellings.0.locationProperty.hasDuctedAirConditioning\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeFeatures.ducted_airconditioning\",\r\n\t\t\"dwellings.0.locationProperty.hasInGroundPool\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeFeatures.in_ground_swimming_pool\",\r\n\t\t\"dwellings.0.locationProperty.hasTennisCourt\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeFeatures.tennis_court\",\r\n\t\t\"dwellings.0.locationProperty.hasGrannyFlat\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeFeatures.granny_flat\",\r\n\t\t\"dwellings.0.locationProperty.grannyFlatSize\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.grannyFlatSize\",\r\n\r\n\t\t//Covers Step\r\n\t\t//Your building\r\n\t\t\"dwellings.0.buildingSumInsured\":\r\n\t\t\t\"=_input.homeForm.yourBuilding.buildingSumInsured\",\r\n\r\n\t\t//Your contents\r\n\t\t\"dwellings.0.contentSumInsured\":\r\n\t\t\t\"=_input.homeForm.yourContents.contentsSumInsured\",\r\n\r\n\t\t//Portable Contents\r\n\t\t\"dwellings.0.hasPortableContentsHomeAway\":\r\n\t\t\t\"=_input.homeForm.portableContents.coverPortableContents\",\r\n\t\t\"dwellings.0.portableCoverCountry\":\r\n\t\t\t\"=_input.homeForm.portableContents.coverPortableContentsRegion\",\r\n\t\t\"dwellings.0.generalPortableContents\":\r\n\t\t\t\"=_input.homeForm.portableContents.coverPortableContentLimit\",\r\n\t\t\"dwellings.0.hasSpecifiedPortableContList\":\r\n\t\t\t\"=_input.homeForm.portableContents.portableContentsSpecifiedCover\",\r\n\t\t\"dwellings.0.hasGeneralPortableContents\":\r\n\t\t\t\"=_input.homeForm.portableContents.coverPortableContents\",\r\n\t\t//Accidental Loss or Damage\r\n\t\t\"dwellings.0.policyOption.isBuildingAccidentalDamage\":\r\n\t\t\t\"=_input.homeForm.accidentalLossOrDamage.coverAccDmgBuilding\",\r\n\t\t\"dwellings.0.policyOption.isContentsAccidentalDamage\":\r\n\t\t\t\"=_input.homeForm.accidentalLossOrDamage.coverAccDmgContents\",\r\n\r\n\t\t//Cycle Cover\r\n\t\t\"dwellings.0.policyOption.isContentsCycleCover\":\r\n\t\t\t\"=_input.homeForm.cycleCover.coverCycle\",\r\n\t\t\"dwellings.0.policyOption.isContentsCycleRacingCover\":\r\n\t\t\t\"=_input.homeForm.cycleCover.coverCycleExtendOption\",\r\n\t\t\"dwellings.0.policyOption.specifyCycleEquipment\":\r\n\t\t\t\"=_input.homeForm.cycleCover.coverItems\",\r\n\r\n\t\t//Rent Default\r\n\t\t\"dwellings.0.policyOption.isRentDefaultCover\":\r\n\t\t\t\"=_input.homeForm.rentDefault.rentDefault\",\r\n\r\n\t\t\"dwellings.0.excess\": {},\r\n\t\t\"dwellings.0.excess.voluntaryExcess\":\r\n\t\t\t\"=_input.homeForm.chooseYourExcess.homeExcess\",\r\n\t\t\"dwellings.0.excess.portableContentVoluntaryExcess\":\r\n\t\t\t\"=_input.homeForm.chooseYourExcess.portableContentsExcess\",\r\n\r\n\t\t//Specified High Risk Items\r\n\t\t\"dwellings.0.hasWorksArt\":\r\n\t\t\t\"=_input.homeForm.specifiedHighRiskItems.riskCoverIndividualWorks\",\r\n\t\t\"dwellings.0.hasEntertainmentEquipment\":\r\n\t\t\t\"=_input.homeForm.specifiedHighRiskItems.riskEntertainmentEquipment\",\r\n\r\n\t\t//Domestic Worker's compensation\r\n\t\t\"dwellings.0.policyOption.isContentsDomesticWorkerComp\":\r\n\t\t\t\"=_input.homeForm.domesticWorkerCompensation.domesticWorkerCompCover\",\r\n\r\n\t\t//quote steps\r\n\t\t\"dwellings.0.offering\":\r\n\t\t\t\"=_input.homeForm.confirmYourLevelOfCover.yourChosenCover\",\r\n\r\n\t\t//Contact Step\r\n\t\tpolicyHolders: [],\r\n\t\t\"policyHolders.0\": {},\r\n\t\t\"policyHolders.0.contact\": {},\r\n\t\t\"policyHolders.0.contact.primaryAddress\": \"=_addressSearch\",\r\n\t\t\"policyHolders.0.contact.dateOfBirth\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutInsured.dobOldestInsured\",\r\n\t\tpolicyAddress: \"=_addressSearch\",\r\n\t\t\"policyHolders.0.contact.primaryAddress.addressType\": \"residential\",\r\n\t\t\"policyAddress.addressType\": \"residential\",\r\n\t\tisInsuredsRetired: \"=_input.homeForm.tellUsAboutInsured.isRetired\",\r\n\t\thasPortableContentsClaims:\r\n\t\t\t\"=_input.homeForm.insuranceHistory.portableClaim\",\r\n\t\temail: \"=_input.email\",\r\n\t\tcampaignCode: \"=_input.homeForm.tellUsABitMore.promotionalCode\",\r\n\t\tpostalAddress: \"=_addressSearch-postal-address\",\r\n\t};\r\n\r\n\tfunction updatePolicyHolderPrimaryAddress(transformedRequest) {\r\n\t\tvar policyHolder = util.deepClone(transformedRequest.policyHolders[0]);\r\n\r\n\t\tpolicyHolder.contact.primaryAddress.addressType = \"residential\";\r\n\r\n\t\ttransformedRequest.policyHolders[0] = policyHolder;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateProductCode(transformedRequest, userInput) {\r\n\t\t//update productCode if rented\r\n\t\tif (\r\n\t\t\tuserInput.homeForm &&\r\n\t\t\tuserInput.homeForm.tellUsAboutTheProperty &&\r\n\t\t\tuserInput.homeForm.tellUsAboutTheProperty.howIsHomeOccupied\r\n\t\t) {\r\n\t\t\tvar landlordConditions = [\r\n\t\t\t\t\"own_rent_tenants\",\r\n\t\t\t\t\"own_rent_tenants_causalbasis\",\r\n\t\t\t\t\"property_used_hostel_or_guest\",\r\n\t\t\t];\r\n\t\t\tif (\r\n\t\t\t\tlandlordConditions.indexOf(\r\n\t\t\t\t\tuserInput.homeForm.tellUsAboutTheProperty.howIsHomeOccupied\r\n\t\t\t\t) > -1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.productCode = \"QPHLandlord\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateMortgagees(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm && !userInput.homeForm.mortgageOnProperty) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tvar mortgageOnProperty = userInput.homeForm.mortgageOnProperty;\r\n\t\tif (mortgageOnProperty.isPropertyUnderMortgage) {\r\n\t\t\ttransformedRequest.dwellings[0].isMortgagePresent = true;\r\n\t\t\tvar _mortgagees = [];\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith.forEach(function (\r\n\t\t\t\titem,\r\n\t\t\t\tindex\r\n\t\t\t) {\r\n\t\t\t\tvar _mortgagee = {\r\n\t\t\t\t\tmortgagee: item,\r\n\t\t\t\t\tstatus: index + 1,\r\n\t\t\t\t};\r\n\t\t\t\t_mortgagees.push(_mortgagee);\r\n\t\t\t});\r\n\t\t\tif (_mortgagees.length > 0) {\r\n\t\t\t\ttransformedRequest.dwellings[0].mortgagees = _mortgagees;\r\n\t\t\t} else {\r\n\t\t\t\tif (transformedRequest.dwellings[0].mortgagees) {\r\n\t\t\t\t\tdelete transformedRequest.dwellings[0].mortgagees;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\ttransformedRequest.dwellings[0].isMortgagePresent = false;\r\n\t\t\tif (transformedRequest.dwellings[0].mortgagees) {\r\n\t\t\t\tdelete transformedRequest.dwellings[0].mortgagees;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction UpdateAlarmType(transformedRequest, userInput) {\r\n\t\tvar localAlarm = false;\r\n\t\tvar _24HourAlarm = false;\r\n\r\n\t\tif (\r\n\t\t\tuserInput.homeForm.tellUsAboutTheSecurity &&\r\n\t\t\tuserInput.homeForm.tellUsAboutTheSecurity.otherSecurity\r\n\t\t) {\r\n\t\t\tlocalAlarm =\r\n\t\t\t\tuserInput.homeForm.tellUsAboutTheSecurity.otherSecurity[\r\n\t\t\t\t\t\"local_alarm\"\r\n\t\t\t\t];\r\n\t\t\t_24HourAlarm =\r\n\t\t\t\tuserInput.homeForm.tellUsAboutTheSecurity.otherSecurity[\r\n\t\t\t\t\t\"24_hour_monitored_alarm\"\r\n\t\t\t\t];\r\n\t\t}\r\n\r\n\t\ttransformedRequest.dwellings[0].locationSecurity.haveSecurityAlarm = false;\r\n\r\n\t\tvar result = \"\";\r\n\r\n\t\tif (localAlarm && Boolean(localAlarm)) {\r\n\t\t\tresult = \"local_alarm\";\r\n\t\t\ttransformedRequest.dwellings[0].locationSecurity.haveSecurityAlarm = true;\r\n\t\t} else if (_24HourAlarm && Boolean(_24HourAlarm)) {\r\n\t\t\tresult = \"monitored_alarm\";\r\n\t\t\ttransformedRequest.dwellings[0].locationSecurity.haveSecurityAlarm = true;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.dwellings[0].locationSecurity.typeOfAlarm = result;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction UpdateRentDefault(transformedRequest, userInput) {\r\n\t\t// if (!userInput.homeForm.rentDefault) {\r\n\t\t// \treturn transformedRequest;\r\n\t\t// }\r\n\r\n\t\t// var rentDefault = userInput.homeForm.rentDefault;\r\n\r\n\t\t// if (rentDefault.rentCurrentWeekly) {\r\n\t\t// \ttransformedRequest.dwellings[0].policyOption.rentDefaultAmount =\r\n\t\t// \t\trentDefault.rentCurrentWeekly;\r\n\t\t// }\r\n\r\n\t\t// if (rentDefault.rentXWeeks) {\r\n\t\t// \ttransformedRequest.dwellings[0].policyOption.rentDefaultWeeks =\r\n\t\t// \t\trentDefault.rentXWeeks;\r\n\t\t// }\r\n\r\n\t\t//dd-6486 - assign rent default cover to false when occupancy is rent casual basis\r\n\t\tif (\r\n\t\t\ttransformedRequest.dwellings[0].homeOccupancy ==\r\n\t\t\t\"own_rent_tenants_causalbasis\"\r\n\t\t) {\r\n\t\t\ttransformedRequest.dwellings[0].policyOption.isRentDefaultCover = false;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\ttransformedRequest.dwellings[0].homeOccupancy ===\r\n\t\t\t\t\"own_rent_tenants\" &&\r\n\t\t\ttransformedRequest.dwellings[0].policyOption\r\n\t\t\t\t.isPropertyAgentManaged == true\r\n\t\t) {\r\n\t\t\ttransformedRequest.dwellings[0].policyOption.isRentDefaultCover = false;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateCoverType(transformedRequest, userInput) {\r\n\t\t// debugger;\r\n\t\tif (userInput.homeForm && userInput.homeForm.tellUsHowWeCanInsureYou) {\r\n\t\t\tif (userInput.homeForm.tellUsHowWeCanInsureYou.coverNeeds) {\r\n\t\t\t\tvar needs =\r\n\t\t\t\t\tuserInput.homeForm.tellUsHowWeCanInsureYou.coverNeeds;\r\n\t\t\t\tif (needs.building && needs.contents) {\r\n\t\t\t\t\ttransformedRequest.dwellings[0].coverType =\r\n\t\t\t\t\t\t\"building_and_contents\";\r\n\t\t\t\t} else if (needs.building) {\r\n\t\t\t\t\ttransformedRequest.dwellings[0].coverType = \"building_only\";\r\n\t\t\t\t} else if (needs.contents) {\r\n\t\t\t\t\ttransformedRequest.dwellings[0].coverType = \"contents_only\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transposeMonth(monthName) {\r\n\t\tvar months = {\r\n\t\t\tJanuary: \"01\",\r\n\t\t\tFebruary: \"02\",\r\n\t\t\tMarch: \"03\",\r\n\t\t\tApril: \"04\",\r\n\t\t\tMay: \"05\",\r\n\t\t\tJune: \"06\",\r\n\t\t\tJuly: \"07\",\r\n\t\t\tAugust: \"08\",\r\n\t\t\tSeptember: \"09\",\r\n\t\t\tOctober: \"10\",\r\n\t\t\tNovember: \"11\",\r\n\t\t\tDecember: \"12\",\r\n\t\t};\r\n\r\n\t\treturn months[monthName];\r\n\t}\r\n\r\n\tfunction updateDwellingHistory(transformedRequest) {\r\n\t\tvar transformedHistoryList = [];\r\n\r\n\t\tif (\r\n\t\t\ttransformedRequest.dwellings &&\r\n\t\t\ttransformedRequest.dwellings[0].hasInsuredClaims === \"yes\"\r\n\t\t) {\r\n\t\t\tvar dwellingClaimHistory = transformedRequest.dwellings[0].dwellingClaimHistories.slice(\r\n\t\t\t\t0\r\n\t\t\t);\r\n\t\t\tdwellingClaimHistory.forEach(function (history) {\r\n\t\t\t\tconsole.log(history);\r\n\t\t\t\tvar transformedHistory = {\r\n\t\t\t\t\tpattern: {},\r\n\t\t\t\t\tyear: history.year.value,\r\n\t\t\t\t\tclaimType: history.coverAffected.value,\r\n\t\t\t\t\tisPortableContents: false,\r\n\t\t\t\t\teventMonth: transposeMonth(history.month.value),\r\n\t\t\t\t};\r\n\t\t\t\ttransformedHistory.pattern = {\r\n\t\t\t\t\tpublicID: history.description.publicID,\r\n\t\t\t\t\tcode: history.description.code,\r\n\t\t\t\t\tdescription: history.description.description,\r\n\t\t\t\t\tfilter1: history.description.filter1,\r\n\t\t\t\t};\r\n\t\t\t\ttransformedHistoryList.push(transformedHistory);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (transformedRequest.hasPortableContentsClaims === \"yes\") {\r\n\t\t\tvar dwellingPortableClaimHistory = transformedRequest.dwellings[0].dwellingPortableClaimHistories.slice(\r\n\t\t\t\t0\r\n\t\t\t);\r\n\t\t\tdwellingPortableClaimHistory.forEach(function (history) {\r\n\t\t\t\tconsole.log(history);\r\n\t\t\t\tvar transformedHistory = {\r\n\t\t\t\t\tpattern: {},\r\n\t\t\t\t\tyear: history.year.value,\r\n\t\t\t\t\tcontentCategory: history.coverAffected.value,\r\n\t\t\t\t\tisPortableContents: true,\r\n\r\n\t\t\t\t\teventMonth: transposeMonth(history.month.value),\r\n\t\t\t\t};\r\n\t\t\t\ttransformedHistory.pattern = {\r\n\t\t\t\t\tpublicID: history.description.publicID,\r\n\t\t\t\t\tcode: history.description.code,\r\n\t\t\t\t\tdescription: history.description.description,\r\n\t\t\t\t\tfilter1: history.description.filter1,\r\n\t\t\t\t};\r\n\t\t\t\ttransformedHistoryList.push(transformedHistory);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (transformedRequest.dwellings) {\r\n\t\t\tif (\r\n\t\t\t\ttransformedRequest.dwellings &&\r\n\t\t\t\ttransformedHistoryList.length > 0\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.dwellings[0].dwellingHistories = transformedHistoryList;\r\n\t\t\t} else {\r\n\t\t\t\tdelete transformedRequest.dwellings[0].dwellingHistories;\r\n\t\t\t}\r\n\r\n\t\t\t//removing as this is not requred by the service\r\n\t\t\tdelete transformedRequest.dwellings[0].dwellingClaimHistories;\r\n\t\t\tdelete transformedRequest.dwellings[0]\r\n\t\t\t\t.dwellingPortableClaimHistories;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction UpdateCycles(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.homeForm.cycleCover &&\r\n\t\t\tuserInput.homeForm.cycleCover.cycleList &&\r\n\t\t\tuserInput.homeForm.cycleCover.cycleList.length > 0\r\n\t\t) {\r\n\t\t\tvar cycles = [];\r\n\r\n\t\t\tuserInput.homeForm.cycleCover.cycleList.forEach(function (\r\n\t\t\t\tcycle,\r\n\t\t\t\tidx\r\n\t\t\t) {\r\n\t\t\t\tcycles.push({\r\n\t\t\t\t\ttypeOfBicycle: cycle.bikeType.value,\r\n\t\t\t\t\tdescription: cycle.description,\r\n\t\t\t\t\tvalue: cycle.value,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.dwellings[0].policyOption.cycles = cycles;\r\n\t\t} else {\r\n\t\t\tdelete transformedRequest.dwellings[0].policyOption.cycles;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.homeForm.cycleCover &&\r\n\t\t\tuserInput.homeForm.cycleCover.coverItemsList &&\r\n\t\t\tuserInput.homeForm.cycleCover.coverItemsList.length > 0\r\n\t\t) {\r\n\t\t\tvar cycleItems = [];\r\n\r\n\t\t\tuserInput.homeForm.cycleCover.coverItemsList.forEach(function (\r\n\t\t\t\titem,\r\n\t\t\t\tidx\r\n\t\t\t) {\r\n\t\t\t\tcycleItems.push({\r\n\t\t\t\t\tcategory: item.category.value,\r\n\t\t\t\t\tdescription: item.description,\r\n\t\t\t\t\tvalue: item.value,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.dwellings[0].policyOption.cycleEquipments = cycleItems;\r\n\t\t} else {\r\n\t\t\tdelete transformedRequest.dwellings[0].policyOption.cycleEquipments;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateSumInsured(transformedRequest, userInput) {\r\n\t\tvar homeForm = userInput.homeForm,\r\n\t\t\tdwellingsInfo = transformedRequest.dwellings[0];\r\n\t\tif (!homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\t//over write sum insured from quote page\r\n\t\tif (\r\n\t\t\thomeForm.confirmYourSumsInsured &&\r\n\t\t\thomeForm.confirmYourSumsInsured.yourBuildingSumInsured\r\n\t\t) {\r\n\t\t\tdwellingsInfo.buildingSumInsured =\r\n\t\t\t\thomeForm.confirmYourSumsInsured.yourBuildingSumInsured;\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\thomeForm.yourBuilding &&\r\n\t\t\t\thomeForm.yourBuilding.buildingSumInsured\r\n\t\t\t) {\r\n\t\t\t\tdwellingsInfo.buildingSumInsured =\r\n\t\t\t\t\thomeForm.yourBuilding.buildingSumInsured;\r\n\t\t\t} else if (\r\n\t\t\t\thomeForm.rapidEstimate &&\r\n\t\t\t\thomeForm.rapidEstimate.buildingInsureAmount\r\n\t\t\t) {\r\n\t\t\t\tdwellingsInfo.buildingSumInsured =\r\n\t\t\t\t\thomeForm.rapidEstimate.buildingInsureAmount;\r\n\t\t\t} else {\r\n\t\t\t\tdwellingsInfo.buildingSumInsured = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\t//over write sum insured from quote page\r\n\t\tif (\r\n\t\t\thomeForm.confirmYourSumsInsured &&\r\n\t\t\thomeForm.confirmYourSumsInsured.yourContentsSumInsured\r\n\t\t) {\r\n\t\t\tdwellingsInfo.contentSumInsured =\r\n\t\t\t\thomeForm.confirmYourSumsInsured.yourContentsSumInsured;\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\thomeForm.yourContents &&\r\n\t\t\t\thomeForm.yourContents.contentsSumInsured\r\n\t\t\t) {\r\n\t\t\t\tdwellingsInfo.contentSumInsured =\r\n\t\t\t\t\thomeForm.yourContents.contentsSumInsured;\r\n\t\t\t} else if (\r\n\t\t\t\thomeForm.rapidEstimate &&\r\n\t\t\t\thomeForm.rapidEstimate.contentInsureAmount\r\n\t\t\t) {\r\n\t\t\t\tdwellingsInfo.contentSumInsured =\r\n\t\t\t\t\thomeForm.rapidEstimate.contentInsureAmount;\r\n\t\t\t} else {\r\n\t\t\t\tdwellingsInfo.contentSumInsured = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateBuildingDetails(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (userInput.homeForm.buildingDetails) {\r\n\t\t\tvar slope =\r\n\t\t\t\ttransformedRequest.dwellings[0].locationProperty.isLandSloped;\r\n\t\t\tif (slope === \"flat\") {\r\n\t\t\t\ttransformedRequest.dwellings[0].locationProperty.isLandSloped =\r\n\t\t\t\t\t\"flat\";\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.dwellings[0].locationProperty.isLandSloped =\r\n\t\t\t\t\t\"sloped\";\r\n\r\n\t\t\t\ttransformedRequest.dwellings[0].locationProperty.slopeType = slope;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePersonContactDetails(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tvar homeForm = userInput.homeForm;\r\n\r\n\t\tif (\r\n\t\t\thomeForm.letsGetStarted &&\r\n\t\t\thomeForm.letsGetStarted.personOrCompany\r\n\t\t) {\r\n\t\t\tvar isCompany = homeForm.letsGetStarted.personOrCompany != \"person\";\r\n\t\t} else {\r\n\t\t\t//dont do transofrmation if personOrCompany is not present\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (isCompany) {\r\n\t\t\t// aboutTheCompany\r\n\t\t\tvar aboutTheCompany = homeForm.aboutTheCompany;\r\n\t\t\tvar aboutCompanyContact = homeForm.aboutCompanyContact;\r\n\t\t\tvar companyContactContact = homeForm.companyContactContact;\r\n\r\n\t\t\tif (\r\n\t\t\t\taboutTheCompany &&\r\n\t\t\t\taboutCompanyContact &&\r\n\t\t\t\tcompanyContactContact\r\n\t\t\t) {\r\n\t\t\t\tvar policyHolders = [];\r\n\r\n\t\t\t\tvar _authorisedPerson = util.deepClone(aboutCompanyContact);\r\n\t\t\t\t_authorisedPerson.contactType = \"person\";\r\n\t\t\t\t_authorisedPerson.primaryAddress = util.deepClone(\r\n\t\t\t\t\tcompanyContactContact.companyContactResidentialAddress\r\n\t\t\t\t);\r\n\t\t\t\t_authorisedPerson.emailAddress1 =\r\n\t\t\t\t\tcompanyContactContact.emailAddress1;\r\n\t\t\t\t_authorisedPerson.primaryPhone =\r\n\t\t\t\t\tcompanyContactContact.primaryPhone;\r\n\t\t\t\t_authorisedPerson.contactNumber =\r\n\t\t\t\t\tcompanyContactContact.contactNumber;\r\n\t\t\t\t_authorisedPerson = constructPhoneNumberObject(\r\n\t\t\t\t\t_authorisedPerson\r\n\t\t\t\t);\r\n\t\t\t\tdelete _authorisedPerson.address;\r\n\r\n\t\t\t\tvar _contact = util.deepClone(aboutTheCompany);\r\n\t\t\t\t_contact.contactType = \"company\";\r\n\t\t\t\t_contact.primaryPhone = \"work\";\r\n\t\t\t\t_contact.authorisedPersons = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tperson: _authorisedPerson,\r\n\t\t\t\t\t},\r\n\t\t\t\t];\r\n\t\t\t\t_contact.primaryAddress = util.deepClone(\r\n\t\t\t\t\t_contact.companyAddress\r\n\t\t\t\t);\r\n\t\t\t\t_contact.passwordQuestion =\r\n\t\t\t\t\tcompanyContactContact.passwordQuestion;\r\n\t\t\t\t_contact.passwordAnswer = companyContactContact.passwordAnswer;\r\n\t\t\t\tdelete _contact.address;\r\n\r\n\t\t\t\tpolicyHolders.push({\r\n\t\t\t\t\tcontact: _contact,\r\n\t\t\t\t\tmainHolder: true,\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\thomeForm &&\r\n\t\t\t\t\thomeForm.companyContactContact &&\r\n\t\t\t\t\thomeForm.companyContactContact\r\n\t\t\t\t\t\t.companyContactMailingPreference\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\t\t\thomeForm.companyContactContact.companyContactMailingPreference;\r\n\t\t\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t\t.companyContactMailingPreference;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttransformedRequest.policyHolders = policyHolders;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar mainPolicyHolder = homeForm.mainPolicyHolder;\r\n\t\t\tvar mainPolicyHolderContact = homeForm.mainPolicyHolderContact;\r\n\r\n\t\t\tif (mainPolicyHolder && mainPolicyHolderContact) {\r\n\t\t\t\tvar policyHolders = [];\r\n\r\n\t\t\t\t//create main policy holder\r\n\t\t\t\tvar _contact = Object.extend(\r\n\t\t\t\t\tmainPolicyHolder,\r\n\t\t\t\t\tmainPolicyHolderContact\r\n\t\t\t\t);\r\n\t\t\t\t_contact.contactType = \"person\";\r\n\t\t\t\t//_contact.primaryAddress = util.deepClone(_contact.address);\r\n\t\t\t\t_contact.primaryAddress = util.deepClone(\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.primaryAddress\r\n\t\t\t\t);\r\n\t\t\t\tdelete _contact.address;\r\n\r\n\t\t\t\tvar _mainPolicyHolder = {\r\n\t\t\t\t\tcontact: _contact,\r\n\t\t\t\t\tmainHolder: true,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tpolicyHolders.push(_mainPolicyHolder);\r\n\r\n\t\t\t\t//check for addition policy holders\r\n\t\t\t\tif (\r\n\t\t\t\t\thomeForm.additionalPolicyHolders &&\r\n\t\t\t\t\thomeForm.additionalPolicyHolders.policyHolders &&\r\n\t\t\t\t\thomeForm.additionalPolicyHolders.policyHolders.length > 0\r\n\t\t\t\t) {\r\n\t\t\t\t\tvar _additionalPolicyHolders =\r\n\t\t\t\t\t\thomeForm.additionalPolicyHolders.policyHolders;\r\n\r\n\t\t\t\t\t_additionalPolicyHolders.forEach(function (\r\n\t\t\t\t\t\tpolicyHolderItem\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tvar _contact = util.deepClone(policyHolderItem);\r\n\t\t\t\t\t\t_contact.contactType = \"person\";\r\n\t\t\t\t\t\t_contact.primaryAddress = util.deepClone(\r\n\t\t\t\t\t\t\t_contact.address\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tdelete _contact.address;\r\n\t\t\t\t\t\tvar _additionalPolicyHolder = {\r\n\t\t\t\t\t\t\tcontact: _contact,\r\n\t\t\t\t\t\t\tmainHolder: false,\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tpolicyHolders.push(_additionalPolicyHolder);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//update convictions for all and mobile number\r\n\t\t\t\tpolicyHolders.map(function (policyHolderItem) {\r\n\t\t\t\t\tpolicyHolderItem.contact = constructPhoneNumberObject(\r\n\t\t\t\t\t\tpolicyHolderItem.contact\r\n\t\t\t\t\t);\r\n\t\t\t\t\tpolicyHolderItem.contact = constructConvictionHistoryObject(\r\n\t\t\t\t\t\tpolicyHolderItem.contact\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treturn policyHolderItem;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\thomeForm &&\r\n\t\t\t\t\thomeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\thomeForm.mainPolicyHolderContact\r\n\t\t\t\t\t\t.personContactMailingPreference\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\t\t\thomeForm.mainPolicyHolderContact.personContactMailingPreference;\r\n\t\t\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t\t.personContactMailingPreference;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttransformedRequest.policyHolders = policyHolders;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/** required for saving/retrieving the policy */\r\n\t\tif (userInput.email) {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t} else if (\r\n\t\t\t\tuserInput.homeForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.email;\r\n\t\t\t\ttransformedRequest.email = userInput.email;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\tif (transformedRequest.policyHolders[0].contact.emailAddress1) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction constructPhoneNumberObject(contactInfo) {\r\n\t\tif (contactInfo) {\r\n\t\t\tif (!contactInfo.primaryPhone) {\r\n\t\t\t\tcontactInfo.primaryPhone = \"work\";\r\n\t\t\t}\r\n\r\n\t\t\tswitch (contactInfo.primaryPhone) {\r\n\t\t\t\tcase \"mobile\":\r\n\t\t\t\t\tcontactInfo.cellPhone = contactInfo.contactNumber;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"home\":\r\n\t\t\t\t\tcontactInfo.homePhone = contactInfo.contactNumber;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"work\":\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tcontactInfo.workPhone = contactInfo.contactNumber;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn contactInfo;\r\n\t}\r\n\r\n\tfunction constructConvictionHistoryObject(contactInfo) {\r\n\t\tif (contactInfo) {\r\n\t\t\tif (contactInfo.tenYears_chargedOrConvictedOffences == \"yes\") {\r\n\t\t\t\tcontactInfo.hasConviction = \"yes\";\r\n\t\t\t} else if (\r\n\t\t\t\tcontactInfo.tenYears_chargedOrConvictedOffences == \"no\"\r\n\t\t\t) {\r\n\t\t\t\tcontactInfo.hasConviction = \"no\";\r\n\t\t\t} else {\r\n\t\t\t\tcontactInfo.hasConviction = \"unknown\";\r\n\t\t\t}\r\n\r\n\t\t\tdelete contactInfo.tenYears_chargedOrConvictedOffences;\r\n\r\n\t\t\tif (\r\n\t\t\t\tcontactInfo &&\r\n\t\t\t\tcontactInfo.tenYears_chargedOrConvictedOffencesDetails &&\r\n\t\t\t\tcontactInfo.tenYears_chargedOrConvictedOffencesDetails.length >\r\n\t\t\t\t\t0\r\n\t\t\t) {\r\n\t\t\t\tcontactInfo.dwellingHistory = [];\r\n\r\n\t\t\t\tcontactInfo.tenYears_chargedOrConvictedOffencesDetails.forEach(\r\n\t\t\t\t\tfunction (incident) {\r\n\t\t\t\t\t\tcontactInfo.dwellingHistory.push({\r\n\t\t\t\t\t\t\tpattern: incident.description,\r\n\t\t\t\t\t\t\teventMonth: incident.month.value,\r\n\t\t\t\t\t\t\tyear: parseInt(incident.year.value),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\tdelete contactInfo.tenYears_chargedOrConvictedOffencesDetails;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn contactInfo;\r\n\t}\r\n\r\n\tfunction updateCordelInfo(transformedRequest) {\r\n\t\tif (quoteOptions.getSelectedQuoteResultForPayment())\r\n\t\t\ttransformedRequest.dwellings[0].cordelInfo = quoteOptions.getSelectedQuoteResultForPayment().cordelInfo;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateConfirmedValue(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tvar confirmYourSumsInsured = userInput.homeForm.confirmYourSumsInsured;\r\n\t\tif (confirmYourSumsInsured) {\r\n\t\t\tif (confirmYourSumsInsured.generalPortableContentsLimit) {\r\n\t\t\t\ttransformedRequest.dwellings[0].generalPortableContents =\r\n\t\t\t\t\tconfirmYourSumsInsured.generalPortableContentsLimit;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar confirmYourOptionalBenefits =\r\n\t\t\tuserInput.homeForm.confirmYourOptionalBenefits;\r\n\t\tif (confirmYourOptionalBenefits) {\r\n\t\t\tif (confirmYourOptionalBenefits.accdLossDmgCoverBuilding) {\r\n\t\t\t\ttransformedRequest.dwellings[0].policyOption.isBuildingAccidentalDamage = true;\r\n\t\t\t}\r\n\t\t\tif (confirmYourOptionalBenefits.accdLossDmgCoverContents) {\r\n\t\t\t\ttransformedRequest.dwellings[0].policyOption.isContentsAccidentalDamage = true;\r\n\t\t\t}\r\n\t\t\tif (confirmYourOptionalBenefits.domesticWrkCompCover) {\r\n\t\t\t\ttransformedRequest.dwellings[0].policyOption.isContentsDomesticWorkerComp = true;\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.dwellings[0].policyOption.isContentsDomesticWorkerComp = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// !imp - transform the quote to use company contact and transforms only if company data is not available\r\n\tfunction updateRequoteCompanyContactForBlank(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tvar homeForm = userInput.homeForm;\r\n\r\n\t\t//check if person or company data is available\r\n\t\tif (\r\n\t\t\thomeForm.letsGetStarted &&\r\n\t\t\thomeForm.letsGetStarted.personOrCompany\r\n\t\t) {\r\n\t\t\tvar isCompany = homeForm.letsGetStarted.personOrCompany != \"person\";\r\n\t\t} else {\r\n\t\t\t//dont do transofrmation if personOrCompany is not present\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (isCompany) {\r\n\t\t\t//check if company contact details are available\r\n\t\t\tvar aboutTheCompany = homeForm.aboutTheCompany;\r\n\t\t\tvar aboutCompanyContact = homeForm.aboutCompanyContact;\r\n\t\t\tvar companyContactContact = homeForm.companyContactContact;\r\n\t\t\tif (\r\n\t\t\t\taboutTheCompany &&\r\n\t\t\t\taboutCompanyContact &&\r\n\t\t\t\tcompanyContactContact\r\n\t\t\t) {\r\n\t\t\t\t//if data is available dont do anything\r\n\t\t\t} else {\r\n\t\t\t\t// create default data for company contact\r\n\t\t\t\tvar _contact = transformedRequest.policyHolders[0].contact;\r\n\t\t\t\t_contact.contactType = \"company\";\r\n\t\t\t\t_contact.primaryPhone = \"work\";\r\n\t\t\t\t_contact.authorisedPersons = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tperson: {\r\n\t\t\t\t\t\t\tcontactType: \"person\",\r\n\t\t\t\t\t\t\tprimaryAddress: _contact.primaryAddress,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t];\r\n\r\n\t\t\t\ttransformedRequest.policyHolders[0] = {\r\n\t\t\t\t\tmainHolder: true,\r\n\t\t\t\t\tcontact: _contact,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePropertyDetails(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm && !userInput.homeForm.tellUsAboutTheBuilding) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!userInput.homeForm.tellUsAboutTheBuilding.isHomeElevated ||\r\n\t\t\tuserInput.homeForm.tellUsAboutTheBuilding.isHomeElevated ==\r\n\t\t\t\t\"notasked\"\r\n\t\t) {\r\n\t\t\ttransformedRequest.dwellings[0].isGroundLevelElevated = \"no\";\r\n\t\t} else {\r\n\t\t\ttransformedRequest.dwellings[0].isGroundLevelElevated = \"yes\";\r\n\t\t}\r\n\r\n\t\t//update cyclone standard based on the yearHomeBuilt\r\n\t\tvar yearBuilt = userInput.homeForm.tellUsAboutTheBuilding.yearHomeBuilt;\r\n\r\n\t\tif (yearBuilt == 19801989) {\r\n\t\t\t//don't change user selection\r\n\t\t} else if (yearBuilt == 19901999) {\r\n\t\t\ttransformedRequest.dwellings[0].isCycloneStandardlyBuilt = true;\r\n\t\t} else if (yearBuilt > 1999 && yearBuilt < 2100) {\r\n\t\t\ttransformedRequest.dwellings[0].isCycloneStandardlyBuilt = true;\r\n\t\t} else {\r\n\t\t\ttransformedRequest.dwellings[0].isCycloneStandardlyBuilt = false;\r\n\t\t}\r\n\t\t// transformedRequest.dwellings[0].isCycloneStandardlyBuilt\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//updates the email\r\n\tfunction updateEmail(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tuserInput.homeForm &&\r\n\t\t\tuserInput.homeForm.tellUsABitMore &&\r\n\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress\r\n\t\t) {\r\n\t\t\ttransformedRequest.email =\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t} else {\r\n\t\t\t//set email from maincontact if not available in tellUsABitMore\r\n\t\t\tif (\r\n\t\t\t\tuserInput.homeForm &&\r\n\t\t\t\tuserInput.homeForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.homeForm &&\r\n\t\t\tuserInput.homeForm.tellUsABitMore &&\r\n\t\t\tuserInput.homeForm.tellUsABitMore.promotionalCode\r\n\t\t) {\r\n\t\t\ttransformedRequest.campaignCode =\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore.promotionalCode;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//contains the logic for isInsuredsOverTheAge\r\n\tfunction determineIsInsuredsOverTheAge(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tuserInput.homeForm &&\r\n\t\t\tuserInput.homeForm.tellUsAboutInsured &&\r\n\t\t\tuserInput.homeForm.tellUsAboutInsured.dobOldestInsured\r\n\t\t) {\r\n\t\t\ttransformedRequest.isInsuredsOverTheAge =\r\n\t\t\t\tmoment().diff(\r\n\t\t\t\t\tmoment(\r\n\t\t\t\t\t\tuserInput.homeForm.tellUsAboutInsured.dobOldestInsured,\r\n\t\t\t\t\t\t\"DD/MM/YYYY\"\r\n\t\t\t\t\t),\r\n\t\t\t\t\t\"years\"\r\n\t\t\t\t) >= 50;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyAddress(transformedRequest, userInput) {\r\n\t\tvar postalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\tif (\r\n\t\t\tangular.isDefined(userInput.homeForm.mainPolicyHolderContact) ||\r\n\t\t\tangular.isDefined(userInput.homeForm.companyContact)\r\n\t\t) {\r\n\t\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t} else {\r\n\t\t\t\tvar isPostalOption = true;\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.homeForm.letsGetStarted.personOrCompany ==\r\n\t\t\t\t\t\"person\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tisPostalOption =\r\n\t\t\t\t\t\tuserInput.homeForm.mainPolicyHolderContact\r\n\t\t\t\t\t\t\t.personContactSamePostalAddress;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tisPostalOption = angular.isDefined(\r\n\t\t\t\t\t\tuserInput.homeForm.companyContact\r\n\t\t\t\t\t)\r\n\t\t\t\t\t\t? userInput.homeForm.companyContact\r\n\t\t\t\t\t\t\t\t.companyContactSamePostalAddress\r\n\t\t\t\t\t\t: true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0 && !isPostalOption) {\r\n\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdelete transformedRequest.postalAddress;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateWebBots(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tangular.isDefined(userInput.homeForm.isSyntheticTransaction_Ext) &&\r\n\t\t\tangular.isDefined(userInput.homeForm.syntheticSource_Ext)\r\n\t\t) {\r\n\t\t\ttransformedRequest.IsSyntheticTransaction_Ext =\r\n\t\t\t\tuserInput.homeForm.isSyntheticTransaction_Ext == \"true\"\r\n\t\t\t\t\t? true\r\n\t\t\t\t\t: false;\r\n\t\t\ttransformedRequest.SyntheticSource_Ext =\r\n\t\t\t\tuserInput.homeForm.syntheticSource_Ext;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(userInput) {\r\n\t\tvar transformedRequest = jsonMapper.transform(\r\n\t\t\tuserInput,\r\n\t\t\tstructureQuoteMapping\r\n\t\t);\r\n\t\ttransformedRequest = UpdateAlarmType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateCoverType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePropertyDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateMortgagees(transformedRequest, userInput);\r\n\r\n\t\ttransformedRequest = UpdateRentDefault(transformedRequest, userInput);\r\n\r\n\t\ttransformedRequest = UpdateCycles(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateDwellingHistory(transformedRequest);\r\n\t\ttransformedRequest = updateSumInsured(transformedRequest, userInput);\r\n\r\n\t\ttransformedRequest = updateProductCode(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateBuildingDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updatePersonContactDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\r\n\t\ttransformedRequest = updateCordelInfo(transformedRequest);\r\n\t\ttransformedRequest = updateConfirmedValue(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\r\n\t\ttransformedRequest = updateRequoteCompanyContactForBlank(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\r\n\t\ttransformedRequest = updateEmail(transformedRequest, userInput);\r\n\r\n\t\ttransformedRequest = determineIsInsuredsOverTheAge(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\r\n\t\ttransformedRequest = updatePolicyAddress(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateWebBots(transformedRequest, userInput);\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform,\r\n\t};\r\n}\r\n","function VehicleCleanRequestTransformer(Util, jsonMapper) {\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tdelete intermediateRequest.vehicleForm;\r\n\r\n\t\tvar vehicle = intermediateRequest.vehicles[0];\r\n\t\tvar policyHolders = intermediateRequest.policyHolders;\r\n\t\tdelete vehicle.paymentOptions ;\r\n\t\tdelete vehicle.locationParked ;\r\n\t\tdelete vehicle.primaryCarUse ;\r\n\t\tdelete vehicle.businessActivityType ;\r\n\t\tdelete vehicle.commercialActivityType ;\r\n\t\tdelete vehicle.modifications ;\r\n\t\tdelete vehicle.modificationsOptions ;\r\n\t\tdelete vehicle.modificationsBuilt ;\r\n\t\tdelete vehicle.modificationsBuiltOptions ;\r\n\t\tdelete vehicle.carFinance ;\r\n\t\tdelete vehicle.last12Months ;\r\n\r\n\t\tdelete vehicle.vehicleInfo.averageKM;\r\n\t\tdelete vehicle.vehicleInfo.cylinders;\r\n\t\tdelete vehicle.vehicleInfo.description;\r\n\t\tdelete vehicle.vehicleInfo.engineDescription;\r\n\t\tdelete vehicle.vehicleInfo.goodKM;\r\n\t\tdelete vehicle.vehicleInfo.goodRetailPrice;\r\n\t\tdelete vehicle.vehicleInfo.imageUrls;\r\n\t\tdelete vehicle.vehicleInfo.inductionDescription;\r\n\t\tdelete vehicle.vehicleInfo.kerbWeight;\r\n\t\tdelete vehicle.vehicleInfo.optionalEquipments;\r\n\t\tdelete vehicle.vehicleInfo.power;\r\n\t\tdelete vehicle.vehicleInfo.ratingGrade;\r\n\t\tdelete vehicle.vehicleInfo.standardEquipments;\r\n\t\tdelete vehicle.vehicleInfo.vehicleKey;\r\n\t\tdelete vehicle.vehicleInfo.vin;\r\n\r\n\r\n\t\tif ( vehicle.drivers ) {\r\n\t\t\tvehicle.drivers.forEach(function(policyDriver) {\r\n\t\t\t\tdelete policyDriver.driver._HTMLID;\r\n\t\t\t\tdelete policyDriver.driver.$$hashKey;\r\n\t\t\t\tdelete policyDriver.driver._aggregator;\r\n\r\n\t\t\t\tdelete policyDriver.driver.maxNoClaimBonus;\r\n\t\t\t\tdelete policyDriver.driver.title;\r\n\t\t\t\tdelete policyDriver.driver.yearsHeld;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_licenceRSDC;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_licenceRSDCDetails;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_vehicleAccidentsClaimsDetails;\r\n\t\t\t\tdelete policyDriver.driver.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tdelete policyDriver.driver.tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t* Guidewire creates duplicate records of other drivers criminal histories\r\n\t\t\t\t* if the driverHistory is sent as an empty array :)\r\n\t\t\t\t* For now this has been commented out and moved to PublicIDTransformer as that\r\n\t\t\t\t* is creating an array when going through and transforming public ID's for a list. This behaviour should be changed for empty lists.\r\n\t\t\t\t* After changing that, this can be commented back in and removed from publicIDTransformer.\r\n\t\t\t\tif ( policyDriver.driver.driverHistory\r\n\t\t\t\t\t&& Array.isArray(policyDriver.driver.driverHistory)\r\n\t\t\t\t\t&& policyDriver.driver.driverHistory.length == 0 )\r\n\t\t\t\t\tdelete policyDriver.driver.driverHistory;\r\n\t\t\t\t*/\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif ( policyHolders ) {\r\n\t\t\tpolicyHolders.forEach(function(ph){\t\t\t\r\n\t\t\tdelete ph.contact._HTMLID;\r\n\t\t\tdelete ph.contact.$$hashKey;\r\n\t\t\tdelete ph.contact._aggregator;\r\n\r\n\t\t\tdelete ph.contact.anyInfringements;\r\n\t\t\tdelete ph.contact.anyLostLicences;\r\n\t\t\tdelete ph.contact.mainPolicyHolder;\r\n\t\t\tdelete ph.contact.isMainDriverMainPolicyHolder;\r\n\r\n\t\t\tdelete ph.contact.policyContact;\r\n\t\t\tdelete ph.contact.phoneNumber;\r\n\t\t\tdelete ph.contact.postalOption;\r\n\t\t\tdelete ph.contact.primaryPhoneNumber;\r\n\t\t\tdelete ph.contact.title;\r\n\t\t\tdelete ph.contact.address;\r\n\r\n\t\t\tdelete ph.contact.fourYears_chargedOrConvictedOffences;\r\n\t\t\tdelete ph.contact.fourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\tdelete ph.contact.fourYears_licenceRSDC;\r\n\t\t\tdelete ph.contact.fourYears_licenceRSDCDetails;\r\n\t\t\tdelete ph.contact.fourYears_vehicleAccidentsClaims;\r\n\t\t\tdelete ph.contact.fourYears_vehicleAccidentsClaimsDetails;\r\n\t\t\tdelete ph.contact.tenYears_chargedOrConvictedOffences;\r\n\t\t\tdelete ph.contact.tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_chargedOrConvictedOffences;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_licenceRSDC;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_licenceRSDCDetails;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_vehicleAccidentsClaims;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_vehicleAccidentsClaimsDetails;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderTenYears_chargedOrConvictedOffences;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderTenYears_chargedOrConvictedOffencesDetails;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\r\n\r\n\t\tif ( ! intermediateRequest.email )\r\n\t\t\tdelete intermediateRequest.email ;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function VehicleCoverTypeTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(intermediateRequest, coverTypeDescriptor) {\r\n\r\n\t\tintermediateRequest.vehicles[0].coverType = coverTypeDescriptor;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function VehicleDefaultValueRequestTransformer(\r\n\tUtil,\r\n\tjsonMapper,\r\n\tuserInputRepository,\r\n\tquoteOptions\r\n) {\r\n\tfunction formatDateAndTimeTheGuidewireWay(date, time) {\r\n\t\tvar format = '{0} at {1} AEST';\r\n\t\tvar timeFormatted = '4:00PM';\r\n\t\tif (time)\r\n\t\t\ttimeFormatted = moment()\r\n\t\t\t\t.tz('Australia/Sydney')\r\n\t\t\t\t.format('h:mma');\r\n\t\treturn Util.stringFormat(\r\n\t\t\tformat,\r\n\t\t\tmoment()\r\n\t\t\t\t.tz('Australia/Sydney')\r\n\t\t\t\t.format('Do MMM YYYY'),\r\n\t\t\ttimeFormatted\r\n\t\t);\r\n\t}\r\n\r\n\tvar staticValuesMapping = {\r\n\t\tquoteType: 'Full',\r\n\t\tproductCode: 'QPMMotorVehicle',\r\n\t\t// \"anyInfringementsQuestion\": \"no\",\r\n\t\t// \"anyClaimsQuestion\": \"no\",\r\n\t\t// \"anyLostLicencesQuestion\": \"no\",\r\n\t\t// \"anyConvictionsQuestion\": \"no\",\r\n\t\t'vehicles.0.primaryUsage': 'private',\r\n\t\t'vehicles.0.afterMarketModifications': false,\r\n\t\t'vehicles.0.isEligibleforSDExemption': false,\r\n\t\t'vehicles.0.financeType': 'none',\r\n\t\t'vehicles.0.sumInsuredType': 'market',\r\n\t\t'vehicles.0.garageType': 'garage',\r\n\t\t'vehicles.0.unrepairedDamage': 'none',\r\n\t\t'vehicles.0.colour': 'red',\r\n\t\t'vehicles.0.coverType': 'comprehensive',\r\n\t\t'vehicles.0.recentPurchase': false,\r\n\t\t'vehicles.0.otherDriverHasProLicense': false,\r\n\t\t'vehicles.0.youngestDriverGender': 'male',\r\n\t\t'vehicles.0.otherDriverUsageTimes': '0',\r\n\t\t'vehicles.0.sumInsuredAmount': '1000',\r\n\t\t'vehicles.0.garageAddress.addressType': 'postal',\r\n\t\t'vehicles.0.drivers.*.driver.licenceType': 'full',\r\n\t\t'vehicles.0.drivers.*.driver.yearsLicenced': '6',\r\n\t\t'vehicles.0.drivers.*.driver.hasConviction': false,\r\n\t\t'vehicles.0.drivers.*.driver.hasClaim': false,\r\n\t\t'vehicles.0.drivers.*.driver.hasInfringement': false,\r\n\t\t'vehicles.0.drivers.*.driver.hasLostLicence': false,\r\n\t\t'vehicles.0.drivers.*.driver.zeroDemerits': true,\r\n\t\t'vehicles.0.drivers.*.driver.previousInsurer': 'none',\r\n\t\t'vehicles.0.drivers.*.driver.noClaimBonus': 'rating_1',\r\n\t\t'vehicles.0.drivers.*.driver.maxNoClaimBonusLength': '2',\r\n\t\t// \"vehicles.0.drivers.*.driver.calculatedExcess\": 0,\r\n\t\t'vehicles.0.drivers.*.driver.person.contactType': 'person',\r\n\t\t'vehicles.0.drivers.*.driver.person.gender': 'male',\r\n\t\t'vehicles.0.drivers.*.driver.person.firstName': 'An@n',\r\n\t\t'vehicles.0.drivers.*.driver.person.lastName': 'An@nym@us',\r\n\t\t'vehicles.0.drivers.*.driver.person.isJustInsured': false,\r\n\t\t'vehicles.0.drivers.*.driver.person.dateOfBirth': '01/06/2000',\r\n\t\temail: 'a@a.com',\r\n\t\t'vehicles.0.availableCoverTypes': [\r\n\t\t\t'comprehensive',\r\n\t\t\t'comprehensive_nominated',\r\n\t\t\t'comprehensive_preferred',\r\n\t\t\t'third_party_fire_theft',\r\n\t\t\t'third_party'\r\n\t\t],\r\n\t\tavailableSumInsuredTypes: ['market', 'agreed'],\r\n\t\t'vehicles.0.coverageOptions': [\r\n\t\t\t{\r\n\t\t\t\tname: 'QPMMotVehHireCar',\r\n\t\t\t\tselected: false,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'QPMMotVehWindscreen',\r\n\t\t\t\tselected: false,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'QPMMotVehNCB',\r\n\t\t\t\tselected: false,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t],\r\n\t\t'vehicles.0.excess.standardVehicleExcess': 650,\r\n\t\t'vehicles.0.excess.ageExcessTier1': 1000,\r\n\t\t'vehicles.0.excess.ageExcessTier2': 750,\r\n\t\t'vehicles.0.excess.undeclaredDriverTier2': 500,\r\n\t\t'vehicles.0.excess.inexperiencedDriver': 750,\r\n\r\n\t\t'policyHolders.0.mainHolder': true,\r\n\t\t'policyHolders.0.contact.isJustInsured': false,\r\n\t\t'policyHolders.0.contact.contactType': 'person',\r\n\t\t'policyHolders.0.contact.dateOfBirth': '01/06/2000',\r\n\t\t// full quote transformation :\r\n\t\tstatus: 'Draft',\r\n\t\tdocumentDeliveryMethod: 'email',\r\n\t\tdisplayStatus: 'Draft',\r\n\t\tperiodStartDateTimeAEDT: formatDateAndTimeTheGuidewireWay(\r\n\t\t\tmoment(),\r\n\t\t\tmoment()\r\n\t\t),\r\n\t\tperiodEndDateTimeAEDT: formatDateAndTimeTheGuidewireWay(\r\n\t\t\tmoment().add(1, 'years')\r\n\t\t),\r\n\t\tchannel: 'portal',\r\n\t\t'vehicles.0.drivers.*.driverUsage': 'other'\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar staticValuesMappingNew = ApplyDefaultExcess(userInput);\r\n\t\tvar transformedRequest = jsonMapper.setDefault(\r\n\t\t\tuserInput,\r\n\t\t\tstaticValuesMappingNew\r\n\t\t);\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction ApplyDefaultExcess(userInput) {\r\n\t\tvar staticValuesMappingNew = staticValuesMapping;\r\n\t\tvar excessValue = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\tuserInput.policyAddress.state\r\n\t\t);\r\n\t\tif (excessValue != null) {\r\n\t\t\tvar tempObj = {\r\n\t\t\t\t'vehicles.0.excess.voluntaryVehicleExcess': excessValue\r\n\t\t\t};\r\n\t\t\tstaticValuesMappingNew = Object.extend(\r\n\t\t\t\tstaticValuesMapping,\r\n\t\t\t\ttempObj\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn staticValuesMappingNew;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n","\r\nfunction VehicleFormatConverterTransformer(Util, jsonMapper) {\r\n\r\n\t\r\n\tfunction convertDateAndTimeTheGuidewireWay(dateTime) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\treturn Util.stringFormat(format, dateTime.format('Do MMM YYYY') , dateTime.format('h:mma')) ;\r\n\t}\r\n\r\n\tfunction convertDate(dateString) {\r\n\t\tvar date = moment(dateString, 'DD/MM/YYYY') ;\r\n\t\tvar formattedDate = date.format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\r\n\t\t// throw 'date format exception formatting ' + dateString ; \r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertDateToGWTimeZone(dateString) {\r\n\t\tvar formattedDate = moment(dateString,'DDMMYYYY').tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertGender(gender) {\r\n\t\tvar gc = {\r\n\t\t\tmale : 'M',\r\n\t\t\tfemale : 'F',\r\n\t\t\tintersex : 'I',\r\n\t\t};\r\n\r\n\t\treturn gc[gender] ;\r\n\t}\r\n\r\n\tfunction convertFalsyToUnknown(value) {\r\n\t\tif ( value === null || value === undefined )\r\n\t\t\treturn 'unknown';\r\n\r\n\t\treturn convertBooleanToYesNo(value) ;\r\n\t}\r\n\r\n\tfunction convertBooleanToYesNo(value) {\r\n\t\treturn value ? 'yes' : 'no' ;\r\n\t}\r\n\r\n\tfunction addAUToStateValue(value) {\r\n\t\tif ( value )\r\n\t\t\treturn 'AU_' + value ; \r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar convertValueMapping = {\r\n\t\tperiodStartDate: convertDateToGWTimeZone,\r\n\t\t'policyHolders.*.contact.gender' : convertGender,\r\n\t\t'policyHolders.*.contact.hasClaim' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.hasConviction' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyLostLicences' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyInfringements' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.dateOfBirth' : convertDate,\r\n\t\t\r\n\t\t'vehicles.0.otherDriverHasProLicense' : convertBooleanToYesNo,\r\n\t\t'vehicles.0.youngestDriverGender' : convertGender,\r\n\t\t'vehicles.0.youngestDriverDOB' : convertDate,\r\n\t\t\"vehicles.0.registrationState\" : addAUToStateValue,\r\n\t\t'vehicles.0.drivers.*.driver.person.dateOfBirth' : convertDate,\r\n\t\t'vehicles.0.drivers.*.driver.person.gender' : convertGender,\r\n\t\t'vehicles.0.drivers.*.driver.person.hasClaim' : convertBooleanToYesNo,\r\n\t\t'vehicles.0.drivers.*.driver.person.hasConviction' : convertBooleanToYesNo,\r\n\t\t\"vehicles.0.drivers.*.driver.zeroDemerits\": convertBooleanToYesNo,\r\n\r\n\t\t\"vehicles.0.drivers.*.driver.hasConviction\": convertFalsyToUnknown,\r\n\t\t\"vehicles.0.drivers.*.driver.hasClaim\": convertFalsyToUnknown,\r\n\t\t\"vehicles.0.drivers.*.driver.hasInfringement\": convertFalsyToUnknown,\r\n\t\t\"vehicles.0.drivers.*.driver.hasLostLicence\": convertFalsyToUnknown,\r\n\t};\r\n\r\n\tvar companyConvertValueMapping = {\r\n\t\t/** company contact details only */\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.gender' : convertGender,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.hasClaim' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.hasConviction' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.anyLostLicences' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.anyInfringements' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.dateOfBirth' : convertDate,\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.convert(intermediateRequest, convertValueMapping) ;\r\n\t\tif ( transformedRequest.policyHolders[0]\r\n\t\t\t&& transformedRequest.policyHolders[0].contact\r\n\t\t\t&& transformedRequest.policyHolders[0].contact.authorisedPersons\r\n\t\t\t)\r\n\t\t\ttransformedRequest = jsonMapper.convert(intermediateRequest, companyConvertValueMapping) ;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function VehiclePolicyHolderHandler(Util, publicIDTransformer) {\r\n\r\n\tfunction handle(quoteRequest, userInput) {\r\n\r\n\t\tvar mainPolicyholder = quoteRequest.policyHolders.filter(function (item) {\r\n\t\t\treturn item['mainHolder'];\r\n\t\t})[0];\r\n\r\n\t\tvar mainDriver = quoteRequest.vehicles[0].drivers.filter(function (item) {\r\n\t\t\treturn item['driverUsage'] == 'main';\r\n\t\t})[0];\r\n\r\n\t\tif ((!userInput.vehicleForm.mainPolicyHolder ||\r\n\t\t\t\t(userInput.vehicleForm.mainPolicyHolder && userInput.vehicleForm.mainPolicyHolder.isMainDriverMainPolicyHolder)) && userInput.vehicleForm.getStarted.personOrCompany != \"company\") {\r\n\t\t\tmainPolicyholder.contact.publicID = mainDriver.driver.person.publicID;\r\n\t\t} else if (userInput.vehicleForm.mainPolicyHolder != undefined && userInput.vehicleForm.mainPolicyHolder.isMainDriverMainPolicyHolder != undefined &&\r\n\t\t\t!userInput.vehicleForm.mainPolicyHolder.isMainDriverMainPolicyHolder &&\r\n\t\t\tmainPolicyholder.contact.publicID == mainDriver.driver.person.publicID) {\r\n\t\t\tquoteRequest = publicIDTransformer.transform(quoteRequest);\r\n\t\t\tdelete quoteRequest.secret;\r\n\t\t\tdelete quoteRequest.quoteID;\r\n\t\t}\r\n\r\n\t\tif (mainPolicyholder.contact.publicID == mainDriver.driver.person.publicID) {\r\n\t\t\tmainDriver.driver.person.passwordQuestion = mainPolicyholder.contact.passwordQuestion;\r\n\t\t\tmainDriver.driver.person.passwordAnswer = mainPolicyholder.contact.passwordAnswer;\r\n\t\t\tmainDriver.driver.person.primaryPhone = mainPolicyholder.contact.primaryPhone;\r\n\r\n\t\t\tswitch (mainPolicyholder.contact.primaryPhone) {\r\n\t\t\t\tcase 'mobile':\r\n\t\t\t\t\tmainDriver.driver.person.cellPhone = mainPolicyholder.contact.cellPhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'home':\r\n\t\t\t\t\tmainDriver.driver.person.homePhone = mainPolicyholder.contact.homePhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'work':\r\n\t\t\t\t\tmainDriver.driver.person.workPhone = mainPolicyholder.contact.workPhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tdelete mainPolicyholder.contact.drivingHistory;\r\n\t\t}\r\n\r\n\t\treturn quoteRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\thandle: handle\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nfunction VehiclePublicIDTransformer(\r\n\tUtil,\r\n\tjsonMapper,\r\n\tserviceResponseRepository,\r\n\taggregatedRemoveService\r\n) {\r\n\tvar currentResponse = null;\r\n\tvar driverUniqueIdCtr = 1;\r\n\tvar historyUniqueIdCtr = 1;\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat(\r\n\t\t\t'portal:{0}-{1}',\r\n\t\t\tmoduleName,\r\n\t\t\tUtil.generateRandomString(15)\r\n\t\t);\r\n\t}\r\n\r\n\tfunction hasValidGWPublicID(publicID) {\r\n\t\tif (publicID && publicID.indexOf('portal:') === -1) return true;\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction hash(value) {\r\n\t\treturn md5(value);\r\n\t}\r\n\r\n\tfunction fetchFromPreviousResponse(path) {\r\n\t\tif (currentResponse)\r\n\t\t\treturn Util.findHierarchyStringInObject(currentResponse, path, '.');\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertPublicID(path, moduleName) {\r\n\t\tif (currentResponse) {\r\n\t\t\tvar lastPublicID = fetchFromPreviousResponse(path);\r\n\t\t\tif (lastPublicID) return lastPublicID;\r\n\t\t}\r\n\r\n\t\treturn forgePublicId(moduleName);\r\n\t}\r\n\r\n\tvar moduleNameMapping = {\r\n\t\tpolicyHolders: 'PolicyHolder[]',\r\n\t\tpolicyAddress: 'Address',\r\n\t\tvehicles: 'QPMVehicle',\r\n\t\tdriver: 'QPMVehicleDriver',\r\n\t\tpolicyDriver: 'QPMPolicyDriver',\r\n\t\tperson: 'person',\r\n\t\tdriverHistory: 'QPMDriverHistory',\r\n\t\tdrivingHistory: 'QPMDrivingHistory',\r\n\t\tpattern: 'qbePattern'\r\n\t};\r\n\r\n\tvar publicIDTransformationMapping = {\r\n\t\t'policyAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'vehicles.0.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.vehicles);\r\n\t\t},\r\n\t\t'vehicles.0.garageAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driver);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.uniqueID': function() {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyDriver);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.person.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.person.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.driverHistory.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driverHistory);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.driverHistory.*.uniqueID': function() {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t'policyHolders.*.contact.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.drivingHistory);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t}\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDTransformationMapping = {\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t}\r\n\t};\r\n\r\n\tvar publicIDConversionMapping = {\r\n\t\t'policyAddress.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.publicID',\r\n\t\t\t\tmoduleNameMapping.vehicles\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.uniqueID': function() {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.driverHistory.*.uniqueID': function() {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t'vehicles.0.garageAddress.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.garageAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.publicID',\r\n\t\t\t\tmoduleNameMapping.policyHolders\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' + mappedValueStarIndices[0] + '.publicID',\r\n\t\t\t\tmoduleNameMapping.driver\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].driver.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.driver.publicID',\r\n\t\t\t\tmoduleNameMapping.policyDriver\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].driver.person.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.driver.person.publicID',\r\n\t\t\t\tmoduleNameMapping.person\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].driver.driverHistory.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.driver.driverHistory.' +\r\n\t\t\t\t\tmappedValueStarIndices[1] +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.driverHistory\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].driver.person.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'driver.person.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolder.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.drivingHistory.' +\r\n\t\t\t\t\tmappedValueStarIndices[1] +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.drivingHistory\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDConversionMapping = {\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.authorisedPersons.0.person.publicID',\r\n\t\t\t\tmoduleNameMapping.person\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.authorisedPersons.0.person.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tfunction removeDeletedAdditionalDrivers(transformedRequest) {\r\n\t\tvar removedDrivers = aggregatedRemoveService.getList()\r\n\t\t\t? aggregatedRemoveService.getList()['driver']\r\n\t\t\t: null;\r\n\t\tvar savedDrivers = fetchFromPreviousResponse('drivers.0.drivers');\r\n\t\tif (savedDrivers && removedDrivers) {\r\n\t\t\tangular.forEach(removedDrivers, function(removedDriver) {\r\n\t\t\t\tvar matchingDriver = savedDrivers.filter(function(driver) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\tdriver.driver.person.firstName ==\r\n\t\t\t\t\t\t\tremovedDriver.person.firstName &&\r\n\t\t\t\t\t\tdriver.driver.person.lastName ==\r\n\t\t\t\t\t\t\tremovedDriver.person.lastName\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t\tmatchingDriver = matchingDriver[0] || null;\r\n\t\t\t\tif (matchingDriver) {\r\n\t\t\t\t\tmatchingDriver.markedForDelete = true;\r\n\t\t\t\t\ttransformedRequest.drivers[0].drivers.push(matchingDriver);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\taggregatedRemoveService.clear('driver');\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeDeletedDriverHistoryArrays(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.vehicles[0].drivers;\r\n\t\tvar fieldName = 'driverUsage';\r\n\t\tangular.forEach(drivers, function(driver, index) {\r\n\t\t\tvar fieldValue = driver[fieldName];\r\n\t\t\tvar locator = '[' + fieldName + '=' + fieldValue + ']';\r\n\t\t\tvar savedHistories = fetchFromPreviousResponse(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tindex +\r\n\t\t\t\t\tlocator +\r\n\t\t\t\t\t'.driver.driverHistory'\r\n\t\t\t);\r\n\t\t\tif (savedHistories && savedHistories.length > 0) {\r\n\t\t\t\tvar driverHistories = driver.driver.driverHistory;\r\n\t\t\t\tangular.forEach(savedHistories, function(savedHistory) {\r\n\t\t\t\t\tvar matchingInput = driverHistories.filter(function(\r\n\t\t\t\t\t\thistory\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn history.publicID == savedHistory.publicID;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!matchingInput || matchingInput.length == 0) {\r\n\t\t\t\t\t\tsavedHistory.markedForDelete = true;\r\n\t\t\t\t\t\tdriverHistories.push(savedHistory);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeEmptyDriverHistoryArrays(transformedRequest) {\r\n\t\tvar vehicle = transformedRequest.vehicles[0];\r\n\t\tif (vehicle && vehicle.drivers) {\r\n\t\t\tvehicle.drivers.forEach(function(policyDriver) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tpolicyDriver.driver &&\r\n\t\t\t\t\tpolicyDriver.driver.driverHistory &&\r\n\t\t\t\t\tArray.isArray(policyDriver.driver.driverHistory) &&\r\n\t\t\t\t\tpolicyDriver.driver.driverHistory.length == 0\r\n\t\t\t\t)\r\n\t\t\t\t\tdelete policyDriver.driver.driverHistory;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//dd-973 - requiring a sequence number for driver infringement\r\n\tfunction addUniqueHistoryID(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.vehicles[0].drivers;\r\n\r\n\t\tangular.forEach(drivers, function(driver, index) {\r\n\t\t\thistoryUniqueIdCtr = 1;\r\n\t\t\tvar driverHistory = driver.driver.driverHistory;\r\n\t\t\tif (driverHistory) {\r\n\t\t\t\tangular.forEach(driverHistory, function(driverHistory, index) {\r\n\t\t\t\t\tdriverHistory.uniqueID = historyUniqueIdCtr;\r\n\t\t\t\t\thistoryUniqueIdCtr++;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// if (driver.driverUsage !== 'main') {\r\n\t\t\t// \tif (driver.driver.person && driver.driver.person.primaryAddress) {\r\n\t\t\t// \t\tdelete driver.driver.person.primaryAddress;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, response) {\r\n\t\tcurrentResponse = response;\r\n\t\tdriverUniqueIdCtr = 1;\r\n\t\tvar transformedRequest = intermediateRequest;\r\n\r\n\t\tif (\r\n\t\t\ttransformedRequest.policyHolders[0] &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact.authorisedPersons\r\n\t\t) {\r\n\t\t\tpublicIDConversionMapping = Object.extend(\r\n\t\t\t\tpublicIDConversionMapping,\r\n\t\t\t\tauthorisedPersonsPublicIDConversionMapping\r\n\t\t\t);\r\n\t\t\tpublicIDTransformationMapping = Object.extend(\r\n\t\t\t\tpublicIDTransformationMapping,\r\n\t\t\t\tauthorisedPersonsPublicIDTransformationMapping\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (!currentResponse)\r\n\t\t\ttransformedRequest = jsonMapper.transform(\r\n\t\t\t\tintermediateRequest,\r\n\t\t\t\tpublicIDTransformationMapping\r\n\t\t\t);\r\n\t\telse {\r\n\t\t\ttransformedRequest = jsonMapper.convert(\r\n\t\t\t\tintermediateRequest,\r\n\t\t\t\tpublicIDConversionMapping\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\ttransformedRequest = addUniqueHistoryID(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedAdditionalDrivers(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedDriverHistoryArrays(\r\n\t\t\ttransformedRequest\r\n\t\t);\r\n\t\ttransformedRequest = removeEmptyDriverHistoryArrays(transformedRequest);\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n","function VehicleQuoteResultModel(quoteResultResponse) {\r\n\tthis.isCoverAvailable = quoteResultResponse.quoteResult.totalPremium !== undefined ;\r\n\tthis.coverType = quoteResultResponse.vehicles[0].coverType;\r\n\tthis.quoteResult = quoteResultResponse.quoteResult;\r\n\tthis.paymentPlan = quoteResultResponse.paymentPlan;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.totalFSL = quoteResultResponse.quoteResult.totalFSL ;\r\n\tthis.totalGST = quoteResultResponse.quoteResult.totalGST ;\r\n\tthis.totalStampDuty = quoteResultResponse.quoteResult.totalStampDuty ;\r\n\tthis.premiumAfterDiscount = quoteResultResponse.quoteResult.premiumAfterDiscount ;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.paymentFrequency = quoteResultResponse.paymentPlan ? quoteResultResponse.paymentPlan.paymentFrequency : null ;\r\n\tthis.excess = quoteResultResponse.vehicles[0].excess ;\r\n\tthis.availableSumInsuredTypes = quoteResultResponse.vehicles[0].availableSumInsuredTypes;\r\n\tthis.vehicleValue = {\r\n\t\tupper: quoteResultResponse.vehicles[0].agreedValueUpper,\r\n\t\tlower: quoteResultResponse.vehicles[0].agreedValueLower\r\n\t};\r\n\tthis.coverageOptions = quoteResultResponse.vehicles[0].coverageOptions ;\r\n\tthis.response = quoteResultResponse ;\r\n}\r\n","function VehicleRetrieveSavedQuoteResponseTransformer($filter, jsonMapper, Util) {\r\n // transform functions\r\n var transformers = {\r\n camelcase: function(value) {\r\n if(value) {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n }, \r\n date: function(dateString) {\r\n var date = moment(dateString, 'YYYY-MM-DD') ;\r\n return date.format('DD/MM/YYYY') ;\r\n },\r\n today : function() {\r\n return moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY') ;\r\n },\r\n convertGender: function(gender) {\r\n var gc = {\r\n M : 'male',\r\n F : 'female',\r\n I : 'intersex',\r\n };\r\n return gc[gender] ;\r\n },\r\n yesNo: function(value) {\r\n return value == 'yes' ? true : false;\r\n },\r\n defaultNull: function(value) {\r\n return null;\r\n },\r\n checkbox: function(value) {\r\n },\r\n state: function(state) {\r\n if ( state )\r\n return state.replace('AU_', '');\r\n },\r\n coverType: function(coverType) {\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n return 'third_party';\r\n }\r\n return coverType;\r\n },\r\n purchaseMonthFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n var month = monthYear.split('-')[1];\r\n return month;\r\n }else{\r\n return '';\r\n }\r\n\r\n },\r\n purchaseYearFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n var year = monthYear.split('-')[0];\r\n return year;\r\n }else{\r\n return '';\r\n }\r\n },\r\n thirdPartyPref: function(coverType) {\r\n if(coverType === 'comprehensive') {\r\n return null;\r\n }\r\n\r\n if(coverType==='third_party'){\r\n return 'standard';\r\n }\r\n return coverType;\r\n },\r\n financeWith: function(financeWith) {\r\n\r\n if(financeWith) {\r\n var carFinance = {};\r\n\r\n carFinance.label = financeWith.name;\r\n carFinance.value = financeWith.publicID;\r\n\r\n return carFinance;\r\n }\r\n },\r\n yearsHeld: function(years) {\r\n var yearsHeld;\r\n\r\n switch (years) {\r\n case '7':\r\n yearsHeld = 'lessThan_1';\r\n break;\r\n case '6':\r\n yearsHeld = 'greaterThan_5';\r\n break;\r\n default:\r\n yearsHeld = years;\r\n }\r\n\r\n return yearsHeld;\r\n },\r\n hasModifications: function(modifications) {\r\n return modifications.length > 1 ? true : false;\r\n },\r\n };\r\n function transformPerson(person) {\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date\r\n };\r\n var transformedPerson = jsonMapper.convert(jsonMapper.transform(person, transformMapping), convertMapping);\r\n return transformedPerson.returnObject;\r\n }\r\n\r\n function transformDriver(driver) {\r\n\r\n // transformPersonalHistory(driver.driverHistory);\r\n\r\n var transformMapping = {\r\n 'returnObject.yearsHeld': '=_input.yearsLicenced',\r\n 'returnObject.licenceType': '=_input.licenceType',\r\n 'returnObject.noClaimBonus': '=_input.noClaimBonus',\r\n 'returnObject.maxNoClaimBonusLength': '=_input.maxNoClaimBonusLength',\r\n 'returnObject.previousInsurer': '=_input.previousInsurer',\r\n 'returnObject.NSWDemeritPoints': '=_input.zeroDemerits',\r\n 'returnObject.fourYears_chargedOrConvictedOffences': '=_input.hasInfringement',\r\n // 'returnObject.fourYears_chargedOrConvictedOffencesDetails': '=_input.driverHistory',\r\n 'returnObject.fourYears_licenceRSDC': '=_input.hasLostLicence',\r\n // 'returnObject.fourYears_licenceRSDCDetails': '=_input.driverHistory',\r\n 'returnObject.fourYears_vehicleAccidentsClaims': '=_input.hasClaim',\r\n // 'returnObject.fourYears_vehicleAccidentsClaimsDetails': '=_input.driverHistory',\r\n 'returnObject.tenYears_chargedOrConvictedOffences': '=_input.hasConviction',\r\n // 'returnObject.tenYears_chargedOrConvictedOffencesDetails': '=_input.driverHistory',\r\n },\r\n convertMapping = {\r\n 'returnObject.yearsHeld': transformers.yearsHeld,\r\n 'returnObject.NSWDemeritPoints': transformers.yesNo,\r\n\r\n 'returnObject.fourYears_chargedOrConvictedOffences': transformers.defaultNull,\r\n // 'returnObject.fourYears_chargedOrConvictedOffencesDetails': transformers.history,\r\n\r\n 'returnObject.fourYears_licenceRSDC': transformers.defaultNull,\r\n // 'returnObject.fourYears_licenceRSDCDetails': transformers.history,\r\n\r\n 'returnObject.fourYears_vehicleAccidentsClaims': transformers.defaultNull,\r\n // 'returnObject.fourYears_vehicleAccidentsClaimsDetails': transformers.history,\r\n\r\n 'returnObject.tenYears_chargedOrConvictedOffences': transformers.defaultNull,\r\n // 'returnObject.tenYears_chargedOrConvictedOffencesDetails': transformers.history\r\n };\r\n\r\n var transformedDriver = jsonMapper.convert(jsonMapper.transform(driver, transformMapping), convertMapping);\r\n var returnObject = transformedDriver.returnObject;\r\n if(driver.person) {\r\n returnObject.person = transformPerson(driver.person);\r\n }\r\n\r\n // extract driver history\r\n returnObject.fourYears_chargedOrConvictedOffencesDetails = [];\r\n returnObject.fourYears_vehicleAccidentsClaimsDetails = [];\r\n returnObject.tenYears_chargedOrConvictedOffencesDetails = [];\r\n returnObject.fourYears_licenceRSDCDetails = [];\r\n\r\n if (!!driver.driverHistory) {\r\n driver.driverHistory.forEach(function(record) {\r\n var matchedPattern = {};\r\n\r\n switch (record.pattern.filter1) {\r\n case 'infringement_demerit':\r\n // case 'infringement_licence':\r\n returnObject.fourYears_chargedOrConvictedOffencesDetails.push(\r\n extractHistory(globals.fourYears_offences.options, record)\r\n );\r\n break;\r\n case 'infringement_licence':\r\n returnObject.fourYears_licenceRSDCDetails.push(\r\n extractHistory(globals.incidents.options, record)\r\n );\r\n break;\r\n case 'claim' :\r\n returnObject.fourYears_vehicleAccidentsClaimsDetails.push(\r\n extractHistory(globals.accidents.options, record));\r\n break;\r\n case 'conviction' :\r\n returnObject.tenYears_chargedOrConvictedOffencesDetails.push(\r\n extractHistory(globals.tenYears_offences.options, record)\r\n );\r\n break;\r\n\r\n }\r\n });\r\n }\r\n\r\n returnObject.fourYears_chargedOrConvictedOffences = returnObject.fourYears_chargedOrConvictedOffencesDetails.length > 0 ;\r\n returnObject.fourYears_vehicleAccidentsClaims = returnObject.fourYears_vehicleAccidentsClaimsDetails.length > 0 ;\r\n returnObject.tenYears_chargedOrConvictedOffences = returnObject.tenYears_chargedOrConvictedOffencesDetails.length > 0 ;\r\n returnObject.fourYears_licenceRSDC = returnObject.fourYears_licenceRSDCDetails.length > 0 ;\r\n\r\n return returnObject;\r\n }\r\n\r\n function extractHistory(collection, record) {\r\n var matchedPattern = {};\r\n var month = {};\r\n var year = {};\r\n\r\n matchedPattern = collection.find(function(opt) {\r\n return opt.publicID == record.pattern.publicID;\r\n });\r\n\r\n month.label = month.value = moment(record.month, 'MM').format('MMMM') ; // Util.capitalize(record.month.toString());\r\n year.label = year.value = Util.capitalize(record.year.toString());\r\n\r\n record.description = matchedPattern;\r\n record.month = month;\r\n record.year = year;\r\n\r\n delete record.pattern;\r\n\r\n return record;\r\n }\r\n // WIP deconstruction of driver history to separate them into the different tables\r\n // function transformPersonalHistory(history) {\r\n // console.info('history', history);\r\n // console.info('labels', labelService.getOptionsFor('fourYears_chargedOrConvictedOffencesDetails'));\r\n // }\r\n\r\n function transformPolicyHolder(holder) {\r\n\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth',\r\n 'returnObject.fourYears_chargedOrConvictedOffences': '=_input.hasInfringement',\r\n 'returnObject.fourYears_licenceRSDC': '=_input.hasLostLicence',\r\n 'returnObject.fourYears_vehicleAccidentsClaims': '=_input.hasClaim',\r\n 'returnObject.tenYears_chargedOrConvictedOffences': '=_input.hasConviction'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date,\r\n 'returnObject.fourYears_chargedOrConvictedOffences': transformers.yesNo,\r\n 'returnObject.fourYears_licenceRSDC': transformers.yesNo,\r\n 'returnObject.fourYears_vehicleAccidentsClaims': transformers.yesNo,\r\n 'returnObject.tenYears_chargedOrConvictedOffences': transformers.yesNo\r\n };\r\n\r\n var transformedPolicyHolder = jsonMapper.convert(jsonMapper.transform(holder, transformMapping), convertMapping);\r\n\r\n return transformedPolicyHolder.returnObject;\r\n }\r\n\r\n /**\r\n * Transforms the retrievedQuoteRepsonse into a format that can be injected into the userInputRepository\r\n * The returned value will populate all the forms in the quote process\r\n * @param {Object} retrievedQuoteResponse Response object from the retrieveSavedQuote service\r\n * @returns {Object} Transformed object ready to inject into the userInputRepository\r\n */\r\n function transform(retrievedQuoteResponse) {\r\n console.info('retrievedQuoteResponse', retrievedQuoteResponse);\r\n\r\n var transformMapping = {\r\n\t\t\t\t// getStarted\r\n\t\t\t\t'returnObject.getStarted.policyStartDate':\r\n\t\t\t\t\t'=_input.periodStartDate',\r\n\t\t\t\t'returnObject.getStarted.personOrCompany':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.contactType',\r\n\r\n\t\t\t\t// aboutYourCar\r\n\t\t\t\t'returnObject.aboutYourCar.address':\r\n\t\t\t\t\t'=_input.vehicles.0.garageAddress',\r\n\r\n\t\t\t\t// carDetails\r\n\t\t\t\t'returnObject.carDetails.locationParked':\r\n\t\t\t\t\t'=_input.vehicles.0.garageType',\r\n\t\t\t\t'returnObject.carDetails.primaryCarUse':\r\n\t\t\t\t\t'=_input.vehicles.0.primaryUsage',\r\n\t\t\t\t'returnObject.carDetails.colour': '=_input.vehicles.0.colour',\r\n\t\t\t\t'returnObject.carDetails.last12Months':\r\n\t\t\t\t\t'=_input.vehicles.0.recentPurchase',\r\n\t\t\t\t'returnObject.carDetails.carCost':\r\n\t\t\t\t\t'=_input.vehicles.0.purchasePrice',\r\n\t\t\t\t'returnObject.carDetails.originalOwner':\r\n\t\t\t\t\t'=_input.vehicles.0.originalOwner',\r\n\t\t\t\t'returnObject.carDetails.whenDidYouBuyYear':\r\n\t\t\t\t\t'=_input.vehicles.0.purchaseMonthYear',\r\n\t\t\t\t'returnObject.carDetails.whenDidYouBuyMonth':\r\n\t\t\t\t\t'=_input.vehicles.0.purchaseMonthYear',\r\n\t\t\t\t'returnObject.carDetails.carFinance':\r\n\t\t\t\t\t'=_input.vehicles.0.financeType',\r\n\t\t\t\t'returnObject.carDetails.financeWith':\r\n\t\t\t\t\t'=_input.vehicles.0.financeCompany',\r\n\t\t\t\t'returnObject.carDetails.existingDamage':\r\n\t\t\t\t\t'=_input.vehicles.0.unrepairedDamage',\r\n\t\t\t\t'returnObject.carDetails.writtenEvidence':\r\n\t\t\t\t\t'=_input.vehicles.0.evidenceOfValueOrPrice',\r\n\t\t\t\t'returnObject.carDetails.salvageValue':\r\n\t\t\t\t\t'=_input.vehicles.0.salvageValue',\r\n\t\t\t\t'returnObject.carDetails.modificationsBuilt':\r\n\t\t\t\t\t'=_input.vehicles.0.afterMarketModifications',\r\n\r\n\t\t\t\t//tell us a bit more -------------------------------------\r\n\t\t\t\t'returnObject.tellUsABitMore.yourEmailAddress': '=_input.email',\r\n\t\t\t\t'returnObject.tellUsABitMore.promotionalCode':\r\n\t\t\t\t\t'=_input.campaignCode',\r\n\t\t\t\t'returnObject.stampDutyExemption.isSmallBusiness':\r\n\t\t\t\t\t'=_input.vehicles.0.isSmallBusiness',\r\n\r\n\t\t\t\t//driver\r\n\t\t\t\t// 'vehicleForm.driver.paymentOptions': '=_input.?',\r\n\r\n\t\t\t\t//quote\r\n\t\t\t\t'returnObject.insuredExcessValue.coverType':\r\n\t\t\t\t\t'=_input.vehicles.0.coverType',\r\n\t\t\t\t'returnObject.insuredExcessValue.comprehensivePref':\r\n\t\t\t\t\t'=_input.vehicles.0.sumInsuredType',\r\n\t\t\t\t'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft':\r\n\t\t\t\t\t'=_input.vehicles.0.coverType',\r\n\t\t\t\t'returnObject.insuredExcessValue.vehicleExcess':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.voluntaryVehicleExcessOptions',\r\n\t\t\t\t'returnObject.insuredExcessValue.standardVehicleExcess':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.standardVehicleExcess',\r\n\t\t\t\t'returnObject.insuredExcessValue.voluntaryVehicleExcess':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.voluntaryVehicleExcess',\r\n\t\t\t\t'returnObject.insuredExcessValue.ageExcessTier1':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.ageExcessTier1',\r\n\t\t\t\t'returnObject.insuredExcessValue.ageExcessTier2':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.ageExcessTier2',\r\n\t\t\t\t'returnObject.insuredExcessValue.undeclaredDriverTier2':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.undeclaredDriverTier2',\r\n\t\t\t\t'returnObject.insuredExcessValue.inexperiencedDriver':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.inexperiencedDriver',\r\n\t\t\t\t'returnObject.insuredExcessValue.agreedValue':\r\n\t\t\t\t\t'=_input.vehicles.0.sumInsuredAmount',\r\n\r\n\t\t\t\t// optional benefits\r\n\t\t\t\t'returnObject.optionalBenefits.QPMMotVehHireCar':\r\n\t\t\t\t\t'=_input.vehicles.0.coverageOptions.0.selected',\r\n\t\t\t\t'returnObject.optionalBenefits.QPMMotVehWindscreen':\r\n\t\t\t\t\t'=_input.vehicles.0.coverageOptions.1.selected',\r\n\t\t\t\t'returnObject.optionalBenefits.QPMMotVehNCB':\r\n\t\t\t\t\t'=_input.vehicles.0.coverageOptions.2.selected',\r\n\t\t\t\t'returnObject.optionalBenefits.QPMMotVehLifetimeNCB':\r\n\t\t\t\t\t'=_input.vehicles.0.coverageOptions.2.selected',\r\n\t\t\t\t// registration details\r\n\t\t\t\t'returnObject.aboutYourCar.regoSearchResponse':\r\n\t\t\t\t\t'=_input.vehicles.0.vehicleInfo',\r\n\t\t\t\t'returnObject.aboutYourCar.retrievedQuoteRego.rego':\r\n\t\t\t\t\t'=_input.vehicles.0.registrationNumber',\r\n\t\t\t\t'returnObject.aboutYourCar.retrievedQuoteRego.state':\r\n\t\t\t\t\t'=_input.vehicles.0.garageAddress.state',\r\n\t\t\t\t'returnObject.tellUsYourRegoNumber.regoNumber':\r\n\t\t\t\t\t'=_input.vehicles.0.registrationNumber',\r\n\t\t\t\t// Contact\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordQuestion':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordQuestion',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordAnswer':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordAnswer',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.primaryPhone':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.primaryPhone',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.personalContactDetailsMailingPreference':\r\n\t\t\t\t\t'=_input.documentDeliveryMethod',\r\n\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.emailAddress1':\r\n\t\t\t\t\t'=_input.email'\r\n\t\t\t},\r\n\t\t\tconvertMapping = {\r\n\t\t\t\t'returnObject.carDetails.colour': transformers.camelcase,\r\n\t\t\t\t'returnObject.getStarted.policyStartDate': transformers.date,\r\n\t\t\t\t'returnObject.carDetails.financeWith': transformers.financeWith,\r\n\t\t\t\t'returnObject.retrievedQuoteRego.state': transformers.state,\r\n\t\t\t\t'returnObject.insuredExcessValue.coverType':\r\n\t\t\t\t\ttransformers.coverType,\r\n\t\t\t\t'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft':\r\n\t\t\t\t\ttransformers.thirdPartyPref,\r\n\t\t\t\t'returnObject.carDetails.whenDidYouBuyYear':\r\n\t\t\t\t\ttransformers.purchaseYearFromMonthYear,\r\n\t\t\t\t'returnObject.carDetails.whenDidYouBuyMonth':\r\n\t\t\t\t\ttransformers.purchaseMonthFromMonthYear\r\n\t\t\t};\r\n var transformedQuote = jsonMapper.convert(jsonMapper.transform(retrievedQuoteResponse, transformMapping), convertMapping);\r\n\r\n if(retrievedQuoteResponse.vehicles[0].primaryUsage) {\r\n var usage = retrievedQuoteResponse.vehicles[0].primaryUsage;\r\n\t\t\tswitch (usage) {\r\n\t\t\t\tcase 'commercial':\r\n transformedQuote.returnObject.carDetails.commercialActivityType = retrievedQuoteResponse.vehicles[0].businessUsage;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n transformedQuote.returnObject.carDetails.businessActivityType = retrievedQuoteResponse.vehicles[0].businessUsage;\r\n\t\t\t\t\tbreak;\r\n\t\t\t} \r\n }\r\n\r\n // set primary phone number to mobile phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.cellPhone) {\r\n transformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.cellPhone;\r\n }\r\n\r\n // set primary phone number to home phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.homePhone) {\r\n transformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.homePhone;\r\n }\r\n\r\n // set primary phone number to work phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.workPhone) {\r\n transformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.workPhone;\r\n }\r\n\r\n // set comprehensive preference to null if the coverType is third party\r\n if(retrievedQuoteResponse.vehicles[0].coverType.length && retrievedQuoteResponse.vehicles[0].sumInsuredType.length) {\r\n var coverType = retrievedQuoteResponse.vehicles[0].coverType;\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n transformedQuote.returnObject.insuredExcessValue.comprehensivePref = null;\r\n }\r\n }\r\n\r\n // set optional modifications\r\n // console.info(retrievedQuoteResponse.vehicles[0].vehicleInfo.selectedEquipments[0]);\r\n if(retrievedQuoteResponse.vehicles[0].vehicleInfo &&\r\n retrievedQuoteResponse.vehicles[0].vehicleInfo.selectedEquipments &&\r\n retrievedQuoteResponse.vehicles[0].vehicleInfo.selectedEquipments.length) {\r\n\r\n transformedQuote.returnObject.carDetails.modifications = true;\r\n\r\n transformedQuote.returnObject.carDetails.modificationsOptions = {};\r\n\r\n var selectedEquipments = retrievedQuoteResponse.vehicles[0].vehicleInfo.selectedEquipments;\r\n\r\n selectedEquipments.forEach(function(mod) {\r\n // console.info(mod.optionKey);\r\n transformedQuote.returnObject.carDetails.modificationsOptions[mod.optionKey] = true;\r\n });\r\n } else {\r\n transformedQuote.returnObject.carDetails.modifications = false;\r\n }\r\n\r\n if(retrievedQuoteResponse.vehicles[0] &&\r\n retrievedQuoteResponse.vehicles[0].afterMarketMods &&\r\n retrievedQuoteResponse.vehicles[0].afterMarketMods.length) {\r\n\r\n transformedQuote.returnObject.carDetails.modificationsBuilt = true;\r\n\r\n transformedQuote.returnObject.carDetails.modificationsBuiltOptions = {};\r\n\r\n var afterMarketMods = retrievedQuoteResponse.vehicles[0].afterMarketMods;\r\n\r\n afterMarketMods.forEach(function(mod) {\r\n transformedQuote.returnObject.carDetails.modificationsBuiltOptions[mod] = true;\r\n });\r\n }\r\n\r\n // sort drivers to put mainDriver first in the list\r\n if(retrievedQuoteResponse.vehicles && retrievedQuoteResponse.vehicles.length && retrievedQuoteResponse.vehicles[0].drivers) {\r\n var drivers = $filter('orderBy')(retrievedQuoteResponse.vehicles[0].drivers, function(driver) {\r\n return driver.driverUsage == 'main' ? 0 : 1;\r\n });\r\n transformedQuote.returnObject.driver = {};\r\n transformedQuote.returnObject.driver.drivers = [];\r\n drivers.forEach(function(driver, index) {\r\n transformedQuote.returnObject.driver.drivers.push(transformDriver(driver.driver));\r\n });\r\n }\r\n\r\n // set contact policy holders\r\n if(retrievedQuoteResponse.policyHolders && retrievedQuoteResponse.policyHolders.length) {\r\n var policyHolders = retrievedQuoteResponse.policyHolders;\r\n\r\n transformedQuote.returnObject.mainPolicyHolder = {};\r\n\r\n policyHolders.forEach(function(holder, index) {\r\n\r\n if(holder.mainHolder) {\r\n transformedQuote.returnObject.mainPolicyHolder.mainPolicyHolder = true;\r\n transformedQuote.returnObject.mainPolicyHolder = transformPolicyHolder(holder.contact);\r\n transformedQuote.returnObject.mainPolicyHolder.policyHolders = [];\r\n\r\n\t\t\t\t\tif (holder.contact.contactType === 'company') {\r\n\t\t\t\t\t\tvar authorisedPerson = holder.contact.authorisedPersons[0].person;\r\n\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany = {};\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.name = holder.contact.name;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.abn = holder.contact.abn;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.email = holder.contact.emailAddress1;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.officePhone = holder.contact.workPhone;\r\n transformedQuote.returnObject.aboutCompany.companyAddress = holder.contact.primaryAddress;\r\n\r\n transformedQuote.returnObject.companyContact = {}; \r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.primaryPhone = authorisedPerson.primaryPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.preferredNumber = authorisedPerson.homePhone || authorisedPerson.workPhone || authorisedPerson.cellPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.passwordQuestion = holder.contact.passwordQuestion;\r\n transformedQuote.returnObject.companyContact.passwordAnswer = holder.contact.passwordAnswer;\r\n transformedQuote.returnObject.companyContact\r\n .companyContactDetailsMailingPreference = retrievedQuoteResponse.documentDeliveryMethod;\r\n transformedQuote.returnObject.companyContact.address =\r\n\t\t\t\t\t\t\tauthorisedPerson.primaryAddress;\r\n } \r\n \r\n } else {\r\n transformedQuote.returnObject.mainPolicyHolder.policyHolders.push(transformPolicyHolder(holder.contact));\r\n }\r\n });\r\n }\r\n\r\n console.info('final transform quote', transformedQuote.returnObject);\r\n\r\n return transformedQuote.returnObject;\r\n }\r\n return {\r\n transform: transform\r\n }\r\n}\r\n","function VehicleStructureRequestTransformer(\r\n\tjsonMapper,\r\n\tutil,\r\n\tquoteOptions,\r\n\tstorage\r\n) {\r\n\tvar structureQuoteMapping = {\r\n\t\tperiodStartDate: '=_input.vehicleForm.getStarted.policyStartDate',\r\n\t\tvehicles: [],\r\n\t\t'vehicles.0': '=_input.vehicleForm.carDetails',\r\n\t\t'vehicles.0.registrationState':\r\n\t\t\t'=_input.vehicleForm.aboutYourCar.regoDetails.state',\r\n\t\t'vehicles.0.garageType':\r\n\t\t\t'=_input.vehicleForm.carDetails.locationParked',\r\n\t\t'vehicles.0.afterMarketModifications':\r\n\t\t\t'=_input.vehicleForm.carDetails.modificationsBuilt',\r\n\t\t'vehicles.0.primaryUsage':\r\n\t\t\t'=_input.vehicleForm.carDetails.primaryCarUse',\r\n\r\n\t\t'vehicles.0.vin': '=_regoSearch.vin',\r\n\t\t'vehicles.0.drivers': [], //\"=_input.vehicleForm.driver.drivers\",\r\n\t\t'vehicles.0.vehicleInfo': '=_regoSearch',\r\n\t\t'vehicles.0.garageAddress': '=_addressSearch',\r\n\r\n\t\t'vehicles.0.excess.voluntaryVehicleExcess':\r\n\t\t\t'=_input.vehicleForm.insuredExcessValue.voluntaryVehicleExcess',\r\n\r\n\t\tpolicyHolders: [],\r\n\t\t'policyHolders.0': {},\r\n\t\t'policyHolders.0.mainHolder':\r\n\t\t\t'=_input.vehicleForm.mainPolicyHolder.mainPolicyHolder',\r\n\t\t'policyHolders.0.contact': '=_input.vehicleForm.mainPolicyHolder',\r\n\t\t'policyHolders.0.contact.primaryAddress': '=_addressSearch',\r\n\r\n\t\t// \"policyHolders.0.contact.driverHistory\": [],\r\n\t\t// \"policyHolders.0.contact.driverHistory\": \"=_input.vehicleForm.mainPolicyHolder.fourYears_chargedOrConvictedOffencesDetails\",\r\n\r\n\t\tpolicyAddress: '=_addressSearch',\r\n\t\temail: '=_input.email',\r\n\t\tcampaignCode: '=_input.vehicleForm.promotionalCode.promotionalCode',\r\n\t\tmainContactAddress: '=_addressSearch-main-contact',\r\n\t\tpostalAddress: '=_addressSearch-postal-address'\r\n\t};\r\n\r\n\tfunction updateVehicleDetails(transformedRequest, userInput) {\r\n\t\ttransformedRequest.vehicles[0] = util.deepClone(\r\n\t\t\ttransformedRequest.vehicles[0]\r\n\t\t);\r\n\t\tif (userInput.vehicleForm.insuredExcessValue) {\r\n\t\t\ttransformedRequest.vehicles[0].sumInsuredType =\r\n\t\t\t\tuserInput.vehicleForm.insuredExcessValue.comprehensivePref;\r\n\t\t}\r\n\t\t//userInput.vehicleForm.insuredExcessValue\r\n\t\tif (userInput.vehicleForm.carDetails) {\r\n\t\t\ttransformedRequest.vehicles[0].purchasePrice =\r\n\t\t\t\tuserInput.vehicleForm.carDetails.carCost;\r\n\t\t\tif (userInput.vehicleForm.carDetails.whenDidYouBuyYear) {\r\n\t\t\t\ttransformedRequest.vehicles[0].purchaseMonthYear =\r\n\t\t\t\t\tuserInput.vehicleForm.carDetails.whenDidYouBuyYear +\r\n\t\t\t\t\t'-' +\r\n\t\t\t\t\tuserInput.vehicleForm.carDetails.whenDidYouBuyMonth;\r\n\t\t\t}\r\n\r\n\t\t\tif (!!userInput.vehicleForm.carDetails.businessActivityType) {\r\n\t\t\t\ttransformedRequest.vehicles[0].businessUsage =\r\n\t\t\t\t\tuserInput.vehicleForm.carDetails.businessActivityType;\r\n\t\t\t} else if (\r\n\t\t\t\t!!userInput.vehicleForm.carDetails.commercialActivityType\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.vehicles[0].businessUsage =\r\n\t\t\t\t\tuserInput.vehicleForm.carDetails.commercialActivityType;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyHolders(transformedRequest, userInput) {\r\n\t\tif (userInput.vehicleForm.getStarted) {\r\n\t\t\tvar personOrCompany =\r\n\t\t\t\tuserInput.vehicleForm.getStarted.personOrCompany;\r\n\t\t\tif (personOrCompany == 'company')\r\n\t\t\t\treturn updateCompanyContactDetails(\r\n\t\t\t\t\ttransformedRequest,\r\n\t\t\t\t\tuserInput\r\n\t\t\t\t);\r\n\t\t\telse\r\n\t\t\t\treturn updatePersonContactDetails(\r\n\t\t\t\t\ttransformedRequest,\r\n\t\t\t\t\tuserInput\r\n\t\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateCompanyContactDetails(transformedRequest, userInput) {\r\n\t\tvar policyHolder = util.deepClone(transformedRequest.policyHolders[0]);\r\n\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm.companyContact &&\r\n\t\t\tuserInput.vehicleForm.aboutCompany\r\n\t\t) {\r\n\t\t\t// transformedRequest.email = userInput.vehicleForm.companyContact.email;\r\n\t\t\t// var policyHolder = util.deepClone(transformedRequest.policyHolders[0]);\r\n\t\t\tpolicyHolder.contact = policyHolder.contact || {};\r\n\t\t\tpolicyHolder.contact.workPhone =\r\n\t\t\t\tuserInput.vehicleForm.aboutCompany.officePhone;\r\n\t\t\tpolicyHolder.contact = Object.extend(\r\n\t\t\t\tpolicyHolder.contact,\r\n\t\t\t\tuserInput.vehicleForm.aboutCompany\r\n\t\t\t);\r\n\t\t\tpolicyHolder.contact.emailAddress1 =\r\n\t\t\t\tuserInput.vehicleForm.aboutCompany.email;\r\n\t\t\tpolicyHolder.contact.primaryAddress =\r\n\t\t\t\tuserInput.vehicleForm.aboutCompany.companyAddress;\r\n\r\n\t\t\tvar authorisedPerson = {};\r\n\t\t\tauthorisedPerson = Object.extend(\r\n\t\t\t\tauthorisedPerson,\r\n\t\t\t\tuserInput.vehicleForm.companyContact\r\n\t\t\t);\r\n\t\t\tauthorisedPerson.contactType = 'person';\r\n\t\t\tauthorisedPerson.primaryAddress =\r\n\t\t\t\ttransformedRequest.mainContactAddress !== null\r\n\t\t\t\t\t? transformedRequest.mainContactAddress\r\n\t\t\t\t\t: transformedRequest.vehicles[0].garageAddress;\r\n\t\t\tauthorisedPerson.emailAddress1 =\r\n\t\t\t\tuserInput.vehicleForm.companyContact.email;\r\n\r\n\t\t\tpolicyHolder.contact.passwordQuestion =\r\n\t\t\t\tauthorisedPerson.passwordQuestion;\r\n\t\t\tpolicyHolder.contact.passwordAnswer =\r\n\t\t\t\tauthorisedPerson.passwordAnswer;\r\n\r\n\t\t\tpolicyHolder.contact.authorisedPersons = [\r\n\t\t\t\t{\r\n\t\t\t\t\tperson: authorisedPerson\r\n\t\t\t\t}\r\n\t\t\t];\r\n\r\n\t\t\tpolicyHolder.contact.primaryPhone = 'work';\r\n\r\n\t\t\tdelete authorisedPerson.address;\r\n\t\t\tdelete policyHolder.contact.companyAddress;\r\n\t\t\tdelete policyHolder.contact.email;\r\n\t\t\tdelete policyHolder.contact.officePhone;\r\n\t\t} else {\r\n\t\t\tpolicyHolder.contact.authorisedPersons = [\r\n\t\t\t\t{\r\n\t\t\t\t\tperson: {\r\n\t\t\t\t\t\tcontactType: 'person',\r\n\t\t\t\t\t\tprimaryAddress: transformedRequest.policyAddress\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\tpolicyHolder.contact.contactType = 'company';\r\n\t\ttransformedRequest.policyHolders[0] = policyHolder;\r\n\t\ttransformedRequest.policyHolders[0].mainHolder = true;\r\n\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm &&\r\n\t\t\tuserInput.vehicleForm.companyContact &&\r\n\t\t\tuserInput.vehicleForm.companyContact\r\n\t\t\t\t.companyContactDetailsMailingPreference\r\n\t\t) {\r\n\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\tuserInput.vehicleForm.companyContact.companyContactDetailsMailingPreference;\r\n\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t.companyContactDetailsMailingPreference;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePersonContactDetails(transformedRequest, userInput) {\r\n\t\tvar vehicleForm = userInput.vehicleForm,\r\n\t\t\tmainPolicyHolder = vehicleForm.mainPolicyHolder;\r\n\r\n\t\tif (mainPolicyHolder) {\r\n\t\t\tvar policyHolders = [];\r\n\t\t\tmainPolicyHolder.policyContact =\r\n\t\t\t\tvehicleForm.mainPolicyHolderContact;\r\n\t\t\tif (mainPolicyHolder.isMainDriverMainPolicyHolder) {\r\n\t\t\t\tvar driver = util.deepClone(\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver\r\n\t\t\t\t);\r\n\t\t\t\tObject.extend(mainPolicyHolder, driver.person);\r\n\t\t\t}\r\n\r\n\t\t\tpolicyHolders.push(mainPolicyHolder);\r\n\t\t\tif (\r\n\t\t\t\tvehicleForm.additionalPolicyHolders &&\r\n\t\t\t\tvehicleForm.additionalPolicyHolders.policyHolders\r\n\t\t\t) {\r\n\t\t\t\tpolicyHolders = policyHolders.concat(\r\n\t\t\t\t\tvehicleForm.additionalPolicyHolders.policyHolders\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tpolicyHolders.forEach(function(policyHolder, index) {\r\n\t\t\t\tvar contact = util.deepClone(policyHolder);\r\n\t\t\t\tif (!transformedRequest.policyHolders[index])\r\n\t\t\t\t\ttransformedRequest.policyHolders[index] = {};\r\n\r\n\t\t\t\tvar transformedContact =\r\n\t\t\t\t\ttransformedRequest.policyHolders[index];\r\n\t\t\t\tif (!contact.contactType)\r\n\t\t\t\t\tcontact.contactType =\r\n\t\t\t\t\t\t'person'; /* TODO : check to make sure this condition is always safe to use */\r\n\r\n\t\t\t\tcontact.prefix = contact.title;\r\n\r\n\t\t\t\tif (contact.policyContact) {\r\n\t\t\t\t\tObject.extend(contact, contact.policyContact);\r\n\t\t\t\t\tif (contact.primaryPhone == 'mobile')\r\n\t\t\t\t\t\tcontact.cellPhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\telse if (contact.primaryPhone == 'home')\r\n\t\t\t\t\t\tcontact.homePhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\telse if (contact.primaryPhone == 'work')\r\n\t\t\t\t\t\tcontact.workPhone = contact.primaryPhoneNumber;\r\n\r\n\t\t\t\t\tdelete contact.policyContact;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!contact.primaryAddress)\r\n\t\t\t\t\tcontact.primaryAddress = util.clone(\r\n\t\t\t\t\t\tmainPolicyHolder.primaryAddress\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\tif (index == 0) {\r\n\t\t\t\t\tif (!contact.isMainDriverMainPolicyHolder) {\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t\t\t(!contact.fourYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t\t.fourYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\t\t\t(!contact.fourYears_vehicleAccidentsClaimsDetails ||\r\n\t\t\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaimsDetails\r\n\t\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tcontact.fourYears_licenceRSDC &&\r\n\t\t\t\t\t\t\t(!contact.fourYears_licenceRSDCDetails.length ||\r\n\t\t\t\t\t\t\t\tcontact.fourYears_licenceRSDCDetails.length < 1)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tcontact.fourYears_licenceRSDC = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t\t\t(!contact.tenYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t\t.tenYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcontact.drivingHistory = [];\r\n\r\n\t\t\t\t\t\tif (contact.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (contact.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (contact.fourYears_licenceRSDC) {\r\n\t\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\t\tcontact.fourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (contact.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcontact.drivingHistory.forEach(function(dh) {\r\n\t\t\t\t\t\t\tif (dh.description) {\r\n\t\t\t\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t\t(!contact.additionalPolicyHolderFourYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t.additionalPolicyHolderFourYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\t\t(!contact.additionalPolicyHolderFourYears_vehicleAccidentsClaimsDetails ||\r\n\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t.additionalPolicyHolderFourYears_vehicleAccidentsClaimsDetails\r\n\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaims = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_licenceRSDC &&\r\n\t\t\t\t\t\t(!contact\r\n\t\t\t\t\t\t\t.additionalPolicyHolderFourYears_licenceRSDCDetails\r\n\t\t\t\t\t\t\t.length ||\r\n\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t.additionalPolicyHolderFourYears_licenceRSDCDetails\r\n\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_licenceRSDC = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t\t(!contact.additionalPolicyHolderTenYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t.additionalPolicyHolderTenYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontact.drivingHistory = [];\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_chargedOrConvictedOffences\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaims\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (contact.additionalPolicyHolderFourYears_licenceRSDC) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffences\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontact.drivingHistory.forEach(function(dh) {\r\n\t\t\t\t\t\tif (dh.description) {\r\n\t\t\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontact.hasClaim =\r\n\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims ||\r\n\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaims ||\r\n\t\t\t\t\tfalse;\r\n\t\t\t\tcontact.hasConviction =\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences ||\r\n\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffences ||\r\n\t\t\t\t\tfalse;\r\n\r\n\t\t\t\tif (!transformedContact.contact)\r\n\t\t\t\t\ttransformedContact.contact = {};\r\n\t\t\t\tObject.extend(transformedContact.contact, contact);\r\n\t\t\t});\r\n\t\t} else if (\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0] &&\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver &&\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person\r\n\t\t) {\r\n\t\t\tvar driver = transformedRequest.vehicles[0].drivers[0].driver;\r\n\t\t\tvar contact = transformedRequest.policyHolders[0].contact;\r\n\t\t\tObject.extend(contact, driver.person);\r\n\t\t\tcontact.contactType =\r\n\t\t\t\t'person'; /* TODO : check to make sure this condition is always safe to use */\r\n\t\t}\r\n\t\ttransformedRequest.policyHolders[0].mainHolder = true;\r\n\t\tif (userInput.email) {\r\n\t\t\t/** required for saving/retrieving the policy */\r\n\t\t\tif (\r\n\t\t\t\tuserInput.vehicleForm &&\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t} else if (\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.email;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\tif (transformedRequest.policyHolders[0].contact.emailAddress1) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm &&\r\n\t\t\tuserInput.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\tuserInput.vehicleForm.mainPolicyHolderContact\r\n\t\t\t\t.personalContactDetailsMailingPreference\r\n\t\t) {\r\n\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.personalContactDetailsMailingPreference;\r\n\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t.personalContactDetailsMailingPreference;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateDrivers(transformedRequest, userInput) {\r\n\t\ttransformedRequest.vehicles[0].drivers = [];\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm.driver &&\r\n\t\t\tuserInput.vehicleForm.driver.drivers\r\n\t\t) {\r\n\t\t\tuserInput.vehicleForm.driver.drivers.forEach(function(driver) {\r\n\t\t\t\tdriver.person.contactType = 'person';\r\n\t\t\t\tdriver.person.prefix = driver.person.title;\r\n\t\t\t\tdriver.hasClaim = driver.person.hasClaim =\r\n\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tdriver.hasInfringement =\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tdriver.hasLostLicence = driver.fourYears_licenceRSDC;\r\n\t\t\t\tdriver.hasConviction = driver.person.hasConviction =\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tdriver.zeroDemerits = driver.NSWDemeritPoints;\r\n\t\t\t\t//driver.yearsLicenced = driver.yearsHeld ;\r\n\r\n\t\t\t\tdriver.person.primaryAddress = transformedRequest.policyAddress;\r\n\t\t\t\tdriver.person.primaryAddress.addressType =\r\n\t\t\t\t\ttransformedRequest.vehicleForm.getStarted\r\n\t\t\t\t\t\t.personOrCompany === 'company'\r\n\t\t\t\t\t\t? 'business'\r\n\t\t\t\t\t\t: 'residential';\r\n\r\n\t\t\t\tswitch (driver.yearsHeld) {\r\n\t\t\t\t\tcase 'lessThan_1':\r\n\t\t\t\t\t\tdriver.yearsLicenced = '7';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'greaterThan_5':\r\n\t\t\t\t\t\tdriver.yearsLicenced = '6';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdriver.yearsLicenced = driver.yearsHeld;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t(!driver.fourYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\t(!driver.fourYears_vehicleAccidentsClaimsDetails ||\r\n\t\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaimsDetails.length <\r\n\t\t\t\t\t\t\t1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_licenceRSDC &&\r\n\t\t\t\t\t(!driver.fourYears_licenceRSDCDetails.length ||\r\n\t\t\t\t\t\tdriver.fourYears_licenceRSDCDetails.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_licenceRSDC = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t(!driver.tenYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdriver.driverHistory = [];\r\n\r\n\t\t\t\tif (driver.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.fourYears_licenceRSDC) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdriver.driverHistory.forEach(function(dh) {\r\n\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t};\r\n\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvar driverObj = {\r\n\t\t\t\t\tdriver: driver\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// var toDelete = isItemMarkedForDelete('driver', driver) ;\r\n\t\t\t\t// if (toDelete) driverObj.markedForDelete = true ;\r\n\r\n\t\t\t\ttransformedRequest.vehicles[0].drivers.push(driverObj);\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driverUsage = 'main';\r\n\t\t} else {\r\n\t\t\ttransformedRequest.vehicles[0].drivers = [\r\n\t\t\t\t{\r\n\t\t\t\t\tdriverUsage: 'main'\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\tif (userInput.email) {\r\n\t\t\t/** required for saving/retrieving the policy */\r\n\t\t\tif (\r\n\t\t\t\tangular.isDefined(\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.email;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person\r\n\t\t\t\t\t\t.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleRegoDetails(transformedRequest, userInput) {\r\n\t\tvar aboutYourCar = userInput.vehicleForm.aboutYourCar,\r\n\t\t\ttellUsYourRegoNumber = userInput.vehicleForm.tellUsYourRegoNumber,\r\n\t\t\tregoNumber = null;\r\n\r\n\t\tif (aboutYourCar && aboutYourCar.regoDetails) {\r\n\t\t\tregoNumber = aboutYourCar.regoDetails.regoNumber;\r\n\t\t} else if (tellUsYourRegoNumber && tellUsYourRegoNumber.regoNumber) {\r\n\t\t\tregoNumber = tellUsYourRegoNumber.regoNumber;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.vehicles[0].registrationNumber = regoNumber;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAdditionalDrivers(transformedRequest, userInput) {\r\n\t\tvar fromRapidEstimate = !userInput.fromFullQuote,\r\n\t\t\tdriver = userInput.vehicleForm.driver,\r\n\t\t\tdrivers = driver ? driver.drivers : null,\r\n\t\t\t/** required for when checking decline on step 1 */\r\n\t\t\tyoungestDriver = null;\r\n\r\n\t\tif (!driver) return transformedRequest;\r\n\r\n\t\tvar rapidEstimateYoungerDriver =\r\n\t\t\tfromRapidEstimate &&\r\n\t\t\tdriver.youngestDriver &&\r\n\t\t\tdriver.numberOfOtherDrivers > 0;\r\n\t\tif (!rapidEstimateYoungerDriver)\r\n\t\t\tyoungestDriver = findYoungestDriver(drivers);\r\n\r\n\t\ttransformedRequest.vehicles[0].youngestDriverGender = rapidEstimateYoungerDriver\r\n\t\t\t? driver.youngestDriverGender /** value from rapid estimate */\r\n\t\t\t: youngestDriver\r\n\t\t\t? youngestDriver.person.gender\r\n\t\t\t: null; /** value from full quote */\r\n\r\n\t\ttransformedRequest.vehicles[0].otherDriverHasProLicense = fromRapidEstimate\r\n\t\t\t? driver.provisionalLicence /** value from rapid estimate */\r\n\t\t\t: youngestDriver\r\n\t\t\t? youngestDriver.licenceType == 'provisional'\r\n\t\t\t: false; /** value from full path */\r\n\r\n\t\ttransformedRequest.vehicles[0].youngestDriverDOB = rapidEstimateYoungerDriver\r\n\t\t\t? driver.youngestDriverDob\r\n\t\t\t: youngestDriver\r\n\t\t\t? youngestDriver.person.dateOfBirth\r\n\t\t\t: null;\r\n\r\n\t\ttransformedRequest.vehicles[0].otherDriverUsageTimes = fromRapidEstimate\r\n\t\t\t? numberOfOtherDrivers(\r\n\t\t\t\t\tdriver.numberOfOtherDrivers\r\n\t\t\t ) /* value from rapid estimate */\r\n\t\t\t: drivers.length - 1; /* value from full quote */\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction numberOfOtherDrivers(num) {\r\n\t\treturn num == 6 ? '5plus' : '' + num;\r\n\t}\r\n\r\n\tfunction updateMainDriverAddress(transformedRequest, userInput) {\r\n\t\tvar phs = transformedRequest.policyHolders,\r\n\t\t\tph = phs ? phs[0] : null,\r\n\t\t\tcontact = ph ? ph.contact : null,\r\n\t\t\tphAddress = contact ? contact.primaryAddress : null;\r\n\r\n\t\tphAddress = phAddress || transformedRequest.policyAddress;\r\n\r\n\t\treturn applyAddressForGoodDriverBonus(transformedRequest, phAddress);\r\n\t}\r\n\r\n\t/**\r\n\t * setting the policy contact address on the main driver.\r\n\t * This is required for good driver bonus discount to come through\r\n\t */\r\n\tfunction applyAddressForGoodDriverBonus(transformedRequest, address) {\r\n\t\tif (\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0] &&\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver &&\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person\r\n\t\t) {\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.primaryAddress = address;\r\n\r\n\t\t\tif (\r\n\t\t\t\ttransformedRequest.vehicleForm.getStarted.personOrCompany ===\r\n\t\t\t\t\t'company' &&\r\n\t\t\t\ttransformedRequest.postalAddress !== null\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.primaryAddress =\r\n\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t}\r\n\t\t\tif (angular.isDefined(transformedRequest.vehicleForm)) {\r\n\t\t\t\t/****************************************************************************\r\n\t\t\t\t * address is default to be residential to enable good driver bonus discount\r\n\t\t\t\t * Check Transformed request if come from vehicle form\r\n\t\t\t\t * Added Fallback to use the default values as residential\r\n\t\t\t\t ***************************************************************************/\r\n\t\t\t\t// Added checking for business Address Type to be able to include to good driver discount\r\n\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.primaryAddress.addressType =\r\n\t\t\t\t\ttransformedRequest.vehicleForm.getStarted\r\n\t\t\t\t\t\t.personOrCompany === 'company'\r\n\t\t\t\t\t\t? 'business'\r\n\t\t\t\t\t\t: 'residential';\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.primaryAddress.addressType =\r\n\t\t\t\t\t'residential';\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (angular.isDefined(transformedRequest.vehicleForm)) {\r\n\t\t\t\t// Replace Address Type via personOrCompany value\r\n\t\t\t\ttransformedRequest.policyAddress.addressType =\r\n\t\t\t\t\ttransformedRequest.vehicleForm.getStarted\r\n\t\t\t\t\t\t.personOrCompany === 'company'\r\n\t\t\t\t\t\t? 'business'\r\n\t\t\t\t\t\t: 'residential';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\ttransformedRequest.postalAddress.addressType = transformedRequest.policyAddress.addressType =\r\n\t\t\t\t'postal';\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction findYoungestDriver(drivers) {\r\n\t\tvar youngest = null;\r\n\t\tdrivers.forEach(function(driver) {\r\n\t\t\tif (!youngest) youngest = driver;\r\n\t\t\telse if (isYounger(driver, youngest)) youngest = driver;\r\n\t\t});\r\n\r\n\t\tfunction isYounger(driver, otherDriver) {\r\n\t\t\treturn (\r\n\t\t\t\tmoment(driver.person.dateOfBirth, 'DD/MM/YYYY') >\r\n\t\t\t\tmoment(otherDriver.person.dateOfBirth, 'DD/MM/YYYY')\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn youngest;\r\n\t}\r\n\r\n\tfunction updateVehicleInsuranceTypeAndAmount(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tvar insuredExcessValue = userInput.vehicleForm.insuredExcessValue;\r\n\t\tif (insuredExcessValue) {\r\n\t\t\ttransformedRequest.vehicles[0].sumInsuredType =\r\n\t\t\t\tinsuredExcessValue.comprehensivePref;\r\n\t\t\tif (insuredExcessValue.comprehensivePref == 'agreed') {\r\n\t\t\t\ttransformedRequest.vehicles[0].sumInsuredAmount =\r\n\t\t\t\t\tinsuredExcessValue.agreedValue;\r\n\t\t\t} else if (quoteOptions.getSelectedQuoteResult()) {\r\n\t\t\t\ttransformedRequest.vehicles[0].sumInsuredAmount = quoteOptions\r\n\t\t\t\t\t.getSelectedQuoteResult()\r\n\t\t\t\t\t.getAnnual().vehicleValue.lower;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleInsuranceOptionalBenefits(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tvar optionalBenefits = userInput.vehicleForm.optionalBenefits;\r\n\t\tvar coverageOptions = [];\r\n\t\tif (optionalBenefits) {\r\n\t\t\tfor (var key in optionalBenefits) {\r\n\t\t\t\tcoverageOptions.push({\r\n\t\t\t\t\tname: key,\r\n\t\t\t\t\tselected: optionalBenefits[key],\r\n\t\t\t\t\trequired: false\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\ttransformedRequest.vehicles[0].coverageOptions = coverageOptions;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateModificationOptions(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails;\r\n\r\n\t\tif (carDetails) {\r\n\t\t\tvar modifications = carDetails.modifications;\r\n\r\n\t\t\tif (modifications) {\r\n\t\t\t\tvar mods = carDetails.modificationsOptions,\r\n\t\t\t\t\tvehicleInfo = transformedRequest.vehicles[0].vehicleInfo;\r\n\r\n\t\t\t\tif (mods && vehicleInfo && vehicleInfo.optionalEquipments) {\r\n\t\t\t\t\tvar selectedEquipments = vehicleInfo.optionalEquipments.slice();\r\n\t\t\t\t\tvar modsKeys = Object.keys(mods);\r\n\t\t\t\t\t// need to do a look up to find code,optionKey and description from optionalEquipments\r\n\t\t\t\t\tselectedEquipments = selectedEquipments.filter(function(\r\n\t\t\t\t\t\teq\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn modsKeys.indexOf(eq.optionKey) !== -1;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tvehicleInfo.selectedEquipments = selectedEquipments;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAfterMarketModifications(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails;\r\n\t\tif (carDetails) {\r\n\t\t\tvar modificationsBuilt = carDetails.modificationsBuilt;\r\n\r\n\t\t\tif (modificationsBuilt) {\r\n\t\t\t\tvar mods = carDetails.modificationsBuiltOptions;\r\n\r\n\t\t\t\tif (mods) {\r\n\t\t\t\t\tafterMarketMods = [];\r\n\r\n\t\t\t\t\tfor (var key in mods) {\r\n\t\t\t\t\t\tif (mods[key] === true) {\r\n\t\t\t\t\t\t\tafterMarketMods.push(key);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttransformedRequest.vehicles[0].afterMarketMods = afterMarketMods;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateExistingDamage(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails,\r\n\t\t\texistingDamage = carDetails ? carDetails.existingDamage : null;\r\n\r\n\t\tif (existingDamage) {\r\n\t\t\ttransformedRequest.vehicles[0].unrepairedDamage = existingDamage;\r\n\t\t\tif (existingDamage != 'none') {\r\n\t\t\t\t/** do we have to set this to agree and set sumInsured to Salvage value ??? */\r\n\t\t\t\tif (carDetails.salvageValue) {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].sumInsuredType = 'agreed';\r\n\t\t\t\t\ttransformedRequest.vehicles[0].sumInsured =\r\n\t\t\t\t\t\tcarDetails.salvageValue;\r\n\t\t\t\t\ttransformedRequest.vehicles[0].evidenceOfValueOrPrice =\r\n\t\t\t\t\t\tcarDetails.writtenEvidence;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateFinanceType(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails,\r\n\t\t\tcarFinance = carDetails ? carDetails.carFinance : 'none';\r\n\t\t// , financeWith = carDetails.financeWith ? carDetails.financeWith : null;\r\n\r\n\t\tif (carDetails) {\r\n\t\t\tif (carDetails.financeWith) {\r\n\t\t\t\tfinanceWith = carDetails.financeWith;\r\n\t\t\t} else {\r\n\t\t\t\tfinanceWith = null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfinanceWith = null;\r\n\t\t}\r\n\r\n\t\tif (carFinance) {\r\n\t\t\ttransformedRequest.vehicles[0].financeType = carFinance;\r\n\r\n\t\t\tif (\r\n\t\t\t\tfinanceWith &&\r\n\t\t\t\tfinanceWith.hasOwnProperty('label') &&\r\n\t\t\t\tfinanceWith.hasOwnProperty('value')\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.vehicles[0].financeCompany = {};\r\n\r\n\t\t\t\ttransformedRequest.vehicles[0].financeCompany.name =\r\n\t\t\t\t\tfinanceWith.label;\r\n\t\t\t\ttransformedRequest.vehicles[0].financeCompany.publicID =\r\n\t\t\t\t\tfinanceWith.value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateRecentPurchase(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails,\r\n\t\t\tlast12Months = carDetails ? carDetails.last12Months : false,\r\n\t\t\tcarCost = last12Months ? carDetails.carCost : null;\r\n\r\n\t\tif (last12Months) {\r\n\t\t\ttransformedRequest.vehicles[0].recentPurchase = last12Months;\r\n\r\n\t\t\tif (carCost) {\r\n\t\t\t\ttransformedRequest.vehicles[0].purchasePrice = carCost;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//updates the email\r\n\tfunction updateEmail(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm &&\r\n\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t) {\r\n\t\t\ttransformedRequest.email =\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t} else {\r\n\t\t\t//set email from maincontact if not available in tellUsABitMore\r\n\t\t\tif (\r\n\t\t\t\tuserInput.vehicleForm &&\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// send the campaign code to GW\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm &&\r\n\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\tuserInput.vehicleForm.tellUsABitMore.promotionalCode\r\n\t\t) {\r\n\t\t\ttransformedRequest.campaignCode =\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.promotionalCode;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateStampDutyEligibility(transformedRequest, userInput) {\r\n\t\tvar stampDutyEligible = storage.getItem('stamp-duty');\r\n\t\tif (userInput.vehicleForm.stampDutyExemption && stampDutyEligible) {\r\n\t\t\ttransformedRequest.vehicles[0].isSmallBusiness =\r\n\t\t\t\tuserInput.vehicleForm.stampDutyExemption.isSmallBusiness;\r\n\t\t} else {\r\n\t\t\tdelete transformedRequest.vehicles[0].isSmallBusiness;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// function isItemMarkedForDelete(typeName, item) {\r\n\t// \tvar toRemove = aggregatedRemoveService.getList();\r\n\t// \tvar itemsToRemove = toRemove[typeName] || [];\r\n\t// \tvar removeItem = false ;\r\n\t// \titemsToRemove.some(function(itemToRemove) {\r\n\t// \t\tif ( itemToRemove._aggregator.id == item._aggregator.id){\r\n\t// \t\t\tremoveItem = true;\r\n\t// \t\t\treturn;\r\n\t// \t\t}\r\n\t// \t});\r\n\t// \treturn removeItem;\r\n\t// }\r\n\r\n\tfunction updatePolicyAddress(transformedRequest, userInput) {\r\n\t\tvar postalAddress = storage.getItem('policy-address');\r\n\r\n\t\tif (\r\n\t\t\tangular.isDefined(userInput.vehicleForm.mainPolicyHolderContact) ||\r\n\t\t\tangular.isDefined(userInput.vehicleForm.companyContact)\r\n\t\t) {\r\n\t\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t} else {\r\n\t\t\t\tvar isPostalOption = true;\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.vehicleForm.getStarted.personOrCompany == 'person'\r\n\t\t\t\t) {\r\n\t\t\t\t\tisPostalOption =\r\n\t\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact\r\n\t\t\t\t\t\t\t.postalOption;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tisPostalOption =\r\n\t\t\t\t\t\tuserInput.vehicleForm.companyContact.postalOption;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0 && !isPostalOption) {\r\n\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdelete transformedRequest.postalAddress;\r\n\t\tdelete transformedRequest.mainContactAddress;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(userInput) {\r\n\t\tvar transformedRequest = jsonMapper.transform(\r\n\t\t\tuserInput,\r\n\t\t\tstructureQuoteMapping\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleRegoDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateStampDutyEligibility(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateDrivers(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateAdditionalDrivers(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updatePolicyHolders(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateMainDriverAddress(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleInsuranceTypeAndAmount(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleInsuranceOptionalBenefits(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateAfterMarketModifications(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateModificationOptions(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateExistingDamage(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateFinanceType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateRecentPurchase(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateEmail(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePolicyAddress(transformedRequest, userInput);\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transposeMonth(monthName) {\r\n\t\tvar months = {\r\n\t\t\tJanuary: '01',\r\n\t\t\tFebruary: '02',\r\n\t\t\tMarch: '03',\r\n\t\t\tApril: '04',\r\n\t\t\tMay: '05',\r\n\t\t\tJune: '06',\r\n\t\t\tJuly: '07',\r\n\t\t\tAugust: '08',\r\n\t\t\tSeptember: '09',\r\n\t\t\tOctober: '10',\r\n\t\t\tNovember: '11',\r\n\t\t\tDecember: '12'\r\n\t\t};\r\n\r\n\t\treturn months[monthName];\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n","function CaravanCleanRequestTransformer(Util, jsonMapper) {\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tdelete intermediateRequest.caravanForm;\r\n\r\n\t\tvar caravan = intermediateRequest.caravans[0];\r\n\t\tvar policyHolders = intermediateRequest.policyHolders[0];\r\n\r\n\t\tdelete caravan.cost;\r\n\t\tdelete caravan.existingDamage;\r\n\t\tdelete caravan.financeWith;\r\n\t\tdelete caravan.finance;\r\n\t\tdelete caravan.regoNumber;\r\n\t\tdelete caravan.sumInsuredAmount;\r\n\t\tdelete caravan.whenDidYouBuyMonth;\r\n\t\tdelete caravan.whenDidYouBuyYear;\r\n\t\tdelete caravan.security;\r\n\t\tdelete caravan.locationDescription;\r\n\t\tdelete caravan.primaryUse;\r\n\t\tdelete caravan.vehicleSubType;\r\n\r\n\t\t// Remove the subtype if the vehicle is any of these types\r\n\t\tif ( caravan.caravanType !== 'caravan' && caravan.caravanType !== 'campertrailer' && caravan.caravanType !== 'goodscarryingtrailer' ) {\r\n\t\t\tdelete caravan.caravanSubType;\r\n\t\t}\r\n\r\n\t\tif ( caravan.drivers ) {\r\n\t\t\tcaravan.drivers.forEach(function(policyDriver) {\r\n\t\t\t\tdelete policyDriver.driver._HTMLID;\r\n\t\t\t\tdelete policyDriver.driver.$$hashKey;\r\n\t\t\t\tdelete policyDriver.driver._aggregator;\r\n\r\n\t\t\t\tdelete policyDriver.driver.maxNoClaimBonus;\r\n\t\t\t\tdelete policyDriver.driver.title;\r\n\t\t\t\tdelete policyDriver.driver.yearsHeld;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_licenceRSDC;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_licenceRSDCDetails;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_vehicleAccidentsClaimsDetails;\r\n\t\t\t\tdelete policyDriver.driver.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tdelete policyDriver.driver.tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t* Guidewire creates duplicate records of other drivers criminal histories\r\n\t\t\t\t* if the driverHistory is sent as an empty array :)\r\n\t\t\t\t* For now this has been commented out and moved to PublicIDTransformer as that\r\n\t\t\t\t* is creating an array when going through and transforming public ID's for a list. This behaviour should be changed for empty lists.\r\n\t\t\t\t* After changing that, this can be commented back in and removed from publicIDTransformer.\r\n\t\t\t\tif ( policyDriver.driver.driverHistory\r\n\t\t\t\t\t&& Array.isArray(policyDriver.driver.driverHistory)\r\n\t\t\t\t\t&& policyDriver.driver.driverHistory.length == 0 )\r\n\t\t\t\t\tdelete policyDriver.driver.driverHistory;\r\n\t\t\t\t*/\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tif ( policyHolders.contact ) {\r\n\t\t\tdelete policyHolders.contact._HTMLID;\r\n\t\t\tdelete policyHolders.contact.$$hashKey;\r\n\t\t\tdelete policyHolders.contact._aggregator;\r\n\r\n\t\t\tdelete policyHolders.contact.anyInfringements;\r\n\t\t\tdelete policyHolders.contact.anyLostLicences;\r\n\t\t\tdelete policyHolders.contact.mainPolicyHolder;\r\n\r\n\t\t\tdelete policyHolders.contact.fourYears_chargedOrConvictedOffences;\r\n\t\t\tdelete policyHolders.contact.fourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\tdelete policyHolders.contact.fourYears_licenceRSDC;\r\n\t\t\tdelete policyHolders.contact.fourYears_licenceRSDCDetails;\r\n\t\t\tdelete policyHolders.contact.fourYears_bikeAccidentsClaims;\r\n\t\t\tdelete policyHolders.contact.fourYears_bikeAccidentsClaimsDetails;\r\n\t\t\tdelete policyHolders.contact.tenYears_chargedOrConvictedOffences;\r\n\t\t\tdelete policyHolders.contact.tenYears_chargedOrConvictedOffencesDetails;\r\n\t\t}\r\n\r\n\r\n\r\n\t\tif ( ! intermediateRequest.email )\r\n\t\t\tdelete intermediateRequest.email ;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function CaravanCoverTypeTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(intermediateRequest, coverTypeDescriptor) {\r\n\r\n\t\tintermediateRequest.caravans[0].coverType = coverTypeDescriptor;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function CaravanDefaultValueRequestTransformer(Util, jsonMapper, userInputRepository, quoteOptions) {\r\n\r\n\tfunction formatDateAndTimeTheGuidewireWay(date, time) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\tvar timeFormatted = '4:00PM' ;\r\n\t\tif ( time )\r\n\t\t\ttimeFormatted = moment().tz(\"Australia/Sydney\").format('h:mma');\r\n\t\treturn Util.stringFormat(format, moment().tz(\"Australia/Sydney\").format('Do MMM YYYY') , timeFormatted) ;\r\n\t}\r\n\r\n\tvar staticValuesMapping = {\r\n\t\t\"quoteType\": 'Full',\r\n\t\t\"productCode\": 'QPCCaravanTrailer',\r\n\t\t\"caravans.0.financeType\": \"none\",\r\n\t\t\"caravans.0.sumInsuredType\": \"agreed\",\r\n\t\t\"caravans.0.garageType\": \"garage\",\r\n\t\t\"caravans.0.coverType\": \"comprehensive\",\r\n\t\t\"caravans.0.specifiedContents\": false,\r\n\t\t\"caravans.0.existingDamageType\": \"nodamage\",\r\n\t\t\"caravans.0.hasCurrentInsurance\": false,\r\n\t\t\"caravans.0.isEligibleforSDExemption\": false,\t\t\r\n\t\t\"caravans.0.isCaravanRegistered\": true,\r\n\t\t\"caravans.0.isCycloneRatedSecurity\": false,\r\n\t\t\"caravans.0.locationType\": \"residentialaddress\",\r\n\t\t\"caravans.0.securityType\": \"garage\",\r\n\t\t\"caravans.0.registrationNumber\": \"RAPID_QUOTE_REGNUMBER\",\r\n\t\t\"caravans.0.chassisNumber\": \"Not Supplied\",\r\n\t\t\"caravans.0.isCaravanOnNonRetractableJacks\": false,\r\n\t\t\"caravans.0.isCaravanConnectedToPlumbing\": false,\r\n\t\t\"caravans.0.isPermResidence\": false,\r\n\t\t\"caravans.0.caravanUsageType\": \"private\",\r\n\t\t\"caravans.0.contentsCover\": true,\r\n\t\t\"caravans.0.purchaseMonthYear\": moment().tz(\"Australia/Sydney\").format('YYYY-MM'),\r\n\t\t\"caravans.0.yearsContinuousInsurance\": \"0\",\r\n\t\t\"caravans.0.garageAddress.addressType\": \"postal\",\r\n\t\t\"caravans.0.drivers.*.driver.licenceType\": \"full\",\r\n\t\t\"caravans.0.drivers.*.driver.yearsLicenced\": \"6\",\r\n\t\t\"caravans.0.drivers.*.driver.hasConviction\": false,\r\n\t\t\"caravans.0.drivers.*.driver.hasClaim\": false,\r\n\t\t\"caravans.0.drivers.*.driver.hasInfringement\": false,\r\n\t\t\"caravans.0.drivers.*.driver.hasLostLicence\": false,\r\n\t\t\"caravans.0.drivers.*.driver.zeroDemerits\": true ,\r\n\t\t\"caravans.0.drivers.*.driver.previousInsurer\": \"none\",\r\n\t\t\"caravans.0.drivers.*.driver.person.contactType\": \"person\",\r\n\t\t\"caravans.0.drivers.*.driver.person.gender\": \"male\",\r\n\t\t\"caravans.0.drivers.*.driver.person.firstName\": \"An@n\",\r\n\t\t\"caravans.0.drivers.*.driver.person.lastName\": \"An@nym@us\",\r\n\t\t\"caravans.0.drivers.*.driver.person.isJustInsured\": false,\r\n\t\t\"caravans.0.drivers.*.driver.person.dateOfBirth\": \"01/06/2000\",\r\n\t\t\"caravans.0.availableCoverTypes\" : [\r\n \"comprehensive\"\r\n ],\r\n\t\t\"availableSumInsuredTypes\": [\r\n \"market\",\r\n \"agreed\"\r\n ],\r\n\t\t\"caravans.0.excess.standardVehicleExcess\": 650,\r\n\t \"caravans.0.excess.ageExcessTier1\": 1000,\r\n\t \"caravans.0.excess.ageExcessTier2\": 750,\r\n\t \"caravans.0.excess.undeclaredDriverTier2\": 500,\r\n\t \"caravans.0.excess.inexperiencedDriver\": 750,\r\n\t\t\"policyHolders.0.mainHolder\": true,\r\n\t\t\"policyHolders.0.contact.isJustInsured\": false,\r\n\t\t\"policyHolders.0.contact.contactType\": \"person\",\r\n\t\t\"policyHolders.0.contact.dateOfBirth\": \"01/06/2000\",\r\n\t\t// full quote transformation :\r\n \"status\" : \"Draft\",\r\n\t\t\"documentDeliveryMethod\": 'email',\r\n\t\t\"displayStatus\": 'Draft',\r\n\t\t\"periodStartDateTimeAEDT\": formatDateAndTimeTheGuidewireWay(moment(), moment()),\r\n\t\t\"periodEndDateTimeAEDT\" : formatDateAndTimeTheGuidewireWay(moment().add(1,'years')),\r\n\t\t\"channel\": 'portal',\r\n\t\t\"caravans.0.drivers.*.driverUsage\" : \"other\",\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar staticValuesMappingNew = ApplyDefaultExcess(userInput);\r\n\t\tvar transformedRequest = jsonMapper.setDefault(userInput, staticValuesMappingNew) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction ApplyDefaultExcess(userInput) {\r\n\t\tvar staticValuesMappingNew = staticValuesMapping;\r\n\t\tvar excessValue = quoteOptions.getStateDefaultVoluntaryExcess(userInput.policyAddress.state);\r\n\t\tif(excessValue != null){\r\n\t\t\tvar tempObj = {\"caravans.0.excess.voluntaryVehicleExcess\": excessValue};\r\n\t\t\tstaticValuesMappingNew = Object.extend(staticValuesMapping, tempObj);\r\n\t\t}\r\n\t\treturn staticValuesMappingNew;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function CaravanFormatConverterTransformer(Util, jsonMapper) {\r\n\r\n\tfunction convertDateAndTimeTheGuidewireWay(dateTime) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\treturn Util.stringFormat(format, dateTime.format('Do MMM YYYY') , dateTime.format('h:mma')) ;\r\n\t}\r\n\r\n\tfunction convertDate(dateString) {\r\n\t\tvar date = moment(dateString, 'DD/MM/YYYY') ;\r\n\t\tvar formattedDate = date.format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\r\n\t\t// throw 'date format exception formatting ' + dateString ;\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertDateToGWTimeZone(dateString) {\r\n\t\tvar formattedDate = moment(dateString,'DDMMYYYY').tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertGender(gender) {\r\n\t\tvar gc = {\r\n\t\t\tmale : 'M',\r\n\t\t\tfemale : 'F',\r\n\t\t\tintersex : 'I',\r\n\t\t};\r\n\r\n\t\treturn gc[gender] ;\r\n\t}\r\n\r\n\tfunction convertLengthUnits(inUnit) {\r\n\t\tvar units = {\r\n\t\t\tfeet : 'ft',\r\n\t\t\tmetres : 'm',\r\n\t\t};\r\n\r\n\t\treturn units[inUnit] ;\r\n\t}\r\n\r\n\tfunction convertFalsyToUnknown(value) {\r\n\t\tif ( value === null || value === undefined )\r\n\t\t\treturn 'unknown';\r\n\r\n\t\treturn convertBooleanToYesNo(value) ;\r\n\t}\r\n\r\n\tfunction convertBooleanToYesNo(value) {\r\n\t\treturn value ? 'yes' : 'no' ;\r\n\t}\r\n\r\n\tfunction convertStringToInt(value) {\r\n\t\treturn !!value ? parseInt(value) : value;\r\n\t}\r\n\r\n\tfunction convertIntToString(value) {\r\n\t\treturn !!value ? value.toString() : value;\r\n\t}\r\n\r\n\tfunction convertYearsContinuousInsurance(value) {\r\n\t\treturn value === '3+' ? 4 : value;\r\n\t}\r\n\r\n\r\n\tvar convertValueMapping = {\r\n\t\t'periodStartDate': convertDateToGWTimeZone,\r\n\r\n\t\t'policyHolders.*.contact.gender' : convertGender,\r\n\t\t'policyHolders.*.contact.hasClaim' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.hasConviction' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyLostLicences' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyInfringements' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.dateOfBirth' : convertDate,\r\n\r\n\t\t'caravans.0.caravanInfo.weight' : convertIntToString,\r\n\t\t'caravans.0.caravanInfo.caravanLength' : convertIntToString,\r\n\t\t'caravans.0.caravanInfo.lengthUnits' : convertLengthUnits,\r\n\t\t'caravans.0.timeSinceLastClaim' : convertIntToString,\r\n\r\n\t\t'caravans.0.drivers.*.driver.person.dateOfBirth' : convertDate,\r\n\t\t'caravans.0.drivers.*.driver.person.gender' : convertGender,\r\n\t\t\"caravans.0.drivers.*.driver.hasConviction\": convertFalsyToUnknown,\r\n\t\t\"caravans.0.drivers.*.driver.person.hasConviction\": convertBooleanToYesNo,\r\n\t\t\"caravans.0.drivers.*.driver.hasClaim\": convertFalsyToUnknown,\r\n\t\t\"caravans.0.drivers.*.driver.person.hasClaim\": convertBooleanToYesNo,\r\n\t\t\"caravans.0.drivers.*.driver.hasLostLicence\": convertFalsyToUnknown,\r\n\t\t\"caravans.0.drivers.*.driver.hasInfringement\": convertFalsyToUnknown,\r\n\r\n\t\t\"caravans.0.yearsContinuousInsurance\": convertYearsContinuousInsurance,\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.convert(intermediateRequest, convertValueMapping) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function CaravanPolicyHolderHandler(Util, publicIDTransformer) {\r\n\r\n\t\r\n\tfunction handle(quoteRequest, userInput) {\r\n\t\tvar mainPolicyholder = quoteRequest.policyHolders.filter(function (item) {\r\n return item['mainHolder'];\r\n })[0];\r\n\r\n var mainDriver = quoteRequest.caravans[0].drivers.filter(function (item) {\r\n return item['driverUsage'] == 'main';\r\n })[0];\r\n\r\n if ((!userInput.caravanForm.mainPolicyHolder ||\r\n (userInput.caravanForm.mainPolicyHolder && userInput.caravanForm.mainPolicyHolder.isMainDriverMainPolicyHolder))) {\r\n mainPolicyholder.contact.publicID = mainDriver.driver.person.publicID;\r\n } else if (userInput.caravanForm.mainPolicyHolder != undefined && userInput.caravanForm.mainPolicyHolder.isMainDriverMainPolicyHolder != undefined &&\r\n !userInput.caravanForm.mainPolicyHolder.isMainDriverMainPolicyHolder &&\r\n mainPolicyholder.contact.publicID == mainDriver.driver.person.publicID) {\r\n quoteRequest = publicIDTransformer.transform(quoteRequest);\r\n delete quoteRequest.secret;\r\n delete quoteRequest.quoteID;\r\n }\r\n\r\n if (mainPolicyholder.contact.publicID == mainDriver.driver.person.publicID) {\r\n mainDriver.driver.person.passwordQuestion = mainPolicyholder.contact.passwordQuestion;\r\n mainDriver.driver.person.passwordAnswer = mainPolicyholder.contact.passwordAnswer;\r\n mainDriver.driver.person.primaryPhone = mainPolicyholder.contact.primaryPhone;\r\n \r\n\t\t\tswitch (mainPolicyholder.contact.primaryPhone) {\r\n\t\t\t\tcase 'mobile':\r\n\t\t\t\t\tmainDriver.driver.person.cellPhone = mainPolicyholder.contact.cellPhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'home':\r\n\t\t\t\t\tmainDriver.driver.person.homePhone = mainPolicyholder.contact.homePhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'work':\r\n\t\t\t\t\tmainDriver.driver.person.workPhone = mainPolicyholder.contact.workPhone;\r\n\t\t\t\t\tbreak;\r\n }\r\n \r\n delete mainPolicyholder.contact.drivingHistory;\r\n }\r\n\r\n return quoteRequest;\r\n\t}\r\n\r\n return {\r\n\t\thandle: handle\r\n\t}\r\n};","\"use strict\";\r\n\r\nfunction CaravanPublicIDTransformer(Util, jsonMapper, serviceResponseRepository, aggregatedRemoveService) {\r\n\r\n\tvar currentResponse = null;\r\n\tvar driverUniqueIdCtr = 1;\r\n\tvar historyUniqueIdCtr = 1;\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat('portal:{0}-{1}', moduleName, Util.generateRandomString(15));\r\n\t}\r\n\r\n\tfunction hasValidGWPublicID(publicID) {\r\n\t\tif (publicID && publicID.indexOf('portal:') === -1)\r\n\t\t\treturn true;\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction hash(value) {\r\n\t\treturn md5(value);\r\n\t}\r\n\r\n\tfunction fetchFromPreviousResponse(path) {\r\n\t\tif (currentResponse)\r\n\t\t\treturn Util.findHierarchyStringInObject(currentResponse, path, '.');\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tfunction convertPublicID(path, moduleName) {\r\n\t\tif (currentResponse) {\r\n\t\t\tvar lastPublicID = fetchFromPreviousResponse(path);\r\n\t\t\tif (lastPublicID)\r\n\t\t\t\treturn lastPublicID;\r\n\t\t}\r\n\r\n\t\treturn forgePublicId(moduleName);\r\n\t}\r\n\r\n\r\n\tvar moduleNameMapping = {\r\n\t\t'policyHolders': 'PolicyHolder[]',\r\n\t\t'policyAddress': 'Address',\r\n\t\t'caravan': \"QPCCaravanTrailer\",\r\n\t\t'driver': 'QPCVehicleDriver',\r\n\t\t'policyDriver': 'QPCPolicyDriver',\r\n\t\t'person': 'Person',\r\n\t\t'contentsItems': 'QPCSpecifiedItem',\r\n\t\t'coverageOptions': 'QPCLayupCover',\r\n\t\t'driverHistory': \"QPCDriverHistory\",\r\n\t\t\"pattern\": \"qbePattern\"\r\n\t};\r\n\r\n\tvar publicIDTransformationMapping = {\r\n\t\t\"policyAddress.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress)\r\n\t\t},\r\n\t\t\"caravans.0.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.caravan)\r\n\t\t},\r\n\t\t\"caravans.0.garageAddress.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress)\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driver)\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.uniqueID\": function () {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyDriver)\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.person.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.person.primaryAddress.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.driverHistory.*.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driverHistory)\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.driverHistory.*.uniqueID\": function () {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person)\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.primaryAddress.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress)\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.drivingHistory.*.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driverHistory)\r\n\t\t},\r\n\t\t\"caravans.0.specifiedItems.*.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.contentsItems)\r\n\t\t},\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDTransformationMapping = {\r\n\t\t\"policyHolders.*.contact.authorisedPersons.0.person.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person)\r\n\t\t},\r\n\t}\r\n\r\n\tvar publicIDConversionMapping = {\r\n\t\t\"policyAddress.publicID\": function (val) {\r\n\t\t\treturn convertPublicID('policyAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.publicID\": function (val) {\r\n\t\t\treturn convertPublicID('caravans.0.publicID', moduleNameMapping.caravan);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.uniqueID\": function () {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.driverHistory.*.uniqueID\": function () {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\r\n\t\t\"caravans.0.garageAddress.publicID\": function (val) {\r\n\t\t\treturn convertPublicID('caravans.0.garageAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\r\n\t\t\"policyHolders.*.contact.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.publicID', moduleNameMapping.policyHolders);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + '.publicID', moduleNameMapping.driver);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + '.driver.publicID', moduleNameMapping.policyDriver);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.person.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + '.driver.person.publicID', moduleNameMapping.person);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.person.primaryAddress.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + 'driver.person.primaryAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.driverHistory.*.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + '.driver.driverHistory.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.driverHistory);\r\n\t\t},\r\n\r\n\t\t\"policyHolders.*.contact.primaryAddress.publicID\": function (val) {\r\n\t\t\treturn convertPublicID('policyAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.specifiedItems.*.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.specifiedItems.' + mappedValueStarIndices[0] + '.publicID', moduleNameMapping.contentsItems);\r\n\t\t},\r\n\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function (val, mappedValueStarIndex) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndex[0] + '.contact.drivingHistory.' + mappedValueStarIndex[1] + '.publicID', moduleNameMapping.drivingHistory);\r\n\t\t},\r\n\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDConversionMapping = {\r\n\t\t\"policyHolders.*.contact.authorisedPersons.0.person.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.authorisedPersons.0.person.publicID.', moduleNameMapping.person);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction removeDeletedAdditionalDrivers(transformedRequest) {\r\n\t\tvar removedDrivers = aggregatedRemoveService.getList() ? aggregatedRemoveService.getList()['driver'] : null;\r\n\t\tvar savedDrivers = fetchFromPreviousResponse('caravans.0.drivers');\r\n\t\tif (savedDrivers && removedDrivers) {\r\n\t\t\tangular.forEach(removedDrivers, function (removedDriver) {\r\n\t\t\t\tvar matchingDriver = savedDrivers.filter(function (driver) {\r\n\t\t\t\t\treturn driver.driver.person.firstName == removedDriver.person.firstName &&\r\n\t\t\t\t\t\tdriver.driver.person.lastName == removedDriver.person.lastName;\r\n\t\t\t\t});\r\n\t\t\t\tmatchingDriver = matchingDriver[0] || null;\r\n\t\t\t\tif (matchingDriver) {\r\n\t\t\t\t\tmatchingDriver.markedForDelete = true;\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers.push(matchingDriver);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\taggregatedRemoveService.clear('driver');\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateSpecifiedItems(transformedRequest) {\r\n\t\tif (!transformedRequest.caravans[0].specifiedContents) {\r\n\t\t\tdelete transformedRequest.caravans[0].specifiedItems;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction removeDeletedDriverHistoryArrays(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.caravans[0].drivers;\r\n\t\tangular.forEach(drivers, function (driver, index) {\r\n\t\t\tvar savedHistories = fetchFromPreviousResponse('caravans.0.drivers.' + index + '.driver.driverHistory');\r\n\t\t\tif (savedHistories && savedHistories.length > 0) {\r\n\t\t\t\tvar driverHistories = driver.driver.driverHistory;\r\n\t\t\t\tangular.forEach(savedHistories, function (savedHistory) {\r\n\t\t\t\t\tvar matchingInput = driverHistories.filter(function (history) {\r\n\t\t\t\t\t\treturn history.publicID == savedHistory.publicID;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!matchingInput || matchingInput.length == 0) {\r\n\t\t\t\t\t\tsavedHistory.markedForDelete = true;\r\n\t\t\t\t\t\tdriverHistories.push(savedHistory);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeEmptyDriverHistoryArrays(transformedRequest) {\r\n\t\tvar vehicle = transformedRequest.caravans[0];\r\n\t\tif (vehicle && vehicle.drivers) {\r\n\t\t\tvehicle.drivers.forEach(function (policyDriver) {\r\n\t\t\t\tif (policyDriver.driver &&\r\n\t\t\t\t\tpolicyDriver.driver.driverHistory &&\r\n\t\t\t\t\tArray.isArray(policyDriver.driver.driverHistory) &&\r\n\t\t\t\t\tpolicyDriver.driver.driverHistory.length == 0)\r\n\t\t\t\t\tdelete policyDriver.driver.driverHistory;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//dd-973 - requiring a sequence number for driver infringement\r\n\tfunction addUniqueHistoryID(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.caravans[0].drivers;\r\n\r\n\t\tangular.forEach(drivers, function (driver, index) {\r\n\t\t\thistoryUniqueIdCtr = 1;\r\n\t\t\tvar driverHistory = driver.driver.driverHistory;\r\n\t\t\tif (driverHistory) {\r\n\t\t\t\tangular.forEach(driverHistory, function (driverHistory, index) {\r\n\t\t\t\t\tdriverHistory.uniqueID = historyUniqueIdCtr;\r\n\t\t\t\t\thistoryUniqueIdCtr++;\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, response) {\r\n\t\tcurrentResponse = response;\r\n\t\tdriverUniqueIdCtr = 1;\r\n\t\tvar transformedRequest = intermediateRequest;\r\n\r\n\t\tif (transformedRequest.policyHolders[0] &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact.authorisedPersons\r\n\t\t) {\r\n\t\t\tpublicIDConversionMapping = Object.extend(publicIDConversionMapping, authorisedPersonsPublicIDConversionMapping);\r\n\t\t\tpublicIDTransformationMapping = Object.extend(publicIDTransformationMapping, authorisedPersonsPublicIDTransformationMapping);\r\n\t\t}\r\n\r\n\t\tif (!currentResponse)\r\n\t\t\ttransformedRequest = jsonMapper.transform(intermediateRequest, publicIDTransformationMapping);\r\n\t\telse {\r\n\t\t\ttransformedRequest = jsonMapper.convert(intermediateRequest, publicIDConversionMapping);\r\n\t\t}\r\n\r\n\t\ttransformedRequest = addUniqueHistoryID(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedAdditionalDrivers(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedDriverHistoryArrays(transformedRequest);\r\n\t\ttransformedRequest = removeEmptyDriverHistoryArrays(transformedRequest);\r\n\t\tupdateSpecifiedItems(transformedRequest);\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","function CaravanQuoteResultModel(quoteResultResponse) {\r\n\tthis.isCoverAvailable = quoteResultResponse.quoteResult.totalPremium !== undefined ;\r\n\tthis.coverType = quoteResultResponse.caravans[0].coverType;\r\n\tthis.quoteResult = quoteResultResponse.quoteResult;\r\n\tthis.paymentPlan = quoteResultResponse.paymentPlan;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.totalFSL = quoteResultResponse.quoteResult.totalFSL ;\r\n\tthis.totalGST = quoteResultResponse.quoteResult.totalGST ;\r\n\tthis.totalStampDuty = quoteResultResponse.quoteResult.totalStampDuty ;\r\n\tthis.premiumAfterDiscount = quoteResultResponse.quoteResult.premiumAfterDiscount ;\r\n\tthis.paymentFrequency = quoteResultResponse.paymentPlan ? quoteResultResponse.paymentPlan.paymentFrequency : null ;\r\n\tthis.excess = quoteResultResponse.caravans[0].excess ;\r\n\tthis.availableSumInsuredTypes = quoteResultResponse.caravans[0].availableSumInsuredTypes;\r\n\r\n\tthis.coverageOptions = quoteResultResponse.caravans[0].coverageOptions ;\r\n\tthis.response = quoteResultResponse ;\r\n\r\n}\r\n","function CaravanRetrieveSavedQuoteResponseTransformer($filter, jsonMapper,Util) {\r\n // transform functions\r\n var transformers = {\r\n camelcase: function(value) {\r\n if(value) {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n },\r\n minimumTodaysDate: function(dateString) {\r\n var date = moment(dateString, 'YYYY-MM-DD')\r\n , today = new moment()\r\n , biggerDate = date >= today ? date : today ;\r\n\r\n return biggerDate.format('DD/MM/YYYY');\r\n }\r\n ,date: function(dateString) {\r\n var date = moment(dateString, 'YYYY-MM-DD') ;\r\n return date.format('DD/MM/YYYY') ;\r\n },\r\n financeType: function(financeType) {\r\n switch(financeType) {\r\n case 'none':\r\n return '';\r\n break;\r\n }\r\n },\r\n convertGender: function(gender) {\r\n var gc = {\r\n M : 'male',\r\n F : 'female',\r\n I : 'intersex',\r\n };\r\n return gc[gender] ;\r\n },\r\n convertUnit: function(unit) {\r\n var gc = {\r\n 'ft' : 'feet',\r\n 'm' : 'metres'\r\n };\r\n return gc[unit] ;\r\n },\r\n convertSpecifiedCategory: function(category) {\r\n var gc = {\r\n 'camping_equipment' : 'Camping Equipment',\r\n 'commnav_equipment' : 'Communication and Navigation Equipment',\r\n 'electrical_equipment' : 'Electrical Equipment',\r\n 'entertain_equipment' : 'Entertainment Equipment',\r\n 'other' : 'Other',\r\n 'sporting_equipment' : 'Sporting Equipment'\r\n\r\n };\r\n return gc[category] ;\r\n },\r\n yesNo: function(value) {\r\n return value == 'yes' ? true : false;\r\n },\r\n checkbox: function(value) {\r\n },\r\n state: function(state) {\r\n if ( state )\r\n return state.replace('AU_', '');\r\n },\r\n coverType: function(coverType) {\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n return 'third_party';\r\n }\r\n return coverType;\r\n },\r\n purchaseMonthFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n return monthYear.split('-')[1];\r\n }else{\r\n return '';\r\n }\r\n\r\n },\r\n purchaseYearFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n return monthYear.split('-')[0];\r\n }else{\r\n return '';\r\n }\r\n },\r\n thirdPartyPref: function(coverType) {\r\n if(coverType === 'comprehensive') {\r\n return null;\r\n }\r\n return coverType;\r\n },\r\n convertToLabelValue: function(o) {\r\n if ( o )\r\n return {\r\n label : o.name,\r\n value : o.code,\r\n }\r\n\r\n return null;\r\n },\r\n yearsHeld: function(years) {\r\n var yearsHeld;\r\n\r\n switch (years) {\r\n case '7':\r\n yearsHeld = 'lessThan_1';\r\n break;\r\n case '6':\r\n yearsHeld = 'greaterThan_5';\r\n break;\r\n default:\r\n yearsHeld = years;\r\n }\r\n\r\n return yearsHeld;\r\n }\r\n };\r\n function transformPerson(person) {\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date\r\n };\r\n var transformedPerson = jsonMapper.convert(jsonMapper.transform(person, transformMapping), convertMapping);\r\n return transformedPerson.returnObject;\r\n }\r\n\r\n function transformDriver(driver) {\r\n var transformMapping = {\r\n 'returnObject.yearsHeld': '=_input.driver.yearsLicenced',\r\n 'returnObject.licenceType': '=_input.driver.licenceType',\r\n 'returnObject.noClaimBonus': '=_input.driver.noClaimBonus',\r\n 'returnObject.previousInsurer': '=_input.driver.currentInsurer',\r\n 'returnObject.licensedToRide': '=_input.licensedToRide',\r\n 'returnObject.threeYears_accidentsClaims': '=_input.driver.hasClaim',\r\n 'returnObject.fiveYears_chargedOrConvicted': '=_input.driver.hasConviction',\r\n 'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled': '=_input.driver.hasLostLicence',\r\n 'returnObject.visaType': '=_input.driver.visaType',\r\n },\r\n convertMapping = {\r\n 'returnObject.yearsHeld': transformers.yearsHeld,\r\n 'returnObject.licensedToRide': transformers.yesNo,\r\n 'returnObject.threeYears_accidentsClaims': transformers.yesNo,\r\n 'returnObject.fiveYears_chargedOrConvicted': transformers.yesNo,\r\n 'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled': transformers.yesNo\r\n };\r\n\r\n var mappedRider = jsonMapper.transform(driver, transformMapping);\r\n var transformedRider = jsonMapper.convert(mappedRider, convertMapping);\r\n var returnObject = transformedRider.returnObject;\r\n if(driver.driver.person) {\r\n transformedRider.returnObject.person = transformPerson(driver.driver.person);\r\n }\r\n\r\n // extract driver history\r\n returnObject.fourYears_chargedOrConvictedOffencesDetails = [];\r\n returnObject.fourYears_vehicleAccidentsClaimsDetails = [];\r\n returnObject.tenYears_chargedOrConvictedOffencesDetails = [];\r\n returnObject.fourYears_licenceRSDCDetails = [];\r\n\r\n if (!!driver.driver.driverHistory) {\r\n driver.driver.driverHistory.forEach(function(record) {\r\n var matchedPattern = {};\r\n\r\n switch (record.pattern.filter1) {\r\n case 'infringement_demerit':\r\n // case 'infringement_licence':\r\n returnObject.fourYears_chargedOrConvictedOffencesDetails.push(\r\n extractHistory(globals.fourYears_offences.options, record)\r\n );\r\n break;\r\n case 'infringement_licence':\r\n returnObject.fourYears_licenceRSDCDetails.push(\r\n extractHistory(globals.incidents.options, record)\r\n );\r\n break;\r\n case 'claim' :\r\n returnObject.fourYears_vehicleAccidentsClaimsDetails.push(\r\n extractHistory(globals.accidents.options, record));\r\n break;\r\n case 'conviction' :\r\n returnObject.tenYears_chargedOrConvictedOffencesDetails.push(\r\n extractHistory(globals.tenYears_offences.options, record)\r\n );\r\n break;\r\n\r\n }\r\n });\r\n }\r\n\r\n returnObject.fourYears_chargedOrConvictedOffences = returnObject.fourYears_chargedOrConvictedOffencesDetails.length > 0 ;\r\n returnObject.fourYears_vehicleAccidentsClaims = returnObject.fourYears_vehicleAccidentsClaimsDetails.length > 0 ;\r\n returnObject.tenYears_chargedOrConvictedOffences = returnObject.tenYears_chargedOrConvictedOffencesDetails.length > 0 ;\r\n returnObject.fourYears_licenceRSDC = returnObject.fourYears_licenceRSDCDetails.length > 0 ;\r\n\r\n return returnObject;\r\n }\r\n\r\n function extractHistory(collection, record) {\r\n var matchedPattern = {};\r\n var month = {};\r\n var year = {};\r\n\r\n matchedPattern = collection.find(function(opt) {\r\n return opt.publicID == record.pattern.publicID;\r\n });\r\n\r\n month.label = month.value = moment(record.month, 'MM').format('MMMM') ; // Util.capitalize(record.month.toString());\r\n year.label = year.value = Util.capitalize(record.year.toString());\r\n\r\n record.description = matchedPattern;\r\n record.month = month;\r\n record.year = year;\r\n\r\n delete record.pattern;\r\n\r\n return record;\r\n }\r\n\r\n function transformPolicyHolder(holder) {\r\n\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth',\r\n 'returnObject.fourYears_chargedOrConvictedOffences': '=_input.hasConviction',\r\n 'returnObject.fourYears_licenceRSDC': '=_input.hasLostLicence',\r\n 'returnObject.fourYears_vehicleAccidentsClaims': '=_input.hasClaim',\r\n 'returnObject.tenYears_chargedOrConvictedOffences': '=_input.hasInfringement'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date,\r\n 'returnObject.fourYears_chargedOrConvictedOffences': transformers.yesNo,\r\n 'returnObject.fourYears_licenceRSDC': transformers.yesNo,\r\n 'returnObject.fourYears_vehicleAccidentsClaims': transformers.yesNo,\r\n 'returnObject.tenYears_chargedOrConvictedOffences': transformers.yesNo\r\n };\r\n\r\n var transformedPolicyHolder = jsonMapper.convert(jsonMapper.transform(holder, transformMapping), convertMapping);\r\n\r\n return transformedPolicyHolder.returnObject;\r\n }\r\n\r\n /**\r\n * Transforms the retrievedQuoteRepsonse into a format that can be injected into the userInputRepository\r\n * The returned value will populate all the forms in the quote process\r\n * @param {Object} retrievedQuoteResponse Response object from the retrieveSavedQuote service\r\n * @returns {Object} Transformed object ready to inject into the userInputRepository\r\n */\r\n function transform(retrievedQuoteResponse) {\r\n \tconsole.info('retrievedQuoteResponse', retrievedQuoteResponse);\r\n\r\n var transformMapping = {\r\n\t\t\t\t'returnObject.email': '=_input.email',\r\n\r\n\t\t\t\t// getStarted\r\n\t\t\t\t'returnObject.getStarted.policyStartDate':\r\n\t\t\t\t\t'=_input.periodStartDate',\r\n\r\n\t\t\t\t// aboutYourCaravan\r\n\t\t\t\t'returnObject.aboutYourCaravan.vehicleType':\r\n\t\t\t\t\t'=_input.caravans.0.caravanType',\r\n\t\t\t\t'returnObject.aboutYourCaravan.address':\r\n\t\t\t\t\t'=_input.caravans.0.garageAddress',\r\n\r\n\t\t\t\t// caravanDetails\r\n\t\t\t\t'returnObject.caravanDetails.vehicleSubType':\r\n\t\t\t\t\t'=_input.caravans.0.caravanSubType',\r\n\t\t\t\t'returnObject.caravanDetails.isCaravanRegistered':\r\n\t\t\t\t\t'=_input.caravans.0.isCaravanRegistered',\r\n\t\t\t\t'returnObject.caravanDetails.regoNumber':\r\n\t\t\t\t\t'=_input.caravans.0.registrationNumber',\r\n\t\t\t\t'returnObject.caravanDetails.locationDescription':\r\n\t\t\t\t\t'=_input.caravans.0.locationType',\r\n\t\t\t\t'returnObject.caravanDetails.security':\r\n\t\t\t\t\t'=_input.caravans.0.securityType',\r\n\t\t\t\t'returnObject.caravanDetails.primaryUse':\r\n\t\t\t\t\t'=_input.caravans.0.caravanUsageType',\r\n\t\t\t\t'returnObject.caravanDetails.existingDamage':\r\n\t\t\t\t\t'=_input.caravans.0.existingDamageType',\r\n\t\t\t\t'returnObject.caravanDetails.finance':\r\n\t\t\t\t\t'=_input.caravans.0.financeType',\r\n\t\t\t\t'returnObject.caravanDetails.financeWith':\r\n\t\t\t\t\t'=_input.caravans.0.financeCompany',\r\n\t\t\t\t'returnObject.caravanDetails.whenDidYouBuyYear':\r\n\t\t\t\t\t'=_input.caravans.0.purchaseMonthYear',\r\n\t\t\t\t'returnObject.caravanDetails.whenDidYouBuyMonth':\r\n\t\t\t\t\t'=_input.caravans.0.purchaseMonthYear',\r\n\t\t\t\t'returnObject.caravanDetails.purchasePrice':\r\n\t\t\t\t\t'=_input.caravans.0.purchasePrice',\r\n\t\t\t\t'returnObject.caravanDetails.cost':\r\n\t\t\t\t\t'=_input.caravans.0.purchasePrice',\r\n\t\t\t\t'returnObject.caravanDetails.isPremanentResidence':\r\n\t\t\t\t\t'=_input.caravans.0.isPermResidence',\r\n\t\t\t\t'returnObject.caravanDetails.nonRetractableJacksorPermanantFoundations':\r\n\t\t\t\t\t'=_input.caravans.0.isCaravanOnNonRetractableJacks',\r\n\t\t\t\t'returnObject.caravanDetails.permanentlyConnected':\r\n\t\t\t\t\t'=_input.caravans.0.isCaravanConnectedToPlumbing',\r\n\r\n\t\t\t\t// aboutYourContents\r\n\t\t\t\t'returnObject.aboutYourContents.insureContents':\r\n\t\t\t\t\t'=_input.caravans.0.contentsCover',\r\n\t\t\t\t'returnObject.aboutYourContents.generalContentsValue':\r\n\t\t\t\t\t'=_input.caravans.0.contentsCoverAmount',\r\n\t\t\t\t'returnObject.aboutYourContents.contentsItems':\r\n\t\t\t\t\t'=_input.caravans.0.specifiedItems',\r\n\r\n\t\t\t\t// quote excess and sum insured values\r\n\t\t\t\t'returnObject.sumInsured.agreedValue':\r\n\t\t\t\t\t'=_input.caravans.0.agreedAmountValue',\r\n\t\t\t\t'returnObject.sumInsured.annexeReplacementCost':\r\n\t\t\t\t\t'=_input.caravans.0.replacementCostValue',\r\n\t\t\t\t'returnObject.excess.voluntaryVehicleExcess':\r\n\t\t\t\t\t'=_input.caravans.0.excess.voluntaryVehicleExcess',\r\n\r\n\t\t\t\t//tell us a bit more -------------------------------------\r\n\t\t\t\t'returnObject.tellUsABitMore.yourEmailAddress': '=_input.email',\r\n\t\t\t\t'returnObject.tellUsABitMore.promotionalCode':\r\n\t\t\t\t\t'=_input.campaignCode',\r\n\t\t\t\t'returnObject.stampDutyExemption.isSmallBusiness':\r\n\t\t\t\t\t'=_input.caravans.0.isSmallBusiness',\r\n\t\t\t\t//driver\r\n\t\t\t\t// 'vehicleForm.driver.paymentOptions': '=_input.?',\r\n\r\n\t\t\t\t// optional benefits\r\n\t\t\t\t// 'returnObject.discountOptions.discountLayup': '=_input.caravans.0.coverageOptions.0.activeLayupMonths',\r\n\r\n\t\t\t\t// registration details\r\n\t\t\t\t'returnObject.caravanInfo': '=_input.caravans.0.caravanInfo',\r\n\t\t\t\t'returnObject.retrievedQuoteRego.rego':\r\n\t\t\t\t\t'=_input.caravans.0.registrationNumber',\r\n\t\t\t\t'returnObject.retrievedQuoteRego.state':\r\n\t\t\t\t\t'=_input.caravans.0.garageAddress.state',\r\n\r\n\t\t\t\t// Contact\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordQuestion':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordQuestion',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordAnswer':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordAnswer',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.primaryPhone':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.primaryPhone',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.personalContactDetailsMailingPreference':\r\n\t\t\t\t\t'=_input.documentDeliveryMethod'\r\n\t\t\t},\r\n\t\t\tconvertMapping = {\r\n\t\t\t\t'returnObject.getStarted.policyStartDate':\r\n\t\t\t\t\ttransformers.minimumTodaysDate,\r\n\t\t\t\t'returnObject.caravanDetails.whenDidYouBuyYear':\r\n\t\t\t\t\ttransformers.purchaseYearFromMonthYear,\r\n\t\t\t\t'returnObject.caravanDetails.whenDidYouBuyMonth':\r\n\t\t\t\t\ttransformers.purchaseMonthFromMonthYear,\r\n\t\t\t\t'returnObject.caravanDetails.financeWith':\r\n\t\t\t\t\ttransformers.convertToLabelValue\r\n\t\t\t};\r\n\r\n var transformedQuote = jsonMapper.convert(jsonMapper.transform(retrievedQuoteResponse, transformMapping), convertMapping);\r\n\r\n var returnObject = transformedQuote.returnObject;\r\n // set comprehensive preference to null if the coverType is third party\r\n console.info(retrievedQuoteResponse);\r\n // set primary phone number to mobile phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.cellPhone) {\r\n returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.cellPhone;\r\n }\r\n\r\n // set primary phone number to home phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.homePhone) {\r\n returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.homePhone;\r\n }\r\n\r\n // set primary phone number to work phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.workPhone) {\r\n returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.workPhone;\r\n } \r\n\r\n if ( returnObject.caravanInfo && returnObject.caravanInfo.vgiId ){\r\n returnObject.aboutYourCaravan.searchType = 'yearMakeModel' ;\r\n returnObject.aboutYourCaravan.vgiId = returnObject.caravanInfo.vgiId;\r\n // returnObject.aboutYourCaravan.vehicleKey = returnObject.caravanInfo.\r\n returnObject.aboutYourCaravan.description= 'returnObject.caravanInfo.';\r\n returnObject.aboutYourCaravan.modelYear= returnObject.caravanInfo.modelYear;\r\n returnObject.aboutYourCaravan.make= returnObject.caravanInfo.make;\r\n returnObject.aboutYourCaravan.model= returnObject.caravanInfo.model;\r\n returnObject.aboutYourCaravan.bodyStyle= returnObject.caravanInfo.bodyType;\r\n returnObject.aboutYourCaravan.ratingGrade= 'returnObject.caravanInfo.';\r\n returnObject.aboutYourCaravan.weight= returnObject.caravanInfo.weight;\r\n\r\n } else {\r\n if(returnObject.caravanInfo){\r\n returnObject.aboutYourCaravan.searchType = 'manually' ;\r\n returnObject.aboutYourCaravan.year= ''+returnObject.caravanInfo.modelYear;\r\n returnObject.aboutYourCaravan.make= returnObject.caravanInfo.make;\r\n returnObject.aboutYourCaravan.model= returnObject.caravanInfo.model;\r\n returnObject.aboutYourCaravan.bodyType= returnObject.caravanInfo.bodyType;\r\n returnObject.aboutYourCaravan.berths= parseInt(returnObject.caravanInfo.berths);\r\n returnObject.aboutYourCaravan.weight= parseInt(returnObject.caravanInfo.weight);\r\n returnObject.aboutYourCaravan.manualLength= parseInt(returnObject.caravanInfo.caravanLength);\r\n returnObject.aboutYourCaravan.manualLengthUnits= transformers.convertUnit(returnObject.caravanInfo.lengthUnits);\r\n returnObject.aboutYourCaravan.customBuilt= returnObject.caravanInfo.customBuilt;\r\n returnObject.aboutYourCaravan.numOfAxels= returnObject.caravanInfo.numberOfAxles;\r\n }\r\n\r\n }\r\n\r\n // region Sort drivers to put mainRider first in the list\r\n if(retrievedQuoteResponse.caravans && retrievedQuoteResponse.caravans.length && retrievedQuoteResponse.caravans[0].drivers) {\r\n var drivers = $filter('orderBy')(retrievedQuoteResponse.caravans[0].drivers, function(driver) {\r\n return driver.driverUsage == 'main' ? 0 : 1;\r\n });\r\n transformedQuote.returnObject.driver = {};\r\n transformedQuote.returnObject.driver.drivers = [];\r\n drivers.forEach(function(driver, index) {\r\n transformedQuote.returnObject.driver.drivers.push(transformDriver(driver));\r\n });\r\n \r\n //dd-1040-extend driver object to reflect data\r\n if(transformedQuote.returnObject.driver && transformedQuote.returnObject.driver.drivers[0]){\r\n var years = retrievedQuoteResponse.caravans[0].yearsContinuousInsurance == '4'? '3+' : parseInt(retrievedQuoteResponse.caravans[0].yearsContinuousInsurance);\r\n var claims = Object.extend(transformedQuote.returnObject.driver.drivers[0], {yearsContinuousInsurance: years,\r\n timeSinceLastClaim: retrievedQuoteResponse.caravans[0].timeSinceLastClaim});\r\n }\r\n }\r\n\r\n //add content items\r\n if(returnObject.aboutYourContents && returnObject.aboutYourContents.contentsItems){\r\n returnObject.aboutYourContents.contentsItems.forEach(function(item){\r\n var _label = transformers.convertSpecifiedCategory(item.category);\r\n var _category = {'label' : _label, 'value' : item.category };\r\n item.category = _category;\r\n });\r\n }\r\n\r\n if(retrievedQuoteResponse.caravans[0].caravanUsageType) {\r\n var usage = retrievedQuoteResponse.caravans[0].caravanUsageType;\r\n\t\t\tswitch (usage) {\r\n\t\t\t\tcase 'commercial':\r\n transformedQuote.returnObject.caravanDetails.commercialActivityType = retrievedQuoteResponse.caravans[0].businessUsageType;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n transformedQuote.returnObject.caravanDetails.businessActivityType = retrievedQuoteResponse.caravans[0].businessUsageType;\r\n\t\t\t\t\tbreak;\r\n\t\t\t} \r\n } \r\n\r\n // \"category\":{\"label\":\"Electrical Equipment\",\"value\":\"electrical_equipment\"}\r\n\r\n // convert discount layups\r\n // convertDiscountLayups: function(list) {\r\n // var rekeyedObject = {} ;\r\n\r\n // angular.forEach(list, function(value, index) {\r\n // rekeyedObject[value] = true ;\r\n // });\r\n\r\n // return rekeyedObject ;\r\n // }\r\n\r\n\r\n // set optional benefits\r\n // if(retrievedQuoteResponse.vehicles[0].coverageOptions.length) {\r\n // var coverageOptions = retrievedQuoteResponse.vehicles[0].coverageOptions;\r\n // coverageOptions.forEach(function(option, index) {\r\n // console.info(option);\r\n // })\r\n // }\r\n\r\n // set about your content section for items over $750\r\n\r\n // set contact policy holders\r\n // if(retrievedQuoteResponse.policyHolders && retrievedQuoteResponse.policyHolders.length) {\r\n // var policyHolders = retrievedQuoteResponse.policyHolders;\r\n // transformedQuote.returnObject.mainPolicyHolder = {};\r\n // policyHolders.forEach(function(holder, index) {\r\n // if(holder.mainHolder) {\r\n // transformedQuote.returnObject.mainPolicyHolder.mainPolicyHolder = true;\r\n // transformedQuote.returnObject.mainPolicyHolder = transformPolicyHolder(holder.contact);\r\n // transformedQuote.returnObject.mainPolicyHolder.policyHolders = [];\r\n // } else {\r\n // transformedQuote.returnObject.mainPolicyHolder.policyHolders.push(transformPolicyHolder(holder.contact));\r\n // }\r\n // });\r\n // }\r\n\r\n console.info('final transform quote', transformedQuote.returnObject);\r\n\r\n return transformedQuote.returnObject;\r\n }\r\n return {\r\n transform: transform\r\n }\r\n}\r\n","function CaravanStructureRequestTransformer(\r\n\tjsonMapper,\r\n\tutil,\r\n\tquoteOptions,\r\n\tstorage\r\n) {\r\n\tvar structureQuoteMapping = {\r\n\t\tperiodStartDate: '=_input.caravanForm.getStarted.policyStartDate',\r\n\t\tcaravans: [],\r\n\r\n\t\t'caravans.0': '=_input.caravanForm.caravanDetails',\r\n\r\n\t\t'caravans.0.caravanType':\r\n\t\t\t'=_input.caravanForm.aboutYourCaravan.vehicleType',\r\n\t\t'caravans.0.caravanInfo': '=_regoSearch',\r\n\t\t'caravans.0.garageAddress': '=_addressSearch',\r\n\r\n\t\t// caravanDetails\r\n\t\t'caravans.0.registrationNumber':\r\n\t\t\t'=_input.caravanForm.caravanDetails.regoNumber',\r\n\t\t'caravans.0.locationType':\r\n\t\t\t'=_input.caravanForm.caravanDetails.locationDescription',\r\n\t\t'caravans.0.securityType':\r\n\t\t\t'=_input.caravanForm.caravanDetails.security',\r\n\t\t'caravans.0.caravanUsageType':\r\n\t\t\t'=_input.caravanForm.caravanDetails.primaryUse',\r\n\t\t'caravans.0.existingDamageType':\r\n\t\t\t'=_input.caravanForm.caravanDetails.existingDamage',\r\n\t\t'caravans.0.purchaseMonthYear':\r\n\t\t\t'=_input.caravanForm.caravanDetails.whenDidYouBuyYear',\r\n\t\t'caravans.0.purchaseMonthYear':\r\n\t\t\t'=_input.caravanForm.caravanDetails.whenDidYouBuyMonth',\r\n\t\t'caravans.0.isCaravanRegistered':\r\n\t\t\t'=_input.caravanForm.caravanDetails.isCaravanRegistered',\r\n\t\t'caravans.0.isPermResidence':\r\n\t\t\t'=_input.caravanForm.caravanDetails.isPremanentResidence',\r\n\t\t'caravans.0.isCaravanOnNonRetractableJacks':\r\n\t\t\t'=_input.caravanForm.caravanDetails.nonRetractableJacksorPermanantFoundations',\r\n\t\t'caravans.0.isCaravanConnectedToPlumbing':\r\n\t\t\t'=_input.caravanForm.caravanDetails.permanentlyConnected',\r\n\t\t'caravans.0.chassisNumber':\r\n\t\t\t'=_input.caravanForm.caravanDetails.chassisNumber',\r\n\r\n\t\t'caravans.0.replacementCostValue':\r\n\t\t\t'=_input.caravanForm.sumInsured.annexeReplacementCost',\r\n\t\t'caravans.0.agreedAmountValue':\r\n\t\t\t'=_input.caravanForm.sumInsured.agreedValue',\r\n\r\n\t\t// aboutYourContents\r\n\t\t'caravans.0.agreedAmountValue':\r\n\t\t\t'=_input.caravanForm.aboutYourContents.agreedValue',\r\n\t\t'caravans.0.replacementCostValue':\r\n\t\t\t'=_input.caravanForm.aboutYourContents.annexeReplacementCost',\r\n\t\t'caravans.0.contentsCoverAmount':\r\n\t\t\t'=_input.caravanForm.aboutYourContents.generalContentsValue',\r\n\r\n\t\t'caravans.0.contentsCover':\r\n\t\t\t'=_input.caravanForm.aboutYourContents.insureContents',\r\n\t\t'caravans.0.excess.voluntaryVehicleExcess':\r\n\t\t\t'=_input.caravanForm.excess.voluntaryVehicleExcess',\r\n\r\n\t\t'caravans.0.yearsContinuousInsurance':\r\n\t\t\t'=_input.caravanForm.driver.yearsContinuousInsurance',\r\n\t\t'caravans.0.timeSinceLastClaim':\r\n\t\t\t'=_input.caravanForm.driver.timeSinceLastClaim',\r\n\r\n\t\tpolicyHolders: [],\r\n\t\t'policyHolders.0': {},\r\n\t\t'policyHolders.0.mainHolder':\r\n\t\t\t'=_input.caravanForm.mainPolicyHolder.mainPolicyHolder',\r\n\t\t'policyHolders.0.contact': '=_input.caravanForm.mainPolicyHolder',\r\n\t\t'policyHolders.0.contact.primaryAddress': '=_addressSearch',\r\n\r\n\t\tpolicyAddress: '=_addressSearch',\r\n\t\temail: '=_input.email',\r\n\t\tcampaignCode: '=_input.caravanForm.promotionalCode.promotionalCode',\r\n\t\tpostalAddress: '=_addressSearch-postal-address'\r\n\t};\r\n\r\n\tfunction updateCaravanInfo(transformedRequest, userInput) {\r\n\t\tvar aboutYourCaravan = userInput.caravanForm.aboutYourCaravan,\r\n\t\t\tsearchType = userInput.caravanForm.aboutYourCaravan.searchType,\r\n\t\t\tcaravanInfo = transformedRequest.caravans[0].caravanInfo || {};\r\n\r\n\t\tif (aboutYourCaravan) {\r\n\t\t\tif (searchType === 'manually') {\r\n\t\t\t\tcaravanInfo = {\r\n\t\t\t\t\tmodelYear: aboutYourCaravan.year,\r\n\t\t\t\t\tmake: aboutYourCaravan.make,\r\n\t\t\t\t\tmodel: aboutYourCaravan.model,\r\n\t\t\t\t\tbodyType: aboutYourCaravan.bodyType,\r\n\t\t\t\t\tberths: aboutYourCaravan.berths,\r\n\t\t\t\t\tweight: aboutYourCaravan.weight,\r\n\t\t\t\t\tcaravanLength: aboutYourCaravan.manualLength,\r\n\t\t\t\t\tlengthUnits: aboutYourCaravan.manualLengthUnits,\r\n\t\t\t\t\tcustomBuilt: aboutYourCaravan.customBuilt,\r\n\t\t\t\t\tnumberOfAxles: aboutYourCaravan.numOfAxels\r\n\t\t\t\t};\r\n\r\n\t\t\t\ttransformedRequest.caravans[0].caravanInfo = caravanInfo;\r\n\t\t\t} else if (searchType === 'yearMakeModel') {\r\n\t\t\t\tif (caravanInfo && caravanInfo.vgiId) {\r\n\t\t\t\t\t//if aviailable continue\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//set vgiId from retrive\r\n\t\t\t\t\tcaravanInfo = {\r\n\t\t\t\t\t\tvgiId: aboutYourCaravan.vgiId\r\n\t\t\t\t\t};\r\n\t\t\t\t\ttransformedRequest.caravans[0].caravanInfo = caravanInfo;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateContentsItems(transformedRequest, userInput) {\r\n\t\tvar aboutYourContents = userInput.caravanForm.aboutYourContents;\r\n\r\n\t\tif (\r\n\t\t\taboutYourContents &&\r\n\t\t\taboutYourContents.contentsItems &&\r\n\t\t\taboutYourContents.contentsItems.length > 0\r\n\t\t) {\r\n\t\t\tvar contents = aboutYourContents.contentsItems;\r\n\r\n\t\t\tvar specifiedItems = contents.map(function(item, i) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tcategory: item.category.value,\r\n\t\t\t\t\tdescription: item.description,\r\n\t\t\t\t\tvalue: item.value\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.caravans[0].specifiedContents = true;\r\n\t\t\ttransformedRequest.caravans[0].specifiedItems = specifiedItems;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateTotalSpecifiedContentsValue(transformedRequest, userInput) {\r\n\t\tvar aboutYourContents = userInput.caravanForm.aboutYourContents;\r\n\r\n\t\tif (\r\n\t\t\taboutYourContents &&\r\n\t\t\taboutYourContents.contentsItems &&\r\n\t\t\taboutYourContents.contentsItems.length > 0\r\n\t\t) {\r\n\t\t\tvar contents = aboutYourContents.contentsItems,\r\n\t\t\t\ttotalSpecifiedItemsValue = 0;\r\n\r\n\t\t\tfor (var index in contents) {\r\n\t\t\t\ttotalSpecifiedItemsValue += contents[index].value;\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.caravans[0].totalSpecifiedItemsValue = totalSpecifiedItemsValue;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateTotalContentsSpecifiedValue(transformedRequest, userInput) {\r\n\t\tvar aboutYourContents = userInput.caravanForm.aboutYourContents;\r\n\r\n\t\tif (aboutYourContents && aboutYourContents.generalContentsValue) {\r\n\t\t\tvar contentsCoverAmount =\r\n\t\t\t\t\tuserInput.caravanForm.aboutYourContents\r\n\t\t\t\t\t\t.generalContentsValue,\r\n\t\t\t\ttotalSpecifiedItemsValue =\r\n\t\t\t\t\ttransformedRequest.caravans[0].totalSpecifiedItemsValue ||\r\n\t\t\t\t\t0;\r\n\r\n\t\t\tif (contentsCoverAmount && totalSpecifiedItemsValue) {\r\n\t\t\t\ttransformedRequest.caravans[0].totalContentsAndSpecifiedValue =\r\n\t\t\t\t\tcontentsCoverAmount + totalSpecifiedItemsValue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (transformedRequest.caravans[0].contentsCover === false) {\r\n\t\t\ttransformedRequest.caravans[0].contentsCoverAmount = '';\r\n\t\t}\r\n\r\n\t\tif (aboutYourContents.insureContents === undefined) {\r\n\t\t\ttransformedRequest.caravans[0].contentsCover = false;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleDetails(transformedRequest, userInput) {\r\n\t\ttransformedRequest.caravans[0] = util.deepClone(\r\n\t\t\ttransformedRequest.caravans[0]\r\n\t\t);\r\n\r\n\t\tif (userInput.caravanForm.insuredExcessValue) {\r\n\t\t\ttransformedRequest.caravans[0].sumInsuredType =\r\n\t\t\t\tuserInput.caravanForm.insuredExcessValue.comprehensivePref;\r\n\t\t}\r\n\t\t//userInput.caravanForm.insuredExcessValue\r\n\t\tif (userInput.caravanForm.caravanDetails) {\r\n\t\t\tif (userInput.caravanForm.caravanDetails.whenDidYouBuyYear) {\r\n\t\t\t\ttransformedRequest.caravans[0].purchaseMonthYear =\r\n\t\t\t\t\tuserInput.caravanForm.caravanDetails.whenDidYouBuyYear +\r\n\t\t\t\t\t'-' +\r\n\t\t\t\t\tuserInput.caravanForm.caravanDetails.whenDidYouBuyMonth;\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.caravans[0].businessUsageType =\r\n\t\t\t\tuserInput.caravanForm.caravanDetails.businessActivityType ||\r\n\t\t\t\tuserInput.caravanForm.caravanDetails.commercialActivityType ||\r\n\t\t\t\tundefined;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyHolders(transformedRequest, userInput) {\r\n\t\tvar caravanForm = userInput.caravanForm,\r\n\t\t\tmainPolicyHolder = caravanForm.mainPolicyHolder,\r\n\t\t\tdrivers = transformedRequest.caravans[0].drivers;\r\n\r\n\t\tif (mainPolicyHolder) {\r\n\t\t\tvar policyHolders = [];\r\n\r\n\t\t\tmainPolicyHolder.policyContact =\r\n\t\t\t\tcaravanForm.mainPolicyHolderContact;\r\n\r\n\t\t\tif (mainPolicyHolder.isMainDriverMainPolicyHolder) {\r\n\t\t\t\tvar driver = util.deepClone(\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t);\r\n\t\t\t\tObject.extend(mainPolicyHolder, driver.person);\r\n\t\t\t}\r\n\r\n\t\t\tpolicyHolders.push(mainPolicyHolder);\r\n\r\n\t\t\tif (\r\n\t\t\t\tcaravanForm.additionalPolicyHolders &&\r\n\t\t\t\tcaravanForm.additionalPolicyHolders.policyHolders\r\n\t\t\t) {\r\n\t\t\t\tpolicyHolders = policyHolders.concat(\r\n\t\t\t\t\tcaravanForm.additionalPolicyHolders.policyHolders\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tpolicyHolders.forEach(function(policyHolder, index) {\r\n\t\t\t\tvar contact = util.deepClone(policyHolder);\r\n\t\t\t\tif (!transformedRequest.policyHolders[index])\r\n\t\t\t\t\ttransformedRequest.policyHolders[index] = {};\r\n\r\n\t\t\t\tvar transformedContact =\r\n\t\t\t\t\ttransformedRequest.policyHolders[index];\r\n\t\t\t\tif (!contact.contactType)\r\n\t\t\t\t\tcontact.contactType =\r\n\t\t\t\t\t\t'person'; /* TODO : check to make sure this condition is always safe to use */\r\n\r\n\t\t\t\tcontact.prefix = contact.title;\r\n\t\t\t\tcontact.hasClaim = contact.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tcontact.hasInfringement =\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tcontact.hasLostLicence = contact.fourYears_licenceRSDC;\r\n\t\t\t\tcontact.hasConviction =\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences;\r\n\r\n\t\t\t\tif (contact.policyContact) {\r\n\t\t\t\t\tObject.extend(contact, contact.policyContact);\r\n\t\t\t\t\tif (contact.primaryPhone == 'mobile')\r\n\t\t\t\t\t\tcontact.cellPhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\telse if (contact.primaryPhone == 'home')\r\n\t\t\t\t\t\tcontact.homePhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\telse if (contact.primaryPhone == 'work')\r\n\t\t\t\t\t\tcontact.workPhone = contact.primaryPhoneNumber;\r\n\r\n\t\t\t\t\tdelete contact.policyContact;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!contact.primaryAddress)\r\n\t\t\t\t\tcontact.primaryAddress = util.clone(\r\n\t\t\t\t\t\tmainPolicyHolder.primaryAddress\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\tcontact.hasClaim = contact.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tcontact.hasInfringement =\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tcontact.hasLostLicence = contact.fourYears_licenceRSDC;\r\n\t\t\t\tcontact.hasConviction =\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tcontact.zeroDemerits = contact.NSWDemeritPoints;\r\n\r\n\t\t\t\tcontact.drivingHistory = [];\r\n\r\n\t\t\t\t// 4 years Charged or Convicted Offences\r\n\t\t\t\tif (\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffencesDetails.length <\r\n\t\t\t\t\t\t1\r\n\t\t\t\t) {\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (contact.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 4 years Licence RSDC\r\n\t\t\t\tif (\r\n\t\t\t\t\tcontact.fourYears_licenceRSDC &&\r\n\t\t\t\t\tcontact.fourYears_licenceRSDCDetails.length < 1\r\n\t\t\t\t) {\r\n\t\t\t\t\tcontact.fourYears_licenceRSDC = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (contact.fourYears_licenceRSDC) {\r\n\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\tcontact.fourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 4 years accidents and claims\r\n\t\t\t\tif (\r\n\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaimsDetails.length < 1\r\n\t\t\t\t) {\r\n\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (contact.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 10 years charged or convicted\r\n\t\t\t\tif (\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffencesDetails.length <\r\n\t\t\t\t\t\t1\r\n\t\t\t\t) {\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (contact.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Concat time!\r\n\t\t\t\tcontact.drivingHistory.forEach(function(dh) {\r\n\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t};\r\n\t\t\t\t\tif (dh.description) {\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (dh.accident) {\r\n\t\t\t\t\t\t\tdh.description = dh.accident;\r\n\t\t\t\t\t\t} else if (dh.incident) {\r\n\t\t\t\t\t\t\tdh.description = dh.incident;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (!transformedContact.contact)\r\n\t\t\t\t\ttransformedContact.contact = {};\r\n\r\n\t\t\t\tObject.extend(transformedContact.contact, contact);\r\n\t\t\t});\r\n\t\t} else if (\r\n\t\t\ttransformedRequest.caravans[0].drivers[0] &&\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driver &&\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person\r\n\t\t) {\r\n\t\t\tvar driver = transformedRequest.caravans[0].drivers[0].driver;\r\n\t\t\tvar contact = transformedRequest.policyHolders[0].contact;\r\n\r\n\t\t\tObject.extend(contact, driver.person);\r\n\t\t\tcontact.contactType =\r\n\t\t\t\t'person'; /* TODO : check to make sure this condition is always safe to use */\r\n\t\t\tcontact.hasClaim = driver.hasClaim;\r\n\t\t\tcontact.hasConviction = driver.hasConviction;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.policyHolders[0].mainHolder = true;\r\n\r\n\t\tif (userInput.email) {\r\n\t\t\t/** required for saving/retrieving the policy */\r\n\t\t\tif (\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t} else if (\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.email;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tangular.isDefined(\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.email;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\tif (transformedRequest.policyHolders[0].contact.emailAddress1) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person\r\n\t\t\t\t\t\t.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.caravanForm &&\r\n\t\t\tuserInput.caravanForm.mainPolicyHolderContact &&\r\n\t\t\tuserInput.caravanForm.mainPolicyHolderContact\r\n\t\t\t\t.personalContactDetailsMailingPreference\r\n\t\t) {\r\n\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.personalContactDetailsMailingPreference;\r\n\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t.personalContactDetailsMailingPreference;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateDrivers(transformedRequest, userInput) {\r\n\t\ttransformedRequest.caravans[0].drivers = [];\r\n\t\tif (\r\n\t\t\tuserInput.caravanForm.driver &&\r\n\t\t\tuserInput.caravanForm.driver.drivers\r\n\t\t) {\r\n\t\t\tuserInput.caravanForm.driver.drivers.forEach(function(driver) {\r\n\t\t\t\tdriver.person.contactType = 'person';\r\n\t\t\t\tdriver.person.prefix = driver.person.title;\r\n\t\t\t\tdriver.person.primaryAddress = transformedRequest.policyAddress;\r\n\t\t\t\tdriver.person.primaryAddress.addressType = 'residential';\r\n\r\n\t\t\t\tdriver.hasClaim = driver.person.hasClaim =\r\n\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tdriver.hasInfringement =\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tdriver.hasLostLicence = driver.fourYears_licenceRSDC;\r\n\t\t\t\tdriver.hasConviction = driver.person.hasConviction =\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tdriver.zeroDemerits = driver.NSWDemeritPoints;\r\n\t\t\t\t//driver.yearsLicenced = driver.yearsHeld ;\r\n\r\n\t\t\t\tswitch (driver.yearsHeld) {\r\n\t\t\t\t\tcase 'lessThan_1':\r\n\t\t\t\t\t\tdriver.yearsLicenced = '7';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'greaterThan_5':\r\n\t\t\t\t\t\tdriver.yearsLicenced = '6';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdriver.yearsLicenced = driver.yearsHeld;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t(!driver.fourYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\t(!driver.fourYears_vehicleAccidentsClaimsDetails ||\r\n\t\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaimsDetails.length <\r\n\t\t\t\t\t\t\t1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_licenceRSDC &&\r\n\t\t\t\t\t(!driver.fourYears_licenceRSDCDetails.length ||\r\n\t\t\t\t\t\tdriver.fourYears_licenceRSDCDetails.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_licenceRSDC = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t(!driver.tenYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdriver.driverHistory = [];\r\n\r\n\t\t\t\tif (driver.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.fourYears_licenceRSDC) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdriver.driverHistory.forEach(function(dh) {\r\n\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t};\r\n\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvar driverObj = {\r\n\t\t\t\t\tdriver: driver\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// var toDelete = isItemMarkedForDelete('driver', driver) ;\r\n\t\t\t\t// if (toDelete) driverObj.markedForDelete = true ;\r\n\r\n\t\t\t\ttransformedRequest.caravans[0].drivers.push(driverObj);\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driverUsage = 'main';\r\n\t\t} else {\r\n\t\t\ttransformedRequest.caravans[0].drivers = [\r\n\t\t\t\t{\r\n\t\t\t\t\tdriverUsage: 'main'\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleSubType(transformedRequest, userInput) {\r\n\t\tvar caravanDetails = userInput.caravanForm.caravanDetails,\r\n\t\t\tcaravanType = userInput.caravanForm.aboutYourCaravan.vehicleType,\r\n\t\t\tvehicleSubType = null;\r\n\r\n\t\tif (caravanDetails && caravanDetails.vehicleSubType) {\r\n\t\t\tvehicleSubType = caravanDetails.vehicleSubType;\r\n\t\t} else {\r\n\t\t\tswitch (caravanType) {\r\n\t\t\t\tcase 'caravan':\r\n\t\t\t\t\tvehicleSubType = 'standardcaravan';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'campertrailer':\r\n\t\t\t\t\tvehicleSubType = 'standardcampertrailer';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'goodscarryingtrailer':\r\n\t\t\t\t\tvehicleSubType = 'boxtrailer';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttransformedRequest.caravans[0].caravanSubType = vehicleSubType;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateTotalCaravanValue(transformedRequest, userInput) {\r\n\t\tvar sumInsured = userInput.caravanForm.sumInsured;\r\n\r\n\t\tif (\r\n\t\t\tsumInsured &&\r\n\t\t\tsumInsured.annexeReplacementCost &&\r\n\t\t\tsumInsured.agreedValue\r\n\t\t) {\r\n\t\t\ttransformedRequest.caravans[0].totalCaravanValue =\r\n\t\t\t\tsumInsured.agreedValue + sumInsured.annexeReplacementCost;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleInsuranceTypeAndAmount(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tvar insuredExcessValue = userInput.caravanForm.insuredExcessValue;\r\n\r\n\t\tif (insuredExcessValue) {\r\n\t\t\ttransformedRequest.caravans[0].sumInsuredType =\r\n\t\t\t\tinsuredExcessValue.comprehensivePref;\r\n\t\t\tif (insuredExcessValue.comprehensivePref == 'agreed') {\r\n\t\t\t\ttransformedRequest.caravans[0].sumInsuredAmount =\r\n\t\t\t\t\tinsuredExcessValue.agreedValue;\r\n\t\t\t} else if (quoteOptions.getSelectedQuoteResult()) {\r\n\t\t\t\ttransformedRequest.caravans[0].sumInsuredAmount = quoteOptions\r\n\t\t\t\t\t.getSelectedQuoteResult()\r\n\t\t\t\t\t.getAnnual().vehicleValue.lower;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateDiscountLayup(transformedRequest, userInput) {\r\n\t\tvar discountOptions = userInput.caravanForm.discountOptions;\r\n\r\n\t\tif (discountOptions && discountOptions.discountLayup) {\r\n\t\t\tvar coverageOptions =\r\n\t\t\t\t\ttransformedRequest.caravans[0].coverageOptions || [],\r\n\t\t\t\tdiscountLayup = {\r\n\t\t\t\t\tname: 'QPCLayupCover',\r\n\t\t\t\t\tselected: discountOptions.discountLayup,\r\n\t\t\t\t\trequired: false\r\n\t\t\t\t};\r\n\r\n\t\t\tif (\r\n\t\t\t\t!!discountOptions.discountLayup &&\r\n\t\t\t\t!!discountOptions.discountLayupMonths\r\n\t\t\t) {\r\n\t\t\t\tdiscountLayup.activeLayupMonths = [];\r\n\r\n\t\t\t\tvar layupMonths = Object.keys(\r\n\t\t\t\t\tdiscountOptions.discountLayupMonths\r\n\t\t\t\t);\r\n\t\t\t\tlayupMonths.forEach(function(monthItem) {\r\n\t\t\t\t\tif (discountOptions.discountLayupMonths[monthItem]) {\r\n\t\t\t\t\t\tdiscountLayup.activeLayupMonths.push(monthItem);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tcoverageOptions.push(discountLayup);\r\n\r\n\t\t\ttransformedRequest.caravans[0].coverageOptions = coverageOptions;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleInsuranceOptionalBenefits(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tvar optionalBenefits = userInput.caravanForm.optionalBenefits;\r\n\r\n\t\tif (optionalBenefits) {\r\n\t\t\tvar coverageOptions =\r\n\t\t\t\ttransformedRequest.caravans[0].coverageOptions || [];\r\n\r\n\t\t\tfor (var key in optionalBenefits) {\r\n\t\t\t\t//dd-6512-Do not include \"expiryDate\" option\r\n\t\t\t\tif (key.indexOf('QPC') > -1) {\r\n\t\t\t\t\tcoverageOptions.push({\r\n\t\t\t\t\t\tname: key,\r\n\t\t\t\t\t\tselected: optionalBenefits[key],\r\n\t\t\t\t\t\trequired: false\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttransformedRequest.caravans[0].coverageOptions = coverageOptions;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateOnSiteDiscount(transformedRequest, userInput) {\r\n\t\tvar discountOptions = userInput.caravanForm.discountOptions;\r\n\r\n\t\tif (discountOptions) {\r\n\t\t\tvar coverageOptions =\r\n\t\t\t\t\ttransformedRequest.caravans[0].coverageOptions || [],\r\n\t\t\t\tonSiteDiscount = discountOptions.onSiteDiscount;\r\n\r\n\t\t\tif (onSiteDiscount === true) {\r\n\t\t\t\tcoverageOptions.push({\r\n\t\t\t\t\tname: 'QPCOnSite',\r\n\t\t\t\t\tselected: true,\r\n\t\t\t\t\trequired: true\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// coverageOptions.push({\r\n\t\t\t\t// \tname:'QPCLayupCover',\r\n\t\t\t\t// \tselected:false\r\n\t\t\t\t// });\r\n\t\t\t}\r\n\r\n\t\t\tif (onSiteDiscount === false) {\r\n\t\t\t\tcoverageOptions.push({\r\n\t\t\t\t\tname: 'QPCOnSite',\r\n\t\t\t\t\tselected: false,\r\n\t\t\t\t\trequired: true\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// coverageOptions.push({\r\n\t\t\t\t// \tname:'QPCLayupCover',\r\n\t\t\t\t// \tselected:false\r\n\t\t\t\t// });\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.caravans[0].coverageOptions = coverageOptions;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateFinanceType(transformedRequest, userInput) {\r\n\t\tvar caravanDetails = userInput.caravanForm.caravanDetails,\r\n\t\t\tfinance = caravanDetails ? caravanDetails.finance : 'none';\r\n\r\n\t\tif (caravanDetails) {\r\n\t\t\tif (caravanDetails.financeWith) {\r\n\t\t\t\tfinanceWith = caravanDetails.financeWith;\r\n\t\t\t} else {\r\n\t\t\t\tfinanceWith = null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfinanceWith = null;\r\n\t\t}\r\n\r\n\t\tif (finance) {\r\n\t\t\ttransformedRequest.caravans[0].financeType = finance;\r\n\r\n\t\t\tif (\r\n\t\t\t\tfinanceWith &&\r\n\t\t\t\tfinanceWith.hasOwnProperty('label') &&\r\n\t\t\t\tfinanceWith.hasOwnProperty('value')\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.caravans[0].financeCompany = {};\r\n\r\n\t\t\t\ttransformedRequest.caravans[0].financeCompany.name =\r\n\t\t\t\t\tfinanceWith.label;\r\n\t\t\t\ttransformedRequest.caravans[0].financeCompany.publicID =\r\n\t\t\t\t\tfinanceWith.value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// function isItemMarkedForDelete(typeName, item) {\r\n\t// \tvar toRemove = aggregatedRemoveService.getList();\r\n\t// \tvar itemsToRemove = toRemove[typeName] || [];\r\n\t// \tvar removeItem = false ;\r\n\t// \titemsToRemove.some(function(itemToRemove) {\r\n\t// \t\tif ( itemToRemove._aggregator.id == item._aggregator.id){\r\n\t// \t\t\tremoveItem = true;\r\n\t// \t\t\treturn;\r\n\t// \t\t}\r\n\t// \t});\r\n\t// \treturn removeItem;\r\n\t// }\r\n\r\n\tfunction updateAgreedValue(transformedRequest, userInput) {\r\n\t\tvar sumInsured = userInput.caravanForm.sumInsured;\r\n\r\n\t\tif (sumInsured && sumInsured.agreedValue) {\r\n\t\t\ttransformedRequest.caravans[0].agreedAmountValue =\r\n\t\t\t\tsumInsured.agreedValue;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAnnexeValue(transformedRequest, userInput) {\r\n\t\tvar sumInsured = userInput.caravanForm.sumInsured;\r\n\r\n\t\tif (sumInsured && sumInsured.annexeReplacementCost) {\r\n\t\t\ttransformedRequest.caravans[0].replacementCostValue =\r\n\t\t\t\tsumInsured.annexeReplacementCost;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePurchasePrice(transformedRequest, userInput) {\r\n\t\tvar caravanDetails = userInput.caravanForm.caravanDetails,\r\n\t\t\taboutYourContents = userInput.caravanForm.aboutYourContents,\r\n\t\t\tpurchasePrice = 100;\r\n\r\n\t\tif (caravanDetails && caravanDetails.purchasePrice) {\r\n\t\t\tpurchasePrice = caravanDetails.purchasePrice;\r\n\t\t} else if (aboutYourContents && aboutYourContents.agreedValue) {\r\n\t\t\t// Use the agreed value if they're coming from rapid estimate\r\n\t\t\tpurchasePrice = aboutYourContents.agreedValue;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.caravans[0].purchasePrice = purchasePrice;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//updates the email\r\n\tfunction updateEmail(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tuserInput.caravanForm &&\r\n\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t) {\r\n\t\t\ttransformedRequest.email =\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t} else {\r\n\t\t\t//set email from maincontact if not available in tellUsABitMore\r\n\t\t\tif (\r\n\t\t\t\tuserInput.caravanForm &&\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// send the campaign code to GW\r\n\t\tif (\r\n\t\t\tuserInput.caravanForm &&\r\n\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\tuserInput.caravanForm.tellUsABitMore.promotionalCode\r\n\t\t) {\r\n\t\t\ttransformedRequest.campaignCode =\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore.promotionalCode;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//dd-1040 - function to update hasCurrentInsurance field when yearContinuous Insurance > 0\r\n\tfunction updateCurrentInsurance(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driver &&\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driverUsage == 'main'\r\n\t\t) {\r\n\t\t\tif (\r\n\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t\t.yearsContinuousInsurance != '0'\r\n\t\t\t) {\r\n\t\t\t\tvar claims = Object.extend(transformedRequest.caravans[0], {\r\n\t\t\t\t\tyearsContinuousInsurance:\r\n\t\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t\t\t\t.yearsContinuousInsurance,\r\n\t\t\t\t\ttimeSinceLastClaim:\r\n\t\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t\t\t\t.timeSinceLastClaim,\r\n\t\t\t\t\thasCurrentInsurance: true\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateStampDutyEligibility(transformedRequest, userInput) {\r\n\t\tvar stampDutyEligible = storage.getItem('stamp-duty');\r\n\t\tif (userInput.caravanForm.stampDutyExemption && stampDutyEligible) {\r\n\t\t\ttransformedRequest.caravans[0].isSmallBusiness =\r\n\t\t\t\tuserInput.caravanForm.stampDutyExemption.isSmallBusiness;\r\n\t\t} else {\r\n\t\t\tdelete transformedRequest.caravans[0].isSmallBusiness;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyAddress(transformedRequest, userInput) {\r\n\t\tvar postalAddress = storage.getItem('policy-address');\r\n\r\n\t\tif (angular.isDefined(userInput.caravanForm.mainPolicyHolderContact)) {\r\n\t\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t} else {\r\n\t\t\t\tif (\r\n\t\t\t\t\tObject.keys(postalAddress).length > 0 &&\r\n\t\t\t\t\t!userInput.caravanForm.mainPolicyHolderContact.postalOption\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t}\r\n\t\t}\r\n\t\tdelete transformedRequest.postalAddress;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(userInput) {\r\n\t\tvar transformedRequest = jsonMapper.transform(\r\n\t\t\tuserInput,\r\n\t\t\tstructureQuoteMapping\r\n\t\t);\r\n\r\n\t\t// Caravan\r\n\t\ttransformedRequest = updateVehicleDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleSubType(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateCaravanInfo(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateFinanceType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateAgreedValue(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateAnnexeValue(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePurchasePrice(transformedRequest, userInput);\r\n\r\n\t\t// Contents\r\n\t\ttransformedRequest = updateContentsItems(transformedRequest, userInput);\r\n\r\n\t\t// Main driver/insured\r\n\t\ttransformedRequest = updateStampDutyEligibility(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateDrivers(transformedRequest, userInput);\r\n\r\n\t\t// Contact\r\n\t\ttransformedRequest = updatePolicyHolders(transformedRequest, userInput);\r\n\r\n\t\t// Quote\r\n\t\ttransformedRequest = updateTotalCaravanValue(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateTotalSpecifiedContentsValue(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateTotalContentsSpecifiedValue(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateDiscountLayup(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateOnSiteDiscount(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleInsuranceOptionalBenefits(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateEmail(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateCurrentInsurance(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updatePolicyAddress(transformedRequest, userInput);\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transposeMonth(monthName) {\r\n\t\tvar months = {\r\n\t\t\tJanuary: '01',\r\n\t\t\tFebruary: '02',\r\n\t\t\tMarch: '03',\r\n\t\t\tApril: '04',\r\n\t\t\tMay: '05',\r\n\t\t\tJune: '06',\r\n\t\t\tJuly: '07',\r\n\t\t\tAugust: '08',\r\n\t\t\tSeptember: '09',\r\n\t\t\tOctober: '10',\r\n\t\t\tNovember: '11',\r\n\t\t\tDecember: '12'\r\n\t\t};\r\n\r\n\t\treturn months[monthName];\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n","function CaravanTriggerGoalTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(userInput) {\r\n\t\tvar policyHolder = userInput.policyHolders[0];\r\n\t\tvar address = userInput.policyAddress;\r\n\t\t\r\n\t\tvar request = {\r\n\t\t\tEmail: policyHolder.contact.emailAddress1,\r\n\t\t\tFirstName: policyHolder.contact.firstName,\r\n\t\t\tLastName: policyHolder.contact.lastName,\r\n\t\t\tAddressLine: address.addressLine1,\r\n\t\t\tCity: address.city,\r\n\t\t\tState: address.state,\r\n\t\t\tPostCode: address.postalCode,\r\n\t\t\tCountryCode: \"Australia\",\r\n\t\t\tProduct: \"Caravan\",\r\n\t\t\tUserAgent: \"SPA-Caravan\"\r\n\t\t};\r\n\t\treturn request;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n","\"use strict\";\r\n\r\nfunction GtmService($window, campaignService) {\r\n\tvar dataLayer = $window.dataLayer;\r\n\r\n\tfunction addStandardTrackingToDataLayer(obj) {\r\n\t\tif (dataLayer) {\r\n\t\t\tif (dataLayer.length > 0) {\r\n\t\t\t\tvar dataLayerLastItem = dataLayer[dataLayer.length - 1];\r\n\t\t\t\tvar isMatched = (obj.event == dataLayerLastItem.event && \r\n\t\t\t\t\tobj.eventAction == dataLayerLastItem.eventAction && \r\n\t\t\t\t\tobj.eventCategory == dataLayerLastItem.eventCategory && \r\n\t\t\t\t\tobj.eventLabel == dataLayerLastItem.eventLabel && \r\n\t\t\t\t\tobj.nonInteraction == dataLayerLastItem.nonInteraction);\r\n\r\n\t\t\t\tif (!isMatched) {\r\n\t\t\t\t\tdataLayer.push(obj);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataLayer.push(obj);\r\n\t\t\t}\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tfunction trackTransactionCompleted(page, policyDetails, quoteModel, paymentRef, receiptNumber, paymentType) {\r\n\t\tvar selectedQuote = quoteModel.selectedQuoteForPayment,\r\n\t\t\toffering = quoteModel.offering,\r\n\t\t\tcoverType = selectedQuote ? selectedQuote.coverType : null,\r\n\t\t\tcombinedCoverType = getCombinedCoverType(coverType, offering),\r\n\t\t\tpaymentPlan = selectedQuote ? selectedQuote.paymentPlan : null,\r\n\t\t\tactiveCampaign = campaignService.getCampaign(),\r\n\t\t\tcampaignId = activeCampaign ? activeCampaign.sc_camp : null;\r\n\r\n\t\tvar trackingData = {\r\n\t\t\tevent: \"virtualPageTransaction\",\r\n\t\t\tvirtualPageUrl: page.url,\r\n\t\t\tvirtualPageTitle: page.name,\r\n\t\t\tproductCode: quoteModel.productCode,\r\n\t\t\ttransactionId: policyDetails.policyNumber,\r\n\t\t\ttransactionAffiliation: quoteModel.gtmTransactionAffiliation,\r\n\t\t\ttransactionTotal: selectedQuote ? selectedQuote.totalPremium : null,\r\n\t\t\ttotalFSL: selectedQuote ? selectedQuote.totalFSL : null,\r\n\t\t\ttotalGST: selectedQuote ? selectedQuote.totalGST : null,\r\n\t\t\ttotalStampDuty: selectedQuote ? selectedQuote.totalStampDuty : null,\r\n\t\t\tdata: {\r\n\t\t\t\tpaymentReference: paymentRef,\r\n\t\t\t\tpolicyId: policyDetails.policyNumber,\r\n\t\t\t\treceiptNumber: receiptNumber,\r\n\t\t\t\tpaymentType: paymentType,\r\n\t\t\t},\r\n\t\t\ttransactionProducts: [\r\n\t\t\t\t{\r\n\t\t\t\t\tsku: quoteModel.productCode,\r\n\t\t\t\t\tname: quoteModel.productCode,\r\n\t\t\t\t\tcategory: combinedCoverType,\r\n\t\t\t\t\tcoupon: quoteModel.campaignCode,\r\n\t\t\t\t\tpaymentFrequency: paymentPlan\r\n\t\t\t\t\t\t? paymentPlan.paymentFrequency\r\n\t\t\t\t\t\t: null,\r\n\t\t\t\t\tprice: selectedQuote\r\n\t\t\t\t\t\t? selectedQuote.premiumAfterDiscount\r\n\t\t\t\t\t\t: null,\r\n\t\t\t\t\tquantity: 1\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t};\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction trackTransaction(page, policyDetails, quoteModel) {\r\n\t\tvar selectedQuote = quoteModel.selectedQuoteForPayment,\r\n\t\t\toffering = quoteModel.offering,\r\n\t\t\tcoverType = selectedQuote ? selectedQuote.coverType : null,\r\n\t\t\tcombinedCoverType = getCombinedCoverType(coverType, offering),\r\n\t\t\tpaymentPlan = selectedQuote ? selectedQuote.paymentPlan : null,\r\n\t\t\tactiveCampaign = campaignService.getCampaign(),\r\n\t\t\tcampaignId = activeCampaign ? activeCampaign.sc_camp : null;\r\n\r\n\t\tvar trackingData = {\r\n\t\t\tevent: \"virtualPageTransaction\",\r\n\t\t\tvirtualPageUrl: page.url,\r\n\t\t\tvirtualPageTitle: page.name,\r\n\t\t\tproductCode: quoteModel.productCode,\r\n\t\t\ttransactionId: policyDetails.policyNumber,\r\n\t\t\ttransactionAffiliation: quoteModel.gtmTransactionAffiliation,\r\n\t\t\ttransactionTotal: selectedQuote ? selectedQuote.totalPremium : null,\r\n\t\t\ttotalFSL: selectedQuote ? selectedQuote.totalFSL : null,\r\n\t\t\ttotalGST: selectedQuote ? selectedQuote.totalGST : null,\r\n\t\t\ttotalStampDuty: selectedQuote ? selectedQuote.totalStampDuty : null,\r\n\t\t\ttransactionProducts: [\r\n\t\t\t\t{\r\n\t\t\t\t\tsku: quoteModel.productCode,\r\n\t\t\t\t\tname: quoteModel.productCode,\r\n\t\t\t\t\tcategory: combinedCoverType,\r\n\t\t\t\t\tcoupon: quoteModel.campaignCode,\r\n\t\t\t\t\tpaymentFrequency: paymentPlan\r\n\t\t\t\t\t\t? paymentPlan.paymentFrequency\r\n\t\t\t\t\t\t: null,\r\n\t\t\t\t\tprice: selectedQuote\r\n\t\t\t\t\t\t? selectedQuote.premiumAfterDiscount\r\n\t\t\t\t\t\t: null,\r\n\t\t\t\t\tquantity: 1\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t};\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction getCombinedCoverType(coverType, offering) {\r\n\t\tvar combinedCoverType = null;\r\n\t\tif (coverType) {\r\n\t\t\tcombinedCoverType = coverType;\r\n\t\t\tif (offering) {\r\n\t\t\t\tcombinedCoverType += \"_\" + offering;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn combinedCoverType;\r\n\t}\r\n\r\n\tfunction trackEvent(eventName, evt) {\r\n\t\tvar trackingData = {};\r\n\r\n\t\tif (evt === \"validationError\") {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tvalidationError: eventName\r\n\t\t\t};\r\n\t\t} else if (evt === \"paymentError\") {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tpaymentError: eventName\r\n\t\t\t};\r\n\t\t} else if (evt === \"formValidationError\") {\r\n\t\t\ttrackingData = eventName;\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tevent: eventName\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\t/////gdd-8403\r\n\tfunction getSha256(dataString) {\r\n\t\tif (!dataString) { return null; }\r\n\t\treturn sha256(dataString);\r\n\t}\r\n\r\n\tfunction streetTypeAbbreviation(addressLine) {\t\t\r\n\t\tif (!addressLine) { return null; }\r\n\t\treturn addressLine.trim().toLowerCase()\r\n\t\t\t\t.replace(' street', 'st').replace(' road', 'rd')\r\n\t\t\t\t.replace(' alley', 'ally').replace(' arcade', 'arc')\r\n\t\t\t\t.replace(' avenue', 'ave').replace(' boulevard', 'bvd')\r\n\t\t\t\t.replace(' bypass', 'bypa').replace(' circuit', 'cct')\r\n\t\t\t\t.replace(' close', 'cl').replace(' corner', 'crn')\r\n\t\t\t\t.replace(' court', 'ct').replace(' crescent', 'cres')\r\n\t\t\t\t.replace(' cul-de-sac', 'cds').replace(' drive', 'dr')\r\n\t\t\t\t.replace(' esplanade', 'esp').replace(' green', 'grn')\r\n\t\t\t\t.replace(' grove', 'gr').replace(' highway', 'hwy')\r\n\t\t\t\t.replace(' junction', 'jnc').replace(' parade', 'pde')\r\n\t\t\t\t.replace(' place', 'pl').replace(' ridge', 'rdge')\r\n\t\t\t\t.replace(' terrace', 'tce');\r\n\t}\r\n\r\n\tfunction nomalizeAddress(quoteModel) {\r\n\t\tif (!quoteModel || !quoteModel.address) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tvar addr = quoteModel.address;\r\n\t\tvar address = streetTypeAbbreviation(addr.addressLine1)\r\n\t\t\t\t\t\t + addr.city + addr.state + addr.postalCode;\t\t\r\n\t\treturn address.replace(/\\s|,|:|-|AU_|_||\\(|\\)|'|\\/|\\./gi, '')\r\n\t\t\t\t\t .trim().toLowerCase();\r\n\t}\r\n\r\n\tfunction harshAddress(quoteModel) {\r\n\t\treturn getSha256(nomalizeAddress(quoteModel));\r\n\t}\r\n\r\n\tfunction harshEmail(emailAddress) {\r\n\t\tif (!emailAddress) { return null; }\r\n\t\treturn getSha256(emailAddress.trim().replace(/\\s/gi, '').toLowerCase());\r\n\t}\r\n\r\n\tfunction harshPhoneNumber(phoneNo) {\r\n\t\tif (!phoneNo) { return null; }\r\n\t\treturn getSha256(phoneNo.trim().replace(/\\s|-/gi, '').toLowerCase());\r\n\t}\r\n\r\n\tfunction harshRego(regoNo) {\r\n\t\tif (!regoNo) { return null; }\r\n\t\treturn getSha256(regoNo.trim().replace(/\\s/gi, '').toLowerCase());\r\n\t}\r\n\r\n\tfunction getPhoneNumber(quoteModel) {\r\n\t\tif (!quoteModel) { return null; }\r\n\t\tif (quoteModel.insuranceType === 'Bike') {\r\n\t\t\tif (!quoteModel \r\n\t\t\t\t|| !quoteModel.gtmPolicyHolder \r\n\t\t\t\t|| !quoteModel.gtmPolicyHolder.phoneNumber) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn quoteModel.gtmPolicyHolder.phoneNumber;\r\n\t\t}\r\n\t\tif (quoteModel.insuranceType === 'Caravan') {\r\n\t\t\tif (!quoteModel \r\n\t\t\t\t|| !quoteModel.mainPolicyHolder \r\n\t\t\t\t|| !quoteModel.mainPolicyHolder.primaryPhoneNumber) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn quoteModel.mainPolicyHolder.primaryPhoneNumber;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\t/////End gdd-8403\r\n\r\n\tfunction trackPageView(page, quoteModel) {\r\n\t\t//dd-6334 - do not trigger this event for Unauth Payments\r\n\t\tif (quoteModel.gtmTransactionAffiliation !== \"payments\") {\r\n\t\t\tvar selectedQuote = quoteModel.selectedQuoteForPayment\r\n\t\t\t\t\t? quoteModel.selectedQuoteForPayment\r\n\t\t\t\t\t: null,\r\n\t\t\t\toffering = quoteModel.offering,\r\n\t\t\t\tcoverType = selectedQuote ? selectedQuote.coverType : null,\r\n\t\t\t\tcombinedCoverType = getCombinedCoverType(coverType, offering),\r\n\t\t\t\tgtmPolicyHolder = quoteModel.gtmPolicyHolder,\r\n\t\t\t\tpostCode = quoteModel.postCode,\r\n\t\t\t\tactiveCampaign = campaignService.getCampaign(),\r\n\t\t\t\tcampaignId = activeCampaign ? activeCampaign.sc_camp : null;\r\n\r\n\t\t\tvar trackingData = {\r\n\t\t\t\tevent: \"virtualPageView\",\r\n\t\t\t\tvirtualPageUrl: page.url,\r\n\t\t\t\tvirtualPageTitle: page.name,\r\n\t\t\t\tqqOption: selectedQuote ? selectedQuote.totalPremium : null,\r\n\t\t\t\tqqEstimate: selectedQuote ? selectedQuote.totalPremium : null,\r\n\t\t\t\tDOB: gtmPolicyHolder\r\n\t\t\t\t\t? moment(gtmPolicyHolder.dateOfBirth, \"DD/MM/YYYY\").format(\r\n\t\t\t\t\t\t\t\"DD/MM/YYYY\"\r\n\t\t\t\t\t )\r\n\t\t\t\t\t: null,\r\n\t\t\t\tcustGender: gtmPolicyHolder ? gtmPolicyHolder.gender : null,\r\n\t\t\t\tpostCode: postCode,\r\n\t\t\t\tinsuranceType: quoteModel.insuranceType,\r\n\t\t\t\tcoverType: combinedCoverType,\r\n\t\t\t\tquoteNo: quoteModel.quoteId,\r\n\t\t\t\tsitecoreCampaignId: campaignId,\r\n\t\t\t\tattributes: {\r\n\t\t\t\t\troute: page.url\r\n\t\t\t\t},\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tregistrationHash: harshRego((quoteModel.regoDetails) ? quoteModel.regoDetails.regoNumber : null),\r\n\t\t\t\t\temailHash: harshEmail(quoteModel.email),\r\n\t\t\t\t\tphoneHash: harshPhoneNumber(getPhoneNumber(quoteModel)),\r\n\t\t\t\t\taddressHash: harshAddress(quoteModel)\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tdataLayer.push(trackingData);\r\n\t\t}\r\n\t}\r\n\r\n\t/*\r\n\t * dd-6181-function to track events for unauthenticated payments\r\n\t * parameters-page data, payment data\r\n\t * return-none\r\n\t */\r\n\tfunction trackUnauthPayments(page, paymentData, paymentType, receiptNumber, policyNumber) {\r\n\t\tvar trackingData;\r\n\r\n\t\tif (page.name == \"payments.payments\") {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tevent: \"VirtualPageview\",\r\n\t\t\t\tvirtualPageUrl: page.url,\r\n\t\t\t\tvirtualPageTitle: page.progressBarShortTitle,\r\n\t\t\t\tproductCode: paymentData.selectInsuranceType,\r\n\t\t\t\tpaymentRef: paymentData.enterPaymentRef,\r\n\t\t\t\tpaymentMethod: paymentData.howToPay\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tevent: \"virtualPageTransaction\",\r\n\t\t\t\tvirtualPageUrl: page.url,\r\n\t\t\t\tvirtualPageTitle: page.progressBarShortTitle,\r\n\t\t\t\ttransactionId: paymentData.transactionId,\r\n\t\t\t\ttransactionTotal: paymentData.amount.amountPay,\r\n\t\t\t\tprofile: \"QBE Direct Online\",\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tpaymentReference: paymentData.referenceNumber,\r\n\t\t\t\t\tpolicyId: policyNumber,\r\n\t\t\t\t\treceiptNumber: receiptNumber,\r\n\t\t\t\t\tpaymentType: paymentType,\r\n\t\t\t\t},\r\n\t\t\t\ttransactionProducts: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsku: paymentData.transactionId,\r\n\t\t\t\t\t\tname: paymentData.transactionId,\r\n\t\t\t\t\t\tcoupon: \"\",\r\n\t\t\t\t\t\tprice: paymentData.amount.amountPay,\r\n\t\t\t\t\t\tquantity: 1\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction trackCTPEvent(type, page, action) {\r\n\t\tvar trackingData;\r\n\t\tvar url = page.url.split(\"?\");\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase \"gaClick\":\r\n\t\t\t\ttrackingData = {\r\n\t\t\t\t\tevent: type,\r\n\t\t\t\t\teventCategory: page.progressBarTitle,\r\n\t\t\t\t\teventAction: action,\r\n\t\t\t\t\teventLabel: url[0]\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"VirtualPageview\":\r\n\t\t\t\ttrackingData = {\r\n\t\t\t\t\tevent: type,\r\n\t\t\t\t\tvirtualPageUrl: url[0],\r\n\t\t\t\t\tvirtualPageTitle: \"Summary\"\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"gaFormSubmission\":\r\n\t\t\t\ttrackingData = {\r\n\t\t\t\t\tevent: type,\r\n\t\t\t\t\teventCategory: page.progressBarTitle,\r\n\t\t\t\t\teventAction: action.event,\r\n\t\t\t\t\teventLabel: url[0],\r\n\t\t\t\t\texpiryDate: action.expiryDate,\r\n\t\t\t\t\tpaymentNumber: action.paymentNumber,\r\n\t\t\t\t\tclientNumber: action.clientNumber\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t}\r\n\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction trackStandardEvent(category, action, label, nonInteraction) {\r\n\t\tif (!$window.qbeTrack) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar item = {\r\n\t\t\tevent: 'standard',\r\n\t\t\teventCategory: category, \r\n\t\t\teventAction: action,\r\n\t\t\teventLabel: label,\r\n\t\t\tnonInteraction: nonInteraction\r\n\t\t};\r\n\r\n\t\taddStandardTrackingToDataLayer(item);\r\n\t}\r\n\r\n\tfunction trackProductSelect(productType) {\r\n\t\tif (!$window.qbeTrack || !productType) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t$window.qbeTrack.meta.appProduct = productType;\r\n\t\ttrackStandardEvent('click drop down', 'Select Insurance Type', productType, false);\r\n\t}\r\n\r\n\tfunction trackTooltipMouseOver(tooltipMessage) {\r\n\t\ttrackStandardEvent('mouse over', 'tooltip', tooltipMessage, false);\r\n\t}\r\n\r\n\tfunction trackPayBillVirtualPageLanding() {\t\t\r\n\t\tdataLayer.push({\r\n\t\t\tevent: 'virtualPageView',\r\n\t\t\tvirtualPagePath: '/au/pay-bills/welcome',\r\n\t\t\tvirtualPageTitle: 'Welcome - Pay My Bills | QBE AU',\r\n\t\t});\r\n\t}\r\n\r\n\tfunction trackPayBillVirtualBillFound(paymentRef, policyNumber) {\r\n\t\tvar dataObj = {\r\n\t\t\tpaymentReference: paymentRef,\r\n\t\t\tpolicyId: policyNumber,\r\n\t\t};\r\n\r\n\t\tdataLayer.push({\r\n\t\t\tevent: 'virtualPageView',\r\n\t\t\tvirtualPagePath: '/au/pay-bills/bill-found',\r\n\t\t\tvirtualPageTitle: 'Bill Found - Pay My Bills | QBE AU',\r\n\t\t\tdata: dataObj,\r\n\t\t});\r\n\t}\r\n\r\n\tfunction trackPayBillVirtualPageDetails(paymentRef, policyNumber, paymentType) {\r\n\t\tvar dataObj = {\r\n\t\t\tpaymentReference: paymentRef,\r\n\t\t\tpolicyId: policyNumber,\r\n\t\t};\r\n\t\tif (paymentType) {\r\n\t\t\tdataObj.paymentType = paymentType;\r\n\t\t}\r\n\r\n\t\tdataLayer.push({\r\n\t\t\tevent: 'virtualPageView',\r\n\t\t\tvirtualPagePath: '/au/pay-bills/payment-details',\r\n\t\t\tvirtualPageTitle: 'Payment Details- Pay My Bills | QBE AU',\r\n\t\t\tdata: dataObj,\r\n\t\t});\r\n\t}\r\n\r\n\tfunction trackApiError(errCode, errMessage) {\r\n\t\tdataLayer.push({\r\n\t\t\tevent: 'standard',\r\n\t\t\teventCategory: 'error',\r\n\t\t\teventAction: 'api',\r\n\t\t\teventLabel: errMessage, \r\n\t\t\tnonInteraction: true,\r\n\t\t\tdata: {\r\n\t\t\t\terrorCode: (!errCode) ? '(not set)' : errCode,\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction createGtmValidationErrorEvent(errorMessageTitle) {\r\n\t\treturn {\r\n\t\t\tevent: 'validation_error',\r\n\t\t\teventCategory: 'validation error',\r\n\t\t\teventAction: 'validation error',\r\n\t\t\teventLabel: errorMessageTitle, // error validation title\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\ttrackTransaction: trackTransaction,\r\n\t\ttrackTransactionCompleted: trackTransactionCompleted,\r\n\t\ttrackPageView: trackPageView,\r\n\t\ttrackEvent: trackEvent,\r\n\t\ttrackUnauthPayments: trackUnauthPayments,\r\n\t\ttrackCTPEvent: trackCTPEvent,\r\n\t\ttrackStandardEvent: trackStandardEvent,\r\n\t\ttrackProductSelect: trackProductSelect,\r\n\t\ttrackTooltipMouseOver: trackTooltipMouseOver,\r\n\t\ttrackPayBillVirtualPageLanding: trackPayBillVirtualPageLanding,\r\n\t\ttrackPayBillVirtualBillFound: trackPayBillVirtualBillFound,\r\n\t\ttrackPayBillVirtualPageDetails: trackPayBillVirtualPageDetails,\r\n\t\ttrackApiError: trackApiError,\r\n\t\tcreateGtmValidationErrorEvent: createGtmValidationErrorEvent,\r\n\t};\r\n}","(function() {\r\n 'use strict';\r\n \r\n angular\r\n .module('qbePortal.routes')\r\n .run($run);\r\n \r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n \r\n $run.$inject = ['$rootScope', '$state' , 'gtmService', 'quoteModelFactory'];\r\n\r\n /**\r\n * track virtual page views for all page.\r\n */ \r\n function $run($rootScope, $state, gtmService, quoteModelFactory) {\r\n \r\n $rootScope.$on('$stateChangeSuccess', function() {\r\n gtmService.trackPageView($state.current, quoteModelFactory.create());\r\n });\r\n \r\n }\r\n \r\n})(angular);\r\n","function AggregatedRemoveService(storage) {\r\n\t\r\n\r\n\tfunction markForDelete(typeName, item) {\r\n\t\tvar itemsMarkedForDelete = storage.getItem('itemsMarkedForDelete') || {} ; \r\n\t\titemsMarkedForDelete[typeName] = itemsMarkedForDelete[typeName] || [] ; \r\n\t\titemsMarkedForDelete[typeName].push(item);\r\n\t\tstorage.setItem('itemsMarkedForDelete', itemsMarkedForDelete) ; \r\n\t}\r\n\r\n\tfunction getList() {\r\n\t\tvar items = storage.getItem('itemsMarkedForDelete');\r\n\t\tif ( ! Object.keys(items) )\r\n\t\t\titems = null ; \r\n\r\n\t\treturn items;\r\n\t}\r\n\r\n\tfunction clear(typeName) {\r\n\t\tvar itemsMarkedForDelete = storage.getItem('itemsMarkedForDelete') || {} ; \r\n\t\tif ( itemsMarkedForDelete[typeName])\r\n\t\t\tdelete itemsMarkedForDelete[typeName] ; \r\n\t\tstorage.setItem('itemsMarkedForDelete', itemsMarkedForDelete) ; \r\n\t}\r\n\r\n\treturn {\r\n\t\tmarkForDelete: markForDelete,\r\n\t\tgetList: getList,\r\n\t\tclear: clear,\r\n\t}\r\n}","function BikeQuoteConfiguration(){\r\n\tthis.coverTypeClasses = {\r\n\t\tcomprehensive : {\r\n\t\t\tlabel : 'Comprehensive',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Comprehensive',\r\n\t\t\t\t\tdescriptor: 'comprehensive',\r\n\t\t\t\t\tsuperType: 'comprehensive'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\t\tthird_party: {\r\n\t\t\tlabel: 'Third Party',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Third party only',\r\n\t\t\t\t\tdescriptor: 'thirdpartyonly',\r\n\t\t\t\t\tsuperType: 'third_party'\r\n\t\t\t\t},\r\n\t\t\t\tfire_and_theft: {\r\n\t\t\t\t\tlabel: 'Third party fire and theft',\r\n\t\t\t\t\tdescriptor: 'thirdpartyfiretheft',\r\n\t\t\t\t\tsuperType: 'third_party'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.allCoverTypes = {\r\n\t\tcomprehensive_standard: this.coverTypeClasses.comprehensive.subClasses.standard,\r\n\t\tthird_party_fire_theft:this.coverTypeClasses.third_party.subClasses.fire_and_theft,\r\n\t\tthird_party_standard: this.coverTypeClasses.third_party.subClasses.standard,\r\n\t\t// platinum: this.coverTypeClasses.platinum.subClasses.standard,\r\n\t};\r\n\r\n\tthis.allCoverTypesByKey = {\r\n\t\tcomprehensive: this.coverTypeClasses.comprehensive.subClasses.standard,\r\n\t\tthird_party_fire_theft: this.coverTypeClasses.third_party.subClasses.fire_and_theft,\r\n\t\tthird_party: this.coverTypeClasses.third_party.subClasses.standard,\r\n\t};\r\n\r\n\r\n\tthis.allPaymentFrequencies = {\r\n\t\tannual: 'everyyear',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'everyotherweek'\r\n\t};\r\n\r\n\tthis.defaultPaymentFrequency = 'annual' ; // this.allPaymentFrequencies.annual;\r\n\r\n\tthis._reversePaymentFrequenciesLookup = {\r\n\t\tyearly: 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'fortnightly'\r\n\t};\r\n\r\n\tthis.allQuoteTypes = {\r\n\t\tfull: 'Full',\r\n\t\tquick: 'Quick',\r\n\t};\r\n\r\n\tthis.quoteRuleOptions = {\r\n\t\t// Rapid estimate quote options\r\n\t\t'rapidEstimate': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.estimate' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.riders': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.rider' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\t// coverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.quote': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\t// coverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.contact': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.contacts'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.payment': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.testQuoteDeclineOptions = {\r\n\t\t'bike.bike' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.motorcycle'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.riders' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.rider'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.quote' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tthis.defaultCoverType = this.allCoverTypes.comprehensive_standard;\r\n\r\n\tthis.defaultRequotePageName = 'bike.quote';\r\n}\r\n","'use strict';\r\n\r\nfunction CampaignService(ipCookie, util, labelService, CAMPAIGN_COOKIE_EXPIRY) {\r\n\tvar campaignId = null;\r\n\r\n\tfunction init() {\r\n\t\tvar campaignIdFromCookie = ipCookie('sc_camp');\r\n\t\tvar campaignIdFromQS = util.getQueryStringByName(window.location, 'sc_camp');\r\n\r\n\t\t// //expires: CAMPAIGN_COOKIE_EXPIRY, expirationUnit: 'milliseconds'\r\n\t\tcampaignId = campaignIdFromQS ? campaignIdFromQS : campaignIdFromCookie;\r\n\t\tif (campaignIdFromQS)\r\n\t\t\tipCookie('sc_camp', campaignIdFromQS, {});\r\n\t}\r\n\r\n\tfunction hasActiveCampaign() {\r\n\t\treturn campaignId != null;\r\n\t}\r\n\r\n\tfunction getActiveCampaignId() {\r\n\t\treturn campaignId;\r\n\t}\r\n\r\n\tfunction getCampaign() {\r\n\t\tif (!campaignId)\r\n\t\t\treturn null;\r\n\r\n\t\tvar campaign = labelService.extractCampaignInfoFor(campaignId);\r\n\t\tif (!campaign)\r\n\t\t\tconsole.error(\"No configuration for the active campaign '\" + campaignId + \"'\");\r\n\r\n\t\treturn campaign;\r\n\t}\r\n\r\n\tfunction getCampaignConfig(code, isCampaignNextStep) {\r\n\t\tvar campaignText;\r\n\r\n\t\tif (isCampaignNextStep) {\r\n\t\t\tcampaignText = util.isUndefinedOrNull(labelService.getGlobalOptionLabel('campaignConfiguration', code)) ?\r\n\t\t\t\tnull : labelService.getGlobalOptionLabel('campaignConfiguration', code);\r\n\t\t} else {\r\n\t\t\tcampaignText = util.isUndefinedOrNull(labelService.getGlobalOption('campaignBannerConfiguration', code)) ?\r\n\t\t\t\tnull : labelService.getGlobalOption('campaignBannerConfiguration', code).bannerContent;\r\n\t\t}\r\n\t\tvar campaignData = {\r\n\t\t\tisCampaignCodeValid: true,\r\n\t\t\tcontent: campaignText\r\n\t\t}\r\n\r\n\t\tif (util.isUndefinedOrNull(campaignText)) {\r\n\t\t\tcampaignData.isCampaignCodeValid = false;\r\n\t\t}\r\n\r\n\t\treturn campaignData;\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t\thasActiveCampaign: hasActiveCampaign,\r\n\t\tgetActiveCampaignId: getActiveCampaignId,\r\n\t\tgetCampaign: getCampaign,\r\n\t\tgetCampaignConfig: getCampaignConfig\r\n\t}\r\n}\r\n","function CaravanQuoteConfiguration(){\r\n\tthis.coverTypeClasses = {\r\n\t\tcomprehensive : {\r\n\t\t\tlabel : 'Comprehensive',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Comprehensive',\r\n\t\t\t\t\tdescriptor: 'comprehensive',\r\n\t\t\t\t\tsuperType: 'comprehensive'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\tthis.allCoverTypes = {\r\n\t\tcomprehensive_standard: this.coverTypeClasses.comprehensive.subClasses.standard\r\n\t};\r\n\r\n\tthis.allCoverTypesByKey = {\r\n\t\tcomprehensive: this.coverTypeClasses.comprehensive.subClasses.standard\r\n\t};\r\n\r\n\r\n\tthis.allPaymentFrequencies = {\r\n\t\tannual: 'everyyear',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'everyotherweek'\r\n\t};\r\n\r\n\tthis.defaultPaymentFrequency = this.allPaymentFrequencies.annual;\r\n\r\n\tthis._reversePaymentFrequenciesLookup = {\r\n\t\tyearly: 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'fortnightly'\r\n\t};\r\n\r\n\tthis.allQuoteTypes = {\r\n\t\tfull: 'Full',\r\n\t\tquick: 'Quick',\r\n\t};\r\n\r\n\tthis.quoteRuleOptions = {\r\n\t\t// Rapid estimate quote options\r\n\t\t'rapidEstimate': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.estimate' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.drivers': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.policyHolder' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.quote': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.contact': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.contacts'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.payment': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.testQuoteDeclineOptions = {\r\n\t\t'caravan.caravan' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.caravan'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.drivers' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.policyHolder'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.quote' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.contact' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.contacts'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tthis.defaultCoverType = this.allCoverTypes.comprehensive_standard;\r\n\tthis.defaultRequotePageName = 'caravan.quote';\r\n}\r\n","(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('qbePortal.routes')\r\n .run($run);\r\n\r\n\r\n $run.$inject = ['$rootScope', '$state' , '$stateParams', 'Util', 'storage', 'MODULE_INFO'];\r\n\r\n /**\r\n * track virtual page views for all page.\r\n */\r\n function $run($rootScope, $state, $stateParams, util, storage, MODULE_INFO) {\r\n\r\n\r\n $rootScope.$on('$stateChangeSuccess', function() {\r\n var completed = typeof(storage.getItem('completed-step')) === 'string' ? storage.getItem('completed-step') : null ;\r\n var fromRapidEstimate = typeof(storage.getItem('ignoreRapidEstimateRoute')) === 'string' ? true : false;\r\n\t var isRetrieval = storage.getItem('retrieve');\r\n util.dispatchCustomEvent('route-changed' , {current: $state.current, completed: completed});\r\n\r\n\r\n /** clean up storage on the first load of the first route\r\n * it's important this does not run when user comes back to\r\n * the first route through back or progress bar.\r\n */\r\n if ( !completed && !isRetrieval\r\n && $state.current.name == MODULE_INFO.startRouteName\r\n && ! fromRapidEstimate\r\n ) {\r\n storage.clear();\r\n }\r\n\r\n storage.removeItem('ignoreRapidEstimateRoute');\r\n });\r\n\r\n window.addEventListener('route-disallowed', function (e) {\r\n var redirect = e.detail.redirect || MODULE_INFO.startRouteName ;\r\n $state.go(redirect);\r\n });\r\n\r\n window.addEventListener('cross-route-disallowed', function (e) {\r\n var redirect = MODULE_INFO.startRouteName ;\r\n storage.clear();\r\n $state.go(redirect);\r\n });\r\n\r\n }\r\n})(angular);\r\n","angular\r\n\t.module('qbePortal.services')\r\n\t.constant('STATES', [\r\n\t\t{\r\n\t\t\tlabel: 'ACT',\r\n\t\t\tvalue: 'ACT'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'NSW',\r\n\t\t\tvalue: 'NSW'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'NT',\r\n\t\t\tvalue: 'NT'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'QLD',\r\n\t\t\tvalue: 'QLD'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'SA',\r\n\t\t\tvalue: 'SA'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'TAS',\r\n\t\t\tvalue: 'TAS'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'VIC',\r\n\t\t\tvalue: 'VIC'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'WA',\r\n\t\t\tvalue: 'WA'\r\n\t\t}\r\n\t])\r\n\t.constant('CAMPAIGN_COOKIE_EXPIRY', 30)\r\n\t.constant('CREDIT_CARD_ATTEMPT', 3)\r\n\t.service('Util', Util)\r\n\t.filter('excessValue', function() {\r\n\t\treturn function(excessValue, baseExcess) {\r\n\t\t\treturn excessValue + baseExcess;\r\n\t\t};\r\n\t})\r\n\t.service('labelService', ['$window', LabelService])\r\n\t.service('validationService', ['labelService', ValidationService])\r\n\t.service('storage', ['$window', '$state', SessionStorage])\r\n\t.service('userInputRepository', ['storage', 'Util', UserInputRepository])\r\n\t.service('hierarchyDecorator', HierarchyDecorator)\r\n\t.service('MAService', ['$http', 'campaignService', MAService])\r\n\t.service('quoteResultModelBuilder', ['Util', QuoteResultModelBuilder])\r\n\t.service('serviceResponseRepository', [\r\n\t\t'storage',\r\n\t\tServiceResponseRepository\r\n\t])\r\n\t.service('quoteResultModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\tQuoteResultModelFactory\r\n\t])\r\n\t.service('quoteServiceResponseTransformer', [\r\n\t\t'quoteResultModelBuilder',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteResultModelFactory',\r\n\t\tQuoteServiceResponseTransformer\r\n\t])\r\n\t.service('jsonMapper', ['serviceResponseRepository', JsonMapper])\r\n\t.service('splitterRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'jsonMapper',\r\n\t\t'publicIDTransformer',\r\n\t\t'coverTypeTransformer',\r\n\t\tSplitterRequestTransformer\r\n\t])\r\n\t.service('quoteOptions', [\r\n\t\t'quoteConfiguration',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteResultModelBuilder',\r\n\t\t'storage',\r\n\t\tQuoteOptions\r\n\t])\r\n\t.service('quoteRequestRepository', [\r\n\t\t'Util',\r\n\t\t'storage',\r\n\t\t'quoteOptions',\r\n\t\t'quoteConfiguration',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'structuredRequestTransformer',\r\n\t\t'defaultValueRequestTransformer',\r\n\t\t'formatConverterTransformer',\r\n\t\t'cleanRequestTransformer',\r\n\t\t'splitterRequestTransformer',\r\n\t\t'publicIDTransformer',\r\n\t\t'policyHolderHandler',\r\n\t\t'coverTypeTransformer',\r\n\t\t'coverTypeResolver',\r\n\t\t'coverOfferingResolver',\r\n\t\t'triggerGoalTransformer',\r\n\t\tQuoteRequestRepository\r\n\t])\r\n\t.service('portalServiceWrapper', [\r\n\t\t'guideWireService',\r\n\t\t'quoteRequestRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'retrieveSavedQuoteResponseTransformer',\r\n\t\t'quoteServiceResponseTransformer',\r\n\t\t'quoteOptions',\r\n\t\tPortalServiceWrapper\r\n\t])\r\n\t.service('guideWireService', ['$http', 'storage', 'Util', GuideWireService])\r\n\t.service('regoSearchService', [\r\n\t\t'guideWireService',\r\n\t\tfunction(guideWireService) {\r\n\t\t\treturn RegoSearchService.create(guideWireService);\r\n\t\t}\r\n\t])\r\n\t.service('gtmService', ['$window', 'campaignService', GtmService])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('coverOfferingResolver', [\r\n\t\t'MODULE_INFO',\r\n\t\tCoverOfferingResolverService\r\n\t])\r\n\t.service('aggregatedRemoveService', ['storage', AggregatedRemoveService])\r\n\t.service('quoteResultFilter', QuoteResultFilter)\r\n\t.service('campaignService', [\r\n\t\t'ipCookie',\r\n\t\t'Util',\r\n\t\t'labelService',\r\n\t\t'CAMPAIGN_COOKIE_EXPIRY',\r\n\t\tCampaignService\r\n\t])\r\n\t.service('tokenTimeoutService', [\r\n\t\t'$state',\r\n\t\t'jwtHelper',\r\n\t\t'storage',\r\n\t\t'labelService',\r\n\t\t'MODULE_INFO',\r\n\t\tJWTTimeoutService\r\n\t]);\r\n\r\nangular\r\n\t.module('qbePortal.services.bike')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'bike',\r\n\t\tinsuranceType: 'Bike',\r\n\t\troutePrefix: 'bike.',\r\n\t\tstartRouteName: 'bike.bike',\r\n\t\tproductCode: 'QPMMotorBike',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'bikeForm',\r\n\t\tpaymentPageRouteName: 'bike.payment',\r\n\t\tdonePageRouteName: 'bike.done',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'bike.quote': 'purchase_now',\r\n\t\t\t'bike.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t.service('quoteConfiguration', BikeQuoteConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeRetrieveSavedQuoteResponseTransformer\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tBikeCleanRequestTransformer\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tBikeFormatConverterTransformer\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tBikeDefaultValueRequestTransformer\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'storage',\r\n\t\tBikeStructureRequestTransformer\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tBikePublicIDTransformer\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tBikePolicyHolderHandler\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeCoverTypeTransformer\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('quoteResultModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\tQuoteResultModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tutil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tutil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeTriggerGoalTransformer\r\n\t]);\r\n\r\nangular\r\n\t.module('qbePortal.services.caravan')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'caravan',\r\n\t\tinsuranceType: 'Caravan',\r\n\t\troutePrefix: 'caravan.',\r\n\t\tstartRouteName: 'caravan.caravan',\r\n\t\tproductCode: 'QPCCaravanTrailer',\r\n\t\tmainFormName: 'caravanForm',\r\n\t\tpaymentPageRouteName: 'caravan.payment',\r\n\t\tdonePageRouteName: 'caravan.done',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'caravan.quote': 'purchase_now',\r\n\t\t\t'caravan.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t.service('quoteConfiguration', CaravanQuoteConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tCaravanRetrieveSavedQuoteResponseTransformer\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tCaravanCleanRequestTransformer\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tCaravanFormatConverterTransformer\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'userInputRepository',\r\n\t\t'quoteOptions',\r\n\t\tCaravanDefaultValueRequestTransformer\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'storage',\r\n\t\tCaravanStructureRequestTransformer\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tCaravanPublicIDTransformer\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tCaravanPolicyHolderHandler\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tCaravanCoverTypeTransformer\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.filter('vehicleType', function() {\r\n\t\treturn function(type) {\r\n\t\t\tvar vehicleTypes = {\r\n\t\t\t\tcaravan: 'Caravan',\r\n\t\t\t\tcampertrailer: 'Camper Trailer',\r\n\t\t\t\tslideoncamper: 'Slide on Camper',\r\n\t\t\t\tgoodscarryingtrailer: 'Goods Carrying Trailer',\r\n\t\t\t\tcampervan: 'Camper Van',\r\n\t\t\t\trelocatablehome: 'Relocatable Home',\r\n\t\t\t\tmotorhome: 'Motor Home'\r\n\t\t\t};\r\n\r\n\t\t\treturn vehicleTypes[type];\r\n\t\t};\r\n\t})\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tCaravanTriggerGoalTransformer\r\n\t]);\r\n\r\nangular\r\n\t.module('qbePortal.services.home')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'home',\r\n\t\tinsuranceType: 'Home',\r\n\t\troutePrefix: 'home.',\r\n\t\tstartRouteName: 'home.estimate',\r\n\t\tproductCode: 'QPHHome',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'homeForm',\r\n\t\tpaymentPageRouteName: 'home.payment',\r\n\t\tdonePageRouteName: 'home.done',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'home.quote': 'purchase_now',\r\n\t\t\t'home.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t// service('commonData', 'storage', HomeCommonData ).\r\n\t.service('quoteConfiguration', HomeQuoteConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tHomeRetrieveSavedQuoteResponseTransformer\r\n\t])\r\n\t.service('splitterRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'jsonMapper',\r\n\t\t'publicIDTransformer',\r\n\t\t'coverTypeTransformer',\r\n\t\tHomeSplitterRequestTransformer\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tHomeCleanRequestTransformer\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tHomeFormatConverterTransformer\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'userInputRepository',\r\n\t\t'quoteOptions',\r\n\t\tHomeDefaultValueRequestTransformer\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'storage',\r\n\t\tHomeStructureRequestTransformer\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\tHomePublicIDTransformer\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tHomePolicyHolderHandler\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tHomeCoverTypeTransformer\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('quoteResultModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\tQuoteResultModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeTriggerGoalTransformer\r\n\t]);;\r\n\r\nangular\r\n\t.module('qbePortal.services.vehicle')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'vehicle',\r\n\t\tinsuranceType: 'Car',\r\n\t\troutePrefix: 'vehicle.',\r\n\t\tstartRouteName: 'vehicle.vehicle',\r\n\t\tproductCode: 'QPMMotorVehicle',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'vehicleForm',\r\n\t\tpaymentPageRouteName: 'vehicle.payment',\r\n\t\tdonePageRouteName: 'vehicle.done',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'vehicle.quote': 'purchase_now',\r\n\t\t\t'vehicle.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t// service('commonData', [ 'storage', VehicleCommonData])\r\n\t.service('quoteConfiguration', VehicleQuoteConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tVehicleRetrieveSavedQuoteResponseTransformer\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tVehicleCleanRequestTransformer\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tVehicleFormatConverterTransformer\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'userInputRepository',\r\n\t\t'quoteOptions',\r\n\t\tVehicleDefaultValueRequestTransformer\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'storage',\r\n\t\tVehicleStructureRequestTransformer\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tVehiclePublicIDTransformer\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tVehiclePolicyHolderHandler\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tVehicleCoverTypeTransformer\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t]);\r\n\r\nangular\r\n\t.module('qbePortal.services.ctp')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'ctp',\r\n\t\tinsuranceType: 'CTP SA',\r\n\t\troutePrefix: 'ctp.',\r\n\t\tstartRouteName: 'ctp.ctp',\r\n\t\tproductCode: '',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'ctpForm',\r\n\t\tpaymentPageRouteName: '',\r\n\t\tdonePageRouteName: '',\r\n\t\tpaymentPanelButtonText: {}\r\n\t})\r\n\t.service('quoteConfiguration', GenericConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', GenericConfiguration])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeTriggerGoalTransformer\r\n\t]);;\r\n\r\nangular\r\n\t.module('qbePortal.services.payments')\r\n\t.constant('MODULE_INFO', {\r\n\t\t/*id is for QBE bar on top and side bar on left*/\r\n\t\tid: 'payments',\r\n\t\tinsuranceType: 'Car',\r\n\t\troutePrefix: 'payments.',\r\n\t\tstartRouteName: 'payments.payments',\r\n\t\tproductCode: 'QPMMotorVehicle',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'paybillForm',\r\n\t\tpaymentPageRouteName: 'payments.payments',\r\n\t\tdonePageRouteName: 'payments.complete',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'payments.quote': 'purchase_now',\r\n\t\t\t'payments.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t.service('quoteConfiguration', GenericConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', GenericConfiguration])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeTriggerGoalTransformer\r\n\t]);;\r\n","'use strict';\r\nfunction CoverOfferingResolverService(MODULE_INFO) {\r\n\tfunction resolve(quote) {\r\n\t\tswitch (MODULE_INFO.id) {\r\n\t\t\tcase 'home':\r\n\t\t\t\treturn quote.dwellings[0].offering;\r\n\t\t\tcase 'bike':\r\n\t\t\tcase 'vehicle' :\r\n\t\t\tcase 'caravan':\r\n\t\t\t\treturn null;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow 'Unknown module info';\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tresolve: resolve\r\n\t}\r\n}\r\n","'use strict';\r\nfunction CoverTypeResolverService(MODULE_INFO) {\r\n\tfunction resolve(quote) {\r\n\t\tswitch (MODULE_INFO.id) {\r\n\t\t\tcase 'home':\r\n\t\t\t\treturn quote.dwellings[0].coverType;\r\n\t\t\tcase 'bike':\r\n\t\t\t\treturn quote.motorcycles[0].coverType ;\r\n\t\t\tcase 'vehicle' :\r\n\t\t\t\treturn quote.vehicles[0].coverType ;\r\n\t\t\tcase 'caravan':\r\n\t\t\t\treturn quote.caravans[0].coverType ;\r\n\t\t\t\t// return quote.coverType ;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow 'Unknown module info';\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tresolve: resolve\r\n\t}\r\n}\r\n","\"use strict\";\r\n\r\nfunction dynamicRouterProvider($stateProvider, util) {\r\n\tthis.$get = function () {\r\n\t\treturn new DynamicRouter(stacks, util);\r\n\t};\r\n\r\n\tvar stacks = {};\r\n\r\n\tfunction registerCommonRoutes(conf, route, routeName) {\r\n\t\tif( conf.pages[routeName]) {\r\n\t\t\tvar routeConfig = angular.extend({}, conf.pages[routeName], route.config);\r\n\t\t\trouteConfig.views = {\r\n\t\t\t\t'@': {\r\n\t\t\t\t\ttitle: routeConfig.title,\r\n\t\t\t\t\ttemplateUrl: routeConfig.templateUrl,\r\n\t\t\t\t\tcontroller : routeConfig.controller,\r\n\t\t\t\t\tcontrollerAs : routeConfig.controllerAs\r\n\t\t\t\t},\r\n\t\t\t\t'header@': {\r\n\t\t\t\t\ttemplate: routeConfig.title\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t$stateProvider.state(routeName, routeConfig);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction registerStepsRoutes(conf, stack, stackName) {\r\n\t\tvar allRoutes = stack.steps.slice();\r\n\t\tallRoutes.push(stack.home);\r\n\r\n\t\tfor (var key in allRoutes) {\r\n\t\t\tvar route = allRoutes[key];\r\n\t\t\tvar page = conf.pages[route.name];\r\n\t\t\tvar stepNum = parseInt(key) + 1;\r\n\t\t\t\r\n\t\t\tif (!(page || route.config.abstract ))\r\n\t\t\t\tthrow 'Qbe Portal : Expected state URL for state ' + route.name + ' but could not find it';\r\n\r\n\t\t\tif (page) {\r\n\t\t\t\troute.config.url = page.url;\r\n\t\t\t\troute.config.views['@'].title = page.title;\r\n\t\t\t\troute.config.views['@'].templateUrl = page.templateUrl;\r\n\t\t\t\troute.config.views['sidebar@'].templateUrl = page.sidebarTemplateUrl;\r\n\t\t\t\t// start add updates\r\n\t\t //route.config.views['progressbar@'].templateUrl = page.progressbarTemplateUrl;\r\n\t\t //route.config.views['headbar@'].templateUrl = page.headbarTemplateUrl;\r\n\t\t // end\r\n\t\t\t\troute.config.views['meta@'].templateUrl = page.metaTemplateUrl;\r\n\t\t\t\troute.config.views['header@'].template = page.title;\r\n\t\t\t\troute.config.progressBarTitle = page.progressBarTitle;\r\n\t\t\t\troute.config.progressBarShortTitle = 'Step ' + stepNum + ' - ' + page.progressBarShortTitle;\r\n\t\t\t\troute.config.stateName = route.name;\r\n\r\n\t\t\t\tif(page.params) {\r\n\t\t\t\t\troute.config.params = page.params;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$stateProvider.state(route.name, route.config);\r\n\t\t}\r\n\t\tstacks[stackName] = stack;\r\n\t}\r\n\r\n\tthis.init = function (conf, stacks) {\r\n\t\tfor (var routeName in routes.common) {\r\n\t\t\tvar route = routes.common[routeName],\r\n\t\t\t\trouteConfig;\r\n\r\n\t\t\tif (!route) {\r\n\t\t\t\tthrow 'Qbe Portal : Expected routing stack with name ' + routeName + ' but could not find it';\r\n\t\t\t}\r\n\r\n\t\t\tregisterCommonRoutes(conf, route, routeName) ;\r\n\t\t}\r\n\r\n\t\tfor (var key in stacks) {\r\n\t\t\tvar stackName = stacks[key];\r\n\t\t\tvar stack = routes[stackName];\r\n\t\t\tif (!stack)\r\n\t\t\t\tthrow 'Qbe Portal : Expected routing stack with name ' + stackName + ' but could not find it';\r\n\r\n\t\t\tregisterStepsRoutes(conf, stack, stackName) ;\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction DynamicRouter(stacks, util) {\r\n\tvar currentStack,\r\n\t\tcurrentState,\r\n\t\tcurrentStep,\r\n\t\ttotalSteps,\r\n\t\tsteps,\r\n\t\tconditions,\r\n\t\tlastCompletedStep;\r\n\r\n\r\n\twindow.addEventListener('route-changed', function (e) {\r\n\t\tlastCompletedStep = typeof(e.detail.completed) === 'string' ? e.detail.completed : null;\r\n\t}, false);\r\n\r\n\r\n\t/**\r\n\t * Initialises the dynamic router.\r\n\t * @stateName: state name of current page e.g. 'vehicle.drivers'\r\n\t * @stackname: name of the parent of current page e.e. 'vehicle'\r\n\t * @stepConditions: optional - a conditions object which may includes conditions for certain states determining if they are visible.\r\n\t */\r\n\tfunction initialise(stateName, stackName, stepConditions, markCompletedFn) {\r\n\t\tif (stackName == \"\") stackName = stateName; // state is parent state.\r\n\t\tconditions = stepConditions || {} ;\r\n\t\tcurrentStack = stacks[stackName];\r\n\t\tclearSteps() ;\r\n\t\tsteps = getSteps() ;\r\n\t\tvar currentStepDef = findStepByName(steps, stateName) ;\r\n\t\tcurrentState = currentStepDef.name;\r\n\t\tcurrentStep = currentStepDef.index;\r\n\t\ttotalSteps = steps.length;\r\n\t\tcheckRouteAllowed(markCompletedFn);\r\n\t}\r\n\r\n\tfunction checkRouteAllowed(markCompletedFn) {\r\n\t\t/** first route step is always allowed */\r\n\t\tvar step = findStepByName(steps, lastCompletedStep);\r\n\r\n\t\tif ( currentState.indexOf('.done') !== -1 )\r\n\t\t\treturn true;\r\n\r\n\t\tif (!step && lastCompletedStep) {\r\n\t\t\tdispatchCustomEvent('cross-route-disallowed');\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif(currentState == 'home.property'){\r\n\t\t\t//special condition to allow the home retrieve\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(currentState == 'bike.quote'){\r\n\t\t\t//special condition to allow the home retrieve\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(currentState == 'caravan.quote'){\r\n\t\t\t//special condition to allow the home retrieve\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (currentStep > 0) {\r\n\t\t\tif ( ! step || currentStep > step.index + 1 ){\r\n\t\t\t\tdispatchCustomEvent('route-disallowed',\r\n\t\t\t\t\t{\r\n\t\t\t\t\tredirect: lastCompletedStep,\r\n\t\t\t\t\tmsg :'Not allowed to navigate to route ' + currentStep\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * updates the completed route only when backtracking\r\n\t\t * to previous steps. For going next update completed\r\n\t\t * needs to be updated by the next() function.\r\n\t\t */\r\n\t\tif (step && currentStep < step.index)\r\n\t\t\tmarkCompletedFn(currentState) ;\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tfunction findStepByName(steps, stateName) {\r\n\t\tvar selectedStep = null ;\r\n\t\tsteps.some(\r\n\t\t\tfunction (step, i) {\r\n\t\t\t\tif (step.stateName == stateName) {\r\n\t\t\t\t\tselectedStep = {\r\n\t\t\t\t\t\tname : stateName,\r\n\t\t\t\t\t\tindex : i,\r\n\t\t\t\t\t};\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn selectedStep ;\r\n\t}\r\n\r\n\tfunction getPageTitle() {\r\n\t\treturn steps[currentStep].progressBarTitle;\r\n\t}\r\n\r\n\tfunction getSteps() {\r\n\t\tif ( currentStack && currentStack.steps ) {\r\n\t\t\tif ( !steps) {\r\n\t\t\t\tsteps = currentStack.steps.map(\r\n\t\t\t\t\tfunction (step, i) {\r\n\t\t\t\t\t\tvar addStep = !conditions[step.config.stateName] || conditions[step.config.stateName]() ;\r\n\t\t\t\t\t\tif ( addStep )\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\ttitle: step.config.title,\r\n\t\t\t\t\t\t\t\tprogressBarTitle: step.config.progressBarTitle,\r\n\t\t\t\t\t\t\t\tprogressBarShortTitle: step.config.progressBarShortTitle,\r\n\t\t\t\t\t\t\t\tstepNumber: i,\r\n\t\t\t\t\t\t\t\tstateName : step.config.stateName\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\r\n\t\t\t\tsteps = steps.filter(function(step){ return !!step}) ;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn steps;\r\n\t}\r\n\r\n\tfunction clearSteps() {\r\n\t\tsteps = null ;\r\n\t}\r\n\r\n\tfunction next(markCompletedFn) {\r\n\t\tmarkCompletedFn(getCurrentState().name);\r\n\t\treturn steps[++currentStep].stateName;\r\n\t}\r\n\r\n\tfunction getNextState() {\r\n\t\treturn steps[currentStep+1].stateName;\r\n\t}\r\n\r\n\r\n\tfunction getCurrentState() {\r\n\t\treturn {\r\n\t\t\tname: steps[currentStep].stateName,\r\n\t\t\tnumber: currentStep\r\n\t\t}\r\n\t}\r\n\r\n\tfunction back() {\r\n\t\tif ( currentStep > 0)\r\n\t\t\treturn steps[--currentStep].stateName;\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction getState(step) {\r\n\t\treturn steps[step].stateName;\r\n\t}\r\n\r\n\treturn {\r\n\t\tinitialise: initialise,\r\n\t\tnext: next,\r\n\t\tback: back,\r\n\t\tgetPageTitle: getPageTitle,\r\n\t\tgetSteps: getSteps,\r\n\t\tgetState: getState,\r\n\t\tgetCurrentState: getCurrentState,\r\n\t\tgetNextState: getNextState,\r\n\t};\r\n}\r\n","(function() {\r\n\t\"use strict\";\r\n\r\n\tangular\r\n\t\t.module(\"qbePortal\")\r\n\t\t.service(\"embargoTestService\", embargoTestService);\r\n\r\n\tembargoTestService.$inject = [\"$state\"];\r\n\r\n\tfunction embargoTestService($state) {\r\n\t\tthis.testEmbargoDecline = testEmbargoDecline;\r\n\r\n\t\tfunction testEmbargoDecline(response) {\r\n\t\t\tvar data = response.data || response.quote;\r\n\r\n\t\t\tif (data.quoteResult) {\r\n\t\t\t\tvar declineParams = {\r\n\t\t\t\t\tdeclineType: \"\",\r\n\t\t\t\t\tdeclineCodes: []\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (data.quoteResult.embargo) {\r\n\t\t\t\t\tdeclineParams.declineType = \"embargo\";\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tdata.quoteResult.referral &&\r\n\t\t\t\t\t!data.quoteResult.embargo\r\n\t\t\t\t) {\r\n\t\t\t\t\tdeclineParams.declineType = \"referral\";\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tdata.quoteResult.decline &&\r\n\t\t\t\t\t!data.quoteResult.embargo\r\n\t\t\t\t) {\r\n\t\t\t\t\tdeclineParams.declineType = \"decline\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdata.quoteResult.uwIssues.forEach(function(element) {\r\n\t\t\t\t\tdeclineParams.declineCodes.push(element.typeCode);\r\n\t\t\t\t}, this);\r\n\r\n\t\t\t\treturn declineParams;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n})();\r\n","\"use strict\";\r\n\r\nfunction FormSchemaService(DOM) {\r\n\tvar schema = {},\r\n\t\tstructure = {} ;\r\n\r\n\tDOM.addEventListener('register-schema', function (e) {\r\n\t\tregisterSchema(DOM.qbe);\r\n\t}, false);\r\n\r\n\tfunction registerSchema(conf) {\r\n\t\tschema = conf.formSchema;\r\n\t\tstructure = conf.formStructure;\r\n\t}\r\n\t\r\n\tfunction extractGroup(groupName, param) {\r\n\t\tvar field = structure[groupName] ;\r\n\t\tif ( ! field )\r\n\t\t\tthrow groupName + ' does not exist in the form structure';\r\n\t\telse if ( typeof(field) == 'string' )\r\n\t\t\treturn extractGroup(field) ; \r\n\r\n\t\treturn structure[groupName] ; \r\n\t}\r\n\r\n\tfunction extractField(fieldName) {\r\n\t\tvar field = schema[fieldName];\r\n\t\tif ( ! field )\r\n\t\t\tthrow fieldName + ' does not exist in the form schema/structure';\r\n\t\treturn field;\r\n\t}\r\n\t\r\n\tfunction getGenericValidationMessageFor(rule) {\r\n\t\treturn 'generic error message' ; \r\n\t}\r\n\r\n\treturn {\r\n\t\textractGroup: extractGroup,\r\n\t\textractField: extractField,\r\n\t\tgetGenericValidationMessageFor: getGenericValidationMessageFor,\r\n\t};\r\n}\r\n","function GenericConfiguration() {\r\n\t// handles routes that are not part of the quote process\r\n}\r\n","\"use strict\";\r\n\r\nfunction GuideWireService($http, storage, util) {\r\n\r\n var mulesoftApiHeaders = (endpointUrls.rego.mulesoftApiHeader) \r\n ? { \r\n 'X-SourceSystem': 'Sitecore',\r\n 'X-TrackingID': '',\r\n 'X-Mockable': (endpointUrls.rego.mulesoftApiHeader.xMockable) ? true : false,\r\n }\r\n : {};\r\n\r\n var conf = {\r\n embargo: {\r\n method: 'GET',\r\n url: '',\r\n headers: {\r\n 'X-Mockable': endpointUrls.quote.embargoxMockable,\r\n 'X-SourceSystem': '',\r\n 'X-TrackingID': '',\r\n 'X-TargetEnv': '',\r\n },\r\n },\r\n regoSearch: {\r\n method: 'GET',\r\n url: endpointUrls.rego.regoSearch,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'X-Requested-By': '98wuebh3e2',\r\n 'UserID': \"\"\r\n },\r\n },\r\n makeSearch: {\r\n method: 'GET',\r\n url: endpointUrls.rego.makeSearch,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n modelSearch: {\r\n method: 'GET',\r\n url: endpointUrls.rego.modelSearch,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n carSearch: {\r\n method: 'GET',\r\n url: endpointUrls.rego.carSearch,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n addressSearch: {\r\n method: 'GET',\r\n url: endpointUrls.addresses.addressSearch,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc'\r\n },\r\n },\r\n createQuote: {\r\n method: 'POST',\r\n url: endpointUrls.quote.quote,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'channel': 'portal',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n updateQuote: {\r\n method: 'PUT',\r\n url: endpointUrls.quote.quote,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'channel': 'portal',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n quickQuote: {\r\n method: 'POST',\r\n url: endpointUrls.quote.quickQuote,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'channel': 'portal',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n\t\ttriggerGoal: {\r\n\t\t\tmethod: 'POST',\r\n\t\t\turl: '/sitecore/api/qbe/Experience/TriggerGoal',\r\n\t\t\theaders: {\r\n\t\t\t\t'EY-Access-Key': 'test123',\r\n\t\t\t\t'EY-Product-Type': 'pc',\r\n\t\t\t\t'channel': 'portal',\r\n\t\t\t\tAccept: \"application/json, text/plain, */*\",\r\n\t\t\t\t'Cache-Control': \"no-cache\",\r\n\t\t\t\tPragma: \"no-cache\",\r\n\t\t\t\t'X-Requested-By': \"92tvt8iy2b\"\r\n\t\t\t},\r\n\t\t},\t\t\r\n retrieveSavedQuote: {\r\n method: 'GET',\r\n url: endpointUrls.quote.retrieveSavedQuote,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'channel': 'portal',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n isCampaignCodeValid: {\r\n method: 'HEAD',\r\n url: endpointUrls.quote.campaign,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'X-Requested-By': '92tvt8iy2b'\r\n },\r\n },\r\n refreshAddress: {\r\n method: 'POST',\r\n url: endpointUrls.addresses.refresh,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n refreshVehicleDetails: {\r\n method: 'GET',\r\n url: endpointUrls.rego.refresh,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n refreshCaravanDetails: {\r\n method: 'GET',\r\n url: endpointUrls.rego.refresh,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n isBSBValid: {\r\n method: 'GET',\r\n url: endpointUrls.quote.bsbValidation,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'X-Requested-By': '92tvt8iy2b'\r\n },\r\n },\r\n doesUserExist: {\r\n method: 'HEAD',\r\n url: endpointUrls.quote.doesUserExist,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'X-Requested-By': '92tvt8iy2b'\r\n },\r\n },\r\n getPayment: {\r\n method: 'GET',\r\n url: endpointUrls.payments.referenceNumber,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc'\r\n }\r\n }\r\n };\r\n\r\n return {\r\n regoSearch: function (data) {\r\n var req = conf.regoSearch;\r\n req.params = data;\r\n req.headers.UserID = checkUserID();\r\n return $http(req);\r\n },\r\n addressSearch: function (data) {\r\n var req = conf.addressSearch;\r\n req.params = data;\r\n return $http(req);\r\n },\r\n makeSearch: function (data) {\r\n var req = conf.makeSearch;\r\n req.params = data;\r\n return $http(req);\r\n },\r\n modelSearch: function (data) {\r\n var req = conf.modelSearch;\r\n req.params = data;\r\n return $http(req);\r\n },\r\n carSearch: function (data) {\r\n var req = conf.carSearch;\r\n req.params = data;\r\n return $http(req);\r\n },\r\n saveQuote: function (quoteRequest, credentials, params) {\r\n var req = quoteRequest.quoteID ? conf.updateQuote : conf.createQuote;\r\n req = Object.extend({}, req);\r\n req.data = quoteRequest;\r\n\r\n if (params) {\r\n req.params = params;\r\n }\r\n\r\n if (quoteRequest.quoteID) {\r\n req.url = req.url + '/' + quoteRequest.quoteID;\r\n }\r\n if (credentials) {\r\n req.headers['EY-USER-TOKEN'] = credentials.eyUserToken;\r\n }\r\n return $http(req);\r\n },\r\n getQuickQuote: function (quoteRequests, params, credentials) {\r\n var req = conf.quickQuote;\r\n req.data = quoteRequests;\r\n req.params = params;\r\n return $http(req);\r\n },\r\n\t\ttriggerGoal: function (quoteRequests) {\r\n\t\t\tvar req = conf.triggerGoal; \r\n\t\t\treq.data = quoteRequests;\r\n\t\t\treturn $http(req);\r\n\t\t},\r\n retrieveSavedQuote: function (quoteId, email) {\r\n var req = conf.retrieveSavedQuote;\r\n req = Object.extend({}, req);\r\n req.url += quoteId;\r\n req.params = {\r\n email: email\r\n };\r\n return $http(req);\r\n },\r\n isCampaignCodeValid: function (code) {\r\n var req = conf.isCampaignCodeValid;\r\n req.params = {\r\n code: code,\r\n timestamp: (new Date()).getTime()\r\n };\r\n return $http(req);\r\n },\r\n refreshAddress: function (address) {\r\n var req = conf.refreshAddress;\r\n req.data = address;\r\n return $http(req);\r\n },\r\n refreshVehicleDetails: function (vgiId, effectiveDate) {\r\n var req = conf.refreshVehicleDetails;\r\n req.params = {\r\n effectiveDate: effectiveDate,\r\n id: vgiId, \r\n categoryId: 'VehID'\r\n }\r\n return $http(req);\r\n },\r\n refreshCaravanDetails: function (vgiId, effectiveDate) {\r\n var req = conf.refreshCaravanDetails;\r\n\r\n req.params = {\r\n effectiveDate: effectiveDate,\r\n id: vgiId,\r\n categoryId: 'VehID'\r\n }\r\n return $http(req);\r\n },\r\n isBSBValid: function (bsb) {\r\n var req = conf.isBSBValid, bsbReformatted = null;\r\n req = Object.extend({}, req);\r\n // reformat bsb to xxx-xxx format for service\r\n try {\r\n bsbReformatted = bsb.replace(/[^0-9.]/g, \"\").match(/.{3}/g).join('-');\r\n req.url = req.url + '/' + bsbReformatted;\r\n return $http(req);\r\n } catch (ex) {\r\n throw 'Invalid BSB provided';\r\n }\r\n },\r\n doesUserExist: function (email) {\r\n var req = conf.doesUserExist;\r\n req = Object.extend({}, req);\r\n req.url = req.url + '/' + email;\r\n return $http(req);\r\n },\r\n getPaymentInfo: function (refNumber){\r\n var req = conf.getPayment;\r\n req = Object.extend({}, req);\r\n req.url = req.url + '/' + refNumber;\r\n return $http(req);\r\n },\r\n checkEmbargo: function(postcode, type) {\r\n var req = conf.embargo;\r\n req.headers['X-TrackingID'] = uuidv4();\r\n req.headers['X-SourceSystem'] = 'QBE-SPA-' + type + '-QuoteBuy'; //type: 'Bike' 'Caravan'\r\n req.headers['X-TargetEnv'] = endpointUrls.quote.embargoTargetEnv;\r\n req.url = endpointUrls.quote.embargo + \"?postalCode=[postcode]&policyLine=\" + endpointUrls.quote.embargoPolicyLine + \"&asOfDate=[date]\";\r\n req.url = req.url.replace(\"[date]\", moment().tz(\"Australia/Sydney\").format(\"YYYY-MM-DD\"));\r\n req.url = req.url.replace(\"[postcode]\", postcode);\r\n return $http(req);\r\n }\r\n };\r\n\r\n function checkUserID() {\r\n if (storage.getItem('uKey').uKey) {\r\n return storage.getItem('uKey').uKey;\r\n } else {\r\n var newKey = util.generateRandomString(5);\r\n storage.setItem('uKey', { uKey : newKey });\r\n return newKey;\r\n }\r\n }\r\n\r\n function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n function getMulesoftApiHeadersForVgi(mulesoftApiHeadersConfig) {\r\n if (endpointUrls.quote && endpointUrls.quote.embargoTargetEnv) {\r\n mulesoftApiHeadersConfig['X-TargetEnv'] = endpointUrls.quote.embargoTargetEnv;\r\n } \r\n mulesoftApiHeadersConfig['X-TrackingID'] = uuidv4();\r\n return mulesoftApiHeadersConfig;\r\n }\r\n\r\n return new GuideWireService(new gwService());\r\n}\r\n","function HierarchyDecorator() {\r\n\t\r\n\tfunction attach($scope, params) {\r\n\t\tvar element = params.element,\r\n\t\t\tname = params.name,\r\n\t\t\thierarchy = params.hierarchy; \r\n\t\t\r\n\t\tif ( name === '') \r\n\t\t\tname = 'ag_' + $scope.$id ; \r\n\r\n\t\t$scope.hierarchyList = [name] ; \r\n\r\n\t\t$scope.setHierarchy(\r\n\t\t\t{\r\n\t\t\t name : name, \r\n\t\t\t setHierarchyFn : function(parentHierarchy) {\r\n\t\t\t \t\t$scope.hierarchyList = parentHierarchy.concat($scope.hierarchyList);\r\n\t\t\t\t\t$scope.HTMLId = $scope.hierarchyList.slice().join('_');\r\n\t\t\t\t\telement.attr('id' , $scope.HTMLId);\r\n\t\t\t\t\t$scope.$emit('element-id-set',element.attr('label-key'), $scope.HTMLId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t) ; \r\n\t}\r\n\r\n\treturn {\r\n\t\tattach: attach\r\n\t}\t\r\n}","function HomeQuoteConfiguration(){\r\n\tthis.coverTypeClasses = {\r\n\t\tbuilding_and_contents: {\r\n\t\t\tlabel : 'Building & contents',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Building & contents',\r\n\t\t\t\t\tdescriptor: 'building_and_contents',\r\n\t\t\t\t\tsuperType: 'building_and_contents'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tbuilding_only: {\r\n\t\t\tlabel : 'Building only',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Building only',\r\n\t\t\t\t\tdescriptor: 'building_only',\r\n\t\t\t\t\tsuperType: 'building_only'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\t\tcontents_only: {\r\n\t\t\tlabel : 'Contents',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Contents',\r\n\t\t\t\t\tdescriptor: 'contents_only',\r\n\t\t\t\t\tsuperType: 'contents_only'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\tthis.allCoverTypes = {\r\n\t\tbuilding_and_contents: this.coverTypeClasses.building_and_contents.subClasses.standard,\r\n\t\tbuilding_only: this.coverTypeClasses.building_only.subClasses.standard,\r\n\t\tcontents_only: this.coverTypeClasses.contents_only.subClasses.preferred,\r\n\t};\r\n\r\n\tthis.allOfferings = {\r\n\t\tQPHStandardOffering: {\r\n\t\t\tlabel: 'Standard',\r\n\t\t\tdescriptor: 'QPHStandardOffering',\r\n\t\t\tsuperType: ''\r\n\t\t},\r\n\t\tQPHPrestigeOffering: {\r\n\t\t\tlabel: 'Prestige',\r\n\t\t\tdescriptor: 'QPHPrestigeOffering',\r\n\t\t\tsuperType: ''\r\n\t\t},\r\n\t\tQPHLandlordOffering: {\r\n\t\t\tlabel: 'Landlord',\r\n\t\t\tdescriptor: 'QPHLandlordOffering',\r\n\t\t\tsuperType: ''\r\n\t\t},\r\n\t\tQPHStrataContentsOffering: {\r\n\t\t\tlabel: 'Strata Contents',\r\n\t\t\tdescriptor: 'QPHStrataContentsOffering',\r\n\t\t\tsuperType: ''\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t\t//get required covertypes\r\n\tthis.getOfferingPermutations = function(quoteOptions, coverOptions, selectedCoverType, selectedOffering){\r\n\t\tquoteOptions.permutations.offerings = [selectedOffering];\r\n\t\tquoteOptions.permutations.coverTypes = [selectedCoverType];\r\n\r\n\t\tif ( ! selectedOffering ) {\r\n\t\t\tapplicableOfferings = getOfferings( coverOptions.homeOccupancy, coverOptions.buildingType, coverOptions.needs, coverOptions.needRapidEstimate);\r\n\t\t\t//select permutations in homequote configuration based on the above logic\r\n\t\t\tvar permutationsBasedOnSelection = [];\r\n\t\t\tangular.forEach(this.allOfferings, function(offering){\r\n\t\t\t\tif(applicableOfferings.indexOf(offering.descriptor)>-1){\r\n\t\t\t\t\tpermutationsBasedOnSelection.push(offering);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tquoteOptions.permutations.offerings = permutationsBasedOnSelection;\r\n\t\t}\r\n\r\n\t\treturn quoteOptions;\r\n\t}\r\n\r\n\r\n\tfunction getOfferings(homeOccupancy, buildingType, needs, needRapidEstimate){\r\n\t\t//logic from exsting portal\r\n\t\tvar offerings = [];\r\n\t\tif (\r\n\t\t\t(homeOccupancy === 'own_live' ||\r\n\t\t\thomeOccupancy === 'rent_live' ||\r\n\t\t\thomeOccupancy === 'own_holidayhome') && !(buildingType === 'unit' || buildingType === 'flat')\r\n\t\t) {\r\n\t\t\tofferings.push('QPHStandardOffering');\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push('QPHPrestigeOffering');\r\n\t\t\t}\r\n\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === 'own_live' ||\r\n\t\t\thomeOccupancy === 'rent_live' ||\r\n\t\t\thomeOccupancy === 'own_holidayhome') &&\r\n\t\t\t(buildingType === 'unit' || buildingType === 'flat') &&\r\n\t\t\tneeds.building\r\n\t\t) {\r\n\t\t\tofferings.push('QPHStandardOffering');\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push('QPHPrestigeOffering');\r\n\t\t\t}\r\n\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === 'own_live' ||\r\n\t\t\thomeOccupancy === 'rent_live' ||\r\n\t\t\thomeOccupancy === 'own_holidayhome') &&\r\n\t\t\t(buildingType === 'unit' || buildingType === 'flat') &&\r\n\t\t\tneeds.contents\r\n\t\t) {\r\n\t\t\tofferings.push('QPHStrataContentsOffering');\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push('QPHPrestigeOffering');\r\n\t\t\t}\r\n\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === 'own_rent_tenants' ||\r\n\t\t\thomeOccupancy === 'own_rent_tenants_causalbasis' ||\r\n\t\t\thomeOccupancy === 'property_used_hostel_or_guest')\r\n\t\t) {\r\n\t\t\tofferings.push('QPHLandlordOffering');\r\n\t\t}\r\n\t\treturn offerings;\r\n\t}\r\n\r\n\tthis.allPaymentFrequencies = {\r\n\t\tannual: 'everyyear',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'everyotherweek',\r\n\t};\r\n\r\n\tthis.defaultPaymentFrequency = this.allPaymentFrequencies.annual;\r\n\r\n\tthis._reversePaymentFrequenciesLookup = {\r\n\t\tyearly: 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'fortnightly',\r\n\t};\r\n\r\n\tthis.allQuoteTypes = {\r\n\t\tfull: 'Full',\r\n\t\tquick: 'Quick',\r\n\t};\r\n\r\n\tthis.defaultOffering = this.allOfferings.QPHStandardOffering ;\r\n\r\n\tthis.quoteRuleOptions = {\r\n\t\t// Rapid estimate quote options\r\n\t\t'rapidEstimate': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.estimate' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tuseSelectedOffering: false,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.property': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.property' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.building': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.building'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.covers': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.covers'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.details': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.details'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.quote': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.contact': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.additional'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.payment': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.testQuoteDeclineOptions = {\r\n\t\t'home.estimate' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.estimate'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.property' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.property'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.building' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.building'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.covers' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.covers'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.details' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.details'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.quote' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.contact' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.additional'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.payment' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t}\r\n\r\n\t/** cover type for home needs to be determine in step 1 and cannot be defaulted */\r\n\tthis.defaultCoverType = null;\r\n\tthis.defaultRequotePageName = 'home.quote';\r\n}\r\n","function HouseCommonData(userInputRepository, houseForm) {\r\n\r\n var commonData = null ;\r\n\r\n this.data = {} ;\r\n\r\n function set(item, value) {\r\n commonData[item] = value ;\r\n }\r\n\r\n function getCommonMaterial() {\r\n return houseForm.commonMaterial ;\r\n }\r\n\r\n\r\n}\r\n"," 'use strict';\r\n \r\n /**\r\n * track virtual page views for all page.\r\n */ \r\n function JWTTimeoutService($state, jwtHelper, storage, labelService, MODULE_INFO) {\r\n\r\n function isSessionTimedout() {\r\n \tvar eyUserToken = storage.getItem('eyUserToken');\r\n \tif( typeof(eyUserToken) == 'string' &&\r\n\t\t\tjwtHelper.isTokenExpired(eyUserToken)){\r\n\t\t\treturn true;\r\n\t } else {\r\n\t \treturn false;\r\n\t }\r\n\r\n \t}\r\n\r\n \tfunction handleTimeout() {\r\n \t\tvar sessionTimeoutMessage = labelService.getGlobalOptionLabel('content', 'session_timeout_message');\r\n \t\talert(sessionTimeoutMessage || 'Your session has timed out!');\r\n\t\tstorage.clear();\r\n\t\t$state.go(MODULE_INFO.startRouteName);\r\n \t}\r\n\r\n return {\r\n \tisSessionTimedout : isSessionTimedout,\r\n \thandleTimeout : handleTimeout\t\r\n } \r\n }\r\n","\"use strict\";\r\n\r\nfunction LabelService(DOM) {\r\n\tvar schema = {} ;\r\n\tvar section_schema = {};\r\n\tvar remoteOptions = {} ;\r\n\tvar globals = {} ;\r\n\tvar genericValidationMessages = {} ;\r\n\tvar content = {} ;\r\n\tvar campaigns = {} ;\r\n\r\n\tDOM.addEventListener('register-labels', function (e) {\r\n\t\tregisterLabels(DOM);\r\n\t}, false);\r\n\r\n\tfunction registerLabels(conf) {\r\n\t\tschema = conf.qbe.fieldLabels;\r\n\t\tsection_schema = conf.qbe.sectionLabels;\r\n\t\tgenericValidationMessages = conf.qbe.validationMessages ;\r\n\t\tcontent = conf.qbe.content;\r\n\t\tcampaigns = conf.qbe.campaigns;\r\n\t\tglobals = conf.globals;\r\n\t}\r\n\r\n\tfunction extractLabelsFor(fieldName) {\r\n\t\tvar field = schema[fieldName] ;\r\n\t\tif ( ! field ) {\r\n\t\t\treturn '' ;\r\n\t\t\t// throw fieldName + ' does not exist in the form schema';\r\n\t\t}\r\n\r\n\t\treturn schema[fieldName] ;\r\n\t}\r\n\r\n\tfunction extractSectionLabelsFor(fieldName) {\r\n\t\tvar field = section_schema[fieldName] ;\r\n\t\tif ( ! field ) {\r\n\t\t\treturn '' ;\r\n\t\t\t// throw fieldName + ' does not exist in the form schema';\r\n\t\t}\r\n\r\n\t\treturn section_schema[fieldName] ;\r\n\t}\r\n\r\n\tfunction extractContentLabelsFor(fieldName) {\r\n\t\tvar field = content[fieldName] ;\r\n\t\tif ( ! field ) {\r\n\t\t\treturn '' ;\r\n\t\t\t// throw fieldName + ' does not exist in the form schema';\r\n\t\t}\r\n\r\n\t\treturn content[fieldName] ;\r\n\t}\r\n\r\n\tfunction extractCampaignInfoFor(campaignId) {\r\n\t\treturn function findCampaignById(campaigns) {\r\n\t\t\tvar campaign;\r\n\t\t\tangular.forEach(campaigns, function(c){\r\n\t\t\t\tif ( c.sc_camp == campaignId){\r\n\t\t\t\t\treturn campaign = c ; \t\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn campaign;\r\n\t\t}(campaigns) ;\r\n\t}\r\n\r\n\tfunction getObjectValue(fieldName, fieldLabel) { \r\n\t\treturn extractLabelsFor(fieldName)[fieldLabel] ;\r\n\t}\r\n\r\n\tfunction getLabelFor(fieldName) {\r\n\t\treturn extractLabelsFor(fieldName)['label'] ;\r\n\t}\r\n\r\n\tfunction getSectionLabelFor(fieldName) {\r\n\t\treturn extractSectionLabelsFor(fieldName)['sectionHeadingText'] ;\r\n\t}\r\n\r\n\tfunction getSectionDescriptionFor(fieldName) {\r\n\t\treturn extractSectionLabelsFor(fieldName)['sectionDescriptionText'] ;\r\n\t}\r\n\r\n\tfunction getHintTextFor(fieldName) {\r\n\t\treturn extractLabelsFor(fieldName)['hintText'] ;\r\n\t}\r\n\r\n\tfunction getHelpTextFor(fieldName) {\r\n\t\treturn extractLabelsFor(fieldName)['extendedHintText'] ;\r\n\t}\r\n\r\n\tfunction getTooltipFor(fieldName) {\r\n\t\treturn extractLabelsFor(fieldName)['tooltip'] ;\r\n\t}\r\n\r\n\tfunction getSecondaryInfoTextFor(fieldName){\r\n\t\treturn extractLabelsFor(fieldName)['secondaryInfoText'];\r\n\t}\r\n\r\n\tfunction getValidationMessagesFor(fieldName, rule) {\r\n\t\tvar validations = extractLabelsFor(fieldName)['validationMessages'] ;\r\n\t\tif ( ! validations || ! validations[rule] )\r\n\t\t\treturn getGenericValidationMessageFor(rule) ;\r\n\r\n\t\treturn validations[rule];\r\n\t}\r\n\r\n\tfunction getGenericValidationMessageFor(rule) {\r\n\t\treturn genericValidationMessages[rule] ;\r\n\t}\r\n\r\n\tfunction getOptionsFor(fieldName) {\r\n\t\treturn schema[fieldName].options;\r\n\t}\r\n\r\n\tfunction getGlobalOptionsFor(fieldName) {\r\n\t\treturn globals[fieldName].options;\r\n\t}\r\n\r\n\tfunction getLabelForRemoteOption(fieldName, option) {\r\n\t\t//return schema[fieldName].remoteOptions[options];\r\n\t\tvar arr = schema[fieldName].remoteOptions;\r\n\t\tvar obj = arr.filter(function ( obj ) {\r\n\t\t\treturn obj.key === option;\r\n\t\t})[0];\r\n\t\treturn obj;\r\n\t}\r\n\r\n\tfunction getSecondaryInfoTextFlag(fieldName){\r\n\t\treturn Boolean(schema[fieldName]['secondaryInfoTextDisplayOn']);\r\n\t}\r\n\r\n\r\n\tfunction getContent(fieldName) {\r\n\t\treturn extractContentLabelsFor(fieldName);\r\n\t}\r\n\r\n\tfunction getGlobalOptionLabel(optionType, optionValue) {\r\n\t\tvar optionKeyValues = this.getGlobalOptionsFor(optionType) ;\r\n\t\tvar label = null;\r\n\t\tif ( optionKeyValues ) {\r\n\t\t\tangular.forEach(optionKeyValues, function(option){\r\n\t\t\t\tif ( option.value == optionValue )\r\n\t\t\t\t\tlabel = option.label ;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn label;\r\n\t}\r\n\tfunction getGlobalOption(optionType, optionValue) {\r\n\t\tvar optionKeyValues = this.getGlobalOptionsFor(optionType) ;\r\n\t\tvar returnOption = null;\r\n\t\tif ( optionKeyValues ) {\r\n\t\t\tangular.forEach(optionKeyValues, function(option){\r\n\t\t\t\tif ( option.value === optionValue )\r\n\t\t\t\t\treturnOption = option ;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn returnOption;\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit:registerLabels,\r\n\t\tgetObjectValue: getObjectValue,\r\n\t\tgetLabelFor: getLabelFor,\r\n\t\tgetSectionLabelFor: getSectionLabelFor,\r\n\t\tgetSectionDescriptionFor: getSectionDescriptionFor,\r\n\t\tgetHintTextFor: getHintTextFor,\r\n\t\tgetHelpTextFor: getHelpTextFor,\r\n\t\tgetTooltipFor: getTooltipFor,\r\n\t\tgetValidationMessagesFor: getValidationMessagesFor,\r\n\t\tgetGenericValidationMessageFor: getGenericValidationMessageFor,\r\n\t\tgetOptionsFor: getOptionsFor,\r\n\t\tgetGlobalOptionsFor: getGlobalOptionsFor,\r\n\t\tgetLabelForRemoteOption: getLabelForRemoteOption,\r\n\t\tgetContent: getContent,\r\n\t\textractCampaignInfoFor: extractCampaignInfoFor,\r\n\t\tgetSecondaryInfoTextFor: getSecondaryInfoTextFor,\r\n\t\tgetSecondaryInfoTextFlag: getSecondaryInfoTextFlag,\r\n\t\tgetGlobalOptionLabel: getGlobalOptionLabel,\r\n\t\tgetGlobalOption: getGlobalOption\r\n\t};\r\n}\r\n","\"use strict\";\r\n\r\nfunction MAService(serviceWrapper, campaignService) {\r\n var endpoint= '/api/qbe/marketing';\r\n\r\n function send(event, data) {\r\n\r\n if ( ! qbe.marketing || ! qbe.marketing.Marketing)\r\n return;\r\n\r\n //var isFullQuote = false;\r\n //if (data.pageName != 'vehicle.vehicle' && data.pageName != 'vehicle.drivers' && data.pageName != 'rapid-estimate')\r\n // isFullQuote = true;\r\n var isSave = (event === 'save');\r\n var isfromRapidEstimate = (data.pageName === 'rapid-estimate');\r\n var isDeclined = (event === 'declined');\r\n\r\n //debugger;\r\n var qbeContact = {\r\n\r\n EmailAddress: data.policyEmail ? data.policyEmail : null,\r\n Enrol: false,\r\n Unenrol: false,\r\n Address : data.address ? data.address : null,\r\n ContactNumber : data.contactNumber ? data.contactNumber : null,\r\n InceptionDate : data.inceptionDate ? data.inceptionDate : null,\r\n Product: {\r\n\r\n QuoteReferenceId: data.quoteId ? data.quoteId : null,\r\n CoverType: data.annualResult?(data.annualResult.coverType ? data.annualResult.coverType : (data.monthlyResult.coverType ? data.monthlyResult.coverType : null)):null,\r\n PromotionalCode: data.campaignCode ? data.campaignCode : null,\r\n NoClaimBonus: data.noClaimBonus ? data.noClaimBonus : null,\r\n Declined: isDeclined\r\n }\r\n }\r\n\r\n if (!isfromRapidEstimate)\r\n {\r\n if (data.mainPolicyHolder != null) {\r\n qbeContact.FirstName = data.mainPolicyHolder.firstName ? data.mainPolicyHolder.firstName : null;\r\n qbeContact.Surname = data.mainPolicyHolder.lastName ? data.mainPolicyHolder.lastName : null;\r\n\r\n qbeContact.DOB = data.mainPolicyHolder.dateOfBirth ? data.mainPolicyHolder.dateOfBirth : null;\r\n\r\n qbeContact.State = data.state ? data.state : null;\r\n qbeContact.PostCode = data.postCode ? data.postCode : null;\r\n }\r\n\r\n qbeContact.SaveQuoteOutcomeId = qbe.marketing.Marketing.SaveOutcome ? qbe.marketing.Marketing.SaveOutcome : null;\r\n qbeContact.TriggerSaveOutcome= isSave;\r\n qbeContact.SaveQuoteGoalId= qbe.marketing.Marketing.SaveGoal ? qbe.marketing.Marketing.SaveGoal : null;\r\n qbeContact.OutcomeId= qbe.marketing.Marketing.Outcome ? qbe.marketing.Marketing.Outcome : null;\r\n qbeContact.EngagementPlanId= qbe.marketing.Marketing.EngagementPlan ? qbe.marketing.Marketing.EngagementPlan : null;\r\n qbeContact.EngagementStateId=qbe.marketing.Marketing.EngagementState ? qbe.marketing.Marketing.EngagementState : null;\r\n qbeContact.Unenrol= qbe.marketing.Marketing.Unenrol ? qbe.marketing.Marketing.Unenrol : false;\r\n qbeContact.Enrol= isSave;\r\n qbeContact.Product.InsuranceType= qbe.marketing.Marketing.InsuranceType;\r\n }\r\n\r\n var isFullQuote = false;\r\n if(data.monthlyResult && data.monthlyResult.paymentPlan && data.monthlyResult.paymentPlan.installment){\r\n isFullQuote = true;\r\n }\r\n\r\n // var isFullQuote = data.monthlyResult.paymentPlan.installment? true : false;\r\n\r\n if (isFullQuote) {\r\n qbeContact.Product.FullQuoteAnnualPremium = data.annualResult.totalPremium ? data.annualResult.totalPremium.toFixed(2) : null;\r\n qbeContact.Product.FullQuoteMonthlyPremium = data.monthlyResult.paymentPlan.installment ? data.monthlyResult.paymentPlan.installment.toFixed(2) : null;\r\n qbeContact.Product.FullQuoteMonthlyTotal = data.monthlyResult.totalPremium ? data.monthlyResult.totalPremium.toFixed(2) : null;\r\n\r\n qbeContact = createPremiumBreakdown(qbeContact, data);\r\n\r\n } else {\r\n qbeContact.Product.QuickQuoteAnnualPremium = data.annualResult?(data.annualResult.totalPremium ? data.annualResult.totalPremium.toFixed(2) : null):null;\r\n qbeContact.Product.QuickQuoteMonthlyPremium = data.monthlyResult?(data.monthlyResult.totalPremium ? data.monthlyResult.totalPremium.toFixed(2) : null):null;\r\n //qbeContact.Product.QuickQuoteMonthlyTotal = data.monthlyResult.totalPremium ? data.monthlyResult.totalPremium : null;\r\n\r\n qbeContact = createPremiumBreakdown(qbeContact, data);\r\n }\r\n\r\n var activeCampaign = campaignService.getCampaign() ;\r\n if (activeCampaign) {\r\n qbeContact.Product.CampaignId = activeCampaign.sc_camp;\r\n qbeContact.Product.CampaignHeader = activeCampaign.header;\r\n qbeContact.Product.CampaignImgUrl = activeCampaign.emailImageUrl ? activeCampaign.emailImageUrl : activeCampaign.imgURL;\r\n qbeContact.Product.CampaignTerms = activeCampaign.termsAndConditions;\r\n }\r\n\r\n var req = {\r\n method: 'POST',\r\n url: endpoint,\r\n data: qbeContact\r\n }\r\n\r\n serviceWrapper(req).then(function () {\r\n console.log('successfully called the goal API')\r\n }, function (error) {\r\n console.log(error.status + ' : ' + error.statusText);\r\n });\r\n }\r\n\r\n function mergeContacts(event, data) {\r\n try {\r\n send(event, data);\r\n } catch(ex) {\r\n console.log(ex) ;\r\n }\r\n }\r\n\r\n function createPremiumBreakdown(qbeContact, data) {\r\n qbeContact.Product.AnnualPremium = data.annualResult.quoteResult.premiumAfterDiscount ? data.annualResult.quoteResult.premiumAfterDiscount.toFixed(2) : null;\r\n qbeContact.Product.AnnualTotalFSL = data.annualResult.quoteResult.totalFSL ? data.annualResult.quoteResult.totalFSL.toFixed(2) : null;\r\n qbeContact.Product.AnnualTotalGST = data.annualResult.quoteResult.totalGST ? data.annualResult.quoteResult.totalGST.toFixed(2) : null;\r\n qbeContact.Product.AnnualStampDuty = data.annualResult.quoteResult.totalStampDuty ? data.annualResult.quoteResult.totalStampDuty.toFixed(2) : null;\r\n qbeContact.Product.MonthlyPremium = data.monthlyResult.quoteResult.premiumAfterDiscount ? data.monthlyResult.quoteResult.premiumAfterDiscount.toFixed(2) : null;\r\n qbeContact.Product.MonthlyTotalFSL = data.monthlyResult.quoteResult.totalFSL ? data.monthlyResult.quoteResult.totalFSL.toFixed(2) : null;\r\n qbeContact.Product.MonthlyTotalGST = data.monthlyResult.quoteResult.totalGST ? data.monthlyResult.quoteResult.totalGST.toFixed(2) : null;\r\n qbeContact.Product.MonthlyStampDuty = data.monthlyResult.quoteResult.totalStampDuty ? data.monthlyResult.quoteResult.totalStampDuty.toFixed(2) : null; \r\n\r\n return qbeContact;\r\n }\r\n\r\n return {\r\n mergeContacts: mergeContacts\r\n };\r\n}\r\n","(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t\t.module('qbePortal')\r\n\t\t.service('paymentLoggerService', paymentLoggerService);\r\n\r\n\tpaymentLoggerService.$inject = [\r\n\t\t'$log',\r\n\t\t'$http',\r\n\t\t'Util',\r\n\t\t'quoteModelFactory',\r\n\t\t'MODULE_INFO',\r\n\t\t'storage'\r\n\t];\r\n\tfunction paymentLoggerService(\r\n\t\t$log,\r\n\t\t$http,\r\n\t\tutil,\r\n\t\tquoteModelFactory,\r\n\t\tMODULE_INFO,\r\n\t\tstorage\r\n\t) {\r\n\t\tthis.trackQuoteStatus = trackQuoteStatus;\r\n\t\tvar endpoint = '/api/QuoteAndBuyLog/QuoteAndBuyLogger'; // put sitecore endpoint here\r\n\r\n\t\tfunction trackQuoteStatus(serviceCallStatus, nextStep, response) {\r\n\t\t\tvar processData = {};\r\n\t\t\ttry {\r\n\t\t\t\tif (MODULE_INFO.id === 'payments') {\r\n\t\t\t\t\tvar referenceNumber = util.b64DecodeUnicode(\r\n\t\t\t\t\t\tstorage.getItem('unauth-reference')\r\n\t\t\t\t\t);\r\n\t\t\t\t\tprocessData = {\r\n\t\t\t\t\t\tquoteId: referenceNumber,\r\n\t\t\t\t\t\tcurrentService: serviceCallStatus,\r\n\t\t\t\t\t\tnextService: nextStep,\r\n\t\t\t\t\t\tresponse: JSON.stringify(response)\r\n\t\t\t\t\t};\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\t\t\t\tquoteId = quoteModel.quoteId;\r\n\t\t\t\t\tprocessData = {\r\n\t\t\t\t\t\tquoteId: quoteId,\r\n\t\t\t\t\t\tcurrentService: serviceCallStatus,\r\n\t\t\t\t\t\tnextService: nextStep,\r\n\t\t\t\t\t\tresponse: JSON.stringify(response)\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t$log.log(processData);\r\n\t\t\t\tsendLogs(processData);\r\n\t\t\t} catch (error) {\r\n\t\t\t\t$log.log(error);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction sendLogs(processData) {\r\n\t\t\tvar req = {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\turl: endpoint,\r\n\t\t\t\tdata: processData\r\n\t\t\t};\r\n\r\n\t\t\t$http(req).then(\r\n\t\t\t\tfunction() {\r\n\t\t\t\t\t$log.log('successfully called the logger API');\r\n\t\t\t\t},\r\n\t\t\t\tfunction(error) {\r\n\t\t\t\t\t$log.log(error.status + ' : ' + error.statusText);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n})();\r\n","\"use strict\";\r\n\r\nfunction PaymentService(\r\n\tserviceWrapper,\r\n\tportalServiceWrapper,\r\n\t$state,\r\n\tstorage,\r\n\tuserInputRepository,\r\n\tquoteModelFactory,\r\n\tutil,\r\n\tquoteOptions,\r\n\tpaymentLoggerService\r\n) {\r\n\tvar EMBARGO_STATE = \"embargo\";\r\n\r\n\tfunction getItemById (key, configs) {\r\n\t\tfor (var i = 0; i < configs.length; i++) {\r\n\t\t\tif (configs[i].id === key) {\r\n\t\t\t\treturn configs[i].title;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn '';\r\n\t};\r\n\r\n\t//global variable from page layout\r\n\t// return data structure {clientId: '', clientSecret: '', merchantIdentifier: '', mulesoftFlexiMicroformApiUrl: ''}\r\n\tfunction getPaybillConfig() {\r\n\t\t//return endpointUrls.payments.ausPortalUISettings;\r\n\t\treturn appConfigs.payments.ausPortalUISettings;\r\n\t}\r\n\r\n\t/* call mulesoft to prepare tokenization of cc number */\r\n\tfunction initialCreditcardPayment(initialCreditcardPaymentUrl, host, guid, merchantId, clientId, clientSecret, successCallback, errorCallback) {\r\n\t\tserviceWrapper.initialCreditcardPayment(initialCreditcardPaymentUrl, host, guid, merchantId, clientId, clientSecret)\r\n\t\t.then(function(response) {\r\n\t\t\tvar jwk = response.data.jwk;\r\n\t\t\tsuccessCallback(jwk);\r\n\t\t})\r\n\t\t.catch(function(error) {\r\n\t\t\terrorCallback(error);\r\n\t\t});\r\n\t}\r\n\r\n\tfunction generateUniqueId() {\r\n\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { \r\n\t\t\tvar r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8); \r\n\t\t\treturn v.toString(16); \r\n\t\t });\r\n\t}\r\n\tfunction getKeyData(jwk, cardNumberFieldId, cardNumberLabelId, placeholderText) {\r\n return {\r\n keyId: jwk.kid,\r\n keystore: jwk,\r\n container: cardNumberFieldId,\r\n label: cardNumberLabelId,\r\n placeholder: placeholderText,\r\n styles: {\r\n 'input': {\r\n 'font-family': 'Verdana',\r\n 'font-size': '15px',\r\n 'line-height': '1.5',\r\n\t\t\t\t\t'color': '#343e44'\r\n },\r\n ':focus': {'color': '#343e44'},\r\n ':disabled': {'cursor': 'not-allowed'},\r\n 'valid': {'color': '#343e44'},\r\n 'invalid': {'color': '#343e44'},\r\n },\r\n encryptionType: 'rsaoaep'\r\n };\r\n }\r\n function flexiFormFunction (microformInstance, payButton, cardExpirationMonth, cardExpirationYear, flexResponse, submitForm) {\r\n\r\n // intercept the form submission and make a tokenize request instead\r\n payButton.addEventListener('click', function () {\r\n\r\n // Send in optional parameters from other parts of your payment form\r\n var options = {\r\n cardExpirationMonth: cardExpirationMonth, //expMonth.value,\r\n cardExpirationYear: cardExpirationYear, //expYear.value\r\n };\r\n\r\n microformInstance.createToken(options, function (err, response) {\r\n if (err) {\r\n console.log(err);\r\n return;\r\n }\r\n\r\n // At this point the token may be added to the form\r\n // as hidden fields and the submission continued\r\n flexResponse.value = JSON.stringify(response);\r\n submitForm();\r\n });\r\n });\r\n }\r\n\t/**\r\n\t * Pays by credit card\r\n\t * The entire flow is as follows:\r\n\t * \t1 - Create a payment with GuideWire\r\n\t * \t2 - Generate Cybersource form data using response from GuideWire and credit card data entered by the user\r\n\t * \t3 - Convert the form data into a form (in an iFrame on the Payments page)\r\n\t * \t4 - The following happens in the iFrame\r\n\t * \t\t4.1 - Submit the form (in the iFrame) to Cybersource using a form.submit()\r\n\t * \t\t4.2 - Cybersource responds back with an HTML page that contains a form. This form auto-submits to GuideWire\r\n\t * \t\t4.3 - Guidewire loads a callback page (Angular) in the iFrame. This page tells the parent (Payment) page that the payment was successful/unsuccessful\r\n\t * \t5 - When the Payment page receives the payment complete from the iFrame, transition to the Confirmation page\r\n\t *\r\n\t * @param {Object} creditCard\t\t\t\t\tObject with credit card data submitted by user\r\n\t * @param {Function} successCallback\t\t\tSuccess callback that accepts argument of type `Object` with form data to submit to Cybersource\r\n\t * @param errorCallback\t\t\t\t\t\t\tError callback that accepts argument argument of type `ErrorResponse`\r\n\t */\r\n\tfunction payByCreditCard(creditCard, successCallback, errorCallback) {\r\n\t\tportalServiceWrapper.updateQuote(userInputRepository.get());\r\n\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\tportalServiceWrapper\r\n\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\tissueCheck: \"true\",\r\n\t\t\t\tquote: \"true\"\r\n\t\t\t})\r\n\t\t\t.then(function(response) {\r\n\t\t\t\ttestEmbargoDecline(response);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"attempting to save quote-credit card\",\r\n\t\t\t\t\t\"generate cybersource form data\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\treturn _createCreditCardPayment();\r\n\t\t\t})\r\n\t\t\t.then(function(_createCreditCardPaymentResponse) {\r\n\t\t\t\tvar formData = _generateCybersourceFormData(\r\n\t\t\t\t\t_createCreditCardPaymentResponse,\r\n\t\t\t\t\tcreditCard\r\n\t\t\t\t);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"generating Cybersource form data\",\r\n\t\t\t\t\t\"submit payment to Cybersource\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(formData);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"saveQuote error-credit card\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t\tif (response.declineType === \"embargo\")\r\n\t\t\t\t\t$state.go(EMBARGO_STATE, response);\r\n\t\t\t\telse if (errorCallback) {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-credit card');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\terrorCallback(response);\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction unAuthCreditCardPayment(\r\n\t\tcreditCard,\r\n\t\tsuccessCallback,\r\n\t\terrorCallback\r\n\t) {\r\n\t\tvar paymentData = {\r\n\t\t\treferenceID: creditCard.referenceNumber,\r\n\t\t\tpaymentType: creditCard.paymentType,\r\n\t\t\tredirectUrl: $state.href(\r\n\t\t\t\t\"cybersourceCallback\",\r\n\t\t\t\t{},\r\n\t\t\t\t{\r\n\t\t\t\t\tabsolute: true\r\n\t\t\t\t}\r\n\t\t\t),\r\n\t\t\tpayWithToken: true,\r\n\t\t\tpayment_token: creditCard.cardToken\r\n\t\t};\r\n\r\n\t\t// call GW to get to create payload\r\n\t\tserviceWrapper\r\n\t\t\t.createCreditcardPayment(paymentData)\r\n\t\t\t.then(function(_createCreditCardPaymentResponse) {\r\n\t\t\t\tvar formData = _generateCybersourceFormData(\r\n\t\t\t\t\t_createCreditCardPaymentResponse,\r\n\t\t\t\t\tcreditCard\r\n\t\t\t\t);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"generating Cybersource form data\",\r\n\t\t\t\t\t\"submit payment to Cybersource\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(formData);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"pay bills error-credit card\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\tgtmService.trackApiError(response.status, 'pay bills error-credit card');\r\n\t\t\t\t}\r\n\r\n\t\t\t\terrorCallback(response);\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction unAuthPaypalPayment(paymentInfo, successCallback, errorCallback) {\r\n\t\tvar paymentData = {\r\n\t\t\treferenceID: paymentInfo.referenceNumber,\r\n\t\t\tpaymentType: paymentInfo.paymentType,\r\n\t\t\tredirectUrl: $state.href(\r\n\t\t\t\t\"paypalCallback\",\r\n\t\t\t\t{},\r\n\t\t\t\t{\r\n\t\t\t\t\tabsolute: true\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t};\r\n\r\n\t\tserviceWrapper\r\n\t\t\t.createPaypalPayment(paymentData)\r\n\t\t\t.then(function(_createPaypalPaymentResponse) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"generating Paypal payment response\",\r\n\t\t\t\t\t\"submit payment to Paypal\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(_createPaypalPaymentResponse.data.redirectURL);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"pay bills error-paypal\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\tgtmService.trackApiError(response.status, 'pay bills error-paypal');\r\n\t\t\t\t}\r\n\r\n\t\t\t\terrorCallback(response);\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Pays by PayPal\r\n\t * The flow is as follows:\r\n\t * \t1 - Create a payment with GuideWire\r\n\t * \t2 - GuideWire responds with a PayPal redirect URL\r\n\t * \t3 - The browser is redirected to PayPal (using the redirect URL returned from the GuideWire service)\r\n\t * \t4 - User completes payment in PayPal and is redirected back to a PayPal Payment Success page (Angular page)\r\n\t * \t5 - If success parameters are passed to the PayPal Payment Success Page, send data to GuideWire PayPal Success service\r\n\t * \t6 - Transition to Confirmation Page\r\n\t *\r\n\t * @param {Function} successCallback\t\t\tSuccess callback that accepts argument `redirectUrl` of type `String`\r\n\t * @param {Function} errorCallback\t\t\t\tError callback that accepts argument argument of type `ErrorResponse`\r\n\t */\r\n\tfunction payByPaypal(successCallback, errorCallback) {\r\n\t\tportalServiceWrapper.updateQuote(userInputRepository.get());\r\n\r\n\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\tportalServiceWrapper\r\n\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\tissueCheck: \"true\",\r\n\t\t\t\tquote: \"true\"\r\n\t\t\t})\r\n\t\t\t.then(function(response) {\r\n\t\t\t\ttestEmbargoDecline(response);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"attempting to save quote-paypal\",\r\n\t\t\t\t\t\"generate Paypal payment response\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\treturn _createPaypalPayment();\r\n\t\t\t})\r\n\t\t\t.then(function(_createPaypalPaymentResponse) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"generating Paypal payment response\",\r\n\t\t\t\t\t\"submit payment to Paypal\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(_createPaypalPaymentResponse.data.redirectURL);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"saveQuote error-paypal\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t\tif (response.declineType === \"embargo\") {\r\n\t\t\t\t\t$state.go(EMBARGO_STATE, response);\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-paypal. Declined. Type: embargo.');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\telse if (errorCallback) {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-paypal');\r\n\t\t\t\t\t}\r\n\t\t\t\t\terrorCallback(response);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction unAuthDirectDebitPayment(\r\n\t\tbankAccount,\r\n\t\tsuccessCallback,\r\n\t\terrorCallback\r\n\t) {\r\n\t\tbankAccount.bsb = convertBsbNumberToGuidewireFormat(bankAccount.bsb);\r\n\r\n\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\tpaymentData = {\r\n\t\t\t\tamount: bankAccount.amountPay,\r\n\t\t\t\treferenceID: bankAccount.referenceNumber,\r\n\t\t\t\tpaymentType: bankAccount.paymentType,\r\n\t\t\t\tbsbNumber: bankAccount.bsb,\r\n\t\t\t\tbankAccountNumber: bankAccount.accountNumber,\r\n\t\t\t\taccountHolderName: bankAccount.accountName\r\n\t\t\t};\r\n\r\n\t\tserviceWrapper\r\n\t\t\t.createDirectDebitPayment(paymentData)\r\n\t\t\t.then(function(_createDirectDebitPaymentResponse) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"create direct debit payment response\",\r\n\t\t\t\t\t\"create direct debit payment\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(_createDirectDebitPaymentResponse.data);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"pay bills error-direct debit\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\tgtmService.trackApiError(response.status, 'pay bills error-direct debit');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (errorCallback) {\r\n\t\t\t\t\terrorCallback(response);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Pays by Direct Debit\r\n\t * A straight forward AJAX call to the directDebit service\r\n\t * @param {Object} bankAccount\t\t\t\t\tBank account details entered by the user\r\n\t * @param {Function} successCallback\t\t\tSuccess callback that accept service response data as argument\r\n\t * @param {Function} errorCallback\t\t\t\tError callback that accepts service error response as argument\r\n\t */\r\n\tfunction payByDirectDebit(bankAccount, successCallback, errorCallback) {\r\n\t\tportalServiceWrapper.updateQuote(userInputRepository.get());\r\n\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\tportalServiceWrapper\r\n\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\tissueCheck: \"true\",\r\n\t\t\t\tquote: \"true\"\r\n\t\t\t})\r\n\t\t\t.then(function(response) {\r\n\t\t\t\ttestEmbargoDecline(response);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"attempting to save quote-direct debit\",\r\n\t\t\t\t\t\"create direct debit payment\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\treturn _createDirectDebitPayment(bankAccount);\r\n\t\t\t})\r\n\t\t\t.then(function(_createDirectDebitPaymentResponse) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"create direct debit payment response\",\r\n\t\t\t\t\t\"create direct debit payment\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(_createDirectDebitPaymentResponse.data);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"saveQuote error-direct debit\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t\tif (response.declineType === \"embargo\") {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-direct debit. Declined. Type: embargo.');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$state.go(EMBARGO_STATE, response);\r\n\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\telse if (errorCallback) {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-direct debit.');\r\n\t\t\t\t\t}\r\n\t\t\t\t\terrorCallback(response);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction testEmbargoDecline(response) {\r\n\t\t// var data = response.data;\r\n\r\n\t\t// if (data.quoteResult && data.quoteResult.embargo == true) {\r\n\t\t// \tvar declineParams = {\r\n\t\t// \t\tdeclineType: \"embargo\",\r\n\t\t// \t\tdeclineCodes: []\r\n\t\t// \t};\r\n\r\n\t\t// \tdata.quoteResult.uwIssues.forEach(function(element) {\r\n\t\t// \t\tdeclineParams.declineCodes.push(element.typeCode);\r\n\t\t// \t}, this);\r\n\r\n\t\t// \tthrow declineParams;\r\n\t\t// }\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a Direct Debit Payment in GuideWire\r\n\t * Calls the GuideWire service to create a direct debit payment\r\n\t * @param {Object} bankAccount\r\n\t * @private\r\n\t */\r\n\tfunction _createDirectDebitPayment(bankAccount) {\r\n\t\tbankAccount.bsb = convertBsbNumberToGuidewireFormat(bankAccount.bsb);\r\n\r\n\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\tpaymentData = {\r\n\t\t\t\treferenceID: quoteModel.quoteId,\r\n\t\t\t\tpaymentType: \"QUOTE\",\r\n\t\t\t\tbsbNumber: bankAccount.bsb,\r\n\t\t\t\tbankAccountNumber: bankAccount.accountNumber,\r\n\t\t\t\taccountHolderName: bankAccount.accountName\r\n\t\t\t};\r\n\r\n\t\treturn serviceWrapper.createDirectDebitPayment(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts BSB from a number to a string in this format \"XXX-XXX\". As input is a number, leading 0's are removed by default\r\n\t * so function pads with 0s if shorter than 6 digits\r\n\t */\r\n\tfunction convertBsbNumberToGuidewireFormat(bsb) {\r\n\t\tvar bsb = bsb + \"\";\r\n\t\tbsb = util.padNumber(bsb, 6, \"0\");\r\n\t\treturn bsb.match(/.{3}/g).join(\"-\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a Credit Card Payment in GuideWire\r\n\t * Calls the GuideWire service to create a credit card payment. The data returned from this is then augmented with the credit card details, injected into a form and submitted to CyberSource\r\n\t * @private\r\n\t */\r\n\tfunction _createCreditCardPayment() {\r\n\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\tpaymentData = {\r\n\t\t\t\treferenceID: quoteModel.quoteId,\r\n\t\t\t\tpaymentType: \"QUOTE\",\r\n\t\t\t\tredirectUrl: $state.href(\r\n\t\t\t\t\t\"cybersourceCallback\",\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tabsolute: true\r\n\t\t\t\t\t}\r\n\t\t\t\t)\r\n\t\t\t};\r\n\t\treturn serviceWrapper.createCreditcardPayment(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a PayPal Payment in GuideWire\r\n\t * Calls the GuideWire service to create a PayPal payment. The data returned is a redirectURL that is used to redirect the browser to PayPal for payment processing\r\n\t * @private\r\n\t */\r\n\tfunction _createPaypalPayment() {\r\n\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\tpaymentData = {\r\n\t\t\t\treferenceID: quoteModel.quoteId,\r\n\t\t\t\tpaymentType: \"QUOTE\",\r\n\t\t\t\tredirectUrl: $state.href(\r\n\t\t\t\t\t\"paypalCallback\",\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tabsolute: true\r\n\t\t\t\t\t}\r\n\t\t\t\t)\r\n\t\t\t};\r\n\r\n\t\treturn serviceWrapper.createPaypalPayment(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends successful PayPal payment data to GuideWire\r\n\t * @param {String} payerId\t\t\t\t\t\tPayerID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @param {String} sessionId\t\t\t\t\tSessionID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @returns {Promise}\t\t\t\t\t\t\tPromise to fulfil after data is sent to GuideWire service\r\n\t */\r\n\tfunction sendPaypalPaymentToGW(payerId, sessionId) {\r\n\t\tvar paymentData = {\r\n\t\t\tpayerID: payerId,\r\n\t\t\tsessionID: sessionId\r\n\t\t};\r\n\r\n\t\treturn serviceWrapper.sendPaypalPaymentToGw(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends successful Unauthenticated PayPal payment data to GuideWire\r\n\t * @param {String} payerId\t\t\t\t\t\tPayerID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @param {String} sessionId\t\t\t\t\tSessionID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @param {String} paymentId\t\t\t\t\tPaymentID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @returns {Promise}\t\t\t\t\t\t\tPromise to fulfil after data is sent to GuideWire service\r\n\t */\r\n\tfunction unAuthSendPaypalPaymentToGW(payerId, sessionId, paymentId) {\r\n\t\tvar paymentData = {\r\n\t\t\tpayerID: payerId,\r\n\t\t\tsessionID: sessionId,\r\n\t\t\tpaymentID: paymentId\r\n\t\t};\r\n\r\n\t\treturn serviceWrapper.sendPaypalPaymentToGw(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Generates data to submit to CyberSource\r\n\t * This data will be used by a form in an iFrame to generate the form fields, which will then be posted to Cybersource\r\n\t * @param {AJAXResponse} _createCreditCardPaymentResponse\t\t\tResponse from the GuideWire `_createCreditCardPayment` service call\r\n\t * @param {Object} creditCard\t\t\t\t\t\t\t\t\t\tCredit card data submitted by the user\r\n\t * @private\r\n\t */\r\n\tfunction _generateCybersourceFormData(\r\n\t\t_createCreditCardPaymentResponse,\r\n\t\tcreditCard\r\n\t) {\r\n\t\tif (\r\n\t\t\t_createCreditCardPaymentResponse &&\r\n\t\t\t_createCreditCardPaymentResponse.data &&\r\n\t\t\t_createCreditCardPaymentResponse.data.formData\r\n\t\t) {\r\n\t\t\tif (creditCard.cardExpiryDate) {\r\n\t\t\t\tvar date = moment(creditCard.cardExpiryDate, \"MM/YY\");\r\n\t\t\t\tvar formattedDate = date.format(\"MM/YY\");\r\n\t\t\t\tcreditCard.cardExpiryDate = formattedDate.replace(\r\n\t\t\t\t\t/(\\d+)\\//,\r\n\t\t\t\t\t\"$1-20\"\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tvar formData = (creditCard.cardNumber) ?\r\n\t\t\t angular.extend(\r\n\t\t\t\t{},\r\n\t\t\t\t_createCreditCardPaymentResponse.data.formData,\r\n\t\t\t\t{\r\n\t\t\t\t\tcard_type: _getCyberSourceCardType(creditCard.type),\r\n\t\t\t\t\tcard_number: creditCard.cardNumber,\r\n\t\t\t\t\tcard_expiry_date: creditCard.cardExpiryDate,\r\n\t\t\t\t\tcard_cvn: creditCard.cvc,\r\n\t\t\t\t\tmerchant_secure_data1: creditCard.cardHolderName\r\n\t\t\t\t}\r\n\t\t\t )\r\n\t\t\t :\r\n\t\t\t // payment_token is in _createCreditCardPaymentResponse.data.formData\r\n\t\t\t angular.extend(\r\n\t\t\t\t{},\r\n\t\t\t\t_createCreditCardPaymentResponse.data.formData,\r\n\t\t\t\t{\r\n\t\t\t\t\tcard_type: creditCard.type,\r\n\t\t\t\t\tcard_expiry_date: creditCard.cardExpiryDate,\r\n\t\t\t\t\tcard_cvn: creditCard.cvc,\r\n\t\t\t\t\tmerchant_secure_data1: creditCard.cardHolderName,\r\n\t\t\t\t}\r\n\t\t\t );\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts credit card type to Cybersource cardType ID\r\n\t * @param cardType\r\n\t * @returns {String}\r\n\t * @private\r\n\t */\r\n\t function _getCyberSourceCardType(cardType) {\r\n\t\tvar type = \"\";\r\n\r\n\t\tif (cardType) {\r\n\t\t\ttype = cardType.toLowerCase();\r\n\t\t}\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase \"visa\":\r\n\t\t\t\treturn \"001\";\r\n\t\t\tcase \"mastercard\":\r\n\t\t\t\treturn \"002\";\r\n\t\t\tcase \"american express\":\r\n\t\t\t\treturn \"003\";\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetPaybillConfig: getPaybillConfig,\r\n\t\tinitialCreditcardPayment: initialCreditcardPayment,\r\n\t\tgenerateUniqueId: generateUniqueId,\r\n\t\tgetKeyData: getKeyData,\r\n\t\tflexiFormFunction: flexiFormFunction,\r\n\t\tpayByCreditCard: payByCreditCard,\r\n\t\tpayByPaypal: payByPaypal,\r\n\t\tpayByDirectDebit: payByDirectDebit,\r\n\t\tsendPaypalPaymentToGW: sendPaypalPaymentToGW,\r\n\t\tunAuthCreditCardPayment: unAuthCreditCardPayment,\r\n\t\tunAuthPaypalPayment: unAuthPaypalPayment,\r\n\t\tunAuthSendPaypalPaymentToGW: unAuthSendPaypalPaymentToGW,\r\n\t\tunAuthDirectDebitPayment: unAuthDirectDebitPayment\r\n\t};\r\n}\r\n\r\nPaymentService.bootstrap = function(\r\n\t$http,\r\n\t$state,\r\n\tstorage,\r\n\tuserInputRepository,\r\n\tportalServiceWrapper,\r\n\tquoteModelFactory,\r\n\tutil,\r\n\tquoteOptions,\r\n\tpaymentLoggerService\r\n) {\r\n\tvar userToken =\r\n\t\t\"eyJhbGciOiJIUzI1NiJ9.eyJhdXRob3JpdGllcyI6WyJRVU9URToxMDAwMDQwODU2Il0sImlhdCI6MTQ2NDc0ODU1MiwiZXhwIjoxNDY0NzUyMTUyfQ.0GFJ-SxgqEq16Rr1PPC-lhAL0PxblesSRVa2bkRBWxM\";\r\n\r\n\tvar conf = {\r\n\t\tpaybillConfig: function(host) {\r\n\t\t\t//for local\r\n\t\t\tvar host1 = host;\r\n\t\t\tif (host1.indexOf('localhost') !== -1) {\r\n\t\t\t\thost1 = 'https://gsc-sys.au.qbe.com/';\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\tmethod: \"GET\",\r\n\t\t\t\turl: host1 + '/api/spa/v3/configuration?id={89E52B78-FAE0-4B62-A2E1-CDD8F5F8713E}'\r\n\t\t\t}\r\n\t\t},\r\n\t\tinitPaymentToken: function(initPaymentTokenUrl, host, guid, merchantId, clientId, clientSecret) {\r\n\t\t\treturn {\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\turl: initPaymentTokenUrl,\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t\"X-ClientId\": clientId,\r\n\t\t\t\t\t\"X-ClientSecret\": clientSecret,\r\n\t\t\t\t\t\"X-SourceSystem\": \"SIteCore\",\r\n\t\t\t\t\t\"X-TargetOrigin\": host,\r\n\t\t\t\t\t\"X-Mockable\": \"false\"\r\n\t\t\t\t},\r\n\t\t\t\tdata: {\r\n\t\t\t\t\t\"guid\": guid,\r\n\t\t\t\t\t\"merchantIdentifier\": merchantId\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tcreateCreditcardPayment: {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: endpointUrls.payments.createCreditcardPayment,\r\n\t\t\theaders: {\r\n\t\t\t\t\"EY-Access-Key\": \"test123\",\r\n\t\t\t\t\"EY-Product-Type\": \"pc\",\r\n\t\t\t\t\"EY-USER-TOKEN\": userToken,\r\n\t\t\t\t\"X-Requested-By\": \"92tvt8iy2b\"\r\n\t\t\t}\r\n\t\t},\r\n\t\tcreatePaypalPayment: {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: endpointUrls.payments.createPaypalPayment,\r\n\t\t\theaders: {\r\n\t\t\t\t\"EY-Access-Key\": \"test123\",\r\n\t\t\t\t\"EY-Product-Type\": \"pc\",\r\n\t\t\t\t\"EY-USER-TOKEN\": userToken,\r\n\t\t\t\t\"X-Requested-By\": \"92tvt8iy2b\"\r\n\t\t\t}\r\n\t\t},\r\n\t\tcreateDirectDebitPayment: {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: endpointUrls.payments.createDirectDebitPayment,\r\n\t\t\theaders: {\r\n\t\t\t\t\"EY-Access-Key\": \"test123\",\r\n\t\t\t\t\"EY-Product-Type\": \"pc\",\r\n\t\t\t\t\"EY-USER-TOKEN\": userToken,\r\n\t\t\t\t\"X-Requested-By\": \"92tvt8iy2b\"\r\n\t\t\t}\r\n\t\t},\r\n\t\tsendPaypalPaymentToGw: {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: endpointUrls.payments.sendPaypalPaymentToGw,\r\n\t\t\theaders: {\r\n\t\t\t\t\"EY-Access-Key\": \"test123\",\r\n\t\t\t\t\"EY-Product-Type\": \"pc\",\r\n\t\t\t\t\"EY-USER-TOKEN\": userToken,\r\n\t\t\t\t\"X-Requested-By\": \"92tvt8iy2b\"\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tvar serviceWrapper = function() {\r\n\t\treturn {\r\n\t\t\tpaybillConfig: function(host) {\r\n\t\t\t\tvar req = conf.paybillConfig(host);\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tinitialCreditcardPayment: function(initPaymentTokenUrl, host, guid, merchantId, clientId, clientSecret) {\r\n\t\t\t\tvar req = conf.initPaymentToken(initPaymentTokenUrl, host, guid, merchantId, clientId, clientSecret);\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tcreateCreditcardPayment: function(data) {\r\n\t\t\t\tif (storage.getItem(\"eyUserToken\")) {\r\n\t\t\t\t\tuserToken = storage.getItem(\"eyUserToken\");\r\n\t\t\t\t}\r\n\t\t\t\tvar req = conf.createCreditcardPayment;\r\n\t\t\t\treq.data = data;\r\n\t\t\t\treq.headers[\"EY-USER-TOKEN\"] = userToken;\r\n\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tcreatePaypalPayment: function(data) {\r\n\t\t\t\tif (storage.getItem(\"eyUserToken\")) {\r\n\t\t\t\t\tuserToken = storage.getItem(\"eyUserToken\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar req = conf.createPaypalPayment;\r\n\t\t\t\treq.data = data;\r\n\t\t\t\treq.headers[\"EY-USER-TOKEN\"] = userToken;\r\n\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tcreateDirectDebitPayment: function(data) {\r\n\t\t\t\tif (storage.getItem(\"eyUserToken\")) {\r\n\t\t\t\t\tuserToken = storage.getItem(\"eyUserToken\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar req = conf.createDirectDebitPayment;\r\n\t\t\t\treq.data = data;\r\n\t\t\t\treq.headers[\"EY-USER-TOKEN\"] = userToken;\r\n\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tsendPaypalPaymentToGw: function(data) {\r\n\t\t\t\tif (storage.getItem(\"eyUserToken\")) {\r\n\t\t\t\t\tuserToken = storage.getItem(\"eyUserToken\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar req = conf.sendPaypalPaymentToGw;\r\n\t\t\t\treq.data = data;\r\n\t\t\t\treq.headers[\"EY-USER-TOKEN\"] = userToken;\r\n\r\n\t\t\t\treturn $http(req);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\treturn new PaymentService(\r\n\t\tnew serviceWrapper(),\r\n\t\tportalServiceWrapper,\r\n\t\t$state,\r\n\t\tstorage,\r\n\t\tuserInputRepository,\r\n\t\tquoteModelFactory,\r\n\t\tutil,\r\n\t\tquoteOptions,\r\n\t\tpaymentLoggerService\r\n\t);\r\n};\r\n","\"use strict\";\r\n\r\nfunction QuoteModelFactory(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util, $rootScope) {\r\n\tfunction create() {\r\n\t\tquoteOptions.setAvailableQuoteResults(serviceResponseRepository.getLastResponseFrom('quickQuote'));\r\n\r\n\t\tswitch (MODULE_INFO.id) {\r\n\t\t\tcase 'vehicle':\r\n\t\t\t\treturn new QuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util);\r\n\t\t\tcase 'bike':\r\n\t\t\t\treturn new BikeQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util);\r\n\t\t\tcase 'caravan':\r\n\t\t\t\treturn new CaravanQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util);\r\n\t\t\tcase 'payments':\r\n\t\t\t\treturn new PaymentsQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, Util);\r\n\t\t\tcase 'home':\r\n\t\t\t\treturn new HomeQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util, $rootScope);\r\n\t\t\tcase 'ctp':\r\n\t\t\t\treturn new CTPModel(MODULE_INFO, userInputRepository, serviceResponseRepository, Util);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow 'Unknown module info';\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcreate: create\r\n\t}\r\n}\r\n","function QuoteOptions(quoteConfiguration, serviceResponseRepository, quoteResultModelBuilder, storage) {\r\n\r\n\tvar coverTypeClasses = quoteConfiguration.coverTypeClasses;\r\n\r\n\tvar allCoverTypes = quoteConfiguration.allCoverTypes;\r\n\r\n\tvar allCoverTypesByKey = quoteConfiguration.allCoverTypesByKey;\r\n\r\n\tvar allPaymentFrequencies = quoteConfiguration.allPaymentFrequencies;\r\n\r\n\tvar _reversePaymentFrequenciesLookup = quoteConfiguration._reversePaymentFrequenciesLookup;\r\n\r\n\tvar allQuoteTypes = quoteConfiguration.allQuoteTypes;\r\n\r\n\tvar quoteRuleOptions = quoteConfiguration.quoteRuleOptions;\r\n\r\n\tvar testQuoteDeclineOptions = quoteConfiguration.testQuoteDeclineOptions;\r\n\r\n\tvar defaultCoverType = quoteConfiguration.defaultCoverType;\r\n\tvar defaultPaymentFrequency = quoteConfiguration.defaultPaymentFrequency ;\r\n\tvar availableQuoteResults =[];\r\n\tvar defaultRequotePageName = quoteConfiguration.defaultRequotePageName;\r\n\r\n\tvar defaultOffering = quoteConfiguration.defaultOffering || null ;\r\n\r\n\tfunction setSelectedCoverType(coverTypeClass, coverTypeSubClass) {\r\n\t\tif ( ! coverTypeClass )\r\n\t\t\tthrow 'Invalid cover type class provided' ;\r\n\r\n\t\tif ( ! coverTypeSubClass )\r\n\t\t\tcoverTypeSubClass = 'standard' ;\r\n\t\tif (!coverTypeClasses[coverTypeClass] || !coverTypeClasses[coverTypeClass].subClasses[coverTypeSubClass]) {\r\n\t\t selectedCoverType = allCoverTypesByKey[coverTypeClass];\r\n\t\t}\r\n\t\telse {\r\n\t\t selectedCoverType = coverTypeClasses[coverTypeClass].subClasses[coverTypeSubClass];\r\n\t\t}\r\n\t\tif ( ! selectedCoverType) {\r\n\t\t\tconsole.log('Empty cover type selected.');\r\n\t\t}\r\n\r\n\t\tstorage.setItem('selectedCoverType' , selectedCoverType ) ;\r\n\t}\r\n\r\n\tfunction setSelectedOffering(offering) {\r\n\t\tif ( ! offering )\r\n\t\t\tthrow 'Invalid offering provided' ;\r\n\r\n\t\t//get offering object from the configuration\r\n\t\tselectedOffering = quoteConfiguration.allOfferings[offering];\r\n\r\n\t\tif ( ! selectedOffering) {\r\n\t\t\tconsole.log('Empty cover type selected.');\r\n\t\t}\r\n\r\n\t\tstorage.setItem('selectedOffering' , selectedOffering ) ;\r\n\t}\r\n\r\n\tfunction getSelectedOffering(){\r\n\t\tvar so = storage.getItem('selectedOffering');\r\n\t\tif ( ! so.descriptor )\r\n\t\t\tso = defaultOffering;\r\n\t\treturn so;\r\n\t}\r\n\r\n\tfunction setDefaultCoverType() {\r\n\t\tsetSelectedCoverType(defaultCoverType.superType, defaultCoverType.subType);\r\n\t}\r\n\r\n\r\n\tfunction setSelectedPaymentFrequency(paymentFrequency) {\r\n\t\tselectedPaymentFrequency = _reversePaymentFrequenciesLookup[paymentFrequency];\r\n\t\tstorage.setItem('selectedPaymentFrequency' , selectedPaymentFrequency ) ;\r\n\t\tif ( ! selectedPaymentFrequency )\r\n\t\t\tthrow 'Invalid payment frequencey selected' ;\r\n\t}\r\n\r\n\tfunction getSelectedCoverType(){\r\n\t\tvar ct = storage.getItem('selectedCoverType');\r\n\t\tif ( ! ct.descriptor )\r\n\t\t\tct = defaultCoverType;\r\n\t\treturn ct;\r\n\t}\r\n\r\n\tfunction getSelectedPaymentFrequency() {\r\n\t\tvar selectedPaymentFrequency = storage.getItem('selectedPaymentFrequency');\r\n\t\tif ( typeof(selectedPaymentFrequency) != 'string' )\r\n\t\t\tselectedPaymentFrequency = defaultPaymentFrequency ;\r\n\r\n\t\treturn selectedPaymentFrequency;\r\n\t}\r\n\r\n\tfunction getSelectedPaymentFrequencyForService() {\r\n\t\tvar selectedPaymentFrequency = getSelectedPaymentFrequency();\r\n\t\treturn allPaymentFrequencies[selectedPaymentFrequency] ;\r\n\t}\r\n\r\n\tfunction getSelectedQuoteResult() {\r\n\t\tvar selectedQuoteResult = null ;\r\n\t\tvar mergedQuoteResults = getMergedQuoteResults(availableQuoteResults);\r\n\t\tvar coverTypeSelector = getCoverTypeSelector() ; \r\n\t\tif ( mergedQuoteResults && coverTypeSelector )\r\n\t\t\treturn mergedQuoteResults[coverTypeSelector];\r\n\r\n\t\treturn null ;\r\n\t}\r\n\r\n\tfunction getCoverTypeSelector() {\r\n\t\tif (getSelectedCoverType()) {\r\n\t\t\tvar coverTypeSelector = getSelectedCoverType().descriptor ;\r\n\t\t\tvar selectedOffering = getSelectedOffering();\r\n\t\t\tif ( selectedOffering )\r\n\t\t\t\tcoverTypeSelector += '_' + selectedOffering.descriptor ;\r\n\r\n\t\t\treturn coverTypeSelector;\t\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* @return the selected quote result for the selected payment frequency.\r\n\t*/\r\n\tfunction getSelectedQuoteResultForPayment() {\r\n\t\tvar qr = getSelectedQuoteResult() ;\r\n\t\tif ( qr ) {\r\n\t\t\treturn qr.getQuoteResult( getSelectedPaymentFrequency() );\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction setAvailableQuoteResults(quoteResults) {\r\n\t\tavailableQuoteResults = quoteResults ;\r\n\t}\r\n\r\n\tfunction clearQuoteResults() {\r\n\t\tquoteResultModelBuilder.clear() ; \r\n\t}\r\n\r\n\tfunction getMergedQuoteResults(quoteResults) {\r\n\t\tif ( ! quoteResults ) return null;\r\n\r\n\t\tquoteResults.forEach(function(result) {\r\n\t\t\tquoteResultModelBuilder.addQuoteResult(result) ;\r\n\t\t});\r\n\r\n\t\treturn quoteResultModelBuilder.getMergedQuoteResults();\r\n\t}\r\n\r\n\tfunction getAvailableCoverTypes() {\r\n\t\tvar availableQuoteResults = serviceResponseRepository.getLastResponseFrom('quote') ;\r\n\t\tvar availableCoverTypes = [];\r\n\t\tif ( availableQuoteResults ) {\r\n\t\t\tavailableQuoteResults.vehicles[0].availableCoverTypes.forEach(function(qr) {\t\r\n\t\t\t\tavailableCoverTypes.push(allCoverTypesByKey[qr] );\r\n\t\t\t})\r\n\t\t}\r\n\t\treturn availableCoverTypes;\r\n\t}\r\n\r\n\tfunction getAvailableSumInsuredTypes(){\r\n\t\tvar availableQuoteResults = serviceResponseRepository.getLastResponseFrom('quote') ;\r\n\t\tvar availableSumInsuredTypes = [];\r\n\t\tif (availableQuoteResults) {\r\n\t\t if (availableQuoteResults.productCode == \"QPYPersonalMotorcycle\") {\r\n\t\t availableQuoteResults.motorcycles[0].availableSumInsuredTypes.forEach(function (qr) {\r\n\t\t availableSumInsuredTypes.push(qr);\r\n\t\t })\r\n\t\t }\r\n\t\t else {\r\n\t\t availableQuoteResults.vehicles[0].availableSumInsuredTypes.forEach(function (qr) {\r\n\t\t availableSumInsuredTypes.push(qr);\r\n\t\t })\r\n\t\t }\r\n\t\t}\r\n\t\treturn availableSumInsuredTypes;\r\n\t}\r\n\r\n\tfunction isSumInsuredTypeAvailable(insuredType){\r\n\t\tvar availableSumInsuredTypes = getAvailableSumInsuredTypes();\r\n\t\treturn (availableSumInsuredTypes.indexOf(insuredType)>-1);\r\n\t}\r\n\r\n\tfunction isCoverTypeAvailable(coverTypeClass) {\r\n\t\tvar availableCoverTypes = getAvailableCoverTypes() ;\r\n\t\tif (availableCoverTypes) {\r\n\t\t\tfor (var key in availableCoverTypes) {\r\n\t\t\t\tvar ct = availableCoverTypes[key] ;\r\n\t\t\t\tif (ct.superType == coverTypeClass )\r\n\t\t\t\t\treturn true ;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false ;\r\n\t}\r\n\r\n\tfunction isCoverSubTypeAvailable(coverTypeClass, coverTypeSubClass) {\r\n\t\tvar availableCoverTypes = getAvailableCoverTypes() ;\r\n\t\tvar expectedType = coverTypeClasses[coverTypeClass].subClasses[coverTypeSubClass];\r\n\t\treturn availableCoverTypes.indexOf(expectedType) !== -1 ;\r\n\t}\r\n\r\n\tfunction getRequoteOptions(pageName) {\r\n\t\tif ( ! pageName )\r\n\t\t\tpageName = defaultRequotePageName;\r\n\r\n\t\treturn quoteRuleOptions[pageName] ;\r\n\t}\r\n\r\n\tfunction isReplacementAvailable(){\r\n\t\t//not used as this info is not available in vehicle page\r\n\t\tvar availableQuoteResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\tvar sumInsuredTypes = [];\r\n\t\tif(availableQuoteResults && (availableQuoteResults.length>0)){\r\n\t\t\tsumInsuredTypes = availableQuoteResults[0].response.vehicles[0].availableSumInsuredTypes;\r\n\r\n\t\t\tconsole.log(sumInsuredTypes);\r\n\t\t}\r\n\r\n\t\tif(sumInsuredTypes.indexOf('replacement')>-1){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction getTestQuoteDeclineOptions(stepName) {\r\n\t\treturn testQuoteDeclineOptions[stepName];\r\n\t}\r\n\r\n\tfunction getQuickQuoteOptionsForStep(stepName) {\r\n\t\treturn quoteRuleOptions[stepName] ;\r\n\t}\r\n\r\n\tfunction getAllOfferings(){\r\n\t\treturn quoteConfiguration.allOfferings;\r\n\t}\r\n\r\n\tfunction getOfferingPermutations(stepName, coverOptions) {\r\n\t\tvar qqOptions = getQuickQuoteOptionsForStep(stepName);\r\n\t\tif ( ! qqOptions )\r\n\t\t\treturn null;\r\n\r\n\t\tvar offering = null\r\n\t\tif ( qqOptions.permutations.useSelectedOffering == true )\r\n\t\t\toffering = getSelectedOffering() ;\r\n\r\n\t\treturn quoteConfiguration.getOfferingPermutations(qqOptions, coverOptions, getSelectedCoverType(), offering);\r\n\t}\r\n\r\n\tfunction getStateDefaultVoluntaryExcess(state, itemIndex){\r\n\r\n\t\titemIndex = typeof itemIndex !== 'undefined' ? itemIndex : 0;\r\n\t\t\r\n\t\tif(window.globals.defaultExcessMapping == undefined || window.globals.defaultExcessMapping.options == undefined || state == undefined){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar prefix = 'AU_';\r\n\t\tif(state.indexOf(prefix) == -1){\r\n\t\t\tstate = prefix + state;\r\n\t\t}\r\n\r\n\t\tvar excessMapping = window.globals.defaultExcessMapping.options[itemIndex];\r\n\r\n\t\treturn excessMapping[state];\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetQuickQuoteOptionsForStep: getQuickQuoteOptionsForStep,\r\n\t\tgetRequoteOptions: getRequoteOptions,\r\n\t\tsetSelectedCoverType: setSelectedCoverType,\r\n\t\tsetDefaultCoverType: setDefaultCoverType,\r\n\t\tgetSelectedCoverType: getSelectedCoverType,\r\n\t\tsetSelectedPaymentFrequency: setSelectedPaymentFrequency,\r\n\t\tgetSelectedPaymentFrequency: getSelectedPaymentFrequency,\r\n\t\tgetSelectedPaymentFrequencyForService: getSelectedPaymentFrequencyForService,\r\n\t\tgetSelectedQuoteResult: getSelectedQuoteResult,\r\n\t\tgetSelectedQuoteResultForPayment: getSelectedQuoteResultForPayment,\r\n\t\tgetSelectedOffering: getSelectedOffering,\r\n\t\tgetOfferingPermutations: getOfferingPermutations,\r\n\t\tsetSelectedOffering: setSelectedOffering,\r\n\t\tsetAvailableQuoteResults: setAvailableQuoteResults,\r\n\t\tgetMergedQuoteResults: getMergedQuoteResults,\r\n\t\tisCoverTypeAvailable: isCoverTypeAvailable,\r\n\t\tisCoverSubTypeAvailable: isCoverSubTypeAvailable,\r\n\t\tgetTestQuoteDeclineOptions: getTestQuoteDeclineOptions,\r\n\t\tgetAllCoverTypes: function() { return allCoverTypes },\r\n\t\tgetAllPaymentFrequencies: function() {return allPaymentFrequencies},\r\n\t\tgetAllQuoteTypes: function() {return allQuoteTypes},\r\n\t\tgetCoverTypeSelector: getCoverTypeSelector,\r\n\t\tisReplacementAvailable: isReplacementAvailable,\r\n\t\tisSumInsuredTypeAvailable: isSumInsuredTypeAvailable,\r\n\t\tgetAllOfferings:getAllOfferings,\r\n\t\tclearQuoteResults: clearQuoteResults,\r\n\t\tgetStateDefaultVoluntaryExcess: getStateDefaultVoluntaryExcess\r\n\t}\r\n\r\n}\r\n","'use strict' ;\r\n\r\nfunction QuoteResultFilter() {\r\n\treturn {\r\n\t\tfilter : function(filter, list) {\r\n\t\t\tif ( !filter) return list;\r\n\r\n\t\t\tvar filteredList = list.filter(function(quoteResult) {\r\n\t\t\t\treturn !filter.displayCover || filter.displayCover[quoteResult.coverType] === true ;\r\n\t\t\t});\r\n\r\n\t\t\tif ( !!filter.displayOffering ) {\r\n\t\t\t\tfilteredList = filteredList.filter(function(quoteResult) {\r\n\t\t\t\t\treturn ! filter.displayOffering || filter.displayOffering[quoteResult.offering] === true ;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tvar orderedList = filteredList.sort(function(cover1, cover2) {\r\n\t\t\t\tif ( filter.order && filter.order.orderByPrice ){\r\n\t\t\t\t\tvar cover1Bigger = cover1.totalPremium > cover2.totalPremium ;\r\n\t\t\t\t\treturn filter.order.cheapestFirst ? cover1Bigger : ! cover1Bigger ;\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t})\r\n\r\n\t\t\treturn orderedList;\r\n\t\t}\r\n\t}\r\n}\r\n","'use strict';\r\n\r\nfunction QuoteResultModelFactory(MODULE_INFO) {\r\n\tfunction newQuoteResultModel(response) {\r\n\t\tswitch (MODULE_INFO.id) {\r\n\t\t\tcase 'vehicle':\r\n\t\t\t\treturn new VehicleQuoteResultModel(response);\r\n\t\t\tcase 'bike':\r\n\t\t\t\treturn new BikeQuoteResultModel(response);\r\n\t\t\tcase 'caravan':\r\n\t\t\t\treturn new CaravanQuoteResultModel(response);\r\n\t\t\tcase 'home':\r\n\t\t\t\treturn new HomeQuoteResultModel(response);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow 'Unknown module info';\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tnewQuoteResultModel: newQuoteResultModel\r\n\t}\r\n}\r\n","\"use strict\";\r\n\r\nfunction QuoteService(serviceWrapper, quoteModel, Util) {\r\n\r\n\tfunction getQuote() {\r\n\t\treturn serviceWrapper.getQuote();\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetQuote: getQuote\r\n\t}\r\n}\r\n\r\nQuoteService.createDummyService = function ($q, quoteModel, Util) {\r\n\tvar conf = {};\r\n\r\n\tvar serviceWrapper = function () {\r\n\t\treturn {\r\n\t\t\tgetQuote: function (data) {\r\n\t\t\t\treturn $q(function (resolve, reject) {\r\n\t\t\t\t\tresolve({\r\n\t\t\t\t\t\t\"return\": \"data\"\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn new QuoteService(new serviceWrapper());\r\n}\r\n\r\nQuoteService.bootstrap = function (http, $q, quoteModel, Util) {\r\n\tvar conf = {\r\n\t\tgetQuote: {\r\n\t\t\tmethod: 'PUT',\r\n\t\t\turl: '#URL',\r\n\t\t\theaders: {\r\n\t\t\t\t'EY-Access-Key': 'test123',\r\n\t\t\t\t'EY-Product-Type': 'pc',\r\n\t\t\t\t'EY-USER-TOKEN': 'eyJhbGciOiJIUzI1NiJ9.eyJhdXRob3JpdGllcyI6WyJRVU9URToxMDAxMDYyNTc1Il0sImlhdCI6MTQ2Mjg2MTM4OCwiZXhwIjoxNDYyODY0OTg4fQ.u1254ES1-_6com7Y2lSltBkVEV6z_WlP43MwbsuwnjE'\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tvar serviceWrapper = function () {\r\n\t\treturn {\r\n\t\t\tgetQuote: function (data, success, error) {\r\n\t\t\t\tvar req = conf.createPayment;\r\n\t\t\t\treq.params = data;\r\n\t\t\t\thttp(req).then(function (response) {\r\n\t\t\t\t\tsuccess(response);\r\n\t\t\t\t}, function (error) {\r\n\t\t\t\t\tconsole.log(error.status + ' : ' + error.statusText);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn new QuoteService(new serviceWrapper(), quoteModel, Util);\r\n}\r\n","function RegisterFieldDecorator() {\r\n\t\r\n\tfunction attach($scope, params) {\r\n\t\t\r\n\t}\r\n\r\n\treturn {\r\n\t\tattach: attach\r\n\t}\t\r\n}","\"use strict\";\r\n\r\nfunction RegoSearchService(guideWireService, transformers) {\r\n\tvar formData = {},\r\n\t\tgwResponse = {}, // response as received from guideWire\r\n\t\tserviceResponse = {}, // response after being process by any registered transformers\r\n\t\tlastStatus = {}, // error or success in last service call\r\n\t\ttransformers = transformers || {} ;\r\n\r\n\tfunction transformGWResponse(serviceName, resp) {\r\n\t\tvar response = resp;\r\n\t\tif ( transformers.serviceName )\r\n\t\t\tresponse = transformers.serviceName.transform(resp);\r\n\r\n\t\treturn response;\r\n\t}\r\n\r\n\tfunction processErrorResponse(serviceName, resp, errorFn) {\r\n\t\tgwResponse[serviceName]= resp;\r\n\t\tlastStatus[serviceName]=false;\r\n\t\tserviceResponse[serviceName] = transformGWResponse(serviceName, resp);\r\n\t\terrorFn(serviceResponse[serviceName]);\r\n\t}\r\n\r\n\tfunction processSuccessResponse(serviceName, resp, successFn) {\r\n\t\tgwResponse[serviceName]= resp;\r\n\t\tlastStatus[serviceName]= true;\r\n\t\tserviceResponse[serviceName] = transformGWResponse(serviceName, resp);\r\n\t\tsuccessFn(serviceResponse[serviceName]);\r\n\t}\r\n\r\n\tfunction search(data, success, error) {\r\n\r\n\t\tguideWireService.regoSearch(data)\r\n .then(function(response) {\r\n\t\t\t\t//console.log(response.data);\r\n success(response.data);\r\n })\r\n .catch(function(response) {\r\n if(error) {\r\n error(response);\r\n }\r\n });\r\n\t}\r\n\r\n\tfunction searchMake(data, success, error) {\r\n\r\n\t\tguideWireService.makeSearch(data)\r\n .then(function(response) {\t\t\t\t\r\n\t\t\t\tvar data1 = convertSearchMakeResponse(response.data.make);\r\n success(data1);\r\n })\r\n .catch(function(response) {\r\n if(error) {\r\n error(response);\r\n }\r\n });\r\n\t}\r\n\r\n\t//after vgi uplift, payload changed\r\n\tfunction convertSearchMakeResponse(response) {\r\n\t\tvar makes = []; \r\n\t\tif (!response || response.length == 0) {\r\n\t\t\treturn makes;\r\n\t\t}\t\t\r\n\t\tfor (var idx1 = 0; idx1 < response.length; idx1++) {\r\n\t\t\tvar priorityNum1 = parseInt(response[idx1].priority);\r\n\t\t\tmakes.push({\r\n\t\t\t\tname: response[idx1].description,\r\n\t\t\t\tcode: response[idx1].makeCode,\r\n\t\t\t\tpriority: (priorityNum1 !== NaN) ? priorityNum1 : 0,\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn makes;\r\n\t}\r\n\r\n\tfunction searchModel(data, success, error) {\r\n\r\n\t\tguideWireService.modelSearch(data)\r\n .then(function(response) {\t\t\t\t\r\n\t\t\t\tvar data2 = convertSearchModelResponse(response.data.model);\r\n success(data2);\r\n })\r\n .catch(function(response) {\t\t\t\t\r\n if(error) {\r\n error(response);\r\n }\r\n });\r\n\t}\r\n\r\n\tfunction convertSearchModelResponse(response) {\r\n\t\tvar models = [];\r\n\t\tif (!response || response.length == 0) {\r\n\t\t\treturn models;\r\n\t\t}\t\t\r\n\t\tfor (var idx2 = 0; idx2 < response.length; idx2++) {\r\n\t\t\tvar priorityNum = parseInt(response[idx2].priority);\r\n\t\t\tmodels.push({\r\n\t\t\t\tname: response[idx2].description,\r\n\t\t\t\tcode: response[idx2].modelCode,\r\n\t\t\t\tpriority: (priorityNum !== NaN) ? priorityNum : 0,\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn models;\r\n\t}\r\n\r\n\tfunction searchCar(data, success, error) {\r\n\r\n\t\tguideWireService.carSearch(data)\r\n .then(function(response) {\r\n\t\t\t\tvar searchedData = response.data;\r\n\t\t\t\tfor (var i = 0; searchedData && i < searchedData.length; i++) {\r\n\t\t\t\t\tif (!searchedData[i].goodRetailPrice) {\r\n\t\t\t\t\t\tsearchedData[i].goodRetailPrice = \"0\";\r\n\t\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tsuccess(searchedData);\r\n })\r\n .catch(function(response) {\r\n if(error) {\r\n error(response);\r\n }\r\n });\r\n\t}\r\n\r\n\tfunction getLastResponse(serviceName) {\r\n\t\treturn serviceResponse[serviceName] ;\r\n\t}\r\n\r\n\tfunction getLastRequest(serviceName) {\r\n\t\treturn formData[serviceName] ;\r\n\t}\r\n\r\n\treturn {\r\n\t\tsearch: search,\r\n\t\tsearchMake: searchMake,\r\n\t\tsearchModel: searchModel,\r\n\t\tsearchCar: searchCar,\r\n\t\tgetLastRequest: getLastRequest,\r\n\t\tgetLastResponse: getLastResponse,\r\n\t}\r\n}\r\n\r\nRegoSearchService.create=function(guideWireService) {\r\n\tvar transformers = {\r\n\t\tsearch: function(resp) {\r\n\t\t\treturn {\r\n\t\t\t\tyear: resp.modelYear,\r\n\t\t\t\tmake: resp.make,\r\n\t\t\t\tmodel: resp.model,\r\n\t\t\t\tseries: resp.series,\r\n\t\t\t\tbody: resp.bodyStyle,\r\n\t\t\t\ttransmission: resp.gearType,\r\n\t\t\t\tdrive: resp.driveDescription,\r\n\t\t\t\tengine: resp.engineDescription,\r\n\t\t\t}\r\n\t\t},\r\n\t\tsearchMake: function(resp) {\r\n\t\t\treturn {\r\n\t\t\t\tcode: resp.code,\r\n\t\t\t\tname: resp.name\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn new RegoSearchService(guideWireService)\r\n}\r\n","\"use strict\" ;\r\n\r\nfunction SessionStorage(window) {\r\n\tvar engine = window.sessionStorage ;\r\n\r\n\tvar setItem = function(key, value) {\r\n\t\tengine.setItem(key, JSON.stringify(value)) ;\r\n\t}\r\n\r\n\tvar getItem = function(key) {\r\n\t\tvar value = engine.getItem(key) || \"{}\";\r\n\t\treturn JSON.parse(value) ;\r\n\t}\r\n\r\n\tvar removeItem = function(key) {\r\n\t\tengine.removeItem(key);\r\n\t}\r\n\r\n\tvar clear = function() {\r\n\t\tengine.clear();\r\n\t}\r\n\r\n\treturn {\r\n\t\tsetItem: setItem,\r\n\t\tgetItem: getItem,\r\n\t\tremoveItem: removeItem,\r\n\t\tclear: clear\r\n\t};\r\n}\r\n","(function () {\r\n\t\"use strict\";\r\n\r\n\tangular.module(\"qbePortal\").service(\"smartLinkService\", smartLinkService);\r\n\r\n\tfunction smartLinkService() {\r\n\t\tthis.generateLink = generateLink;\r\n\r\n\t\tfunction generateLink(customerData) {\r\n\t\t\t// JS Implementation of the buildSmartlink code\r\n\t\t\tvar url = customerData.smartLinkURL; //do not change this\r\n\t\t\tvar sharedkey = customerData.hashKey;\r\n\r\n\t\t\t//required arguments\r\n\t\t\tvar merchantidentifer = \"qbe-insurance\"; // your feefo merchant identifier. This account must have Smartlink activated.\r\n\t\t\tvar name = customerData.policyHolderName; // the customer name\r\n\t\t\tvar email = customerData.email; // the customer email address\r\n\t\t\tvar orderref =\r\n\t\t\t\tcustomerData.policyNumber != null\r\n\t\t\t\t\t? customerData.policyNumber\r\n\t\t\t\t\t: undefined; // your unique order reference number\r\n\r\n\t\t\tvar descriptions = [customerData.description]; // description(s) of item(s) purchased\r\n\r\n\t\t\tvar productrefs = [customerData.productRefs]; // product ref(s) of items purchased - usually SKU or equivalent\r\n\r\n\t\t\t// recommended arguments\r\n\t\t\tvar date = moment().tz(\"Australia/Sydney\").format(\"YYYY-MM-DD\"); // date of the transaction\r\n\r\n\t\t\tvar productlink; // URL to web page of product(s) purchased\r\n\r\n\t\t\t// variable list ends - we now have all the inforamtion we need to build a SmartLink\r\n\r\n\t\t\t// Do not change the variables immediately below\r\n\t\t\tvar markerstart = \"|!\";\r\n\t\t\tvar markers = {\r\n\t\t\t\tEMAIL: \"B\",\r\n\t\t\t\tNAME: \"C\",\r\n\t\t\t\tDATE: \"D\",\r\n\t\t\t\tFEEDBACKDATE: \"E\",\r\n\t\t\t\tDESCRIPTION: \"F\",\r\n\t\t\t\tLINK: \"G\",\r\n\t\t\t\tPRODUCTREF: \"H\",\r\n\t\t\t\tORDERREF: \"I\",\r\n\t\t\t\tAMOUNT: \"J\",\r\n\t\t\t\tCURRENCY: \"K\",\r\n\t\t\t\tCUSTOMERREF: \"M\",\r\n\t\t\t\tMERCHANTIDENTIFIER: \"N\",\r\n\t\t\t\tTAG: \"O\",\r\n\t\t\t};\r\n\r\n\t\t\t// this \"if\" checks that all required fields exist and are not empty\r\n\r\n\t\t\tif (\r\n\t\t\t\ttypeof merchantidentifer !== \"undefined\" &&\r\n\t\t\t\tmerchantidentifer.length > 0 &&\r\n\t\t\t\ttypeof email !== \"undefined\" &&\r\n\t\t\t\temail.length > 0 &&\r\n\t\t\t\ttypeof name !== \"undefined\" &&\r\n\t\t\t\tname.length > 0 &&\r\n\t\t\t\ttypeof descriptions !== \"undefined\" &&\r\n\t\t\t\tdescriptions.length > 0 &&\r\n\t\t\t\ttypeof productrefs !== \"undefined\" &&\r\n\t\t\t\tproductrefs.length > 0 &&\r\n\t\t\t\ttypeof orderref !== \"undefined\" &&\r\n\t\t\t\torderref.length > 0\r\n\t\t\t) {\r\n\t\t\t\t// this enormous \"if\" checks whether the multiline fields all have the same number of items\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdescriptions.length == productrefs.length &&\r\n\t\t\t\t\t(typeof productlinks === \"undefined\" ||\r\n\t\t\t\t\t\tproductlinks.length == descriptions.length) &&\r\n\t\t\t\t\t(typeof tags === \"undefined\" ||\r\n\t\t\t\t\t\ttags.length == descriptions.length) &&\r\n\t\t\t\t\t(typeof amounts === \"undefined\" ||\r\n\t\t\t\t\t\tamounts.length == descriptions.length)\r\n\t\t\t\t) {\r\n\t\t\t\t\tvar initialparams = \"\";\r\n\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\tmarkers.MERCHANTIDENTIFIER +\r\n\t\t\t\t\t\tmerchantidentifer;\r\n\t\t\t\t\tinitialparams += markerstart + markers.EMAIL + email;\r\n\t\t\t\t\tinitialparams += markerstart + markers.NAME + name;\r\n\t\t\t\t\tinitialparams += markerstart + markers.ORDERREF + orderref;\r\n\t\t\t\t\tif (typeof date !== \"undefined\" && date.length > 0) {\r\n\t\t\t\t\t\tinitialparams += markerstart + markers.DATE + date;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof customerref !== \"undefined\" &&\r\n\t\t\t\t\t\tcustomerref.length > 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart + markers.CUSTOMERREF + customerref;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof feedbackdate !== \"undefined\" &&\r\n\t\t\t\t\t\tfeedbackdate.length > 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart + markers.FEEDBACKDATE + feedbackdate;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof currencyid !== \"undefined\" &&\r\n\t\t\t\t\t\tcurrencyid.length > 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart + markers.CURRENCY + currencyid;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (var count = 1; count <= descriptions.length; count++) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\tmarkers.DESCRIPTION +\r\n\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\tdescriptions[count - 1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (var count = 1; count <= productrefs.length; count++) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\tmarkers.PRODUCTREF +\r\n\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\tproductrefs[count - 1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof productlinks !== \"undefined\") {\r\n\t\t\t\t\t\tfor (\r\n\t\t\t\t\t\t\tvar count = 1;\r\n\t\t\t\t\t\t\tcount <= productlinks.length;\r\n\t\t\t\t\t\t\tcount++\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\t\tmarkers.LINK +\r\n\t\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\t\tproductlinks[count - 1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof amounts !== \"undefined\") {\r\n\t\t\t\t\t\tfor (var count = 1; count <= amounts.length; count++) {\r\n\t\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\t\tmarkers.AMOUNT +\r\n\t\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\t\tamounts[count - 1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof tags !== \"undefined\") {\r\n\t\t\t\t\t\tfor (var count = 1; count <= tags.length; count++) {\r\n\t\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\t\tmarkers.TAG +\r\n\t\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\t\ttags[count - 1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar key = Sha1.hash(\r\n\t\t\t\t\t\tSha1.hash(initialparams + sharedkey) + sharedkey\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar smartlink = url + bin2hex(initialparams) + key;\r\n\r\n\t\t\t\t\tconsole.log(\"Generate Smartlink Successful!\");\r\n\t\t\t\t\treturn smartlink;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.log(\r\n\t\t\t\t\t\t\"Multiline arguments must have the same number of elements!\"\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log(\"Required arguments are missing!\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar Sha1 = {};\r\n\r\n\t/**\r\n\t * Generates SHA-1 hash of string\r\n\t *\r\n\t * @param {String} msg String to be hashed\r\n\t * @param {Boolean} [utf8encode=true] Encode msg as UTF-8 before generating hash\r\n\t * @returns {String} Hash of msg as hex character string\r\n\t */\r\n\tSha1.hash = function (msg, utf8encode) {\r\n\t\tutf8encode = typeof utf8encode == \"undefined\" ? true : utf8encode;\r\n\r\n\t\t// convert string to UTF-8, as SHA only deals with byte-streams\r\n\t\tif (utf8encode) msg = Utf8.encode(msg);\r\n\r\n\t\t// constants [§4.2.1]\r\n\t\tvar K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\r\n\r\n\t\t// PREPROCESSING\r\n\r\n\t\tmsg += String.fromCharCode(0x80);\r\n\r\n\t\t// convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1]\r\n\t\tvar l = msg.length / 4 + 2;\r\n\t\tvar N = Math.ceil(l / 16);\r\n\t\tvar M = new Array(N);\r\n\r\n\t\tfor (var i = 0; i < N; i++) {\r\n\t\t\tM[i] = new Array(16);\r\n\t\t\tfor (var j = 0; j < 16; j++) {\r\n\t\t\t\tM[i][j] =\r\n\t\t\t\t\t(msg.charCodeAt(i * 64 + j * 4) << 24) |\r\n\t\t\t\t\t(msg.charCodeAt(i * 64 + j * 4 + 1) << 16) |\r\n\t\t\t\t\t(msg.charCodeAt(i * 64 + j * 4 + 2) << 8) |\r\n\t\t\t\t\tmsg.charCodeAt(i * 64 + j * 4 + 3);\r\n\t\t\t} // note running off the end of msg is ok 'cos bitwise ops on NaN return 0\r\n\t\t}\r\n\t\t// add length (in bits) into final pair of 32-bit integers (big-endian) [§5.1.1]\r\n\t\tM[N - 1][14] = ((msg.length - 1) * 8) / Math.pow(2, 32);\r\n\t\tM[N - 1][14] = Math.floor(M[N - 1][14]);\r\n\t\tM[N - 1][15] = ((msg.length - 1) * 8) & 0xffffffff;\r\n\r\n\t\t// set initial hash value [§5.3.1]\r\n\t\tvar H0 = 0x67452301;\r\n\t\tvar H1 = 0xefcdab89;\r\n\t\tvar H2 = 0x98badcfe;\r\n\t\tvar H3 = 0x10325476;\r\n\t\tvar H4 = 0xc3d2e1f0;\r\n\r\n\t\t// HASH COMPUTATION [§6.1.2]\r\n\r\n\t\tvar W = new Array(80);\r\n\t\tvar a, b, c, d, e;\r\n\t\tfor (var i = 0; i < N; i++) {\r\n\t\t\t// 1 - prepare message schedule 'W'\r\n\t\t\tfor (var t = 0; t < 16; t++) W[t] = M[i][t];\r\n\t\t\tfor (var t = 16; t < 80; t++)\r\n\t\t\t\tW[t] = Sha1.ROTL(\r\n\t\t\t\t\tW[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16],\r\n\t\t\t\t\t1\r\n\t\t\t\t);\r\n\r\n\t\t\t// 2 - initialise five working variables a, b, c, d, e with previous hash value\r\n\t\t\ta = H0;\r\n\t\t\tb = H1;\r\n\t\t\tc = H2;\r\n\t\t\td = H3;\r\n\t\t\te = H4;\r\n\r\n\t\t\t// 3 - main loop\r\n\t\t\tfor (var t = 0; t < 80; t++) {\r\n\t\t\t\tvar s = Math.floor(t / 20);\r\n\t\t\t\tvar T =\r\n\t\t\t\t\t(Sha1.ROTL(a, 5) + Sha1.f(s, b, c, d) + e + K[s] + W[t]) &\r\n\t\t\t\t\t0xffffffff;\r\n\t\t\t\te = d;\r\n\t\t\t\td = c;\r\n\t\t\t\tc = Sha1.ROTL(b, 30);\r\n\t\t\t\tb = a;\r\n\t\t\t\ta = T;\r\n\t\t\t}\r\n\r\n\t\t\t// 4 - compute the new intermediate hash value\r\n\t\t\tH0 = (H0 + a) & 0xffffffff;\r\n\t\t\tH1 = (H1 + b) & 0xffffffff;\r\n\t\t\tH2 = (H2 + c) & 0xffffffff;\r\n\t\t\tH3 = (H3 + d) & 0xffffffff;\r\n\t\t\tH4 = (H4 + e) & 0xffffffff;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\tSha1.toHexStr(H0) +\r\n\t\t\tSha1.toHexStr(H1) +\r\n\t\t\tSha1.toHexStr(H2) +\r\n\t\t\tSha1.toHexStr(H3) +\r\n\t\t\tSha1.toHexStr(H4)\r\n\t\t);\r\n\t};\r\n\r\n\t//\r\n\t// function 'f' [§4.1.1]\r\n\t//\r\n\tSha1.f = function (s, x, y, z) {\r\n\t\tswitch (s) {\r\n\t\t\tcase 0:\r\n\t\t\t\treturn (x & y) ^ (~x & z); // Ch()\r\n\t\t\tcase 1:\r\n\t\t\t\treturn x ^ y ^ z; // Parity()\r\n\t\t\tcase 2:\r\n\t\t\t\treturn (x & y) ^ (x & z) ^ (y & z); // Maj()\r\n\t\t\tcase 3:\r\n\t\t\t\treturn x ^ y ^ z; // Parity()\r\n\t\t}\r\n\t};\r\n\r\n\t//\r\n\t// rotate left (circular left shift) value x by n positions [§3.2.5]\r\n\t//\r\n\tSha1.ROTL = function (x, n) {\r\n\t\treturn (x << n) | (x >>> (32 - n));\r\n\t};\r\n\r\n\t//\r\n\t// hexadecimal representation of a number\r\n\t// (note toString(16) is implementation-dependant, and\r\n\t// in IE returns signed numbers when used on full words)\r\n\t//\r\n\tSha1.toHexStr = function (n) {\r\n\t\tvar s = \"\",\r\n\t\t\tv;\r\n\t\tfor (var i = 7; i >= 0; i--) {\r\n\t\t\tv = (n >>> (i * 4)) & 0xf;\r\n\t\t\ts += v.toString(16);\r\n\t\t}\r\n\t\treturn s;\r\n\t};\r\n\r\n\tvar Utf8 = {}; // Utf8 namespace\r\n\r\n\t/**\r\n\t * Encode multi-byte Unicode string into utf-8 multiple single-byte characters\r\n\t * (BMP / basic multilingual plane only)\r\n\t *\r\n\t * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars\r\n\t *\r\n\t * @param {String} strUni Unicode string to be encoded as UTF-8\r\n\t * @returns {String} encoded string\r\n\t */\r\n\tUtf8.encode = function (strUni) {\r\n\t\tvar strUtf = strUni.replace(/[\\u0080-\\u07ff]/g, function (c) {\r\n\t\t\tvar cc = c.charCodeAt(0);\r\n\t\t\treturn String.fromCharCode(0xc0 | (cc >> 6), 0x80 | (cc & 0x3f));\r\n\t\t});\r\n\t\tstrUtf = strUtf.replace(/[\\u0800-\\uffff]/g, function (c) {\r\n\t\t\tvar cc = c.charCodeAt(0);\r\n\t\t\treturn String.fromCharCode(\r\n\t\t\t\t0xe0 | (cc >> 12),\r\n\t\t\t\t0x80 | ((cc >> 6) & 0x3f),\r\n\t\t\t\t0x80 | (cc & 0x3f)\r\n\t\t\t);\r\n\t\t});\r\n\t\treturn strUtf;\r\n\t};\r\n\r\n\tfunction bin2hex(s) {\r\n\t\t// http://kevin.vanzonneveld.net\r\n\t\t// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\r\n\t\t// + bugfixed by: Onno Marsman\r\n\t\t// + bugfixed by: Linuxworld\r\n\t\t// + improved by: ntoniazzi (http://phpjs.org/functions/bin2hex:361#comment_177616)\r\n\t\t// * example 1: bin2hex('Kev');\r\n\t\t// * returns 1: '4b6576'\r\n\t\t// * example 2: bin2hex(String.fromCharCode(0x00));\r\n\t\t// * returns 2: '00'\r\n\r\n\t\tvar i,\r\n\t\t\tl,\r\n\t\t\to = \"\",\r\n\t\t\tn;\r\n\r\n\t\ts += \"\";\r\n\r\n\t\tfor (i = 0, l = s.length; i < l; i++) {\r\n\t\t\tn = s.charCodeAt(i).toString(16);\r\n\t\t\to += n.length < 2 ? \"0\" + n : n;\r\n\t\t}\r\n\r\n\t\treturn o;\r\n\t}\r\n})();\r\n","\"use strict\";\r\n\r\nfunction UserInputRepository(storage, Util) {\r\n\t// var userInput = {};\r\n\r\n\tfunction update(input) {\r\n\t\tvar userInput = this.get();\r\n\t\tuserInput = angular.extend(userInput, input);\r\n\t\tstorage.setItem('userInput', userInput);\r\n\t\t// console.log(input);\r\n\t}\r\n\r\n\tfunction get(defaultData, dotSeperatedFieldPath) {\r\n\t\tdefaultData = defaultData || {}\r\n\t\tvar userInput = storage.getItem('userInput');\r\n\t\tuserInput = Object.extend(defaultData, userInput);\r\n\t\tif (dotSeperatedFieldPath)\r\n\t\t\treturn Util.findHierarchyStringInObject(userInput, dotSeperatedFieldPath, '.');\r\n\r\n\t\treturn userInput;\r\n\t}\r\n\r\n\treturn {\r\n\t\tupdate: update,\r\n\t\tget: get\r\n\t};\r\n}\r\n","function dispatchCustomEvent(event, detail) {\r\n\tif (\r\n\t\t$(\"html\").hasClass(\"lt-ie10\") ||\r\n\t\t$(\"html\").hasClass(\"is-ie10\") ||\r\n\t\t$(\"html\").hasClass(\"is-ie11\")\r\n\t) {\r\n\t\tvar newEvent = document.createEvent(\"CustomEvent\");\r\n\t\tnewEvent.initCustomEvent(event, true, true, detail);\r\n\t\twindow.dispatchEvent(newEvent);\r\n\t} else {\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent(event, {\r\n\t\t\t\tdetail: detail\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n}\r\n\r\nfunction Util() {\r\n\tthis.findHierarchyStringInObject = function(object, pathString, delimiter) {\r\n\t\tvar keys = pathString.split(delimiter);\r\n\t\treturn this.findHierarchyArrayInObject(object, keys);\r\n\t};\r\n\r\n\tthis.findHierarchyArrayInObject = function(object, hierarchyArray) {\r\n\t\tvar val = object;\r\n\t\tfor (var i = 0; i < hierarchyArray.length; i++) {\r\n\t\t\tvar index = i;\r\n\t\t\tvar key = hierarchyArray[i];\r\n\t\t\tif (key.indexOf(\"[\") == 1 && key.indexOf(\"]\") == key.length - 1) {\r\n\t\t\t\tvar propertyName = key.substring(2, key.indexOf(\"=\"));\r\n\t\t\t\tvar propertyValue = key.substring(\r\n\t\t\t\t\tkey.indexOf(\"=\") + 1,\r\n\t\t\t\t\tkey.length - 1\r\n\t\t\t\t);\r\n\t\t\t\t// GDD-3853 - modified for mixed driver usages\r\n\t\t\t\t// var matchingOne = val.filter(function (item) {\r\n\t\t\t\t// \treturn item[propertyName] == propertyValue;\r\n\t\t\t\t// });\r\n\t\t\t\tvar matchingOne = val;\r\n\t\t\t\tvar index = key.replace(\r\n\t\t\t\t\t\"[\" + propertyName + \"=\" + propertyValue + \"]\",\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif ((index != \"\") & (index != \"0\")) {\r\n\t\t\t\t\tvar propertyIndex = parseInt(index);\r\n\r\n\t\t\t\t\tif (!isNaN(propertyIndex)) {\r\n\t\t\t\t\t\tval = matchingOne[propertyIndex];\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tval = matchingOne[0];\r\n\r\n\t\t\t\tif (val == null) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (val[hierarchyArray[index]] == null) return null;\r\n\r\n\t\t\tval = val[hierarchyArray[index]];\r\n\t\t}\r\n\t\treturn val;\r\n\t};\r\n\r\n\tthis.updateValueInObject = function(object, value, pathString, delimiter) {\r\n\t\tvar pathStringArray = pathString.split(delimiter);\r\n\t\tvar lastKey = pathStringArray.pop();\r\n\t\tvar val = object;\r\n\t\tfor (var i = 0; i < pathStringArray.length; i++) {\r\n\t\t\tif (!val[pathStringArray[i]]) return;\r\n\r\n\t\t\tval = val[pathStringArray[i]];\r\n\t\t}\r\n\t\tval[lastKey] = value;\r\n\t};\r\n\r\n\tthis.stringFormat = function(str) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\t\treturn str.replace(/{(\\d+)}/g, function(match, number) {\r\n\t\t\treturn typeof args[number] != \"undefined\" ? args[number] : match;\r\n\t\t});\r\n\t};\r\n\r\n\tthis.padNumber = function(num, width, padWith) {\r\n\t\tvar padWith = padWith || \"0\",\r\n\t\t\tnum = num + \"\";\r\n\t\treturn num.length >= width\r\n\t\t\t? num\r\n\t\t\t: new Array(width - num.length + 1).join(padWith) + num;\r\n\t};\r\n\r\n\tthis.clone = function(value) {\r\n\t\treturn jQuery.extend({}, value);\r\n\t};\r\n\r\n\tthis.deepClone = function(value) {\r\n\t\treturn jQuery.extend(true, {}, value);\r\n\t};\r\n\r\n\tthis.generateRandomChar = function() {\r\n\t\tvar s = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\r\n\t\treturn s.charAt(Math.floor(Math.random() * s.length));\r\n\t};\r\n\r\n\tthis.generateRandomString = function(length) {\r\n\t\tvar self = this;\r\n\t\treturn new Array(length + 1)\r\n\t\t\t.join(\"0\")\r\n\t\t\t.split(\"\")\r\n\t\t\t.map(function() {\r\n\t\t\t\treturn self.generateRandomChar();\r\n\t\t\t})\r\n\t\t\t.join(\"\");\r\n\t};\r\n\r\n\tthis.dispatchCustomEvent = function(event, detail) {\r\n\t\tdispatchCustomEvent(event, detail);\r\n\t};\r\n\r\n\tthis.arrayFill = function(number, object) {\r\n\t\tif (!Array.prototype.fill) {\r\n\t\t\t//console.info('hi');\r\n\t\t\tArray.prototype.fill = function(value) {\r\n\t\t\t\t// Steps 1-2.\r\n\t\t\t\tif (this == null) {\r\n\t\t\t\t\tthrow new TypeError(\"this is null or not defined\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar O = Object(this);\r\n\r\n\t\t\t\t// Steps 3-5.\r\n\t\t\t\tvar len = O.length >>> 0;\r\n\r\n\t\t\t\t// Steps 6-7.\r\n\t\t\t\tvar start = arguments[1];\r\n\t\t\t\tvar relativeStart = start >> 0;\r\n\r\n\t\t\t\t// Step 8.\r\n\t\t\t\tvar k =\r\n\t\t\t\t\trelativeStart < 0\r\n\t\t\t\t\t\t? Math.max(len + relativeStart, 0)\r\n\t\t\t\t\t\t: Math.min(relativeStart, len);\r\n\r\n\t\t\t\t// Steps 9-10.\r\n\t\t\t\tvar end = arguments[2];\r\n\t\t\t\tvar relativeEnd = end === undefined ? len : end >> 0;\r\n\r\n\t\t\t\t// Step 11.\r\n\t\t\t\tvar final =\r\n\t\t\t\t\trelativeEnd < 0\r\n\t\t\t\t\t\t? Math.max(len + relativeEnd, 0)\r\n\t\t\t\t\t\t: Math.min(relativeEnd, len);\r\n\r\n\t\t\t\t// Step 12.\r\n\t\t\t\twhile (k < final) {\r\n\t\t\t\t\tO[k] = value;\r\n\t\t\t\t\tk++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Step 13.\r\n\t\t\t\treturn O;\r\n\t\t\t};\r\n\t\t}\r\n\t\t//console.info(Array(number).fill(object));\r\n\t\treturn Array(number).fill(object);\r\n\t};\r\n\r\n\tthis.generatePermutationsArray = function(options1, options2) {\r\n\t\tvar permutations = [];\r\n\t\tangular.forEach(options1, function(option1) {\r\n\t\t\tangular.forEach(options2, function(option2) {\r\n\t\t\t\tpermutations.push({\r\n\t\t\t\t\toption1: option1,\r\n\t\t\t\t\toption2: option2\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn permutations;\r\n\t};\r\n\r\n\tthis.getQueryStringByName = function(location, name) {\r\n\t\tname = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\r\n\t\tvar regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\"),\r\n\t\t\tresults = regex.exec(location.search);\r\n\t\treturn results === null\r\n\t\t\t? \"\"\r\n\t\t\t: decodeURIComponent(results[1].replace(/\\+/g, \" \"));\r\n\t};\r\n\r\n\tthis.capitalize = function(token) {\r\n\t\tif (token) {\r\n\t\t\treturn token.charAt(0).toUpperCase() + token.slice(1).toLowerCase();\r\n\t\t}\r\n\t};\r\n\r\n\tthis.compareDays = function(responseDate) {\r\n\t\tvar expiredQuote;\r\n\t\tvar today = moment().tz(\"Australia/Sydney\");\r\n\t\tvar quoteDate = moment(responseDate).tz(\"Australia/Sydney\");\r\n\t\tvar dateDiff = today.diff(quoteDate, \"days\");\r\n\t\tif (dateDiff >= 30) {\r\n\t\t\treturn (expiredQuote = true);\r\n\t\t} else return (expiredQuote = false);\r\n\t};\r\n\r\n\tthis.linkBuilder = function(generalLink) {\r\n\t\tvar sessionProt = window.location.protocol;\r\n\t\tvar sessionProtHost = window.location.host;\r\n\t\tvar sessionProtPath = generalLink;\r\n\t\tvar sessionProtURL =\r\n\t\t\tsessionProt + \"//\" + sessionProtHost + sessionProtPath;\r\n\r\n\t\treturn sessionProtURL;\r\n\t};\r\n\r\n\tthis.isUndefinedOrNull = function(arg) {\r\n\t\tif (angular.isUndefined(arg) || arg == null) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t};\r\n\r\n\tthis.b64EncodeUnicode = function(str) {\r\n\t\treturn btoa(\r\n\t\t\tencodeURIComponent(str).replace(\r\n\t\t\t\t/%([0-9A-F]{2})/g,\r\n\t\t\t\tfunction toSolidBytes(match, p1) {\r\n\t\t\t\t\treturn String.fromCharCode(\"0x\" + p1);\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tthis.b64DecodeUnicode = function(str) {\r\n\t\treturn decodeURIComponent(\r\n\t\t\tatob(str)\r\n\t\t\t\t.split(\"\")\r\n\t\t\t\t.map(function(c) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2)\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t\t.join(\"\")\r\n\t\t);\r\n\t};\r\n}\r\n\r\nangular.module(\"qbePortal\").filter(\"capitalize\", function() {\r\n\treturn function(token) {\r\n\t\tif (token) {\r\n\t\t\treturn token.charAt(0).toUpperCase() + token.slice(1).toLowerCase();\r\n\t\t}\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"sortalpha\", function() {\r\n\treturn function(list, prop) {\r\n\t\treturn list.sort(function(a, b) {\r\n\t\t\tvar nameA = a[prop].toUpperCase(); // ignore upper and lowercase\r\n\t\t\tvar nameB = b[prop].toUpperCase(); // ignore upper and lowercase\r\n\t\t\tif (nameA < nameB) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif (nameA > nameB) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\r\n\t\t\t// names must be equal\r\n\t\t\treturn 0;\r\n\t\t});\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"formatAddress\", function() {\r\n\treturn function(address) {\r\n\t\tfunction parseState(state) {\r\n\t\t\treturn state.replace(\"AU_\", \"\");\r\n\t\t}\r\n\r\n\t\tif (address)\r\n\t\t\treturn (\r\n\t\t\t\taddress.addressLine1 +\r\n\t\t\t\t\" \" +\r\n\t\t\t\taddress.city +\r\n\t\t\t\t\", \" +\r\n\t\t\t\tparseState(address.state) +\r\n\t\t\t\t\", \" +\r\n\t\t\t\taddress.postalCode\r\n\t\t\t);\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"removeNonAlpha\", function() {\r\n\treturn function(token) {\r\n\t\tif (token) {\r\n\t\t\tvar value = token.replace(/[^a-zA-Z0-9]+/g, \" \");\r\n\t\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\r\n\t\t}\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"splitJoinedWords\", function() {\r\n\treturn function(token) {\r\n\t\tif (token) {\r\n\t\t\tvar value = token.replace(/([A-Z])/g, \" $1\");\r\n\t\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\r\n\t\t}\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"styledCurrency\", function($filter) {\r\n\treturn function(token) {\r\n\t\tif (token) {\r\n\t\t\tvar value = $filter(\"currency\")(token)\r\n\t\t\t\t.toString()\r\n\t\t\t\t.split(\".\");\r\n\t\t\treturn value;\r\n\t\t}\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"useFilter\", function($filter) {\r\n\treturn function() {\r\n\t\tvar filterName = [].splice.call(arguments, 1, 1)[0];\r\n\t\treturn $filter(filterName).apply(null, arguments);\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"calculateTotal\", function() {\r\n\treturn function(list, fieldName) {\r\n\t\tvar total = null;\r\n\t\tangular.forEach(list, function(value) {\r\n\t\t\ttotal += parseFloat(value[fieldName]);\r\n\t\t});\r\n\t\treturn total;\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"wildcardReplace\", [\r\n\t\"Util\",\r\n\tfunction(Util) {\r\n\t\treturn function(inString, replaceWith) {\r\n\t\t\tvar args = [].slice.call(arguments);\r\n\t\t\tif (args[0]) {\r\n\t\t\t\tif (typeof args[0] !== \"string\") {\r\n\t\t\t\t\targs[0] = args[0].$$unwrapTrustedValue();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn Util.stringFormat.apply(null, args);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n]);\r\n\r\nangular.module(\"qbePortal\").filter(\"driverInsured\", [\r\n\t\"Util\",\r\n\tfunction(Util) {\r\n\t\treturn function(inString, vehicleType) {\r\n\t\t\tvar finalString;\r\n\r\n\t\t\tif (inString) {\r\n\t\t\t\tif (typeof inString !== \"string\") {\r\n\t\t\t\t\tinString = inString.$$unwrapTrustedValue();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfinalString = inString;\r\n\r\n\t\t\t\tvar replaceWith = \"insured\",\r\n\t\t\t\t\treplace = true;\r\n\r\n\t\t\t\tswitch (vehicleType) {\r\n\t\t\t\t\tcase undefined:\r\n\t\t\t\t\t\treplace = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"motorhome\":\r\n\t\t\t\t\t\treplace = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"campervan\":\r\n\t\t\t\t\t\treplace = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if(vehicleType == undefined)\r\n\t\t\t\t// {\r\n\t\t\t\t// \treplace = false;\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif (replace) {\r\n\t\t\t\t\tfinalString = inString\r\n\t\t\t\t\t\t.toLowerCase()\r\n\t\t\t\t\t\t.replace(\"driver\", replaceWith);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn finalString;\r\n\t\t};\r\n\t}\r\n]);\r\n\r\nangular.module(\"qbePortal\").filter(\"booleanToYesNo\", function($filter) {\r\n\treturn function(token) {\r\n\t\tvar value = null;\r\n\t\tif (typeof token === \"string\") {\r\n\t\t\tif ([\"yes\", \"no\"].indexOf(token.toLowerCase()) != -1) {\r\n\t\t\t\tvalue = token.toLowerCase() === \"yes\";\r\n\t\t\t} else if ([\"true\", \"false\"].indexOf(token.toLowerCase() != -1)) {\r\n\t\t\t\tvalue = token.toLowerCase() === \"true\";\r\n\t\t\t} else if ([\"1\", \"0\"].indexOf(token) != -1) {\r\n\t\t\t\tvalue = String(token) === \"1\";\r\n\t\t\t}\r\n\t\t} else if (typeof token === \"number\") {\r\n\t\t\tif ([1, 0].indexOf(token) != -1) {\r\n\t\t\t\tvalue = token == 1;\r\n\t\t\t}\r\n\t\t} else if (typeof token === \"boolean\") {\r\n\t\t\tvalue = token;\r\n\t\t}\r\n\r\n\t\treturn value ? \"Yes\" : \"No\";\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"stringToSummaryDate\", function($filter) {\r\n\treturn function(token) {\r\n\t\tif (isNaN(Date.parse(token))) {\r\n\t\t\tvar returnObject = null;\r\n\r\n\t\t\tvar dateObject = {\r\n\t\t\t\tday: \"\",\r\n\t\t\t\tmonth: \"\",\r\n\t\t\t\tyear: \"\"\r\n\t\t\t};\r\n\r\n\t\t\tif (token && token.length > 0 && token.length == 8) {\r\n\t\t\t\tdateObject.day = token.substr(0, 2);\r\n\t\t\t\tdateObject.month = token.substr(2, 2);\r\n\t\t\t\tdateObject.year = token.substr(4, 4);\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\t!isNaN(dateObject.day) &&\r\n\t\t\t\t\t!isNaN(dateObject.month) &&\r\n\t\t\t\t\t!isNaN(dateObject.year)\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\tdateObject.day +\r\n\t\t\t\t\t\t\"/\" +\r\n\t\t\t\t\t\tdateObject.month +\r\n\t\t\t\t\t\t\"/\" +\r\n\t\t\t\t\t\tdateObject.year\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn token;\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"showFslOnlyNsw\", function() {\r\n\treturn function(referenceDocuments, state) {\r\n\t\treturn state != \"AU_NSW\"\r\n\t\t\t? referenceDocuments.filter(function(d) {\r\n\t\t\t\t\treturn d.type != \"fsl\";\r\n\t\t\t })\r\n\t\t\t: referenceDocuments;\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"unique\", function() {\r\n\t// we will return a function which will take in a collection\r\n\t// and a keyname\r\n\treturn function(collection, keyname) {\r\n\t\t// we define our output and keys array;\r\n\t\tvar output = [],\r\n\t\t\tkeys = [];\r\n\r\n\t\t// we utilize angular's foreach function\r\n\t\t// this takes in our original collection and an iterator function\r\n\t\tangular.forEach(collection, function(item) {\r\n\t\t\t// we check to see whether our object exists\r\n\t\t\tvar key = item[keyname];\r\n\t\t\t// if it's not already part of our keys array\r\n\t\t\tif (keys.indexOf(key) === -1) {\r\n\t\t\t\t// add it to our keys array\r\n\t\t\t\tkeys.push(key);\r\n\t\t\t\t// push this item to our final output array\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\t\t// return our array which should be devoid of\r\n\t\t// any duplicates\r\n\t\treturn output;\r\n\t};\r\n});\r\n","\"use strict\";\r\n\r\nfunction ValidationService(labelService) {\r\n\tvar errors = {} ; \r\n\t\r\n\tvar supressErrorTypes = [\r\n\t\t'ccNumberType'/** cc validation library used\r\n\t\t\t\t\t\t generates two error messages \r\n\t\t\t\t\t\t for invalid card number and invalid\r\n\t\t\t\t\t\t card type, the latter is not required\r\n\t\t\t\t\t\t to be displayed. */\r\n\t];\r\n\r\n\tfunction isFormValid() {\r\n\t\treturn errors.length > 0;\r\n\t}\r\n\r\n\tfunction clearAllErrors() {\r\n\t\terrors = {} ; \r\n\t}\r\n\r\n\tfunction getFieldErrors(fieldSelector) {\r\n\t\tvar err = null ; \r\n\t\tfor (var elementId in errors) {\r\n\t\t\tvar error = errors[elementId] ; \r\n\t\t\tif ( error.input == fieldSelector ){\r\n\t\t\t\terr = error ; \r\n\t\t\t\tbreak ; \r\n\t\t\t}\r\n\t\t}\r\n\t\treturn err;\r\n\t}\r\n\r\n\t/**\r\n\t* Error types that are redundant are supressed/filtered out, to avoid displaying them to users. \r\n\t*/\r\n\tfunction removeSupressedErrors(inputErrors) {\r\n\t\tangular.forEach(supressErrorTypes, function(errorType) {\r\n\t\t\tif ( inputErrors.hasOwnProperty(errorType)) \r\n\t\t\t\tdelete inputErrors[errorType] ; \r\n\t\t});\r\n\t\treturn inputErrors ; \r\n\t}\r\n\r\n\tfunction registerInputErrors(element, fieldSelector, inputErrors) {\r\n\t\tvar commonFieldArray = element.parents('ng-form').map(function(index, parent){return \t$(parent).attr('name');}) ; \r\n\t\tvar commonFieldId = /** this is meant to be common among multiple radio or checkbox inputs */\r\n\t\t\tArray.prototype.join.call(commonFieldArray, '_') + element.attr('name') ; \r\n\r\n\t\tvar wildcard = element.parents('.ctrl-holder').attr('label-wildcard') ; \r\n\t\tinputErrors = removeSupressedErrors(inputErrors) ; \r\n\r\n\t\terrors[commonFieldId] = {\r\n\t\t\tinput : fieldSelector, \r\n\t\t\tlabel: labelService.getLabelFor(element.attr('label-key')),\r\n\t\t\telement: element, \r\n\t\t\twildcard : wildcard,\r\n\t\t\terrors : inputErrors\r\n\t\t};\r\n\t}\r\n\r\n\tfunction getAllErrors() {\r\n\t\treturn getNonEmptyErrors(errors) ; \r\n\t}\r\n\r\n\tfunction getNonEmptyErrors(errors) {\r\n\t\tvar nonEmptyErrors = {} ; \r\n\t\tfor (var key in errors) {\r\n\t\t\tif ( errors[key] && errors[key].errors && Object.keys(errors[key].errors).length > 0 )\r\n\t\t\t\tnonEmptyErrors[key] = errors[key] ; \r\n\t\t}\r\n\r\n\t\treturn nonEmptyErrors ; \r\n\t}\r\n\r\n\t/*\r\n\t* Validate input fields\r\n\t* Param - field name of element\r\n\t*/\r\n\tfunction validateField(fieldKey){\r\n\t\tvar nonEmptyErrors = {} ; \r\n\t\tfor (var key in errors) {\r\n\r\n\t\t\tif ( errors[key] && errors[key].errors && Object.keys(errors[key].errors).length > 0 && key.indexOf(fieldKey) >= 0 ){\r\n\t\t\t\tnonEmptyErrors[key] = errors[key] ; \r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nonEmptyErrors ; \r\n\t}\r\n\r\n\tfunction validateInput(element, fieldSelector, messageKey) {\r\n\t\tvar inputErrors = {} ; \r\n\t\tif ( ! fieldSelector ) {\r\n\t\t\tconsole.error('Empty validation selector for field' );\r\n\t\t\treturn {};\r\n\t\t}\r\n\r\n\t\tvar $error = fieldSelector.$error ;\r\n\t\tif ( ! $error ) {\r\n\t\t\tinputErrors = {};\r\n\t\t\treturn inputErrors ; \r\n\t\t}\r\n\r\n\t\tfor (var key in $error) {\r\n\t\t\tinputErrors[key] = labelService.getValidationMessagesFor(messageKey, key) ; \r\n\t\t\t//console.log('input errors for ' + key , inputErrors[key]) ;\r\n\t\t}\r\n\r\n\t\tregisterInputErrors(element, fieldSelector, inputErrors) ; \r\n\r\n\t\treturn inputErrors ;\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetFieldErrors: getFieldErrors,\r\n\t\tvalidateInput: validateInput,\r\n\t\tgetAllErrors: getAllErrors,\r\n\t\tclearAllErrors: clearAllErrors,\r\n\t\tvalidateField: validateField\r\n\t};\r\n}\r\n","function VehicleQuoteConfiguration(){\r\n\tthis.coverTypeClasses = {\r\n\t\tcomprehensive : {\r\n\t\t\tlabel : 'Comprehensive',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Comprehensive',\r\n\t\t\t\t\tdescriptor: 'comprehensive',\r\n\t\t\t\t\tsuperType: 'comprehensive',\r\n\t\t\t\t\tsubType:'standard',\r\n\t\t\t\t},\r\n\t\t\t\tnominated : {\r\n\t\t\t\t\tlabel: 'Comprehensive Nominated',\r\n\t\t\t\t\tdescriptor: 'comprehensive_nominated',\r\n\t\t\t\t\tsuperType: 'comprehensive',\r\n\t\t\t\t\tsubType: 'nominated',\r\n\t\t\t\t},\r\n\t\t\t\tpreferred: {\r\n\t\t\t\t\tlabel: 'Comprehensive Preferred',\r\n\t\t\t\t\tdescriptor: 'comprehensive_preferred',\r\n\t\t\t\t\tsuperType: 'comprehensive',\r\n\t\t\t\t\tsubType : 'preferred',\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tthird_party: {\r\n\t\t\tlabel: 'Third Party',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Third party only',\r\n\t\t\t\t\tdescriptor: 'third_party',\r\n\t\t\t\t\tsuperType: 'third_party',\r\n\t\t\t\t\tsubType: 'standard',\r\n\t\t\t\t},\r\n\t\t\t\tfire_and_theft: {\r\n\t\t\t\t\tlabel: 'Third party fire and theft',\r\n\t\t\t\t\tdescriptor: 'third_party_fire_theft',\r\n\t\t\t\t\tsuperType: 'third_party',\r\n\t\t\t\t\tsubType: 'fire_and_theft',\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.allCoverTypes = {\r\n\t\tcomprehensive_standard: this.coverTypeClasses.comprehensive.subClasses.standard,\r\n\t\tcomprehensive_nominated: this.coverTypeClasses.comprehensive.subClasses.nominated,\r\n\t\tcomprehensive_preferred: this.coverTypeClasses.comprehensive.subClasses.preferred,\r\n\t\tthird_party_fire_theft: this.coverTypeClasses.third_party.subClasses.fire_and_theft,\r\n\t\tthird_party_standard: this.coverTypeClasses.third_party.subClasses.standard,\r\n\t};\r\n\r\n\tthis.allCoverTypesByKey = {\r\n\t\tcomprehensive: this.coverTypeClasses.comprehensive.subClasses.standard,\r\n\t\tcomprehensive_nominated: this.coverTypeClasses.comprehensive.subClasses.nominated,\r\n\t\tcomprehensive_preferred: this.coverTypeClasses.comprehensive.subClasses.preferred,\r\n\t\tthird_party_fire_theft: this.coverTypeClasses.third_party.subClasses.fire_and_theft,\r\n\t\tthird_party: this.coverTypeClasses.third_party.subClasses.standard,\r\n\t};\r\n\r\n\tthis.allPaymentFrequencies = {\r\n\t\tannual: 'everyyear',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'everyotherweek',\r\n\t};\r\n\r\n\tthis.defaultPaymentFrequency = this.allPaymentFrequencies.annual;\r\n\r\n\tthis._reversePaymentFrequenciesLookup = {\r\n\t\tyearly: 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'fortnightly',\r\n\t};\r\n\r\n\tthis.allQuoteTypes = {\r\n\t\tfull: 'Full',\r\n\t\tquick: 'Quick',\r\n\t};\r\n\r\n\tthis.quoteRuleOptions = {\r\n\t\t// Rapid estimate quote options\r\n\t\t'rapidEstimate': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.estimate' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.drivers': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.vehicle' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.quote': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.contact': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.additional'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.payment': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.testQuoteDeclineOptions = {\r\n\t\t'vehicle.vehicle' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.vehicle'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.drivers' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.driver'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.quote' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.contact' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.additional'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tthis.defaultCoverType = this.allCoverTypes.comprehensive_standard;\r\n\tthis.defaultRequotePageName = 'vehicle.quote';\r\n}\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('addressValidation', function () {\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: 'A',\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\r\n\t\t\t\t//important- this handler is to manage selection from type-ahead\r\n\t\t\t\tscope.$on('type-ahead-value-received', function (value) {\r\n\t\t\t\t\tif (scope.$eval(attrs.addressValidation) == true) {\r\n\t\t\t\t\t\t//false mark valid\r\n\t\t\t\t\t\tctrl.$setValidity('address', true);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//false marks invalid\r\n\t\t\t\t\t\tctrl.$setValidity('address', false);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\r\n\t\t\t\tfunction validateAddress(ngModelValue) {\r\n\t\t\t\t\t// //console.log(scope.$eval(attrs.addressValidation));\r\n\t\t\t\t\tif (scope.$eval(attrs.addressValidation) == 'true') {\r\n\t\t\t\t\t\t//false mark valid\r\n\t\t\t\t\t\tctrl.$setValidity('address', true);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//false marks invalid\r\n\t\t\t\t\t\tctrl.$setValidity('address', false);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn ngModelValue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctrl.$parsers.push(validateAddress);\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('fullEmailValidation', function () {\r\n\t\t//var EMAIL_REGEXP = /^[_a-zA-Z0-9]+(\\.'[_a-zA-Z0-9]+)*@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*(\\.[a-zA-Z]{2,4})$/;\r\n\t\tvar EMAIL_REGEXP = /^(?!.*\\.{2})[A-Za-z0-9._-]+@[A-Za-z0-9._-]+\\.[A-Za-z]{2,4}$/;\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: '',\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\t// only apply the validator if ngModel is present and Angular has added the email validator\r\n\t\t\t\tif (ctrl && ctrl.$validators.email) {\r\n\r\n\t\t\t\t\t// this will overwrite the default Angular email validator\r\n\t\t\t\t\tctrl.$validators.email = function (modelValue) {\r\n\t\t\t\t\t\treturn ctrl.$isEmpty(modelValue) || EMAIL_REGEXP.test(modelValue);\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('mutualExclusiveValidation', function () {\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: 'A',\r\n\t\t\tscope: {\r\n\t\t\t\tmutualExclusiveValidation: \"=\"\r\n\t\t\t},\r\n\t\t\tlink: function (scope, elm, attrs, ngModel) {\r\n\t\t\t\t// only apply the validator if ngModel is present and Angular has added the email validator\r\n\t\t\t\telm.change(function () {\r\n\r\n\t\t\t\t\tif (scope.mutualExclusiveValidation) {\r\n\t\t\t\t\t\t//atleast 1 option should be present for the validation to function\r\n\t\t\t\t\t\tif (scope.mutualExclusiveValidation.exclusiveOptions.length > 1) {\r\n\t\t\t\t\t\t\tvar optionValue = attrs.value;\r\n\r\n\t\t\t\t\t\t\t//Is the current element one of the mutually exclusive options\r\n\t\t\t\t\t\t\tvar isRequiredForValidation = scope.mutualExclusiveValidation.exclusiveOptions.indexOf(optionValue) > -1;\r\n\t\t\t\t\t\t\tif (isRequiredForValidation) {\r\n\r\n\t\t\t\t\t\t\t\t//Get the state of that option and proceed with the validation if true\r\n\t\t\t\t\t\t\t\tif (scope.mutualExclusiveValidation.modelValue[attrs.value]) {\r\n\t\t\t\t\t\t\t\t\tscope.mutualExclusiveValidation.exclusiveOptions.forEach(function(item){\r\n\t\t\t\t\t\t\t\t\t\tif(item!=optionValue){\r\n\t\t\t\t\t\t\t\t\t\t\tscope.mutualExclusiveValidation.modelValue[item] = false;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\tscope.$apply();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbAmountDue',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbAmountDue.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tamountDue: '=',\r\n\t\t\t\t}, \r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbAutoSubmitForm', function ($timeout) {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\tlink: function ($scope, $el, $attr) {\r\n\t\t\t\t$timeout(function () {\r\n\t\t\t\t\tangular.element($el).submit();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n})();\r\n","(function() {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBConfirmDialog', QBConfirmDialog);\r\n\r\n\tQBConfirmDialog.$inject = [\r\n\t\t'$scope',\r\n\t\t'ngDialog',\r\n\t\t'gtmService',\r\n\t\t'labelService',\r\n\t\t'$state',\r\n\t\t'userInputRepository',\r\n\t\t'MODULE_INFO',\r\n\t\t'$sce',\r\n\t\t'$http',\r\n\t\t'storage',\r\n\t\t'Util',\r\n\t\t'$sanitize'\r\n\t];\r\n\r\n\tfunction QBConfirmDialog(\r\n\t\t$scope,\r\n\t\tngDialog,\r\n\t\tgtmService,\r\n\t\tlabelService,\r\n\t\t$state,\r\n\t\tuserInputRepository,\r\n\t\tMODULE_INFO,\r\n\t\t$sce,\r\n\t\t$http,\r\n\t\tstorage,\r\n\t\tutil,\r\n\t\t$sanitize\r\n\t) {\r\n\t\tvar vm = this;\r\n\t\tvm.formData = {};\r\n\r\n\t\t$scope.$root.$on('open-confirmation-dialog', openDialog);\r\n\r\n\t\tfunction openDialog() {\r\n\t\t\tgetFormName();\r\n\r\n\t\t\tgtmService.trackCTPEvent('VirtualPageview', $state.current, null);\r\n\r\n\t\t\tngDialog\r\n\t\t\t\t.openConfirm({\r\n\t\t\t\t\ttemplate: '../ngviews/directives/qbConfirmDialog.html',\r\n\t\t\t\t\tclassName: 'ngdialog-theme-default',\r\n\t\t\t\t\tappendClassName: 'ngdialog--confirm',\r\n\t\t\t\t\tscope: $scope,\r\n\t\t\t\t\tcloseByDocument: false,\r\n\t\t\t\t\tcloseByEscape: false,\r\n\t\t\t\t\tshowClose: false,\r\n\t\t\t\t\tdisableAnimation: true\r\n\t\t\t\t})\r\n\t\t\t\t.then(\r\n\t\t\t\t\tfunction(value) {\r\n\t\t\t\t\t\tcallSaveData(value);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfunction(reason) {\r\n\t\t\t\t\t\tgtmService.trackCTPEvent(\r\n\t\t\t\t\t\t\t'gaClick',\r\n\t\t\t\t\t\t\t$state.current,\r\n\t\t\t\t\t\t\treason\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\t\t\t\t\t\t$scope.$root.$broadcast('reload-recaptcha');\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction callSaveData(event) {\r\n\t\t\tvar req = {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\turl: '/api/ctpswitch/savedata',\r\n\t\t\t\tdata: vm.formData\r\n\t\t\t};\r\n\r\n\t\t\t$http(req).then(\r\n\t\t\t\tfunction() {\r\n\t\t\t\t\tvm.incentiveDetails.event = event;\r\n\t\t\t\t\tgtmService.trackCTPEvent(\r\n\t\t\t\t\t\t'gaFormSubmission',\r\n\t\t\t\t\t\t$state.current,\r\n\t\t\t\t\t\tvm.incentiveDetails\r\n\t\t\t\t\t);\r\n\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\tvar sessionProtPath = labelService.getLabelFor(\r\n\t\t\t\t\t\t'redirectURL'\r\n\t\t\t\t\t);\r\n\t\t\t\t\twindow.location.href = util.linkBuilder(sessionProtPath);\r\n\t\t\t\t},\r\n\t\t\t\tfunction(err) {\r\n\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\t$state.go('error');\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction getFormName() {\r\n\t\t\tvm.formName = MODULE_INFO.mainFormName;\r\n\r\n\t\t\tswitch (vm.formName) {\r\n\t\t\t\tcase 'ctpForm': {\r\n\t\t\t\t\tvm.formData = userInputRepository.get();\r\n\r\n\t\t\t\t\tdelete vm.formData.email;\r\n\t\t\t\t\tdelete vm.formData.ctpForm.expiryDate;\r\n\t\t\t\t\tdelete vm.formData.ctpForm.formConsent.expiryDate;\r\n\t\t\t\t\tdelete vm.formData.ctpForm.contactDetails.expiryDate;\r\n\r\n\t\t\t\t\tangular.forEach(vm.formData.ctpForm, function(value, key) {\r\n\t\t\t\t\t\tvm.formData.ctpForm[key] = sanitizeForm(\r\n\t\t\t\t\t\t\tvm.formData.ctpForm[key]\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tangular.isDefined(\r\n\t\t\t\t\t\t\tvm.formData.ctpForm.incentiveDetails.paymentNumber\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tvm.formData.ctpForm.incentiveDetails.directDebit ===\r\n\t\t\t\t\t\t\t'true'\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\tvm.formData.ctpForm.incentiveDetails.paymentNumber =\r\n\t\t\t\t\t\t\t\t'';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvm.formData.ctpForm.incentiveDetails.paymentNumber = '';\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvm.incentiveDetails = vm.formData.ctpForm.incentiveDetails;\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!angular.isDefined(\r\n\t\t\t\t\t\t\tvm.formData.ctpForm.contactDetails.surName\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) {\t\t\r\n\t\t\t\t\t\tvm.formData.ctpForm.contactDetails.surName = '';\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tvm.contactDetails = vm.formData.ctpForm.contactDetails;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction sanitizeForm(object) {\r\n\t\t\tangular.forEach(object, function(value, key) {\r\n\t\t\t\tobject[key] = $sanitize(value);\r\n\t\t\t});\r\n\t\t\treturn object;\r\n\t\t}\r\n\r\n\t\tvm.getLabelFor = function(fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getSectionLabelFor = function(fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getSectionLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getSectionDescriptionFor = function(fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\tlabelService.getSectionDescriptionFor(fieldName)\r\n\t\t\t);\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbConfirmDialog', function() {\r\n\t\treturn {\r\n\t\t\trestrict: 'E',\r\n\t\t\tcontroller: 'QBConfirmDialog',\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\tscope: {},\r\n\t\t\ttransclude: true,\r\n\t\t\tlink: function($scope, element, attrs) {}\r\n\t\t};\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbCoverIncludes',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbCoverIncludes.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tcoverIncludes: '=',\r\n\t\t\t\t\tcoverIncludesTitle: '='\r\n\t\t\t\t}, \r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\t// angular.module('qbePortal').controller('ctpProgress', ctpProgress);\r\n\r\n\t// ctpProgress.$inject = ['$scope'];\r\n\r\n\t// function ctpProgress($scope) {\r\n\t// \tvar vm = this;\r\n\t// \tvm.ctpCompleted = false;\r\n\r\n\t// \t$scope.$on('ctp-completed', function(event){\r\n\t// \t\tvm.ctpCompleted = true;\r\n\t// \t});\t\r\n\r\n\t// }\t\r\n\r\n\tangular.module('qbePortal').directive('qbCtpProgress', \r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbCtpProgress.html',\r\n\t\t\t\t//controller: ctpProgress,\r\n\t\t\t\t//controllerAs: 'vm',\t\t\t\t\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t scope: {\r\n\t\t\t \t\ttextDisplay:'=',\r\n\t\t\t \t\tctpStepTotal:'=',\r\n\t\t\t \t\tctpStepNum:'=',\r\n\t\t\t \t\tctpCompleted:'='\t\t\t \r\n\t\t\t },\r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\tscope.backToForm = function() {\r\n\t\t\t\t\t\tif(scope.ctpStepNum == 2){\r\n\t\t\t\t\t\t\tscope.$emit('show-form-entry');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbCvcNumeric',\r\n\r\n\t\tfunction () {\r\n\t\t\tvar regexNumber = /^\\d+$/;\r\n\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\trequire: 'ngModel',\r\n\t\t\t\tlink: function (scope, element, attrs, ngModel) {\r\n\t\t\t\t\tscope.$watch(function () {\r\n\t\t\t\t\t\treturn ngModel.$viewValue;\r\n\t\t\t\t\t}, function (newValue, oldValue) {\r\n\r\n\t\t\t\t\t\tif (newValue && !regexNumber.test(newValue)) {\r\n\t\t\t\t\t\t\tngModel.$setViewValue(oldValue);\r\n\t\t\t\t\t\t\tngModel.$render();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\t/*\r\n\t * \tusage\r\n\t * \tminDate:maxDate in jQuery datepicker format\r\n\t *\t0d:30d - shows from today to next 30 days\r\n\t *\t-1y:1y - shows from last yesr to next year\r\n\t */\r\n\t//TODO: Add year range to display all the possible years\r\n\tangular.module('qbePortal').directive('qbDatePicker', ['$timeout', '$filter', function ($timeout, $filter) {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: function (scope, element, attrs, ngModelCtrl) {\r\n\t\t\t\tvar dateRange = attrs.qbDatePicker;\r\n\r\n\t\t\t\t//set start date and end date\r\n\t\t\t\tvar startDate = (dateRange.split(':')[0]) ? dateRange.split(':')[0] : '';\r\n\t\t\t\tvar endDate = (dateRange.split(':')[1]) ? dateRange.split(':')[1] : '';\r\n\r\n\t\t\t\tvar datePickerOptions = {\r\n\t\t\t\t\tchangeYear: true,\r\n\t\t\t\t\tchangeMonth: true,\r\n\t\t\t\t\tminDate: startDate,\r\n\t\t\t\t\tmaxDate: endDate,\r\n\t\t\t\t\tdateFormat: 'dd/mm/yy',\r\n\t\t\t\t\tyearRange: \"-100:+0\",\r\n\t\t\t\t\tdefaultDate: '+0'\r\n\t\t\t\t};\r\n\t\t\t\t//timeout is added to add datepicker in next digest cycle\r\n\t\t\t\t$timeout(function () {\r\n\t\t\t\t\telement.datepicker(datePickerOptions).change(\r\n\t\t\t\t\t\tfunction (e) {\r\n\t\t\t\t\t\t\t//if user inputs an oout of range date then datepicker changes it to within range\r\n\t\t\t\t\t\t\telement.datepicker('setDate', element.datepicker('getDate'));\r\n\t\t\t\t\t\t\t//setting the ngModel explicity after the value on the textbox is modified in the previous step\r\n\t\t\t\t\t\t\tngModelCtrl.$setViewValue($filter('date')(element.datepicker('getDate'), 'dd/MM/yyyy'));\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t}, 0, ngModelCtrl, element);\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\t/*\r\n\t * \tusage\r\n\t * \tminDate:maxDate in jQuery datepicker format\r\n\t *\t0d:30d - shows from today to next 30 days\r\n\t *\t-1y:1y - shows from last year to next year\r\n\t */\r\n\t//TODO: Add year range to display all the possible years\r\n\tangular.module('qbePortal').directive('qbDateRange', [function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\tgetDateUnit: function (u) {\r\n\t\t\t\tif (u === 'm') {\r\n\t\t\t\t\treturn 'months';\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn u;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tparseDate: function (dateString) {\r\n\t\t\t\tif (dateString !== '') {\r\n\t\t\t\t\tvar unitSplit = dateString.match(/[a-zA-Z]+|[\\-0-9]+/g);\r\n\t\t\t\t\tif (unitSplit.length === 2) {\r\n\t\t\t\t\t\tvar dateUnit = this.getDateUnit(unitSplit[1]);\r\n\t\t\t\t\t\tdateString = moment().startOf('day').add(parseInt(unitSplit[0]), dateUnit);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn dateString;\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs, ctrl) {\r\n\t\t\t\tvar dateRange = attrs.qbDateRange.split(':');\r\n\r\n\t\t\t\t//set start date and end date\r\n\t\t\t\tvar startDate = (!!dateRange[0]) ? dateRange[0] : '';\r\n\t\t\t\tvar endDate = (!!dateRange[1]) ? dateRange[1] : '';\r\n\t\t\t\tstartDate = this.parseDate(startDate);\r\n\t\t\t\tendDate = this.parseDate(endDate);\r\n\r\n\t\t\t\telement.text('Enter a date between ' + startDate.format('DD/MM/YYYY') + ' and ' + endDate.format('DD/MM/YYYY'));\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\t/*\r\n\t * \tusage\r\n\t * \tminDate:maxDate in jQuery datepicker format\r\n\t *\t0d:30d - shows from today to next 30 days\r\n\t *\t-1y:1y - shows from last year to next year\r\n\t */\r\n\t//TODO: Add year range to display all the possible years\r\n\tangular.module('qbePortal').directive('qbDateValidation', [function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tgetDateUnit: function (u) {\r\n\t\t\t\tif (u === 'm') {\r\n\t\t\t\t\treturn 'months';\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn u;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tparseDate: function (dateString) {\r\n\t\t\t\tif (dateString !== '') {\r\n\t\t\t\t\tvar unitSplit = dateString.match(/[a-zA-Z]+|[\\-0-9]+/g);\r\n\t\t\t\t\tif (unitSplit.length === 2) {\r\n\t\t\t\t\t\tvar dateUnit = this.getDateUnit(unitSplit[1]);\r\n\t\t\t\t\t\tdateString = moment().startOf('day').add(parseInt(unitSplit[0]), dateUnit);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn dateString;\r\n\t\t\t},\r\n\t\t\tisValid: function (value, startDate, endDate) {\r\n\t\t\t\tvar d = moment(value, 'DDMMYYYY');\r\n\t\t\t\tif (d.isValid()) {\r\n\t\t\t\t\treturn moment(d).isBetween(startDate, endDate, null, '[]');\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs, ctrl) {\r\n\r\n\t\t\t\tvar dateRange = attrs.qbDateValidation.split(':');\r\n\r\n\t\t\t\t//set start date and end date\r\n\t\t\t\tvar startDate = (!!dateRange[0]) ? dateRange[0] : '';\r\n\t\t\t\tvar endDate = (!!dateRange[1]) ? dateRange[1] : '';\r\n\t\t\t\tstartDate = this.parseDate(startDate);\r\n\t\t\t\tendDate = this.parseDate(endDate);\r\n\r\n\t\t\t\t// bind enter key\r\n\t\t\t\telement.bind(\"keydown keypress\", function (event) {\r\n\t\t\t\t\tif (event.which === 13 && !ctrl.$valid) {\r\n\t\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\t\tctrl.$setViewValue(moment(startDate).startOf('day').format('DDMMYYYY'));\r\n\t\t\t\t\t\t\tctrl.$render();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tctrl.$validators.date = function (modelValue) {\r\n\t\t\t\t\treturn ctrl.$isEmpty(modelValue) || this.isValid(modelValue, startDate, endDate);\r\n\t\t\t\t}.bind(this);\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\t\tangular.module('qbePortal').directive('qbEmptyShedValidation', [function () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict:'AE',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tshedModels:'<',\r\n\t\t\t\t\tngModel:'<',\r\n\t\t\t\t\ttrigger:'<'\r\n\t\t\t\t},\r\n\t\t\t\thasValidSheds:function(shedModels){\r\n\t\t\t\t\tvar zeroItems=0;\r\n\t\t\t\t\tif(Array.isArray(shedModels)){\r\n\t\t\t\t\t\tshedModels.forEach(function(item){\r\n\t\t\t\t\t\t\tif(item!=undefined && item!=null && item===0){\r\n\t\t\t\t\t\t\t\tzeroItems++;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn zeroItems!=shedModels.length;\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs){\r\n\t\t\t\t\tscope.checkValidSheds = this.hasValidSheds;\r\n\r\n\t\t\t\t\tscope.$watch('shedModels',function(newValue,oldValue,scope){\r\n\t\t\t\t\t\tif (scope.ngModel!=undefined) {\r\n\t\t\t\t\t\t\tif(scope.trigger){\r\n\t\t\t\t\t \t\t\tscope.ngModel.$setValidity('qbEmptyShedValidation', scope.checkValidSheds(newValue));\r\n\t\t\t\t\t\t \t}\r\n\t\t\t\t\t\t \telse{\r\n\t\t\t\t\t\t \t\tscope.ngModel.$setValidity('qbEmptyShedValidation', false);\r\n\t\t\t\t\t\t \t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tscope.$watch('trigger',function(newValue,oldValue,scope){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (scope.ngModel!=undefined) {\r\n\t\t\t\t\t\t\tif(newValue!=undefined && newValue===false ){\r\n\t\t\t\t\t\t\tscope.ngModel.$setValidity('qbEmptyShedValidation', true);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\t\tscope.ngModel.$setValidity('qbEmptyShedValidation', scope.checkValidSheds(scope.shedModels));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n\t\t\t}\r\n\t\t}]);\r\n\t})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbEmptyTableValidation', ['aggregatedRemoveService', function (aggregatedRemoveService) {\r\n\t\treturn {\r\n\t\t\trestrict: 'AE',\r\n\t\t\tscope: {\r\n\t\t\t\ttableData: '<',\r\n\t\t\t\tngModel: '<',\r\n\t\t\t\ttrigger: '<',\r\n\t\t\t\tvalidYears: '<',\r\n\t\t\t},\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\tfunction tableHasData(rows) {\r\n\t\t\t\t\tvar hasData = false;\r\n\t\t\t\t\tif (rows && rows.length > 0) {\r\n\t\t\t\t\t\tvar removedData = aggregatedRemoveService.getList();\r\n\t\t\t\t\t\tif (!angular.isArray(removedData)) {\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trows.some(function (row) {\r\n\t\t\t\t\t\t\tif (removedData.indexOf(row) === -1) {\r\n\t\t\t\t\t\t\t\thasData = true;\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn hasData;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar months = {\r\n\t\t\t\t\t'January': '01',\r\n\t\t\t\t\t'February': '02',\r\n\t\t\t\t\t'March': '03',\r\n\t\t\t\t\t'April': '04',\r\n\t\t\t\t\t'May': '05',\r\n\t\t\t\t\t'June': '06',\r\n\t\t\t\t\t'July': '07',\r\n\t\t\t\t\t'August': '08',\r\n\t\t\t\t\t'September': '09',\r\n\t\t\t\t\t'October': '10',\r\n\t\t\t\t\t'November': '11',\r\n\t\t\t\t\t'December': '12',\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\t/*\r\n\t\t\t\t* Function - validate year position via index\r\n\t\t\t\t* Params - table data, year length\r\n\t\t\t\t* Return - boolean\r\n\t\t\t\t*/\r\n\t\t\t\tfunction validMonths(rows, validYears) {\r\n\t\t\t\t\tvar isMonthValid = true;\r\n\t\t\t\t\tvar lastYearIndex = validYears.length - 1;\r\n\t\t\t\t\tangular.forEach(validYears, function (years, index) {\r\n\t\t\t\t\t\tif (isMonthValid) {\r\n\t\t\t\t\t\t\tfor (var i = 0; rows.length > i; i++) {\r\n\t\t\t\t\t\t\t\tif (years.value == rows[i].year.value && isMonthValid) {\r\n\t\t\t\t\t\t\t\t\tif (index == 0) {\r\n\t\t\t\t\t\t\t\t\t\tvar month = rows[i].month.value;\r\n\t\t\t\t\t\t\t\t\t\tisMonthValid = getEligibleMonths(months[month], true);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse if (index == lastYearIndex) {\r\n\t\t\t\t\t\t\t\t\t\tvar month = rows[i].month.value;\r\n\t\t\t\t\t\t\t\t\t\tisMonthValid = getEligibleMonths(months[month], false);\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tisMonthValid = true;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\treturn isMonthValid;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*\r\n\t\t\t\t* Function - validate month input against current month\r\n\t\t\t\t* Params - month, is current year\r\n\t\t\t\t* Return - boolean\r\n\t\t\t\t*/\t\t\t\t\r\n\t\t\t\tfunction getEligibleMonths(month, currentYear) {\r\n\t\t\t\t\tvar validMonth = true;\r\n\t\t\t\t\tvar currentMonth = moment().tz(\"Australia/Sydney\").format(\"M\");\r\n\r\n\t\t\t\t\tif (!currentYear && parseInt(currentMonth) >= parseInt(month)) {\r\n\t\t\t\t\t\tvalidMonth = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (currentYear && parseInt(month) > parseInt(currentMonth)) {\r\n\t\t\t\t\t\tvalidMonth = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn validMonth;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// scope.$on('table-number-of-rows-changed', function() {\r\n\t\t\t\t// validateTable();\r\n\t\t\t\t// });\r\n\r\n\t\t\t\tscope.$on('form-submitted', function () {\r\n\t\t\t\t\tvalidateTable();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfunction validateTable() {\r\n\t\t\t\t\tif (scope.trigger) {\r\n\t\t\t\t\t\tscope.ngModel.$setValidity('qbEmptyTableValidation', tableHasData(scope.tableData));\r\n\t\t\t\t\t\tif (scope.validYears)\r\n\t\t\t\t\t\t\tscope.ngModel.$setValidity('qbInvalidMonth', validMonths(scope.tableData, scope.validYears));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tscope.ngModel.$setValidity('qbEmptyTableValidation', true);\r\n\t\t\t\t\t\tif (scope.validYears)\r\n\t\t\t\t\t\t\tscope.ngModel.$setValidity('qbInvalidMonth', true);\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}]);\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('qbRadioLabel', qbRadioLabelController);\r\n\r\n\tqbRadioLabelController.$inject = ['$scope', 'labelService'];\r\n\r\n\tfunction qbRadioLabelController($scope, labelService) {\r\n\t\tvar vm = this,\r\n\t\t\tfieldKey = $scope.fieldKey;\r\n\r\n\t\tvm.fieldName = $scope.name;\r\n\t\tvm.isError = false;\r\n\r\n\t\t$scope.$on('enable-field-error-class', function (event) {\r\n\t\t\tvm.isError = true;\r\n\t\t});\r\n\r\n\t\t$scope.$on('element-id-set', function (event, labelKey, id) {\r\n\t\t\tif (fieldKey !== labelKey) return;\r\n\t\t\tvm.labelFor = id;\r\n\t\t});\r\n\r\n\t\tvm.label = $scope.label || labelService.getLabelFor(fieldKey);\r\n\r\n\t\tvm.addTooltip = $scope.hasOwnProperty('addTooltip');\r\n\t\tif (vm.addTooltip)\r\n\t\t\tvm.tooltip = labelService.getTooltipFor(fieldKey);\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbRadioLabel', function () {\r\n\t\treturn {\r\n\t\t\ttemplateUrl: '../ngviews/directives/qbRadioLabel.html',\r\n\t\t\trestrict: 'E',\r\n\t\t\tcontroller: qbRadioLabelController,\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\t// transclude: true,\r\n\t\t\tscope: {\r\n\t\t\t\tlabel: '@',\r\n\t\t\t\tfieldKey: '@',\r\n\t\t\t\taddTooltip: '@?',\r\n\t\t\t},\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('FieldWrapper', FieldWrapper);\r\n\r\n\tFieldWrapper.$inject = ['$scope', 'labelService', '$sce', '$filter', 'gtmService'];\r\n\r\n\tfunction FieldWrapper($scope, labelService, $sce, $filter, gtmService) {\r\n\t\tvar vm = this,\r\n\t\t\tfieldKey = $scope.fieldKey,\r\n\t\t\tqbTrack = $scope.qbTrack;\r\n\r\n\t\tvm.fieldName = $scope.name;\r\n\t\tvm.showErrorBottom = $scope.showErrorBottom;\r\n\t\tvm.isError = false;\r\n\t\tvm.hintCatcher = null;\r\n\t\tvm.expandHintText = $scope.expandHintText == undefined ? false : $scope.expandHintText;\r\n\r\n\t\tvm.getGlobalOptionLabel = function (optionType, optionValue) {\r\n\t\t\treturn labelService.getGlobalOptionLabel(optionType, optionValue);\r\n\t\t}\r\n\r\n\t\t$scope.$on('enable-field-error-class', function (event) {\t\t\t\r\n\t\t\tvm.isError = true;\r\n\t\t});\r\n\r\n\t\t$scope.$on('element-id-set', function (event, labelKey, id) {\r\n\t\t\tif (fieldKey !== labelKey) return;\r\n\t\t\tvm.labelFor = id;\r\n\t\t});\r\n\r\n\t\t$scope.$on('hide-hint', function(event){\r\n\t\t\tvm.showHint = false;\r\n\t\t});\r\n\r\n\t\t$scope.$on('show-hint', function(event){\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tQBE.expandCollapse.init();\r\n\t\t\t}, 1000)\t\t\t\r\n\t\t\tvm.showHint = true;\r\n\t\t});\t\t\r\n\r\n\r\n\t\t// If there's a fieldKey, look up all the labels/helptext\r\n\t\tif (fieldKey) {\r\n\t\t\t//Additional hint param\r\n\t\t\tvm.showHint = true;\r\n\t\t\t\r\n\t\t\t// Wildcard\r\n\t\t\tvm.labelWildcard = $scope.labelWildcard;\r\n\r\n\t\t\t// Label\r\n\t\t\tvm.label = labelService.getLabelFor(fieldKey);\r\n\r\n\t\t\t// Hide labels which are used for accessibility\r\n\t\t\tvm.hideLabel = $scope.hasOwnProperty('hideLabel');\r\n\r\n\t\t\t// Tooltip\r\n\t\t\tvm.tooltip = labelService.getTooltipFor(fieldKey);\r\n\r\n\t\t\t// HTML Label\r\n\t\t\t// vm.labelMarkup = $sce.trustAsHtml(labelService.getLabelFor(fieldKey));\r\n\r\n\t\t\t// Help Text\r\n\t\t\tif(typeof vm.labelWildcard == 'string' || typeof vm.labelWildcard == 'undefined'){\r\n\t\t\t\tvm.hintText = $sce.trustAsHtml($filter('wildcardReplace')(labelService.getHintTextFor(fieldKey), vm.labelWildcard));\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\t// Handle multiple wildcard\r\n\t\t\t\tvar argArr = [];\r\n\t\t\t\targArr.push(labelService.getHintTextFor(fieldKey));\r\n\t\t\t\targArr = argArr.concat(vm.labelWildcard);\r\n\t\t\t\tvm.hintText = $sce.trustAsHtml($filter('wildcardReplace').apply(null, argArr));\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Extended Help Text\r\n\t\t\t// TODO: fix this to not use timeout\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tQBE.expandCollapse.init();\r\n\t\t\t}, 1000)\r\n\t\t\tvm.helpText = $sce.trustAsHtml(labelService.getHelpTextFor(fieldKey));\r\n\r\n\t\t\t// Secondary info Text\r\n\t\t\tvm.secondaryInfoText = $sce.trustAsHtml(labelService.getSecondaryInfoTextFor(fieldKey));\r\n\t\t}\r\n\r\n\t\tvm.getLabel = function () {\r\n\t\t\tvar label = vm.label;\r\n\r\n\t\t\tvm.labelWildcard = $scope.labelWildcard;\r\n\r\n\t\t\tif (vm.labelWildcard) {\r\n\t\t\t\tlabel = $filter('wildcardReplace')($sce.trustAsHtml(vm.label), vm.labelWildcard);\r\n\t\t\t}\r\n\r\n\t\t\treturn label;\r\n\t\t}\r\n\r\n\t\tvm.showImageRefForPayment = function(data) {\r\n\t\t\tconsole.log(data);\r\n\t\t\tif(data == 'enterPaymentRef') {\r\n\t\t\t\tangular.element('#pay-img-ref').toggleClass('ng-hide');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t\tWhen select a product from drop down\r\n\t\t\tvalidate product and do Gtm tracking\r\n\t\t*/\r\n\t\tvm.tooltipMouseOver = function(tooltipMessage) {\r\n\t\t\tif (qbTrack === 'true') {\r\n\t\t\t\tgtmService.trackTooltipMouseOver(tooltipMessage);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbFieldWrapper', function () {\r\n\t\treturn {\r\n\t\t\ttemplateUrl: '/ngviews/directives/qbFieldWrapper.html',\r\n\t\t\trestrict: 'A',\r\n\t\t\tcontroller: FieldWrapper,\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\ttransclude: true,\r\n\t\t\tscope: {\r\n\t\t\t\tfieldKey: '@',\r\n\t\t\t\thideLabel: '@?',\r\n\t\t\t\tlabelWildcard: '<',\r\n\t\t\t\tsecondaryInfoTextDisplayOn: '=?',\r\n\t\t\t\tvalidationSelector: '@',\r\n\t\t\t\tshowErrorBottom: '@',\r\n\t\t\t\texpandHintText: '=',\r\n\t\t\t\tqbTrack:'@?',\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbFormField', ['hierarchyDecorator', 'validationService', 'userInputRepository',\r\n\t\tfunction (hierarchyDecorator, validationService, userInputRepository) {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tcontrollerAs: 'vm',\r\n\t\t\t\trequire: 'ngModel',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tname: '@',\r\n\t\t\t\t\tlabelKey: '@',\r\n\t\t\t\t\tsetHierarchy: '&?',\r\n\t\t\t\t\tcommonValue: '@?',\r\n\t\t\t\t\tspinner:'<',\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs, ngModelCtrl, transclude) {\r\n\t\t\t\t\tvar hasError = false;\r\n\t\t\t\t\tscope._element = element;\r\n\t\t\t\t\tvar model = ngModelCtrl;\r\n\r\n\t\t\t\t\tscope.$on('broadcast-field-errors', function () {\r\n\t\t\t\t\t\thasError = true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tfunction formIsSubmitted() {\r\n\t\t\t\t\t\treturn hasError == true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tscope.$watch(function () {\r\n\t\t\t\t\t\tvalidationService.validateInput(element, ngModelCtrl, scope.labelKey);\r\n\t\t\t\t\t\tvar parent = element.parents('div.ctrl-holder');\r\n\t\t\t\t\t\tif (!parent || !parent[0]) return;\r\n\t\t\t\t\t\tparent = $(parent).first();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (ngModelCtrl.$invalid && (ngModelCtrl.$dirty || formIsSubmitted())) {\r\n\t\t\t\t\t\t\tparent.addClass('is-error');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tparent.find('[data-name='+scope.labelKey+']').addClass('ng-hide'); //applicable only for CTP forms\r\n\t\t\t\t\t\t\tparent.removeClass('is-error');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (scope.commonValue !== undefined) {\r\n\t\t\t\t\t\t// console.log( model.$modelValue ) ;\r\n\t\t\t\t\t\tmodel.$viewChangeListeners.push(function () {\r\n\t\t\t\t\t\t\tscope.$emit('common-value-update', {name: scope.commonValue, value: model.$modelValue});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tmodel.$formatters.push(function () {\r\n\t\t\t\t\t\t\t/** run on initialisation of model value */\r\n\t\t\t\t\t\t\tscope.$emit('common-value-update', {name: scope.commonValue, value: model.$modelValue});\r\n\t\t\t\t\t\t\treturn model.$modelValue;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (scope.setHierarchy !== undefined)\r\n\t\t\t\t\t\thierarchyDecorator.attach(scope, {element: scope._element, name: scope.name});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}]);\r\n})();\r\n","/**\r\n * qbFormSection (qb-form-section) aims to implement a reusable binding container which facilitate access to reference values\r\n * and main functionalities and services available to different sections of the form without coupling each section to the parent\r\n * data structure.\r\n */\r\n(function () {\r\n\t\"use strict\";\r\n\r\n\tangular.module(\"qbePortal\").controller(\"FormSection\", FormSection);\r\n\r\n\tFormSection.$inject = [\r\n\t\t\"$scope\",\r\n\t\t\"$rootScope\",\r\n\t\t\"$state\",\r\n\t\t\"$sce\",\r\n\t\t\"$window\",\r\n\t\t\"quoteOptions\",\r\n\t\t\"quoteModelFactory\",\r\n\t\t\"labelService\",\r\n\t\t\"userInputRepository\",\r\n\t\t\"serviceResponseRepository\",\r\n\t\t\"paymentService\",\r\n\t\t\"Util\",\r\n\t\t\"$http\",\r\n\t\t\"$filter\",\r\n\t\t\"$location\",\r\n\t\t\"storage\",\r\n\t\t\"campaignService\",\r\n\t\t\"paymentLoggerService\",\r\n\t\t\"gtmService\"\r\n\t];\r\n\r\n\tfunction FormSection(\r\n\t\t$scope,\r\n\t\t$rootScope,\r\n\t\t$state,\r\n\t\t$sce,\r\n\t\t$window,\r\n\t\tquoteOptions,\r\n\t\tquoteModelFactory,\r\n\t\tlabelService,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tpaymentService,\r\n\t\tUtil,\r\n\t\t$http,\r\n\t\t$filter,\r\n\t\t$location,\r\n\t\tstorage,\r\n\t\tcampaignService,\r\n\t\tpaymentLoggerService,\r\n\t\tgtmService\r\n\t) {\r\n\t\tvar vm = this;\r\n\t\tvar userInputValues = {},\r\n\t\t\tchildren = {},\r\n\t\t\tsectionData = {};\r\n\t\tvar errorCount = 0;\r\n\t\tvar isRetrieval = storage.getItem(\"retrieve\");\r\n\t\t$scope.hierarchyList = [$scope.name];\r\n\t\tvm.sectionName = $scope.name;\r\n\t\tvm.fieldValues = $scope.fieldValues || {};\r\n\t\tvm.formSelector = $scope.formSelector;\r\n\t\tvm.aggregatedListName = $scope.aggregatedListName;\r\n\t\tvm.fieldOptions = {};\r\n\t\tvm.children = children;\r\n\t\tvm.commonValues = {};\r\n\t\tvm.isEligible = false;\r\n\t\tvm.showError = false;\r\n\t\tvm.showPaypalError = false;\r\n\t\tvm.showAustpostBillpay = 0;\r\n\t\tvm.showSDExemption = storage.getItem(\"stamp-duty\");\r\n\t\tvm.showCreditCard = false;\r\n\t\tvm.microformInstance = undefined;\t\t\r\n\r\n\t\tvm.policyStartDateChanged = function(value) {\r\n\t\t\tif (!moment(value, \"DD/MM/YYYY\").isValid()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tstorage.setItem(\r\n\t\t\t\t'policy-start-date', \r\n\t\t\t\tmoment(\r\n\t\t\t\t\tvalue,\r\n\t\t\t\t\t\"DD/MM/YYYY\"\r\n\t\t\t\t).format(\"YYYY-MM-DD\"));\r\n\t\t\t$rootScope.$broadcast(\"recall-get-details\");\r\n\t\t};\r\n\r\n\t\tvm.toolTipHover = function(message) {\r\n\t\t\tgtmService.trackTooltipMouseOver(message);\r\n\t\t};\r\n\r\n\t\tfunction trackformErrorByErrorMessage(errMessage) {\r\n\t\t\t/* gtm track error message */\r\n\t\t\tif (errMessage) {\r\n\t\t\t\tgtmService.trackStandardEvent('error', 'error message', errMessage, true);\r\n\t\t\t}\t\t\t\r\n\t\t\t/* end gtm track error message */\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!isUndefinedOrNull($window.qbe.fieldLabels.config) &&\r\n\t\t\t!isUndefinedOrNull(\r\n\t\t\t\t$window.qbe.fieldLabels.config.AllowClaimsPayments\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\tvm.showAustpostBillpay =\r\n\t\t\t\t$window.qbe.fieldLabels.config.AllowClaimsPayments;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.validationSummary != undefined) {\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.validationSummary.formErrorMessage;\r\n\r\n\t\t\tif (vm.showError) {\r\n\t\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\r\n\t\t//unauthenticated payment\r\n\t\tvm.showPaymentSection = false;\r\n\t\tvm.isEnterPaymentRefError = false;\r\n\t\tvm.isEnterPaymentRefErrorLength = false;\r\n\t\tvm.policyCategory = \"\";\r\n\t\tvm.validateProducts = validateProducts;\r\n\t\tvm.selectProduct = selectProduct;\r\n\r\n\t\tvm.showContentsSumInsuredInLowerRange = false;\r\n\t\tvm.showYourContentsSumInsuredInLowerRange = false;\r\n\t\tvm.getBuildingEstimate = getBuildingEstimate;\r\n\t\tvm.getBuildingMaximum = getBuildingMaximum;\r\n\t\tvm.getBuildingMinimum = getBuildingMinimum;\r\n\t\tvm.getEstimateRebuild = getEstimateRebuild;\r\n\t\tvm.stateName = $state.$current.name;\r\n\t\tvm.validateBuildingSumInsured = validateBuildingSumInsured;\r\n\t\tvm.toggleContentsSumInsuredInLowerRange = toggleContentsSumInsuredInLowerRange;\r\n\t\tvm.toggleYourContentsSumInsuredInLowerRange = toggleYourContentsSumInsuredInLowerRange;\r\n\t\tvm.showAggregate = false;\r\n\r\n\t\tvm.csCCInvalid = false;\r\n\t\tvm.csCVCInvalid = false;\r\n\r\n\t\t$scope.$on(\"credit-card-number-isvalid\", function (e, val) {\r\n\t\t\tvm.csCCInvalid = !val;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"credit-card-cvc-isvalid\", function (e, val) {\r\n\t\t\tvm.csCVCInvalid = !val;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"bike-selected\", function (e, val) {\r\n\t\t\tif (vm.fieldValues.insuredExcessValue){\r\n\t\t\t\tif (vm.fieldValues.insuredExcessValue.comprehensivePref === \"agreed\") {\r\n\t\t\t\t\tvm.fieldValues.insuredExcessValue.comprehensivePref = \"market\";\r\n\t\t\t\t\tvm.requote();\r\n\t\t\t\t}\r\n\t\t\t}\t\t\t\r\n\t\t});\r\n\t\t//validate if quote is from retrieval to show driver aggregates\r\n\t\tif (angular.equals(isRetrieval, {})) vm.showAggregate = true;\r\n\r\n\t\t/*\r\n\t\t * Polyfill for startswith for non supported browser\r\n\t\t *\r\n\t\t */\r\n\t\tif (!String.prototype.startsWith) {\r\n\t\t\tString.prototype.startsWith = function (searchString, position) {\r\n\t\t\t\tposition = position || 0;\r\n\t\t\t\treturn (\r\n\t\t\t\t\tthis.substr(position, searchString.length) === searchString\r\n\t\t\t\t);\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t//Fill in old details if returned from Paypal\r\n\t\tfunction restoreDetails() {\r\n\t\t\tvar formDetails = storage.getItem(\"userInput\");\r\n\r\n\t\t\tvm.fieldValues.selectInsuranceType =\r\n\t\t\t\tformDetails.paybillForm.selectInsuranceType.selectInsuranceType;\r\n\t\t\tvalidateProducts(vm.fieldValues.selectInsuranceType);\r\n\t\t\tvm.fieldValues.enterPaymentRef =\r\n\t\t\t\tformDetails.paybillForm.selectInsuranceType.enterPaymentRef;\r\n\t\t\tstorage.setItem(\"auto-find-bill\", {\r\n\t\t\t\ttrigger: true,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tvm.sessionLabels = $window.qbe.fieldLabels.sessionFunction;\r\n\t\t}\r\n\r\n\t\t$scope.$on(\"restore-payment-details\", function () {\r\n\t\t\trestoreDetails();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"clear-field-values\", function () {\r\n\t\t\tstorage.clear();\r\n\t\t\t$scope.formData = {};\r\n\t\t});\r\n\r\n\t\t$scope.$root.$on(\"common-value-update\", function (event, update) {\r\n\t\t\tvm.commonValues[update.name] = update.value;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"switch-to-QBE\", function (event, isEligible) {\r\n\t\t\tvm.isEligible = isEligible;\r\n\t\t});\r\n\r\n\t\t//show amount on top right payments pag\r\n\t\t$scope.$on(\"switch-payment-amount\", function (\r\n\t\t\tevent,\r\n\t\t\tshowPaymentSection\r\n\t\t) {\r\n\t\t\tvm.showPaymentSection = showPaymentSection;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"show-aggregate\", function () {\r\n\t\t\tvm.showAggregate = true;\r\n\t\t});\r\n\r\n\t\t/** Event received from child sections to receive common values upon initialisation\r\n\t\t * This is for cases when sections requiring common values are registered after those providing them\r\n\t\t */\r\n\t\t$scope.$on(\"request-common-values\", function (event, update) {\r\n\t\t\t$scope.$broadcast(\"received-common-values\", vm.commonValues);\r\n\t\t});\r\n\r\n\t\t/** updates common values upon receiving from parent section */\r\n\t\t$scope.$on(\"received-common-values\", function (event, commonValues) {\r\n\t\t\tvm.commonValues = commonValues;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"broadcast-field-errors\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.validationSummary == undefined\r\n\t\t\t\t\t? null\r\n\t\t\t\t\t: $window.qbe.fieldLabels.validationSummary\r\n\t\t\t\t\t\t\t.formErrorMessage;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"broadcast-no-field-errors\", function (event) {\r\n\t\t\tvm.showError = false;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"paypal-payment-error\", function (event) {\r\n\t\t\tvm.showPaypalError = true;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.paypalCodeMessage.value;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"payment-already-made\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.validationSummary.alreadyPaidMessage;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"payment-error\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.validationSummary.paymentErrorMessage;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalid-payment-reference-number\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tif ($window.qbe.fieldLabels.paymentRefNoMatchFound) {\r\n\t\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentRefNoMatchFound.pleaseCheckRefNumber;\r\n\t\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"direct-debit-payment-error\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.directDebitMessage.value;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t// $scope.$on('credit-card-form-error', function (event) {\r\n\t\t// \tvm.showError = true;\r\n\t\t// \tvm.showPaypalError = false;\r\n\t\t// \tvm.formErrorMessage = $window.qbe.fieldLabels.validationSummary.formErrorMessage;\r\n\t\t// });\r\n\t\t/**\r\n\t\t * Holds all the reference values to be used by the form section to access\r\n\t\t * other values entered by the user in other steps of the form.\r\n\t\t */\r\n\t\tvm.quoteModel = quoteModelFactory.create();\r\n\r\n\t\t$scope.$root.$on(\"selected-quote-changed\", function () {\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\t\t});\r\n\r\n\t\t// Check the return of campaign code validation\r\n\t\t$scope.$on(\"valid-campaign\", function (event, args) {\r\n\t\t\tif (args.isValid) {\r\n\t\t\t\tvm.campaignBanner = campaignService.getCampaignConfig(\r\n\t\t\t\t\targs.promoValue,\r\n\t\t\t\t\tfalse\r\n\t\t\t\t).content;\r\n\t\t\t\tvm.isCampaignCodeValid = campaignService.getCampaignConfig(\r\n\t\t\t\t\targs.promoValue,\r\n\t\t\t\t\tfalse\r\n\t\t\t\t).isCampaignCodeValid;\r\n\t\t\t} else {\r\n\t\t\t\tvm.isCampaignCodeValid = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$root.$on(\"update-quote-model-reference\", function () {\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\t\t});\r\n\t\t/**\r\n\t\t * Creates an Array and assigns it to the fieldValues with the given name @fieldName\r\n\t\t */\r\n\t\tvm.initialiseListFor = function (fieldName) {\r\n\t\t\tif (\r\n\t\t\t\t!vm.fieldValues[fieldName] ||\r\n\t\t\t\t!Array.isArray(vm.fieldValues[fieldName])\r\n\t\t\t)\r\n\t\t\t\tvm.fieldValues[fieldName] = [];\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Creates an object {} and assings it to the fieldValues with given name @fieldName\r\n\t\t */\r\n\t\tvm.initialiseFieldValue = function (formObjectName) {\r\n\t\t\tif (!vm.fieldValues[formObjectName]) {\r\n\t\t\t\tvm.fieldValues[formObjectName] = {};\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Gets the list of options from labelService for the fieldName provided @fieldName\r\n\t\t * optionally adds @defaultValue to the list.\r\n\t\t */\r\n\t\tvm.getOptionsFor = function (fieldName, defaultValue) {\r\n\t\t\treturn getOptions(fieldName, defaultValue);\r\n\t\t};\r\n\r\n\t\tvm.disableNext = function (disable) {\r\n\t\t\t$scope.$emit(\"disable-next\", disable);\r\n\t\t};\r\n\r\n\t\tvm.disableNextForConvictions = function (key, value, section) {\r\n\t\t\t$scope.$emit(\"conviction-check\", {\r\n\t\t\t\tconviction: key,\r\n\t\t\t\tinput: value,\r\n\t\t\t\tsection: section,\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tfunction getOptions(fieldName, defaultValue) {\r\n\t\t\tif (!vm.fieldOptions[fieldName]) {\r\n\t\t\t\tvm.fieldOptions[fieldName] = labelService\r\n\t\t\t\t\t.getOptionsFor(fieldName)\r\n\t\t\t\t\t.slice();\r\n\t\t\t\tif (defaultValue)\r\n\t\t\t\t\tvm.fieldOptions[fieldName].unshift(defaultValue);\r\n\t\t\t}\r\n\r\n\t\t\treturn vm.fieldOptions[fieldName];\r\n\t\t}\r\n\r\n\t\t// TODO: set campaign code for ctp sa\r\n\t\tvm.getCtpBanner = function () {\r\n\t\t\tvar codeFromLink = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"ctpForm.promotionalCode.value\"\r\n\t\t\t);\r\n\r\n\t\t\tif (!isUndefinedOrNull(codeFromLink)) {\r\n\t\t\t\tvm.campaignBanner = campaignService.getCampaignConfig(\r\n\t\t\t\t\tcodeFromLink,\r\n\t\t\t\t\tfalse\r\n\t\t\t\t).content;\r\n\t\t\t\tif (isUndefinedOrNull(vm.campaignBanner)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else return true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.getCampaignSteps = function (text) {\r\n\t\t\treturn $sce.trustAsHtml(text);\r\n\t\t};\r\n\r\n\t\tvm.getObjectValue = function (fieldName, fieldLabel) {\r\n\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\tlabelService.getObjectValue(fieldName, fieldLabel)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getObjectValueRaw = function (fieldName, fieldLabel) {\r\n\t\t\treturn labelService.getObjectValue(fieldName, fieldLabel);\r\n\t\t};\r\n\r\n\t\tvm.getLabelFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getSectionLabelFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getSectionLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getSectionDescriptionFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\tlabelService.getSectionDescriptionFor(fieldName)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getHintTextFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getHintTextFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getHelpTextFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getHelpTextFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOptionsFor = function (optionType, defaultValue) {\r\n\t\t\tvar options = labelService.getGlobalOptionsFor(optionType).slice();\r\n\t\t\tif (defaultValue) {\r\n\t\t\t\toptions.unshift(defaultValue);\r\n\t\t\t}\r\n\r\n\t\t\treturn options;\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOptionLabel = function (optionType, optionValue) {\r\n\t\t\tvar optionKeyValues = this.getGlobalOptionsFor(optionType);\r\n\t\t\tvar label = null;\r\n\t\t\tif (optionKeyValues) {\r\n\t\t\t\tangular.forEach(optionKeyValues, function (option) {\r\n\t\t\t\t\tif (option.value == optionValue) label = option.label;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn label;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Gets content-authored option names from the label service for options returned by the service.\r\n\t\t * This allows content-authors to define labels for values returned by GuideWire services for example.\r\n\t\t */\r\n\t\tvm.getLabelForRemoteOption = function (fieldName, labelKey) {\r\n\t\t\treturn labelService.getLabelForRemoteOption(fieldName, labelKey);\r\n\t\t};\r\n\r\n\t\tvm.hasServiceResponseFrom = function (serviceName) {\r\n\t\t\t//call getUserInput method in form.controller to have a session storage\r\n\t\t\t$scope.$root.$broadcast(\"get-user-input\");\r\n\t\t\tQBE.expandCollapse.init();\r\n\t\t\treturn (\r\n\t\t\t\tserviceResponseRepository.getLastResponseFrom(serviceName) !==\r\n\t\t\t\tnull\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.setCoverTypeClass = function (coverTypeClass) {\r\n\t\t\tvm.setSelectedCoverType(coverTypeClass, \"standard\");\r\n\t\t};\r\n\r\n\t\tvm.setCoverTypeClassWithMotorSubClass = function (\r\n\t\t\tcoverTypeClass,\r\n\t\t\tcomprehensiveCoverTypeSubClass,\r\n\t\t\tthirdPartyCoverTypeSubClass\r\n\t\t) {\r\n\t\t\tif (coverTypeClass === \"comprehensive\") {\r\n\t\t\t\t//comprehensive set to standard\r\n\t\t\t\tvm.setSelectedCoverType(coverTypeClass, \"standard\");\r\n\t\t\t} else if (coverTypeClass === \"third_party\") {\r\n\t\t\t\tif (thirdPartyCoverTypeSubClass === \"third_party\") {\r\n\t\t\t\t\t//production issue fix [CPJIRA-4147] as default 3rd party is standard\r\n\t\t\t\t\tthirdPartyCoverTypeSubClass = \"standard\";\r\n\t\t\t\t}\r\n\t\t\t\tvm.setSelectedCoverType(\r\n\t\t\t\t\tcoverTypeClass,\r\n\t\t\t\t\tthirdPartyCoverTypeSubClass\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\t//else do a standard subclass\r\n\t\t\t\tvm.setSelectedCoverType(coverTypeClass, \"standard\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.setCoverTypeSubClass = function (coverTypeSubClass) {\r\n\t\t\tvar coverType = quoteOptions.getSelectedCoverType();\r\n\t\t\tvm.setSelectedCoverType(coverType.superType, coverTypeSubClass);\r\n\t\t};\r\n\r\n\t\tvm.setSelectedCoverType = function (coverTypeClass, coverTypeSubClass) {\r\n\t\t\tquoteOptions.setSelectedCoverType(\r\n\t\t\t\tcoverTypeClass,\r\n\t\t\t\tcoverTypeSubClass\r\n\t\t\t);\r\n\t\t\tvm.requote();\r\n\t\t\t// $scope.$root.$broadcast('selected-quote-changed') ;\r\n\t\t};\r\n\r\n\t\tvm.setSelectedOffering = function (offering) {\r\n\t\t\tquoteOptions.setSelectedOffering(offering);\r\n\t\t\tvm.requote();\r\n\t\t\t// $scope.$root.$broadcast('selected-quote-changed') ;\r\n\t\t};\r\n\r\n\t\t/*\r\n\t\t *calculates the claimable rent\r\n\t\t * weeks - in format '4Weeks'...'15Weeks'\r\n\t\t */\r\n\t\tvm.getRentClaimValue = function (weeklyRent, weeks) {\r\n\t\t\treturn parseInt(weeks) * weeklyRent;\r\n\t\t};\r\n\r\n\t\tvm.isSumInsuredTypeAvailable = function (insuredType) {\r\n\t\t\treturn quoteOptions.isSumInsuredTypeAvailable(insuredType);\r\n\t\t};\r\n\r\n\t\tvm.isCoverTypeAvailable = function (coverTypeClass) {\r\n\t\t\treturn quoteOptions.isCoverTypeAvailable(coverTypeClass);\r\n\t\t};\r\n\r\n\t\tvm.isCoverSubTypeAvailable = function (\r\n\t\t\tcoverTypeClass,\r\n\t\t\tcoverTypeSubClass\r\n\t\t) {\r\n\t\t\treturn quoteOptions.isCoverSubTypeAvailable(\r\n\t\t\t\tcoverTypeClass,\r\n\t\t\t\tcoverTypeSubClass\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getSelectedCoverType = function () {\r\n\t\t\treturn quoteOptions.getSelectedCoverType();\r\n\t\t};\r\n\r\n\t\tvm.getSelectedQuote = function () {\r\n\t\t\treturn quoteOptions.getSelectedQuoteResponse();\r\n\t\t};\r\n\r\n\t\tvm.getQuickQuoteData = function () {\r\n\t\t\treturn serviceResponseRepository.getLastResponseFrom(\"quickQuote\");\r\n\t\t};\r\n\r\n\t\tvm.isStrataOrRegisteredVisible = function () {\r\n\t\t\tvar buildingType = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.tellUsAboutTheProperty.typeOfBuilding\"\r\n\t\t\t);\r\n\t\t\tvar state = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.tellUsAboutTheProperty.address.state\"\r\n\t\t\t);\r\n\t\t\tvar includedTypes = [\r\n\t\t\t\t\"unit\",\r\n\t\t\t\t\"duplex\",\r\n\t\t\t\t\"triplex\",\r\n\t\t\t\t\"flat\",\r\n\t\t\t\t\"villa\",\r\n\t\t\t\t\"townhouse\",\r\n\t\t\t];\r\n\t\t\tif (state === \"AU_WA\" && includedTypes.indexOf(buildingType) > -1) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.getAddressState = function () {\r\n\t\t\tvar state = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.tellUsAboutTheProperty.address.state\"\r\n\t\t\t);\r\n\t\t\treturn state;\r\n\t\t};\r\n\r\n\t\tvm.isRapidEstimatePanelVisible = function () {\r\n\t\t\tvar visible = true;\r\n\t\t\tif (vm.sectionName === \"homeForm\") {\r\n\t\t\t\tvar howIsHomeOccupied = vm.commonValues.howIsHomeOccupied;\r\n\t\t\t\tif (howIsHomeOccupied === \"unoccupied\") {\r\n\t\t\t\t\tvisible = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tvm.commonValues.coverNeeds_contents == true ||\r\n\t\t\t\t\tvm.commonValues.coverNeeds_building == true\r\n\t\t\t\t) {\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvisible = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn visible;\r\n\t\t};\r\n\r\n\t\tvm.isDisplayRapidEstimate = function () {\r\n\t\t\tvar display = false;\r\n\t\t\tif ($window.qbe.rapidEstimateDisplay) {\r\n\t\t\t\tif ($window.qbe.rapidEstimateDisplay.display == true) {\r\n\t\t\t\t\tdisplay = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdisplay = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn display;\r\n\t\t};\r\n\t\tvm.$onInit = function () {\r\n\t\t\tif ($scope.register)\r\n\t\t\t\t// gtm track landing page\r\n\t\t\t\tif ($scope.name === 'paybillForm') {\r\n\t\t\t\t\tgtmService.trackPayBillVirtualPageLanding();\r\n\t\t\t\t}\r\n\t\t\t\t$scope.register({\r\n\t\t\t\t\tname: $scope.name,\r\n\t\t\t\t\tinit: vm.initFn,\r\n\t\t\t\t\tget: vm.getValue,\r\n\t\t\t\t});\r\n\r\n\t\t\tif ($scope.formData) {\r\n\t\t\t\t//sets it back to the formsection as the object has not been fully initialised when called in form controller\r\n\t\t\t\tUtil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t\tvm.fieldValues = $scope.formData[$scope.name] || {};\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.sectionName == \"yourBuilding\") {\r\n\t\t\t\t//dd-3747 - added building sum insured checking because radio buttons are not in the data model\r\n\t\t\t\tcheckBuildingSumInsured();\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.sectionName == \"mainPolicyHolderContact\") {\r\n\t\t\t\tvm.fieldValues.emailAddress1 = vm.quoteModel.email;\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.sectionName == \"selectInsuranceType\") {\r\n\t\t\t\tvar paymentError = storage.getItem(\"payment-error-details\");\r\n\t\t\t\tif (paymentError && paymentError.mode == \"paypal\") {\r\n\t\t\t\t\t$scope.$broadcast(\"paypal-payment-error\");\r\n\t\t\t\t\trestoreDetails();\r\n\t\t\t\t\tstorage.removeItem(\"payment-error-details\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (paymentError && paymentError.mode == \"cc\") {\r\n\t\t\t\t\t$scope.$broadcast(\"payment-error\");\r\n\t\t\t\t\trestoreDetails();\r\n\t\t\t\t\tstorage.removeItem(\"payment-error-details\");\r\n\t\t\t\t}\t\t\t\t\r\n\r\n\t\t\t\t// open section according to param\r\n\t\t\t\tvar uiSelectedInsuranceType = '';\r\n\t\t\t\tvar uiSelectedInsuranceTypeCode = $location.search().t;\r\n\t\t\t\tvar uiRefNum = $location.search().r;\r\n\r\n\t\t\t\tvar selectedInsuranceTypeOptions = vm.getOptionsFor('selectInsuranceType');\r\n\r\n\t\t\t\tif (uiSelectedInsuranceTypeCode) {\r\n\t\t\t\t\tuiSelectedInsuranceTypeCode = uiSelectedInsuranceTypeCode.toLowerCase();\r\n\r\n\t\t\t\t\tif (selectedInsuranceTypeOptions && selectedInsuranceTypeOptions.length > 0) {\r\n\t\t\t\t\t\tfor (var n = 0; n < selectedInsuranceTypeOptions.length; n++) {\r\n\t\t\t\t\t\t\tvar selectedInsuranceTypeItem = selectedInsuranceTypeOptions[n];\r\n\t\t\t\t\t\t\tif (selectedInsuranceTypeItem.attributes != \"\" && selectedInsuranceTypeItem.attributes == uiSelectedInsuranceTypeCode) {\r\n\t\t\t\t\t\t\t\tuiSelectedInsuranceType = selectedInsuranceTypeItem.value;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif (uiSelectedInsuranceType) {\r\n\t\t\t\t\tvm.fieldValues.selectInsuranceType = uiSelectedInsuranceType;\r\n\t\t\t\t\tvm.selectProduct(vm.fieldValues.selectInsuranceType);\r\n\t\t\t\t}\t\t\t\t\r\n\r\n\t\t\t\tif (uiRefNum) {\r\n\t\t\t\t\tvm.fieldValues.enterPaymentRef = uiRefNum;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// // perform search\r\n\t\t\t\tif (vm.fieldValues.selectInsuranceType && vm.fieldValues.enterPaymentRef) {\r\n\t\t\t\t\tsetTimeout(function (){\r\n\t\t\t\t\t\tvar findBillButton = document.getElementById(\"find-bill\");\r\n\t\t\t\t\t\tif (findBillButton) {\r\n\t\t\t\t\t\t\tfindBillButton.click();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 500);\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\t// Check if campaign code is valid\r\n\t\t\tif (vm.quoteModel && vm.quoteModel.quoteResult) {\r\n\t\t\t\tvar quoteResponse = vm.quoteModel.quoteResult.response;\r\n\t\t\t\tif (\r\n\t\t\t\t\tquoteResponse.isCampaignCodeValid ||\r\n\t\t\t\t\tquoteResponse.isGiftCardApplied\r\n\t\t\t\t) {\r\n\t\t\t\t\tvm.campaignBanner = campaignService.getCampaignConfig(\r\n\t\t\t\t\t\tquoteResponse.campaignCode,\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t).content;\r\n\t\t\t\t\tvm.isCampaignCodeValid = campaignService.getCampaignConfig(\r\n\t\t\t\t\t\tquoteResponse.campaignCode,\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t).isCampaignCodeValid;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.isCampaignCodeValid = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.quoteModel && !vm.quoteModel.policyStartDate) {\r\n\t\t\t\tstorage.setItem('policy-start-date', moment().tz(\"Australia/Sydney\").format(\"YYYY-MM-DD\"));\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Registers child form sections with the current form section.\r\n\t\t * Similar to registerSection in form controller, it keeps track of child sections, their value and\r\n\t\t * initialisation.\r\n\t\t */\r\n\t\tvm.registerFormField = function (childName, initValueFn, getValueFn) {\r\n\t\t\tif (!children[childName]) children[childName] = {};\r\n\t\t\tchildren[childName].initValueFn = initValueFn;\r\n\t\t\tchildren[childName].getValueFn = getValueFn;\r\n\t\t\t$scope.$emit(\"request-common-values\");\r\n\t\t\tif (vm.fieldValues && vm.fieldValues[childName]) {\r\n\t\t\t\tinitValueFn(vm.fieldValues[childName]);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.registerIdGenerator = function (childName, initIdFn) {\r\n\t\t\tif (!children[childName]) children[childName] = {};\r\n\r\n\t\t\tchildren[childName].initIdFn = initIdFn;\r\n\t\t\tinitIdFn($scope.name);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * keep track of the hierarchy of form sections and is used to generate automatic, unique HTML IDs.\r\n\t\t */\r\n\t\tvm.registerHierarchy = function (childName, setHierarchyFn) {\r\n\t\t\tif (!children[childName]) children[childName] = {};\r\n\t\t\tchildren[childName].setHierarchyFn = setHierarchyFn;\r\n\t\t\tsetHierarchyFn($scope.hierarchyList);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * @return the value of all child form sections as well as all direct inputs of the current section.\r\n\t\t */\r\n\t\tvm.getValue = function () {\r\n\t\t\tfor (var key in children) {\r\n\t\t\t\tif (children[key].getValueFn) {\r\n\t\t\t\t\tif (vm.aggregatedListName)\r\n\t\t\t\t\t\tvm.fieldValues[vm.aggregatedListName][\r\n\t\t\t\t\t\t\tparseInt(key)\r\n\t\t\t\t\t\t] = children[key].getValueFn();\r\n\t\t\t\t\telse vm.fieldValues[key] = children[key].getValueFn();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn vm.fieldValues;\r\n\t\t};\r\n\r\n\t\tvm.resetInsuredExcessValue = function() {\r\n\t\t\tvar test = vm.fieldValues;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Callback used by components to update their value and pass it back to the parent form section.\r\n\t\t */\r\n\t\tvm.updateComponentValue = function (name, value) {\r\n\t\t\tvm.fieldValues[name] = value;\r\n\t\t};\r\n\r\n\t\tvm.removeSection = function (aggregator) {\r\n\t\t\tvar childSectionsToRemove = [];\r\n\t\t\tfor (var key in vm.children) {\r\n\t\t\t\tvar childSection = vm.children[key],\r\n\t\t\t\t\tchildValue = childSection.getValueFn();\r\n\t\t\t\tif (childValue._aggregator == aggregator) {\r\n\t\t\t\t\tchildSectionsToRemove.push(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tchildSectionsToRemove.forEach(function (sectionKey) {\r\n\t\t\t\tdelete vm.children[sectionKey];\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Initialises the form section and all its child sections.\r\n\t\t */\r\n\t\tvm.initFn = function (data, parentName) {\r\n\t\t\tvm.fieldValues = data;\r\n\t\t\t// for (var key in children) {\r\n\t\t\t// \tchild.setParent()\r\n\t\t\t// \tvar child = children[key] ;\r\n\t\t\t// \tif ( child.initIdFn ) child.initIdFn(parentName);\r\n\t\t\t// \tif ( child.setHierarchyFn ) child.setHierarchyFn(parentName);\r\n\t\t\t// };\r\n\t\t};\r\n\r\n\t\tvm.getAge = function (dob) {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tmoment(new Date()).diff(\r\n\t\t\t\t\tmoment(dob, \"DD/MM/YYYY\"),\r\n\t\t\t\t\t\"years\",\r\n\t\t\t\t\ttrue\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getCeilingAge = function (dob, floatPoint) {\r\n\t\t\treturn Math.ceil(\r\n\t\t\t\tmoment(new Date()).diff(\r\n\t\t\t\t\tmoment(dob, \"DD/MM/YYYY\"),\r\n\t\t\t\t\t\"years\",\r\n\t\t\t\t\ttrue\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getAgeInDays = function (dob) {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tmoment(new Date()).diff(moment(dob, \"DD/MM/YYYY\"), \"days\", true)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getPastYears = function (numYears) {\r\n\t\t\tif (!vm.fieldOptions[\"years_\" + numYears]) {\r\n\t\t\t\tvar years = [];\r\n\t\t\t\tvar prevYear = \"\";\r\n\t\t\t\tfor (var i = 0; i < numYears; i++) {\r\n\t\t\t\t\tprevYear = moment().subtract(i, \"year\").format(\"Y\");\r\n\t\t\t\t\tyears.push({\r\n\t\t\t\t\t\tlabel: prevYear,\r\n\t\t\t\t\t\tvalue: prevYear,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tvm.fieldOptions[\"years_\" + numYears] = years;\r\n\t\t\t}\r\n\t\t\treturn vm.fieldOptions[\"years_\" + numYears];\r\n\t\t};\r\n\r\n\t\tvm.getPastYearsFrom = function (year) {\r\n\t\t\tvar currentYear = parseInt(moment().format(\"Y\"));\r\n\t\t\treturn vm.getPastYears(currentYear - (year - 1));\r\n\t\t};\r\n\r\n\t\tvm.payByPaypal = function () {\r\n\t\t\t$scope.$root.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\tpaymentService.payByPaypal(\r\n\t\t\t\t// on successfully calling the Create Paypal Payment service\r\n\t\t\t\tfunction (redirectUrl) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"redirecting to paypal\",\r\n\t\t\t\t\t\t\"waiting for Paypal callback\"\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$window.location.href = redirectUrl;\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"cannot connect to paypal\",\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconsole.error(errorResponse);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.requote = function (form, isRequoteBlocked) {\r\n\t\t\tif (isRequoteBlocked === true) {\r\n\t\t\t\t//to do additional checking for requote, if set to true requote is not done\r\n\t\t\t} else {\r\n\t\t\t\t$scope.$root.$broadcast(\"requote\", form);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.setMainPolicyHolderEmail = function (email) {\r\n\t\t\tuserInputRepository.update({\r\n\t\t\t\temail: email,\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tvm.onPaymentFrequencyChanged = function (paymentFrequency) {\r\n\t\t\t$scope.$root.$broadcast(\"update-payment-options\", paymentFrequency);\r\n\t\t\tquoteOptions.setSelectedPaymentFrequency(paymentFrequency);\r\n\t\t\tvm.updatePaymentSummary(paymentFrequency);\r\n\t\t\tvm.updatePaymentStartDate(paymentFrequency);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * vm.updatePaymentStartDate - Update payment start date\r\n\t\t * @param {string} data selected payment option\r\n\t\t */\r\n\t\tvm.updatePaymentStartDate = function (data) {\r\n\t\t\tif (data === \"monthly\" || data === \"fortnightly\") {\r\n\t\t\t\tvm.fieldValues.paymentStartDate = moment(\r\n\t\t\t\t\tvm.quoteModel.policyStartDate,\r\n\t\t\t\t\t\"DDMMYYYY\"\r\n\t\t\t\t).format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.getRange = function (data) {\r\n\t\t\tif (\r\n\t\t\t\tmoment(vm.quoteModel.policyStartDate, \"DDMMYYYY\").format(\r\n\t\t\t\t\t\"DDMMYYYY\"\r\n\t\t\t\t) === moment().tz(\"Australia/Sydney\").format(\"DDMMYYYY\")\r\n\t\t\t) {\r\n\t\t\t\treturn \"0d:14d\";\r\n\t\t\t}\r\n\t\t\tvar sDate =\r\n\t\t\t\tmoment(vm.quoteModel.policyStartDate, \"DDMMYYYY\").diff(\r\n\t\t\t\t\tmoment(),\r\n\t\t\t\t\t\"days\"\r\n\t\t\t\t) + 1;\r\n\t\t\tvar eDate =\r\n\t\t\t\tparseInt(\r\n\t\t\t\t\tmoment(vm.quoteModel.policyStartDate, \"DDMMYYYY\").diff(\r\n\t\t\t\t\t\tmoment(),\r\n\t\t\t\t\t\t\"days\"\r\n\t\t\t\t\t) + 1\r\n\t\t\t\t) + parseInt(data);\r\n\t\t\treturn sDate + \"d:\" + eDate + \"d\";\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * vm.updatePaymentSummary - Update payment summary\r\n\t\t *\r\n\t\t * @param {string} data selected payment option\r\n\t\t */\r\n\t\tvm.updatePaymentSummary = function (data) {\r\n\t\t\tif (data == \"yearly\") {\r\n\t\t\t\t//yearly frequency should not allow bankaccount\r\n\t\t\t\tif (vm.fieldValues.paymentMethod == \"bankaccount\") {\r\n\t\t\t\t\t//sets credit card as the default option\r\n\t\t\t\t\tvm.fieldValues.paymentMethod = \"creditcard\";\r\n\t\t\t\t\t$scope.$root.$broadcast(\r\n\t\t\t\t\t\t\"payment-method-changed\",\r\n\t\t\t\t\t\t\"creditcard\"\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t//any frequency other than yearly should not allow paypal\r\n\t\t\t\tif (vm.fieldValues.paymentMethod == \"paypal\") {\r\n\t\t\t\t\t//sets credit card as the default option\r\n\t\t\t\t\tvm.fieldValues.paymentMethod = \"creditcard\";\r\n\t\t\t\t\t$scope.$root.$broadcast(\r\n\t\t\t\t\t\t\"payment-method-changed\",\r\n\t\t\t\t\t\t\"creditcard\"\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.paymentMethodChanged = function (paymentMethod) {\r\n\t\t\t$scope.$root.$broadcast(\"payment-method-changed\", paymentMethod);\r\n\t\t\tconsole.log(\"paymentMethod\", paymentMethod);\r\n\t\t};\r\n\r\n\t\tvm.termsAndConditionsChanged = function (termsAndConditions) {\r\n\t\t\t$scope.$root.$broadcast(\r\n\t\t\t\t\"terms-and-conditions-changed\",\r\n\t\t\t\ttermsAndConditions ? true : false\r\n\t\t\t);\r\n\t\t\tconsole.log(\"termsAndConditions\", termsAndConditions);\r\n\t\t};\r\n\r\n\t\tvm.noItemIsChecked = function (list) {\r\n\t\t\tif (Object.keys(list)) {\r\n\t\t\t\tfor (var key in list) {\r\n\t\t\t\t\tif (list[key] == true) return false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\t\tvm.numberOfItemsChecked = function (list) {\r\n\t\t\tvar counter = 0;\r\n\t\t\tangular.forEach(list, function (value) {\r\n\t\t\t\tif (value === true) counter++;\r\n\t\t\t});\r\n\t\t\treturn counter;\r\n\t\t};\r\n\r\n\t\tvm.refreshPolicy = function (paymentType) {\r\n\t\t\tvm.showCreditCard = false;\r\n\t\t\t//option choose credit card\r\n\t\t\tif (paymentType === 'credit-card') {\t\r\n\t\t\t\tvm.showError = false;\t\r\n\t\t\t\tvm.showCreditCard = true;\r\n\t\t\t\t\r\n\t\t\t\tvar hostOrigin = $window.location.origin;\r\n\t\t\t\t\r\n\t\t\t\t//get concig\r\n\t\t\t\tvar paymentConfig = paymentService.getPaybillConfig()\r\n\t\t\t\tif (!paymentConfig) {\r\n\t\t\t\t\terrorDuringTokenization();\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tpaymentService.initialCreditcardPayment(\r\n\t\t\t\t\t\tpaymentConfig.mulesoftFlexiMicroformApiUrl,\r\n\t\t\t\t\t\thostOrigin, \r\n\t\t\t\t\t\tpaymentService.generateUniqueId(),\r\n\t\t\t\t\t\tpaymentConfig.merchantIdentifier,\r\n\t\t\t\t\t\tpaymentConfig.clientId,\r\n\t\t\t\t\t\tpaymentConfig.clientSecret,\r\n\t\t\t\t\t\tinitialCreditcardPaymentSuccessCallback,\r\n\t\t\t\t\t\tinitialCreditcardPaymentFailCallback);\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\t\t\tif (vm.sectionName == \"getStartedCtp\")\r\n\t\t\t\t$scope.$emit(\r\n\t\t\t\t\t\"set-has-personOrCompany\",\r\n\t\t\t\t\tvm.fieldValues.personOrCompany == \"no\"\r\n\t\t\t\t);\r\n\t\t\telse if (vm.sectionName == \"selectInsuranceType\") {\r\n\t\t\t\t/* track payment details to gtm */\r\n\t\t\t\t$scope.$root.$broadcast('trackPaymentDetailsPaymentType', vm.fieldValues.howToPay);\r\n\t\t\t\t/* end track payment details to gtm */\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//console.log('invalidting quick quote responses');\r\n\t\t\t$scope.$emit(\"invalidate-quotes\");\r\n\t\t};\r\n\t\tfunction initialCreditcardPaymentSuccessCallback(jwk) {\r\n\t\t\tvm.showCreditCard = true;\r\n\r\n\t\t\t// cybersourceService\r\n\t\t\tFLEX.microform(\r\n\t\t\t\tpaymentService.getKeyData(\r\n\t\t\t\t\tjwk, \r\n\t\t\t\t\t'#cardNumber-container', \r\n\t\t\t\t\t'#cardNumber-label',\r\n\t\t\t\t\t''),\r\n\t\t\t\tfunction (setupError, microformInstance) {\r\n\t\t\t\t\tif (setupError) {\r\n\t\t\t\t\t\t// handle error\r\n\t\t\t\t\t\terrorDuringTokenization();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$rootScope.$broadcast(\"set-micoform-instance\", microformInstance);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction initialCreditcardPaymentFailCallback(error) {\t\t\t\r\n\t\t\terrorDuringTokenization();\r\n\t\t}\r\n\r\n\t\tfunction errorDuringTokenization(message) {\r\n\t\t\tvm.showCreditCard = false;\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\terrorCount++;\r\n\r\n\t\t\tvm.formErrorMessage = 'Credit card service is not available at the moment. Please try again later.';\r\n\r\n\t\t\tscrollViewTo($(\"#content\"));\r\n\t\t}\r\n\r\n\t\tvm.getOptionsForBuildingYearBuilt = function (fieldName) {\r\n\t\t\tif (!vm.fieldOptions[fieldName]) {\r\n\t\t\t\tvar options = vm.getGlobalOptionsFor(fieldName);\r\n\t\t\t\tfor (var i = 2000; i <= new Date().getFullYear(); i++) {\r\n\t\t\t\t\toptions.unshift({\r\n\t\t\t\t\t\tlabel: String(i),\r\n\t\t\t\t\t\tvalue: String(i),\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tvm.fieldOptions[fieldName] = options;\r\n\t\t\t\treturn options;\r\n\t\t\t} else return vm.fieldOptions[fieldName];\r\n\t\t};\r\n\r\n\t\t/*\r\n\t\t * TO BE MOVED TO HOME QUOTE MODEL\r\n\t\t *\r\n\t\t * Checks if the provided cover need is available for the options selected on page\r\n\t\t */\r\n\t\tvm.isHomeCoverNeedAvailable = function (coverNeed) {\r\n\t\t\tvar typeOfBuilding = \"\";\r\n\t\t\tvar isPropertyProfessionalAgent = false;\r\n\t\t\tvar howIsHomeOccupied = \"\";\r\n\r\n\t\t\tif (vm.commonValues.typeOfBuilding) {\r\n\t\t\t\ttypeOfBuilding = vm.commonValues.typeOfBuilding;\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.commonValues.propertyProfessionalAgent !== undefined) {\r\n\t\t\t\tisPropertyProfessionalAgent =\r\n\t\t\t\t\tvm.commonValues.propertyProfessionalAgent;\r\n\t\t\t} else if (\r\n\t\t\t\t!!vm.quoteModel.homeForm &&\r\n\t\t\t\t!!vm.quoteModel.homeForm.tellUsAboutTheProperty\r\n\t\t\t\t\t.propertyProfessionalAgent\r\n\t\t\t) {\r\n\t\t\t\tisPropertyProfessionalAgent =\r\n\t\t\t\t\tvm.quoteModel.homeForm.tellUsAboutTheProperty\r\n\t\t\t\t\t\t.propertyProfessionalAgent;\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.commonValues.howIsHomeOccupied) {\r\n\t\t\t\thowIsHomeOccupied = vm.commonValues.howIsHomeOccupied;\r\n\t\t\t}\r\n\r\n\t\t\tif (coverNeed === \"contents\") {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (coverNeed === \"building\") {\r\n\t\t\t\t//dont show building if rent and live\r\n\t\t\t\tif (howIsHomeOccupied === \"rent_live\") {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeOfBuilding === \"unit\" || typeOfBuilding === \"flat\") {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t} else if (coverNeed === \"rent_default\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\tisPropertyProfessionalAgent === true &&\r\n\t\t\t\t\thowIsHomeOccupied === \"own_rent_tenants\"\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else if (coverNeed === \"malicious_damage\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\tisPropertyProfessionalAgent === true &&\r\n\t\t\t\t\thowIsHomeOccupied === \"own_rent_tenants\"\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\t\tvm.yearHomeBuilt = function () {\r\n\t\t\tvar cycloneRating = vm.getObjectValueRaw(\"cycloneRating\", \"value\");\r\n\t\t\tvar cycloneParams = [\r\n\t\t\t\tuserInputRepository.get(\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t\"homeForm.tellUsAboutTheBuilding.yearHomeBuilt\"\r\n\t\t\t\t),\r\n\t\t\t\tparseInt(cycloneRating),\r\n\t\t\t];\r\n\t\t\treturn cycloneParams;\r\n\t\t};\r\n\r\n\t\t// Show/Hide of Payment Failure - Credit Card error message\r\n\t\t$scope.$on(\"cyber-source-error\", function (event, code) {\r\n\t\t\tvalidateCybersourceError(code);\r\n\t\t});\r\n\r\n\t\tfunction validateCybersourceError(data) {\r\n\t\t\tvar cybersourceList =\r\n\t\t\t\t$window.qbe.fieldLabels.cybersourceCodeMessage.cybersourceError;\r\n\t\t\tif (!isUndefinedOrNull(data)) {\r\n\t\t\t\tvm.showError = true;\r\n\t\t\t\tvm.showPaypalError = false;\r\n\t\t\t\terrorCount++;\r\n\r\n\t\t\t\tif (typeof cybersourceList[data] !== \"undefined\") {\r\n\t\t\t\t\tvm.formErrorMessage = cybersourceList[data];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formErrorMessage = cybersourceList[\"default\"];\r\n\t\t\t\t}\r\n\t\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\r\n\t\t\t\tscrollViewTo($(\"#content\"));\r\n\t\t\t} else {\r\n\t\t\t\tvm.showError = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction splitKeyInValidation(key) {\r\n\t\t\tkey.split(\",\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Scrolls to the field element\r\n\t\t */\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\t//return options to the needs checkbox\r\n\t\tvm.getOptionsForCoverNeeds = function (fieldName) {\r\n\t\t\tvar options = getOptions(fieldName).slice();\r\n\t\t\tvar returnOptions = [];\r\n\t\t\tfor (var item in options) {\r\n\t\t\t\tif (vm.isHomeCoverNeedAvailable(options[item].value)) {\r\n\t\t\t\t\treturnOptions.push(options[item]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.commonValues[\r\n\t\t\t\t\t\t\"coverNeeds_\" + options[item].value\r\n\t\t\t\t\t] = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn returnOptions;\r\n\t\t};\r\n\r\n\t\tvm.showNeedsCoverOutsideHome = function () {\r\n\t\t\tvar show =\r\n\t\t\t\t!!vm.commonValues.coverNeeds_contents &&\r\n\t\t\t\t[\r\n\t\t\t\t\t\"own_live\",\r\n\t\t\t\t\t\"rent_live\",\r\n\t\t\t\t\t\"unoccupied\",\r\n\t\t\t\t\t\"own_holidayhome\",\r\n\t\t\t\t].indexOf(vm.commonValues.howIsHomeOccupied) != -1;\r\n\t\t\t// update the form value\r\n\t\t\tvm.commonValues.needCoverOutsideHome =\r\n\t\t\t\tvm.fieldValues.needCoverOutsideHome;\r\n\r\n\t\t\treturn show;\r\n\t\t};\r\n\r\n\t\t//methods for home\r\n\t\tvm.submitRapidEstimate = function (form, isNavigatingForward) {\r\n\t\t\t$scope.$root.$broadcast(\"home-rapid-estimate\", form);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Set default selected payment option\r\n\t\t */\r\n\t\tvm.paymentOptions = \"yearly\";\r\n\t\tvm.updatePaymentSummary(\"yearly\");\r\n\r\n\t\tvm.moveToPage = function (page) {\r\n\t\t\t$scope.$root.$broadcast(\"moveToPage\", page);\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"confirm-form-data\", function (event, formData) {\r\n\t\t\tif (\r\n\t\t\t\tvm.sectionName == \"nearCompleteCtp\" ||\r\n\t\t\t\tvm.sectionName == \"paybillForm\"\r\n\t\t\t) {\r\n\t\t\t\tvm.fieldValues.firstName =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.firstName;\r\n\t\t\t\tvm.fieldValues.surName =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.surName;\r\n\t\t\t\tvar bDate =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.birthDate;\r\n\t\t\t\tvm.fieldValues.birthDate = bDate; //bDate.substr(0, 2) + \"/\" + bDate.substr(3,2) + \"/\" + bDate.substr(6,4);\r\n\t\t\t\tvm.fieldValues.regEmail =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.regEmail;\r\n\t\t\t\tvm.fieldValues.regMobileNum =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.regMobileNum;\r\n\t\t\t\tvm.fieldValues.regPostCode =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.regPostCode;\r\n\r\n\t\t\t\t//about your card\r\n\t\t\t\tvar regDate =\r\n\t\t\t\t\tformData.vehicleFormCtp.aboutYourCarCtp.registrationDueDate;\r\n\t\t\t\tvm.fieldValues.registrationDueDate = regDate; //regDate.substr(0, 2) + \"/\" + regDate.substr(3,2) + \"/\" + regDate.substr(6,4);\r\n\t\t\t\tvm.fieldValues.driverLicenseNum =\r\n\t\t\t\t\tformData.vehicleFormCtp.aboutYourCarCtp.driverLicenseNum;\r\n\t\t\t\tvm.fieldValues.vehicleRegNum =\r\n\t\t\t\t\tformData.vehicleFormCtp.aboutYourCarCtp.vehicleRegNum;\r\n\t\t\t\tvm.fieldValues.vehicleType =\r\n\t\t\t\t\tformData.vehicleFormCtp.aboutYourCarCtp.vehicleType;\r\n\t\t\t\tvm.fieldValues.insurancePeriod =\r\n\t\t\t\t\tformData.vehicleFormCtp.insurancePeriodCtp.insurancePeriod;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.enterPaymentRef\", function () {\r\n\t\t\tvm.showPaymentSection = false;\r\n\t\t\tvm.isEnterPaymentRefError = false;\r\n\t\t\tvm.isEnterPaymentRefErrorLength = false;\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.birthDay\", function (value) {\r\n\t\t\tvalidateBirthDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.birthMonth\", function (value) {\r\n\t\t\tvalidateBirthDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.birthYear\", function (value) {\r\n\t\t\tvalidateBirthDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.birthDate\", function (value) {\r\n\t\t\tif (vm.sectionName == \"registeredOwnerCtp\" && value.length >= 8) {\r\n\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\tvar isValid = isDate(vm.fieldValues.birthDate);\r\n\t\t\t\tvar parent = angular.element(\r\n\t\t\t\t\tdocument.querySelector(\"[field-key='birthDate']\")\r\n\t\t\t\t);\r\n\t\t\t\tif (!isValid) {\r\n\t\t\t\t\tparent.addClass(\"is-error\");\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tparent.removeClass(\"is-error\");\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t\t\t\tvar birthDate = new Date(\r\n\t\t\t\t\t\tvm.fieldValues.birthYear,\r\n\t\t\t\t\t\tvm.fieldValues.birthMonth - 1,\r\n\t\t\t\t\t\tvm.fieldValues.birthDay\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar age = getYearDiff(birthDate, Date.now());\r\n\t\t\t\t\tif (age >= 16) {\r\n\t\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\t\t\tparent.removeClass(\"is-error\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", false);\r\n\t\t\t\t\t\tparent.addClass(\"is-error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.regDueDay\", function (value) {\r\n\t\t\tvalidateRegistrationDueDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.regDueMonth\", function (value) {\r\n\t\t\tvalidateRegistrationDueDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.regDueYear\", function (value) {\r\n\t\t\tvalidateRegistrationDueDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.regPostCode\", function (value) {\r\n\t\t\tvalidatePostCode();\r\n\t\t});\r\n\r\n\t\t// $scope.$watch('vm.fieldValues.enterPaymentRef', function (value) {\r\n\t\t// \tvm.showError = false;\r\n\t\t// \tif (value) {\r\n\t\t// \t\tvalidatePaymentRefNum();\r\n\t\t// \t\tsearchForRefNum();\r\n\t\t// \t} else {\r\n\t\t// \t\t$scope.$emit('billUpdate');\r\n\t\t// \t\t$scope.$emit('toggle-amount-due');\r\n\t\t// \t}\r\n\t\t// });\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.registrationDueDate\", function (value) {\r\n\t\t\tif (vm.sectionName == \"aboutYourCarCtp\" && value.length >= 8) {\r\n\t\t\t\tvar isValid = isDate(vm.fieldValues.registrationDueDate);\r\n\t\t\t\tvar parent = angular.element(\r\n\t\t\t\t\tdocument.querySelector(\"[field-key='registrationDueDate']\")\r\n\t\t\t\t);\r\n\t\t\t\tif (!isValid) {\r\n\t\t\t\t\tparent.addClass(\"is-error\");\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tparent.removeClass(\"is-error\");\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar regDueDate = new Date(\r\n\t\t\t\t\t\tvm.fieldValues.regDueYear,\r\n\t\t\t\t\t\tvm.fieldValues.regDueMonth - 1,\r\n\t\t\t\t\t\tvm.fieldValues.regDueDay\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar dateToday = new Date(Date.now());\r\n\t\t\t\t\tdateToday.setHours(0);\r\n\t\t\t\t\tdateToday.setMinutes(0);\r\n\t\t\t\t\tdateToday.setSeconds(0);\r\n\t\t\t\t\tdateToday.setMilliseconds(0);\r\n\t\t\t\t\tvar maxRegDate = new Date(Date.now());\r\n\t\t\t\t\tmaxRegDate.setFullYear(dateToday.getFullYear() + 1);\r\n\t\t\t\t\tif (regDueDate >= dateToday && regDueDate <= maxRegDate) {\r\n\t\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\t\"maxdate\",\r\n\t\t\t\t\t\t\ttrue\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t} else\r\n\t\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\t\"maxdate\",\r\n\t\t\t\t\t\t\tfalse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"form-submitted\", function (event, args) {\r\n\t\t\tvalidateBirthDate();\r\n\t\t\tvalidateRegistrationDueDate();\r\n\t\t\tvalidatePostCode();\r\n\t\t\tvalidateExpiryDate();\r\n\t\t});\r\n\r\n\t\tfunction getYearDiff(fromDate, toDate) {\r\n\t\t\t//var birthDate = new Date(vm.fieldValues.birthYear, vm.fieldValues.birthMonth - 1, vm.fieldValues.birthDay);\r\n\t\t\tvar ageDifMs = toDate - fromDate.getTime();\r\n\t\t\tvar ageDate = new Date(ageDifMs); // miliseconds\r\n\t\t\treturn Math.abs(ageDate.getUTCFullYear() - 1970);\r\n\t\t}\r\n\r\n\t\tfunction validateBirthDate() {\r\n\t\t\tif (vm.sectionName != \"registeredOwnerCtp\") return;\r\n\t\t\tvar dateHasPartialValue = false;\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthDay) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthMonth) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthYear)\r\n\t\t\t) {\r\n\t\t\t\tdateHasPartialValue = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthDay) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthYear)\r\n\t\t\t) {\r\n\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\tvm.fieldValues.birthDate = \"\";\r\n\t\t\t\tif (dateHasPartialValue) {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"required\", true);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"required\", false);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar birthDate =\r\n\t\t\t\tvm.fieldValues.birthDay +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.birthMonth +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.birthYear;\r\n\t\t\tvar date = moment(birthDate, \"DDMMYYYY\");\r\n\r\n\t\t\tif (date.isValid()) {\r\n\t\t\t\tif (vm.fieldValues.birthYear.toString().length == 4) {\r\n\t\t\t\t\tvm.fieldValues.birthDate = birthDate;\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction validateRegistrationDueDate() {\r\n\t\t\tif (vm.sectionName != \"aboutYourCarCtp\") return;\r\n\t\t\tvar dateHasPartialValue = false;\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueDay) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueMonth) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueYear)\r\n\t\t\t) {\r\n\t\t\t\tdateHasPartialValue = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueDay) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueYear)\r\n\t\t\t) {\r\n\t\t\t\tvm.fieldValues.registrationDueDate = \"\";\r\n\t\t\t\tif (dateHasPartialValue) {\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"required\",\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t} else\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"required\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar regDueDate =\r\n\t\t\t\tvm.fieldValues.regDueDay +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.regDueMonth +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.regDueYear;\r\n\t\t\tvar date = moment(regDueDate, \"DDMMYYYY\");\r\n\r\n\t\t\tif (date.isValid()) {\r\n\t\t\t\tif (vm.fieldValues.regDueYear.toString().length == 4) {\r\n\t\t\t\t\tvm.fieldValues.registrationDueDate = regDueDate;\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction validatePostCode() {\r\n\t\t\tif (vm.sectionName == \"registeredOwnerCtp\") {\r\n\t\t\t\tvm.formSelector.regPostCode.$setValidity(\"valid\", true);\r\n\t\t\t\tif (!isUndefinedOrNull(vm.fieldValues.regPostCode)) {\r\n\t\t\t\t\tvar postCode = parseInt(vm.fieldValues.regPostCode);\r\n\t\t\t\t\tvar postCodeIsValid =\r\n\t\t\t\t\t\t(postCode >= 4000 && postCode <= 4999) ||\r\n\t\t\t\t\t\tpostCode == 9726;\r\n\t\t\t\t\tif (!postCodeIsValid) {\r\n\t\t\t\t\t\tvm.formSelector.regPostCode.$setValidity(\r\n\t\t\t\t\t\t\t\"valid\",\r\n\t\t\t\t\t\t\tfalse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction isDate(value) {\r\n\t\t\t//format(dd/MM/yyyy)\r\n\t\t\tvar re = /^(?=\\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\\x20|$))|(?:2[0-8]|1\\d|0?[1-9]))([-.\\/])(?:1[012]|0?[1-9])\\1(?:1[6-9]|[2-9]\\d)?\\d\\d(?:(?=\\x20\\d)\\x20|$))?(((0?[1-9]|1[012])(:[0-5]\\d){0,2}(\\x20[AP]M))|([01]\\d|2[0-3])(:[0-5]\\d){1,2})?$/;\r\n\t\t\tvar flag = re.test(value);\r\n\t\t\treturn flag;\r\n\t\t}\r\n\r\n\t\tfunction isUndefinedOrNull(arg) {\r\n\t\t\tif (angular.isUndefined(arg) || arg == null) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvm.confirmSwitch = function () {\r\n\t\t\t$scope.$emit(\"confirm-switch\");\r\n\t\t};\r\n\r\n\t\tvm.backToForm = function () {\r\n\t\t\t$scope.$emit(\"show-form-entry\");\r\n\t\t};\r\n\r\n\t\tfunction getYearDiff(fromDate, toDate) {\r\n\t\t\t//var birthDate = new Date(vm.fieldValues.birthYear, vm.fieldValues.birthMonth - 1, vm.fieldValues.birthDay);\r\n\t\t\tvar ageDifMs = toDate - fromDate.getTime();\r\n\t\t\tvar ageDate = new Date(ageDifMs); // miliseconds\r\n\t\t\treturn Math.abs(ageDate.getUTCFullYear() - 1970);\r\n\t\t}\r\n\r\n\t\tfunction validateBirthDate() {\r\n\t\t\tif (vm.sectionName != \"registeredOwnerCtp\") return;\r\n\t\t\tvar dateHasPartialValue = false;\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthDay) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthMonth) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthYear)\r\n\t\t\t) {\r\n\t\t\t\tdateHasPartialValue = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthDay) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthYear)\r\n\t\t\t) {\r\n\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\tvm.fieldValues.birthDate = \"\";\r\n\t\t\t\tif (dateHasPartialValue) {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"required\", true);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"required\", false);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar birthDate =\r\n\t\t\t\tvm.fieldValues.birthDay +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.birthMonth +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.birthYear;\r\n\t\t\tif (isDate(birthDate)) vm.fieldValues.birthDate = birthDate;\r\n\r\n\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t}\r\n\r\n\t\tfunction validateRegistrationDueDate() {\r\n\t\t\tif (vm.sectionName != \"aboutYourCarCtp\") return;\r\n\t\t\tvar dateHasPartialValue = false;\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueDay) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueMonth) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueYear)\r\n\t\t\t) {\r\n\t\t\t\tdateHasPartialValue = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueDay) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueYear)\r\n\t\t\t) {\r\n\t\t\t\tvm.fieldValues.registrationDueDate = \"\";\r\n\t\t\t\tif (dateHasPartialValue) {\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"required\",\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t} else\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"required\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar regDueDate =\r\n\t\t\t\tvm.fieldValues.regDueDay +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.regDueMonth +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.regDueYear;\r\n\t\t\tif (isDate(regDueDate))\r\n\t\t\t\tvm.fieldValues.registrationDueDate = regDueDate;\r\n\t\t\tvm.formSelector.registrationDueDate.$setValidity(\"date\", true);\r\n\t\t}\r\n\r\n\t\tfunction validatePostCode() {\r\n\t\t\tif (vm.sectionName == \"registeredOwnerCtp\") {\r\n\t\t\t\tvm.formSelector.regPostCode.$setValidity(\"valid\", true);\r\n\t\t\t\tif (!isUndefinedOrNull(vm.fieldValues.regPostCode)) {\r\n\t\t\t\t\tvar postCode = parseInt(vm.fieldValues.regPostCode);\r\n\t\t\t\t\tvar postCodeIsValid =\r\n\t\t\t\t\t\t(postCode >= 4000 && postCode <= 4999) ||\r\n\t\t\t\t\t\tpostCode == 9726;\r\n\t\t\t\t\tif (!postCodeIsValid) {\r\n\t\t\t\t\t\tvm.formSelector.regPostCode.$setValidity(\r\n\t\t\t\t\t\t\t\"valid\",\r\n\t\t\t\t\t\t\tfalse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t\tWhen select a product from drop down\r\n\t\t\tvalidate product and do Gtm tracking\r\n\t\t*/\r\n\t\tfunction selectProduct(value) {\r\n\t\t\tvalidateProducts(value);\r\n\t\t\tgtmService.trackProductSelect(value);\t\t\t\r\n\t\t}\t\t\r\n\r\n\t\t/*\r\n\t\t * Redirect to other payment sites\r\n\t\t * Param - Product value from drop down list\r\n\t\t \r\n\t\tvm.payNonQbe = function () {\t\t\t\r\n\t\t\tvar sessionProt = window.location.protocol;\r\n\t\t\tvar sessionProtHost = window.location.host;\r\n\t\t\tvar sessionProtPath = $window.qbe.fieldLabels && $window.qbe.fieldLabels.nonQbeRedirect ? $window.qbe.fieldLabels.nonQbeRedirect.QBE : '/'; \r\n\t\t\tvar sessionProtURL = sessionProt + \"//\" + sessionProtHost + sessionProtPath;\r\n\t\t\t\r\n\t\t\twindow.location.href = sessionProtURL;\t\t\t\r\n\t\t};\r\n\t\t*/\r\n\r\n\t\t/*\r\n\t\t * Validate Products for Redirect Link\r\n\t\t * Param - Product value from drop down list\r\n\t\t */\r\n\t\tfunction validateProducts(value) {\r\n\t\t\tvar QBEProducts = [\r\n\t\t\t\t\"CAR\",\r\n\t\t\t\t\"BOAT\",\r\n\t\t\t\t\"CARAVAN\",\r\n\t\t\t\t\"CONTENTS\",\r\n\t\t\t\t\"HOME\",\r\n\t\t\t\t\"LANDLORD\",\r\n\t\t\t\t\"MOTORCYCLE\",\r\n\t\t\t];\r\n\t\t\tvar NonQBEProducts = [\r\n\t\t\t\t\"CTP - NSW GREEN SLIP\",\r\n\t\t\t\t\"CTP - QLD\",\r\n\t\t\t\t\"TRAVEL\",\r\n\t\t\t\t\"SMALL BUSINESS\"\r\n\t\t\t];\r\n\t\t\tvar redirectLinks = $window.qbe.fieldLabels.nonQbeRedirect;\r\n\r\n\t\t\tif (!isUndefinedOrNull(value)) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-no-field-errors\");\r\n\t\t\t\tvar productLabel = value.replace(/[^a-z\\d\\s]+/gi, \"\");\r\n\t\t\t\tvm.productCode = value;\r\n\t\t\t\tvm.otherWaysLabel = productLabel;\r\n\t\t\t\tvalue = value.toUpperCase();\r\n\r\n\t\t\t\tif (containsInArray(QBEProducts, value)) {\r\n\t\t\t\t\tvm.productValue = \"QBEProducts\";\r\n\t\t\t\t} else if (containsInArray(NonQBEProducts, value)) {\r\n\t\t\t\t\tvm.productValue = \"NonQBEProducts\";\r\n\t\t\t\t\tswitch (value) {\r\n\t\t\t\t\t\tcase \"CTP - NSW GREEN SLIP\":\r\n\t\t\t\t\t\t\tvm.nonQbeLink = redirectLinks.NSW;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"CTP - QLD\":\r\n\t\t\t\t\t\t\tvm.nonQbeLink = redirectLinks.QLD;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"TRAVEL\":\r\n\t\t\t\t\t\t\tvm.nonQbeLink = redirectLinks.Travel;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"SMALL BUSINESS\":\r\n\t\t\t\t\t\t\tvm.nonQbeLink = redirectLinks.SmallBusiness;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (containsInArray(MotorProducts, value)) {\r\n\t\t\t\t\tvm.productValue = \"MotorProducts\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvm.showPaymentSection = false;\r\n\r\n\t\t\t\t$scope.$emit(\"pay-now-button\", vm.productValue);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction containsInArray(arrayList, value) {\r\n\t\t\treturn arrayList.indexOf(value) > -1;\r\n\t\t}\r\n\r\n\t\t//PAYMENTS FORM END\r\n\r\n\t\tfunction isDate(value) {\r\n\t\t\t//format(dd/MM/yyyy)\r\n\t\t\tvar re = /^(?=\\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\\x20|$))|(?:2[0-8]|1\\d|0?[1-9]))([-.\\/])(?:1[012]|0?[1-9])\\1(?:1[6-9]|[2-9]\\d)?\\d\\d(?:(?=\\x20\\d)\\x20|$))?(((0?[1-9]|1[012])(:[0-5]\\d){0,2}(\\x20[AP]M))|([01]\\d|2[0-3])(:[0-5]\\d){1,2})?$/;\r\n\t\t\tvar flag = re.test(value);\r\n\t\t\treturn flag;\r\n\t\t}\r\n\r\n\t\tfunction isUndefinedOrNull(arg) {\r\n\t\t\tif (angular.isUndefined(arg) || arg == null) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvm.confirmSwitch = function () {\r\n\t\t\t$scope.$emit(\"confirm-switch\");\r\n\t\t};\r\n\r\n\t\tvm.backToForm = function () {\r\n\t\t\t$scope.$emit(\"show-form-entry\");\r\n\t\t};\r\n\r\n\t\tvm.back = function () {\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\t\tfunction validateBuildingSumInsured(event) {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange = false;\r\n\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getBuildingEstimate() {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t).toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMaximum() {\r\n\t\t\treturn vm.quoteModel.maxSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMinimum() {\r\n\t\t\treturn vm.quoteModel.minSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction toggleContentsSumInsuredInLowerRange() {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange =\r\n\t\t\t\tvm.quoteModel.isSumInsuredInLowerRange(\r\n\t\t\t\t\tvm.fieldValues.buildingSumInsured\r\n\t\t\t\t) && vm.fieldValues.isEstimatedRebuildCost == \"no\";\r\n\t\t}\r\n\r\n\t\tfunction toggleYourContentsSumInsuredInLowerRange() {\r\n\t\t\tvm.showYourContentsSumInsuredInLowerRange =\r\n\t\t\t\tvm.quoteModel.isSumInsuredInLowerRange(\r\n\t\t\t\t\tvm.fieldValues.yourBuildingSumInsured\r\n\t\t\t\t) && vm.fieldValues.isYourEstimatedRebuildCost == \"no\";\r\n\t\t}\r\n\r\n\t\tfunction checkBuildingSumInsured() {\r\n\t\t\tif (!isUndefinedOrNull(vm.fieldValues.buildingSumInsured)) {\r\n\t\t\t\tvm.fieldValues.isEstimatedRebuildCost = \"no\";\r\n\t\t\t}\r\n\t\t}\r\n\t\t//dd-3747 - function to assign building sum insured if estimated is selected\r\n\t\tfunction getEstimateRebuild() {\r\n\t\t\tif (vm.fieldValues.isEstimatedRebuildCost == \"yes\") {\r\n\t\t\t\tvm.fieldValues.buildingSumInsured = Math.floor(\r\n\t\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tif (vm.fieldValues.isYourEstimatedRebuildCost == \"yes\") {\r\n\t\t\t\tvm.fieldValues.yourBuildingSumInsured = Math.floor(\r\n\t\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.dutyClicked = function ($event) {\r\n\t\t\tvar $target = $($event.currentTarget);\r\n\t\t\tif ($target.hasClass(\"is-expanded\")) {\r\n\t\t\t\t$target.parent().removeClass(\"expanded\");\r\n\t\t\t} else $target.parent().addClass(\"expanded\");\r\n\t\t};\r\n\r\n\t\t/*\r\n\t\t * Function to limit numbers on text input\r\n\t\t * Param - key event\r\n\t\t */\r\n\r\n\t\t$scope.validNumber = function (event) {\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key === 8) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.validPhoneNum = function (event, element) {\r\n\t\t\tvar futureValue = event.delegateTarget.value;\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\r\n\t\t\tif (key === 43) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key === 8) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction validateBuildingSumInsured(event) {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange = false;\r\n\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.expiryMonth\", function (value) {\r\n\t\t\tvalidateExpiryDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.expiryYear\", function (value) {\r\n\t\t\tvalidateExpiryDate();\r\n\t\t});\r\n\r\n\t\tfunction validateExpiryDate() {\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.expiryMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.expiryYear)\r\n\t\t\t) {\r\n\t\t\t\t// if(!isUndefinedOrNull(vm.formSelector) && !isUndefinedOrNull(vm.formSelector.expiryDate)){\r\n\t\t\t\t// vm.formSelector.expiryDate.$setValidity('required', false);\r\n\t\t\t\t// }\r\n\t\t\t\tvm.fieldValues.expiryDate = \"\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar expiryDate =\r\n\t\t\t\tvm.fieldValues.expiryMonth + \"/\" + vm.fieldValues.expiryYear;\r\n\t\t\tvar date = moment(expiryDate, \"MMYY\");\r\n\t\t\t// vm.formSelector.expiryDate.$setValidity('required', true);\r\n\t\t\tif (date.isValid()) {\r\n\t\t\t\tvm.fieldValues.expiryDate = expiryDate;\r\n\t\t\t\t// vm.formSelector.expiryDate.$setValidity('invalidDate', true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getBuildingEstimate() {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t).toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMaximum() {\r\n\t\t\treturn vm.quoteModel.maxSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMinimum() {\r\n\t\t\treturn vm.quoteModel.minSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction toggleContentsSumInsuredInLowerRange() {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange =\r\n\t\t\t\tvm.quoteModel.isSumInsuredInLowerRange(\r\n\t\t\t\t\tvm.fieldValues.buildingSumInsured\r\n\t\t\t\t) && vm.fieldValues.isEstimatedRebuildCost == \"no\";\r\n\t\t}\r\n\r\n\t\t$scope.validPhoneNum = function (event, element) {\r\n\t\t\tvar futureValue = event.delegateTarget.value;\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\r\n\t\t\tif (key === 43) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key === 8) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction validateBuildingSumInsured(event) {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange = false;\r\n\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getBuildingEstimate() {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t).toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMaximum() {\r\n\t\t\treturn vm.quoteModel.maxSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMinimum() {\r\n\t\t\treturn vm.quoteModel.minSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction toggleContentsSumInsuredInLowerRange() {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange =\r\n\t\t\t\tvm.quoteModel.isSumInsuredInLowerRange(\r\n\t\t\t\t\tvm.fieldValues.buildingSumInsured\r\n\t\t\t\t) && vm.fieldValues.isEstimatedRebuildCost == \"no\";\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").directive(\"qbFormSection\", [\r\n\t\t\"hierarchyDecorator\",\r\n\t\tfunction (hierarchyDecorator) {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: \"EA\",\r\n\t\t\t\tcontroller: FormSection,\r\n\t\t\t\tcontrollerAs: \"vm\",\r\n\t\t\t\ttransclude: true,\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tinit: \"&\",\r\n\t\t\t\t\tregister: \"&?\",\r\n\t\t\t\t\tname: \"@\",\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * @formData : Used on the highest level of form sections to bind values to the controller.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tformData: \"<\",\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * @setHierarchy: Callback used by hierarchy decorator to set the current hierarchy of a form section\r\n\t\t\t\t\t */\r\n\t\t\t\t\tsetHierarchy: \"&\",\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * @fieldValues: Binding to set the field values for a section.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tfieldValues: \"= sessionCount) {\r\n\t\t\t\t\tredirectLink(true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\topenDialog();\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\topenDialog();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t * redirectLink - redirect URL\r\n\t\t * Param - true/false\r\n\t\t * Return - none\r\n\t\t */\r\n\t\tfunction redirectLink(arg) {\r\n\t\t\tvm.sessionProtPath =\r\n\t\t\t\targ == true ? vm.redirectURL : vm.noRedirectURL;\r\n\t\t\t$rootScope.$broadcast(\"session-save-quote\");\r\n\t\t\t// $rootScope.$broadcast(\"clear-field-values\");\r\n\t\t\t// window.location.href = util.linkBuilder(sessionProtPath);\r\n\t\t}\r\n\r\n\t\t$scope.$on(\"session-redirect\", function () {\r\n\t\t\tconsole.log(\"save-successful\");\r\n\t\t\twindow.location.href = util.linkBuilder(vm.sessionProtPath);\r\n\t\t});\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").directive(\"qbNgDialog\", function () {\r\n\t\treturn {\r\n\t\t\trestrict: \"A\",\r\n\t\t\tcontroller: \"QBNgDialog\",\r\n\t\t\tcontrollerAs: \"vm\",\r\n\t\t\tscope: {},\r\n\t\t\ttransclude: true,\r\n\t\t\tlink: function ($scope, element, attrs) {\r\n\t\t\t\t$scope.timeLeft = null;\r\n\t\t\t\t$scope.contentData = {};\r\n\t\t\t},\r\n\t\t};\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBParentClass', QBParentClass);\r\n\r\n\tQBParentClass.$inject = ['$scope'];\r\n\r\n\tfunction QBParentClass($scope) {\r\n\t\tvar vm = this;\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbParentClass', [\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tcontroller: QBParentClass,\r\n\t\t\t\tcontrollerAs: 'vm',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tqbParentClass: '<',\r\n\t\t\t\t\tqbParentElement: '@?'\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs, ctrl) {\r\n\r\n\t\t\t\t\tscope.$watch(function () {\r\n\t\t\t\t\t\tvar classes = $(element).find('input').attr('class');\r\n\t\t\t\t\t\treturn classes;\r\n\t\t\t\t\t}, function (newValue, oldValue) {\r\n\t\t\t\t\t\tif (!newValue) return;\r\n\t\t\t\t\t\tif (newValue.indexOf('ng-invalid') >= 0)\r\n\t\t\t\t\t\t\tconsole.log('field is invalid');\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tconsole.log('field is valid.')\r\n\r\n\r\n\t\t\t\t\t});\r\n\r\n\r\n\t\t\t\t\t// for (var cssClass in scope.qbParentClass ) {\r\n\t\t\t\t\t// \tvar condition = scope.qbParentClass[cssClass] ;\r\n\t\t\t\t\t// \tvar parent = scope.qbParentElement ? element.parents(scope.qbParentElement) : element.parent() ;\r\n\t\t\t\t\t// \tif (condition)\r\n\t\t\t\t\t// \t\tparent.addClass(cssClass);\r\n\t\t\t\t\t// \telse\r\n\t\t\t\t\t// \t\tparent.removeClass(cssClass) ;\r\n\t\t\t\t\t// }\r\n\r\n\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}]);\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\t// angular.module('qbePortal').controller('ctpProgress', ctpProgress);\r\n\r\n\t// ctpProgress.$inject = ['$scope'];\r\n\r\n\t// function ctpProgress($scope) {\r\n\t// \tvar vm = this;\r\n\t// \tvm.ctpCompleted = false;\r\n\t// }\r\n\r\n\r\n\tangular.module('qbePortal').directive('qbPaybillProgress', \r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbPaybillProgress.html',\r\n\t\t\t\t// controller: ctpProgress,\r\n\t\t\t\t// controllerAs: 'vm',\t\t\t\t\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t scope: {\r\n\t\t\t \t\ttextDisplay:'=',\r\n\t\t\t \t\tctpStepTotal:'=',\r\n\t\t\t \t\tctpStepNum:'=',\r\n\t\t\t \t\tctpCompleted:'='\t\t\t \r\n\t\t\t },\r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n","(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t\t.module('qbePortal')\r\n\t\t.controller('QBPaymentSummary', QBPaymentSummary);\r\n\tQBPaymentSummary.$inject = [\r\n\t\t'$scope',\r\n\t\t'quoteModelFactory',\r\n\t\t'$filter',\r\n\t\t'$state',\r\n\t\t'MODULE_INFO',\r\n\t\t'labelService',\r\n\t\t'userInputRepository',\r\n\t\t'$window',\r\n\t];\r\n\r\n\tfunction QBPaymentSummary(\r\n\t\t$scope,\r\n\t\tquoteModelFactory,\r\n\t\t$filter,\r\n\t\t$state,\r\n\t\tMODULE_INFO,\r\n\t\tlabelService,\r\n\t\tuserInputRepository,\r\n\t\t$window\r\n\t) {\r\n\t\tvar vm = this,\r\n\t\t\tquoteHasCoverType = false;\r\n\r\n\t\tvm.state = $state;\r\n\t\tvm.saveSuccess = null;\r\n\t\tvar quoteModel = quoteModelFactory.create();\r\n\r\n\t\tvm.saveQuote = function() {\r\n\t\t\tif (validateMail()) {\r\n\t\t\t\t$scope.$root.$broadcast(\r\n\t\t\t\t\t'sidebar-save-quote',\r\n\t\t\t\t\tvm.yourEmailAddress\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tvm.saveSuccess = false;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.assignEmail = function() {\r\n\t\t\t$scope.$root.$broadcast('sidebar-assign-mail', vm.yourEmailAddress);\r\n\t\t};\r\n\r\n\t\tfunction validateMail() {\r\n\t\t\tif (\r\n\t\t\t\tvm.yourEmailAddress == '' ||\r\n\t\t\t\tvm.yourEmailAddress == null ||\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element('div')\r\n\t\t\t\t\t.find('[label-key=yourEmailAddress]')\r\n\t\t\t\t\t.hasClass('ng-invalid-email')\r\n\t\t\t) {\r\n\t\t\t\treturn false;\r\n\t\t\t} else {\r\n\t\t\t\tuserInputRepository.update({\r\n\t\t\t\t\temail: vm.yourEmailAddress\r\n\t\t\t\t});\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Add print specific class to pages with payment summary\r\n\t\tif (\r\n\t\t\twindow.location.href.indexOf('quote') > -1 ||\r\n\t\t\twindow.location.href.indexOf('contact') > -1 ||\r\n\t\t\twindow.location.href.indexOf('payment') > -1\r\n\t\t) {\r\n\t\t\tvar $columns = $('.columns').get(0);\r\n\t\t\t$columns.classList.add('print-ready');\r\n\t\t}\r\n\r\n\t\t$scope.$on('save-quote-success', function() {\r\n\t\t\tvm.saveSuccess = true;\r\n\t\t});\r\n\r\n\t\t$scope.$on('quote-received', onNewQuoteReceived);\r\n\r\n\t\t$scope.$on('selected-quote-changed', function() {\r\n\t\t\tsetSelectedQuoteModel();\r\n\t\t});\r\n\r\n\t\t$scope.$root.$on('update-payment-options', updatePaymentOptions);\r\n\r\n\t\t$scope.$root.$on('$stateChangeSuccess', function() {\r\n\t\t\t$scope.mobileUnmatch();\r\n\t\t});\r\n\r\n\t\t$scope.mobileUnmatch = function() {\r\n\t\t\tvar $colMain = document.querySelector('.col--main');\r\n\t\t\t// var colMainPosTop = $colMain.getClientRects()[0].top;\r\n\t\t\tvar $content = document.getElementById('content');\r\n\t\t\tvar $floatingModule = document.querySelector('.floating-module');\r\n\r\n\t\t\t$colMain.style.removeProperty('margin-top');\r\n\r\n\t\t\t// Reset element position\r\n\t\t\t// colMainPosTop = $colMain.getClientRects()[0].top;\r\n\r\n\t\t\t// Remove sticky classes\r\n\t\t\t$content.classList.remove('sticky');\r\n\t\t\tif (!!$floatingModule) {\r\n\t\t\t\t$floatingModule.classList.remove('sticky-mobile');\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.paymentPanelButtonText = getPaymentButtonText();\r\n\t\tvm.displayPaymentButton = vm.paymentPanelButtonText != null;\r\n\r\n\t\tfunction getPaymentButtonText() {\r\n\t\t\tif (\r\n\t\t\t\tMODULE_INFO.paymentPanelButtonText &&\r\n\t\t\t\tMODULE_INFO.paymentPanelButtonText[$state.current.name]\r\n\t\t\t)\r\n\t\t\t\treturn MODULE_INFO.paymentPanelButtonText[$state.current.name];\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfunction onNewQuoteReceived(event, resp) {\r\n\t\t\tsetSelectedQuoteModel();\r\n\t\t}\r\n\r\n\t\tfunction setSelectedQuoteModel(frequency) {\r\n\t\t\tquoteModel = quoteModelFactory.create();\r\n\r\n\t\t\tif (quoteModel.email != '') {\r\n\t\t\t\tvm.yourEmailAddress = quoteModel.email;\r\n\t\t\t}\r\n\r\n\t\t\tif (quoteModel.selectedQuote) {\r\n\t\t\t\tquoteHasCoverType = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (!frequency) frequency = 'annual';\r\n\r\n\t\t\tif (quoteHasCoverType) {\r\n\t\t\t\tvm.quoteModel = quoteModel.selectedQuote;\r\n\t\t\t\trefreshPrices(frequency);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.paymentOptions = 'yearly';\r\n\r\n\t\tfunction updatePaymentOptions(event, paymentOptions) {\r\n\t\t\tvar frequency;\r\n\t\t\t// Set payment option\r\n\t\t\tvm.paymentOptions = paymentOptions;\r\n\r\n\t\t\tif (quoteHasCoverType) {\r\n\t\t\t\t// Set frequency label\r\n\t\t\t\tif (paymentOptions === 'yearly') {\r\n\t\t\t\t\tfrequency = 'annual';\r\n\t\t\t\t\tvm.frequencyLabel = 'per_annum';\r\n\t\t\t\t} else if (paymentOptions === 'monthly') {\r\n\t\t\t\t\tfrequency = 'monthly';\r\n\t\t\t\t\tvm.frequencyLabel = 'per_month';\r\n\t\t\t\t} else if (paymentOptions === 'fortnightly') {\r\n\t\t\t\t\tfrequency = 'fortnightly';\r\n\t\t\t\t\tvm.frequencyLabel = 'per_fortnight';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetSelectedQuoteModel(frequency);\r\n\t\t\t\t// refreshPrices(frequency) ;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction refreshPrices(frequency) {\r\n\t\t\t// Set cover type\r\n\t\t\tvm.frequencyLabel = 'per_annum';\r\n\r\n\t\t\tvm.coverType = vm.quoteModel.getQuoteResult(frequency).coverType;\r\n\r\n\t\t\t//additional condition for home\r\n\t\t\tif (\r\n\t\t\t\tvm.coverType === 'building_and_contents' ||\r\n\t\t\t\tvm.coverType === 'building_only' ||\r\n\t\t\t\tvm.coverType === 'contents_only'\r\n\t\t\t) {\r\n\t\t\t\tvm.coverType = vm.quoteModel.getQuoteResult(frequency).offering;\r\n\t\t\t}\r\n\r\n\t\t\t// Set quote results\r\n\t\t\tvm.quoteResults = vm.quoteModel.getQuoteResult(frequency).response;\r\n\r\n\t\t\t// Set discounts\r\n\t\t\tvm.discounts = vm.quoteResults.quoteResult.discounts;\r\n\r\n\t\t\t// Filter discounts per mapping and amount is greater than zero\r\n\t\t\tif (vm.discounts) {\r\n\t\t\t\tvm.savings = [];\r\n\t\t\t\tangular.forEach(vm.discounts, function(index) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!vm.mapServiceValue(\r\n\t\t\t\t\t\t\t'paymentSummaryDiscounts',\r\n\t\t\t\t\t\t\tindex.discountType\r\n\t\t\t\t\t\t) &&\r\n\t\t\t\t\t\tindex.amount !== 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tvm.savings.push({\r\n\t\t\t\t\t\t\tdiscountType: index.discountType,\r\n\t\t\t\t\t\t\tamount: index.amount\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Apply gift card\r\n\t\t\tif (\r\n\t\t\t\tvm.quoteResults.isGiftCardApplied &&\r\n\t\t\t\tvm.quoteResults.isGiftCardApplied === true\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tvm.mapServiceValue(\r\n\t\t\t\t\t\t'paymentSummaryGiftCards',\r\n\t\t\t\t\t\tvm.quoteResults.campaignCode\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tvm.savings.push({\r\n\t\t\t\t\t\tdiscountType: vm.mapServiceValue(\r\n\t\t\t\t\t\t\t'paymentSummaryGiftCards',\r\n\t\t\t\t\t\t\tvm.quoteResults.campaignCode\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set payment plan\r\n\t\t\tvm.paymentPlan = vm.quoteResults.paymentPlan;\r\n\r\n\t\t\t// If there are any payment installments\r\n\t\t\tif (vm.paymentPlan.installment) {\r\n\t\t\t\tvm.paymentInstallment = $filter('styledCurrency')(\r\n\t\t\t\t\tvm.paymentPlan.installment\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\t//set monthly values\r\n\t\t\tvm.quoteMonthly = vm.quoteModel.getMonthly();\r\n\t\t\tvm.monthlyQuoteAmount = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteMonthly.paymentPlan.installment\r\n\t\t\t);\r\n\r\n\t\t\t//downpayment\r\n\t\t\tvm.monthlyDownPayment = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteMonthly.paymentPlan.downPayment\r\n\t\t\t);\r\n\r\n\t\t\t//set fortnightly values\r\n\t\t\tvm.quoteFortnightly = vm.quoteModel.getFortnightly();\r\n\t\t\tvm.fortnightlyQuoteAmount = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteFortnightly.paymentPlan.installment\r\n\t\t\t);\r\n\r\n\t\t\t//down payment\r\n\t\t\tvm.fortnightlyDownPayment = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteFortnightly.paymentPlan.downPayment\r\n\t\t\t);\r\n\r\n\t\t\t// Set quote after discounts\r\n\t\t\tvm.quote = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteResults.quoteResult.totalPremium\r\n\t\t\t);\r\n\r\n\t\t\t// Set total monthly premium\r\n\t\t\tvm.premAfterDisc = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteMonthly.totalPremium\r\n\t\t\t);\r\n\r\n\t\t\t// Set reference documents\r\n\t\t\tvm.referenceDocuments = $filter('showFslOnlyNsw')(\r\n\t\t\t\tvm.quoteResults.referenceDocuments,\r\n\t\t\t\tvm.quoteResults.policyAddress.state\r\n\t\t\t);\r\n\r\n\t\t\tif (\r\n\t\t\t\tvm.referenceDocuments &&\r\n\t\t\t\t(vm.quoteResults.productCode === 'QPHHome' ||\r\n\t\t\t\t\tvm.quoteResults.productCode === 'QPHLandlord')\r\n\t\t\t) {\r\n\t\t\t\tangular.forEach(vm.referenceDocuments, function(\r\n\t\t\t\t\tdocuments,\r\n\t\t\t\t\tindex\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (documents.type === 'pds') {\r\n\t\t\t\t\t\tswitch (vm.coverType) {\r\n\t\t\t\t\t\t\tcase 'QPHStandardOffering':\r\n\t\t\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t\t\t'standardPDSLabel'\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase 'QPHPrestigeOffering':\r\n\t\t\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t\t\t'prestigePDSLabel'\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase 'QPHLandlordOffering':\r\n\t\t\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t\t\t'landlordPDSLabel'\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase 'QPHStrataContentsOffering':\r\n\t\t\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t\t\t'strataPDSLabel'\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tangular.forEach(vm.referenceDocuments, function(\r\n\t\t\t\t\tdocuments,\r\n\t\t\t\t\tindex\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (documents.type === 'pds') {\r\n\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t'sideBarlinkLabel'\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.purchaseNow = function() {\r\n\t\t\t$scope.$root.$broadcast('form-submit', MODULE_INFO.mainFormName);\r\n\t\t};\r\n\r\n\t\tvm.printPage = function() {\r\n\t\t\twindow.print();\r\n\t\t};\r\n\r\n\t\tvm.getPage = function() {\r\n\t\t\treturn vm.state.current.name.split('.')[1];\r\n\t\t};\r\n\r\n\t\tvm.isPaymentOptionVisible = function(paymentOption) {\r\n\t\t\tif (vm.getPage() === 'payment') {\r\n\t\t\t\t//on payment page display baed on the user selection\r\n\t\t\t\tif (vm.paymentOptions === paymentOption) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t//if not on payment page display yearly and monthly\r\n\t\t\t\tif (paymentOption === 'yearly' || paymentOption === 'monthly') {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\t\tvm.lookupLabel = function(fieldName) {\r\n\t\t\treturn labelService.getGlobalOptionLabel(\r\n\t\t\t\t'paymentSummary',\r\n\t\t\t\tfieldName\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getDocument = function(gwDocument) {\r\n\t\t\tif (!gwDocument.url || !gwDocument.name) {\r\n\t\t\t\treturn gwDocument;\r\n\t\t\t}\r\n\t\t\tif ($window.location.pathname.indexOf('/bike') !== -1) {\r\n\t\t\t\tif (gwDocument.name.indexOf('Insurance PDS') !== -1) {\r\n\t\t\t\t\tvar bikePdsLink = vm.getGlobalOption('PDS', 'bikePdsLink');\r\n\t\t\t\t\tif (bikePdsLink) {\r\n\t\t\t\t\t\tgwDocument.url = bikePdsLink.label;\r\n\t\t\t\t\t\treturn gwDocument;\r\n\t\t\t\t\t}\t\t\t\t\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\t\t\telse if ($window.location.pathname.indexOf('/caravan') !== -1) {\r\n\t\t\t\tif (gwDocument.name.indexOf('Insurance PDS') !== -1) {\r\n\t\t\t\t\tvar caravanPdsLink = vm.getGlobalOption('PDS', 'caravanPdsLink');\r\n\t\t\t\t\tif (caravanPdsLink)\t{\r\n\t\t\t\t\t\tgwDocument.url = caravanPdsLink.label;\r\n\t\t\t\t\t\treturn gwDocument;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn gwDocument;\r\n\t\t}\r\n\r\n\t\tvm.mapServiceValue = function(serviceName, option) {\r\n\t\t\toption = option.trim();\r\n\t\t\t/** some service values come back untrimmed :) */\r\n\t\t\treturn labelService.getGlobalOptionLabel(serviceName, option);\r\n\t\t};\r\n\t\tvm.getGlobalOption = function(key, option) {\r\n\t\t\toption = option.trim();\r\n\t\t\treturn labelService.getGlobalOption(key, option);\r\n\t\t};\r\n\r\n\t\tsetSelectedQuoteModel();\r\n\t}\r\n\r\n\tangular\r\n\t\t.module('qbePortal')\r\n\t\t.directive('qbPaymentSummary', function($window, $timeout) {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\ttemplateUrl: '../ngviews/sections/common/payment-summary.html',\r\n\t\t\t\tcontroller: QBPaymentSummary,\r\n\t\t\t\tcontrollerAs: 'vm',\r\n\t\t\t\tlink: function(scope, element) {\r\n\t\t\t\t\t// $timeout(function () {\r\n\r\n\t\t\t\t\t// Get qbPaymentSummary position and width\r\n\t\t\t\t\tvar qbPaymentSummaryPosTop = element[0].getClientRects()[0]\r\n\t\t\t\t\t\t.top;\r\n\t\t\t\t\tvar qbPaymentSummaryPosLeft = element[0].getClientRects()[0]\r\n\t\t\t\t\t\t.left;\r\n\t\t\t\t\tvar qbPaymentSummaryWidth = element[0]\r\n\t\t\t\t\t\t.querySelector('div')\r\n\t\t\t\t\t\t.getClientRects()[0].width;\r\n\r\n\t\t\t\t\t// Floating module\r\n\t\t\t\t\tvar $floatingModule = element[0].querySelector(\r\n\t\t\t\t\t\t'.floating-module'\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar $floatingModuleContainer = element[0].querySelector(\r\n\t\t\t\t\t\t'.floating-module-container'\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tvar $floatingModulePosTop = $floatingModule.getClientRects()[0]\r\n\t\t\t\t\t\t.top;\r\n\t\t\t\t\t// var breakPoint = $floatingModuleContainer.getClientRects()[0].bottom;\r\n\r\n\t\t\t\t\t// Cover details\r\n\t\t\t\t\tvar $coverDetails = element[0].querySelector(\r\n\t\t\t\t\t\t'.expandcollapse'\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar coverDetailsPosTop = $coverDetails.getClientRects()[0]\r\n\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t// Content element\r\n\t\t\t\t\tvar $content = document.getElementById('content');\r\n\r\n\t\t\t\t\tvar $colMain = document.querySelector('.col--main');\r\n\t\t\t\t\tvar colMainHeight = $colMain.offsetHeight;\r\n\t\t\t\t\tvar colMainPosTop = $colMain.getClientRects()[0].top;\r\n\r\n\t\t\t\t\t// Footer element\r\n\t\t\t\t\tvar $footer = $('.footer').get(0);\r\n\t\t\t\t\tvar footerHeight = $footer.offsetHeight;\r\n\r\n\t\t\t\t\t// For mobile\r\n\t\t\t\t\tenquire.register(DD.bp.get('0, s'), {\r\n\t\t\t\t\t\tmatch: function() {\r\n\t\t\t\t\t\t\t$content.classList.add('sticky');\r\n\t\t\t\t\t\t\tcolMainPosTop = $colMain.getClientRects()[0].top;\r\n\r\n\t\t\t\t\t\t\tangular.element($window).off('scroll');\r\n\r\n\t\t\t\t\t\t\t// Set Initial Window position\r\n\t\t\t\t\t\t\tvar windowPosition = $(window).scrollTop();\r\n\t\t\t\t\t\t\tangular.element($window).on('scroll', function() {\r\n\t\t\t\t\t\t\t\t// Set Floating module height and top position\r\n\t\t\t\t\t\t\t\tvar $floatingModuleHeight =\r\n\t\t\t\t\t\t\t\t\t$floatingModule.clientHeight;\r\n\t\t\t\t\t\t\t\tvar colMainPos = $colMain.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t\t\t\t// When scroll position is below quote panel\r\n\t\t\t\t\t\t\t\tif (colMainPos <= 0) {\r\n\t\t\t\t\t\t\t\t\t// Check scroll position\r\n\t\t\t\t\t\t\t\t\tvar windowScroll = $(window).scrollTop();\r\n\t\t\t\t\t\t\t\t\tvar floatingModuleHeight =\r\n\t\t\t\t\t\t\t\t\t\t'-' + $floatingModuleHeight + 'px';\r\n\r\n\t\t\t\t\t\t\t\t\t// Scrolling Down\r\n\t\t\t\t\t\t\t\t\tif (windowScroll > windowPosition) {\r\n\t\t\t\t\t\t\t\t\t\t$floatingModule.style.top = floatingModuleHeight;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t// Scrolling Up\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t$floatingModule.style.top = '0px';\r\n\t\t\t\t\t\t\t\t\t\t$floatingModule.classList.add(\r\n\t\t\t\t\t\t\t\t\t\t\t'sticky-mobile'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\twindowPosition = windowScroll;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// Other scroll positions\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t$floatingModule.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t'sticky-mobile'\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t$floatingModule.style.top = '0px';\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t$timeout(function() {\r\n\t\t\t\t\t\t\t\t$colMain.style.marginTop =\r\n\t\t\t\t\t\t\t\t\t$floatingModule.offsetHeight - 10 + 'px';\r\n\t\t\t\t\t\t\t}, 1000);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tunmatch: scope.mobileUnmatch\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// For table and above\r\n\t\t\t\t\tenquire.register(DD.bp.get('m'), {\r\n\t\t\t\t\t\tmatch: function() {\r\n\t\t\t\t\t\t\tangular.element('.floating-module').css('top', '');\r\n\r\n\t\t\t\t\t\t\t// Update position and width on resize\r\n\t\t\t\t\t\t\tangular.element($window).on('resize', function() {\r\n\t\t\t\t\t\t\t\tif ($floatingModule.length > 0) {\r\n\t\t\t\t\t\t\t\t\t// Set element position and width\r\n\t\t\t\t\t\t\t\t\tqbPaymentSummaryPosLeft = element[0].getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t\t.left;\r\n\t\t\t\t\t\t\t\t\tqbPaymentSummaryWidth = element[0]\r\n\t\t\t\t\t\t\t\t\t\t.querySelector('div')\r\n\t\t\t\t\t\t\t\t\t\t.getClientRects()[0].width;\r\n\r\n\t\t\t\t\t\t\t\t\tcolMainHeight = $colMain.offsetHeight;\r\n\t\t\t\t\t\t\t\t\tcolMainPosTop = $colMain.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t\t\t\t\tcoverDetailsPosTop = $coverDetails.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t\t.top;\r\n\t\t\t\t\t\t\t\t\t// breakPoint = $floatingModuleContainer.getClientRects()[0].bottom;\r\n\r\n\t\t\t\t\t\t\t\t\tfooterHeight = $footer.offsetHeight;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tangular.element($window).off('scroll');\r\n\t\t\t\t\t\t\tangular.element($window).on('scroll', function() {\r\n\t\t\t\t\t\t\t\tvar $sidebarContainer = $('.floating-module');\r\n\t\t\t\t\t\t\t\tif ($sidebarContainer.length > 0) {\r\n\t\t\t\t\t\t\t\t\t// Floating save quote\r\n\t\t\t\t\t\t\t\t\tvar $floatingSave =\r\n\t\t\t\t\t\t\t\t\t\t$('.floating-save-quote').length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t? $('.floating-save-quote')[0]\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.offsetHeight * 4\r\n\t\t\t\t\t\t\t\t\t\t\t: 0;\r\n\r\n\t\t\t\t\t\t\t\t\t// When scroll position is below quote panel\r\n\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t$window.pageYOffset >=\r\n\t\t\t\t\t\t\t\t\t\t\tcoverDetailsPosTop &&\r\n\t\t\t\t\t\t\t\t\t\t$window.pageYOffset + footerHeight <\r\n\t\t\t\t\t\t\t\t\t\t\t$colMain.offsetHeight +\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolMainPosTop -\r\n\t\t\t\t\t\t\t\t\t\t\t\t$floatingSave\r\n\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t// $floatingModule.style.width = qbPaymentSummaryWidth + 'px';\r\n\t\t\t\t\t\t\t\t\t\t// $floatingModule.style.left = qbPaymentSummaryPosLeft + 'px';\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-fixed'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.add(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-follow'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\t\t// When scroll position is near the bottom of the page\r\n\t\t\t\t\t\t\t\t\t} else if (\r\n\t\t\t\t\t\t\t\t\t\t$window.pageYOffset + footerHeight >=\r\n\t\t\t\t\t\t\t\t\t\t$colMain.offsetHeight +\r\n\t\t\t\t\t\t\t\t\t\t\tcolMainPosTop -\r\n\t\t\t\t\t\t\t\t\t\t\t$floatingSave\r\n\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t// $floatingModule.style.left = '';\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-follow'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.add('sidebar-fixed');\r\n\r\n\t\t\t\t\t\t\t\t\t\t// Other scroll positions\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t$floatingModule.removeAttribute(\r\n\t\t\t\t\t\t\t\t\t\t\t'style'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-follow'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-fixed'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tunmatch: function() {\r\n\t\t\t\t\t\t\tif ($floatingModule.length > 0) {\r\n\t\t\t\t\t\t\t\t// Reset element position and width\r\n\t\t\t\t\t\t\t\tqbPaymentSummaryPosLeft = element[0].getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t.left;\r\n\t\t\t\t\t\t\t\tqbPaymentSummaryWidth = element[0]\r\n\t\t\t\t\t\t\t\t\t.querySelector('div')\r\n\t\t\t\t\t\t\t\t\t.getClientRects()[0].width;\r\n\r\n\t\t\t\t\t\t\t\tcolMainHeight = $colMain.offsetHeight;\r\n\t\t\t\t\t\t\t\tcolMainPosTop = $colMain.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t\t\t\tcoverDetailsPosTop = $coverDetails.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t\t\t\tfooterHeight = $footer.offsetHeight;\r\n\r\n\t\t\t\t\t\t\t\t// Remove sticky classes\r\n\t\t\t\t\t\t\t\t$floatingModule.removeAttribute('style');\r\n\t\t\t\t\t\t\t\t$content.classList.remove('sidebar-follow');\r\n\t\t\t\t\t\t\t\t$content.classList.remove('sidebar-fixed');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbPhoneNumberValidation', function () {\r\n\t\t\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: '',\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\t\r\n\t\t\t\tctrl.$validators.pattern = function(modelValue, viewValue) {\r\n\r\n\t\t\t\t\t//Polyfill code for the \"startswith\" to be use in IE *Can be move in a startup where the JS executes\r\n\t\t\t\t\tif (!String.prototype.startsWith) {\r\n\t\t\t\t\t\tString.prototype.startsWith = function(searchString, position) {\r\n\t\t\t\t\t\t\tposition = position || 0;\r\n\t\t\t\t\t\t\treturn this.indexOf(searchString, position) === position;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\t\t\r\n\r\n\t\t\t\t\tif (ctrl.$isEmpty(modelValue)) {\r\n\t\t\t\t\t\t// consider empty models to be valid\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tvar validPhone = false;\r\n\r\n\t\t\t\t\t\tif(viewValue.length >= 8){\r\n\t\t\t\t\t\t\tvalidPhone = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Starts with 13 and is 6 digits long\r\n\t\t\t\t\t\t// Starts with 1300 and is 10 digits long\r\n\t\t\t\t\t\tif(viewValue.startsWith(\"13\")){\r\n\t\t\t\t\t\t\tif(viewValue.startsWith(\"1300\")){\r\n\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 10 || viewValue.length === 6;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 6;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Starts with (0_) followed by 8 digits (where _ is 1-9), and is a minimum of 10 digits long\r\n\t\t\t\t\t\t// This should account for international numbers as well as local Australian numbers \"0011\"\r\n\t\t\t\t\t\tif(viewValue.startsWith(\"0\")){\r\n\t\t\t\t\t\t\tif(viewValue.startsWith(\"0011\")){\r\n\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 10;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tif(viewValue[1] >= 1 && viewValue[1] <= 9){\r\n\t\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 10;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Starts with +61 followed by 9 digits\r\n\t\t\t\t\t\tif(viewValue.startsWith(\"+\")){\r\n\t\t\t\t\t\t\tvalidPhone = false;\r\n\t\t\t\t\t\t\tif(viewValue.startsWith(\"+61\")){\r\n\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 12;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(viewValue.indexOf('+') > 0 || (viewValue.match(/\\+/g)||[]).length > 1){\r\n\t\t\t\t\t\t\tvalidPhone = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn validPhone;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbPromoBox',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbPromoBox.html',\t\t\t\t\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t transclude: true,\t\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tisConfirmed: '=',\r\n\t\t\t\t\tcoreData: '=',\r\n\t\t\t\t\tshowThankYou: '=',\r\n\t\t\t\t\tpromoData: '='\r\n\t\t\t\t},\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\tscope.clearUserForm = function() {\r\n\t\t\t\t\t\tscope.$emit('clear-User-Input');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbPromoCode', ['guideWireService', 'labelService', '$rootScope', '$q', function (guideWireService, labelService, $rootScope, $q) {\r\n\r\n\t\tfunction addValidPromoMessage(wrapper, promoValue) {\r\n\t\t\tif (wrapper) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t$rootScope.$broadcast('valid-campaign', {\r\n\t\t\t\t\t\tisValid: true,\r\n\t\t\t\t\t\tpromoValue: promoValue\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif ($(wrapper).find('em.valid-promo').length == 0) {\r\n\t\t\t\t\t\tvar promoMessage = labelService.getGlobalOptionLabel('content', 'promo_acknowledged_message');\r\n\t\t\t\t\t\t$(wrapper).append('' + promoMessage + '');\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (ex) {\r\n\t\t\t\t\tconsole.error('Unable to fetch global message to acknowledge a valid promotional code.');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction removeValidPromoMessage(wrapper) {\r\n\t\t\tif (wrapper) {\r\n\t\t\t\t$(wrapper).find('em.valid-promo').remove();\r\n\t\t\t\t$rootScope.$broadcast('valid-campaign', {\r\n\t\t\t\t\tisValid: false\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction validateInput(element, ngModel) {\r\n\t\t\tif (!ngModel || typeof (element.val()) != 'string') return;\r\n\t\t\tvar currentValue = element.val();\r\n\t\t\tvar promoWrapper = element.parent('.promo-wrapper');\r\n\t\t\tif (currentValue && currentValue != '') {\r\n\t\t\t\treturn guideWireService.isCampaignCodeValid(currentValue)\r\n\t\t\t\t\t.then(function (unique) {\r\n\t\t\t\t\t\taddValidPromoMessage(promoWrapper, currentValue);\r\n\t\t\t\t\t\treturn $q.resolve();\r\n\t\t\t\t\t}).catch(function () {\r\n\t\t\t\t\t\tremoveValidPromoMessage(promoWrapper);\r\n\t\t\t\t\t\treturn $q.reject();\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tremoveValidPromoMessage(promoWrapper);\r\n\t\t\t\treturn $q.resolve();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction _link(scope, element, attrs, ngModel) {\r\n\t\t\tngModel.$asyncValidators.qbPromoCode = function (modelValue) {\r\n\t\t\t\treturn validateInput(element, ngModel);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: _link,\r\n\t\t};\r\n\t}]);\r\n})();\r\n","(function() {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbRestrictInput', function() {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: function($scope, element, attr, ctrl) {\r\n\t\t\t\t// ng-trim must be set to false if you want to prevent whitespaces\r\n\t\t\t\tif (attr.ngTrim == 'false') {\r\n\t\t\t\t\telement.bind('keydown', function(e) {\r\n\t\t\t\t\t\tif (e.which === 32) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctrl.$parsers.push(function(value) {\r\n\t\t\t\t\tvar viewValue;\r\n\t\t\t\t\tvar options = $scope.$eval(attr.qbRestrictInput);\r\n\r\n\t\t\t\t\tif (options.type) {\r\n\t\t\t\t\t\tswitch (options.type) {\r\n\t\t\t\t\t\t\tcase 'digitsOnly':\r\n\t\t\t\t\t\t\t\tviewValue = value.replace(/\\D/g, '');\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'lettersAndDigitsOnly':\r\n\t\t\t\t\t\t\t\tviewValue = value.replace(/\\W/g, '');\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'lettersAndDigitsSpaceOnly':\r\n\t\t\t\t\t\t\t\tif (/\\s/g.test(value)) {\r\n\t\t\t\t\t\t\t\t\tviewValue = value.replace(\r\n\t\t\t\t\t\t\t\t\t\t/[^a-zA-Z0-9 ]/g,\r\n\t\t\t\t\t\t\t\t\t\t''\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tviewValue = value.replace(/\\W/g, '');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tviewValue = '';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (viewValue !== value) {\r\n\t\t\t\t\t\tctrl.$setViewValue(viewValue);\r\n\t\t\t\t\t\tctrl.$render();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn viewValue;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbSimpleSelectArrowClick',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\t\tvar $select = $(elm).find('select');\r\n\r\n\t\t\t\t\tvar openSelect = function (element) {\r\n\t\t\t\t\t\tvar worked = false;\r\n\t\t\t\t\t\tif (document.createEvent) { // all browsers\r\n\t\t\t\t\t\t\tvar e = document.createEvent(\"MouseEvents\");\r\n\t\t\t\t\t\t\te.initMouseEvent(\"mousedown\", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\r\n\t\t\t\t\t\t\tworked = element.dispatchEvent(e);\r\n\t\t\t\t\t\t} else if (element.fireEvent) { // ie\r\n\t\t\t\t\t\t\tworked = element.fireEvent(\"onmousedown\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(elm).click(function (event) {\r\n\t\t\t\t\t\topenSelect($select.get(0));\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBSmartLink', QBSmartLink);\r\n\r\n\tQBSmartLink.$inject = ['$scope', '$window', '$rootScope'];\r\n\r\n\tfunction QBSmartLink($scope, $window, $rootScope) {\r\n\t\tvar vm = this;\r\n\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\t$scope.contentData = $window.qbe.fieldLabels.smartLink;\r\n\t\t}\r\n\r\n\t\tvm.header = $scope.contentData.header;\r\n\t\tvm.content = $scope.contentData.content;\r\n\t\tvm.star = $scope.contentData.feefoStar;\r\n\t\tvm.feedbackButton = $scope.contentData.feedbackButton;\r\n\t\tvm.feefoLogo = $scope.contentData.feefoLogo;\r\n\r\n\t\tvm.submitFeedback = function () {\r\n\t\t\t$rootScope.$broadcast('submit-feedback');\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbSmartLink',\r\n\t\tfunction ($window) {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbSmartLink.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\tcontroller: QBSmartLink,\r\n\t\t\t\tcontrollerAs: 'vm',\r\n\t\t\t\tlink: function (scope, element) {\r\n\r\n\t\t\t\t\t//Repeat by defined number of times\r\n\t\t\t\t\tscope.starCount = function (count) {\r\n\t\t\t\t\t\treturn new Array(count);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($window.innerWidth > 767) {\r\n\t\t\t\t\t\tsetFeefoPosition();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tscope.feefoStyle = {\r\n\t\t\t\t\t\t\t\"position\": \"relative\",\r\n\t\t\t\t\t\t\t\"top\": \"0px\"\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//Feefo container position\r\n\t\t\t\t\tangular.element($window).bind('resize', function () {\r\n\t\t\t\t\t\tif ($window.innerWidth > 767) {\r\n\t\t\t\t\t\t\tsetFeefoPosition();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tscope.feefoStyle = {\r\n\t\t\t\t\t\t\t\t\"position\": \"relative\",\r\n\t\t\t\t\t\t\t\t\"top\": \"0px\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tscope.$apply();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tfunction setFeefoPosition() {\r\n\t\t\t\t\t\tvar receiptPosition = document.querySelector('.form-group__container').offsetTop;\r\n\t\t\t\t\t\tvar feefoNewPosition = receiptPosition - 30 + 'px';\r\n\r\n\t\t\t\t\t\tscope.feefoStyle = {\r\n\t\t\t\t\t\t\t\"position\": \"relative\",\r\n\t\t\t\t\t\t\t\"top\": feefoNewPosition\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n","if ( ! Object.extend ) {\r\n\tObject.extend = function(destination, source) {\r\n\t return $.extend(true, destination, source) ;\r\n // for (var property in source) {\r\n\t // if (source.hasOwnProperty(property)) {\r\n\t // destination[property] = source[property];\r\n\t // }\r\n\t // }\r\n\t // return destination;\r\n\t};\r\n}\r\n\r\nif ( ! Object.values ) {\r\n Object.values = function(object) {\r\n var values = [];\r\n for(var property in object) {\r\n if ( object.hasOwnProperty(property))\r\n values.push(object[property]);\r\n }\r\n return values;\r\n }\r\n}\r\n\r\n\r\nif ( ! Number.isNumeric ) {\r\n\tNumber.isNumeric = function(n) {\r\n\t return !isNaN(parseFloat(n)) && isFinite(n);\r\n\t};\r\n}\r\n\r\nfunction isFunction(functionToCheck) {\r\n\tvar getType = {};\r\n\treturn functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\r\n}\r\n\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.angularCreditCards = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= new Date(year, month)\r\n}\r\n\r\nfunction parseMonth (month) {\r\n return parseIntStrict(month)\r\n}\r\n\r\nfunction formatExpYear (year, strip) {\r\n year = year.toString()\r\n return strip ? year.substr(2, 4) : year\r\n}\r\n\r\nfunction isExpYearValid (year) {\r\n if (typeof year !== 'number') return false\r\n year = parseIntStrict(year)\r\n return year > 0\r\n}\r\n\r\nfunction isExpYearPast (year) {\r\n return new Date().getFullYear() > year\r\n}\r\n\r\n},{\"is-valid-month\":17,\"parse-int\":21,\"parse-year\":22}],11:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar ccTypes = _dereq_('creditcards-types')\r\nvar camel = _dereq_('camel-case')\r\nvar extend = _dereq_('xtend')\r\n\r\nmodule.exports = extend(ccTypes, {\r\n get: function getTypeByName (name) {\r\n return ccTypes.types[camel(name)]\r\n }\r\n})\r\n\r\n},{\"camel-case\":2,\"creditcards-types\":4,\"xtend\":28}],12:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar zeroFill = _dereq_('zero-fill')\r\nvar parseIntStrict = _dereq_('parse-int')\r\n\r\nvar pad = zeroFill(2)\r\n\r\nmodule.exports = function expandYear (year, now) {\r\n now = now || new Date()\r\n var base = now.getFullYear().toString().substr(0, 2)\r\n year = parseIntStrict(year)\r\n return parseIntStrict(base + pad(year))\r\n}\r\n\r\n},{\"parse-int\":21,\"zero-fill\":30}],13:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nmodule.exports = (function (array) {\r\n return function luhn (number) {\r\n if (!number) return false\r\n var length = number.length\r\n var bit = 1\r\n var sum = 0\r\n var value\r\n\r\n while (length) {\r\n value = parseInt(number.charAt(--length), 10)\r\n sum += (bit ^= 1) ? array[value] : value\r\n }\r\n\r\n return !!sum && sum % 10 === 0\r\n }\r\n}([0, 2, 4, 6, 8, 1, 3, 5, 7, 9]))\r\n\r\n},{}],14:[function(_dereq_,module,exports){\r\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\r\nvar slice = Array.prototype.slice;\r\nvar toStr = Object.prototype.toString;\r\nvar funcType = '[object Function]';\r\n\r\nmodule.exports = function bind(that) {\r\n var target = this;\r\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\r\n throw new TypeError(ERROR_MESSAGE + target);\r\n }\r\n var args = slice.call(arguments, 1);\r\n\r\n var binder = function () {\r\n if (this instanceof bound) {\r\n var result = target.apply(\r\n this,\r\n args.concat(slice.call(arguments))\r\n );\r\n if (Object(result) === result) {\r\n return result;\r\n }\r\n return this;\r\n } else {\r\n return target.apply(\r\n that,\r\n args.concat(slice.call(arguments))\r\n );\r\n }\r\n };\r\n\r\n var boundLength = Math.max(0, target.length - args.length);\r\n var boundArgs = [];\r\n for (var i = 0; i < boundLength; i++) {\r\n boundArgs.push('$' + i);\r\n }\r\n\r\n var bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\r\n\r\n if (target.prototype) {\r\n var Empty = function Empty() {};\r\n Empty.prototype = target.prototype;\r\n bound.prototype = new Empty();\r\n Empty.prototype = null;\r\n }\r\n\r\n return bound;\r\n};\r\n\r\n\r\n},{}],15:[function(_dereq_,module,exports){\r\n'use strict';\r\nvar numberIsNan = _dereq_('number-is-nan');\r\n\r\nmodule.exports = Number.isFinite || function (val) {\r\n\treturn !(typeof val !== 'number' || numberIsNan(val) || val === Infinity || val === -Infinity);\r\n};\r\n\r\n},{\"number-is-nan\":20}],16:[function(_dereq_,module,exports){\r\n// https://github.com/paulmillr/es6-shim\r\n// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isinteger\r\nvar isFinite = _dereq_(\"is-finite\");\r\nmodule.exports = Number.isInteger || function(val) {\r\n return typeof val === \"number\" &&\r\n isFinite(val) &&\r\n Math.floor(val) === val;\r\n};\r\n\r\n},{\"is-finite\":15}],17:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar isInteger = _dereq_('is-integer')\r\n\r\nmodule.exports = function isValidMonth (month) {\r\n if (typeof month !== 'number' || !isInteger(month)) return false\r\n return month >= 1 && month <= 12\r\n}\r\n\r\n},{\"is-integer\":16}],18:[function(_dereq_,module,exports){\r\nmodule.exports = Array.isArray || function (arr) {\r\n return Object.prototype.toString.call(arr) == '[object Array]';\r\n};\r\n\r\n},{}],19:[function(_dereq_,module,exports){\r\n/**\r\n * Special language-specific overrides.\r\n *\r\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\r\n *\r\n * @type {Object}\r\n */\r\nvar LANGUAGES = {\r\n tr: {\r\n regexp: /\\u0130|\\u0049|\\u0049\\u0307/g,\r\n map: {\r\n '\\u0130': '\\u0069',\r\n '\\u0049': '\\u0131',\r\n '\\u0049\\u0307': '\\u0069'\r\n }\r\n },\r\n az: {\r\n regexp: /[\\u0130]/g,\r\n map: {\r\n '\\u0130': '\\u0069',\r\n '\\u0049': '\\u0131',\r\n '\\u0049\\u0307': '\\u0069'\r\n }\r\n },\r\n lt: {\r\n regexp: /[\\u0049\\u004A\\u012E\\u00CC\\u00CD\\u0128]/g,\r\n map: {\r\n '\\u0049': '\\u0069\\u0307',\r\n '\\u004A': '\\u006A\\u0307',\r\n '\\u012E': '\\u012F\\u0307',\r\n '\\u00CC': '\\u0069\\u0307\\u0300',\r\n '\\u00CD': '\\u0069\\u0307\\u0301',\r\n '\\u0128': '\\u0069\\u0307\\u0303'\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Lowercase a string.\r\n *\r\n * @param {String} str\r\n * @return {String}\r\n */\r\nmodule.exports = function (str, locale) {\r\n var lang = LANGUAGES[locale]\r\n\r\n str = str == null ? '' : String(str)\r\n\r\n if (lang) {\r\n str = str.replace(lang.regexp, function (m) { return lang.map[m] })\r\n }\r\n\r\n return str.toLowerCase()\r\n}\r\n\r\n},{}],20:[function(_dereq_,module,exports){\r\n'use strict';\r\nmodule.exports = Number.isNaN || function (x) {\r\n\treturn x !== x;\r\n};\r\n\r\n},{}],21:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar isInteger = _dereq_('is-integer')\r\n\r\nmodule.exports = function parseIntStrict (int) {\r\n if (typeof int === 'number') {\r\n return isInteger(int) ? int : undefined\r\n }\r\n if (typeof int === 'string') {\r\n return /^\\d+$/.test(int) ? parseInt(int, 10) : undefined\r\n }\r\n}\r\n\r\n},{\"is-integer\":16}],22:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar parseIntStrict = _dereq_('parse-int')\r\nvar expandYear = _dereq_('expand-year')\r\n\r\nmodule.exports = function parseYear (year, expand, now) {\r\n year = parseIntStrict(year)\r\n if (year == null) return\r\n if (!expand) return year\r\n return expandYear(year, now)\r\n}\r\n\r\n},{\"expand-year\":12,\"parse-int\":21}],23:[function(_dereq_,module,exports){\r\nvar lowerCase = _dereq_('lower-case')\r\n\r\nvar NON_WORD_REGEXP = _dereq_('./vendor/non-word-regexp')\r\nvar CAMEL_CASE_REGEXP = _dereq_('./vendor/camel-case-regexp')\r\nvar TRAILING_DIGIT_REGEXP = _dereq_('./vendor/trailing-digit-regexp')\r\n\r\n/**\r\n * Sentence case a string.\r\n *\r\n * @param {String} str\r\n * @param {String} locale\r\n * @param {String} replacement\r\n * @return {String}\r\n */\r\nmodule.exports = function (str, locale, replacement) {\r\n if (str == null) {\r\n return ''\r\n }\r\n\r\n replacement = replacement || ' '\r\n\r\n function replace (match, index, string) {\r\n if (index === 0 || index === (string.length - match.length)) {\r\n return ''\r\n }\r\n\r\n return replacement\r\n }\r\n\r\n str = String(str)\r\n // Support camel case (\"camelCase\" -> \"camel Case\").\r\n .replace(CAMEL_CASE_REGEXP, '$1 $2')\r\n // Support digit groups (\"test2012\" -> \"test 2012\").\r\n .replace(TRAILING_DIGIT_REGEXP, '$1 $2')\r\n // Remove all non-word characters and replace with a single space.\r\n .replace(NON_WORD_REGEXP, replace)\r\n\r\n // Lower case the entire string.\r\n return lowerCase(str, locale)\r\n}\r\n\r\n},{\"./vendor/camel-case-regexp\":24,\"./vendor/non-word-regexp\":25,\"./vendor/trailing-digit-regexp\":26,\"lower-case\":19}],24:[function(_dereq_,module,exports){\r\nmodule.exports = /([\\u0061-\\u007A\\u00B5\\u00DF-\\u00F6\\u00F8-\\u00FF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0561-\\u0587\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7FA\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A])([\\u0041-\\u005A\\u00C0-\\u00D6\\u00D8-\\u00DE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA\\uFF21-\\uFF3A\\u0030-\\u0039\\u00B2\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19])/g\r\n\r\n},{}],25:[function(_dereq_,module,exports){\r\nmodule.exports = /[^\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u0030-\\u0039\\u00B2\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]+/g\r\n\r\n},{}],26:[function(_dereq_,module,exports){\r\nmodule.exports = /([\\u0030-\\u0039\\u00B2\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19])([^\\u0030-\\u0039\\u00B2\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19])/g\r\n\r\n},{}],27:[function(_dereq_,module,exports){\r\n/**\r\n * Special language-specific overrides.\r\n *\r\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\r\n *\r\n * @type {Object}\r\n */\r\nvar LANGUAGES = {\r\n tr: {\r\n regexp: /[\\u0069]/g,\r\n map: {\r\n '\\u0069': '\\u0130'\r\n }\r\n },\r\n az: {\r\n regexp: /[\\u0069]/g,\r\n map: {\r\n '\\u0069': '\\u0130'\r\n }\r\n },\r\n lt: {\r\n regexp: /[\\u0069\\u006A\\u012F]\\u0307|\\u0069\\u0307[\\u0300\\u0301\\u0303]/g,\r\n map: {\r\n '\\u0069\\u0307': '\\u0049',\r\n '\\u006A\\u0307': '\\u004A',\r\n '\\u012F\\u0307': '\\u012E',\r\n '\\u0069\\u0307\\u0300': '\\u00CC',\r\n '\\u0069\\u0307\\u0301': '\\u00CD',\r\n '\\u0069\\u0307\\u0303': '\\u0128'\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Upper case a string.\r\n *\r\n * @param {String} str\r\n * @return {String}\r\n */\r\nmodule.exports = function (str, locale) {\r\n var lang = LANGUAGES[locale]\r\n\r\n str = str == null ? '' : String(str)\r\n\r\n if (lang) {\r\n str = str.replace(lang.regexp, function (m) { return lang.map[m] })\r\n }\r\n\r\n return str.toUpperCase()\r\n}\r\n\r\n},{}],28:[function(_dereq_,module,exports){\r\nmodule.exports = extend\r\n\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nfunction extend() {\r\n var target = {}\r\n\r\n for (var i = 0; i < arguments.length; i++) {\r\n var source = arguments[i]\r\n\r\n for (var key in source) {\r\n if (hasOwnProperty.call(source, key)) {\r\n target[key] = source[key]\r\n }\r\n }\r\n }\r\n\r\n return target\r\n}\r\n\r\n},{}],29:[function(_dereq_,module,exports){\r\nmodule.exports = extend\r\n\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nfunction extend(target) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n var source = arguments[i]\r\n\r\n for (var key in source) {\r\n if (hasOwnProperty.call(source, key)) {\r\n target[key] = source[key]\r\n }\r\n }\r\n }\r\n\r\n return target\r\n}\r\n\r\n},{}],30:[function(_dereq_,module,exports){\r\n/**\r\n * Given a number, return a zero-filled string.\r\n * From http://stackoverflow.com/questions/1267283/\r\n * @param {number} width\r\n * @param {number} number\r\n * @return {string}\r\n */\r\nmodule.exports = function zeroFill (width, number, pad) {\r\n if (number === undefined) {\r\n return function (number, pad) {\r\n return zeroFill(width, number, pad)\r\n }\r\n }\r\n if (pad === undefined) pad = '0'\r\n width -= number.toString().length\r\n if (width > 0) return new Array(width + (/\\./.test(number) ? 2 : 1)).join(pad) + number\r\n return number + ''\r\n}\r\n\r\n},{}],31:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar cvc = _dereq_('creditcards').cvc\r\nvar bind = _dereq_('function-bind')\r\n\r\nmodule.exports = factory\r\n\r\nfactory.$inject = ['$parse']\r\nfunction factory ($parse) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n compile: function (element, attributes) {\r\n attributes.$set('maxlength', 4)\r\n attributes.$set('pattern', '[0-9]*')\r\n attributes.$set('xAutocompletetype', 'cc-csc')\r\n\r\n return function (scope, element, attributes, ngModel) {\r\n\r\n ngModel.$validators.ccCvc = function (value) {\r\n return ngModel.$isEmpty(ngModel.$viewValue) || cvc.isValid(value, $parse(attributes.ccType)(scope))\r\n }\r\n\r\n if (attributes.ccType) {\r\n scope.$watch(attributes.ccType, bind.call(ngModel.$validate, ngModel))\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n},{\"creditcards\":7,\"function-bind\":14}],32:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar expiration = _dereq_('creditcards').expiration\r\nvar month = expiration.month\r\nvar year = expiration.year\r\nvar ap = _dereq_('ap')\r\n\r\nexports = module.exports = function ccExp () {\r\n return {\r\n restrict: 'AE',\r\n require: 'ccExp',\r\n controller: CcExpController,\r\n link: function (scope, element, attributes, ccExp) {\r\n ccExp.$watch()\r\n }\r\n }\r\n}\r\n\r\nCcExpController.$inject = ['$scope', '$element']\r\nfunction CcExpController ($scope, $element) {\r\n var nullFormCtrl = {\r\n $setValidity: noop\r\n }\r\n var parentForm = $element.inheritedData('$formController') || nullFormCtrl\r\n var ngModel = {\r\n year: {},\r\n month: {}\r\n }\r\n\r\n this.setMonth = function (monthCtrl) {\r\n ngModel.month = monthCtrl\r\n }\r\n this.setYear = function (yearCtrl) {\r\n ngModel.year = yearCtrl\r\n }\r\n\r\n function setValidity (exp) {\r\n var expMonth = exp.month\r\n var expYear = exp.year\r\n var valid = (expMonth == null && expYear == null) || !!expMonth && !!expYear && !expiration.isPast(expMonth, expYear)\r\n parentForm.$setValidity('ccExp', valid, $element)\r\n }\r\n\r\n this.$watch = function $watchExp () {\r\n $scope.$watch(function watchExp () {\r\n return {\r\n month: ngModel.month.$modelValue,\r\n year: ngModel.year.$modelValue\r\n }\r\n }, setValidity, true)\r\n }\r\n}\r\n\r\nvar nullCcExp = {\r\n setMonth: noop,\r\n setYear: noop\r\n}\r\n\r\nexports.month = function ccExpMonth () {\r\n return {\r\n restrict: 'A',\r\n require: ['ngModel', '^?ccExp'],\r\n compile: function (element, attributes) {\r\n attributes.$set('maxlength', 2)\r\n attributes.$set('pattern', '[0-9]*')\r\n attributes.$set('xAutocompletetype', 'cc-exp-month')\r\n\r\n return function (scope, element, attributes, controllers) {\r\n var ngModel = controllers[0]\r\n var ccExp = controllers[1] || nullCcExp\r\n\r\n ccExp.setMonth(ngModel)\r\n ngModel.$parsers.unshift(month.parse)\r\n ngModel.$validators.ccExpMonth = function validateExpMonth (value) {\r\n return ngModel.$isEmpty(ngModel.$viewValue) || month.isValid(value)\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexports.year = function ccExpYear () {\r\n return {\r\n restrict: 'A',\r\n require: ['ngModel', '^?ccExp'],\r\n compile: function (element, attributes) {\r\n var fullYear = attributes.fullYear !== undefined\r\n\r\n attributes.$set('maxlength', fullYear ? 4 : 2)\r\n attributes.$set('pattern', '[0-9]*')\r\n attributes.$set('xAutocompletetype', 'cc-exp-year')\r\n\r\n return function (scope, element, attributes, controllers) {\r\n var ngModel = controllers[0]\r\n var ccExp = controllers[1] || nullCcExp\r\n\r\n ccExp.setYear(ngModel)\r\n\r\n ngModel.$parsers.unshift(ap.partialRight(year.parse, !fullYear))\r\n\r\n ngModel.$formatters.unshift(function formatExpYear (value) {\r\n return value ? year.format(value, !fullYear) : ''\r\n })\r\n\r\n ngModel.$validators.ccExpYear = function validateExpYear (value) {\r\n return ngModel.$isEmpty(ngModel.$viewValue) || (year.isValid(value) && !year.isPast(value))\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction noop () {}\r\n\r\n},{\"ap\":1,\"creditcards\":7}],33:[function(_dereq_,module,exports){\r\n'use strict'\r\n\r\nvar card = _dereq_('creditcards').card\r\nvar array = _dereq_('cast-array')\r\nvar partial = _dereq_('ap').partial\r\n\r\nmodule.exports = factory\r\n\r\nfactory.$inject = ['$parse']\r\nfunction factory ($parse) {\r\n return {\r\n restrict: 'A',\r\n require: ['ngModel', 'ccNumber'],\r\n controller: function () {\r\n this.type = null\r\n this.eagerType = null\r\n },\r\n compile: function ($element, $attributes) {\r\n $attributes.$set('pattern', '[0-9]*')\r\n $attributes.$set('xAutocompletetype', 'cc-number')\r\n\r\n return function ($scope, $element, $attributes, controllers) {\r\n var ngModel = controllers[0]\r\n var ccNumber = controllers[1]\r\n\r\n $scope.$watch($attributes.ngModel, function (number) {\r\n ngModel.$ccType = ccNumber.type = card.type(number)\r\n })\r\n\r\n function $viewValue () {\r\n return ngModel.$viewValue\r\n }\r\n\r\n function setCursorPostion (element, position) {\r\n if (element.setSelectionRange) {\r\n element.setSelectionRange(position, position)\r\n } else if (element.createTextRange) {\r\n var range = element.createTextRange()\r\n range.move('character', position)\r\n range.select()\r\n }\r\n }\r\n\r\n if ($attributes.ccEagerType != null) {\r\n $scope.$watch($viewValue, function eagerTypeCheck (number) {\r\n if (!number) return\r\n number = card.parse(number)\r\n ngModel.$ccEagerType = ccNumber.eagerType = card.type(number, true)\r\n })\r\n }\r\n\r\n if ($attributes.ccType) {\r\n $scope.$watch($attributes.ccType, function () {\r\n ngModel.$validate()\r\n })\r\n }\r\n\r\n if ($attributes.ccFormat != null) {\r\n $element.on('input', function formatInput () {\r\n var input = $element.val()\r\n var previous = $viewValue()\r\n if (!input) return\r\n var element = $element[0]\r\n var formatted = card.format(card.parse(input))\r\n\r\n var selectionEnd = element.selectionEnd\r\n ngModel.$setViewValue(formatted)\r\n ngModel.$render()\r\n if (formatted && (!formatted.charAt(selectionEnd - 1).trim())) {\r\n if (previous && previous.length < formatted.length) {\r\n selectionEnd++\r\n } else {\r\n selectionEnd--\r\n }\r\n }\r\n setCursorPostion(element, selectionEnd)\r\n\r\n })\r\n }\r\n\r\n ngModel.$parsers.unshift(card.parse)\r\n\r\n ngModel.$validators.ccNumber = function validateCcNumber (number) {\r\n return ngModel.$isEmpty(ngModel.$viewValue) || card.isValid(number)\r\n }\r\n\r\n ngModel.$validators.ccNumberType = function validateCcNumberType (number) {\r\n if (ngModel.$isEmpty(ngModel.$viewValue)) return true\r\n var type = $parse($attributes.ccType)($scope)\r\n if (!type) card.isValid(number)\r\n return array(type).some(partial(card.isValid, number))\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n},{\"ap\":1,\"cast-array\":3,\"creditcards\":7}],34:[function(_dereq_,module,exports){\r\n(function (global){\r\n'use strict'\r\n\r\nvar angular = (typeof window !== \"undefined\" ? window['angular'] : typeof global !== \"undefined\" ? global['angular'] : null)\r\nvar creditcards = _dereq_('creditcards')\r\nvar number = _dereq_('./number')\r\nvar cvc = _dereq_('./cvc')\r\nvar expiration = _dereq_('./expiration')\r\n\r\nmodule.exports = angular\r\n .module('credit-cards', [])\r\n .value('creditcards', creditcards)\r\n .directive('ccNumber', number)\r\n .directive('ccExp', expiration)\r\n .directive('ccExpMonth', expiration.month)\r\n .directive('ccExpYear', expiration.year)\r\n .directive('ccCvc', cvc)\r\n .name\r\n\r\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\r\n},{\"./cvc\":31,\"./expiration\":32,\"./number\":33,\"creditcards\":7}]},{},[34])(34)\r\n});\n/**\n * Deloitte Digital global namespace for modules\n * @namespace DD\n */\n;(function() {\n\t'use strict';\n\n\twindow.DD = window.DD || {};\n\n\t/**\n\t * Breakpoints for JavaScript. Works with the Deloitte Digital SCSS @bp mixin\n\t *\n\t * @namespace bp\n\t * @memberof DD\n\t * @version 1.0.0\n\t * @copyright 2012-2014 Deloitte Digital Australia - http://www.deloittedigital.com/au\n\t * @author Deloitte Digital Australia deloittedigital@deloitte.com.au\n\t * @license BSD 3-Clause (http://opensource.org/licenses/BSD-3-Clause)\n\t */\n\twindow.DD.bp = (function() {\n\t\tvar _minBreakpoints,\n\t\t\t_maxBreakpoints,\n\t\t\t_options = {\n\t\t\t\tisResponsive: true,\n\t\t\t\tbaseFontSize: 16,\n\t\t\t\tbreakpoints: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'xxs',\n\t\t\t\t\t\tpx: 359\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'xs',\n\t\t\t\t\t\tpx: 480\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 's',\n\t\t\t\t\t\tpx: 640\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'm',\n\t\t\t\t\t\tpx: 768\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'l',\n\t\t\t\t\t\tpx: 1024\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'xl',\n\t\t\t\t\t\tpx: 1244\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'xxl',\n\t\t\t\t\t\tpx: 1410\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tstaticRange: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 'xl'\n\t\t\t\t}\n\t\t\t},\n\t\t\t_initBreakpoints,\n\t\t\t_parseMinMaxInputs,\n\t\t\t_pxToEms,\n\t\t\t_bpToEms,\n\t\t\t_bpIsValidForStatic,\n\t\t\t_bpMin,\n\t\t\t_bpMax,\n\t\t\t_bpBetween,\n\t\t\tget,\n\t\t\tgetHeight,\n\t\t\tis,\n\t\t\tisHeight,\n\t\t\toptions;\n\n\t\t/**\n\t\t * Sorts the breakpoints and assigns them to an associative array for more efficient lookup.\n\t\t * Immediately invoked on initialisation\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t */\n\t\t_initBreakpoints = function() {\n\t\t\t//sort the breakpoints into order of smallest to largest\n\t\t\tvar sortedBreakpoints = _options.breakpoints.sort(function(a, b) {\n\t\t\t\t// only sort if the correct objects are present\n\t\t\t\tif (a.px < b.px) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\n\t\t\t\tif (a.px > b.px) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t\t// reset the breakpoints\n\t\t\t_minBreakpoints = {};\n\t\t\t_maxBreakpoints = {};\n\n\t\t\t// loop through sorted breakpoints to generate a quick lookup object using the name as a key\n\t\t\tfor (var i = 0, len = sortedBreakpoints.length, last = len - 1; i < len; i += 1) {\n\t\t\t\t_minBreakpoints[sortedBreakpoints[i].name] = parseInt(sortedBreakpoints[i].px, 10);\n\n\t\t\t\t// skip the last item in the list as we assume there is no maximum for the last\n\t\t\t\tif (i < last) {\n\t\t\t\t\t// the max breakpoint of the current size is the next breakpoints\n\t\t\t\t\t// width minus 1px so there is no overlap between breakpoints\n\t\t\t\t\t_maxBreakpoints[sortedBreakpoints[i].name] = parseInt(sortedBreakpoints[i + 1].px - 1, 10);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t_initBreakpoints();\n\n\t\t/**\n\t\t * Splits string syntax 'xs,m' into separate values 'xs' and 'm'\n\t\t * Converts string '5' to numeric 5\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} min Number in pixels or string notation\n\t\t * @param {String|Number} max Number in pixels or string notation\n\t\t * @return {Object} Object containing the min and max values parsed as a number\n\t\t */\n\t\t_parseMinMaxInputs = function(min, max) {\n\t\t\tvar parseValue = function(val) {\n\t\t\t\t\tif (typeof (val) === 'string') {\n\t\t\t\t\t\t// Strip whitespace\n\t\t\t\t\t\tval = val.replace(/\\s/g, '');\n\n\t\t\t\t\t\t// If val only contains digits, convert it to a number\n\t\t\t\t\t\tif (/^\\d+$/.test(val)) {\n\t\t\t\t\t\t\tval = parseInt(val, 10);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\t\t\t\tbpArray,\n\t\t\t\tresultMin = min,\n\t\t\t\tresultMax = max || 0;\n\n\t\t\t// check if it's using the string syntax, if so - split it\n\t\t\tif (typeof (min) === 'string' && min.indexOf(',') !== -1 && resultMax === 0) {\n\t\t\t\tbpArray = min.split(',');\n\t\t\t\tif (bpArray.length === 2) {\n\t\t\t\t\tresultMin = bpArray[0];\n\t\t\t\t\tresultMax = bpArray[1];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tmin: parseValue(resultMin),\n\t\t\t\tmax: parseValue(resultMax)\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t\t * Converts a number of pixels into em\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {Number} px Number in pixels\n\t\t * @return {String} The converted number in em as a string\n\t\t */\n\t\t_pxToEms = function(px) {\n\t\t\treturn px / _options.baseFontSize;\n\t\t};\n\n\t\t/**\n\t\t * Converts a breakpoint name/value (e.g. l) to the px variable then to ems\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} breakpoint Breakpoint name as a string, or as a number in pixels\n\t\t * @param {Boolean} [isMax=false] Flag to determine if the min or max of the breakpoint needs to be used\n\t\t * @return {String} The converted number in em as a string\n\t\t */\n\t\t_bpToEms = function(breakpoint, isMax) {\n\t\t\tif (typeof (breakpoint) === 'number') {\n\t\t\t\treturn _pxToEms(breakpoint);\n\t\t\t}\n\n\t\t\tvar list = (isMax === true) ? _maxBreakpoints : _minBreakpoints,\n\t\t\t\tems = '0';\n\n\t\t\tfor (var key in list) {\n\t\t\t\tif (list.hasOwnProperty(key)) {\n\t\t\t\t\tif (breakpoint === key.toLowerCase()) {\n\t\t\t\t\t\tems = _pxToEms(list[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ems === '0') {\n\t\t\t\tvoid 0;\n\t\t\t}\n\n\t\t\treturn ems;\n\t\t};\n\n\t\t/**\n\t\t * Checks if the breakpoint provided falls inside the valid static min/max region\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} min Breakpoint name as a string, as a number in pixels, or as string notation containing both breakpoints\n\t\t * @param {String|Number} max Breakpoint name as a string, or as a number in pixels\n\t\t * @param {Boolean} [property='width'] which property to check for (e.g. width or height)\n\t\t * @return {Boolean} If the breakpoint fits inside the static range or not\n\t\t */\n\t\t_bpIsValidForStatic = function(min, max, property) {\n\t\t\tif (typeof (property) !== 'string') {\n\t\t\t\tproperty = 'width'; //default to width based media query\n\t\t\t}\n\n\t\t\tif (property !== 'width') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar bpValidMin = _bpToEms(_options.staticRange.min),\n\t\t\t\tbpValidMax = _bpToEms(_options.staticRange.max, true),\n\t\t\t\tparsed = _parseMinMaxInputs(min, max),\n\t\t\t\tbpMin = _bpToEms(parsed.min),\n\t\t\t\tbpMax = _bpToEms(parsed.max);\n\n\t\t\t// if max is 0 we have a min-and-above situation\n\t\t\tif (parsed.max === 0) {\n\t\t\t\t// need to check that the min is greater than the valid min,\n\t\t\t\t// AND also that the min is less than the valid maximum\n\t\t\t\tif (bpMin >= bpValidMin && bpMin < bpValidMax) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// if min is 0 we have a max-and-below situation\n\t\t\tif (parsed.min === 0) {\n\t\t\t\tif (bpMax >= bpValidMax) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// if the min is above the valid max, or the max is below the valid min\n\t\t\tif (bpMin > bpValidMax || bpMax < bpValidMin) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// if the breakpoint is a bp-between (assumed because $max and $min aren't 0)\n\t\t\t// don't show if the max isn't above the valid max\n\t\t\tif (bpMax < bpValidMax) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * Returns a min-width media query based on bp name or px\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {String} Media query string\n\t\t */\n\t\t_bpMin = function(min, property) {\n\t\t\tvar bpMin = _bpToEms(min),\n\t\t\t\tbpType = (typeof (property) === 'string') ? property : 'width';\n\n\t\t\treturn '(min-' + bpType + ': ' + bpMin + 'em)';\n\t\t};\n\n\t\t/**\n\t\t * Returns a max-width media query based on bp name or px\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} max Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {String} Media query string\n\t\t */\n\t\t_bpMax = function(max, property) {\n\t\t\tvar bpMax = _bpToEms(max, true),\n\t\t\t\tbpType = (typeof (property) === 'string') ? property : 'width';\n\n\t\t\treturn '(max-' + bpType + ': ' + bpMax + 'em)';\n\t\t};\n\n\t\t/**\n\t\t * Returns a min-width and max-width media query based on bp name (can be the same bp name) or px\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @private\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String|Number} max Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {String} Media query string\n\t\t */\n\t\t_bpBetween = function(min, max, property) {\n\t\t\tvar bpMin = _bpToEms(min),\n\t\t\t\tbpMax = _bpToEms(max, true),\n\t\t\t\tbpType = (typeof (property) === 'string') ? property : 'width';\n\n\t\t\treturn '(min-' + bpType + ': ' + bpMin + 'em) and (max-' + bpType + ': ' + bpMax + 'em)';\n\t\t};\n\n\t\t/**\n\t\t * Breakpoint function that can take the input of a min and max\n\t\t * breakpoint by name or number (in px) along with a property\n\t\t * (like width or height) and returns the media query as a string\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // large and above\n\t\t * DD.bp.get('l');\n\t\t *\n\t\t * @example\n\t\t * // 300px and above\n\t\t * DD.bp.get(300);\n\t\t *\n\t\t * @example\n\t\t * // large and below\n\t\t * DD.bp.get(0, 'l');\n\t\t *\n\t\t * @example\n\t\t * // 300px and below\n\t\t * DD.bp.get(0, 300);\n\t\t *\n\t\t * @example\n\t\t * // Between small and large\n\t\t * DD.bp.get('s', 'l');\n\t\t *\n\t\t * @example\n\t\t * // Between 100px and 300px\n\t\t * DD.bp.get(100, 300);\n\t\t *\n\t\t * @example\n\t\t * // High resolution displays (can use 'hdpi' as well)\n\t\t * DD.bp.get('retina');\n\t\t *\n\t\t * @example\n\t\t * // Can mix and match names and numbers - between 200px and xlarge\n\t\t * DD.bp.get(200, 'xl');\n\t\t *\n\t\t * @example\n\t\t * // Between small and 960px\n\t\t * DD.bp.get('s', 960);\n\t\t *\n\t\t * @example\n\t\t * // Can use a single string (no spaces) - useful for passing through from HTML to JS\n\t\t * DD.bp.get('m,l');\n\t\t *\n\t\t * @example\n\t\t * // Can also mix names and numbers\n\t\t * DD.bp.get('xs,1000');\n\t\t *\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels, or in comma separated string notation\n\t\t * @param {String|Number} [max=0] Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {String} Media query string\n\t\t */\n\t\tget = function(min, max, property) {\n\t\t\tvar parsed = _parseMinMaxInputs(min, max),\n\t\t\t\tbpMin = parsed.min,\n\t\t\t\tbpMax = parsed.max;\n\n\t\t\tif (typeof (property) !== 'string') {\n\t\t\t\tproperty = 'width'; //default to width based media query\n\t\t\t}\n\n\t\t\t//check what type of bp it is\n\t\t\tif (bpMin === 'retina' || bpMin === 'hdpi') {\n\t\t\t\treturn '(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-device-pixel-ratio: 1.5)';\n\t\t\t} else if (bpMax === 0) {\n\t\t\t\treturn _bpMin(bpMin, property);\n\t\t\t} else if (bpMin === 0) {\n\t\t\t\treturn _bpMax(bpMax, property);\n\t\t\t} else {\n\t\t\t\treturn _bpBetween(bpMin, bpMax, property);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Shortcut for the get() function that returns a height\n\t\t * based media query and returns the media query as a string\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // Height of 300px and above\n\t\t * DD.bp.getHeight(300);\n\t\t *\n\t\t * @example\n\t\t * // Height of 300px and below\n\t\t * DD.bp.getHeight(0, 300);\n\t\t *\n\t\t * @example\n\t\t * // Between 100px and 300px high\n\t\t * DD.bp.getHeight(100, 300);\n\t\t *\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels, or in comma separated string notation\n\t\t * @param {String|Number} [max=0] Breakpoint name as a string, or as a number in pixels\n\t\t * @return {String} Media query string\n\t\t */\n\t\tgetHeight = function(min, max) {\n\t\t\treturn get(min, max, 'height');\n\t\t};\n\n\t\t/**\n\t\t * Breakpoint function that takes the same inputs as get() but\n\t\t * instead of returning the media query as a string returns\n\t\t * if the current page matches that query as a boolean using\n\t\t * window.matchMedia(mq).matches\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // returns true if the page is between xs and s\n\t\t * DD.bp.is('xs,s');\n\t\t * DD.bp.is('xs','s');\n\t\t *\n\t\t * @example\n\t\t * // returns true if the page is between 0 and 300px wide\n\t\t * DD.bp.is('0,300');\n\t\t * DD.bp.is(0, 300);\n\t\t *\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels, or in comma separated string notation\n\t\t * @param {String|Number} [max=0] Breakpoint name as a string, or as a number in pixels\n\t\t * @param {String} [property='width'] Property to check using a media query. e.g. width or height\n\t\t * @return {Boolean}\n\t\t */\n\t\tis = function(min, max, property) {\n\t\t\tif (_options.isResponsive === false) {\n\t\t\t\treturn _bpIsValidForStatic(min, max, property);\n\t\t\t}\n\n\t\t\tif (window.matchMedia) {\n\t\t\t\treturn window.matchMedia(get(min, max, property)).matches;\n\t\t\t}\n\n\t\t\tvoid 0;\n\n\t\t\treturn false;\n\t\t};\n\n\t\t/**\n\t\t * Shortcut for the is() function that returns a height\n\t\t * based media query and returns the media query as a boolean\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // returns true if the page is between 0 and 300px high\n\t\t * DD.bp.isHeight('0,300');\n\t\t * DD.bp.isHeight(0, 300);\n\t\t *\n\t\t * @param {String|Number} min Breakpoint name as a string, or as a number in pixels, or in comma separated string notation\n\t\t * @param {String|Number} [max=0] Breakpoint name as a string, or as a number in pixels\n\t\t * @return {Boolean}\n\t\t */\n\t\tisHeight = function(min, max) {\n\t\t\treturn is(min, max, 'height');\n\t\t};\n\n\t\t/**\n\t\t * Valid options for the Breakpoints array\n\t\t *\n\t\t * @typedef {Object} DD.bp.BreakpointOptions\n\t\t * @property {String} name Name of the breakpoint e.g. 's', 'm', 'l'\n\t\t * @property {Number} px Number in px for the size of the breakpoint\n\t\t */\n\n\t\t/**\n\t\t * Valid options for the Breakpoints library\n\t\t *\n\t\t * @typedef {Object} DD.bp.Options\n\t\t * @property {Number} [baseFontSize] Number in px to be used as a base font size in order to calculate em values\n\t\t * @property {DD.bp.BreakpointOptions[]} [breakpoints]\n\t\t */\n\n\t\t/**\n\t\t * User updatable options\n\t\t *\n\t\t * @memberof DD.bp\n\t\t * @example\n\t\t * // update the base font size only\n\t\t * DD.bp.options({\n\t\t * baseFontSize: 14\n\t\t * });\n\t\t *\n\t\t * @example\n\t\t * // update the breakpoints\n\t\t * DD.bp.options({\n\t\t * breakpoints: [\n\t\t * { name: 'small', px: 400 },\n\t\t * { name: 'medium', px: 800 },\n\t\t * { name: 'large', px: 1200 }\n\t\t * ]\n\t\t * });\n\t\t *\n\t\t * @param {DD.bp.Options} opts Options inside the library to be updated\n\t\t * @return {Boolean}\n\t\t */\n\t\toptions = function(opts) {\n\t\t\tif (typeof (opts.isResponsive) === 'boolean') {\n\t\t\t\t_options.isResponsive = opts.isResponsive;\n\t\t\t}\n\n\t\t\tif (typeof (opts.baseFontSize) === 'number') {\n\t\t\t\t_options.baseFontSize = opts.baseFontSize;\n\t\t\t}\n\n\t\t\tif (typeof (opts.breakpoints) === 'object' && opts.breakpoints.length > 0) {\n\t\t\t\tvar isValid = true,\n\t\t\t\t\tbps = opts.breakpoints;\n\n\t\t\t\t// loop through the breakpoints to check validity\n\t\t\t\tfor (var i = 0, len = bps.length; i < len; i += 1) {\n\t\t\t\t\tif ((bps[i].hasOwnProperty('name') && bps[i].hasOwnProperty('px')) === false) {\n\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isValid) {\n\t\t\t\t\t_options.breakpoints = opts.breakpoints;\n\t\t\t\t\t_initBreakpoints();\n\t\t\t\t} else {\n\t\t\t\t\tvoid 0;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tgetHeight: getHeight,\n\t\t\tis: is,\n\t\t\tisHeight: isHeight,\n\t\t\toptions: options\n\t\t};\n\t}());\n\n}());\n\n//! moment.js\n//! version : 2.13.0\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n!function(a,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=b():\"function\"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){\"use strict\";function a(){return fd.apply(null,arguments)}function b(a){fd=a}function c(a){return a instanceof Array||\"[object Array]\"===Object.prototype.toString.call(a)}function d(a){return a instanceof Date||\"[object Date]\"===Object.prototype.toString.call(a)}function e(a,b){var c,d=[];for(c=0;c0)for(c in hd)d=hd[c],e=b[d],m(e)||(a[d]=e);return a}function o(b){n(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),id===!1&&(id=!0,a.updateOffset(this),id=!1)}function p(a){return a instanceof o||null!=a&&null!=a._isAMomentObject}function q(a){return 0>a?Math.ceil(a):Math.floor(a)}function r(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=q(b)),c}function s(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&r(a[d])!==r(b[d]))&&g++;return g+f}function t(b){a.suppressDeprecationWarnings===!1&&\"undefined\"!=typeof console&&console.warn&&void 0}function u(b,c){var d=!0;return g(function(){return null!=a.deprecationHandler&&a.deprecationHandler(null,b),d&&(t(b+\"\\nArguments: \"+Array.prototype.slice.call(arguments).join(\", \")+\"\\n\"+(new Error).stack),d=!1),c.apply(this,arguments)},c)}function v(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),jd[b]||(t(c),jd[b]=!0)}function w(a){return a instanceof Function||\"[object Function]\"===Object.prototype.toString.call(a)}function x(a){return\"[object Object]\"===Object.prototype.toString.call(a)}function y(a){var b,c;for(c in a)b=a[c],w(b)?this[c]=b:this[\"_\"+c]=b;this._config=a,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+\"|\"+/\\d{1,2}/.source)}function z(a,b){var c,d=g({},a);for(c in b)f(b,c)&&(x(a[c])&&x(b[c])?(d[c]={},g(d[c],a[c]),g(d[c],b[c])):null!=b[c]?d[c]=b[c]:delete d[c]);return d}function A(a){null!=a&&this.set(a)}function B(a){return a?a.toLowerCase().replace(\"_\",\"-\"):a}function C(a){for(var b,c,d,e,f=0;f0;){if(d=D(e.slice(0,b).join(\"-\")))return d;if(c&&c.length>=b&&s(e,c,!0)>=b-1)break;b--}f++}return null}function D(a){var b=null;if(!nd[a]&&\"undefined\"!=typeof module&&module&&module.exports)try{b=ld._abbr,require(\"./locale/\"+a),E(b)}catch(c){}return nd[a]}function E(a,b){var c;return a&&(c=m(b)?H(a):F(a,b),c&&(ld=c)),ld._abbr}function F(a,b){return null!==b?(b.abbr=a,null!=nd[a]?(v(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale\"),b=z(nd[a]._config,b)):null!=b.parentLocale&&(null!=nd[b.parentLocale]?b=z(nd[b.parentLocale]._config,b):v(\"parentLocaleUndefined\",\"specified parentLocale is not defined yet\")),nd[a]=new A(b),E(a),nd[a]):(delete nd[a],null)}function G(a,b){if(null!=b){var c;null!=nd[a]&&(b=z(nd[a]._config,b)),c=new A(b),c.parentLocale=nd[a],nd[a]=c,E(a)}else null!=nd[a]&&(null!=nd[a].parentLocale?nd[a]=nd[a].parentLocale:null!=nd[a]&&delete nd[a]);return nd[a]}function H(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return ld;if(!c(a)){if(b=D(a))return b;a=[a]}return C(a)}function I(){return kd(nd)}function J(a,b){var c=a.toLowerCase();od[c]=od[c+\"s\"]=od[b]=a}function K(a){return\"string\"==typeof a?od[a]||od[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)f(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(b,c){return function(d){return null!=d?(O(this,b,d),a.updateOffset(this,c),this):N(this,b)}}function N(a,b){return a.isValid()?a._d[\"get\"+(a._isUTC?\"UTC\":\"\")+b]():NaN}function O(a,b,c){a.isValid()&&a._d[\"set\"+(a._isUTC?\"UTC\":\"\")+b](c)}function P(a,b){var c;if(\"object\"==typeof a)for(c in a)this.set(c,a[c]);else if(a=K(a),w(this[a]))return this[a](b);return this}function Q(a,b,c){var d=\"\"+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function R(a,b,c,d){var e=d;\"string\"==typeof d&&(e=function(){return this[d]()}),a&&(sd[a]=e),b&&(sd[b[0]]=function(){return Q(e.apply(this,arguments),b[1],b[2])}),c&&(sd[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function S(a){return a.match(/\\[[\\s\\S]/)?a.replace(/^\\[|\\]$/g,\"\"):a.replace(/\\\\/g,\"\")}function T(a){var b,c,d=a.match(pd);for(b=0,c=d.length;c>b;b++)sd[d[b]]?d[b]=sd[d[b]]:d[b]=S(d[b]);return function(b){var e,f=\"\";for(e=0;c>e;e++)f+=d[e]instanceof Function?d[e].call(b,a):d[e];return f}}function U(a,b){return a.isValid()?(b=V(b,a.localeData()),rd[b]=rd[b]||T(b),rd[b](a)):a.localeData().invalidDate()}function V(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(qd.lastIndex=0;d>=0&&qd.test(a);)a=a.replace(qd,c),qd.lastIndex=0,d-=1;return a}function W(a,b,c){Kd[a]=w(b)?b:function(a,d){return a&&c?c:b}}function X(a,b){return f(Kd,a)?Kd[a](b._strict,b._locale):new RegExp(Y(a))}function Y(a){return Z(a.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function Z(a){return a.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function $(a,b){var c,d=b;for(\"string\"==typeof a&&(a=[a]),\"number\"==typeof b&&(d=function(a,c){c[b]=r(a)}),c=0;cd;++d)f=h([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,\"\").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,\"\").toLocaleLowerCase();return c?\"MMM\"===b?(e=md.call(this._shortMonthsParse,g),-1!==e?e:null):(e=md.call(this._longMonthsParse,g),-1!==e?e:null):\"MMM\"===b?(e=md.call(this._shortMonthsParse,g),-1!==e?e:(e=md.call(this._longMonthsParse,g),-1!==e?e:null)):(e=md.call(this._longMonthsParse,g),-1!==e?e:(e=md.call(this._shortMonthsParse,g),-1!==e?e:null))}function fa(a,b,c){var d,e,f;if(this._monthsParseExact)return ea.call(this,a,b,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;12>d;d++){if(e=h([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp(\"^\"+this.months(e,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[d]=new RegExp(\"^\"+this.monthsShort(e,\"\").replace(\".\",\"\")+\"$\",\"i\")),c||this._monthsParse[d]||(f=\"^\"+this.months(e,\"\")+\"|^\"+this.monthsShort(e,\"\"),this._monthsParse[d]=new RegExp(f.replace(\".\",\"\"),\"i\")),c&&\"MMMM\"===b&&this._longMonthsParse[d].test(a))return d;if(c&&\"MMM\"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function ga(a,b){var c;if(!a.isValid())return a;if(\"string\"==typeof b)if(/^\\d+$/.test(b))b=r(b);else if(b=a.localeData().monthsParse(b),\"number\"!=typeof b)return a;return c=Math.min(a.date(),ba(a.year(),b)),a._d[\"set\"+(a._isUTC?\"UTC\":\"\")+\"Month\"](b,c),a}function ha(b){return null!=b?(ga(this,b),a.updateOffset(this,!0),this):N(this,\"Month\")}function ia(){return ba(this.year(),this.month())}function ja(a){return this._monthsParseExact?(f(this,\"_monthsRegex\")||la.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex}function ka(a){return this._monthsParseExact?(f(this,\"_monthsRegex\")||la.call(this),a?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex}function la(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;12>b;b++)c=h([2e3,b]),d.push(this.monthsShort(c,\"\")),e.push(this.months(c,\"\")),f.push(this.months(c,\"\")),f.push(this.monthsShort(c,\"\"));for(d.sort(a),e.sort(a),f.sort(a),b=0;12>b;b++)d[b]=Z(d[b]),e[b]=Z(e[b]),f[b]=Z(f[b]);this._monthsRegex=new RegExp(\"^(\"+f.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+e.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+d.join(\"|\")+\")\",\"i\")}function ma(a){var b,c=a._a;return c&&-2===j(a).overflow&&(b=c[Nd]<0||c[Nd]>11?Nd:c[Od]<1||c[Od]>ba(c[Md],c[Nd])?Od:c[Pd]<0||c[Pd]>24||24===c[Pd]&&(0!==c[Qd]||0!==c[Rd]||0!==c[Sd])?Pd:c[Qd]<0||c[Qd]>59?Qd:c[Rd]<0||c[Rd]>59?Rd:c[Sd]<0||c[Sd]>999?Sd:-1,j(a)._overflowDayOfYear&&(Md>b||b>Od)&&(b=Od),j(a)._overflowWeeks&&-1===b&&(b=Td),j(a)._overflowWeekday&&-1===b&&(b=Ud),j(a).overflow=b),a}function na(a){var b,c,d,e,f,g,h=a._i,i=$d.exec(h)||_d.exec(h);if(i){for(j(a).iso=!0,b=0,c=be.length;c>b;b++)if(be[b][1].exec(i[1])){e=be[b][0],d=be[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=ce.length;c>b;b++)if(ce[b][1].exec(i[3])){f=(i[2]||\" \")+ce[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!ae.exec(i[4]))return void(a._isValid=!1);g=\"Z\"}a._f=e+(f||\"\")+(g||\"\"),Ca(a)}else a._isValid=!1}function oa(b){var c=de.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(na(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function pa(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 100>a&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function qa(a){var b=new Date(Date.UTC.apply(null,arguments));return 100>a&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function ra(a){return sa(a)?366:365}function sa(a){return a%4===0&&a%100!==0||a%400===0}function ta(){return sa(this.year())}function ua(a,b,c){var d=7+b-c,e=(7+qa(a,0,d).getUTCDay()-b)%7;return-e+d-1}function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return 0>=j?(f=a-1,g=ra(f)+j):j>ra(a)?(f=a+1,g=j-ra(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return 1>g?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(ra(a)-d+e)/7}function ya(a,b,c){return null!=a?a:null!=b?b:c}function za(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function Aa(a){var b,c,d,e,f=[];if(!a._d){for(d=za(a),a._w&&null==a._a[Od]&&null==a._a[Nd]&&Ba(a),a._dayOfYear&&(e=ya(a._a[Md],d[Md]),a._dayOfYear>ra(e)&&(j(a)._overflowDayOfYear=!0),c=qa(e,0,a._dayOfYear),a._a[Nd]=c.getUTCMonth(),a._a[Od]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[Pd]&&0===a._a[Qd]&&0===a._a[Rd]&&0===a._a[Sd]&&(a._nextDay=!0,a._a[Pd]=0),a._d=(a._useUTC?qa:pa).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[Pd]=24)}}function Ba(a){var b,c,d,e,f,g,h,i;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=ya(b.GG,a._a[Md],wa(Ka(),1,4).year),d=ya(b.W,1),e=ya(b.E,1),(1>e||e>7)&&(i=!0)):(f=a._locale._week.dow,g=a._locale._week.doy,c=ya(b.gg,a._a[Md],wa(Ka(),f,g).year),d=ya(b.w,1),null!=b.d?(e=b.d,(0>e||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f),1>d||d>xa(c,f,g)?j(a)._overflowWeeks=!0:null!=i?j(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[Md]=h.year,a._dayOfYear=h.dayOfYear)}function Ca(b){if(b._f===a.ISO_8601)return void na(b);b._a=[],j(b).empty=!0;var c,d,e,f,g,h=\"\"+b._i,i=h.length,k=0;for(e=V(b._f,b._locale).match(pd)||[],c=0;c0&&j(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),k+=d.length),sd[f]?(d?j(b).empty=!1:j(b).unusedTokens.push(f),aa(f,d,b)):b._strict&&!d&&j(b).unusedTokens.push(f);j(b).charsLeftOver=i-k,h.length>0&&j(b).unusedInput.push(h),j(b).bigHour===!0&&b._a[Pd]<=12&&b._a[Pd]>0&&(j(b).bigHour=void 0),j(b).parsedDateParts=b._a.slice(0),j(b).meridiem=b._meridiem,b._a[Pd]=Da(b._locale,b._a[Pd],b._meridiem),Aa(b),ma(b)}function Da(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function Ea(a){var b,c,d,e,f;if(0===a._f.length)return j(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;ef)&&(d=f,c=b));g(a,c||b)}function Fa(a){if(!a._d){var b=L(a._i);a._a=e([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),Aa(a)}}function Ga(a){var b=new o(ma(Ha(a)));return b._nextDay&&(b.add(1,\"d\"),b._nextDay=void 0),b}function Ha(a){var b=a._i,e=a._f;return a._locale=a._locale||H(a._l),null===b||void 0===e&&\"\"===b?l({nullInput:!0}):(\"string\"==typeof b&&(a._i=b=a._locale.preparse(b)),p(b)?new o(ma(b)):(c(e)?Ea(a):e?Ca(a):d(b)?a._d=b:Ia(a),k(a)||(a._d=null),a))}function Ia(b){var f=b._i;void 0===f?b._d=new Date(a.now()):d(f)?b._d=new Date(f.valueOf()):\"string\"==typeof f?oa(b):c(f)?(b._a=e(f.slice(0),function(a){return parseInt(a,10)}),Aa(b)):\"object\"==typeof f?Fa(b):\"number\"==typeof f?b._d=new Date(f):a.createFromInputFallback(b)}function Ja(a,b,c,d,e){var f={};return\"boolean\"==typeof c&&(d=c,c=void 0),f._isAMomentObject=!0,f._useUTC=f._isUTC=e,f._l=c,f._i=a,f._f=b,f._strict=d,Ga(f)}function Ka(a,b,c,d){return Ja(a,b,c,d,!1)}function La(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return Ka();for(d=b[0],e=1;ea&&(a=-a,c=\"-\"),c+Q(~~(a/60),2)+b+Q(~~a%60,2)})}function Ra(a,b){var c=(b||\"\").match(a)||[],d=c[c.length-1]||[],e=(d+\"\").match(ie)||[\"-\",0,0],f=+(60*e[1])+r(e[2]);return\"+\"===e[0]?f:-f}function Sa(b,c){var e,f;return c._isUTC?(e=c.clone(),f=(p(b)||d(b)?b.valueOf():Ka(b).valueOf())-e.valueOf(),e._d.setTime(e._d.valueOf()+f),a.updateOffset(e,!1),e):Ka(b).local()}function Ta(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Ua(b,c){var d,e=this._offset||0;return this.isValid()?null!=b?(\"string\"==typeof b?b=Ra(Hd,b):Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Ta(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,\"m\"),e!==b&&(!c||this._changeInProgress?jb(this,db(b-e,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Ta(this):null!=b?this:NaN}function Va(a,b){return null!=a?(\"string\"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Wa(a){return this.utcOffset(0,a)}function Xa(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Ta(this),\"m\")),this}function Ya(){return this._tzm?this.utcOffset(this._tzm):\"string\"==typeof this._i&&this.utcOffset(Ra(Gd,this._i)),this}function Za(a){return this.isValid()?(a=a?Ka(a).utcOffset():0,(this.utcOffset()-a)%60===0):!1}function $a(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function _a(){if(!m(this._isDSTShifted))return this._isDSTShifted;var a={};if(n(a,this),a=Ha(a),a._a){var b=a._isUTC?h(a._a):Ka(a._a);this._isDSTShifted=this.isValid()&&s(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function ab(){return this.isValid()?!this._isUTC:!1}function bb(){return this.isValid()?this._isUTC:!1}function cb(){return this.isValid()?this._isUTC&&0===this._offset:!1}function db(a,b){var c,d,e,g=a,h=null;return Pa(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:\"number\"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=je.exec(a))?(c=\"-\"===h[1]?-1:1,g={y:0,d:r(h[Od])*c,h:r(h[Pd])*c,m:r(h[Qd])*c,s:r(h[Rd])*c,ms:r(h[Sd])*c}):(h=ke.exec(a))?(c=\"-\"===h[1]?-1:1,g={y:eb(h[2],c),M:eb(h[3],c),w:eb(h[4],c),d:eb(h[5],c),h:eb(h[6],c),m:eb(h[7],c),s:eb(h[8],c)}):null==g?g={}:\"object\"==typeof g&&(\"from\"in g||\"to\"in g)&&(e=gb(Ka(g.from),Ka(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new Oa(g),Pa(a)&&f(a,\"_locale\")&&(d._locale=a._locale),d}function eb(a,b){var c=a&&parseFloat(a.replace(\",\",\".\"));return(isNaN(c)?0:c)*b}function fb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,\"M\").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,\"M\"),c}function gb(a,b){var c;return a.isValid()&&b.isValid()?(b=Sa(b,a),a.isBefore(b)?c=fb(a,b):(c=fb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function hb(a){return 0>a?-1*Math.round(-1*a):Math.round(a)}function ib(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(v(b,\"moment().\"+b+\"(period, number) is deprecated. Please use moment().\"+b+\"(number, period).\"),f=c,c=d,d=f),c=\"string\"==typeof c?+c:c,e=db(c,d),jb(this,e,a),this}}function jb(b,c,d,e){var f=c._milliseconds,g=hb(c._days),h=hb(c._months);b.isValid()&&(e=null==e?!0:e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&O(b,\"Date\",N(b,\"Date\")+g*d),h&&ga(b,N(b,\"Month\")+h*d),e&&a.updateOffset(b,g||h))}function kb(a,b){var c=a||Ka(),d=Sa(c,this).startOf(\"day\"),e=this.diff(d,\"days\",!0),f=-6>e?\"sameElse\":-1>e?\"lastWeek\":0>e?\"lastDay\":1>e?\"sameDay\":2>e?\"nextDay\":7>e?\"nextWeek\":\"sameElse\",g=b&&(w(b[f])?b[f]():b[f]);return this.format(g||this.localeData().calendar(f,this,Ka(c)))}function lb(){return new o(this)}function mb(a,b){var c=p(a)?a:Ka(a);return this.isValid()&&c.isValid()?(b=K(m(b)?\"millisecond\":b),\"millisecond\"===b?this.valueOf()>c.valueOf():c.valueOf()b-f?(c=a.clone().add(e-1,\"months\"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,\"months\"),d=(b-f)/(c-f)),-(e+d)||0}function ub(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function vb(){var a=this.clone().utc();return 0f&&(b=f),Vb.call(this,a,b,c,d,e))}function Vb(a,b,c,d,e){var f=va(a,b,c,d,e),g=qa(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Wb(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Xb(a){return wa(a,this._week.dow,this._week.doy).week}function Yb(){return this._week.dow}function Zb(){return this._week.doy}function $b(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),\"d\")}function _b(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),\"d\")}function ac(a,b){return\"string\"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),\"number\"==typeof a?a:null):parseInt(a,10)}function bc(a,b){return c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?\"format\":\"standalone\"][a.day()]}function cc(a){return this._weekdaysShort[a.day()]}function dc(a){return this._weekdaysMin[a.day()]}function ec(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;7>d;++d)f=h([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,\"\").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,\"\").toLocaleLowerCase();return c?\"dddd\"===b?(e=md.call(this._weekdaysParse,g),-1!==e?e:null):\"ddd\"===b?(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:null):(e=md.call(this._minWeekdaysParse,g),-1!==e?e:null):\"dddd\"===b?(e=md.call(this._weekdaysParse,g),-1!==e?e:(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:(e=md.call(this._minWeekdaysParse,g),-1!==e?e:null))):\"ddd\"===b?(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:(e=md.call(this._weekdaysParse,g),-1!==e?e:(e=md.call(this._minWeekdaysParse,g),-1!==e?e:null))):(e=md.call(this._minWeekdaysParse,g),-1!==e?e:(e=md.call(this._weekdaysParse,g),-1!==e?e:(e=md.call(this._shortWeekdaysParse,g),-1!==e?e:null)))}function fc(a,b,c){var d,e,f;if(this._weekdaysParseExact)return ec.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;7>d;d++){if(e=h([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp(\"^\"+this.weekdays(e,\"\").replace(\".\",\".?\")+\"$\",\"i\"),this._shortWeekdaysParse[d]=new RegExp(\"^\"+this.weekdaysShort(e,\"\").replace(\".\",\".?\")+\"$\",\"i\"),this._minWeekdaysParse[d]=new RegExp(\"^\"+this.weekdaysMin(e,\"\").replace(\".\",\".?\")+\"$\",\"i\")),this._weekdaysParse[d]||(f=\"^\"+this.weekdays(e,\"\")+\"|^\"+this.weekdaysShort(e,\"\")+\"|^\"+this.weekdaysMin(e,\"\"),this._weekdaysParse[d]=new RegExp(f.replace(\".\",\"\"),\"i\")),c&&\"dddd\"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&\"ddd\"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&\"dd\"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function gc(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=ac(a,this.localeData()),this.add(a-b,\"d\")):b}function hc(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,\"d\")}function ic(a){return this.isValid()?null==a?this.day()||7:this.day(this.day()%7?a:a-7):null!=a?this:NaN}function jc(a){return this._weekdaysParseExact?(f(this,\"_weekdaysRegex\")||mc.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex}function kc(a){return this._weekdaysParseExact?(f(this,\"_weekdaysRegex\")||mc.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex}function lc(a){return this._weekdaysParseExact?(f(this,\"_weekdaysRegex\")||mc.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex}function mc(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],i=[],j=[],k=[];for(b=0;7>b;b++)c=h([2e3,1]).day(b),d=this.weekdaysMin(c,\"\"),e=this.weekdaysShort(c,\"\"),f=this.weekdays(c,\"\"),g.push(d),i.push(e),j.push(f),k.push(d),k.push(e),k.push(f);for(g.sort(a),i.sort(a),j.sort(a),k.sort(a),b=0;7>b;b++)i[b]=Z(i[b]),j[b]=Z(j[b]),k[b]=Z(k[b]);this._weekdaysRegex=new RegExp(\"^(\"+k.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+j.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+g.join(\"|\")+\")\",\"i\")}function nc(a){var b=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==a?b:this.add(a-b,\"d\")}function oc(){return this.hours()%12||12}function pc(){return this.hours()||24}function qc(a,b){R(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function rc(a,b){return b._meridiemParse}function sc(a){return\"p\"===(a+\"\").toLowerCase().charAt(0)}function tc(a,b,c){return a>11?c?\"pm\":\"PM\":c?\"am\":\"AM\"}function uc(a,b){b[Sd]=r(1e3*(\"0.\"+a))}function vc(){return this._isUTC?\"UTC\":\"\"}function wc(){return this._isUTC?\"Coordinated Universal Time\":\"\"}function xc(a){return Ka(1e3*a)}function yc(){return Ka.apply(null,arguments).parseZone()}function zc(a,b,c){var d=this._calendar[a];return w(d)?d.call(b,c):d}function Ac(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function Bc(){return this._invalidDate}function Cc(a){return this._ordinal.replace(\"%d\",a)}function Dc(a){return a}function Ec(a,b,c,d){var e=this._relativeTime[c];return w(e)?e(a,b,c,d):e.replace(/%d/i,a)}function Fc(a,b){var c=this._relativeTime[a>0?\"future\":\"past\"];return w(c)?c(b):c.replace(/%s/i,b)}function Gc(a,b,c,d){var e=H(),f=h().set(d,b);return e[c](f,a)}function Hc(a,b,c){if(\"number\"==typeof a&&(b=a,a=void 0),a=a||\"\",null!=b)return Gc(a,b,c,\"month\");var d,e=[];for(d=0;12>d;d++)e[d]=Gc(a,d,c,\"month\");return e}function Ic(a,b,c,d){\"boolean\"==typeof a?(\"number\"==typeof b&&(c=b,b=void 0),b=b||\"\"):(b=a,c=b,a=!1,\"number\"==typeof b&&(c=b,b=void 0),b=b||\"\");var e=H(),f=a?e._week.dow:0;if(null!=c)return Gc(b,(c+f)%7,d,\"day\");var g,h=[];for(g=0;7>g;g++)h[g]=Gc(b,(g+f)%7,d,\"day\");return h}function Jc(a,b){return Hc(a,b,\"months\")}function Kc(a,b){return Hc(a,b,\"monthsShort\")}function Lc(a,b,c){return Ic(a,b,c,\"weekdays\")}function Mc(a,b,c){return Ic(a,b,c,\"weekdaysShort\")}function Nc(a,b,c){return Ic(a,b,c,\"weekdaysMin\")}function Oc(){var a=this._data;return this._milliseconds=Le(this._milliseconds),this._days=Le(this._days),this._months=Le(this._months),a.milliseconds=Le(a.milliseconds),a.seconds=Le(a.seconds),a.minutes=Le(a.minutes),a.hours=Le(a.hours),a.months=Le(a.months),a.years=Le(a.years),this}function Pc(a,b,c,d){var e=db(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function Qc(a,b){return Pc(this,a,b,1)}function Rc(a,b){return Pc(this,a,b,-1)}function Sc(a){return 0>a?Math.floor(a):Math.ceil(a)}function Tc(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||0>=f&&0>=g&&0>=h||(f+=864e5*Sc(Vc(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=q(f/1e3),i.seconds=a%60,b=q(a/60),i.minutes=b%60,c=q(b/60),i.hours=c%24,g+=q(c/24),e=q(Uc(g)),h+=e,g-=Sc(Vc(e)),d=q(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function Uc(a){return 4800*a/146097}function Vc(a){return 146097*a/4800}function Wc(a){var b,c,d=this._milliseconds;if(a=K(a),\"month\"===a||\"year\"===a)return b=this._days+d/864e5,c=this._months+Uc(b),\"month\"===a?c:c/12;switch(b=this._days+Math.round(Vc(this._months)),a){case\"week\":return b/7+d/6048e5;case\"day\":return b+d/864e5;case\"hour\":return 24*b+d/36e5;case\"minute\":return 1440*b+d/6e4;case\"second\":return 86400*b+d/1e3;case\"millisecond\":return Math.floor(864e5*b)+d;default:throw new Error(\"Unknown unit \"+a)}}function Xc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*r(this._months/12)}function Yc(a){return function(){return this.as(a)}}function Zc(a){\nreturn a=K(a),this[a+\"s\"]()}function $c(a){return function(){return this._data[a]}}function _c(){return q(this.days()/7)}function ad(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function bd(a,b,c){var d=db(a).abs(),e=_e(d.as(\"s\")),f=_e(d.as(\"m\")),g=_e(d.as(\"h\")),h=_e(d.as(\"d\")),i=_e(d.as(\"M\")),j=_e(d.as(\"y\")),k=e=f&&[\"m\"]||f=g&&[\"h\"]||g=h&&[\"d\"]||h=i&&[\"M\"]||i=j&&[\"y\"]||[\"yy\",j];return k[2]=b,k[3]=+a>0,k[4]=c,ad.apply(null,k)}function cd(a,b){return void 0===af[a]?!1:void 0===b?af[a]:(af[a]=b,!0)}function dd(a){var b=this.localeData(),c=bd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function ed(){var a,b,c,d=bf(this._milliseconds)/1e3,e=bf(this._days),f=bf(this._months);a=q(d/60),b=q(a/60),d%=60,a%=60,c=q(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(0>m?\"-\":\"\")+\"P\"+(g?g+\"Y\":\"\")+(h?h+\"M\":\"\")+(i?i+\"D\":\"\")+(j||k||l?\"T\":\"\")+(j?j+\"H\":\"\")+(k?k+\"M\":\"\")+(l?l+\"S\":\"\"):\"P0D\"}var fd,gd;gd=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;c>d;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var hd=a.momentProperties=[],id=!1,jd={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var kd;kd=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)f(a,b)&&c.push(b);return c};var ld,md,nd={},od={},pd=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,qd=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,rd={},sd={},td=/\\d/,ud=/\\d\\d/,vd=/\\d{3}/,wd=/\\d{4}/,xd=/[+-]?\\d{6}/,yd=/\\d\\d?/,zd=/\\d\\d\\d\\d?/,Ad=/\\d\\d\\d\\d\\d\\d?/,Bd=/\\d{1,3}/,Cd=/\\d{1,4}/,Dd=/[+-]?\\d{1,6}/,Ed=/\\d+/,Fd=/[+-]?\\d+/,Gd=/Z|[+-]\\d\\d:?\\d\\d/gi,Hd=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,Id=/[+-]?\\d+(\\.\\d{1,3})?/,Jd=/[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i,Kd={},Ld={},Md=0,Nd=1,Od=2,Pd=3,Qd=4,Rd=5,Sd=6,Td=7,Ud=8;md=Array.prototype.indexOf?Array.prototype.indexOf:function(a){var b;for(b=0;b=a?\"\"+a:\"+\"+a}),R(0,[\"YY\",2],0,function(){return this.year()%100}),R(0,[\"YYYY\",4],0,\"year\"),R(0,[\"YYYYY\",5],0,\"year\"),R(0,[\"YYYYYY\",6,!0],0,\"year\"),J(\"year\",\"y\"),W(\"Y\",Fd),W(\"YY\",yd,ud),W(\"YYYY\",Cd,wd),W(\"YYYYY\",Dd,xd),W(\"YYYYYY\",Dd,xd),$([\"YYYYY\",\"YYYYYY\"],Md),$(\"YYYY\",function(b,c){c[Md]=2===b.length?a.parseTwoDigitYear(b):r(b)}),$(\"YY\",function(b,c){c[Md]=a.parseTwoDigitYear(b)}),$(\"Y\",function(a,b){b[Md]=parseInt(a,10)}),a.parseTwoDigitYear=function(a){return r(a)+(r(a)>68?1900:2e3)};var ee=M(\"FullYear\",!0);a.ISO_8601=function(){};var fe=u(\"moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548\",function(){var a=Ka.apply(null,arguments);return this.isValid()&&a.isValid()?this>a?this:a:l()}),ge=u(\"moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548\",function(){var a=Ka.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:l()}),he=function(){return Date.now?Date.now():+new Date};Qa(\"Z\",\":\"),Qa(\"ZZ\",\"\"),W(\"Z\",Hd),W(\"ZZ\",Hd),$([\"Z\",\"ZZ\"],function(a,b,c){c._useUTC=!0,c._tzm=Ra(Hd,a)});var ie=/([\\+\\-]|\\d\\d)/gi;a.updateOffset=function(){};var je=/^(\\-)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?\\d*)?$/,ke=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;db.fn=Oa.prototype;var le=ib(1,\"add\"),me=ib(-1,\"subtract\");a.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",a.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var ne=u(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(a){return void 0===a?this.localeData():this.locale(a)});R(0,[\"gg\",2],0,function(){return this.weekYear()%100}),R(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100}),Pb(\"gggg\",\"weekYear\"),Pb(\"ggggg\",\"weekYear\"),Pb(\"GGGG\",\"isoWeekYear\"),Pb(\"GGGGG\",\"isoWeekYear\"),J(\"weekYear\",\"gg\"),J(\"isoWeekYear\",\"GG\"),W(\"G\",Fd),W(\"g\",Fd),W(\"GG\",yd,ud),W(\"gg\",yd,ud),W(\"GGGG\",Cd,wd),W(\"gggg\",Cd,wd),W(\"GGGGG\",Dd,xd),W(\"ggggg\",Dd,xd),_([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(a,b,c,d){b[d.substr(0,2)]=r(a)}),_([\"gg\",\"GG\"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),R(\"Q\",0,\"Qo\",\"quarter\"),J(\"quarter\",\"Q\"),W(\"Q\",td),$(\"Q\",function(a,b){b[Nd]=3*(r(a)-1)}),R(\"w\",[\"ww\",2],\"wo\",\"week\"),R(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),J(\"week\",\"w\"),J(\"isoWeek\",\"W\"),W(\"w\",yd),W(\"ww\",yd,ud),W(\"W\",yd),W(\"WW\",yd,ud),_([\"w\",\"ww\",\"W\",\"WW\"],function(a,b,c,d){b[d.substr(0,1)]=r(a)});var oe={dow:0,doy:6};R(\"D\",[\"DD\",2],\"Do\",\"date\"),J(\"date\",\"D\"),W(\"D\",yd),W(\"DD\",yd,ud),W(\"Do\",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),$([\"D\",\"DD\"],Od),$(\"Do\",function(a,b){b[Od]=r(a.match(yd)[0],10)});var pe=M(\"Date\",!0);R(\"d\",0,\"do\",\"day\"),R(\"dd\",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),R(\"ddd\",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),R(\"dddd\",0,0,function(a){return this.localeData().weekdays(this,a)}),R(\"e\",0,0,\"weekday\"),R(\"E\",0,0,\"isoWeekday\"),J(\"day\",\"d\"),J(\"weekday\",\"e\"),J(\"isoWeekday\",\"E\"),W(\"d\",yd),W(\"e\",yd),W(\"E\",yd),W(\"dd\",function(a,b){return b.weekdaysMinRegex(a)}),W(\"ddd\",function(a,b){return b.weekdaysShortRegex(a)}),W(\"dddd\",function(a,b){return b.weekdaysRegex(a)}),_([\"dd\",\"ddd\",\"dddd\"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);null!=e?b.d=e:j(c).invalidWeekday=a}),_([\"d\",\"e\",\"E\"],function(a,b,c,d){b[d]=r(a)});var qe=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),re=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),se=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),te=Jd,ue=Jd,ve=Jd;R(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),J(\"dayOfYear\",\"DDD\"),W(\"DDD\",Bd),W(\"DDDD\",vd),$([\"DDD\",\"DDDD\"],function(a,b,c){c._dayOfYear=r(a)}),R(\"H\",[\"HH\",2],0,\"hour\"),R(\"h\",[\"hh\",2],0,oc),R(\"k\",[\"kk\",2],0,pc),R(\"hmm\",0,0,function(){return\"\"+oc.apply(this)+Q(this.minutes(),2)}),R(\"hmmss\",0,0,function(){return\"\"+oc.apply(this)+Q(this.minutes(),2)+Q(this.seconds(),2)}),R(\"Hmm\",0,0,function(){return\"\"+this.hours()+Q(this.minutes(),2)}),R(\"Hmmss\",0,0,function(){return\"\"+this.hours()+Q(this.minutes(),2)+Q(this.seconds(),2)}),qc(\"a\",!0),qc(\"A\",!1),J(\"hour\",\"h\"),W(\"a\",rc),W(\"A\",rc),W(\"H\",yd),W(\"h\",yd),W(\"HH\",yd,ud),W(\"hh\",yd,ud),W(\"hmm\",zd),W(\"hmmss\",Ad),W(\"Hmm\",zd),W(\"Hmmss\",Ad),$([\"H\",\"HH\"],Pd),$([\"a\",\"A\"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),$([\"h\",\"hh\"],function(a,b,c){b[Pd]=r(a),j(c).bigHour=!0}),$(\"hmm\",function(a,b,c){var d=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d)),j(c).bigHour=!0}),$(\"hmmss\",function(a,b,c){var d=a.length-4,e=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d,2)),b[Rd]=r(a.substr(e)),j(c).bigHour=!0}),$(\"Hmm\",function(a,b,c){var d=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d))}),$(\"Hmmss\",function(a,b,c){var d=a.length-4,e=a.length-2;b[Pd]=r(a.substr(0,d)),b[Qd]=r(a.substr(d,2)),b[Rd]=r(a.substr(e))});var we=/[ap]\\.?m?\\.?/i,xe=M(\"Hours\",!0);R(\"m\",[\"mm\",2],0,\"minute\"),J(\"minute\",\"m\"),W(\"m\",yd),W(\"mm\",yd,ud),$([\"m\",\"mm\"],Qd);var ye=M(\"Minutes\",!1);R(\"s\",[\"ss\",2],0,\"second\"),J(\"second\",\"s\"),W(\"s\",yd),W(\"ss\",yd,ud),$([\"s\",\"ss\"],Rd);var ze=M(\"Seconds\",!1);R(\"S\",0,0,function(){return~~(this.millisecond()/100)}),R(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),R(0,[\"SSS\",3],0,\"millisecond\"),R(0,[\"SSSS\",4],0,function(){return 10*this.millisecond()}),R(0,[\"SSSSS\",5],0,function(){return 100*this.millisecond()}),R(0,[\"SSSSSS\",6],0,function(){return 1e3*this.millisecond()}),R(0,[\"SSSSSSS\",7],0,function(){return 1e4*this.millisecond()}),R(0,[\"SSSSSSSS\",8],0,function(){return 1e5*this.millisecond()}),R(0,[\"SSSSSSSSS\",9],0,function(){return 1e6*this.millisecond()}),J(\"millisecond\",\"ms\"),W(\"S\",Bd,td),W(\"SS\",Bd,ud),W(\"SSS\",Bd,vd);var Ae;for(Ae=\"SSSS\";Ae.length<=9;Ae+=\"S\")W(Ae,Ed);for(Ae=\"S\";Ae.length<=9;Ae+=\"S\")$(Ae,uc);var Be=M(\"Milliseconds\",!1);R(\"z\",0,0,\"zoneAbbr\"),R(\"zz\",0,0,\"zoneName\");var Ce=o.prototype;Ce.add=le,Ce.calendar=kb,Ce.clone=lb,Ce.diff=sb,Ce.endOf=Eb,Ce.format=wb,Ce.from=xb,Ce.fromNow=yb,Ce.to=zb,Ce.toNow=Ab,Ce.get=P,Ce.invalidAt=Nb,Ce.isAfter=mb,Ce.isBefore=nb,Ce.isBetween=ob,Ce.isSame=pb,Ce.isSameOrAfter=qb,Ce.isSameOrBefore=rb,Ce.isValid=Lb,Ce.lang=ne,Ce.locale=Bb,Ce.localeData=Cb,Ce.max=ge,Ce.min=fe,Ce.parsingFlags=Mb,Ce.set=P,Ce.startOf=Db,Ce.subtract=me,Ce.toArray=Ib,Ce.toObject=Jb,Ce.toDate=Hb,Ce.toISOString=vb,Ce.toJSON=Kb,Ce.toString=ub,Ce.unix=Gb,Ce.valueOf=Fb,Ce.creationData=Ob,Ce.year=ee,Ce.isLeapYear=ta,Ce.weekYear=Qb,Ce.isoWeekYear=Rb,Ce.quarter=Ce.quarters=Wb,Ce.month=ha,Ce.daysInMonth=ia,Ce.week=Ce.weeks=$b,Ce.isoWeek=Ce.isoWeeks=_b,Ce.weeksInYear=Tb,Ce.isoWeeksInYear=Sb,Ce.date=pe,Ce.day=Ce.days=gc,Ce.weekday=hc,Ce.isoWeekday=ic,Ce.dayOfYear=nc,Ce.hour=Ce.hours=xe,Ce.minute=Ce.minutes=ye,Ce.second=Ce.seconds=ze,Ce.millisecond=Ce.milliseconds=Be,Ce.utcOffset=Ua,Ce.utc=Wa,Ce.local=Xa,Ce.parseZone=Ya,Ce.hasAlignedHourOffset=Za,Ce.isDST=$a,Ce.isDSTShifted=_a,Ce.isLocal=ab,Ce.isUtcOffset=bb,Ce.isUtc=cb,Ce.isUTC=cb,Ce.zoneAbbr=vc,Ce.zoneName=wc,Ce.dates=u(\"dates accessor is deprecated. Use date instead.\",pe),Ce.months=u(\"months accessor is deprecated. Use month instead\",ha),Ce.years=u(\"years accessor is deprecated. Use year instead\",ee),Ce.zone=u(\"moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779\",Va);var De=Ce,Ee={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},Fe={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},Ge=\"Invalid date\",He=\"%d\",Ie=/\\d{1,2}/,Je={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},Ke=A.prototype;Ke._calendar=Ee,Ke.calendar=zc,Ke._longDateFormat=Fe,Ke.longDateFormat=Ac,Ke._invalidDate=Ge,Ke.invalidDate=Bc,Ke._ordinal=He,Ke.ordinal=Cc,Ke._ordinalParse=Ie,Ke.preparse=Dc,Ke.postformat=Dc,Ke._relativeTime=Je,Ke.relativeTime=Ec,Ke.pastFuture=Fc,Ke.set=y,Ke.months=ca,Ke._months=Wd,Ke.monthsShort=da,Ke._monthsShort=Xd,Ke.monthsParse=fa,Ke._monthsRegex=Zd,Ke.monthsRegex=ka,Ke._monthsShortRegex=Yd,Ke.monthsShortRegex=ja,Ke.week=Xb,Ke._week=oe,Ke.firstDayOfYear=Zb,Ke.firstDayOfWeek=Yb,Ke.weekdays=bc,Ke._weekdays=qe,Ke.weekdaysMin=dc,Ke._weekdaysMin=se,Ke.weekdaysShort=cc,Ke._weekdaysShort=re,Ke.weekdaysParse=fc,Ke._weekdaysRegex=te,Ke.weekdaysRegex=jc,Ke._weekdaysShortRegex=ue,Ke.weekdaysShortRegex=kc,Ke._weekdaysMinRegex=ve,Ke.weekdaysMinRegex=lc,Ke.isPM=sc,Ke._meridiemParse=we,Ke.meridiem=tc,E(\"en\",{ordinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===r(a%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\";return a+c}}),a.lang=u(\"moment.lang is deprecated. Use moment.locale instead.\",E),a.langData=u(\"moment.langData is deprecated. Use moment.localeData instead.\",H);var Le=Math.abs,Me=Yc(\"ms\"),Ne=Yc(\"s\"),Oe=Yc(\"m\"),Pe=Yc(\"h\"),Qe=Yc(\"d\"),Re=Yc(\"w\"),Se=Yc(\"M\"),Te=Yc(\"y\"),Ue=$c(\"milliseconds\"),Ve=$c(\"seconds\"),We=$c(\"minutes\"),Xe=$c(\"hours\"),Ye=$c(\"days\"),Ze=$c(\"months\"),$e=$c(\"years\"),_e=Math.round,af={s:45,m:45,h:22,d:26,M:11},bf=Math.abs,cf=Oa.prototype;cf.abs=Oc,cf.add=Qc,cf.subtract=Rc,cf.as=Wc,cf.asMilliseconds=Me,cf.asSeconds=Ne,cf.asMinutes=Oe,cf.asHours=Pe,cf.asDays=Qe,cf.asWeeks=Re,cf.asMonths=Se,cf.asYears=Te,cf.valueOf=Xc,cf._bubble=Tc,cf.get=Zc,cf.milliseconds=Ue,cf.seconds=Ve,cf.minutes=We,cf.hours=Xe,cf.days=Ye,cf.weeks=_c,cf.months=Ze,cf.years=$e,cf.humanize=dd,cf.toISOString=ed,cf.toString=ed,cf.toJSON=ed,cf.locale=Bb,cf.localeData=Cb,cf.toIsoString=u(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",ed),cf.lang=ne,R(\"X\",0,0,\"unix\"),R(\"x\",0,0,\"valueOf\"),W(\"x\",Fd),W(\"X\",Id),$(\"X\",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),$(\"x\",function(a,b,c){c._d=new Date(r(a))}),a.version=\"2.13.0\",b(Ka),a.fn=De,a.min=Ma,a.max=Na,a.now=he,a.utc=h,a.unix=xc,a.months=Jc,a.isDate=d,a.locale=E,a.invalid=l,a.duration=db,a.isMoment=p,a.weekdays=Lc,a.parseZone=yc,a.localeData=H,a.isDuration=Pa,a.monthsShort=Kc,a.weekdaysMin=Nc,a.defineLocale=F,a.updateLocale=G,a.locales=I,a.weekdaysShort=Mc,a.normalizeUnits=K,a.relativeTimeThreshold=cd,a.prototype=De;var df=a;return df});\n/**\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\n *\n * @version 0.9.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n!function(){\"use strict\";function t(t,i){i?(d[0]=d[16]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=d[9]=d[10]=d[11]=d[12]=d[13]=d[14]=d[15]=0,this.blocks=d):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],t?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=t}function i(i,r,s){var e,n=typeof i;if(\"string\"===n){var o,a=[],u=i.length,c=0;for(e=0;e>6,a[c++]=128|63&o):o<55296||o>=57344?(a[c++]=224|o>>12,a[c++]=128|o>>6&63,a[c++]=128|63&o):(o=65536+((1023&o)<<10|1023&i.charCodeAt(++e)),a[c++]=240|o>>18,a[c++]=128|o>>12&63,a[c++]=128|o>>6&63,a[c++]=128|63&o);i=a}else{if(\"object\"!==n)throw new Error(h);if(null===i)throw new Error(h);if(f&&i.constructor===ArrayBuffer)i=new Uint8Array(i);else if(!(Array.isArray(i)||f&&ArrayBuffer.isView(i)))throw new Error(h)}i.length>64&&(i=new t(r,!0).update(i).array());var y=[],p=[];for(e=0;e<64;++e){var l=i[e]||0;y[e]=92^l,p[e]=54^l}t.call(this,r,s),this.update(p),this.oKeyPad=y,this.inner=!0,this.sharedMemory=s}var h=\"input is invalid type\",r=\"object\"==typeof window,s=r?window:{};s.JS_SHA256_NO_WINDOW&&(r=!1);var e=!r&&\"object\"==typeof self,n=!s.JS_SHA256_NO_NODE_JS&&\"object\"==typeof process&&process.versions&&process.versions.node;n?s=global:e&&(s=self);var o=!s.JS_SHA256_NO_COMMON_JS&&\"object\"==typeof module&&module.exports,a=\"function\"==typeof define&&define.amd,f=!s.JS_SHA256_NO_ARRAY_BUFFER&&\"undefined\"!=typeof ArrayBuffer,u=\"0123456789abcdef\".split(\"\"),c=[-2147483648,8388608,32768,128],y=[24,16,8,0],p=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],l=[\"hex\",\"array\",\"digest\",\"arrayBuffer\"],d=[];!s.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(t){return\"[object Array]\"===Object.prototype.toString.call(t)}),!f||!s.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(t){return\"object\"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer});var A=function(i,h){return function(r){return new t(h,!0).update(r)[i]()}},w=function(i){var h=A(\"hex\",i);n&&(h=b(h,i)),h.create=function(){return new t(i)},h.update=function(t){return h.create().update(t)};for(var r=0;r>2]|=t[n]<>2]|=s<>2]|=(192|s>>6)<>2]|=(128|63&s)<=57344?(a[e>>2]|=(224|s>>12)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<>2]|=(240|s>>18)<>2]|=(128|s>>12&63)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<=64?(this.block=a[16],this.start=e-64,this.hash(),this.hashed=!0):this.start=e}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},t.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,i=this.lastByteIndex;t[16]=this.block,t[i>>2]|=c[3&i],this.block=t[16],i>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},t.prototype.hash=function(){var t,i,h,r,s,e,n,o,a,f=this.h0,u=this.h1,c=this.h2,y=this.h3,l=this.h4,d=this.h5,A=this.h6,w=this.h7,b=this.blocks;for(t=16;t<64;++t)i=((s=b[t-15])>>>7|s<<25)^(s>>>18|s<<14)^s>>>3,h=((s=b[t-2])>>>17|s<<15)^(s>>>19|s<<13)^s>>>10,b[t]=b[t-16]+i+b[t-7]+h<<0;for(a=u&c,t=0;t<64;t+=4)this.first?(this.is224?(e=300032,w=(s=b[0]-1413257819)-150054599<<0,y=s+24177077<<0):(e=704751109,w=(s=b[0]-210244248)-1521486534<<0,y=s+143694565<<0),this.first=!1):(i=(f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10),r=(e=f&u)^f&c^a,w=y+(s=w+(h=(l>>>6|l<<26)^(l>>>11|l<<21)^(l>>>25|l<<7))+(l&d^~l&A)+p[t]+b[t])<<0,y=s+(i+r)<<0),i=(y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10),r=(n=y&f)^y&u^e,A=c+(s=A+(h=(w>>>6|w<<26)^(w>>>11|w<<21)^(w>>>25|w<<7))+(w&l^~w&d)+p[t+1]+b[t+1])<<0,i=((c=s+(i+r)<<0)>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10),r=(o=c&y)^c&f^n,d=u+(s=d+(h=(A>>>6|A<<26)^(A>>>11|A<<21)^(A>>>25|A<<7))+(A&w^~A&l)+p[t+2]+b[t+2])<<0,i=((u=s+(i+r)<<0)>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),r=(a=u&c)^u&y^o,l=f+(s=l+(h=(d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&A^~d&w)+p[t+3]+b[t+3])<<0,f=s+(i+r)<<0;this.h0=this.h0+f<<0,this.h1=this.h1+u<<0,this.h2=this.h2+c<<0,this.h3=this.h3+y<<0,this.h4=this.h4+l<<0,this.h5=this.h5+d<<0,this.h6=this.h6+A<<0,this.h7=this.h7+w<<0},t.prototype.hex=function(){this.finalize();var t=this.h0,i=this.h1,h=this.h2,r=this.h3,s=this.h4,e=this.h5,n=this.h6,o=this.h7,a=u[t>>28&15]+u[t>>24&15]+u[t>>20&15]+u[t>>16&15]+u[t>>12&15]+u[t>>8&15]+u[t>>4&15]+u[15&t]+u[i>>28&15]+u[i>>24&15]+u[i>>20&15]+u[i>>16&15]+u[i>>12&15]+u[i>>8&15]+u[i>>4&15]+u[15&i]+u[h>>28&15]+u[h>>24&15]+u[h>>20&15]+u[h>>16&15]+u[h>>12&15]+u[h>>8&15]+u[h>>4&15]+u[15&h]+u[r>>28&15]+u[r>>24&15]+u[r>>20&15]+u[r>>16&15]+u[r>>12&15]+u[r>>8&15]+u[r>>4&15]+u[15&r]+u[s>>28&15]+u[s>>24&15]+u[s>>20&15]+u[s>>16&15]+u[s>>12&15]+u[s>>8&15]+u[s>>4&15]+u[15&s]+u[e>>28&15]+u[e>>24&15]+u[e>>20&15]+u[e>>16&15]+u[e>>12&15]+u[e>>8&15]+u[e>>4&15]+u[15&e]+u[n>>28&15]+u[n>>24&15]+u[n>>20&15]+u[n>>16&15]+u[n>>12&15]+u[n>>8&15]+u[n>>4&15]+u[15&n];return this.is224||(a+=u[o>>28&15]+u[o>>24&15]+u[o>>20&15]+u[o>>16&15]+u[o>>12&15]+u[o>>8&15]+u[o>>4&15]+u[15&o]),a},t.prototype.toString=t.prototype.hex,t.prototype.digest=function(){this.finalize();var t=this.h0,i=this.h1,h=this.h2,r=this.h3,s=this.h4,e=this.h5,n=this.h6,o=this.h7,a=[t>>24&255,t>>16&255,t>>8&255,255&t,i>>24&255,i>>16&255,i>>8&255,255&i,h>>24&255,h>>16&255,h>>8&255,255&h,r>>24&255,r>>16&255,r>>8&255,255&r,s>>24&255,s>>16&255,s>>8&255,255&s,e>>24&255,e>>16&255,e>>8&255,255&e,n>>24&255,n>>16&255,n>>8&255,255&n];return this.is224||a.push(o>>24&255,o>>16&255,o>>8&255,255&o),a},t.prototype.array=t.prototype.digest,t.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(this.is224?28:32),i=new DataView(t);return i.setUint32(0,this.h0),i.setUint32(4,this.h1),i.setUint32(8,this.h2),i.setUint32(12,this.h3),i.setUint32(16,this.h4),i.setUint32(20,this.h5),i.setUint32(24,this.h6),this.is224||i.setUint32(28,this.h7),t},i.prototype=new t,i.prototype.finalize=function(){if(t.prototype.finalize.call(this),this.inner){this.inner=!1;var i=this.array();t.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(i),t.prototype.finalize.call(this)}};var B=w();B.sha256=B,B.sha224=w(!0),B.sha256.hmac=_(),B.sha224.hmac=_(!0),o?module.exports=B:(s.sha256=B.sha256,s.sha224=B.sha224,a&&define(function(){return B}))}();\n!function(t,e){\"use strict\";\"object\"==typeof module&&module.exports?module.exports=e(require(\"moment\")):\"function\"==typeof define&&define.amd?define([\"moment\"],e):e(t.moment)}(this,function(r){\"use strict\";void 0===r.version&&r.default&&(r=r.default);var e,a={},i={},s={},c={},l={},t=(r&&\"string\"==typeof r.version||D(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\"),r.version.split(\".\")),n=+t[0],o=+t[1];function f(t){return 96= 2.6.0. You are using Moment.js \"+r.version+\". See momentjs.com\"),d.prototype={_set:function(t){this.name=t.name,this.abbrs=t.abbrs,this.untils=t.untils,this.offsets=t.offsets,this.population=t.population},_index:function(t){t=function(t,e){var n,o=e.length;if(t=e[o-2])return o-1;if(t>=e[o-1])return-1;for(var r=0,i=o-1;1= 2.9.0. You are using Moment.js \"+r.version+\".\"),r.defaultZone=t?S(t):null,r};t=r.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(t)?(t.push(\"_z\"),t.push(\"_a\")):t&&(t._z=null),r});\n!function(a,i){\"use strict\";\"object\"==typeof module&&module.exports?module.exports=i(require(\"moment\")):\"function\"==typeof define&&define.amd?define([\"moment\"],i):i(a.moment)}(this,function(o){\"use strict\";void 0===o.version&&o.default&&(o=o.default);var i,s={},c={},A={},u={},m={},a=(o&&\"string\"==typeof o.version||N(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\"),o.version.split(\".\")),e=+a[0],r=+a[1];function n(a){return 96= 2.6.0. You are using Moment.js \"+o.version+\". See momentjs.com\"),b.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){a=function(a,i){var e,r=i.length;if(a=i[r-2])return r-1;if(a>=i[r-1])return-1;for(var o=0,c=r-1;1= 2.9.0. You are using Moment.js \"+o.version+\".\"),o.defaultZone=a?S(a):null,o};a=o.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(a)?(a.push(\"_z\"),a.push(\"_a\")):a&&(a._z=null),k({version:\"2024a\",zones:[\"Africa/Abidjan|GMT|0|0||48e5\",\"Africa/Nairobi|EAT|-30|0||47e5\",\"Africa/Algiers|CET|-10|0||26e5\",\"Africa/Lagos|WAT|-10|0||17e6\",\"Africa/Maputo|CAT|-20|0||26e5\",\"Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6\",\"Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0|32e5\",\"Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6\",\"Africa/Johannesburg|SAST|-20|0||84e5\",\"Africa/Juba|EAT CAT|-30 -20|01|24nx0|\",\"Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5\",\"Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|\",\"Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5\",\"Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326\",\"America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4\",\"America/Santo_Domingo|AST|40|0||29e5\",\"America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4\",\"America/Fortaleza|-03|30|0||34e5\",\"America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5\",\"America/Panama|EST|50|0||15e5\",\"America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\",\"America/Bahia|-02 -03|20 30|01|1GCq0|27e5\",\"America/Managua|CST|60|0||22e5\",\"America/La_Paz|-04|40|0||19e5\",\"America/Lima|-05|50|0||11e6\",\"America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5\",\"America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5\",\"America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|MST MDT CST|70 60 60|01010101010101010101012|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\",\"America/Ciudad_Juarez|MST MDT CST|70 60 60|010101010101010101010120|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0|\",\"America/Phoenix|MST|70|0||42e5\",\"America/Whitehorse|PST PDT MST|80 70 70|0101010101010101012|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6\",\"America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4\",\"America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6\",\"America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4\",\"America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3\",\"America/Grand_Turk|EST EDT AST|50 40 40|010101021010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2\",\"America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5\",\"America/Mazatlan|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4\",\"America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2\",\"America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2\",\"America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Noronha|-02|20|0||30e2\",\"America/Ojinaga|MST MDT CST|70 60 60|01010101010101010101012|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0|23e3\",\"America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5\",\"Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|62e5\",\"America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4\",\"America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4\",\"Antarctica/Casey|+11 +08|-b0 -80|0101010101010|1GAF0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1|10\",\"Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70\",\"Pacific/Port_Moresby|+10|-a0|0||25e4\",\"Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Asia/Tashkent|+05|-50|0||23e5\",\"Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\",\"Asia/Baghdad|+03|-30|0||66e5\",\"Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40\",\"Asia/Bangkok|+07|-70|0||15e6\",\"Asia/Dhaka|+06|-60|0||16e6\",\"Asia/Amman|EET EEST +03|-20 -30 -30|010101010101010101012|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5\",\"Asia/Kamchatka|+12|-c0|0||18e4\",\"Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0|\",\"Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5\",\"Asia/Kuala_Lumpur|+08|-80|0||71e5\",\"Asia/Kolkata|IST|-5u|0||15e6\",\"Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4\",\"Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Shanghai|CST|-80|0||23e6\",\"Asia/Colombo|+0530|-5u|0||22e5\",\"Asia/Damascus|EET EEST +03|-20 -30 -30|01010101010101010101012|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|+09|-90|0||19e4\",\"Asia/Dubai|+04|-40|0||39e5\",\"Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0|18e5\",\"Asia/Hong_Kong|HKT|-80|0||73e5\",\"Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4\",\"Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|WIB|-70|0||31e6\",\"Asia/Jayapura|WIT|-90|0||26e4\",\"Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4\",\"Asia/Kabul|+0430|-4u|0||46e5\",\"Asia/Karachi|PKT|-50|0||24e6\",\"Asia/Kathmandu|+0545|-5J|0||12e5\",\"Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4\",\"Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5\",\"Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3\",\"Asia/Makassar|WITA|-80|0||15e5\",\"Asia/Manila|PST|-80|0||24e6\",\"Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5\",\"Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5\",\"Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5\",\"Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5\",\"Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4\",\"Asia/Rangoon|+0630|-6u|0||48e5\",\"Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4\",\"Asia/Seoul|KST|-90|0||23e6\",\"Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2\",\"Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\",\"Asia/Tokyo|JST|-90|0||38e6\",\"Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5\",\"Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4\",\"Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5\",\"Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5\",\"Atlantic/Cape_Verde|-01|10|0||50e4\",\"Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|AEST|-a0|0||20e5\",\"Australia/Darwin|ACST|-9u|0||12e4\",\"Australia/Eucla|+0845|-8J|0||368\",\"Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Perth|AWST|-80|0||18e5\",\"Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0|30e2\",\"Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5\",\"Etc/GMT-1|+01|-10|0||\",\"Pacific/Guadalcanal|+11|-b0|0||11e4\",\"Pacific/Fakaofo|+13|-d0|0||483\",\"Pacific/Kiritimati|+14|-e0|0||51e2\",\"Etc/GMT-2|+02|-20|0||\",\"Pacific/Tahiti|-10|a0|0||18e4\",\"Pacific/Niue|-11|b0|0||12e2\",\"Etc/GMT+12|-12|c0|0||\",\"Pacific/Galapagos|-06|60|0||25e3\",\"Etc/GMT+7|-07|70|0||\",\"Pacific/Pitcairn|-08|80|0||56\",\"Pacific/Gambier|-09|90|0||125\",\"Etc/UTC|UTC|0|0||\",\"Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5\",\"Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6\",\"Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4\",\"Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4\",\"Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6\",\"Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810|\",\"Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Volgograd|MSK MSK +04|-40 -30 -40|0121|1N7y0 9Jd0 5gn0|10e5\",\"Pacific/Honolulu|HST|a0|0||37e4\",\"MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3\",\"Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4\",\"Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4\",\"Pacific/Guam|ChST|-a0|0||17e4\",\"Pacific/Marquesas|-0930|9u|0||86e2\",\"Pacific/Pago_Pago|SST|b0|0||37e2\",\"Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3\"],links:[\"Africa/Abidjan|Africa/Accra\",\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Bissau\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Monrovia\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|America/Danmarkshavn\",\"Africa/Abidjan|Atlantic/Reykjavik\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Abidjan|Etc/GMT\",\"Africa/Abidjan|Etc/GMT+0\",\"Africa/Abidjan|Etc/GMT-0\",\"Africa/Abidjan|Etc/GMT0\",\"Africa/Abidjan|Etc/Greenwich\",\"Africa/Abidjan|GMT\",\"Africa/Abidjan|GMT+0\",\"Africa/Abidjan|GMT-0\",\"Africa/Abidjan|GMT0\",\"Africa/Abidjan|Greenwich\",\"Africa/Abidjan|Iceland\",\"Africa/Algiers|Africa/Tunis\",\"Africa/Cairo|Egypt\",\"Africa/Casablanca|Africa/El_Aaiun\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Ndjamena\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|America/Juneau\",\"America/Anchorage|America/Nome\",\"America/Anchorage|America/Sitka\",\"America/Anchorage|America/Yakutat\",\"America/Anchorage|US/Alaska\",\"America/Campo_Grande|America/Cuiaba\",\"America/Chicago|America/Indiana/Knox\",\"America/Chicago|America/Indiana/Tell_City\",\"America/Chicago|America/Knox_IN\",\"America/Chicago|America/Matamoros\",\"America/Chicago|America/Menominee\",\"America/Chicago|America/North_Dakota/Beulah\",\"America/Chicago|America/North_Dakota/Center\",\"America/Chicago|America/North_Dakota/New_Salem\",\"America/Chicago|America/Rainy_River\",\"America/Chicago|America/Rankin_Inlet\",\"America/Chicago|America/Resolute\",\"America/Chicago|America/Winnipeg\",\"America/Chicago|CST6CDT\",\"America/Chicago|Canada/Central\",\"America/Chicago|US/Central\",\"America/Chicago|US/Indiana-Starke\",\"America/Denver|America/Boise\",\"America/Denver|America/Cambridge_Bay\",\"America/Denver|America/Edmonton\",\"America/Denver|America/Inuvik\",\"America/Denver|America/Shiprock\",\"America/Denver|America/Yellowknife\",\"America/Denver|Canada/Mountain\",\"America/Denver|MST7MDT\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Fortaleza|America/Argentina/Buenos_Aires\",\"America/Fortaleza|America/Argentina/Catamarca\",\"America/Fortaleza|America/Argentina/ComodRivadavia\",\"America/Fortaleza|America/Argentina/Cordoba\",\"America/Fortaleza|America/Argentina/Jujuy\",\"America/Fortaleza|America/Argentina/La_Rioja\",\"America/Fortaleza|America/Argentina/Mendoza\",\"America/Fortaleza|America/Argentina/Rio_Gallegos\",\"America/Fortaleza|America/Argentina/Salta\",\"America/Fortaleza|America/Argentina/San_Juan\",\"America/Fortaleza|America/Argentina/San_Luis\",\"America/Fortaleza|America/Argentina/Tucuman\",\"America/Fortaleza|America/Argentina/Ushuaia\",\"America/Fortaleza|America/Belem\",\"America/Fortaleza|America/Buenos_Aires\",\"America/Fortaleza|America/Catamarca\",\"America/Fortaleza|America/Cayenne\",\"America/Fortaleza|America/Cordoba\",\"America/Fortaleza|America/Jujuy\",\"America/Fortaleza|America/Maceio\",\"America/Fortaleza|America/Mendoza\",\"America/Fortaleza|America/Paramaribo\",\"America/Fortaleza|America/Recife\",\"America/Fortaleza|America/Rosario\",\"America/Fortaleza|America/Santarem\",\"America/Fortaleza|Antarctica/Rothera\",\"America/Fortaleza|Atlantic/Stanley\",\"America/Fortaleza|Etc/GMT+3\",\"America/Godthab|America/Nuuk\",\"America/Halifax|America/Glace_Bay\",\"America/Halifax|America/Goose_Bay\",\"America/Halifax|America/Moncton\",\"America/Halifax|America/Thule\",\"America/Halifax|Atlantic/Bermuda\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/La_Paz|America/Boa_Vista\",\"America/La_Paz|America/Guyana\",\"America/La_Paz|America/Manaus\",\"America/La_Paz|America/Porto_Velho\",\"America/La_Paz|Brazil/West\",\"America/La_Paz|Etc/GMT+4\",\"America/Lima|America/Bogota\",\"America/Lima|America/Guayaquil\",\"America/Lima|Etc/GMT+5\",\"America/Los_Angeles|America/Ensenada\",\"America/Los_Angeles|America/Santa_Isabel\",\"America/Los_Angeles|America/Tijuana\",\"America/Los_Angeles|America/Vancouver\",\"America/Los_Angeles|Canada/Pacific\",\"America/Los_Angeles|Mexico/BajaNorte\",\"America/Los_Angeles|PST8PDT\",\"America/Los_Angeles|US/Pacific\",\"America/Managua|America/Belize\",\"America/Managua|America/Costa_Rica\",\"America/Managua|America/El_Salvador\",\"America/Managua|America/Guatemala\",\"America/Managua|America/Regina\",\"America/Managua|America/Swift_Current\",\"America/Managua|America/Tegucigalpa\",\"America/Managua|Canada/Saskatchewan\",\"America/Mazatlan|Mexico/BajaSur\",\"America/Mexico_City|America/Bahia_Banderas\",\"America/Mexico_City|America/Merida\",\"America/Mexico_City|America/Monterrey\",\"America/Mexico_City|Mexico/General\",\"America/New_York|America/Detroit\",\"America/New_York|America/Fort_Wayne\",\"America/New_York|America/Indiana/Indianapolis\",\"America/New_York|America/Indiana/Marengo\",\"America/New_York|America/Indiana/Petersburg\",\"America/New_York|America/Indiana/Vevay\",\"America/New_York|America/Indiana/Vincennes\",\"America/New_York|America/Indiana/Winamac\",\"America/New_York|America/Indianapolis\",\"America/New_York|America/Iqaluit\",\"America/New_York|America/Kentucky/Louisville\",\"America/New_York|America/Kentucky/Monticello\",\"America/New_York|America/Louisville\",\"America/New_York|America/Montreal\",\"America/New_York|America/Nassau\",\"America/New_York|America/Nipigon\",\"America/New_York|America/Pangnirtung\",\"America/New_York|America/Thunder_Bay\",\"America/New_York|America/Toronto\",\"America/New_York|Canada/Eastern\",\"America/New_York|EST5EDT\",\"America/New_York|US/East-Indiana\",\"America/New_York|US/Eastern\",\"America/New_York|US/Michigan\",\"America/Noronha|Atlantic/South_Georgia\",\"America/Noronha|Brazil/DeNoronha\",\"America/Noronha|Etc/GMT+2\",\"America/Panama|America/Atikokan\",\"America/Panama|America/Cayman\",\"America/Panama|America/Coral_Harbour\",\"America/Panama|America/Jamaica\",\"America/Panama|EST\",\"America/Panama|Jamaica\",\"America/Phoenix|America/Creston\",\"America/Phoenix|America/Dawson_Creek\",\"America/Phoenix|America/Hermosillo\",\"America/Phoenix|MST\",\"America/Phoenix|US/Arizona\",\"America/Rio_Branco|America/Eirunepe\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Santo_Domingo|America/Anguilla\",\"America/Santo_Domingo|America/Antigua\",\"America/Santo_Domingo|America/Aruba\",\"America/Santo_Domingo|America/Barbados\",\"America/Santo_Domingo|America/Blanc-Sablon\",\"America/Santo_Domingo|America/Curacao\",\"America/Santo_Domingo|America/Dominica\",\"America/Santo_Domingo|America/Grenada\",\"America/Santo_Domingo|America/Guadeloupe\",\"America/Santo_Domingo|America/Kralendijk\",\"America/Santo_Domingo|America/Lower_Princes\",\"America/Santo_Domingo|America/Marigot\",\"America/Santo_Domingo|America/Martinique\",\"America/Santo_Domingo|America/Montserrat\",\"America/Santo_Domingo|America/Port_of_Spain\",\"America/Santo_Domingo|America/Puerto_Rico\",\"America/Santo_Domingo|America/St_Barthelemy\",\"America/Santo_Domingo|America/St_Kitts\",\"America/Santo_Domingo|America/St_Lucia\",\"America/Santo_Domingo|America/St_Thomas\",\"America/Santo_Domingo|America/St_Vincent\",\"America/Santo_Domingo|America/Tortola\",\"America/Santo_Domingo|America/Virgin\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Whitehorse|America/Dawson\",\"America/Whitehorse|Canada/Yukon\",\"Antarctica/Palmer|America/Punta_Arenas\",\"Asia/Baghdad|Antarctica/Syowa\",\"Asia/Baghdad|Asia/Aden\",\"Asia/Baghdad|Asia/Bahrain\",\"Asia/Baghdad|Asia/Kuwait\",\"Asia/Baghdad|Asia/Qatar\",\"Asia/Baghdad|Asia/Riyadh\",\"Asia/Baghdad|Etc/GMT-3\",\"Asia/Baghdad|Europe/Minsk\",\"Asia/Bangkok|Antarctica/Vostok\",\"Asia/Bangkok|Asia/Ho_Chi_Minh\",\"Asia/Bangkok|Asia/Novokuznetsk\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Saigon\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Bangkok|Etc/GMT-7\",\"Asia/Bangkok|Indian/Christmas\",\"Asia/Dhaka|Asia/Almaty\",\"Asia/Dhaka|Asia/Bishkek\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dhaka|Asia/Kashgar\",\"Asia/Dhaka|Asia/Qostanay\",\"Asia/Dhaka|Asia/Thimbu\",\"Asia/Dhaka|Asia/Thimphu\",\"Asia/Dhaka|Asia/Urumqi\",\"Asia/Dhaka|Etc/GMT-6\",\"Asia/Dhaka|Indian/Chagos\",\"Asia/Dili|Etc/GMT-9\",\"Asia/Dili|Pacific/Palau\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Dubai|Asia/Tbilisi\",\"Asia/Dubai|Asia/Yerevan\",\"Asia/Dubai|Etc/GMT-4\",\"Asia/Dubai|Europe/Samara\",\"Asia/Dubai|Indian/Mahe\",\"Asia/Dubai|Indian/Mauritius\",\"Asia/Dubai|Indian/Reunion\",\"Asia/Gaza|Asia/Hebron\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jakarta|Asia/Pontianak\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kamchatka|Asia/Anadyr\",\"Asia/Kamchatka|Etc/GMT-12\",\"Asia/Kamchatka|Kwajalein\",\"Asia/Kamchatka|Pacific/Funafuti\",\"Asia/Kamchatka|Pacific/Kwajalein\",\"Asia/Kamchatka|Pacific/Majuro\",\"Asia/Kamchatka|Pacific/Nauru\",\"Asia/Kamchatka|Pacific/Tarawa\",\"Asia/Kamchatka|Pacific/Wake\",\"Asia/Kamchatka|Pacific/Wallis\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Brunei\",\"Asia/Kuala_Lumpur|Asia/Kuching\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Etc/GMT-8\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Rangoon|Indian/Cocos\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|Asia/Macao\",\"Asia/Shanghai|Asia/Macau\",\"Asia/Shanghai|Asia/Taipei\",\"Asia/Shanghai|PRC\",\"Asia/Shanghai|ROC\",\"Asia/Tashkent|Antarctica/Mawson\",\"Asia/Tashkent|Asia/Aqtau\",\"Asia/Tashkent|Asia/Aqtobe\",\"Asia/Tashkent|Asia/Ashgabat\",\"Asia/Tashkent|Asia/Ashkhabad\",\"Asia/Tashkent|Asia/Atyrau\",\"Asia/Tashkent|Asia/Dushanbe\",\"Asia/Tashkent|Asia/Oral\",\"Asia/Tashkent|Asia/Samarkand\",\"Asia/Tashkent|Etc/GMT-5\",\"Asia/Tashkent|Indian/Kerguelen\",\"Asia/Tashkent|Indian/Maldives\",\"Asia/Tehran|Iran\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Choibalsan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Vladivostok|Asia/Ust-Nera\",\"Asia/Yakutsk|Asia/Khandyga\",\"Atlantic/Azores|America/Scoresbysund\",\"Atlantic/Cape_Verde|Etc/GMT+1\",\"Australia/Adelaide|Australia/Broken_Hill\",\"Australia/Adelaide|Australia/South\",\"Australia/Adelaide|Australia/Yancowinna\",\"Australia/Brisbane|Australia/Lindeman\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Darwin|Australia/North\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Antarctica/Macquarie\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/Currie\",\"Australia/Sydney|Australia/Hobart\",\"Australia/Sydney|Australia/Melbourne\",\"Australia/Sydney|Australia/NSW\",\"Australia/Sydney|Australia/Tasmania\",\"Australia/Sydney|Australia/Victoria\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Athens|Asia/Nicosia\",\"Europe/Athens|EET\",\"Europe/Athens|Europe/Bucharest\",\"Europe/Athens|Europe/Helsinki\",\"Europe/Athens|Europe/Kiev\",\"Europe/Athens|Europe/Kyiv\",\"Europe/Athens|Europe/Mariehamn\",\"Europe/Athens|Europe/Nicosia\",\"Europe/Athens|Europe/Riga\",\"Europe/Athens|Europe/Sofia\",\"Europe/Athens|Europe/Tallinn\",\"Europe/Athens|Europe/Uzhgorod\",\"Europe/Athens|Europe/Vilnius\",\"Europe/Athens|Europe/Zaporozhye\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Lisbon|Atlantic/Canary\",\"Europe/Lisbon|Atlantic/Faeroe\",\"Europe/Lisbon|Atlantic/Faroe\",\"Europe/Lisbon|Atlantic/Madeira\",\"Europe/Lisbon|Portugal\",\"Europe/Lisbon|WET\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|Europe/Kirov\",\"Europe/Moscow|W-SU\",\"Europe/Paris|Africa/Ceuta\",\"Europe/Paris|Arctic/Longyearbyen\",\"Europe/Paris|Atlantic/Jan_Mayen\",\"Europe/Paris|CET\",\"Europe/Paris|Europe/Amsterdam\",\"Europe/Paris|Europe/Andorra\",\"Europe/Paris|Europe/Belgrade\",\"Europe/Paris|Europe/Berlin\",\"Europe/Paris|Europe/Bratislava\",\"Europe/Paris|Europe/Brussels\",\"Europe/Paris|Europe/Budapest\",\"Europe/Paris|Europe/Busingen\",\"Europe/Paris|Europe/Copenhagen\",\"Europe/Paris|Europe/Gibraltar\",\"Europe/Paris|Europe/Ljubljana\",\"Europe/Paris|Europe/Luxembourg\",\"Europe/Paris|Europe/Madrid\",\"Europe/Paris|Europe/Malta\",\"Europe/Paris|Europe/Monaco\",\"Europe/Paris|Europe/Oslo\",\"Europe/Paris|Europe/Podgorica\",\"Europe/Paris|Europe/Prague\",\"Europe/Paris|Europe/Rome\",\"Europe/Paris|Europe/San_Marino\",\"Europe/Paris|Europe/Sarajevo\",\"Europe/Paris|Europe/Skopje\",\"Europe/Paris|Europe/Stockholm\",\"Europe/Paris|Europe/Tirane\",\"Europe/Paris|Europe/Vaduz\",\"Europe/Paris|Europe/Vatican\",\"Europe/Paris|Europe/Vienna\",\"Europe/Paris|Europe/Warsaw\",\"Europe/Paris|Europe/Zagreb\",\"Europe/Paris|Europe/Zurich\",\"Europe/Paris|Poland\",\"Europe/Ulyanovsk|Europe/Astrakhan\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Fakaofo|Etc/GMT-13\",\"Pacific/Fakaofo|Pacific/Enderbury\",\"Pacific/Fakaofo|Pacific/Kanton\",\"Pacific/Galapagos|Etc/GMT+6\",\"Pacific/Gambier|Etc/GMT+9\",\"Pacific/Guadalcanal|Etc/GMT-11\",\"Pacific/Guadalcanal|Pacific/Efate\",\"Pacific/Guadalcanal|Pacific/Kosrae\",\"Pacific/Guadalcanal|Pacific/Noumea\",\"Pacific/Guadalcanal|Pacific/Pohnpei\",\"Pacific/Guadalcanal|Pacific/Ponape\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|HST\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kiritimati|Etc/GMT-14\",\"Pacific/Niue|Etc/GMT+11\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Pitcairn|Etc/GMT+8\",\"Pacific/Port_Moresby|Antarctica/DumontDUrville\",\"Pacific/Port_Moresby|Etc/GMT-10\",\"Pacific/Port_Moresby|Pacific/Chuuk\",\"Pacific/Port_Moresby|Pacific/Truk\",\"Pacific/Port_Moresby|Pacific/Yap\",\"Pacific/Tahiti|Etc/GMT+10\",\"Pacific/Tahiti|Pacific/Rarotonga\"],countries:[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Puerto_Rico America/Antigua\",\"AI|America/Puerto_Rico America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla\",\"AW|America/Puerto_Rico America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Puerto_Rico America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Kuching Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Puerto_Rico America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Toronto America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston\",\"CC|Asia/Yangon Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Puerto_Rico America/Curacao\",\"CX|Asia/Bangkok Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Berlin Europe/Copenhagen\",\"DM|America/Puerto_Rico America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Puerto_Rico America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Abidjan Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Puerto_Rico America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Africa/Abidjan Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Puerto_Rico America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Puerto_Rico America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Brussels Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Paris Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Puerto_Rico America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Puerto_Rico America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana\",\"MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Brussels Europe/Amsterdam\",\"NO|Europe/Berlin Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Asia/Dubai Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Asia/Dubai Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Berlin Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Berlin Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Puerto_Rico America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Asia/Dubai Indian/Maldives Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Puerto_Rico America/Port_of_Spain\",\"TV|Pacific/Tarawa Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kyiv\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Puerto_Rico America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Puerto_Rico America/Tortola\",\"VI|America/Puerto_Rico America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Tarawa Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}),!1===o.suppressDeprecationWarnings&&\"undefined\"!=typeof console&&console.warn&&void 0,o});\n(function (app) {\r\n\tapp.module('qbePortal', ['ui.date', 'ui.bootstrap', 'credit-cards', 'ui.select', 'ngSanitize', 'ipCookie', 'ui.mask', 'ngDialog', 'ActivityMonitor', 'vcRecaptcha']);\r\n\tapp.module('qbePortal.services', []);\r\n\r\n\t/** These need to be replaced with existing routes\r\n\t * when the right ng-app value is updated on the backend templates for qbePortal.routes.vehicle\r\n\t */\r\n\r\n\tapp.module('qbePortal.services.vehicle', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.bike', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.caravan', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.home', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.ctp', ['qbePortal.services']);\r\n\tapp.module('qbePortal.services.payments', ['qbePortal.services']);\r\n\r\n\tapp.module('qbePortal.routes', ['ui.router', 'qbePortal', 'angular-jwt', 'angulartics', 'angulartics.google.analytics']);\r\n\tapp.module('qbePortal.routes.vehicle', ['qbePortal.routes', 'qbePortal.services.vehicle']);\r\n\tapp.module('qbePortal.routes.bike', ['qbePortal.routes', 'qbePortal.services.bike']);\r\n\tapp.module('qbePortal.routes.caravan', ['qbePortal.routes', 'qbePortal.services.caravan', 'rzModule']);\r\n\tapp.module('qbePortal.routes.home', ['qbePortal.routes', 'qbePortal.services.home', 'rzModule']);\r\n\tapp.module('qbePortal.routes.ctp', ['qbePortal.routes', 'qbePortal.services.ctp']);\r\n\tapp.module('qbePortal.routes.payments', ['qbePortal.routes', 'qbePortal.services.payments']);\r\n\r\n\tapp.module('qbePortal.rapidEstimate.vehicle', ['ui.router', 'qbePortal', 'qbePortal.services.vehicle', 'rzModule']);\r\n\tapp.module('qbePortal.rapidEstimate.bike', ['ui.router', 'qbePortal', 'qbePortal.services.bike', 'rzModule']);\r\n\tapp.module('qbePortal.rapidEstimate.caravan', ['ui.router', 'qbePortal', 'qbePortal.services.caravan', 'rzModule']);\r\n\r\n})(angular);\r\n\n\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction BikeQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util) {\r\n\tvar self = this;\r\n\r\n\tvar selectedQuote= quoteOptions.getSelectedQuoteResult() ;\r\n\tvar selectedQuoteForPayment = quoteOptions.getSelectedQuoteResultForPayment() ;\r\n\t/**\r\n\t * Retrieves values from UserInputRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from UserInputRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getUserInputValueFor = function (dotSeperatedFieldPath) {\r\n\t\tvar userInput = userInputRepository.get();\r\n\t\treturn Util.findHierarchyStringInObject(userInput, dotSeperatedFieldPath, '.');\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves values from ServiceResponseRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from ServiceResponseRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getServiceResponseValueFor = function (serviceName, dotSeperatedFieldPath) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._ridersHave_threeYears_restrictedSuspendedDisqualifiedCancelled = function () {\r\n\t\tif (this.riders) {\r\n\t\t\tvar ridersLength = this.riders.length,\r\n\t\t\t\tatLeastOneRiderHas = false,\r\n\t\t\t\trider;\r\n\r\n\t\t\tfor (var i = 0; i < ridersLength; i++) {\r\n\t\t\t\trider = this.riders[i];\r\n\r\n\t\t\t\tif (rider.threeYears_restrictedSuspendedDisqualifiedCancelled) {\r\n\t\t\t\t\tatLeastOneRiderHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneRiderHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._ridersHave_threeYears_accidentsClaims = function () {\r\n\t\tif (this.riders) {\r\n\t\t\tvar ridersLength = this.riders.length,\r\n\t\t\t\tatLeastOneRiderHas = false,\r\n\t\t\t\trider;\r\n\r\n\t\t\tfor (var i = 0; i < ridersLength; i++) {\r\n\t\t\t\trider = this.riders[i];\r\n\r\n\t\t\t\tif (rider.threeYears_accidentsClaims) {\r\n\t\t\t\t\tatLeastOneRiderHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneRiderHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._ridersHave_fiveYears_chargedOrConvicted = function () {\r\n\t\tif (this.riders) {\r\n\r\n\t\t\tvar ridersLength = this.riders.length,\r\n\t\t\t\tatLeastOneRiderHas = false,\r\n\t\t\t\trider;\r\n\r\n\t\t\tfor (var i = 0; i < ridersLength; i++) {\r\n\t\t\t\trider = this.riders[i];\r\n\r\n\t\t\t\tif (rider.fiveYears_chargedOrConvicted) {\r\n\t\t\t\t\tatLeastOneRiderHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneRiderHas;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.email = this._getUserInputValueFor('bikeForm.tellUsABitMore.yourEmailAddress')?this._getUserInputValueFor('bikeForm.tellUsABitMore.yourEmailAddress'):this._getUserInputValueFor('email');\r\n\r\n\tthis.bikeForm = this._getUserInputValueFor('bikeForm');\r\n\r\n\t// rego details\r\n\tthis.regoDetails = this._getServiceResponseValueFor('regoSearch');\r\n\r\n\tif ( !!this.regoDetails && !!this.bikeForm && !!this.bikeForm.tellUsYourRegoNumber && !!this.bikeForm.tellUsYourRegoNumber.regoNumber) {\r\n\t\tthis.regoDetails.regoNumber = this.bikeForm.tellUsYourRegoNumber.regoNumber;\r\n\t}\r\n\r\n\tif ( !! this.regoDetails && this.regoDetails.goodRetailPrice ) {\r\n\t\tthis.bikeRetailValue = parseInt( this.regoDetails.goodRetailPrice ) ;\r\n\t}\r\n\r\n\t// cover type\r\n\tthis.selectedQuote = selectedQuote ;\r\n\tthis.selectedQuoteForPayment = selectedQuoteForPayment;\r\n\t// this._getServiceResponseValueFor('quickQuote');\r\n\tif (selectedQuote ) {\r\n\t\tthis.annualCoverType = selectedQuote.getAnnual();\r\n\t\tthis.monthlyCoverType = selectedQuote.getMonthly();\r\n\r\n\t\tthis.quoteResult = this.selectedQuoteForPayment ; // selectedQuote.getQuoteResult();\r\n\t\tif ( this.quoteResult ) {\r\n\t\t\tthis.coverageOptions = this.quoteResult.coverageOptions ;\r\n\t\t\tif ( this.coverageOptions ) {\r\n\t\t\t\tthis.coverageOptionsToShow = this.coverageOptions.filter(function(op) {\r\n\t\t\t\t\treturn op.required === false ;\r\n\t\t\t\t});\r\n\t\t\t\tthis.hasCoverageOptions = this.coverageOptionsToShow.length > 0 ;\r\n\t\t\t}\r\n\t\t\tthis.excess = this.quoteResult.excess ;\r\n\t\t\tthis.namedRiderExcess = findNamedRiderExcess() ;\r\n\t\t}\r\n\r\n\t\tthis.motorcycleValue = this.quoteResult.motorcycleValue;\r\n\t\tthis.sumInsuredAmount = this.quoteResult.sumInsuredAmount;\r\n\t\t// console.log( ' sum insured ammount is ' , this.sumInsuredAmount ) ;\r\n\t}\r\n\r\n\t/** excess list to be displayed in the quote panel */\r\n\tthis.displayableExcessList = null;\r\n\r\n\tthis.getDisplayableExcess=function(isCoverSummary) {\r\n\t\tif ( ! this.excess )\r\n\t\t\treturn [] ;\r\n\r\n\t\tif ( ! this.displayableExcessList) {\r\n\t\t\tvar filterOut = ['voluntaryVehicleExcessOptions', 'voluntaryVehicleExcess', 'standardVehicleExcess'] ;\r\n\t\t\tthis.displayableExcessList = [] ;\r\n\r\n\t\t\tfor ( var key in this.excess) {\r\n\t\t\t\tif ( filterOut.indexOf(key) === -1){\r\n\t\t\t\t\t//dd-6058 - do not display Flexi excess if value is not greater than zero\t\t\t\t\t\r\n\t\t\t\t\tif((key == \"flexiExcessExcess\" || key == \"flexiExcessOptions\") && this.excess.flexiExcessExcess <= 0) continue;\r\n\t\t\t\t\tif (key == \"flexiExcessExcess\") { continue; }\r\n\t\t\t\t\tif (key == \"standardExcess\") {\r\n\t\t\t\t\t\tif (isCoverSummary) {\r\n\t\t\t\t\t\t var feItemValue = this.excess[\"flexiExcessExcess\"];\r\n\t\t\t\t\t\t\tvar standardValue = this.excess[key];\r\n\t\t\t\t\t\t\tif (!isNaN(feItemValue)) {\r\n\t\t\t\t\t\t\t\tstandardValue += feItemValue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.displayableExcessList.push({ key : key, excessValue : standardValue }) ;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.displayableExcessList.push({ key : key, excessValue : this.excess[key] }) ;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.displayableExcessList ;\r\n\t}\r\n\r\n\tthis.getSelectionExcess=function() {\r\n\t\tif (!this.excess)\r\n\t\t\treturn [] ;\r\n\t\tvar options = [-200, -100, 0, 100, 200, 300, 500, 1000, 1500];\r\n\t\tvar flexiExcessRange = this.excess.flexiExcessOptions.filter(function(x) {\r\n\t\t\treturn options.indexOf(x) != -1;\r\n\t\t});\r\n\r\n\t\tfor (var idx = 0; idx < flexiExcessRange.length; idx++) {\r\n\t\t\tflexiExcessRange[idx] += this.excess.standardExcess;\r\n\t\t}\r\n\r\n\t\treturn flexiExcessRange;\r\n\t}\r\n\r\n\tfunction findNamedRiderExcess() {\r\n\t\tvar namedRiderExcess = [],\r\n\t\t\tqr = selectedQuoteForPayment ? selectedQuoteForPayment.response : null ;\r\n\r\n\t\tif ( qr && qr.motorcycles) {\r\n\t\t\tvar riders = qr.motorcycles[0].riders ;\r\n\t\t\triders.forEach( function(rider) {\r\n\t\t\t\tif ( rider.rider\r\n\t\t\t\t\t&& rider.rider.calculatedExcess\r\n\t\t\t\t\t&& rider.rider.calculatedExcess > 0 ) {\r\n\t\t\t\t\tnamedRiderExcess.push({\r\n\t\t\t\t\t\tfirstName : rider.rider.person.firstName,\r\n\t\t\t\t\t\tlastName: rider.rider.person.lastName,\r\n\t\t\t\t\t\texcessValue : rider.rider.calculatedExcess,\r\n\t\t\t\t\t\tdob: rider.rider.person.dateOfBirth\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn namedRiderExcess ;\r\n\t}\r\n\r\n\t/**\r\n\t* Excluded riders\r\n\t*/\r\n\tvar savedQuoteResult = !!this.quoteResult ? this.quoteResult.response : null;\r\n\tif ( savedQuoteResult ) {\r\n\t\t/** excluded rider condition to be correctly diagnosed here */\r\n\t\t// this.excludedRiders = this.quoteResult.excludedRiders ;\r\n\t\tvar excludedRiders = [] ;\r\n\t\tsavedQuoteResult.motorcycles[0].riders.forEach(function(rider) {\r\n\t\t\tif ( rider.riderUsage == 'excluded')\r\n\t\t\t\texcludedRiders.push(rider.rider.person) ;\r\n\t\t});\r\n\t\tthis.excludedRiders = excludedRiders;\r\n\t}\r\n\r\n\tthis.hasExcludedRiders = function() {\r\n\t\treturn this.excludedRiders && this.excludedRiders.length > 0 ;\r\n\t}\r\n\r\n\tthis.riders = [];\r\n\tthis.postCode = null;\r\n\tthis.campaignCode = null ;\r\n\tif (this.bikeForm) {\r\n\t\t//TODO: set regoNumber based on step 1 or step 4\r\n\r\n\t\t// bikeDetails\r\n\t\tif (this.bikeForm.bikeDetails) {\r\n\t\t\tthis.bikeDetails = this.bikeForm.bikeDetails;\r\n\r\n\t\t\tthis.bikeDetailsUsage = this.bikeForm.bikeDetails.primaryBikeUse;\r\n\t\t\tswitch (this.bikeDetailsUsage) {\r\n\t\t\t\tcase 'commercial':\r\n\t\t\t\t\tthis.bikeDetailsUsage += ' - ' + this.bikeForm.bikeDetails.commercialActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n\t\t\t\t\tthis.bikeDetailsUsage += ' - ' + this.bikeForm.bikeDetails.businessActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( this.bikeForm.getStarted ) {\r\n\t\t\tthis.personOrCompany = this.bikeForm.getStarted.personOrCompany;\r\n\t\t\tthis.policyStartDate = this.bikeForm.getStarted.policyStartDate;\r\n\t\t}\r\n\r\n\t\t// Main riders & additional riders\r\n\t\tthis.additionalRiders = [];\r\n\r\n\t\tif (!!this.bikeForm.rider) {\r\n \t\tvar riders=this.bikeForm.rider.riders;\r\n \t\tif(riders){\r\n\r\n\t\t\t\tthis.mainRider = riders[0];\r\n\r\n\t\t\t\tif (!!this.bikeForm.mainPolicyHolderContact) {\r\n\t\t\t\t\tthis.mainRider.person.phoneNumber = this.bikeForm.mainPolicyHolderContact.primaryPhoneNumber;\r\n\t\t\t\t}\r\n\r\n \t\t\tif(riders.length>1){\r\n \t\t\tthis.additionalRiders=riders.splice(1,riders.length);\r\n \t\t\t}\r\n \t\t}\r\n\t\t};\r\n\r\n\t\t// riders\r\n\t\tif (this.mainRider) {\r\n\t\t\tthis.riders = [this.mainRider];\r\n\t\t\tthis.noClaimBonus = this.mainRider.noClaimBonus ; \r\n\t\t}\r\n\t\tif (this.additionalRiders) {\r\n\t\t\tthis.riders = this.riders.concat(this.additionalRiders);\r\n\t\t}\r\n\r\n\t\t// address\r\n\t\tvar aboutYourBike = this.bikeForm.aboutYourBike ;\r\n\t\tif ( aboutYourBike && aboutYourBike.address ) {\r\n\t\t\tthis.address = aboutYourBike.address\t;\r\n\t\t\tthis.postCode = this.address.postalCode;\r\n\t\t\tthis.state = this.address.state ;\r\n\t\t}\r\n\r\n\t\tif ( this.bikeForm.promotionalCode ) {\r\n\t\t\tthis.campaignCode = this.bikeForm.promotionalCode.promotionalCode ;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// this.quoteId = this._getServiceResponseValueFor('service-name', 'quote.quoteId');\r\n\tthis.quoteId = null ;\r\n\tif ( quoteRequestRepository.getSelectedQuoteCredentials() )\r\n\t\tthis.quoteId = quoteRequestRepository.getSelectedQuoteCredentials().quoteID ;\r\n\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmPolicyHolder = this.mainRider ? this.mainRider.person : null;\r\n\tthis.gtmTransactionAffiliation = 'QBE Direct' ;\r\n\tthis.insuranceType = MODULE_INFO.insuranceType ;\r\n\tthis.productCode = MODULE_INFO.productCode ;\r\n\r\n\r\n}\r\n\n\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction CaravanQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util) {\r\n\tvar self = this;\r\n\r\n\tvar selectedQuote= quoteOptions.getSelectedQuoteResult() ;\r\n\tvar selectedQuoteForPayment = quoteOptions.getSelectedQuoteResultForPayment() ;\r\n\t// cover type\r\n\tthis.selectedQuote = selectedQuote;\r\n\tthis.selectedQuoteForPayment = selectedQuoteForPayment;\r\n\t/**\r\n\t * Retrieves values from UserInputRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from UserInputRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getUserInputValueFor = function (dotSeperatedFieldPath) {\r\n\t\tvar userInput = userInputRepository.get();\r\n\t\treturn Util.findHierarchyStringInObject(userInput, dotSeperatedFieldPath, '.');\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves values from ServiceResponseRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from ServiceResponseRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getServiceResponseValueFor = function (serviceName, dotSeperatedFieldPath) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates whether at least one driver in the last 4 years, has been charged or convicted of any driving offences\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_licenceRSDC = function () {\r\n\t\tif (this.drivers) {\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_licenceRSDC) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_chargedOrConvictedOffences = function () {\r\n\t\tif (this.drivers) {\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_vehicleAccidentsClaims = function () {\r\n\t\tif (this.drivers) {\r\n\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_tenYears_chargedOrConvictedOffences = function () {\r\n\t\tif (this.drivers) {\r\n\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.email = this._getUserInputValueFor('caravanForm.tellUsABitMore.yourEmailAddress')?this._getUserInputValueFor('caravanForm.tellUsABitMore.yourEmailAddress'):this._getUserInputValueFor('email');\r\n\r\n\t// vehicle form data\r\n\tthis.caravanForm = this._getUserInputValueFor('caravanForm');\r\n\r\n\t// rego details\r\n\tthis.regoDetails = this._getServiceResponseValueFor('regoSearch');\r\n\r\n\tif ( selectedQuoteForPayment ) {\r\n\t\tthis.vehicleInfo = selectedQuoteForPayment.response.caravans[0].caravanInfo;\r\n\t}\r\n\r\n\t// vehicle type\r\n\tthis.vehicleType = this._getUserInputValueFor('caravanForm.aboutYourCaravan.vehicleType');\r\n\r\n\t// vehicle agreed value\r\n\tthis.agreedValue = this._getUserInputValueFor('caravanForm.sumInsured.agreedValue');\r\n\tthis.generalContentsValue = this._getUserInputValueFor('caravanForm.aboutYourContents.generalContentsValue') ;\r\n\tthis.specifiedContentItems = this._getUserInputValueFor('caravanForm.aboutYourContents.contentsItems') || [] ;\r\n\tthis.totalSpecifiedContentValue = function(items) {\r\n\t\tvar total = 0 ;\r\n\t\tangular.forEach(items, function(item) { total += item.value ; });\r\n\t\treturn total ;\r\n\t}(this.specifiedContentItems);\r\n\r\n\tthis.totalContentsValue = this.totalSpecifiedContentValue + this.generalContentsValue ;\r\n\r\n\tthis.annexeCost = this._getUserInputValueFor('caravanForm.sumInsured.annexeReplacementCost');\r\n\tthis.sumInsured = this.agreedValue + this.annexeCost;\r\n\r\n\tthis.contentsSumInsured = 1000; // TODO: Aggregate the contents items + general contents value\r\n\r\n\tthis.purchaseMonth = this._getUserInputValueFor('caravanForm.caravanDetails.whenDidYouBuyMonth');\r\n\tthis.purchaseYear = this._getUserInputValueFor('caravanForm.caravanDetails.whenDidYouBuyYear');\r\n\tthis.purchaseDate = this.purchaseMonth + '/' + this.purchaseYear;\r\n\r\n\tthis.isCaravanRegistered = this._getUserInputValueFor('caravanForm.caravanDetails.isCaravanRegistered');\r\n\r\n\tif ( this.isCaravanRegistered ) {\r\n\t\tthis.regoNumber = this._getUserInputValueFor('caravanForm.caravanDetails.regoNumber');\r\n\t}\r\n\r\n\tif ( this.regoDetails ) {\r\n\t\tthis.vehicleOptionalEquipments = this.regoDetails.optionalEquipments ;\r\n\t}else if(this.caravanForm && this.caravanForm.caravanInfo){\r\n\t\tthis.regoDetails = this.caravanForm.caravanInfo;\r\n\t}\r\n\r\n\tthis.showLayupDiscount = (this.vehicleType == 'caravan' || this.vehicleType == 'campertrailer' || this.vehicleType == 'slideoncamper' || this.vehicleType == 'motorhome' || this.vehicleType == 'campervan') && this.isCaravanRegistered;\r\n\r\n\tthis.showOnsiteDiscount = (this.vehicleType == 'caravan' || this.vehicleType == 'campertrailer' || this.vehicleType == 'slideoncamper' || this.vehicleType == 'motorhome' || this.vehicleType == 'campervan') && !this.isCaravanRegistered;\r\n\r\n\r\n\t// this._getServiceResponseValueFor('quickQuote');\r\n\tif (selectedQuote ) {\r\n\t\tthis.annualCoverType = selectedQuote.getAnnual();\r\n\t\tthis.monthlyCoverType = selectedQuote.getMonthly();\r\n\t\tthis.quoteResult = selectedQuoteForPayment ;\r\n\t\tif ( this.quoteResult ) {\r\n\t\t\tthis.coverageOptions = this.quoteResult.coverageOptions ;\r\n\t\t\tif ( this.coverageOptions ) {\r\n\t\t\t\tthis.coverageOptionsToShow = this.coverageOptions.filter(function(op) {\r\n\t\t\t\t\treturn op.required === false && op.name !== 'QPCLayupCover' ;\r\n\t\t\t\t});\r\n\t\t\t\tthis.hasCoverageOptions = this.coverageOptionsToShow.length > 0 ;\r\n\t\t\t}\r\n\t\t\tthis.excess = this.quoteResult.excess ;\r\n\t\t\tthis.namedDriverExcess = findNamedDriverExcess() ;\r\n\t\t\tthis.excludedDrivers = findExcludedDrivers();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction findNamedDriverExcess() {\r\n\t\tvar namedDriverExcess = [],\r\n\t\t\tqr = selectedQuoteForPayment ? selectedQuoteForPayment.response : null ;\r\n\r\n\t\tif ( qr && qr.caravans ) {\r\n\t\t\tvar drivers = qr.caravans[0].drivers ;\r\n\t\t \tdrivers.forEach( function(driver) {\r\n\t\t \t\tif ( driver.driver\r\n\t\t \t\t\t&& driver.driver.calculatedExcess\r\n\t\t \t\t\t&& driver.driver.calculatedExcess > 0 ) {\r\n\t\t \t\t\t\tnamedDriverExcess.push({\r\n\t\t \t\t\t\t\tfirstName : driver.driver.person.firstName,\r\n\t\t \t\t\t\t\tlastName: driver.driver.person.lastName,\r\n\t\t \t\t\t\t\texcessValue : driver.driver.calculatedExcess,\r\n\t\t\t\t\t\t\tdob: driver.driver.dateOfBirth\r\n\t\t \t\t\t\t});\r\n\t\t \t\t}\r\n\t\t \t});\r\n\t\t}\r\n\r\n\t \treturn namedDriverExcess ;\r\n\t}\r\n\r\n\t/**\r\n\t* Excluded drivers\r\n\t*/\r\n\tfunction findExcludedDrivers() {\r\n\t\tvar excludedDrivers = [] ;\r\n\t\tif (selectedQuoteForPayment ) {\r\n\t\t\tvar quote = selectedQuoteForPayment.response ;\r\n\t\t\tquote.caravans[0].drivers.forEach(function(driver) {\r\n\t\t\t\tif ( driver.driverUsage == 'excluded')\r\n\t\t\t\t\texcludedDrivers.push(driver.driver.person) ;\r\n\t\t\t})\t;\r\n\t\t}\r\n\r\n\t\treturn excludedDrivers\r\n\t}\r\n\r\n\tthis.hasExcludedDrivers = function() {\r\n\t\treturn this.excludedDrivers && this.excludedDrivers.length > 0 ;\r\n\t}\r\n\r\n\t/** excess list to be displayed in the quote panel */\r\n\tthis.displayableExcessList = null;\r\n\r\n\tthis.getDisplayableExcess=function() {\r\n\t\tif ( ! this.excess )\r\n\t\t\treturn [] ;\r\n\r\n\t\tif ( ! this.displayableExcessList) {\r\n\t\t\tvar filterOut = ['voluntaryVehicleExcessOptions', 'voluntaryVehicleExcess', 'standardVehicleExcess'] ;\r\n\t\t\tthis.displayableExcessList = [] ;\r\n\r\n\t\t\tfor ( var key in this.excess) {\r\n\t\t\t\tif ( filterOut.indexOf(key) === -1)\r\n\t\t\t\t\tthis.displayableExcessList.push({ key : key, excessValue : this.excess[key] }) ;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.displayableExcessList ;\r\n\t}\r\n\r\n\r\n\r\n\tthis.drivers = [];\r\n\tthis.postCode = null;\r\n\tthis.campaignCode = null ;\r\n\tif (this.caravanForm) {\r\n\t\t//TODO: set regoNumber based on step 1 or step 4\r\n\r\n\t\t// vehicleDetails\r\n\t\tif (this.caravanForm.caravanDetails) {\r\n\t\t\tthis.primaryUse = this.caravanForm.caravanDetails.primaryUse;\r\n\t\t\tswitch (this.primaryUse) {\r\n\t\t\t\tcase 'commercial':\r\n\t\t\t\t\tthis.primaryUse += ' - ' + this.caravanForm.caravanDetails.commercialActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n\t\t\t\t\tthis.primaryUse += ' - ' + this.caravanForm.caravanDetails.businessActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( this.caravanForm.getStarted) {\r\n\t\t\tthis.personOrCompany = this.caravanForm.getStarted.personOrCompany;\r\n\t\t\tthis.policyStartDate = this.caravanForm.getStarted.policyStartDate;\r\n\t\t}\r\n\r\n\t\t// Main drivers & additional drivers\r\n\t\tthis.additionalDrivers = [];\r\n\r\n\t\tif (this.caravanForm.driver) {\r\n \t\tvar drivers=this.caravanForm.driver.drivers;\r\n \t\tif(drivers){\r\n\r\n\t\t\t\tthis.mainDriver = drivers[0];\r\n\r\n \t\t\tif(drivers.length>1){\r\n \t\t\tthis.additionalDrivers=drivers.splice(1,drivers.length);\r\n \t\t\t}\r\n \t\t}\r\n\t\t}\r\n\r\n\t\t// drivers\r\n\t\tif (this.mainDriver) {\r\n\t\t\tthis.drivers = [this.mainDriver];\r\n\t\t}\r\n\t\tif (this.additionalDrivers) {\r\n\t\t\tthis.drivers = this.drivers.concat(this.additionalDrivers);\r\n\t\t}\r\n\r\n\t\t// address\r\n\t\tvar aboutYourCaravan = this.caravanForm.aboutYourCaravan ;\r\n\t\tif ( aboutYourCaravan) {\r\n\t\t\tif (aboutYourCaravan.address ) {\r\n\t\t\t\tthis.address = aboutYourCaravan.address\t;\r\n\t\t\t\tthis.postCode = this.address.postalCode;\r\n\t\t\t\tthis.state = this.address.state.replace('AU_', '') ;\r\n\t\t\t}\r\n\t\t\tthis.searchType = aboutYourCaravan.searchType;\r\n\r\n\t\t\tif ( this.searchType == 'manually') {\r\n\t\t\t\tvar year = aboutYourCaravan.year,\r\n\t\t\t\t\tmake = aboutYourCaravan.make,\r\n\t\t\t\t\tmodel = aboutYourCaravan.model,\r\n\t\t\t\t\tbodyType = aboutYourCaravan.bodyType,\r\n\t\t\t\t\tberths = aboutYourCaravan.berths,\r\n\t\t\t\t\tweight = aboutYourCaravan.weight,\r\n\t\t\t\t\tcaravanLength = aboutYourCaravan.manualLength,\r\n\t\t\t\t\tlengthUnits = aboutYourCaravan.manualLengthUnits,\r\n\t\t\t\t\tcustomBuilt = aboutYourCaravan.customBuilt;\r\n\r\n\t\t\t\tthis.yearMakeModel = year + ', ' + make + ', ' + model+ ', ' + bodyType + ', ' + berths + ', ' + weight + ', ' + caravanLength + lengthUnits;\r\n\t\t\t} else if (this.regoDetails) {\r\n\t\t\t\tvar year = this.regoDetails.modelYear,\r\n\t\t\t\t\tmake = this.regoDetails.make,\r\n\t\t\t\t\tmodel = this.regoDetails.model;\r\n\r\n\t\t\t\tthis.yearMakeModel = year + ' ' + make + ' ' + model;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( this.caravanForm.promotionalCode ) {\r\n\t\t\tthis.campaignCode = this.caravanForm.promotionalCode.promotionalCode ;\r\n\t\t}\r\n\r\n\t\tif (this.caravanForm.mainPolicyHolderContact) {\r\n\t\t\tthis.mainPolicyHolder = this.caravanForm.mainPolicyHolderContact;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t// this.quoteId = this._getServiceResponseValueFor('service-name', 'quote.quoteId');\r\n\tthis.quoteId = null ;\r\n\tif ( quoteRequestRepository.getSelectedQuoteCredentials() )\r\n\t\tthis.quoteId = quoteRequestRepository.getSelectedQuoteCredentials().quoteID ;\r\n\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmPolicyHolder = this.mainDriver ? this.mainDriver.person : null;\r\n\tthis.gtmTransactionAffiliation = 'QBE Direct' ;\r\n\tthis.insuranceType = MODULE_INFO.insuranceType ;\r\n\tthis.productCode = MODULE_INFO.productCode ;\r\n\r\n}\r\n\n\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction CTPModel(MODULE_INFO, userInputRepository, serviceResponseRepository, Util) {\r\n\tvar self = this;\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmTransactionAffiliation = 'payments';\r\n}\r\n\n\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction HomeQuoteModel(\r\n\tMODULE_INFO,\r\n\tuserInputRepository,\r\n\tserviceResponseRepository,\r\n\tquoteOptions,\r\n\tquoteRequestRepository,\r\n\tUtil,\r\n\t$rootScope\r\n) {\r\n\tvar self = this;\r\n\r\n\tvar selectedQuote = quoteOptions.getSelectedQuoteResult();\r\n\tvar selectedQuoteForPayment = quoteOptions.getSelectedQuoteResultForPayment();\r\n\tvar selectedOffering = quoteOptions.getSelectedOffering();\r\n\r\n\tself.rootScope = $rootScope;\r\n\r\n\tself.maxSumInsured = 2000000;\r\n\t//value will come from quickQuote\r\n\tself.minSumInsured = 0;\r\n\r\n\t/**\r\n\t * Retrieves values from UserInputRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from UserInputRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getUserInputValueFor = function(dotSeperatedFieldPath) {\r\n\t\tvar userInput = userInputRepository.get();\r\n\t\treturn Util.findHierarchyStringInObject(\r\n\t\t\tuserInput,\r\n\t\t\tdotSeperatedFieldPath,\r\n\t\t\t\".\"\r\n\t\t);\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieves values from ServiceResponseRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from ServiceResponseRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getServiceResponseValueFor = function(\r\n\t\tserviceName,\r\n\t\tdotSeperatedFieldPath\r\n\t) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t};\r\n\r\n\t//retunr the home insurance need type : 'building_only'/'contents_only'/'building_and_contents'\r\n\tthis.getHomeNeedType = function() {\r\n\t\tif (\r\n\t\t\tthis.homeForm &&\r\n\t\t\tthis.homeForm.tellUsHowWeCanInsureYou &&\r\n\t\t\tthis.homeForm.tellUsHowWeCanInsureYou.coverNeeds\r\n\t\t) {\r\n\t\t\tvar building =\r\n\t\t\t\tthis.homeForm.tellUsHowWeCanInsureYou.coverNeeds.building ==\r\n\t\t\t\ttrue;\r\n\t\t\tvar content =\r\n\t\t\t\tthis.homeForm.tellUsHowWeCanInsureYou.coverNeeds.contents ==\r\n\t\t\t\ttrue;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (building && content) {\r\n\t\t\treturn \"building_and_contents\";\r\n\t\t} else if (building && !content) {\r\n\t\t\treturn \"building_only\";\r\n\t\t} else if (!building && content) {\r\n\t\t\treturn \"contents_only\";\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\r\n\tthis.getAge = function(dateString) {\r\n\t\tif (dateString) {\r\n\t\t\treturn moment().diff(moment(dateString, \"DD/MM/YYYY\"), \"years\");\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\r\n\tthis.homeHowIsHomeOccupied = function() {\r\n\t\tif (\r\n\t\t\tthis.homeForm &&\r\n\t\t\tthis.homeForm.tellUsAboutTheProperty &&\r\n\t\t\tthis.homeForm.tellUsAboutTheProperty.howIsHomeOccupied\r\n\t\t) {\r\n\t\t\treturn this.homeForm.tellUsAboutTheProperty.howIsHomeOccupied;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\r\n\tthis.showIsBuiltToCycloneStandards = function(cycloneParams) {\r\n\t\tif (cycloneParams[0] == \"19801989\") {\r\n\t\t\tvar cycloneRating = isNaN(cycloneParams[1]) ? 0 : cycloneParams[1];\r\n\t\t\tvar address = this._getServiceResponseValueFor(\"addressSearch\");\r\n\t\t\tif (address && address.enrichment && address.addressLine1) {\r\n\t\t\t\tif (address.enrichment.floodRisk.building) {\r\n\t\t\t\t\tvar cycloneRiskSeverity = parseInt(\r\n\t\t\t\t\t\taddress.enrichment.cycloneRisk.building\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (cycloneRiskSeverity >= cycloneRating) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t/*\r\n\t * Returns the list of avialble offerings based on the user selections\r\n\t */\r\n\tthis.getOfferings = function() {\r\n\t\t// this._getUserInputValueFor('formData.homeForm.tellUsAboutTheProperty.howIsHomeOccupied');\r\n\t\tvar homeOccupancy;\r\n\t\tvar buildingType;\r\n\t\tvar needs;\r\n\r\n\t\tif (this.homeForm && this.homeForm.tellUsAboutTheProperty) {\r\n\t\t\thomeOccupancy = this.homeForm.tellUsAboutTheProperty\r\n\t\t\t\t.howIsHomeOccupied;\r\n\t\t\tbuildingType = this.homeForm.tellUsAboutTheProperty.typeOfBuilding;\r\n\t\t\tneeds = this.homeForm.tellUsHowWeCanInsureYou.coverNeeds;\r\n\t\t} else {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\r\n\t\tvar offerings = _getOfferings(homeOccupancy, buildingType, needs, true);\r\n\r\n\t\treturn offerings;\r\n\t};\r\n\r\n\t//getOfferings is based on the exisitng portal\r\n\tfunction _getOfferings(\r\n\t\thomeOccupancy,\r\n\t\tbuildingType,\r\n\t\tneeds,\r\n\t\tneedRapidEstimate\r\n\t) {\r\n\t\t//logic from exsting portal\r\n\t\tvar offerings = [];\r\n\t\tif (\r\n\t\t\t(homeOccupancy === \"own_live\" ||\r\n\t\t\t\thomeOccupancy === \"rent_live\" ||\r\n\t\t\t\thomeOccupancy === \"own_holidayhome\") &&\r\n\t\t\t!(\r\n\t\t\t\tbuildingType === \"unit\" ||\r\n\t\t\t\tbuildingType === \"flat\" ||\r\n\t\t\t\tbuildingType === \"villa\" ||\r\n\t\t\t\tbuildingType === \"townhouse\"\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\tofferings.push(\"QPHStandardOffering\");\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push(\"QPHPrestigeOffering\");\r\n\t\t\t}\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === \"own_live\" ||\r\n\t\t\t\thomeOccupancy === \"rent_live\" ||\r\n\t\t\t\thomeOccupancy === \"own_holidayhome\") &&\r\n\t\t\t(buildingType === \"unit\" ||\r\n\t\t\t\tbuildingType === \"flat\" ||\r\n\t\t\t\tbuildingType === \"villa\" ||\r\n\t\t\t\tbuildingType === \"townhouse\") &&\r\n\t\t\tneeds.building\r\n\t\t) {\r\n\t\t\tofferings.push(\"QPHStandardOffering\");\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push(\"QPHPrestigeOffering\");\r\n\t\t\t}\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === \"own_live\" ||\r\n\t\t\t\thomeOccupancy === \"rent_live\" ||\r\n\t\t\t\thomeOccupancy === \"own_holidayhome\") &&\r\n\t\t\t(buildingType === \"unit\" ||\r\n\t\t\t\tbuildingType === \"flat\" ||\r\n\t\t\t\tbuildingType === \"villa\" ||\r\n\t\t\t\tbuildingType === \"townhouse\") &&\r\n\t\t\tneeds.contents\r\n\t\t) {\r\n\t\t\tofferings.push(\"QPHStrataContentsOffering\");\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push(\"QPHPrestigeOffering\");\r\n\t\t\t}\r\n\t\t} else if (\r\n\t\t\thomeOccupancy === \"own_rent_tenants\" ||\r\n\t\t\thomeOccupancy === \"own_rent_tenants_causalbasis\" ||\r\n\t\t\thomeOccupancy === \"property_used_hostel_or_guest\"\r\n\t\t) {\r\n\t\t\tofferings.push(\"QPHLandlordOffering\");\r\n\t\t}\r\n\t\treturn offerings;\r\n\t}\r\n\r\n\tthis.getSelectedOffering = function() {\r\n\t\treturn selectedOffering;\r\n\t};\r\n\r\n\tthis.address = {};\r\n\r\n\tthis.getCycleData = function() {\r\n\t\tif (this.homeForm && this.homeForm.cycleCover) {\r\n\t\t\treturn this.homeForm.cycleCover;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tthis.isByCompany = function() {\r\n\t\tif (this.homeForm && this.homeForm.letsGetStarted) {\r\n\t\t\treturn this.homeForm.letsGetStarted.personOrCompany == \"company\";\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t};\r\n\r\n\tthis.getinsuranceHistoryYear = function(insuranceHeldFor) {\r\n\t\tvar insuranceHeldForMapping = {\r\n\t\t\tnoPreviousInsurance: \"0\",\r\n\t\t\tlessThan1year: \"1\",\r\n\t\t\toneYear: \"1\",\r\n\t\t\ttwoYears: \"2\",\r\n\t\t\tthreeYears: \"3\",\r\n\t\t\tfourOrMoreYears: \"4\"\r\n\t\t};\r\n\t\tif (insuranceHeldForMapping[insuranceHeldFor]) {\r\n\t\t\treturn insuranceHeldForMapping[insuranceHeldFor];\r\n\t\t} else {\r\n\t\t\treturn \"1\";\r\n\t\t}\r\n\t};\r\n\r\n\tthis.isRapidEstimatePanelVisible = function() {\r\n\t\tvar address = this._getServiceResponseValueFor(\"addressSearch\");\r\n\t\tvar display = false;\r\n\t\tif (address && address.enrichment && address.addressLine1) {\r\n\t\t\t//address is available\r\n\t\t\tif (isLowRisk(address.enrichment)) {\r\n\t\t\t\tdisplay = true;\r\n\t\t\t} else {\r\n\t\t\t\t// console.log('--------------------------- no rapid estimate based on enrichment');\r\n\t\t\t\tdisplay = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn display;\r\n\t};\r\n\r\n\tthis.isBuildingFloodSafe = function() {\r\n\t\tvar address = this._getServiceResponseValueFor(\"addressSearch\");\r\n\t\tif (address && address.enrichment && address.addressLine1) {\r\n\t\t\tif (address.enrichment.floodRisk.building) {\r\n\t\t\t\tvar floodRiskSeverity = parseInt(\r\n\t\t\t\t\taddress.enrichment.floodRisk.building\r\n\t\t\t\t);\r\n\t\t\t\tif (floodRiskSeverity > 1) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//safe for 0 and 1\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.isInFloodZone = function() {\r\n\t\tvar address = this._getServiceResponseValueFor(\"addressSearch\");\r\n\t\tif (address && address.enrichment && address.addressLine1) {\r\n\t\t\tvar risk = address.enrichment;\r\n\t\t\t//check flood risk\r\n\t\t\tvar floodRiskSeverity = Math.max(\r\n\t\t\t\tparseInt(risk.floodRisk.building),\r\n\t\t\t\tparseInt(risk.floodRisk.content)\r\n\t\t\t);\r\n\t\t\t// var floodZoneAccuracy = risk.floodRisk.building.substr(2);\r\n\t\t\tif (floodRiskSeverity > 1) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\tthis.isSumInsuredInLowerRange = function(sumInsured) {\r\n\t\treturn (\r\n\t\t\tsumInsured <= self.minSumInsured * 1.75 &&\r\n\t\t\tsumInsured >= self.minSumInsured\r\n\t\t);\r\n\t};\r\n\r\n\tthis.isSumInsuredInUpperRange = function(sumInsured) {\r\n\t\treturn sumInsured > this.cordelInfo.upperBand;\r\n\t};\r\n\r\n\tfunction isLowRisk(risk) {\r\n\t\t//check cyclone risk\r\n\t\tvar cycloneRiskSeverity = Math.max(\r\n\t\t\tparseInt(risk.cycloneRisk.building),\r\n\t\t\tparseInt(risk.cycloneRisk.content)\r\n\t\t);\r\n\t\tif (cycloneRiskSeverity > 1) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t//check flood risk\r\n\t\tvar floodRiskSeverity = Math.max(\r\n\t\t\tparseInt(risk.floodRisk.building),\r\n\t\t\tparseInt(risk.floodRisk.content)\r\n\t\t);\r\n\t\tif (floodRiskSeverity > 59) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar floodZoneAccuracy = risk.floodRisk.building.substr(2);\r\n\t\tif (floodZoneAccuracy == \"A\" || floodZoneAccuracy == \"B\") {\r\n\t\t\t//is in zone\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t//check fire risk\r\n\t\tvar fireRiskSeverity = Math.max(\r\n\t\t\tparseInt(risk.fireRisk.building),\r\n\t\t\tparseInt(risk.fireRisk.content)\r\n\t\t);\r\n\t\tif (fireRiskSeverity > 59) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar fireZoneAccuracy = risk.fireRisk.building.substr(2);\r\n\t\tif (fireZoneAccuracy == \"A\" || fireZoneAccuracy == \"B\") {\r\n\t\t\t//is in zone\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tthis.email = this._getUserInputValueFor(\r\n\t\t\"homeForm.tellUsABitMore.yourEmailAddress\"\r\n\t)\r\n\t\t? this._getUserInputValueFor(\"homeForm.tellUsABitMore.yourEmailAddress\")\r\n\t\t: this._getUserInputValueFor(\"email\");\r\n\r\n\t// home form data\r\n\tthis.homeForm = this._getUserInputValueFor(\"homeForm\");\r\n\r\n\t// cover type\r\n\tthis.selectedQuote = selectedQuote;\r\n\tthis.selectedQuoteForPayment = selectedQuoteForPayment;\r\n\tthis.dwelling = null;\r\n\t// this._getServiceResponseValueFor('quickQuote');\r\n\tif (selectedQuote) {\r\n\t\tthis.annualCoverType = selectedQuote.getAnnual();\r\n\t\tthis.monthlyCoverType = selectedQuote.getMonthly();\r\n\t\t// this.fortnightlyCoverType = selectedQuote.getMonthly();\r\n\r\n\t\tthis.quoteResult = this.selectedQuoteForPayment; // selectedQuote.getQuoteResult();\r\n\t\tif (this.quoteResult) {\r\n\t\t\tthis.cordelInfo = this.quoteResult.cordelInfo;\r\n\t\t\tself.minSumInsured = Math.round(this.cordelInfo.lowerBand * 0.75);\r\n\r\n\t\t\tthis.excess = this.quoteResult.excess;\r\n\t\t\tthis.dwelling = this.quoteResult;\r\n\t\t\tthis.offering = this.quoteResult.offering;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.postCode = null;\r\n\tthis.campaignCode = null;\r\n\r\n\tif (this.homeForm) {\r\n\t\t// address\r\n\t\tvar aboutYourHome = this.homeForm.tellUsAboutTheProperty;\r\n\t\tif (aboutYourHome && aboutYourHome.address) {\r\n\t\t\tthis.address = aboutYourHome.address;\r\n\t\t\tthis.postCode = this.address.postalCode;\r\n\t\t\tthis.state = this.address.state;\r\n\t\t}\r\n\r\n\t\tif (this.homeForm.promotionalCode) {\r\n\t\t\tthis.campaignCode = this.homeForm.promotionalCode.promotionalCode;\r\n\t\t}\r\n\r\n\t\tif (this.homeForm.letsGetStarted) {\r\n\t\t\tthis.policyContactType = this.homeForm.letsGetStarted.personOrCompany;\r\n\t\t\tthis.policyStartDate = this.homeForm.letsGetStarted.startCoverDate;\r\n\r\n\t\t\tif (\r\n\t\t\t\tthis.policyContactType == \"person\" &&\r\n\t\t\t\tthis.homeForm.mainPolicyHolder\r\n\t\t\t)\r\n\t\t\t\tthis.policyContact = this.homeForm.mainPolicyHolder;\r\n\t\t\telse if (\r\n\t\t\t\tthis.policyContactType == \"contact\" &&\r\n\t\t\t\tthis.homeForm.aboutCompanyContact\r\n\t\t\t)\r\n\t\t\t\tthis.policyContact = this.this.homeForm.aboutCompanyContact;\r\n\t\t}\r\n\t}\r\n\r\n\t// this.quoteId = this._getServiceResponseValueFor('service-name', 'quote.quoteId');\r\n\tthis.quoteId = null;\r\n\tif (quoteRequestRepository.getSelectedQuoteCredentials())\r\n\t\tthis.quoteId = quoteRequestRepository.getSelectedQuoteCredentials().quoteID;\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmPolicyHolder = this.policyContact;\r\n\tthis.gtmTransactionAffiliation = \"QBE Direct\";\r\n\tthis.insuranceType = MODULE_INFO.insuranceType;\r\n\tthis.productCode = MODULE_INFO.productCode;\r\n}\r\n\n\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction PaymentsQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, Util) {\r\n\tvar self = this;\r\n\t\r\n\t/** Google Tag Manager data **/\t\r\n\tthis.gtmTransactionAffiliation = 'payments' ;\r\n}\r\n\n\"use strict\";\r\n\r\n/**\r\n * Stores quote data that can be used to:\r\n * - Display summary of quote\r\n * - Transform data for posting requests\r\n * - Transform data for responses\r\n *\r\n * @param {UserInputRepository} userInputRepository Passed in from services/config.js\r\n * @param {ServiceResponseRepository} serviceResponseRepository Passed in from services/config.js\r\n * @param {Util} Util Passed in from services/config.js\r\n * @constructor\r\n */\r\nfunction QuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util) {\r\n\tvar self = this;\r\n\r\n\tvar selectedQuote = quoteOptions.getSelectedQuoteResult();\r\n\tvar selectedQuoteForPayment = quoteOptions.getSelectedQuoteResultForPayment();\r\n\t/**\r\n\t * Retrieves values from UserInputRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from UserInputRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getUserInputValueFor = function (dotSeperatedFieldPath) {\r\n\t\tvar userInput = userInputRepository.get();\r\n\t\treturn Util.findHierarchyStringInObject(userInput, dotSeperatedFieldPath, '.');\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves values from ServiceResponseRepository\r\n\t * @param {String} dotSeperatedFieldPath Path to value to retrieve\r\n\t * @return {*} Value from ServiceResponseRepository to return\r\n\t * @private\r\n\t */\r\n\tthis._getServiceResponseValueFor = function (serviceName, dotSeperatedFieldPath) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates whether at least one driver in the last 4 years, has been charged or convicted of any driving offences\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_licenceRSDC = function () {\r\n\t\tif (this.drivers) {\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_licenceRSDC &&\r\n\t\t\t\t\tdriver._aggregator.markedForDelete !== true) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_chargedOrConvictedOffences = function () {\r\n\t\tif (this.drivers) {\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\tdriver._aggregator.markedForDelete !== true\r\n\t\t\t\t) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_fourYears_vehicleAccidentsClaims = function () {\r\n\t\tif (this.drivers) {\r\n\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\tdriver._aggregator.markedForDelete !== true) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tthis._driversHave_tenYears_chargedOrConvictedOffences = function () {\r\n\t\tif (this.drivers) {\r\n\r\n\t\t\tvar driversLength = this.drivers.length,\r\n\t\t\t\tatLeastOneDriverHas = false,\r\n\t\t\t\tdriver;\r\n\r\n\t\t\tfor (var i = 0; i < driversLength; i++) {\r\n\t\t\t\tdriver = this.drivers[i];\r\n\r\n\t\t\t\tif (driver.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\tdriver._aggregator.markedForDelete !== true) {\r\n\t\t\t\t\tatLeastOneDriverHas = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn atLeastOneDriverHas;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.isReplacementAvailable = function () {\r\n\r\n\t\tvar selectedCar = serviceResponseRepository.getLastResponseFrom('regoSearch')\r\n\t\tif (selectedCar && selectedCar.modelYear) {\r\n\t\t\tvar modelAge = new Date().getFullYear() - selectedCar.modelYear;\r\n\t\t\treturn (modelAge <= 2);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tthis.getValidReplacementMonths = function (whenDidYouBuyYear) {\r\n\t\tif (!this.replacementMonths)\r\n\t\t\tthis.replacementMonths = {};\r\n\r\n\t\tif (!this.replacementMonths[whenDidYouBuyYear]) {\r\n\t\t\tif (!whenDidYouBuyYear) {\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\r\n\t\t\tvar monthOptions = moment.months().map(\r\n\t\t\t\tfunction (month, index) {\r\n\t\t\t\t\tvar monthIndex = index + 1;\r\n\t\t\t\t\t//add leading zero\r\n\t\t\t\t\tmonthIndex = (monthIndex > 9) ? ('' + monthIndex) : ('0' + monthIndex);\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\t'label': month,\r\n\t\t\t\t\t\t'value': monthIndex\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\r\n\t\t\t//split month based on year\r\n\t\t\tvar yearsOld = moment().year() - whenDidYouBuyYear;\r\n\t\t\tif (yearsOld == 0) {\r\n\t\t\t\tmonthOptions = monthOptions.splice(0, moment().month() + 1);\r\n\t\t\t} else if (yearsOld > 1) {\r\n\t\t\t\tmonthOptions = monthOptions.splice(moment().month());\r\n\t\t\t}\r\n\t\t\tthis.replacementMonths[whenDidYouBuyYear] = monthOptions;\r\n\t\t}\r\n\r\n\t\treturn this.replacementMonths[whenDidYouBuyYear];\r\n\t}\r\n\r\n\tthis.getValidReplacementYears = function () {\r\n\t\tif (!this.replacementYears) {\r\n\t\t\tvar yearOptions = [];\r\n\t\t\t//get start year by subtracting 2 years\r\n\t\t\tvar startYear = moment().subtract(2, 'years').year();\r\n\t\t\tvar currentYear = moment().year();\r\n\t\t\tfor (var i = startYear; i <= currentYear; i++) {\r\n\t\t\t\tyearOptions.push({\r\n\t\t\t\t\t'label': i,\r\n\t\t\t\t\t'value': i\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tthis.replacementYears = yearOptions;\r\n\t\t}\r\n\r\n\t\treturn this.replacementYears;\r\n\t}\r\n\r\n\tthis.email = this._getUserInputValueFor('vehicleForm.tellUsABitMore.yourEmailAddress') ? this._getUserInputValueFor('vehicleForm.tellUsABitMore.yourEmailAddress') : this._getUserInputValueFor('email');\r\n\r\n\t// vehicle form data\r\n\tthis.vehicleForm = this._getUserInputValueFor('vehicleForm');\r\n\r\n\t// cover type\r\n\tthis.selectedQuote = selectedQuote;\r\n\tthis.selectedQuoteForPayment = selectedQuoteForPayment;\r\n\t// this._getServiceResponseValueFor('quickQuote');\r\n\tif (selectedQuote) {\r\n\t\tthis.annualCoverType = selectedQuote.getAnnual();\r\n\t\tthis.monthlyCoverType = selectedQuote.getMonthly();\r\n\t\t// this.fortnightlyCoverType = selectedQuote.getMonthly();\r\n\r\n\t\tthis.quoteResult = this.selectedQuoteForPayment; // selectedQuote.getQuoteResult();\r\n\t\tif (this.quoteResult) {\r\n\t\t\tthis.coverageOptions = this.quoteResult.coverageOptions;\r\n\t\t\tif (this.coverageOptions) {\r\n\t\t\t\tthis.coverageOptionsToShow = this.coverageOptions.filter(function (op) {\r\n\t\t\t\t\treturn op.required === false;\r\n\t\t\t\t});\r\n\t\t\t\tthis.hasCoverageOptions = this.coverageOptionsToShow.length > 0;\r\n\t\t\t}\r\n\t\t\tthis.excess = this.quoteResult.excess;\r\n\t\t\tthis.namedDriverExcess = findNamedDriverExcess();\r\n\t\t}\r\n\t}\r\n\r\n\t/** excess list to be displayed in the quote panel */\r\n\tthis.displayableExcessList = null;\r\n\r\n\tthis.getDisplayableExcess = function () {\r\n\t\tif (!this.excess)\r\n\t\t\treturn [];\r\n\r\n\t\tif (!this.displayableExcessList) {\r\n\t\t\tvar filterOut = ['voluntaryVehicleExcessOptions', 'voluntaryVehicleExcess', 'standardVehicleExcess'];\r\n\t\t\tthis.displayableExcessList = [];\r\n\r\n\t\t\tfor (var key in this.excess) {\r\n\t\t\t\tif (filterOut.indexOf(key) === -1)\r\n\t\t\t\t\tthis.displayableExcessList.push({\r\n\t\t\t\t\t\tkey: key,\r\n\t\t\t\t\t\texcessValue: this.excess[key]\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.displayableExcessList;\r\n\t}\r\n\r\n\tfunction findNamedDriverExcess() {\r\n\t\tvar namedDriverExcess = [],\r\n\t\t\tqr = selectedQuoteForPayment ? selectedQuoteForPayment.response : null;\r\n\r\n\t\tif (qr && qr.vehicles) {\r\n\t\t\tvar drivers = qr.vehicles[0].drivers;\r\n\t\t\tdrivers.forEach(function (driver) {\r\n\t\t\t\tif (driver.driver &&\r\n\t\t\t\t\tdriver.driver.calculatedExcess &&\r\n\t\t\t\t\tdriver.driver.calculatedExcess > 0) {\r\n\t\t\t\t\tnamedDriverExcess.push({\r\n\t\t\t\t\t\tfirstName: driver.driver.person.firstName,\r\n\t\t\t\t\t\tlastName: driver.driver.person.lastName,\r\n\t\t\t\t\t\texcessValue: driver.driver.calculatedExcess,\r\n\t\t\t\t\t\tdob: driver.driver.person.dateOfBirth\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn namedDriverExcess;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Excluded drivers\r\n\t */\r\n\tvar savedQuoteResult = this._getServiceResponseValueFor('quote');\r\n\tif (savedQuoteResult && savedQuoteResult.vehicles && savedQuoteResult.vehicles[0]) {\r\n\t\t/** excluded driver condition to be correctly diagnosed here */\r\n\t\t// this.excludedDrivers = this.quoteResult.excludedDrivers ;\r\n\t\tvar excludedDrivers = [];\r\n\r\n\t\tsavedQuoteResult.vehicles[0].drivers.forEach(function (driver) {\r\n\t\t\tif (driver.driverUsage == 'excluded')\r\n\t\t\t\texcludedDrivers.push(driver.driver.person);\r\n\t\t})\r\n\t\tthis.excludedDrivers = excludedDrivers;\r\n\t}\r\n\r\n\r\n\tthis.hasExcludedDrivers = function () {\r\n\t\treturn this.excludedDrivers && this.excludedDrivers.length > 0;\r\n\t}\r\n\r\n\tthis.drivers = [];\r\n\tthis.postCode = null;\r\n\tthis.campaignCode = null;\r\n\tif (this.vehicleForm) {\r\n\t\t//TODO: set regoNumber based on step 1 or step 4\r\n\r\n\t\t// vehicleDetails\r\n\t\tif (this.vehicleForm.carDetails) {\r\n\t\t\tthis.carDetailsUsage = this.vehicleForm.carDetails.primaryCarUse;\r\n\t\t\tswitch (this.carDetailsUsage) {\r\n\t\t\t\tcase 'commercial':\r\n\t\t\t\t\tthis.carDetailsUsage += ' - ' + this.vehicleForm.carDetails.commercialActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n\t\t\t\t\tthis.carDetailsUsage += ' - ' + this.vehicleForm.carDetails.businessActivityType.label;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.vehicleForm.getStarted && this.vehicleForm.getStarted.personOrCompany) {\r\n\t\t\tthis.policyStartDate = this.vehicleForm.getStarted.policyStartDate,\r\n\t\t\t\tthis.personOrCompany = this.vehicleForm.getStarted.personOrCompany;\r\n\t\t}\r\n\r\n\t\t// Main drivers & additional drivers\r\n\t\tthis.additionalDrivers = [];\r\n\r\n\t\tif (this.vehicleForm.driver) {\r\n\t\t\tvar drivers = this.vehicleForm.driver.drivers;\r\n\t\t\tif (drivers) {\r\n\r\n\t\t\t\tthis.mainDriver = drivers[0];\r\n\r\n\t\t\t\tif (drivers.length > 1) {\r\n\t\t\t\t\tthis.additionalDrivers = drivers.splice(1, drivers.length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// drivers\r\n\t\tif (this.mainDriver) {\r\n\t\t\tthis.drivers = [this.mainDriver];\r\n\t\t\tthis.noClaimBonus = this.mainDriver.noClaimBonus;\r\n\t\t}\r\n\t\tif (this.additionalDrivers) {\r\n\t\t\tthis.drivers = this.drivers.concat(this.additionalDrivers);\r\n\t\t}\r\n\r\n\t\t// address\r\n\t\tvar aboutYourCar = this.vehicleForm.aboutYourCar;\r\n\t\tif (aboutYourCar && aboutYourCar.address) {\r\n\t\t\tthis.address = aboutYourCar.address;\r\n\t\t\tthis.postCode = this.address.postalCode;\r\n\t\t\tthis.state = this.address.state;\r\n\t\t}\r\n\r\n\t\tif (this.vehicleForm.promotionalCode) {\r\n\t\t\tthis.campaignCode = this.vehicleForm.promotionalCode.promotionalCode;\r\n\t\t}\r\n\r\n\t\t// rego details\r\n\t\tthis.regoDetails = this._getServiceResponseValueFor('regoSearch');\r\n\r\n\t\tif (aboutYourCar && aboutYourCar.regoDetails) {\r\n\t\t\tthis.regoNumber = aboutYourCar.regoDetails.regoNumber;\r\n\t\t} else if (this.vehicleForm.tellUsYourRegoNumber &&\r\n\t\t\tthis.vehicleForm.tellUsYourRegoNumber.regoNumber && !this.vehicleForm.aboutYourCar.retrievedQuoteRego) {\r\n\t\t\tthis.regoNumber = this.vehicleForm.tellUsYourRegoNumber.regoNumber;\r\n\t\t}\r\n\r\n\t\tif (this.regoDetails) {\r\n\t\t\tthis.vehicleOptionalEquipments = this.regoDetails.optionalEquipments;\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\t// this.quoteId = this._getServiceResponseValueFor('service-name', 'quote.quoteId');\r\n\tthis.quoteId = null;\r\n\tif (quoteRequestRepository.getSelectedQuoteCredentials())\r\n\t\tthis.quoteId = quoteRequestRepository.getSelectedQuoteCredentials().quoteID;\r\n\r\n\r\n\t/** Google Tag Manager data **/\r\n\tthis.gtmPolicyHolder = this.mainDriver ? this.mainDriver.person : null;\r\n\tthis.gtmTransactionAffiliation = 'QBE Direct';\r\n\tthis.insuranceType = MODULE_INFO.insuranceType;\r\n\tthis.productCode = MODULE_INFO.productCode;\r\n}\r\n\nfunction JsonMapper(responseRepository) {\r\n\r\n\t/**\r\n\t * places @value on a @source, in the spot indicated by @valueStringArray.\r\n\t * @mappedValueStarIndices is used for conversion callbacks and @isDefault determines if the value\r\n\t * is to be placed only if no current value exists.\r\n\t */\r\n\tfunction mapValues(source, valueStringArray, value, mappedValueStarIndices, isDefault) {\r\n\t\tvar lastKey = valueStringArray.pop();\r\n\t\tfor (var i = 0 ; i < valueStringArray.length; i++) {\r\n\t\t\tif ( ! source ) return null ;\r\n\r\n\t\t\tvar key = valueStringArray[i], nextKey = valueStringArray[i+1] ;\r\n\r\n\t\t\tif ( key === '*') {\r\n\t\t\t\tfor (var j = 0 ; j < source.length ; j++ ) {\r\n\t\t\t\t\tvar vsa = valueStringArray.slice(i+1, valueStringArray.length) ;\r\n\t\t\t\t\tvsa.push(lastKey);\r\n\t\t\t\t\tvar startIndices = mappedValueStarIndices ? mappedValueStarIndices: [];\r\n\t\t\t\t\tmapValues(source[j], vsa , value, startIndices.concat([j]), isDefault) ;\r\n\t\t\t\t}\r\n\t\t\t} else if (key.indexOf('*[') == 0 && key.indexOf(']') == (key.length - 1)) {\r\n\t\t\t\tvar propetyName = key.substring(2,key.length - 1);\r\n\t\t\t\tfor (var j = 0 ; j < source.length ; j++ ) {\r\n\t\t\t\t\tvar vsa = valueStringArray.slice(i+1, valueStringArray.length) ;\r\n\t\t\t\t\tvsa.push(lastKey);\r\n\t\t\t\t\tvar startIndices = mappedValueStarIndices ? mappedValueStarIndices: [];\r\n\t\t\t\t\t//get propety value and append to startIndices like this [name=value]\r\n\t\t\t\t\tvar propetyVal = source[j][propetyName];\r\n\t\t\t\t\tvar indiceValue = '['+propetyName+'='+propetyVal+']';\r\n\t\t\t\t\tmapValues(source[j], vsa , value, startIndices.concat([j + indiceValue]), isDefault) ;\r\n\t\t\t\t}\r\n\t\t\t} else if ( source[key] === undefined ) {\r\n\t\t\t\tcreateChildProperty(source, key, nextKey);\r\n\t\t\t}\r\n\r\n\t\t\tsource = source[key] ;\r\n\t\t}\r\n\r\n\t\tif ( ! source ) {\r\n\t\t\treturn ;\r\n\t\t}\r\n\r\n\t\tif ( ! (isDefault && ( source[lastKey] !== null && source[lastKey] !== undefined))) {\r\n\t\t\tvar val = isFunction(value) ? value(source[lastKey], mappedValueStarIndices) : value;\r\n\t\t\tsource[lastKey] = val;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction createChildProperty(target, key, nextKey) {\r\n\t\tif ( nextKey === '*' ) {\r\n\t\t\ttarget[key] = [];\r\n\t\t}\r\n\t\telse if ( Number.isNumeric(nextKey)){\r\n\t\t\ttarget[key] = [];\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttarget[key] = {} ;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction fetchValue(value, requestData) {\r\n\t\tif ( isFunction(value) )\r\n\t\t\treturn value() ;\r\n\r\n\t\tif ( typeof(value) !== 'string')\r\n\t\t\treturn value;\r\n\r\n\t\tif ( value.indexOf('=') === -1 )\r\n\t\t\treturn value ;\r\n\r\n\t\tvar valueStringArray = value.substring(1, value.length).split('.');\r\n\t\tvar sourceIdentifier = valueStringArray[0];\r\n\t\tvar source = getSource(sourceIdentifier, requestData);\r\n\r\n\t\tvalueStringArray.shift() ; /** first element in the array is the source identifier */\r\n\t\tfor (var i = 0 ; i < valueStringArray.length; i++) {\r\n\t\t\tif ( ! source ) return null ;\r\n\t\t\tsource = source[valueStringArray[i]] ;\r\n\t\t}\r\n\r\n\t\treturn source;\r\n\t}\r\n\r\n\tfunction getSource(source, requestData) {\r\n\t\tif ( source == '_input' )\r\n\t\t\treturn requestData;\r\n\r\n\t\tsource = source.substring(1, source.length); // remove _\r\n\t\treturn responseRepository.getLastResponseFrom(source);\r\n\t}\r\n\r\n\r\n\tfunction transform(requestData, mapping) {\r\n\t\tvar inflated = requestData ;\r\n\t\tfor (var key in mapping) {\r\n\t\t\tvalue = mapping[key];\r\n\t\t\tmapValues(requestData, key.split('.'), function() {\r\n\t\t\t\treturn fetchValue(value, requestData)\r\n\t\t\t} ) ;\r\n\t\t}\r\n\r\n\t\treturn inflated;\r\n\t}\r\n\r\n\tfunction convert(requestData, mapping) {\r\n\t\tfor (var key in mapping) {\r\n\t\t\tconverterFn = mapping[key];\r\n\t\t\tmapValues(requestData, key.split('.'), converterFn) ;\r\n\t\t}\r\n\r\n\t\treturn requestData;\r\n\t}\r\n\r\n\tfunction setDefaultValues(requestData, mapping) {\r\n\t\tfor (var key in mapping) {\r\n\t\t\tvalue = mapping[key];\r\n\t\t\tmapValues(requestData, key.split('.'), value, null, true) ;\r\n\t\t}\r\n\r\n\t\treturn requestData;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform,\r\n\t\tconvert: convert,\r\n\t\tsetDefault: setDefaultValues\r\n\t}\r\n}\r\n\nfunction MergedQuoteResultModel(Util, coverType) {\r\n\tvar quoteResults = {} ;\r\n\r\n\tfunction addQuoteResult(quote) {\r\n\t\tvar freq = paymentFrequencyMapping[quote.paymentFrequency] ;\r\n\t\tquoteResults[freq] = quote ;\r\n\t}\r\n\r\n\tfunction getQuoteResult(paymentFrequency) {\r\n\t\tpaymentFrequency = paymentFrequencyMapping[paymentFrequency] || paymentFrequency ; \r\n\t\tif ( ! quoteResults[paymentFrequency] )\r\n\t\t\tquoteResults[paymentFrequency] = forgeQuoteResult(paymentFrequency) ;\r\n\r\n\t\treturn quoteResults[paymentFrequency] ;\r\n\t}\r\n\r\n\tvar paymentFrequencyMapping = {\r\n\t\teveryyear : 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\teveryotherweek: 'fortnightly'\r\n\t}\r\n\r\n\tvar premiumConstant = {\r\n\t\tmonthly : 1.07 / 12 ,\r\n\t\tfortnightly : 1.07 / 27.5 ,\r\n\t}\r\n\r\n\tfunction forgeQuoteResult(paymentFrequency) {\r\n\t\tvar qr = Util.deepClone(quoteResults.annual) ;\r\n\t\tqr.paymentFrequency = paymentFrequency ;\r\n\t\tqr.isForgedPremium = true ;\r\n\t\tif ( qr.quoteResult && qr.quoteResult.totalPremium) {\r\n\t\t\tqr.quoteResult.totalPremium = qr.quoteResult.totalPremium * premiumConstant[paymentFrequency] * 12 ;\r\n\t\t\tqr.paymentPlan = qr.paymentPlan || {} ; \r\n\t\t\tqr.paymentPlan.installment= qr.quoteResult.totalPremium * premiumConstant[paymentFrequency]; \r\n\t\t}\r\n\r\n\t\treturn qr;\r\n\t}\r\n\r\n\treturn {\r\n\t\taddQuoteResult: addQuoteResult,\r\n\t\tgetQuoteResult: getQuoteResult,\r\n\t\tgetAnnual: function() {return getQuoteResult('annual')},\r\n\t\tgetMonthly: function() {return getQuoteResult('monthly')},\r\n\t\tgetFortnightly: function() {return getQuoteResult('fortnightly')},\r\n\t}\r\n}\r\n\nfunction PortalServiceWrapper(\r\n\tguideWireService,\r\n\tquoteRequestRepository,\r\n\tserviceResponseRepository,\r\n\tretrieveSavedQuoteResponseTransformer,\r\n\tquoteServiceResponseTransformer,\r\n\tquoteOptions) {\r\n\r\n\tfunction updateQuote(userInput) {\r\n\t\treturn quoteRequestRepository.update(userInput);\r\n\t}\r\n\r\n\tfunction getLastRequest() {\r\n\t\treturn quoteRequestRepository.getLastRequest();\r\n\t}\r\n\r\n\tfunction getLastResponse(serviceName) {\r\n\t\treturn serviceResponseRepository.getLastResponseFrom(serviceName);\r\n\t}\r\n\r\n\r\n\tfunction handleSaveQuoteResponse(resp) {\r\n\t\tvar data = resp.data;\r\n\t\tif (data.error) {\r\n\t\t\tvoid 0;\r\n\t\t\tthrow data.error;\r\n\t\t}\r\n\t\tserviceResponseRepository.update('quote', data);\r\n\t\tquoteRequestRepository.updateQuoteCredentials(resp);\r\n\t\treturn resp;\r\n\t}\r\n\r\n\tfunction saveQuote(paymentOption, params) {\r\n\t\tvar qr = quoteRequestRepository.getSaveQuoteRequest(paymentOption);\r\n\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\tvar qq = guideWireService.saveQuote(qr, credentials, params);\r\n\t\tqq.then(function (resp) {\r\n\t\t\treturn handleSaveQuoteResponse(resp);\r\n\t\t});\r\n\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tvar quickQuoteParams = {\r\n\t\trating: 'boolean',\r\n\t\tcheckUWQuote: 'boolean',\r\n\t\tcheckUWBind: 'boolean',\r\n\t\truleSet: 'string'\r\n\t};\r\n\r\n\tfunction getQuoteParams(rules) {\r\n\t\treturn {\r\n\t\t\trating: rules.price,\r\n\t\t\tcheckUWQuote: rules.quote,\r\n\t\t\tcheckUWBind: rules.purchase,\r\n\t\t\truleSet: rules.ruleSet\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handleQuickQuoteResponse(resp) {\r\n\t\tvar data = resp.data;\r\n\t\tif (data.error) {\r\n\t\t\tvoid 0;\r\n\t\t\tthrow data.error;\r\n\t\t}\r\n\r\n\t\tquoteResults = quoteServiceResponseTransformer.transform(data);\r\n\t\tserviceResponseRepository.update('quickQuote', quoteResults);\r\n\t\tquoteOptions.setAvailableQuoteResults(quoteResults);\r\n\t\tupdateSelectedCoverTypeIfNoLongerAvailableIn(quoteResults);\r\n\t\treturn resp;\r\n\t}\r\n\r\n\tfunction updateSelectedCoverTypeIfNoLongerAvailableIn(quoteResults) {\r\n\t\tif (!quoteOptions.getSelectedQuoteResult()) {\r\n\t\t\tvoid 0;\r\n\t\t\tquoteOptions.setDefaultCoverType();\r\n\t\t\tif (!quoteOptions.getSelectedQuoteResult()) {\r\n\t\t\t\tthrow 'No cover is available';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//type is 'bike' or 'caravan'\r\n\tfunction checkEmbargo(postcode, type) {\r\n\t\treturn guideWireService.checkEmbargo(postcode, type).then(function(resp) {\r\n\t\t\treturn (resp \r\n\t\t\t\t&& resp.data \r\n\t\t\t\t&& resp.data.embargoes \r\n\t\t\t\t&& resp.data.embargoes.length > 0);\r\n\t\t}).catch(function (err) {\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\r\n\tfunction getQuickQuote(permutations, rules, updateSelectedCoverType) {\r\n\t\tvar params = getQuoteParams(rules);\r\n\t\tif (updateSelectedCoverType || !permutations.coverTypes) {\r\n\t\t\tpermutations.coverTypes = [quoteOptions.getSelectedCoverType()];\r\n\t\t}\r\n\t\tvar multiQuoteRequest = quoteRequestRepository.splitQuotes(permutations);\r\n\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\tvar qq = guideWireService.getQuickQuote(multiQuoteRequest, params, credentials);\r\n\t\tqq.then(function (resp) {\r\n\t\t\treturn handleQuickQuoteResponse(resp);\r\n\t\t}).catch(function (err) {\r\n\t\t\treturn err;\r\n\t\t});\r\n\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction triggerGoalSaveQuote() {\t\t\r\n\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\tif (credentials && credentials.quoteID) {\r\n\t\t\tvar marketingAuto = window.marketingAutomations;\r\n\t\t\tvar maCreateQuote = (marketingAuto && marketingAuto.createQuote) ? marketingAuto.createQuote : undefined;\r\n\t\t\tvar request = quoteRequestRepository.getQuoteTriggerRequest();\r\n\t\t\trequest.QuoteId = credentials.quoteID;\r\n\t\t\trequest.QuoteStatus = \"Created\";\r\n\t\t\trequest.GoalId = (maCreateQuote) ? maCreateQuote.GoalId : '';\r\n\t\t\trequest.Source = (maCreateQuote) ? maCreateQuote.Source : '';\r\n\t\t\trequest.ChannelId = (maCreateQuote) ? maCreateQuote.ChannelId : '';\r\n\t\t\trequest.EventId = (maCreateQuote) ? maCreateQuote.EventId : '';\r\n\t\t\tif (request.GoalId && request.EventId) {\t\t\t\t\r\n\t\t\t\tguideWireService.triggerGoal(request);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction triggerGoalCompleteQuote() {\r\n\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\tif (credentials && credentials.quoteID) {\r\n\t\t\tvar marketingAuto = window.marketingAutomations;\r\n\t\t\tvar maCompleteQuote = (marketingAuto && marketingAuto.completeQuote) ? marketingAuto.completeQuote : undefined;\r\n\t\t\tvar request = quoteRequestRepository.getQuoteTriggerRequest();\r\n\t\t\trequest.QuoteId = credentials.quoteID;\r\n\t\t\trequest.QuoteStatus = \"Completed\";\r\n\t\t\trequest.GoalId = (maCompleteQuote) ? maCompleteQuote.GoalId : '';\r\n\t\t\trequest.Source = (maCompleteQuote) ? maCompleteQuote.Source : '';\r\n\t\t\trequest.ChannelId = (maCompleteQuote) ? maCompleteQuote.ChannelId : '';\r\n\t\t\trequest.EventId = (maCompleteQuote) ? maCompleteQuote.EventId : '';\r\n\r\n\t\t\tif (request.GoalId && request.EventId) {\t\t\t\t\r\n\t\t\t\tguideWireService.triggerGoal(request);\r\n\t\t\t}\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tfunction testQuoteDecline(declineQuoteOptions) {\r\n\t\tif (declineQuoteOptions) {\r\n\t\t\tvar params = getQuoteParams(declineQuoteOptions.rules);\r\n\t\t\tdeclineQuoteOptions.permutations.coverTypes = [quoteOptions.getSelectedCoverType()];\r\n\t\t\tvar multiQuoteRequest = quoteRequestRepository.splitQuotes(declineQuoteOptions.permutations);\r\n\t\t\tvar credentials = quoteRequestRepository.getSelectedQuoteCredentials();\r\n\t\t\tvar qq = guideWireService.getQuickQuote(multiQuoteRequest, params, credentials);\r\n\t\t\treturn qq.then(function (resp) {\r\n\t\t\t\treturn handleDeclineAndReferralResponse(resp);\r\n\t\t\t});\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tfunction handleDeclineAndReferralResponse(resp) {\r\n\t\tvar data = resp.data;\r\n\t\tif (data.error)\r\n\t\t\tthrow data.error;\r\n\r\n\t\tvar quote = data[0];\r\n\t\tif (quote.error)\r\n\t\t\tthrow quote.error;\r\n\r\n\t\tvar declineType = detectDeclineType(quote);\r\n\t\tif (declineType) {\r\n\t\t\tvar declineParams = {\r\n\t\t\t\tdeclineType: declineType,\r\n\t\t\t\tdeclineCodes: []\r\n\t\t\t};\r\n\r\n\t\t\tquote.quoteResult.uwIssues.forEach(function (element) {\r\n\t\t\t\tdeclineParams.declineCodes.push(element.typeCode);\r\n\t\t\t}, this);\r\n\r\n\t\t\tthrow declineParams;\r\n\t\t}\r\n\t\treturn resp;\r\n\t}\r\n\r\n\tfunction sendDeclineMessagesTOGTM(result) {\r\n\t\tvar dataLayer = window.dataLayer = window.dataLayer || [];\r\n\t\tvar trackingData = {\r\n\t\t\tevent: 'decline',\r\n\t\t\tdeclineCode: []\r\n\t\t}\r\n\r\n\t\tresult.uwIssues.forEach(function (element) {\r\n\t\t\ttrackingData.declineCode.push(element.typeCode);\r\n\t\t}, this);\r\n\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction detectDeclineType(quote) {\r\n\t\tif (quote.quoteResult) {\r\n\t\t\tif (quote.quoteResult.errors && quote.quoteResult.errors.messages) {\r\n\t\t\t\tvar message = quote.quoteResult.errors.messages.join('\\n') + '\\n';\r\n\t\t\t\treturn 'error';\r\n\t\t\t} else if (quote.quoteResult.decline && !quote.quoteResult.embargo) {\r\n\t\t\t\tsendDeclineMessagesTOGTM(quote.quoteResult);\r\n\t\t\t\treturn 'decline';\r\n\t\t\t} else if (quote.quoteResult.referral && !quote.quoteResult.embargo) {\r\n\t\t\t\treturn 'referral';\r\n\t\t\t} else if (quote.quoteResult.embargo) {\r\n\t\t\t\treturn 'embargo';\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction retrieveSavedQuote(quoteId, email) {\r\n\t\tvar qq = guideWireService.retrieveSavedQuote(quoteId, email)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tvar data = response.data;\r\n\t\t\t\tserviceResponseRepository.update('quote', data);\r\n\t\t\t\tquoteRequestRepository.updateQuoteCredentials(response);\r\n\t\t\t\treturn retrieveSavedQuoteResponseTransformer.transform(data);\r\n\t\t\t});\r\n\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction refreshAddress(address) {\r\n\t\tvar qq = guideWireService.refreshAddress(address);\r\n\t\tqq.then(function (resp) {\r\n\t\t\tserviceResponseRepository.update('addressSearch', resp.data);\r\n\t\t\treturn resp.data;\r\n\t\t})\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction refreshVehicleDetails(vgiId, effectiveDate) {\r\n\t\tvar qq = guideWireService.refreshVehicleDetails(vgiId, effectiveDate);\r\n\t\tqq.then(function (resp) {\r\n\t\t\tif (resp.data && resp.data.length > 0) {\r\n\t\t\t\tvar searchedData = resp.data[0];\r\n\t\t\t\tif (!searchedData.goodRetailPrice && searchedData.make) {\r\n\t\t\t\t\tsearchedData.goodRetailPrice = \"0\";\r\n\t\t\t\t}\r\n\t\t\t\tserviceResponseRepository.update('regoSearch', searchedData);\r\n\t\t\t\treturn searchedData;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t});\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction refreshCaravanDetails(vgiId, effectiveDate) {\r\n\t\tvar qq = guideWireService.refreshCaravanDetails(vgiId, effectiveDate);\r\n\t\tqq.then(function (resp) {\r\n\t\t\tif (resp.data && resp.data.length > 0) {\r\n\t\t\t\tserviceResponseRepository.update('regoSearch', resp.data[0]);\r\n\t\t\t\treturn resp.data;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t});\r\n\t\treturn qq;\r\n\t}\r\n\r\n\tfunction doesUserExist(email) {\r\n\t\treturn guideWireService.doesUserExist(email);\r\n\t}\r\n\r\n\treturn {\r\n\t\tupdateQuote: updateQuote,\r\n\t\tgetQuickQuote: getQuickQuote,\r\n\t\tsaveQuote: saveQuote,\r\n\t\ttriggerGoalSaveQuote: triggerGoalSaveQuote,\r\n\t\ttriggerGoalCompleteQuote: triggerGoalCompleteQuote,\r\n\t\ttestQuoteDecline: testQuoteDecline,\r\n\t\tgetLastRequest: getLastRequest,\r\n\t\tgetLastResponse: getLastResponse,\r\n\t\tretrieveSavedQuote: retrieveSavedQuote,\r\n\t\trefreshAddress: refreshAddress,\r\n\t\trefreshVehicleDetails: refreshVehicleDetails,\r\n\t\trefreshCaravanDetails: refreshCaravanDetails,\r\n\t\tdoesUserExist: doesUserExist,\r\n\t\tcheckEmbargo: checkEmbargo\r\n\t};\r\n}\r\n\n\"use strict\";\r\n\r\nfunction QuoteRequestRepository(Util,\r\n\tstorage,\r\n\tquoteOptions,\r\n\tquoteConfiguration,\r\n\tuserInputRepository,\r\n\tserviceResponseRepository,\r\n\tstructuredRequestTransformer,\r\n\tdefaultValueRequestTransformer,\r\n\tformatConverterTransformer,\r\n\tcleanRequestTransformer,\r\n\tsplitterRequestTransformer,\r\n\tpublicIDTransformer,\r\n\tpolicyHolderHandler,\r\n\tcoverTypeTransformer,\r\n\tcoverTypeResolver,\r\n\tcoverOfferingResolver,\r\n\ttriggerGoalTransformer\r\n) {\r\n\r\n\tvar userInput = null;\r\n\r\n\tvar lastQuoteResponse = null;\r\n\r\n\tfunction getUserInput() {\r\n\t\treturn userInput;\r\n\t}\r\n\r\n\tfunction updateQuoteRequest(input) {\r\n\t\tuserInput = Util.deepClone(input);\r\n\t}\r\n\r\n\tfunction getLastRequest() {\r\n\t\treturn quoteRequest;\r\n\t}\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat('portal:{0}-{1}', moduleName, Util.generateRandomString(15));\r\n\t}\r\n\r\n\tvar moduleNameMapping = {\r\n\t\t\"vehiclesDriver\": 'QPMVehicleDriver',\r\n\t\t\"vehiclesPolicyDriver\": 'QPMPolicyDriver',\r\n\t\t\"vehiclesPerson\": 'person',\r\n\t\t\"vehiclesDriverHistory\": \"QPMDriverHistory\",\r\n\t\t\"caravansDriver\": \"QPCVehicleDriver\",\r\n\t\t\"caravansPolicyDriver\": \"QPCPolicyDriver\",\r\n\t\t\"caravansPerson\": \"Person\",\r\n\t\t\"caravansDriverHistory\": \"QPCDriverHistory\",\r\n\t\t\"motorcyclesDriver\": 'QPYMotorcycleRider',\r\n\t\t\"motorcyclesPolicyDriver\": 'QPYPolicyRider',\r\n\t\t\"motorcyclesPerson\": 'Person',\r\n\t\t\"motorcyclesDriverHistory\": \"QPYRiderHistory\",\r\n\t};\r\n\r\n\t/**\r\n\t * Generates the json for the body of the QuickQuote request, by applying\r\n\t * quote specific transformations (based on the corresponding response received from the service).\r\n\t * @quotePermutations: a list of coverType, paymentFrequency and quoteType permutations to generate the final request for.\r\n\t */\r\n\tfunction splitQuotes(quotePermutations) {\r\n\t\tvar quoteRequest = transformQuickQuoteRequest();\r\n\t\tif (!quotePermutations.offerings)\r\n\t\t\tquotePermutations.offerings = [quoteOptions.getSelectedOffering()];\r\n\r\n\t\tvar quotes = splitterRequestTransformer.transform(quotePermutations, quoteRequest);\r\n\t\treturn quotes;\r\n\t}\r\n\r\n\tfunction getQuoteTriggerRequest() {\r\n\t\tvar quoteRequest = transformQuickQuoteRequest();\r\n\t\tvar request = triggerGoalTransformer.transform(quoteRequest);\r\n\t\treturn request;\r\n\t}\r\n\r\n\tfunction transformQuickQuoteRequest() {\r\n\t\tvar input = Util.deepClone(userInput);\r\n\t\tvar structuredRequest = structuredRequestTransformer.transform(input);\r\n\t\tvar valueSubbedRequest = defaultValueRequestTransformer.transform(structuredRequest, input);\r\n\t\tvar valueReformattedRequest = formatConverterTransformer.transform(valueSubbedRequest);\r\n\t\tvar cleanedRequest = cleanRequestTransformer.transform(valueReformattedRequest);\r\n\t\treturn cleanedRequest;\r\n\t}\r\n\r\n\t/**\r\n\t * Generate the json body of a Full Quote Request. This body is used for both PUT and POST requests\r\n\t * and sent to the guideWire service.\r\n\t */\r\n\tfunction getSaveQuoteRequest(paymentFrequency) {\r\n\t\tvar quoteRequest = transformSaveQuoteRequest();\r\n\t\tvar q = Util.deepClone(quoteRequest);\r\n\t\tq = Object.extend(q, {\r\n\t\t\tquoteType: 'Full',\r\n\t\t\tpaymentFrequency: paymentFrequency\r\n\t\t});\r\n\r\n\t\t//added firstAnchorDate and firstDayOfMonth for monthly and fortnightly payments\r\n\t\tif (quoteRequest.paymentForm && quoteRequest.paymentForm.paymentDetails && quoteRequest.paymentForm.paymentDetails.paymentStartDate) {\r\n\t\t\tvar dateString = quoteRequest.paymentForm.paymentDetails.paymentStartDate;\r\n\t\t\tq.firstAnchorDate = moment(dateString, 'DD/MM/YYYY').toISOString();\r\n\t\t\tq.firstDayOfMonth = moment(dateString, 'DD/MM/YYYY').format('D');\r\n\t\t}\r\n\t\tvar coverType = quoteOptions.getSelectedCoverType();\r\n\t\tvar offering = quoteOptions.getSelectedOffering(),\r\n\t\t\tofferingDescriptor = offering ? offering.descriptor : null;;\r\n\r\n\t\tq = coverTypeTransformer.transform(q, coverType.descriptor, offeringDescriptor);\r\n\r\n\t\tvar cred = getSelectedQuoteCredentials();\r\n\t\tif (cred) {\r\n\t\t\tq.quoteID = cred.quoteID;\r\n\t\t\tq.secret = cred.secret;\r\n\t\t}\r\n\r\n\t\tvar lastResponse = findMatchingQuoteResponse(coverType, offering);\r\n\r\n\t\t//check from last response if added driver has excluded usage\r\n\t\tif (lastResponse !== null) {\r\n\t\t\tvar productType = null;\r\n\r\n\t\t\tif (angular.isObject(lastResponse.vehicles)) productType = 'vehicles';\r\n\r\n\t\t\tif (angular.isObject(lastResponse.caravans)) productType = 'caravans';\r\n\r\n\t\t\t//applicable for motor products\r\n\t\t\tif (productType != null) {\r\n\t\t\t\tangular.forEach(lastResponse[productType][0].drivers, function (driver, index) {\r\n\t\t\t\t\tif (driver.driverUsage === 'excluded') {\r\n\t\t\t\t\t\tq[productType][0].drivers[index].driverUsage = 'excluded';\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tq = publicIDTransformer.transform(q, lastResponse);\r\n\r\n\t\tvar policyHolderhandledRequest = policyHolderHandler.handle(q, userInput);\r\n\r\n\t\treturn policyHolderhandledRequest;\r\n\t}\r\n\r\n\tfunction findMatchingQuoteResponse(coverType, offering) {\r\n\t\tvar lastQuote = serviceResponseRepository.getLastResponseFrom('quote');\r\n\t\tvar lastQuickQuote = serviceResponseRepository.getLastResponseFrom('quickQuote');\r\n\t\tif (lastQuote &&\r\n\t\t\tcoverTypeResolver.resolve(lastQuote) == coverType.descriptor &&\r\n\t\t\t(!coverOfferingResolver.resolve(lastQuote) || coverOfferingResolver.resolve(lastQuote) == offering.descriptor)\r\n\t\t) {\r\n\r\n\t\t\tif (angular.isObject(lastQuote.vehicles) && lastQuickQuote.length > 0) {\r\n\t\t\t\tlastQuote = addDriverFromQuickQuote(lastQuote, 'vehicles');\r\n\t\t\t}\r\n\r\n\t\t\tif (angular.isObject(lastQuote.caravans) && lastQuickQuote.length > 0) {\r\n\t\t\t\tlastQuote = addDriverFromQuickQuote(lastQuote, 'caravans');\r\n\t\t\t}\r\n\r\n\t\t\tif (angular.isObject(lastQuote.motorcycles) && lastQuickQuote.length > 0) {\r\n\t\t\t\tlastQuote = addDriverFromQuickQuote(lastQuote, 'motorcycles');\r\n\t\t\t}\r\n\r\n\t\t\treturn lastQuote;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction transformSaveQuoteRequest() {\r\n\t\tvar input = Util.deepClone(userInput);\r\n\t\tstructuredRequestTransformer.transform(input);\r\n\t\tvar valueSubbedRequest = defaultValueRequestTransformer.transform(null, input);\r\n\t\tvar valueReformattedRequest = formatConverterTransformer.transform(valueSubbedRequest);\r\n\t\tvar cleanedRequest = cleanRequestTransformer.transform(valueReformattedRequest);\r\n\t\treturn cleanedRequest;\r\n\t}\r\n\r\n\tfunction getCoverTypeSelector(quoteResponse) {\r\n\t\tif (!quoteResponse)\r\n\t\t\treturn null;\r\n\r\n\t\tvar coverTypeSelector = coverTypeResolver.resolve(quoteResponse);\r\n\t\tvar offering = coverOfferingResolver.resolve(quoteResponse);\r\n\t\tif (offering)\r\n\t\t\tcoverTypeSelector += '_' + offering;\r\n\r\n\t\treturn coverTypeSelector;\r\n\t}\r\n\r\n\t/**\r\n\t * @fullQuoteResponse : full HTTP response including body and headers\r\n\t */\r\n\tfunction updateQuoteCredentials(fullQuoteResponse) {\r\n\t\tvar respBody = fullQuoteResponse.data;\r\n\t\tvar headers = fullQuoteResponse.headers;\r\n\t\tvar quoteRequestCredentials = {};\r\n\t\t/** remove all quote credentials after quote type has changed\r\n\t\t\t\t\t\t\t\t\t\t\t\t to not confuse guidewire :) */\r\n\r\n\t\tvar coverTypeSelector = getCoverTypeSelector(respBody);\r\n\t\tif (coverTypeSelector) {\r\n\t\t\tquoteRequestCredentials[coverTypeSelector] = {\r\n\t\t\t\tquoteID: respBody.quoteID,\r\n\t\t\t\tsecret: respBody.secret\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar eyUserToken = headers('ey-user-token');\r\n\t\tstorage.setItem('eyUserToken', eyUserToken);\r\n\t\tstorage.setItem('quoteRequestCredentials', quoteRequestCredentials);\r\n\t\tif (respBody.productCode == \"QPMMotorVehicle\")\r\n\t\t\tstorage.setItem('selectedCoverType', quoteConfiguration.allCoverTypesByKey[coverTypeSelector]);\r\n\t}\r\n\r\n\tfunction getSelectedQuoteCredentials() {\r\n\t\tvar selectedCoverType = quoteOptions.getSelectedCoverType();\r\n\t\tvar quoteRequestCredentials = storage.getItem('quoteRequestCredentials');\r\n\t\tvar creds;\r\n\t\tif (selectedCoverType) {\r\n\t\t\tvar coverTypeSelector = quoteOptions.getCoverTypeSelector();\r\n\t\t\tcreds = quoteRequestCredentials[coverTypeSelector];\r\n\t\t\tvar eyUserToken = storage.getItem('eyUserToken');\r\n\t\t\tif (creds && eyUserToken)\r\n\t\t\t\tcreds.eyUserToken = eyUserToken;\r\n\t\t}\r\n\r\n\t\treturn creds;\r\n\t}\r\n\r\n\tfunction clearQuoteCredentials() {\r\n\t\tstorage.setItem('eyUserToken', null);\r\n\t\tstorage.setItem('quoteRequestCredentials', {});\r\n\t}\r\n\r\n\t/*\r\n\t * Function - adds new driver from quick quote before submitting to public id transformer\r\n\t * Params - quote, product type\r\n\t * Return - quote\r\n\t */\r\n\tfunction addDriverFromQuickQuote(lastQuote, productType) {\r\n\t\tvar driverType = productType == 'motorcycles' ? 'riders' : 'drivers';\r\n\t\tvar lastQuick = serviceResponseRepository.getLastResponseFrom('quickQuote');\r\n\t\tvar quickQuoteLength = lastQuick[0].response[productType][0][driverType].length;\r\n\t\tvar quoteLength = lastQuote[productType][0][driverType].length;\r\n\t\tvar lengthDiff = quickQuoteLength - quoteLength;\r\n\t\tvar quickQuoteItems = lastQuick[0].response[productType][0][driverType];\r\n\t\tvar quoteItems = lastQuote[productType][0][driverType];\r\n\r\n\t\tif (lengthDiff > 0) {\r\n\t\t\tvar startIndex = quickQuoteLength - lengthDiff;\r\n\t\t\tvar driver = productType + 'Driver';\r\n\t\t\tvar policyDriver = productType + 'PolicyDriver';\r\n\t\t\tvar person = productType + 'Person';\r\n\t\t\tvar driverHistory = productType + 'DriverHistory';\r\n\t\t\tvar driverType = productType == 'motorcycles' ? 'rider' : 'driver';\r\n\t\t\tvar historyType = productType == 'motorcycles' ? 'riderHistory' : 'driverHistory';\r\n\r\n\t\t\tfor (var i = startIndex; i < quickQuoteLength; i++) {\r\n\t\t\t\tquickQuoteItems[i].publicID = forgePublicId(moduleNameMapping[driver]);\r\n\t\t\t\tquickQuoteItems[i][driverType].publicID = forgePublicId(moduleNameMapping[policyDriver]);\r\n\t\t\t\tquickQuoteItems[i][driverType].person.publicID = forgePublicId(moduleNameMapping[person]);\r\n\r\n\t\t\t\tif (angular.isDefined(quickQuoteItems[i][driverType][historyType])) {\r\n\t\t\t\t\tvar driverHistory = quickQuoteItems[i][driverType][historyType];\r\n\r\n\t\t\t\t\tangular.forEach(driverHistory, function (history, index) {\r\n\t\t\t\t\t\thistory.publicID = forgePublicId(moduleNameMapping[driverHistory]);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tquoteItems.push(quickQuoteItems[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn lastQuote;\r\n\t}\r\n\r\n\treturn {\r\n\t\tupdate: updateQuoteRequest,\r\n\t\tgetLastRequest: getLastRequest,\r\n\t\tsplitQuotes: splitQuotes,\r\n\t\tgetQuoteTriggerRequest: getQuoteTriggerRequest,\r\n\t\tgetSaveQuoteRequest: getSaveQuoteRequest,\r\n\t\tupdateQuoteCredentials: updateQuoteCredentials,\r\n\t\tgetSelectedQuoteCredentials: getSelectedQuoteCredentials,\r\n\t\tclearQuoteCredentials: clearQuoteCredentials,\r\n\t\tgetUserInput: getUserInput,\r\n\t};\r\n}\r\n\nfunction QuoteResultModelBuilder(Util) {\r\n\tvar quoteResultsByType= {} ;\r\n\r\n\tfunction addQuoteResult(quoteResult) {\r\n\t\tvar quoteCoverIndicator = quoteResult.coverType;\r\n\t\tif ( quoteResult.offering )\r\n\t\t\tquoteCoverIndicator += '_' + quoteResult.offering ; \r\n\r\n\t\tif ( ! quoteResultsByType[quoteCoverIndicator] ) \r\n\t\t\tquoteResultsByType[quoteCoverIndicator] = new MergedQuoteResultModel(Util, quoteCoverIndicator);\r\n\r\n\t\tquoteResultsByType[quoteCoverIndicator].addQuoteResult(quoteResult) ; \r\n\t}\r\n\r\n\tfunction getMergedQuoteResults(quoteResults) {\r\n\t\treturn quoteResultsByType;\r\n\t}\r\n\r\n\tfunction clear() {\r\n\t\tquoteResultsByType = {}; \r\n\t}\r\n\r\n\treturn {\r\n\t\tclear: clear,\r\n\t\taddQuoteResult: addQuoteResult,\r\n\t\tgetMergedQuoteResults: getMergedQuoteResults,\r\n\t}\r\n}\r\n\nfunction QuoteServiceResponseTransformer(quoteResultModelBuilder, serviceResponseRepository, quoteResultModelFactory) {\r\n\r\n\tfunction transform(quoteResponses) {\r\n\t\tvar quoteResults = [] ;\r\n\t\tquoteResponses.forEach(function(response) {\r\n\t\t\t// if ( response.quoteResult && ! response.quoteResult.errors )\r\n\t\t\t// response.productCode\r\n\t\t\t// quoteResults.push(new QuoteResultModel(response));\r\n\t\t\tquoteResults.push(quoteResultModelFactory.newQuoteResultModel(response));\r\n\t\t});\r\n\r\n\t\tvar oldResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\tvar updatedQuoteResults = updateQuoteResults(quoteResults , oldResults) ;\r\n\t\tvar filteredQuoteResults = filterQuoteResults(updatedQuoteResults);\r\n\t\treturn filteredQuoteResults;\r\n\t}\r\n\r\n\tfunction updateQuoteResults(currentResults, oldResults) {\r\n\t\tif ( ! oldResults || oldResults.length == 0 )\r\n\t\t\treturn currentResults ;\r\n\r\n\t\tcurrentResults.forEach(function(cqr) {\r\n\t\t\tif ( cqr.isCoverAvailable ) {\r\n\t\t\t\taddOrUpdateQuoteResult(oldResults, cqr)\r\n\t\t\t} else {\r\n\t\t\t\toldResults = removeAllCoverTypeMatches(oldResults, cqr) ;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn oldResults ;\r\n\t}\r\n\r\n\tfunction addOrUpdateQuoteResult(oldResults, quoteResult) {\r\n\t\tvar matchingOldResult = findCompleteMatch(oldResults, quoteResult) ;\r\n\t\tif ( matchingOldResult ) {\r\n\t\t\tvar oldResultIndex = oldResults.indexOf(matchingOldResult) ;\r\n\t\t\toldResults[oldResultIndex] = quoteResult ;\r\n\t\t} else {\r\n\t\t\toldResults.push(quoteResult);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction removeAllCoverTypeMatches(oldResults, quoteResult) {\r\n\t\tvar partialMatches = findCoverTypeMatches(oldResults, quoteResult) ;\r\n\t\tif ( partialMatches ) {\r\n\t\t\toldResults = oldResults.filter(function(qr) {\r\n\t\t\t\treturn partialMatches.indexOf(qr) === -1 ;\r\n\t\t\t}) ;\r\n\t\t}\r\n\t\treturn oldResults;\r\n\t}\r\n\r\n\tfunction findCoverTypeMatches(oldResults, quoteResult) {\r\n\t\tvar matchingQuoteResponses = [] ;\r\n\t\toldResults.forEach(function(qr) {\r\n\t\t\tif ( qr.coverType == quoteResult.coverType\r\n\t\t\t&& (!qr.offering || qr.offering == quoteResult.offering) ){\r\n\t\t\t\tmatchingQuoteResponses.push(qr);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn matchingQuoteResponses;\r\n\t}\r\n\r\n\tfunction findCompleteMatch(oldResults, quoteResult) {\r\n\t\tvar matchingQuoteResponse = null ;\r\n\t\toldResults.some(function(qr) {\r\n\t\t\tif ( qr.coverType == quoteResult.coverType\r\n\t\t\t\t&& qr.paymentFrequency == quoteResult.paymentFrequency \r\n\t\t\t\t&& (!qr.offering || qr.offering == quoteResult.offering)\r\n\t\t\t\t){\r\n\t\t\t\tmatchingQuoteResponse = qr;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn matchingQuoteResponse;\r\n\t}\r\n\r\n\tfunction filterQuoteResults(quoteResults) {\r\n\t\tquoteResults = quoteResults.filter(function(qr) {\r\n\t\t\treturn qr.isCoverAvailable;\r\n\t\t})\r\n\r\n\t\treturn quoteResults ;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform,\r\n\t}\r\n}\r\n\n\"use strict\";\r\n\r\nfunction ServiceResponseRepository(storage) {\r\n\tfunction update(serviceName, response) {\r\n\t\t// var lastResponse = serviceResponses[serviceName] || {} ;\r\n\t\tvar serviceResponses = storage.getItem('service-response') || {} ; \r\n\t\tserviceResponses[serviceName] = response;\r\n\t\tstorage.setItem('service-response', serviceResponses) ;\r\n\t}\r\n\r\n\tfunction getLastResponseFrom(serviceName) {\r\n\t\tvar serviceResponses = storage.getItem('service-response') ;\r\n\t\treturn serviceResponses[serviceName] || null;\r\n\t}\r\n\r\n\treturn {\r\n\t\tupdate: update,\r\n\t\tgetLastResponseFrom: getLastResponseFrom\r\n\t};\r\n}\r\n\n'use strict' ;\r\n\r\nfunction SplitterRequestTransformer(Util, serviceResponseRepository, jsonMapper, publicIDTransformer, coverTypeTransformer) {\r\n\r\n\tfunction getQuoteResponseValue(qouteResponse, pathString) {\r\n\t\treturn Util.findHierarchyStringInObject(qouteResponse, pathString, '.') ;\r\n\t}\r\n\r\n\tfunction transform(quotePermutations, quoteRequest) {\r\n\t\tvar quoteResponses = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\tvar transformedRequest = null ;\r\n\t\tif ( quoteResponses )\r\n\t\t\ttransformedRequest = transformExistingQuote(quotePermutations, quoteResponses, quoteRequest) ;\r\n\t\telse\r\n\t\t\ttransformedRequest = transformNewQuote(quotePermutations, quoteRequest) ;\r\n\r\n\t\treturn transformedRequest ;\r\n\t}\r\n\r\n\tfunction transformExistingQuote(quotePermutations, quoteResponses, quoteRequest) {\r\n\t\tvar quotes = Util.generatePermutationsArray(quotePermutations.coverTypes, quotePermutations.paymentFrequencies).map(function(permutation, index) {\r\n\t\t\tvar quote = Object.extend(permutation, quoteRequest);\r\n\r\n\t\t\tvar coverType = permutation.option1;\r\n\t\t\tvar paymentFrequency = permutation.option2 ; \r\n\t\t\tdelete quote.option1; delete quote.option2 ; \r\n\t\t\t\r\n\t\t\tvar quoteType = quotePermutations.quoteType ;\r\n\t\t\tvar q = Util.deepClone(quote) ;\r\n\t\t\tq = Object.extend(q,{\r\n\t\t\t\tquoteType: quoteType,\r\n\t\t\t\tpaymentFrequency: paymentFrequency,\r\n\t\t\t}) ;\r\n\r\n\t\t\tvar quoteResponseBody = null ;\r\n\t\t\t// var matchingQuoteResponse = findMatchingQuoteResponse(quoteResponses, coverType) ;\r\n\t\t\t// if ( matchingQuoteResponse )\r\n\t\t\t// \tquoteResponseBody = matchingQuoteResponse.response;\r\n\t\t\tq = publicIDTransformer.transform(q, null) ;\r\n\t\t\tq = coverTypeTransformer.transform(q, coverType.descriptor);\r\n\t\t\treturn q ;\r\n\t\t}) ;\r\n\r\n\t\treturn quotes.filter(function(quote) { return quote !== null }) ;\r\n\t}\r\n\r\n\tfunction findMatchingQuoteResponse(quoteResponses, coverType){\r\n\t\tif ( ! quoteResponses )\r\n\t\t\treturn;\r\n\r\n\t\tvar matchingResponse = null ;\r\n\t\tquoteResponses.some(function(qr) {\r\n\t\t\tif (qr.coverType == coverType.descriptor) {\r\n\t\t\t\tmatchingResponse = qr ;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matchingResponse;\r\n\t}\r\n\r\n\tfunction transformNewQuote(quotePermutations, quoteRequest) {\r\n\t\tvar nr = quotePermutations.coverTypes.length * quotePermutations.paymentFrequencies.length;\r\n\t\tvar quotes = Util.arrayFill(nr, quoteRequest).map(function(quote, index) {\r\n\t\t\tvar coverType = quotePermutations.coverTypes[index % quotePermutations.coverTypes.length];\r\n\t\t\tvar paymentFrequency = quotePermutations.paymentFrequencies[index % quotePermutations.paymentFrequencies.length];\r\n\t\t\tvar quoteType = quotePermutations.quoteType ;\r\n\t\t\tvar q = Util.deepClone(quote) ;\r\n\t\t\tq = Object.extend(q,{\r\n\t\t\t\tquoteType: quoteType,\r\n\t\t\t\tpaymentFrequency: paymentFrequency,\r\n\t\t\t}) ;\r\n\r\n\t\t\tq = coverTypeTransformer.transform(q, coverType.descriptor);\r\n\t\t\tq = publicIDTransformer.transform(q) ;\r\n\t\t\treturn q ;\r\n\t\t}) ;\r\n\r\n\t\treturn quotes ;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction BikeCleanRequestTransformer(Util, jsonMapper) {\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tdelete intermediateRequest.bikeForm;\r\n\r\n\t\t\tvar bike = intermediateRequest.motorcycles[0];\r\n\t\t\tvar policyHolders = intermediateRequest.policyHolders;\r\n\r\n\t\t\tdelete bike.motorcycleInfo.description;\r\n\t\t\tdelete bike.motorcycleInfo.goodRetailPrice;\r\n\t\t\tdelete bike.motorcycleInfo.bikeType;\r\n\t\t\tdelete bike.motorcycleInfo.ratingGrade;\r\n\t\t\tdelete bike.motorcycleInfo.vehicleKey;\r\n\t\t\tdelete bike.motorcycleInfo.enrichment;\r\n\t\t\tdelete bike.accountLocation.enrichment;\r\n\t\t\tdelete bike.totalAccessoriesPrice;\r\n\t\t\tdelete bike.totalModificationsPrice;\r\n\t\t\tdelete bike.youngestRiderDateOfBirth;\r\n\r\n\t\t\tif ( bike.riders ) {\r\n\t\t\t\tbike.riders.forEach(function(policyRider, index) {\r\n\t\t\t\t\tdelete policyRider.rider._HTMLID;\r\n\t\t\t\t\tdelete policyRider.rider._aggregator;\r\n\t\t\t\t\tdelete policyRider.rider.threeYears_accidentsClaims;\r\n\t\t\t\t\tdelete policyRider.rider.threeYears_accidentsClaimsDetails;\r\n\t\t\t\t\tdelete policyRider.rider.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\t\t\t\t\tdelete policyRider.rider.threeYears_restrictedSuspendedDisqualifiedCancelledDetails;\r\n\t\t\t\t\tdelete policyRider.rider.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tdelete policyRider.rider.fiveYears_chargedOrConvictedDetails;\r\n\t\t\t\t\tdelete policyRider.rider.person.noClaimBonus;\r\n\t\t\t\t\tdelete policyRider.rider.person.title;\r\n\t\t\t\t\tdelete policyRider.riders;\r\n\t\t\t\t\tdelete policyRider.rider.isMemberOfClub;\r\n\t\t\t\t\tdelete policyRider.rider.isTheMainRider;\r\n\t\t\t\t\tdelete policyRider.rider.licensedToRide;\r\n\t\t\t\t\tdelete policyRider.rider.motorcycleClub;\r\n\t\t\t\t\tdelete policyRider.rider.yearsHeld;\r\n\t\t\t\t\tdelete policyRider.rider.previousInsurer;\r\n\t\t\t\t\tdelete policyRider.rider.primaryPhoneNumber;\r\n\t\t\t\t\tdelete policyRider.rider.person.riders;\r\n\t\t\t\t\tdelete policyRider.rider.person.address;\r\n\t\t\t\t\tdelete policyRider.rider.person.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tdelete policyRider.rider.person.isMainRiderMainPolicyHolder;\r\n\t\t\t\t\tdelete policyRider.rider.person.postalOption;\r\n\t\t\t\t\tdelete policyRider.rider.person.threeYears_accidentsClaims;\r\n\t\t\t\t\tdelete policyRider.rider.person.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\r\n\t\t\t\t\tif (index > 0) {\r\n\t\t\t\t\t\tdelete policyRider.rider.person.hasClaim;\r\n\t\t\t\t\t\tdelete policyRider.rider.person.hasConviction;\r\n\t\t\t\t\t\tdelete policyRider.rider.currentInsurer;\r\n\t\t\t\t\t\tdelete policyRider.rider.noClaimBonus;\r\n\t\t\t\t\t\t// delete policyRider.rider.person.primaryAddress.addressType;\r\n\r\n\t\t\t\t\t\t// test\r\n\t\t\t\t\t\tdelete policyRider.rider.relationWithMainRider;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\t//\r\n\r\n\t\t\tpolicyHolders.forEach(function(policyHolder) {\r\n\t\t\t\tif ( policyHolder.contact ) {\r\n\t\t\t\t\tdelete policyHolder.contact._HTMLID;\r\n\t\t\t\t\tdelete policyHolder.contact.$$hashKey;\r\n\t\t\t\t\tdelete policyHolder.contact._aggregator;\r\n\r\n\t\t\t\t\tdelete policyHolder.contact.anyInfringements;\r\n\t\t\t\t\tdelete policyHolder.contact.anyLostLicences;\r\n\t\t\t\t\tdelete policyHolder.contact.riders;\r\n\t\t\t\t\tdelete policyHolder.contact.MaxNoClaimBonus;\r\n\t\t\t\t\tdelete policyHolder.contact.noClaimBonus;\r\n\t\t\t\t\tdelete policyHolder.contact.numberOfOtherRiders;\r\n\t\t\t\t\tdelete policyHolder.contact.provisionalLicence;\r\n\t\t\t\t\tdelete policyHolder.contact.title;\r\n\t\t\t\t\tdelete policyHolder.contact.youngestRider;\r\n\t\t\t\t\tdelete policyHolder.contact.youngestRiderDob;\r\n\t\t\t\t\tdelete policyHolder.contact.youngestRiderGender;\r\n\t\t\t\t\tdelete policyHolder.contact.address;\r\n\t\t\t\t\tdelete policyHolder.contact.postalOption;\r\n\t\t\t\t\tdelete policyHolder.contact.primaryPhoneNumber;\r\n\t\t\t\t\tdelete policyHolder.contact.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tdelete policyHolder.contact.fiveYears_chargedOrConvictedDetails;\r\n\t\t\t\t\tdelete policyHolder.contact.isMainRiderMainPolicyHolder;\r\n\t\t\t\t\tdelete policyHolder.contact.threeYears_accidentsClaims;\r\n\t\t\t\t\tdelete policyHolder.contact.threeYears_accidentsClaimsDetails;\r\n\t\t\t\t\tdelete policyHolder.contact.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\t\t\t\t\tdelete policyHolder.contact.threeYears_restrictedSuspendedDisqualifiedCancelledDetails;\r\n\t\t\t\t\tdelete policyHolder.contact.primaryAddress.enrichment;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!!policyHolder.contact.contactType && policyHolder.contact.contactType === 'person') {\r\n\t\t\t\t\tdelete policyHolder.contact.authorisedPersons;\r\n\t\t\t\t}\r\n\t\t\t\tif (!!policyHolder.contact.authorisedPersons) {\r\n\t\t\t\t\tdelete policyHolder.contact.dateOfBirth;\r\n\t\t\t\t\tdelete policyHolder.contact.firstName;\r\n\t\t\t\t\tdelete policyHolder.contact.lastName;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tif ( intermediateRequest.motorcycles[0].sumInsuredType !== 'agreed' ) {\r\n\t\t\t\tdelete intermediateRequest.motorcycles[0].sumInsuredAmount;\r\n\t\t\t}\r\n\r\n\t\t\tif ( ! intermediateRequest.email )\r\n\t\t\t\tdelete intermediateRequest.email ;\r\n\r\n\t\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\t\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction BikeCoverTypeTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(intermediateRequest, coverTypeDescriptor) {\r\n\r\n\t\tintermediateRequest.motorcycles[0].coverType = coverTypeDescriptor;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction BikeDefaultValueRequestTransformer(Util, jsonMapper, userInputRepository) {\r\n\r\n\tfunction formatDateAndTimeTheGuidewireWay(date, time) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\tvar timeFormatted = '4:00PM' ;\r\n\t\tif ( time )\r\n\t\t\ttimeFormatted = moment().tz(\"Australia/Sydney\").format('h:mma');\r\n\t\treturn Util.stringFormat(format, moment().tz(\"Australia/Sydney\").format('Do MMM YYYY') , timeFormatted) ;\r\n\t}\r\n\r\n\tvar staticValuesMapping = {\r\n\t\tquoteType:'Full',\r\n\t\tproductCode : 'QPYPersonalMotorcycle',\r\n\t\tpaymentFrequency: 'everyyear',\r\n\t\t// \"anyClaimsQuestion\": \"unknown\",\r\n\t\t// \"anyLostLicencesQuestion\": \"unknown\",\r\n\t\t// \"anyConvictionsQuestion\": \"unknown\",\r\n\t\t// \"anyInfringementsQuestion\": \"no\",\r\n\r\n\t\t\"motorcycles.0.bikeUsage\" : \"bike\",\r\n\t\t\"motorcycles.0.damage\": \"no_damage\",\r\n\t\t\"motorcycles.0.isMemberOfClub\": false,\r\n\t\t// is the main rider the registered owner of the bike\r\n\t\t\"motorcycles.0.isTheMainRider\": true,\r\n\t\t\"motorcycles.0.motorCycleUsage\": \"private\",\r\n\t\t\"motorcycles.0.isFinanced\": false,\r\n\t\t\"motorcycles.0.isBikeModified\": false,\r\n\t\t\"motorcycles.0.businessUsage\": \"courier\",\r\n\t\t\"motorcycles.0.garageType\": \"communal_garage\",\r\n\t\t\"motorcycles.0.motorcycleClub\": \"other\",\r\n\t\t\"motorcycles.0.sumInsuredType\": \"market\",\r\n\t\t\"motorcycles.0.motorCycleKilometers\": \"4001_8000km\",\r\n\t\t\"motorcycles.0.isAccessoriesAdded\": false,\r\n\t\t\"motorcycles.0.coverType\": \"comprehensive\",\r\n\t\t\"motorcycles.0.accessoriesPrice\": 0,\r\n\t\t\"motorcycles.0.totalModificationsPrice\": 0,\r\n\t\t\"motorcycles.0.totalAccessoriesPrice\": 0,\r\n\t\t\"motorcycles.0.accountLocation.addressType\": \"postal\",\r\n\r\n\r\n\t\t// \"motorcycles.0.financeType\": \"none\",\r\n\t\t\"motorcycles.0.sumInsuredAmount\": \"1000\",\r\n\t\t// \"motorcycles.0.riders.*.person.primaryAddress.addressType\": \"residential\",\r\n\r\n\t\t\"motorcycles.0.riders.*.licensedToRide\": \"yes\",\r\n\t\t\"motorcycles.0.riders.*.rider.currentInsurer\": \"nocurrentinsurance\",\r\n\t\t\"motorcycles.0.riders.*.rider.yearsLicenced\": \"1\",\r\n\t\t\"motorcycles.0.riders.*.rider.licenceType\": \"full\",\r\n\t\t\"motorcycles.0.riders.*.rider.relationWithMainRider\": \"other\",\r\n\t\t\"motorcycles.0.riders.*.rider.noClaimBonus\": \"nil\",\r\n\t\t// \"motorcycles.0.riders.*.rider.visaType\": \"distinguishedtalentvisa124\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.gender\": \"male\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.firstName\": \"An@n\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.lastName\": \"An@nym@us\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.contactType\": \"person\",\r\n\t\t\"motorcycles.0.riders.*.rider.person.dateOfBirth\": \"01/06/2000\",\r\n\t\t\"policyHolders.*.contact.primaryAddress.addressType\": \"residential\",\r\n\r\n\r\n\t\t// \"email\": \"a@a.com\",\r\n\t\t\"motorcycles.0.availableCoverTypes\" : [\r\n\t\t\t\"comprehensive\",\r\n\t\t\t\"fireandtheft\",\r\n\t\t\t\"thirdpartyonly\",\r\n\t\t\t\"thirdpartyfiretheft\"\r\n ],\r\n\t\t\"motorcycles.0.availableSumInsuredTypes\": [\r\n \"market\",\r\n \"agreed\"\r\n ],\r\n\r\n\r\n\t\t\"motorcycles.0.excess.ageExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.flexiExcessExcess\" : 0,\r\n\t\t// \"motorcycles.0.excess.flexiExcessOptions\": [],\r\n\t\t\"motorcycles.0.excess.inexperiencedRiderExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.riderTrainingExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.standardExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.theftClaimsExcess\" : 0,\r\n\t\t\"motorcycles.0.excess.unListedRiderExcess\" : 0,\r\n\r\n\t\t\"policyHolders.0.mainHolder\": true,\r\n\t\t\"policyHolders.0.contact.contactType\": \"person\",\r\n\t\t\"policyHolders.0.contact.firstName\": \"An@n\",\r\n\t\t\"policyHolders.0.contact.lastName\": \"An@nym@us\",\r\n\t\t\"policyHolders.0.contact.dateOfBirth\": \"01/06/2000\",\r\n\t\t\"policyHolders.0.contact.primaryPhone\": \"mobile\",\r\n\t\t// full quote transformation :\r\n \"status\" : \"Draft\",\r\n \"documentDeliveryMethod\": 'email',\r\n\t\t\"displayStatus\": 'Draft',\r\n\t\t\"periodStartDateTimeAEDT\": formatDateAndTimeTheGuidewireWay(moment(), moment()),\r\n\t\t\"periodEndDateTimeAEDT\" : formatDateAndTimeTheGuidewireWay(moment().add(1,'years')),\r\n\t\t\"channel\": 'portal',\r\n\t\t\"motorcycles.0.riders.*.riderUsage\" : \"other\"\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.setDefault(userInput, staticValuesMapping) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction BikeFormatConverterTransformer(Util, jsonMapper) {\r\n\r\n\tfunction convertDateAndTimeTheGuidewireWay(dateTime) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\treturn Util.stringFormat(format, dateTime.format('Do MMM YYYY') , dateTime.format('h:mma')) ;\r\n\t}\r\n\r\n\tfunction convertDate(dateString) {\r\n\t\tvar date = moment(dateString, 'DD/MM/YYYY') ;\r\n\t\tvar formattedDate = date.format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\r\n\t\t// throw 'date format exception formatting ' + dateString ;\r\n\t\treturn null;\r\n\t}\r\n\t\r\n\tfunction convertDateToGWTimeZone(dateString) {\r\n\t\tvar formattedDate = moment(dateString,'DDMMYYYY').tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertGender(gender) {\r\n\t\tvar gc = {\r\n\t\t\tmale : 'M',\r\n\t\t\tfemale : 'F',\r\n\t\t\tintersex : 'I',\r\n\t\t};\r\n\r\n\t\treturn gc[gender] ;\r\n\t}\r\n\r\n\tfunction convertFalsyToUnknown(value) {\r\n\t\tif ( value === null || value === undefined )\r\n\t\t\treturn 'unknown';\r\n\r\n\t\treturn convertBooleanToYesNo(value) ;\r\n\t}\r\n\r\n\tfunction convertBooleanToYesNo(value) {\r\n\t\treturn value ? 'yes' : 'no' ;\r\n\t}\r\n\r\n\tfunction convertStringToInt(value) {\r\n\t\treturn !!value ? parseInt(value) : value;\r\n\t}\r\n\r\n\tfunction convertIntToString(value) {\r\n\t\treturn !!value ? value.toString() : value;\r\n\t}\r\n\r\n\r\n\tvar convertValueMapping = {\r\n\t\t'periodStartDate': convertDateToGWTimeZone,\r\n\r\n\t\t'policyHolders.*.contact.gender' : convertGender,\r\n\t\t'policyHolders.*.contact.hasClaim' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.hasConviction' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyLostLicence' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyInfringements' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.dateOfBirth' : convertDate,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.dateOfBirth' : convertDate,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.gender' : convertGender,\r\n\r\n\r\n\t\t'motorcycles.0.purchaseDate' : convertDate,\r\n\r\n\t\t'motorcycles.0.youngestRiderDOB' : convertDate,\r\n\t\t'motorcycles.0.youngestRiderGender' : convertGender,\r\n\t\t\r\n\t\t'motorcycles.0.motorcycleInfo.modelYear' : convertStringToInt,\r\n\t\t\"motorcycles.0.sumInsuredAmount\": convertStringToInt,\r\n\r\n\t\t// 'motorcycles.0.purchasePrice' : convertIntToString,\r\n\t\t// 'motorcycles.0.sumInsuredAmount' : convertIntToString,\r\n\t\t'motorcycles.0.isFinanced' : convertBooleanToYesNo,\r\n\r\n\t\t'motorcycles.0.riders.*.rider.person.dateOfBirth' : convertDate,\r\n\t\t'motorcycles.0.riders.*.rider.person.gender' : convertGender,\r\n\t\t\"motorcycles.0.riders.*.rider.hasConviction\": convertFalsyToUnknown,\r\n\t\t\"motorcycles.0.riders.*.rider.person.hasConviction\": convertBooleanToYesNo,\r\n\t\t\"motorcycles.0.riders.*.rider.hasClaim\": convertFalsyToUnknown,\r\n\t\t\"motorcycles.0.riders.*.rider.person.hasClaim\": convertBooleanToYesNo,\r\n\t\t\"motorcycles.0.riders.*.rider.hasLostLicence\": convertFalsyToUnknown,\r\n\t\t\"motorcycles.0.riders.*.licensedToRide\": convertBooleanToYesNo,\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.year' : convertStringToInt,\r\n\t\t'motorcycles.0.sumInsuredAmount' : convertStringToInt\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.convert(intermediateRequest, convertValueMapping) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction BikePolicyHolderHandler(Util, publicIDTransformer) {\r\n\tfunction handle(quoteRequest, userInput) {\r\n\t\tvar mainPolicyholder = quoteRequest.policyHolders.filter(function (item) {\r\n return item['mainHolder'];\r\n })[0];\r\n\r\n var mainRider = quoteRequest.motorcycles[0].riders.filter(function (item) {\r\n return item['riderUsage'] == 'main';\r\n\t\t})[0];\t\t\r\n\t\t\r\n\t\tif (mainPolicyholder.contact.publicID == mainRider.rider.person.publicID) {\r\n mainRider.rider.person.passwordQuestion = mainPolicyholder.contact.passwordQuestion;\r\n mainRider.rider.person.passwordAnswer = mainPolicyholder.contact.passwordAnswer;\r\n mainRider.rider.person.primaryPhone = mainPolicyholder.contact.primaryPhone;\r\n \r\n\t\t\tswitch (mainPolicyholder.contact.primaryPhone) {\r\n\t\t\t\tcase 'mobile':\r\n\t\t\t\t\tmainRider.rider.person.cellPhone = mainPolicyholder.contact.cellPhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'home':\r\n\t\t\t\t\tmainRider.rider.person.homePhone = mainPolicyholder.contact.homePhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'work':\r\n\t\t\t\t\tmainRider.rider.person.workPhone = mainPolicyholder.contact.workPhone;\r\n\t\t\t\t\tbreak;\r\n }\r\n\t\t}\t\r\n\r\n\t\treturn quoteRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\thandle: handle\r\n\t}\r\n};\r\n\n'use strict';\r\n\r\nfunction BikePublicIDTransformer(\r\n\tUtil,\r\n\tjsonMapper,\r\n\tserviceResponseRepository,\r\n\taggregatedRemoveService\r\n) {\r\n\tvar currentResponse = null;\r\n\tvar driverUniqueIdCtr = 1;\r\n\tvar historyUniqueIdCtr = 1;\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat(\r\n\t\t\t'portal:{0}-{1}',\r\n\t\t\tmoduleName,\r\n\t\t\tUtil.generateRandomString(15)\r\n\t\t);\r\n\t}\r\n\r\n\tfunction hasValidGWPublicID(publicID) {\r\n\t\tif (publicID && publicID.indexOf('portal:') === -1) return true;\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction hash(value) {\r\n\t\treturn md5(value);\r\n\t}\r\n\r\n\tfunction fetchFromPreviousResponse(path) {\r\n\t\tif (currentResponse)\r\n\t\t\treturn Util.findHierarchyStringInObject(currentResponse, path, '.');\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertPublicID(path, moduleName) {\r\n\t\tif (currentResponse) {\r\n\t\t\tvar lastPublicID = fetchFromPreviousResponse(path);\r\n\t\t\tif (lastPublicID) return lastPublicID;\r\n\t\t}\r\n\r\n\t\treturn forgePublicId(moduleName);\r\n\t}\r\n\r\n\tvar moduleNameMapping = {\r\n\t\tpolicyHolders: 'PolicyHolder[]',\r\n\t\tpolicyAddress: 'Address',\r\n\t\tmotorcycle: 'QPYMotorcycle',\r\n\t\trider: 'QPYMotorcycleRider',\r\n\t\tpolicyRider: 'QPYPolicyRider',\r\n\t\tperson: 'Person',\r\n\t\tmodification: 'QPYCycleModification',\r\n\t\taccessories: 'QPYCycleAccessories',\r\n\t\triderHistory: 'QPYRiderHistory',\r\n\t\tdrivingHistory: 'DrivingHistory',\r\n\t\tpattern: 'qbePattern'\r\n\t};\r\n\r\n\tvar publicIDTransformationMapping = {\r\n\t\t'policyAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'motorcycles.0.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.motorcycle);\r\n\t\t},\r\n\t\t'motorcycles.0.accountLocation.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'motorcycles.0.qpyCycleModifications.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.modification);\r\n\t\t},\r\n\t\t'motorcycles.0.qpyMotorcycleAccessories.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.accessories);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.rider);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.uniqueID': function() {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyRider);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.person.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.person.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.riderHistory);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.uniqueID': function() {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t'policyHolders.*.contact.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.drivingHistory);\r\n\t\t}\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDTransformationMapping = {\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t}\r\n\t};\r\n\r\n\tvar publicIDConversionMapping = {\r\n\t\t'policyAddress.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.publicID',\r\n\t\t\t\tmoduleNameMapping.motorcycle\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.uniqueID': function() {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.uniqueID': function() {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t'motorcycles.0.accountLocation.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.accountLocation.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.qpyCycleModifications.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.qpyCycleModifications.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.modifications\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.qpyMotorcycleAccessories.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.qpyMotorcycleAccessories.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.accessories\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' + mappedValueStarIndex + '.contact.publicID',\r\n\t\t\t\tmoduleNameMapping.policyHolders\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.publicID': function(val, mappedValueStarIndex) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' + mappedValueStarIndex + '.publicID',\r\n\t\t\t\tmoduleNameMapping.rider\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.rider.publicID',\r\n\t\t\t\tmoduleNameMapping.policyRider\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.person.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.rider.person.publicID',\r\n\t\t\t\tmoduleNameMapping.person\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.person.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' +\r\n\t\t\t\t\tmappedValueStarIndex +\r\n\t\t\t\t\t'.rider.person.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'motorcycles.0.riders.*.rider.riderHistory.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'motorcycles.0.riders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.rider.riderHistory.' +\r\n\t\t\t\t\tmappedValueStarIndices[1] +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.riderHistory\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolder.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndex\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndex[0] +\r\n\t\t\t\t\t'.contact.drivingHistory.' +\r\n\t\t\t\t\tmappedValueStarIndex[1] +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.drivingHistory\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDConversionMapping = {\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.authorisedPersons.0.person.publicID',\r\n\t\t\t\tmoduleNameMapping.person\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.authorisedPersons.0.person.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tfunction removeDeletedAdditionalRiders(transformedRequest) {\r\n\t\tvar removedRiders = aggregatedRemoveService.getList()\r\n\t\t\t? aggregatedRemoveService.getList()['rider']\r\n\t\t\t: null;\r\n\t\tvar savedRiders = fetchFromPreviousResponse('motorcycles.0.riders');\r\n\t\tif (savedRiders && removedRiders) {\r\n\t\t\tangular.forEach(removedRiders, function(removedRider) {\r\n\t\t\t\tvar matchingRider = savedRiders.filter(function(rider) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\trider.rider.person.firstName ==\r\n\t\t\t\t\t\t\tremovedRider.person.firstName &&\r\n\t\t\t\t\t\trider.rider.person.lastName ==\r\n\t\t\t\t\t\t\tremovedRider.person.lastName\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t\tmatchingRider = matchingRider[0] || null;\r\n\t\t\t\tif (matchingRider) {\r\n\t\t\t\t\tmatchingRider.markedForDelete = true;\r\n\t\t\t\t\ttransformedRequest.motorcycles[0].riders.push(\r\n\t\t\t\t\t\tmatchingRider\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\taggregatedRemoveService.clear('rider');\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeDeletedRiderHistoryArrays(transformedRequest) {\r\n\t\tvar riders = transformedRequest.motorcycles[0].riders;\r\n\t\tangular.forEach(riders, function(rider, index) {\r\n\t\t\tvar savedHistories = fetchFromPreviousResponse(\r\n\t\t\t\t'motorcycles.0.riders.' + index + '.rider.riderHistory'\r\n\t\t\t);\r\n\t\t\tif (savedHistories && savedHistories.length > 0) {\r\n\t\t\t\tvar riderHistories = rider.rider.riderHistory;\r\n\t\t\t\tangular.forEach(savedHistories, function(savedHistory) {\r\n\t\t\t\t\tvar matchingInput = riderHistories.filter(function(\r\n\t\t\t\t\t\thistory\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn history.publicID == savedHistory.publicID;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!matchingInput || matchingInput.length == 0) {\r\n\t\t\t\t\t\tsavedHistory.markedForDelete = true;\r\n\t\t\t\t\t\triderHistories.push(savedHistory);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeEmptyRiderHistoryArrays(transformedRequest) {\r\n\t\tvar motorcycle = transformedRequest.motorcycles[0];\r\n\t\tif (motorcycle && motorcycle.riders) {\r\n\t\t\tmotorcycle.riders.forEach(function(policyRider) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tpolicyRider.rider &&\r\n\t\t\t\t\tpolicyRider.rider.riderHistory &&\r\n\t\t\t\t\tArray.isArray(policyRider.rider.riderHistory) &&\r\n\t\t\t\t\tpolicyRider.rider.riderHistory.length == 0\r\n\t\t\t\t)\r\n\t\t\t\t\tdelete policyRider.rider.riderHistory;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//dd-973 - requiring a sequence number for driver infringement\r\n\tfunction addUniqueHistoryID(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.motorcycles[0].riders;\r\n\r\n\t\tangular.forEach(drivers, function(driver, index) {\r\n\t\t\thistoryUniqueIdCtr = 1;\r\n\t\t\tvar driverHistory = driver.rider.riderHistory;\r\n\t\t\tif (driverHistory) {\r\n\t\t\t\tangular.forEach(driverHistory, function(driverHistory, index) {\r\n\t\t\t\t\tdriverHistory.uniqueID = historyUniqueIdCtr;\r\n\t\t\t\t\thistoryUniqueIdCtr++;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, response) {\r\n\t\tcurrentResponse = response;\r\n\t\tdriverUniqueIdCtr = 1;\r\n\t\tvar transformedRequest = intermediateRequest;\r\n\r\n\t\tif (\r\n\t\t\ttransformedRequest.policyHolders[0] &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact.authorisedPersons\r\n\t\t) {\r\n\t\t\tpublicIDConversionMapping = Object.extend(\r\n\t\t\t\tpublicIDConversionMapping,\r\n\t\t\t\tauthorisedPersonsPublicIDConversionMapping\r\n\t\t\t);\r\n\t\t\tpublicIDTransformationMapping = Object.extend(\r\n\t\t\t\tpublicIDTransformationMapping,\r\n\t\t\t\tauthorisedPersonsPublicIDTransformationMapping\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (!currentResponse)\r\n\t\t\ttransformedRequest = jsonMapper.transform(\r\n\t\t\t\tintermediateRequest,\r\n\t\t\t\tpublicIDTransformationMapping\r\n\t\t\t);\r\n\t\telse {\r\n\t\t\ttransformedRequest = jsonMapper.convert(\r\n\t\t\t\tintermediateRequest,\r\n\t\t\t\tpublicIDConversionMapping\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\ttransformedRequest = addUniqueHistoryID(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedAdditionalRiders(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedRiderHistoryArrays(\r\n\t\t\ttransformedRequest\r\n\t\t);\r\n\t\ttransformedRequest = removeEmptyRiderHistoryArrays(transformedRequest);\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n\nfunction BikeQuoteResultModel(quoteResultResponse) {\r\n\tthis.isCoverAvailable = quoteResultResponse.quoteResult.totalPremium !== undefined ;\r\n\tthis.coverType = quoteResultResponse.motorcycles[0].coverType;\r\n\tthis.sumInsuredAmount = quoteResultResponse.motorcycles[0].sumInsuredAmount;\r\n\tthis.quoteResult = quoteResultResponse.quoteResult;\r\n\tthis.paymentPlan = quoteResultResponse.paymentPlan;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.totalFSL = quoteResultResponse.quoteResult.totalFSL ;\r\n\tthis.totalGST = quoteResultResponse.quoteResult.totalGST ;\r\n\tthis.totalStampDuty = quoteResultResponse.quoteResult.totalStampDuty ;\r\n\tthis.premiumAfterDiscount = quoteResultResponse.quoteResult.premiumAfterDiscount ;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.paymentFrequency = quoteResultResponse.paymentPlan ? quoteResultResponse.paymentPlan.paymentFrequency : null ;\r\n\tthis.excess = quoteResultResponse.motorcycles[0].excess ;\r\n\tthis.availableSumInsuredTypes = quoteResultResponse.motorcycles[0].availableSumInsuredTypes;\r\n\tthis.motorcycleValue = {\r\n\t\tupper: quoteResultResponse.motorcycles[0].agreedValueUpper,\r\n\t\tlower: quoteResultResponse.motorcycles[0].agreedValueLower\r\n\t};\r\n\tthis.coverageOptions = quoteResultResponse.motorcycles[0].coverageOptions;\r\n\tthis.response = quoteResultResponse ;\r\n\r\n}\r\n\nfunction BikeRetrieveSavedQuoteResponseTransformer($filter, jsonMapper, Util) {\r\n // transform functions\r\n var transformers = {\r\n camelcase: function(value) {\r\n if(value) {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n },\r\n date: function(dateString) {\r\n var date = moment(dateString, 'YYYY-MM-DD') ;\r\n return date.format('DD/MM/YYYY') ;\r\n },\r\n\t\ttoday : function() {\r\n\t\t\treturn moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY') ;\r\n\t\t},\r\n financeType: function(financeType) {\r\n switch(financeType) {\r\n case 'none':\r\n return '';\r\n break;\r\n }\r\n },\r\n convertGender: function(gender) {\r\n var gc = {\r\n M : 'male',\r\n F : 'female',\r\n I : 'intersex',\r\n };\r\n return gc[gender] ;\r\n },\r\n yesNo: function(value) {\r\n return value == 'yes' ? true : false;\r\n },\r\n checkbox: function(value) {\r\n },\r\n state: function(state) {\r\n if ( state )\r\n return state.replace('AU_', '');\r\n },\r\n coverType: function(coverType) {\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n return 'third_party';\r\n }\r\n return coverType;\r\n },\r\n purchaseMonthFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n return monthYear.split('-')[1];\r\n }else{\r\n return '';\r\n }\r\n\r\n },\r\n purchaseYearFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n return monthYear.split('-')[0];\r\n }else{\r\n return '';\r\n }\r\n },\r\n thirdPartyPref: function(coverType) {\r\n if(coverType === 'comprehensive') {\r\n return null;\r\n }\r\n return coverType;\r\n },\r\n\t\tmodifications: function(mod) {\r\n\t\t\tif (!!mod) {\r\n\t\t\t\tvar values = [{\"label\":\"Big bore kit\",\"value\":\"big_bore_kit\"},{\"label\":\"Cam modified\",\"value\":\"cam_modified\"},{\"label\":\"Custom paint\",\"value\":\"custom_paint\"},{\"label\":\"Frame – non standard\",\"value\":\"frame_non_standard\"},{\"label\":\"Modified exhaust\",\"value\":\"modified_exhaust\"},{\"label\":\"Modified or non-standard engine\",\"value\":\"modified_or_non-standard_engine\"},{\"label\":\"Modified or non-standard fuel system\",\"value\":\"modified_or_non-standard_fuel_system\"},{\"label\":\"Modified suspension\",\"value\":\"modified_suspension\"},{\"label\":\"Nitrous oxide\",\"value\":\"nitrous_oxide\"},{\"label\":\"Other modifications and customisations\",\"value\":\"other_modifications_and_customisations\"},{\"label\":\"Side car\",\"value\":\"side_car\"},{\"label\":\"Supercharged\",\"value\":\"supercharged\"},{\"label\":\"Turbo charged\",\"value\":\"turbo_charged\"},{\"label\":\"Wheels – non standard\",\"value\":\"wheels_non_standard\"}];\r\n\t\t\t\treturn values.find(function(o) {\r\n\t\t\t\t\treturn o.value === mod;\r\n\t\t\t\t}).label;\r\n\t\t\t}\r\n\t\t},\r\n\t\taccessories: function(accessory) {\r\n\t\t\tif (!!accessory) {\r\n\t\t\t\tvar values = [{\"label\":\"Aftermarket levers (brake and clutch)\",\"value\":\"Aftermarketleversbrakeandclutch\"},{\"label\":\"Air filter\",\"value\":\"Airfilter\"},{\"label\":\"Bash plate\",\"value\":\"Bashplate\"},{\"label\":\"Braided brake lines\",\"value\":\"Braidedbrakelines\"},{\"label\":\"Brake discs\",\"value\":\"Brakediscs\"},{\"label\":\"Burglar alarm\",\"value\":\"Burglaralarm\"},{\"label\":\"Carbon fibre guards\",\"value\":\"Carbonfibreguards\"},{\"label\":\"Centre stand\",\"value\":\"Centrestand\"},{\"label\":\"Crash bars\",\"value\":\"Crashbars\"},{\"label\":\"Fender eliminator\",\"value\":\"Fendereliminator\"},{\"label\":\"Foot pegs\",\"value\":\"Footpegs\"},{\"label\":\"Forward controls\",\"value\":\"Forwardcontrols\"},{\"label\":\"GPS\",\"value\":\"GPS\"},{\"label\":\"Gear shift lever\",\"value\":\"Gearshiftlever\"},{\"label\":\"Hand guards\",\"value\":\"Handguards\"},{\"label\":\"Hand Grips\",\"value\":\"HandGrips\"},{\"label\":\"Handlebars\",\"value\":\"Handlebars\"},{\"label\":\"Headlight Protectors\",\"value\":\"HeadlightProtectors\"},{\"label\":\"Immobiliser\",\"value\":\"Immobiliser\"},{\"label\":\"Indicators\",\"value\":\"Indicators\"},{\"label\":\"Instrument clusters\",\"value\":\"Instrumentclusters\"},{\"label\":\"Intercom system\",\"value\":\"Intercomsystem\"},{\"label\":\"Kill switch\",\"value\":\"Killswitch\"},{\"label\":\"Lights\",\"value\":\"Lights\"},{\"label\":\"Mirrors\",\"value\":\"Mirrors\"},{\"label\":\"Motorcycle rack\",\"value\":\"Motorcyclerack\"},{\"label\":\"Oggy knobs\",\"value\":\"Oggyknobs\"},{\"label\":\"On road costs\",\"value\":\"Onroadcosts\"},{\"label\":\"Panniers\",\"value\":\"Panniers\"},{\"label\":\"Power commander\",\"value\":\"Powercommander\"},{\"label\":\"Radiator guard\",\"value\":\"Radiatorguard\"},{\"label\":\"Rear hugger\",\"value\":\"Rearhugger\"},{\"label\":\"Saddle bags\",\"value\":\"Saddlebags\"},{\"label\":\"Seat sissy bar\",\"value\":\"Seatsissybar\"},{\"label\":\"Steering damper\",\"value\":\"Steeringdamper\"},{\"label\":\"Stereo\",\"value\":\"Stereo\"},{\"label\":\"Tank bag\",\"value\":\"Tankbag\"},{\"label\":\"Tank pad\",\"value\":\"Tankpad\"},{\"label\":\"Tank protector\",\"value\":\"Tankprotector\"},{\"label\":\"Top Box\",\"value\":\"TopBox\"},{\"label\":\"Windshield\",\"value\":\"Windshield\"},{\"label\":\"Other non-standard accessories\",\"value\":\"Othernon-standardaccessories\"}];\r\n\t\t\t\treturn values.find(function(o) {\r\n\t\t\t\t\treturn o.value === accessory;\r\n\t\t\t\t}).label;\r\n\t\t\t}\r\n\t\t},\r\n\t\tyearsHeld: function(years) {\r\n\t\t\tvar yearsHeld;\r\n\r\n\t\t\tswitch (years) {\r\n\t\t\t\tcase '0':\r\n\t\t\t\t\tyearsHeld = 'lessThan_1';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase '6':\r\n\t\t\t\t\tyearsHeld = 'greaterThan_5';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tyearsHeld = years;\r\n\t\t\t}\r\n\r\n\t\t\treturn yearsHeld;\r\n\t\t},\r\n };\r\n function transformPerson(person) {\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date\r\n };\r\n var transformedPerson = jsonMapper.convert(jsonMapper.transform(person, transformMapping), convertMapping);\r\n return transformedPerson.returnObject;\r\n }\r\n\r\n function transformRider(rider) {\r\n var transformMapping = {\r\n \t'returnObject.yearsHeld': \t\t'=_input.rider.yearsLicenced',\r\n 'returnObject.licenceType': \t\t'=_input.rider.licenceType',\r\n 'returnObject.noClaimBonus': \t\t'=_input.rider.noClaimBonus',\r\n 'returnObject.previousInsurer': \t\t'=_input.rider.currentInsurer',\r\n 'returnObject.licensedToRide': \t\t'=_input.licensedToRide',\r\n\t\t\t'returnObject.threeYears_accidentsClaims': \t\t\t\t\t\t\t\t'=_input.rider.hasClaim',\r\n\t\t\t'returnObject.fiveYears_chargedOrConvicted': \t\t\t\t\t\t\t'=_input.rider.hasConviction',\r\n\t\t\t'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled': \t'=_input.rider.hasLostLicence',\r\n\t\t\t'returnObject.visaType':\t\t\t\t\t\t\t\t\t\t\t \t'=_input.rider.visaType',\r\n },\r\n convertMapping = {\r\n\t\t\t\t'returnObject.yearsHeld': \t\ttransformers.yearsHeld,\r\n 'returnObject.licensedToRide': \t\ttransformers.yesNo,\r\n\t\t\t\t'returnObject.threeYears_accidentsClaims': \t\t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t\t'returnObject.fiveYears_chargedOrConvicted': \t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t\t'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled':\ttransformers.yesNo\r\n };\r\n\r\n\t\tvar mappedRider = jsonMapper.transform(rider, transformMapping);\r\n var transformedRider = jsonMapper.convert(mappedRider, convertMapping);\r\n if(rider.rider.person) {\r\n transformedRider.returnObject.person = transformPerson(rider.rider.person);\r\n }\r\n\r\n // extract rider history\r\n\t\ttransformedRider.returnObject.threeYears_accidentsClaimsDetails = [];\r\n\t\ttransformedRider.returnObject.fiveYears_chargedOrConvictedDetails = [];\r\n\t\ttransformedRider.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelledDetails = [];\r\n\r\n\t\tif (!!rider.rider.riderHistory) {\r\n\t\t\trider.rider.riderHistory.forEach(function(record) {\r\n\t\t\t\tswitch (record.pattern.filter1) {\r\n\t\t\t\t\tcase 'claim' :\r\n\t\t\t\t\t\ttransformedRider.returnObject.threeYears_accidentsClaimsDetails.push(\r\n\t\t\t\t\t\t\textractHistory(globals.threeYears_accidentsClaimsDetails.options, record));\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'conviction' :\r\n\t\t\t\t\t\ttransformedRider.returnObject.fiveYears_chargedOrConvictedDetails.push(\r\n\t\t\t\t\t\t\textractHistory(globals.fiveYears_chargedOrConvictedDetails.options, record)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault: {\r\n\t\t\t\t\t\ttransformedRider.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.push(\r\n\t\t\t\t\t\t\textractHistory(globals.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.options, record)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n return transformedRider.returnObject;\r\n }\r\n\r\n function extractHistory(collection, record) {\r\n\t\tvar matchedPattern = {};\r\n\t\tvar month = {};\r\n\t\tvar year = {};\r\n\r\n\t\tmatchedPattern = collection.find(function(opt) {\r\n\t\t\treturn opt.publicID == record.pattern.publicID;\r\n\t\t});\r\n\t\tmonth.label = month.value = Util.capitalize(record.month.toString());\r\n\t\tyear.label = year.value = Util.capitalize(record.year.toString());\r\n\r\n\t\trecord.description = matchedPattern;\r\n\t\trecord.month = month;\r\n\t\trecord.year = year;\r\n\r\n\t\tdelete record.pattern;\r\n\r\n \treturn record;\r\n\t}\r\n\r\n\tfunction extractPolicyHolderHistory(collection, record) {\r\n\t\tvar matchedPattern = {};\r\n\t\tvar month = {};\r\n\t\tvar year = {};\r\n\r\n\t\tmatchedPattern = collection.find(function(opt) {\r\n\t\t\treturn opt.publicID = record.riderPattern.publicID;\r\n\t\t});\r\n\t\tmonth.label = month.value = Util.capitalize(record.riderMonth.toString());\r\n\t\tyear.label = year.value = Util.capitalize(record.year.toString());\r\n\r\n\t\trecord.description = matchedPattern;\r\n\t\trecord.month = month;\r\n\t\trecord.year = year;\r\n\r\n\t\tdelete record.pattern;\r\n\r\n \treturn record;\r\n\t}\r\n\r\n function transformPolicyHolder(holder) {\r\n var transformMapping = {\r\n\t\t\t'returnObject.title': \t\t'=_input.prefix',\r\n\t\t\t'returnObject.firstName': \t\t'=_input.firstName',\r\n\t\t\t'returnObject.lastName': \t\t'=_input.lastName',\r\n\t\t\t'returnObject.gender': \t\t'=_input.gender',\r\n\t\t\t'returnObject.dateOfBirth': \t\t'=_input.dateOfBirth',\r\n\t\t\t// 'returnObject.threeYears_accidentsClaims': \t\t\t\t\t\t\t\t'=_input.rider.hasClaim',\r\n\t\t\t// 'returnObject.fiveYears_chargedOrConvicted': \t\t\t\t\t\t\t'=_input.rider.hasConviction',\r\n\t\t\t// 'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled': \t'=_input.rider.hasLostLicence',\r\n\t\t},\r\n\t\tconvertMapping = {\r\n\t\t\t'returnObject.title': \t\ttransformers.camelcase,\r\n\t\t\t'returnObject.gender': \t\ttransformers.convertGender,\r\n\t\t\t'returnObject.dateOfBirth': \t\ttransformers.date,\r\n\t\t\t// 'returnObject.threeYears_accidentsClaims': \t\t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t// 'returnObject.fiveYears_chargedOrConvicted': \t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t// 'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled':\ttransformers.yesNo\r\n\t\t};\r\n\r\n var transformedPolicyHolder = jsonMapper.convert(jsonMapper.transform(holder, transformMapping), convertMapping);\r\n\r\n\t\t//region Policy Holder driving history\r\n\t\ttransformedPolicyHolder.returnObject.threeYears_accidentsClaims = false;\r\n\t\ttransformedPolicyHolder.returnObject.threeYears_accidentsClaimsDetails = [];\r\n\t\ttransformedPolicyHolder.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled = false;\r\n\t\ttransformedPolicyHolder.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelledDetails = [];\r\n\t\ttransformedPolicyHolder.returnObject.fiveYears_chargedOrConvicted = false;\r\n\t\ttransformedPolicyHolder.returnObject.fiveYears_chargedOrConvictedDetails = [];\r\n\r\n\t\tif (!!holder.drivingHistory) {\r\n\t\t\tholder.drivingHistory.forEach(function(record) {\r\n\t\t\t\tswitch(record.riderPattern.filter1) {\r\n\t\t\t\t\tcase 'claim' :\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.threeYears_accidentsClaims = true;\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.threeYears_accidentsClaimsDetails.push(\r\n\t\t\t\t\t\t\textractPolicyHolderHistory(globals.threeYears_accidentsClaimsDetails.options, record));\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'conviction' :\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.fiveYears_chargedOrConvicted = true;\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.fiveYears_chargedOrConvictedDetails.push(\r\n\t\t\t\t\t\t\textractPolicyHolderHistory(globals.fiveYears_chargedOrConvictedDetails.options, record)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault: {\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled = true;\r\n\t\t\t\t\t\ttransformedPolicyHolder.returnObject.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.push(\r\n\t\t\t\t\t\t\textractPolicyHolderHistory(globals.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.options, record)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t// endregion\r\n\r\n return transformedPolicyHolder.returnObject;\r\n }\r\n\r\n /**\r\n * Transforms the retrievedQuoteResponse into a format that can be injected into the userInputRepository\r\n * The returned value will populate all the forms in the quote process\r\n * @param {Object} retrievedQuoteResponse Response object from the retrieveSavedQuote service\r\n * @returns {Object} Transformed object ready to inject into the userInputRepository\r\n */\r\n function transform(retrievedQuoteResponse) {\r\n \tvoid 0;\r\n \tvoid 0;\r\n var transformMapping = {\r\n\t\t\t\t// getStarted\r\n\t\t\t\t// 'vehicleForm.getStarted.paymentOptions': '=_input.?',\r\n\t\t\t\t'returnObject.getStarted.policyStartDate':\r\n\t\t\t\t\t'=_input.periodStartDate', // find where this comes from\r\n\t\t\t\t'returnObject.getStarted.personOrCompany':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.contactType',\r\n\r\n\t\t\t\t//tell us a bit more -------------------------------------\r\n\t\t\t\t'returnObject.tellUsABitMore.yourEmailAddress': '=_input.email',\r\n\t\t\t\t'returnObject.tellUsABitMore.promotionalCode':\r\n\t\t\t\t\t'=_input.campaignCode',\r\n\r\n\t\t\t\t// aboutYourBike\r\n\t\t\t\t'returnObject.address': '=_input.motorcycles.0.accountLocation',\r\n\t\t\t\t'returnObject.motorcycleInfo':\r\n\t\t\t\t\t'=_input.motorcycles.0.motorcycleInfo',\r\n\t\t\t\t'returnObject.aboutYourBike.purchaseDate':\r\n\t\t\t\t\t'=_input.motorcycles.0.purchaseDate',\r\n\t\t\t\t'returnObject.aboutYourBike.bikeCost':\r\n\t\t\t\t\t'=_input.motorcycles.0.purchasePrice',\r\n\r\n\t\t\t\t// Modifications and Accessories\r\n\t\t\t\t'returnObject.modificationsAccessories.modifications':\r\n\t\t\t\t\t'=_input.motorcycles.0.isBikeModified',\r\n\t\t\t\t'returnObject.modificationsAccessories.accessories':\r\n\t\t\t\t\t'=_input.motorcycles.0.isAccessoriesAdded',\r\n\r\n\t\t\t\t// Bike Details\r\n\t\t\t\t'returnObject.bikeDetails.locationParked':\r\n\t\t\t\t\t'=_input.motorcycles.0.garageType',\r\n\t\t\t\t'returnObject.bikeDetails.isItFinanced':\r\n\t\t\t\t\t'=_input.motorcycles.0.isFinanced',\r\n\t\t\t\t'returnObject.bikeDetails.financeWith':\r\n\t\t\t\t\t'=_input.motorcycles.0.financier',\r\n\t\t\t\t'returnObject.bikeDetails.kilometres':\r\n\t\t\t\t\t'=_input.motorcycles.0.motorCycleKilometers',\r\n\t\t\t\t'returnObject.bikeDetails.primaryBikeUse':\r\n\t\t\t\t\t'=_input.motorcycles.0.motorCycleUsage',\r\n\t\t\t\t'returnObject.bikeDetails.businessActivityType':\r\n\t\t\t\t\t'=_input.motorcycles.0.businessUsage',\r\n\t\t\t\t'returnObject.bikeDetails.commercialActivityType':\r\n\t\t\t\t\t'=_input.motorcycles.0.businessUsage',\r\n\t\t\t\t'returnObject.bikeDetails.existingDamage':\r\n\t\t\t\t\t'=_input.motorcycles.0.damage',\r\n\r\n\t\t\t\t//driver\r\n\t\t\t\t// 'vehicleForm.driver.paymentOptions': '=_input.?',\r\n\r\n\t\t\t\t//quote\r\n\t\t\t\t// 'returnObject.insuredExcessValue.coverType': '=_input.vehicles.0.coverType',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.comprehensivePref': '=_input.vehicles.0.sumInsuredType',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft': '=_input.vehicles.0.coverType',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.vehicleExcess': '=_input.vehicles.0.excess.voluntaryVehicleExcessOptions',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.standardVehicleExcess': '=_input.vehicles.0.excess.standardVehicleExcess',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.voluntaryVehicleExcess': '=_input.vehicles.0.excess.voluntaryVehicleExcess',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.ageExcessTier1': '=_input.vehicles.0.excess.ageExcessTier1',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.ageExcessTier2': '=_input.vehicles.0.excess.ageExcessTier2',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.undeclaredDriverTier2': '=_input.vehicles.0.excess.undeclaredDriverTier2',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.inexperiencedDriver': '=_input.vehicles.0.excess.inexperiencedDriver',\r\n\t\t\t\t// 'returnObject.insuredExcessValue.agreedValue': '=_input.vehicles.0.sumInsuredAmount',\r\n\r\n\t\t\t\t// optional benefits\r\n\t\t\t\t// 'returnObject.optionalBenefits.QPMMotVehHireCar': '=_input.vehicles.0.coverageOptions.0.selected',\r\n\t\t\t\t// 'returnObject.optionalBenefits.QPMMotVehWindscreen': '=_input.vehicles.0.coverageOptions.1.selected',\r\n\t\t\t\t// 'returnObject.optionalBenefits.QPMMotVehNCB': '=_input.vehicles.0.coverageOptions.2.selected',\r\n\r\n\t\t\t\t// registration details\r\n\t\t\t\t'returnObject.tellUsYourRegoNumber.regoNumber':\r\n\t\t\t\t\t'=_input.motorcycles.0.registrationNumber',\r\n\t\t\t\t// 'returnObject.vehicleInfo': \t\t\t '=_input.vehicles.0.vehicleInfo',\r\n\t\t\t\t// 'returnObject.retrievedQuoteRego.rego': '=_input.vehicles.0.registrationNumber',\r\n\t\t\t\t// 'returnObject.retrievedQuoteRego.state': '=_input.vehicles.0.garageAddress.state'\r\n\t\t\t\t// Contact\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordQuestion':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordQuestion',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordAnswer':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordAnswer',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.primaryPhone':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.primaryPhone'\r\n\t\t\t},\r\n\t\t\tconvertMapping = {\r\n\t\t\t\t'returnObject.aboutYourBike.purchaseDate': transformers.date,\r\n\t\t\t\t'returnObject.bikeDetails.isItFinanced': transformers.yesNo,\r\n\t\t\t\t'returnObject.getStarted.policyStartDate': transformers.date\r\n\t\t\t\t// 'returnObject.rider.isTheMainRider':\t\t\t\t\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t\t// 'returnObject.rider.isMemberOfClub':\t\t\t\t\t\t\t\t\ttransformers.yesNo\r\n\r\n\t\t\t\t// 'returnObject.carDetails.colour': transformers.camelcase,\r\n\t\t\t\t// 'returnObject.carDetails.carFinance': \t\t\ttransformers.financeType,\r\n\t\t\t\t// 'returnObject.retrievedQuoteRego.state': transformers.state,\r\n\t\t\t\t// 'returnObject.insuredExcessValue.coverType': transformers.coverType,\r\n\t\t\t\t// 'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft': transformers.thirdPartyPref,\r\n\t\t\t\t// 'returnObject.carDetails.whenDidYouBuyYear': transformers.purchaseMonthFromMonthYear,\r\n\t\t\t\t// 'returnObject.carDetails.whenDidYouBuyMonth': transformers.purchaseYearFromMonthYear\r\n\t\t\t};\r\n var transformedQuote = jsonMapper.convert(jsonMapper.transform(retrievedQuoteResponse, transformMapping), convertMapping);\r\n\r\n // region set comprehensive preference to null if the coverType is third party\r\n /*if(retrievedQuoteResponse.motorcycles[0].coverType.length && retrievedQuoteResponse.motorcycles[0].sumInsuredType.length) {\r\n var coverType = retrievedQuoteResponse.motorcycles[0].coverType;\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n transformedQuote.returnObject.insuredExcessValue.comprehensivePref = null;\r\n }\r\n }*/\r\n\t\t// endregion\r\n\r\n // region Mods and Accessories\r\n\t\tif (retrievedQuoteResponse.motorcycles[0].qpyCycleModifications) {\r\n\t\t\tvar mods = retrievedQuoteResponse.motorcycles[0].qpyCycleModifications;\r\n\r\n\t\t\ttransformedQuote.returnObject.modificationsAccessories.modificationsTable = mods.map(function(mod) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t'modification' : {\r\n\t\t\t\t\t\t\t'label' : transformers.modifications(mod.modification),\r\n\t\t\t\t\t\t\t'value' : mod.modification\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'modificationValue' : mod.purchasePrice\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (retrievedQuoteResponse.motorcycles[0].qpyMotorcycleAccessories) {\r\n\t\t\tvar acc = retrievedQuoteResponse.motorcycles[0].qpyMotorcycleAccessories;\r\n\r\n\t\t\ttransformedQuote.returnObject.modificationsAccessories.accessoriesTable = acc.map(function(accessory) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t'accessories' : {\r\n\t\t\t\t\t\t'label' : transformers.accessories(accessory.accessory),\r\n\t\t\t\t\t\t'value' : accessory.accessory\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'accessoryValue' : accessory.purchasePrice\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t// endregion\r\n\r\n // region Sort drivers to put mainRider first in the list\r\n if(retrievedQuoteResponse.motorcycles && retrievedQuoteResponse.motorcycles.length && retrievedQuoteResponse.motorcycles[0].riders) {\r\n var riders = $filter('orderBy')(retrievedQuoteResponse.motorcycles[0].riders, function(rider) {\r\n return rider.riderUsage == 'main' ? 0 : 1;\r\n });\r\n transformedQuote.returnObject.rider = {};\r\n transformedQuote.returnObject.rider.riders = [];\r\n riders.forEach(function(rider, index) {\r\n transformedQuote.returnObject.rider.riders.push(transformRider(rider));\r\n\r\n\t\t\t\tif (index === 0) {\r\n\t\t\t\t\t// License and insurance details\r\n\t\t\t\t\ttransformedQuote.returnObject.rider.riders[0].isTheMainRider = retrievedQuoteResponse.motorcycles[0].isTheMainRider;\r\n\t\t\t\t\ttransformedQuote.returnObject.rider.riders[0].isMemberOfClub = retrievedQuoteResponse.motorcycles[0].isMemberOfClub;\r\n\t\t\t\t\ttransformedQuote.returnObject.rider.riders[0].motorcycleClub = retrievedQuoteResponse.motorcycles[0].motorcycleClub;\r\n\t\t\t\t}\r\n });\r\n }\r\n // endregion\r\n\r\n // region set contact policy holders\r\n if(!!retrievedQuoteResponse.policyHolders && !!retrievedQuoteResponse.policyHolders.length) {\r\n var policyHolders = retrievedQuoteResponse.policyHolders;\r\n\t\t\tvar response = retrievedQuoteResponse;\r\n\r\n transformedQuote.returnObject.mainPolicyHolder = {};\r\n\r\n policyHolders.forEach(function(holder, index) {\r\n if(holder.mainHolder) {\r\n transformedQuote.returnObject.mainPolicyHolder = transformPolicyHolder(holder.contact);\r\n transformedQuote.returnObject.mainPolicyHolder.isMainRiderMainPolicyHolder = true;\r\n\r\n\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact = holder.contact;\r\n\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact\r\n\t\t\t\t\t\t.personalContactDetailsMailingPreference = response.documentDeliveryMethod;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// if (transformedQuote.returnObject.mainPolicyHolderContact.returnObject !== undefined\r\n\t\t\t\t\t// \t&& transformedQuote.returnObject.mainPolicyHolderContact.returnObject.dateOfBirth) {\r\n\t\t\t\t\t// \t\ttransformedQuote.returnObject.mainPolicyHolderContact.returnObject.dateOfBirth =\r\n\t\t\t\t\t// \t\t\ttransformers.date(transformedQuote.returnObject.mainPolicyHolderContact.returnObject.dateOfBirth);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t// set primary phone number to mobile phone\r\n\t\t\t\t\tif(response.policyHolders[0].contact.cellPhone) {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = response.policyHolders[0].contact.cellPhone;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// set primary phone number to home phone\r\n\t\t\t\t\tif(response.policyHolders[0].contact.homePhone) {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = response.policyHolders[0].contact.homePhone;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// set primary phone number to work phone\r\n\t\t\t\t\tif(response.policyHolders[0].contact.workPhone) {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = response.policyHolders[0].contact.workPhone;\r\n\t\t\t\t\t}\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (holder.contact.contactType === 'company') {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany = {};\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.name = holder.contact.name;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.abn = holder.contact.abn;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.email = holder.contact.emailAddress1;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.officePhone = holder.contact.workPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.companyAddress = holder.contact.primaryAddress;\r\n\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact = {};\r\n\t\t\t\t\t\tvar authorisedPerson = holder.contact.authorisedPersons[0].person;\r\n\r\n\t\t\t\t\t\tif (response.policyAddress.addressLine1 === authorisedPerson.primaryAddress.addressLine1 &&\r\n\t\t\t\t\t\t\tresponse.policyAddress.postalCode === authorisedPerson.primaryAddress.postalCode) {\r\n\t\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsPostalOption = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsPostalOption = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactTitle = authorisedPerson.prefix;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactFirstName = authorisedPerson.firstName;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactLastName = authorisedPerson.lastName;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactGender = authorisedPerson.gender;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDateOfBirth = transformers.date(authorisedPerson.dateOfBirth);\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsAddress = authorisedPerson.primaryAddress;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsEmail = authorisedPerson.emailAddress1;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsPostalAddress = response.policyAddress;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.companyContactDetailsMailingPreference =\r\n\t\t\t\t\t\t\tresponse.documentDeliveryMethod;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.primaryPhone = authorisedPerson.primaryPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.preferredNumber = authorisedPerson.homePhone || authorisedPerson.workPhone || authorisedPerson.cellPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.passwordQuestion = holder.contact.passwordQuestion;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.enterAQuestion = holder.contact.passwordQuestionStr || '';\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.passwordAnswer = holder.contact.passwordAnswer;\r\n\t\t\t\t\t}\r\n } else {\r\n\t\t\t\t\tif (index === 1) {\r\n\t\t\t\t\t\ttransformedQuote.returnObject.additionalPolicyHolders = {};\r\n\t\t\t\t\t\ttransformedQuote.returnObject.additionalPolicyHolders.policyHolders = [];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttransformedQuote.returnObject.additionalPolicyHolders.policyHolders.push(transformPolicyHolder(holder.contact));\r\n }\r\n });\r\n\r\n }\r\n // endregion\r\n\r\n void 0;\r\n void 0;\r\n\r\n return transformedQuote.returnObject;\r\n }\r\n return {\r\n transform: transform\r\n }\r\n}\r\n\nfunction BikeStructureRequestTransformer(\r\n\tjsonMapper,\r\n\tutil,\r\n\tquoteOptions,\r\n\tstorage\r\n) {\r\n\tvar structureQuoteMapping = {\r\n\t\tperiodStartDate: '=_input.bikeForm.getStarted.policyStartDate',\r\n\t\tmotorcycles: [],\r\n\t\t'motorcycles.0': {},\r\n\t\t'motorcycles.0.sumInsuredType':\r\n\t\t\t'=_input.bikeForm.insuredExcessValue.comprehensivePref',\r\n\t\t'motorcycles.0.sumInsuredAmount': '=_regoSearch.goodRetailPrice',\r\n\t\t'motorcycles.0.otherRidersCount':\r\n\t\t\t'=_input.bikeForm.rider.numberOfOtherRiders',\r\n\t\t'motorcycles.0.motorcycleInfo':\r\n\t\t\t'=_input.bikeForm.aboutYourBike.yearMakeModelResponse',\r\n\t\t'motorcycles.0.accountLocation': '=_addressSearch',\r\n\t\t'motorcycles.0.purchasePrice':\r\n\t\t\t'=_input.bikeForm.aboutYourBike.bikeCost',\r\n\t\t'motorcycles.0.purchaseDate':\r\n\t\t\t'=_input.bikeForm.aboutYourBike.purchaseDate',\r\n\t\t'motorcycles.0.youngestRiderDateOfBirth':\r\n\t\t\t'=_input.bikeForm.rider.youngestRiderDob',\r\n\t\t'motorcycles.0.isBikeModified':\r\n\t\t\t'=_input.bikeForm.modificationsAccessories.modifications',\r\n\t\t'motorcycles.0.isAccessoriesAdded':\r\n\t\t\t'=_input.bikeForm.modificationsAccessories.accessories',\r\n\r\n\t\t'motorcycles.0.riders': [],\r\n\t\t'motorcycles.0.riders.0.licensedToRide':\r\n\t\t\t'_input.bikeForm.riders[0].licensedToRide',\r\n\r\n\t\tpolicyHolders: [],\r\n\t\t'policyHolders.*.contact.prefix':\r\n\t\t\t'=_input.bikeForm.rider.riders[0].person.title',\r\n\t\t'policyHolders.0': {},\r\n\t\t'policyHolders.0.contact.gender': '=_input.bikeForm.rider.gender',\r\n\t\t'policyHolders.0.contact.dateOfBirth':\r\n\t\t\t'=_input.bikeForm.rider.dateOfBirth',\r\n\t\t'policyHolders.0.contact.emailAddress1':\r\n\t\t\t'=_input.bikeForm.yourEmail.email',\r\n\t\t'policyHolders.0.contact.primaryAddress': '=_addressSearch',\r\n\t\t'policyHolders.0.contact.contactType':\r\n\t\t\t'=_input.bikeForm.getStarted.personOrCompany',\r\n\r\n\t\tpolicyAddress: '=_addressSearch',\r\n\t\t'policyAddress.addressType': 'postal',\r\n\r\n\t\temail: '=_input.email',\r\n\t\tcampaignCode: '=_input.bikeForm.promotionalCode.promotionalCode',\r\n\t\tmainContactAddress: '=_addressSearch-main-contact',\r\n\t\tpostalAddress: '=_addressSearch-postal-address'\r\n\t};\r\n\r\n\t// region Step 1\r\n\tfunction updateIsMotorRegistered(transformedRequest) {\r\n\t\ttry {\r\n\t\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\t\tif (bike.coverType === 'fireandtheft') {\r\n\t\t\t\tbike.isMotorRegistered = false;\r\n\t\t\t}\r\n\t\t\tif (bike.isMotorRegistered === undefined) {\r\n\t\t\t\tbike.isMotorRegistered = true;\r\n\t\t\t}\r\n\t\t} catch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyHolderPrimaryAddress(transformedRequest) {\r\n\t\ttry {\r\n\t\t\tvar policyHolder = transformedRequest.policyHolders[0];\r\n\r\n\t\t\tif (!!policyHolder.contact.primaryAddress) {\r\n\t\t\t\tpolicyHolder.contact.primaryAddress.addressType = 'residential';\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.policyHolders[0] = policyHolder;\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction findYoungestRider(riders) {\r\n\t\tvar youngest = null;\r\n\t\triders.forEach(function(rider) {\r\n\t\t\tif (!youngest) {\r\n\t\t\t\tyoungest = rider;\r\n\t\t\t} else if (isYounger(rider, youngest)) {\r\n\t\t\t\tyoungest = rider;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tfunction isYounger(rider, otherRider) {\r\n\t\t\treturn (\r\n\t\t\t\tmoment(rider.person.dateOfBirth, 'DD/MM/YYYY') >\r\n\t\t\t\tmoment(otherRider.person.dateOfBirth, 'DD/MM/YYYY')\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn youngest;\r\n\t}\r\n\r\n\tfunction updateModifications(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (!!userInput.bikeForm && !!userInput.bikeForm.modificationsAccessories) {\r\n\t\t\tif (!!userInput.bikeForm.modificationsAccessories.modifications) {\r\n\t\t\t\tvar modifications =\r\n\t\t\t\t\tuserInput.bikeForm.modificationsAccessories\r\n\t\t\t\t\t\t.modificationsTable;\r\n\r\n\t\t\t\tbike.qpyCycleModifications = modifications.map(function(\r\n\t\t\t\t\tmod,\r\n\t\t\t\t\ti\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tmodification: mod.modification.value,\r\n\t\t\t\t\t\tpurchasePrice: mod.modificationValue\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (!!userInput.bikeForm.modificationsAccessories.accessories) {\r\n\t\t\t\tvar accessories =\r\n\t\t\t\t\tuserInput.bikeForm.modificationsAccessories\r\n\t\t\t\t\t\t.accessoriesTable;\r\n\r\n\t\t\t\tbike.qpyMotorcycleAccessories = accessories.map(function(\r\n\t\t\t\t\tacc,\r\n\t\t\t\t\ti\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\taccessory: acc.accessories.value,\r\n\t\t\t\t\t\tpurchasePrice: acc.accessoryValue\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttransformedRequest.motorcycles[0] = bike;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateKilometres(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.kilometres\r\n\t\t) {\r\n\t\t\tbike.motorCycleKilometers =\r\n\t\t\t\tuserInput.bikeForm.bikeDetails.kilometres;\r\n\t\t\ttransformedRequest.motorcycles[0] = bike;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateGarageType(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.locationParked\r\n\t\t) {\r\n\t\t\tbike.garageType = userInput.bikeForm.bikeDetails.locationParked;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.motorcycles[0] = bike;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateFinancier(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.isItFinanced\r\n\t\t) {\r\n\t\t\tbike.isFinanced = userInput.bikeForm.bikeDetails.isItFinanced;\r\n\t\t\tbike.financier =\r\n\t\t\t\tuserInput.bikeForm.bikeDetails.financeWith.value ||\r\n\t\t\t\tuserInput.bikeForm.bikeDetails.financeWith;\r\n\t\t} else {\r\n\t\t\tbike.isFinanced = false;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateDamage(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.existingDamage\r\n\t\t) {\r\n\t\t\tbike.damage = userInput.bikeForm.bikeDetails.existingDamage;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.motorcycles[0] = bike;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateUsage(transformedRequest, userInput) {\r\n\t\tvar bike = transformedRequest.motorcycles[0];\r\n\r\n\t\tif (\r\n\t\t\t!!userInput.bikeForm &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t!!userInput.bikeForm.bikeDetails.primaryBikeUse\r\n\t\t) {\r\n\t\t\tbike.motorCycleUsage =\r\n\t\t\t\tuserInput.bikeForm.bikeDetails.primaryBikeUse;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.motorcycles[0] = bike;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateMotorcycleInfo(transformedRequest, userInput) {\r\n\t\ttry{\r\n\t\t\tif (\r\n\t\t\t\t!!userInput.bikeForm &&\r\n\t\t\t\t!!userInput.bikeForm.aboutYourBike &&\r\n\t\t\t\t!!userInput.bikeForm.aboutYourBike.regoDetails\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].motorcycleInfo =\r\n\t\t\t\t\tuserInput.bikeForm.aboutYourBike.regoDetails;\r\n\t\t\t} else if (!!userInput.bikeForm.motorcycleInfo) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].motorcycleInfo =\r\n\t\t\t\t\tuserInput.bikeForm.motorcycleInfo;\r\n\t\t\t}\r\n\t\r\n\t\t\tif (!!userInput.bikeForm && \r\n\t\t\t\t!!userInput.bikeForm.bikeDetails &&\r\n\t\t\t\t!!userInput.bikeForm.bikeDetails.businessActivityType) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].businessUsage =\r\n\t\t\t\t\tuserInput.bikeForm.bikeDetails.businessActivityType;\r\n\t\t\t} else if (!!userInput.bikeForm.bikeDetails.commercialActivityType) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].commercialUsage =\r\n\t\t\t\t\tuserInput.bikeForm.bikeDetails.commercialActivityType;\r\n\t\t\t}\r\n\t\t} catch(ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\t\t\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// endregion\r\n\r\n\t// region Step 2\r\n\tfunction updateRiders(transformedRequest, userInput) {\r\n\t\ttransformedRequest.motorcycles[0].riders = [];\r\n\t\tif (!!userInput.bikeForm && !!userInput.bikeForm.rider) {\r\n\t\t\tif (!!userInput.bikeForm.rider.riders) {\r\n\t\t\t\tuserInput.bikeForm.rider.riders.forEach(function(rider) {\r\n\t\t\t\t\trider.person.contactType = 'person';\r\n\t\t\t\t\trider.person.prefix = rider.person.title;\r\n\t\t\t\t\trider.person.primaryAddress =\r\n\t\t\t\t\t\ttransformedRequest.mainContactAddress !== null\r\n\t\t\t\t\t\t\t? transformedRequest.mainContactAddress\r\n\t\t\t\t\t\t\t: transformedRequest.policyAddress;\r\n\r\n\t\t\t\t\t//region yearsLicenced\r\n\t\t\t\t\trider.yearsLicenced = rider.yearsHeld;\r\n\t\t\t\t\tswitch (rider.yearsHeld) {\r\n\t\t\t\t\t\tcase 'lessThan_1':\r\n\t\t\t\t\t\t\trider.yearsLicenced = '0';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'greaterThan_5':\r\n\t\t\t\t\t\t\trider.yearsLicenced = '6';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\trider.yearsLicenced = rider.yearsHeld;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t// region riderHistory\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\trider.threeYears_accidentsClaims &&\r\n\t\t\t\t\t\trider.threeYears_accidentsClaimsDetails.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\trider.threeYears_accidentsClaims = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelled &&\r\n\t\t\t\t\t\trider\r\n\t\t\t\t\t\t\t.threeYears_restrictedSuspendedDisqualifiedCancelledDetails\r\n\t\t\t\t\t\t\t.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelled = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\trider.fiveYears_chargedOrConvicted &&\r\n\t\t\t\t\t\trider.fiveYears_chargedOrConvictedDetails.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\trider.fiveYears_chargedOrConvicted = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\trider.hasClaim = rider.threeYears_accidentsClaims;\r\n\t\t\t\t\trider.hasConviction = rider.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\trider.hasLostLicence =\r\n\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\t\t\t\t\trider.riderHistory = [];\r\n\r\n\t\t\t\t\tif (rider.threeYears_accidentsClaims) {\r\n\t\t\t\t\t\trider.riderHistory = rider.riderHistory.concat(\r\n\t\t\t\t\t\t\trider.threeYears_accidentsClaimsDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelled\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\trider.riderHistory = rider.riderHistory.concat(\r\n\t\t\t\t\t\t\trider.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (rider.fiveYears_chargedOrConvicted) {\r\n\t\t\t\t\t\trider.riderHistory = rider.riderHistory.concat(\r\n\t\t\t\t\t\t\trider.fiveYears_chargedOrConvictedDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trider.riderHistory.forEach(function(rh) {\r\n\t\t\t\t\t\trh.pattern = {\r\n\t\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\trh.pattern.publicID = rh.description.publicID;\r\n\t\t\t\t\t\trh.pattern.description = rh.description.label;\r\n\t\t\t\t\t\trh.pattern.code = rh.description.code;\r\n\t\t\t\t\t\trh.pattern.filter1 = rh.description.filter1;\r\n\r\n\t\t\t\t\t\trh.month = rh.month.value.toLowerCase();\r\n\t\t\t\t\t\trh.year = rh.year.value;\r\n\r\n\t\t\t\t\t\tdelete rh.description;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t// region current insurer\r\n\t\t\t\t\tif (!!rider.previousInsurer) {\r\n\t\t\t\t\t\trider.currentInsurer = rider.previousInsurer;\r\n\r\n\t\t\t\t\t\tdelete rider.previousInsurer;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// endregion\r\n\r\n\t\t\t\t\ttransformedRequest.motorcycles[0].riders.push({\r\n\t\t\t\t\t\trider: rider\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// endregion\r\n\r\n\t\t\t\t\t// region motorcycle club\r\n\t\t\t\t\tif (!!rider.isMemberOfClub && rider.motorcycleClub) {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].isMemberOfClub =\r\n\t\t\t\t\t\t\trider.isMemberOfClub;\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].motorcycleClub =\r\n\t\t\t\t\t\t\trider.motorcycleClub;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttransformedRequest.motorcycles[0].riders[0].riderUsage = 'main';\r\n\t\t\t}\r\n\r\n\t\t\t// licensed to ride\r\n\t\t\ttransformedRequest.motorcycles[0].riders[0].licensedToRide =\r\n\t\t\t\tuserInput.bikeForm.rider.riders[0].licensedToRide;\r\n\r\n\t\t\t// is main rider\r\n\t\t\ttransformedRequest.motorcycles[0].isTheMainRider =\r\n\t\t\t\tuserInput.bikeForm.rider.riders[0].isTheMainRider;\r\n\t\t} else {\r\n\t\t\ttransformedRequest.motorcycles[0].riders = [\r\n\t\t\t\t{\r\n\t\t\t\t\triderUsage: 'main'\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyHolders(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar bikeForm = userInput.bikeForm,\r\n\t\t\t\tmainPolicyHolder = bikeForm.mainPolicyHolder,\r\n\t\t\t\tcompanyDetails = bikeForm.aboutCompany,\r\n\t\t\t\tmainPolicyHolderContact = bikeForm.mainPolicyHolderContact,\r\n\t\t\t\triders = transformedRequest.motorcycles[0].riders;\r\n\r\n\t\t\t// region mainPolicyHolder\r\n\t\t\tif (!!mainPolicyHolder) {\r\n\t\t\t\tvar policyHolders = [];\r\n\t\t\t\tif (!!mainPolicyHolderContact) {\r\n\t\t\t\t\t// set primary address\r\n\t\t\t\t\tif (!!mainPolicyHolderContact.address) {\r\n\t\t\t\t\t\tmainPolicyHolderContact.primaryAddress =\r\n\t\t\t\t\t\t\ttransformedRequest.mainContactAddress !== null\r\n\t\t\t\t\t\t\t\t? transformedRequest.mainContactAddress\r\n\t\t\t\t\t\t\t\t: transformedRequest.motorcycles[0].accountLocation;\r\n\t\t\t\t\t\tdelete mainPolicyHolderContact.address;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tmainPolicyHolder.policyContact = mainPolicyHolderContact;\r\n\r\n\t\t\t\tif (mainPolicyHolder.isMainRiderMainPolicyHolder) {\r\n\t\t\t\t\tvar rider = util.deepClone(\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider\r\n\t\t\t\t\t);\r\n\t\t\t\t\tObject.extend(mainPolicyHolder, rider.person);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpolicyHolders.push(mainPolicyHolder);\r\n\t\t\t\tif (\r\n\t\t\t\t\tbikeForm.additionalPolicyHolders &&\r\n\t\t\t\t\tbikeForm.additionalPolicyHolders.policyHolders\r\n\t\t\t\t) {\r\n\t\t\t\t\tpolicyHolders = policyHolders.concat(\r\n\t\t\t\t\t\tbikeForm.additionalPolicyHolders.policyHolders\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpolicyHolders.forEach(function(policyHolder, index) {\r\n\t\t\t\t\tvar contact = util.deepClone(policyHolder);\r\n\t\t\t\t\tif (!transformedRequest.policyHolders[index])\r\n\t\t\t\t\t\ttransformedRequest.policyHolders[index] = {};\r\n\r\n\t\t\t\t\tvar transformedContact =\r\n\t\t\t\t\t\ttransformedRequest.policyHolders[index];\r\n\t\t\t\t\tif (!contact.contactType) contact.contactType = 'person';\r\n\r\n\t\t\t\t\tcontact.prefix = contact.title;\r\n\t\t\t\t\tif (contact.policyContact) {\r\n\t\t\t\t\t\tObject.extend(contact, contact.policyContact);\r\n\t\t\t\t\t\tif (contact.primaryPhone == 'mobile')\r\n\t\t\t\t\t\t\tcontact.cellPhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\t\telse if (contact.primaryPhone == 'home')\r\n\t\t\t\t\t\t\tcontact.homePhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\t\telse if (contact.primaryPhone == 'work')\r\n\t\t\t\t\t\t\tcontact.workPhone = contact.primaryPhoneNumber;\r\n\r\n\t\t\t\t\t\tdelete contact.policyContact;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!contact.primaryAddress)\r\n\t\t\t\t\t\tcontact.primaryAddress = util.clone(\r\n\t\t\t\t\t\t\ttransformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t\t\t\t.primaryAddress\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t// region driving history\r\n\t\t\t\t\tcontact.hasClaim = contact.threeYears_accidentsClaims;\r\n\t\t\t\t\tcontact.hasConviction = contact.fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tcontact.hasLostLicence =\r\n\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.threeYears_accidentsClaims &&\r\n\t\t\t\t\t\tcontact.threeYears_accidentsClaimsDetails.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.threeYears_accidentsClaims = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelled &&\r\n\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t.threeYears_restrictedSuspendedDisqualifiedCancelledDetails\r\n\t\t\t\t\t\t\t.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelled = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.fiveYears_chargedOrConvicted &&\r\n\t\t\t\t\t\tcontact.fiveYears_chargedOrConvictedDetails.length < 1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.fiveYears_chargedOrConvicted = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontact.drivingHistory = [];\r\n\r\n\t\t\t\t\tif (contact.threeYears_accidentsClaims) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.threeYears_accidentsClaimsDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelled\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.threeYears_restrictedSuspendedDisqualifiedCancelledDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (contact.fiveYears_chargedOrConvicted) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.fiveYears_chargedOrConvictedDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontact.drivingHistory.forEach(function(rh) {\r\n\t\t\t\t\t\trh.riderPattern = {\r\n\t\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\trh.riderPattern.publicID = rh.description.publicID;\r\n\t\t\t\t\t\trh.riderPattern.description = rh.description.label;\r\n\t\t\t\t\t\trh.riderPattern.code = rh.description.code;\r\n\t\t\t\t\t\trh.riderPattern.filter1 = rh.description.filter1;\r\n\r\n\t\t\t\t\t\trh.riderMonth = rh.month.value.toLowerCase();\r\n\t\t\t\t\t\trh.year = parseInt(rh.year.value);\r\n\r\n\t\t\t\t\t\tdelete rh.description;\r\n\t\t\t\t\t\tdelete rh.month;\r\n\t\t\t\t\t\tdelete rh.pattern;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\tif (!transformedContact.contact)\r\n\t\t\t\t\t\ttransformedContact.contact = {};\r\n\t\t\t\t\ttransformedContact.contact.drivingHistory = [];\r\n\t\t\t\t\tObject.extend(transformedContact.contact, contact);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// region rider person\r\n\t\t\t\tif (!!riders[0] && !!riders[0].rider && !!riders[0].rider.person) {\r\n\t\t\t\t\tvar riders = transformedRequest.motorcycles[0].riders;\r\n\r\n\t\t\t\t\triders.forEach(function(rider, index) {\r\n\t\t\t\t\t\t//rider.rider.person.primaryAddress = transformedRequest.policyAddress;\r\n\r\n\t\t\t\t\t\t// first rider\r\n\t\t\t\t\t\tif (index === 0) {\r\n\t\t\t\t\t\t\trider.rider.person.primaryPhone =\r\n\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.primaryPhone;\r\n\r\n\t\t\t\t\t\t\tswitch (mainPolicyHolder.policyContact.primaryPhone) {\r\n\t\t\t\t\t\t\t\tcase 'mobile':\r\n\t\t\t\t\t\t\t\t\trider.rider.person.cellPhone =\r\n\t\t\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.primaryPhoneNumber;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'home':\r\n\t\t\t\t\t\t\t\t\trider.rider.person.homePhone =\r\n\t\t\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.primaryPhoneNumber;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'work':\r\n\t\t\t\t\t\t\t\t\trider.rider.person.workPhone =\r\n\t\t\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.primaryPhoneNumber;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\tthrow new Error(\r\n\t\t\t\t\t\t\t\t\t\t'unknown primaryPhone ' + primaryPhone\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\trider.rider.person.passwordAnswer =\r\n\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.passwordAnswer;\r\n\t\t\t\t\t\t\trider.rider.person.passwordQuestion =\r\n\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.passwordQuestion;\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\trider.rider.person.passwordQuestion ===\r\n\t\t\t\t\t\t\t\t'customer_created_question'\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\trider.rider.person.passwordQuestionStr =\r\n\t\t\t\t\t\t\t\t\tmainPolicyHolder.policyContact.passwordQuestionStr;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\t// endregion\r\n\t\t\t} else if (!!companyDetails) {\r\n\t\t\t\tif (!!riders[0] && !!riders[0].rider && !!riders[0].rider.person) {\r\n\t\t\t\t\tvar riders = transformedRequest.motorcycles[0].riders;\r\n\r\n\t\t\t\t\triders.forEach(function(rider) {\r\n\t\t\t\t\t\trider.rider.person.primaryAddress =\r\n\t\t\t\t\t\t\ttransformedRequest.policyAddress;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else if (\r\n\t\t\t\ttransformedRequest.motorcycles[0].riders[0] &&\r\n\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider &&\r\n\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person\r\n\t\t\t) {\r\n\t\t\t\tvar rider = transformedRequest.motorcycles[0].riders[0].rider;\r\n\t\t\t\tvar contact = transformedRequest.policyHolders[0].contact;\r\n\t\t\t\tObject.extend(contact, rider.person);\r\n\t\t\t\tcontact.contactType = 'person';\r\n\t\t\t\tcontact.hasClaim = rider.hasClaim;\r\n\t\t\t\tcontact.hasConviction = rider.hasConviction;\r\n\t\t\t}\r\n\t\t\t// endregion\r\n\r\n\t\t\ttransformedRequest.policyHolders.forEach(function(holder, index) {\r\n\t\t\t\tholder.mainHolder = index === 0;\r\n\t\t\t});\r\n\r\n\t\t\t// var rider = transformedRequest.motorcycles[0].riders[0].rider;\r\n\t\t\t// Object.extend(rider.person, transformedRequest.policyHolders[0]);\r\n\t\t\t// rider.person.emailAddress1 = userInput.mainPolicyHolderContact.emailAddress1;\r\n\r\n\t\t\tif (userInput.email) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.email;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tangular.isDefined(\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.email;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (transformedRequest.policyHolders[0].contact.emailAddress1) {\r\n\t\t\t\t\t\t//use the existing if available\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person\r\n\t\t\t\t\t\t\t.emailAddress1\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t//use the existing if available\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].riders[0].rider.person.emailAddress1 =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact\r\n\t\t\t\t\t.personalContactDetailsMailingPreference\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.personalContactDetailsMailingPreference;\r\n\t\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t.personalContactDetailsMailingPreference;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAccountLocation(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar accountLocation = transformedRequest.motorcycles[0].accountLocation,\r\n\t\t\t\tbikeForm = userInput.bikeForm;\r\n\r\n\t\t\taccountLocation.addressType = 'residential';\r\n\r\n\t\t\tif (!!accountLocation) {\r\n\t\t\t\tif (\r\n\t\t\t\t\t!!bikeForm.getStarted &&\r\n\t\t\t\t\t!!bikeForm.getStarted.personOrCompany &&\r\n\t\t\t\t\tbikeForm.getStarted.personOrCompany === 'company'\r\n\t\t\t\t) {\r\n\t\t\t\t\taccountLocation.addressType = 'business';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].accountLocation = accountLocation;\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAdditionalRiders(transformedRequest, userInput) {\r\n\t\ttry{\r\n\t\t\tvar fromRapidEstimate = !userInput.fromFullQuote,\r\n\t\t\t\trider = userInput.bikeForm.rider,\r\n\t\t\t\triders = rider ? rider.riders : null,\r\n\t\t\t\t/** required for when checking decline on step 1 */\r\n\t\t\t\tyoungRider = null;\r\n\r\n\t\t\tif (!rider) return transformedRequest;\r\n\r\n\t\t\tif (!fromRapidEstimate) youngRider = findYoungestRider(rider.riders);\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].youngestRiderGender = fromRapidEstimate\r\n\t\t\t\t? rider.youngestRiderGender /** value from rapid estimate */\r\n\t\t\t\t: youngRider\r\n\t\t\t\t? youngRider.person.gender\r\n\t\t\t\t: null; /** value from full quote */\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].otherRiderHasProLicense = fromRapidEstimate\r\n\t\t\t\t? rider.provisionalLicence /** value from rapid estimate */\r\n\t\t\t\t: youngRider\r\n\t\t\t\t? youngRider.licenceType == 'provisional'\r\n\t\t\t\t: null; /** value from full path */\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].youngestRiderDOB = fromRapidEstimate\r\n\t\t\t\t? rider.youngestRiderDob\r\n\t\t\t\t: youngRider\r\n\t\t\t\t? youngRider.person.dateOfBirth\r\n\t\t\t\t: null;\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].otherRiderUsageTimes = fromRapidEstimate\r\n\t\t\t\t? rider.numberOfOtherRiders /* value from rapid estimate */\r\n\t\t\t\t: riders.length; /* value from full quote */\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// endregion\r\n\r\n\t// region Step 3\r\n\r\n\t// endregion\r\n\r\n\t// region Step 4\r\n\tfunction updateRegoDetails(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar tellUsYourRegoNumber = userInput.bikeForm.tellUsYourRegoNumber,\r\n\t\t\t\tregoNumber = null;\r\n\r\n\t\t\tif (tellUsYourRegoNumber && tellUsYourRegoNumber.regoNumber) {\r\n\t\t\t\tregoNumber = tellUsYourRegoNumber.regoNumber;\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.motorcycles[0].registrationNumber = regoNumber;\r\n\t\t} catch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// endregion\r\n\r\n\tfunction updateCompanyContactDetails(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar policyHolder = util.deepClone(transformedRequest.policyHolders[0]);\r\n\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.getStarted &&\r\n\t\t\t\tuserInput.bikeForm.getStarted.personOrCompany === 'company' &&\r\n\t\t\t\t!!userInput.bikeForm.companyContact &&\r\n\t\t\t\t!!userInput.bikeForm.aboutCompany\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email = userInput.bikeForm.aboutCompany.email;\r\n\r\n\t\t\t\tpolicyHolder = {};\r\n\t\t\t\tpolicyHolder.contact = policyHolder.contact || {};\r\n\t\t\t\tpolicyHolder.contact.abn = userInput.bikeForm.aboutCompany.abn;\r\n\t\t\t\tpolicyHolder.contact.contactType = 'company';\r\n\t\t\t\tpolicyHolder.contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.bikeForm.aboutCompany.email;\r\n\t\t\t\tpolicyHolder.contact.passwordQuestion =\r\n\t\t\t\t\tuserInput.bikeForm.companyContact.passwordQuestion;\r\n\t\t\t\tif (\r\n\t\t\t\t\tpolicyHolder.contact.passwordQuestion ===\r\n\t\t\t\t\t'customerCreatedQuestion'\r\n\t\t\t\t) {\r\n\t\t\t\t\tpolicyHolder.contact.passwordQuestionStr =\r\n\t\t\t\t\t\tuserInput.bikeForm.companyContact.enterAQuestion;\r\n\t\t\t\t}\r\n\t\t\t\tpolicyHolder.contact.passwordAnswer =\r\n\t\t\t\t\tuserInput.bikeForm.companyContact.passwordAnswer;\r\n\t\t\t\tpolicyHolder.contact.hasClaim = false;\r\n\t\t\t\tpolicyHolder.contact.hasConviction = false;\r\n\t\t\t\tpolicyHolder.contact.isJustInsured = false;\r\n\t\t\t\tpolicyHolder.contact.name = userInput.bikeForm.aboutCompany.name;\r\n\t\t\t\tpolicyHolder.contact.primaryAddress =\r\n\t\t\t\t\tuserInput.bikeForm.aboutCompany.companyAddress;\r\n\t\t\t\tpolicyHolder.contact.primaryPhone = 'work';\r\n\t\t\t\tpolicyHolder.contact.workPhone =\r\n\t\t\t\t\tuserInput.bikeForm.aboutCompany.officePhone;\r\n\r\n\t\t\t\t// region Authorised Person\r\n\t\t\t\tvar authorisedPerson = {};\r\n\t\t\t\tauthorisedPerson.contactType = 'person';\r\n\t\t\t\tvar contact = userInput.bikeForm.companyContact;\r\n\r\n\t\t\t\tauthorisedPerson.primaryAddress = contact.address;\r\n\t\t\t\tauthorisedPerson.primaryPhone = contact.primaryPhone;\r\n\t\t\t\tswitch (authorisedPerson.primaryPhone) {\r\n\t\t\t\t\tcase 'mobile':\r\n\t\t\t\t\t\tauthorisedPerson.cellPhone = contact.preferredNumber;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'home':\r\n\t\t\t\t\t\tauthorisedPerson.homePhone = contact.preferredNumber;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'work':\r\n\t\t\t\t\t\tauthorisedPerson.workPhone = contact.preferredNumber;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tthrow new Error('unknown primaryPhone ' + primaryPhone);\r\n\t\t\t\t}\r\n\t\t\t\tauthorisedPerson.dateOfBirth = contact.companyContactDateOfBirth;\r\n\t\t\t\tauthorisedPerson.firstName = contact.companyContactFirstName;\r\n\t\t\t\tauthorisedPerson.lastName = contact.companyContactLastName;\r\n\t\t\t\tauthorisedPerson.gender = contact.companyContactGender;\r\n\t\t\t\tauthorisedPerson.prefix = contact.companyContactTitle;\r\n\t\t\t\tauthorisedPerson.emailAddress1 = contact.companyContactDetailsEmail;\r\n\t\t\t\tauthorisedPerson.primaryAddress =\r\n\t\t\t\t\tcontact.companyContactDetailsAddress;\r\n\r\n\t\t\t\tpolicyHolder.contact.authorisedPersons = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tperson: authorisedPerson\r\n\t\t\t\t\t}\r\n\t\t\t\t];\r\n\r\n\t\t\t\tif (contact.postalOption === false) {\r\n\t\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\t\tcontact.companyContactDetailsPostalAddress;\r\n\t\t\t\t}\r\n\t\t\t\t// endregion\r\n\t\t\t} else {\r\n\t\t\t\tpolicyHolder.contact.contactType =\r\n\t\t\t\t\tuserInput.bikeForm.getStarted.personOrCompany;\r\n\t\t\t\tpolicyHolder.contact.authorisedPersons = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tperson: {\r\n\t\t\t\t\t\t\tcontactType: 'person',\r\n\t\t\t\t\t\t\tprimaryAddress: transformedRequest.policyAddress\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t];\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.policyHolders[0] = policyHolder;\r\n\t\t\ttransformedRequest.policyHolders[0].mainHolder = true;\r\n\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.companyContact &&\r\n\t\t\t\tuserInput.bikeForm.companyContact\r\n\t\t\t\t\t.companyContactDetailsMailingPreference\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\t\tuserInput.bikeForm.companyContact.companyContactDetailsMailingPreference;\r\n\t\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t.companyContactDetailsMailingPreference;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateMotorcycleInsuranceTypeAndAmount(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\ttry {\r\n\t\t\tvar insuredExcessValue = userInput.bikeForm.insuredExcessValue;\r\n\t\t\tif (insuredExcessValue) {\r\n\t\t\t\ttransformedRequest.motorcycles[0].sumInsuredType =\r\n\t\t\t\t\tinsuredExcessValue.comprehensivePref;\r\n\t\t\t\tif (insuredExcessValue.comprehensivePref == 'agreed') {\r\n\t\t\t\t\tif (!!insuredExcessValue.agreedValue) {\r\n\t\t\t\t\t\ttransformedRequest.motorcycles[0].sumInsuredAmount =\r\n\t\t\t\t\t\t\tinsuredExcessValue.agreedValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ttransformedRequest.motorcycles[0].excess.flexiExcessExcess = userInput.bikeForm.insuredExcessValue.flexiExcess;\r\n\t\t\t}\r\n\t\t} catch (ex) { \r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//updates the email\r\n\tfunction updateEmail(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t} else {\r\n\t\t\t\t//set email from maincontact if not available in tellUsABitMore\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\t\tuserInput.bikeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// send the campaign code to GW\r\n\t\t\tif (\r\n\t\t\t\tuserInput.bikeForm &&\r\n\t\t\t\tuserInput.bikeForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.bikeForm.tellUsABitMore.promotionalCode\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.campaignCode =\r\n\t\t\t\t\tuserInput.bikeForm.tellUsABitMore.promotionalCode;\r\n\t\t\t}\r\n\t }\r\n\t\tcatch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyAddress(transformedRequest, userInput) {\r\n\t\ttry {\r\n\t\t\tvar postalAddress = storage.getItem('policy-address');\r\n\r\n\t\t\tif (\r\n\t\t\t\tangular.isDefined(userInput.bikeForm.mainPolicyHolderContact) ||\r\n\t\t\t\tangular.isDefined(userInput.bikeForm.companyContact)\r\n\t\t\t) {\r\n\t\t\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar isPostalOption = true;\r\n\t\t\t\t\tif(userInput.bikeForm.getStarted.personOrCompany == 'person'){\r\n\t\t\t\t\t\tisPostalOption = userInput.bikeForm.mainPolicyHolderContact.postalOption;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tisPostalOption =\r\n\t\t\t\t\t\t\tuserInput.bikeForm.companyContact.postalOption;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (Object.keys(postalAddress).length > 0 && !isPostalOption) {\r\n\t\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tdelete transformedRequest.postalAddress;\r\n\t\t\tdelete transformedRequest.mainContactAddress;\r\n\t\t} catch (ex) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(userInput) {\r\n\t\tvar transformedRequest = jsonMapper.transform(\r\n\t\t\tuserInput,\r\n\t\t\tstructureQuoteMapping\r\n\t\t);\r\n\t\ttransformedRequest = updateIsMotorRegistered(transformedRequest);\r\n\t\ttransformedRequest = updatePolicyHolderPrimaryAddress(\r\n\t\t\ttransformedRequest\r\n\t\t);\r\n\t\ttransformedRequest = updateModifications(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateKilometres(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateGarageType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateFinancier(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateDamage(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateUsage(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateMotorcycleInfo(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateRiders(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePolicyHolders(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateAccountLocation(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateAdditionalRiders(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateRegoDetails(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateCompanyContactDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateMotorcycleInsuranceTypeAndAmount(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateEmail(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePolicyAddress(transformedRequest, userInput);\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transposeMonth(monthName) {\r\n\t\tvar months = {\r\n\t\t\tJanuary: '01',\r\n\t\t\tFebruary: '02',\r\n\t\t\tMarch: '03',\r\n\t\t\tApril: '04',\r\n\t\t\tMay: '05',\r\n\t\t\tJune: '06',\r\n\t\t\tJuly: '07',\r\n\t\t\tAugust: '08',\r\n\t\t\tSeptember: '09',\r\n\t\t\tOctober: '10',\r\n\t\t\tNovember: '11',\r\n\t\t\tDecember: '12'\r\n\t\t};\r\n\r\n\t\treturn months[monthName];\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n\nfunction BikeTriggerGoalTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(userInput) {\r\n\t\tvar policyHolder = userInput.policyHolders[0];\r\n\t\tvar address = userInput.policyAddress;\r\n\t\t\r\n\t\tvar request = {\r\n\t\t\tEmail: policyHolder.contact.emailAddress1,\r\n\t\t\tFirstName: policyHolder.contact.firstName,\r\n\t\t\tLastName: policyHolder.contact.lastName,\r\n\t\t\tAddressLine: address.addressLine1,\r\n\t\t\tCity: address.city,\r\n\t\t\tState: address.state,\r\n\t\t\tPostCode: address.postalCode,\r\n\t\t\tCountryCode: \"Australia\",\r\n\t\t\tProduct: \"Bike\",\r\n\t\t\tUserAgent: \"SPA-Bike\"\r\n\t\t};\r\n\t\treturn request;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction HomeCleanRequestTransformer(Util, jsonMapper) {\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\r\n\t\tdelete intermediateRequest.homeForm;\r\n\r\n\t\t// var bike = intermediateRequest.motorcycles[0];\r\n\t\t var policyHolders = intermediateRequest.policyHolders;\r\n\t\t if(policyHolders){\r\n\t\t \tpolicyHolders.forEach(function(holder,idx){\r\n\t\t \t\tif(holder.contact)\r\n\t\t \t\t{\r\n\t\t\t\t\t\t//Address\r\n\t\t\t\t\t\tif(holder.contact.address) delete holder.contact.address;\r\n\r\n\t\t\t\t\t\t//Contact Number\r\n\t\t\t\t\t\tif(holder.contact.contactNumber) delete holder.contact.contactNumber;\r\n\r\n\t\t\t\t\t\t//Phone number items\r\n\t\t\t\t\t\tcleanPolicyHoldersPhoneNumber(holder.contact.primaryPhone,holder.contact);\r\n\r\n\t\t\t\t\t\t//same as postal address object\r\n\t\t\t\t\t\tif(holder.contact.personContactSamePostalAddress!==undefined) delete holder.contact.personContactSamePostalAddress;\r\n\t\t\t\t\t\tif(holder.contact.additionalContactSamePostalAddress!==undefined) delete holder.contact.additionalContactSamePostalAddress;\r\n\r\n\t\t\t\t\t\t//10 years offences objects\r\n\t\t\t\t\t\tif(holder.contact.tenYears_chargedOrConvictedOffences!== undefined) delete holder.contact.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\t\t\tif(holder.contact.tenYears_chargedOrConvictedOffencesDetails!== undefined) delete holder.contact.tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\t\t\tif(holder.contact.dwellingHistory && holder.contact.dwellingHistory.length>0){\r\n\t\t\t\t\t\t\tholder.contact.dwellingHistory.forEach(function(history,idx){\r\n\r\n\t\t\t\t\t\t\t// \tif(history.pattern.label) delete history.pattern.label;\r\n\t\t\t\t\t\t\t// \tif(history.pattern.value) delete history.pattern.value;\r\n\t\t\t\t\t\t\t// \tif(history.pattern.$$hashKey) delete history.pattern.$$hashKey;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(holder.contact.dwellingHistory) delete holder.contact.dwellingHistory;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//Contents from Additional\r\n\t\t\t\t\t\tif(holder.contact._aggregator) delete holder.contact._aggregator;\r\n\t\t\t\t\t\tif(holder.contact._HTMLID) delete holder.contact._HTMLID;\r\n\t\t\t\t\t\tif(holder.contact.$$hashKey) delete holder.contact.$$hashKey;\r\n\r\n\t\t\t\t\t\tif(holder.contact.authorisedPersons\r\n\t\t\t\t\t\t\t&& holder.contact.authorisedPersons!=null\r\n\t\t\t\t\t\t\t&& holder.contact.authorisedPersons.length>0\r\n\t\t\t\t\t\t\t&& holder.contact.authorisedPersons[0].person){\r\n\t\t\t\t\t\t\tif(holder.contact.authorisedPersons[0].person.companyContactSamePostalAddress!==undefined)\r\n\t\t\t\t\t\t\t\tdelete holder.contact.authorisedPersons[0].person.companyContactSamePostalAddress\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// if(holder.contact.dateOfBirth!==undefined)\r\n\t\t\t\t\t\t// \tdelete holder.contact.dateOfBirth;\r\n\t\t\t\t\t\t// if(holder.contact.hasConviction!==undefined)\r\n\t\t\t\t\t\t// \tdelete holder.contact.hasConviction;\r\n\r\n\t\t\t\t\t\t// if(holder.contact.dwellingHistory!==undefined)\r\n\t\t\t\t\t\t// \tdelete holder.contact.dwellingHistory;\r\n\t\t \t\t}\r\n\r\n\t\t \t});\r\n\t\t }\r\n\r\n\t\t delete intermediateRequest.dwellings[0].location.enrichment ;\r\n\t\t delete intermediateRequest.policyAddress.enrichment ;\r\n\t\t delete intermediateRequest.policyHolders[0].contact.primaryAddress.enrichment ;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\tfunction cleanPolicyHoldersPhoneNumber(phoneType,contactInfo){\r\n\t\tif(['home','mobile'].indexOf(phoneType)>-1){\r\n\t\t\tif(contactInfo.workPhone) { delete contactInfo.workPhone; }\r\n\t\t}\r\n\r\n\t\tif(['work','mobile'].indexOf(phoneType)>-1){\r\n\t\t\tif(contactInfo.homePhone) { delete contactInfo.homePhone; }\r\n\t\t}\r\n\r\n\t\tif(['work','home'].indexOf(phoneType)>-1){\r\n\t\t\tif(contactInfo.cellPhone) { delete contactInfo.cellPhone; }\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction HomeCoverTypeTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(intermediateRequest, coverType, offering) {\r\n\r\n\t\t// intermediateRequest.dwellings[0].coverType = coverType.descriptor;\r\n\t\tintermediateRequest.dwellings[0].offering = (offering.descriptor)?offering.descriptor:offering;\r\n\t\tintermediateRequest.dwellings[0].coverType = coverType;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction HomeDefaultValueRequestTransformer(Util, jsonMapper, userInputRepository, quoteOptions) {\r\n\r\n\tfunction formatDateAndTimeTheGuidewireWay(date, time) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\tvar timeFormatted = '4:00PM' ;\r\n\t\tif ( time )\r\n\t\t\ttimeFormatted = moment().tz(\"Australia/Sydney\").format('h:mma');\r\n\t\treturn Util.stringFormat(format, moment().tz(\"Australia/Sydney\").format('Do MMM YYYY') , timeFormatted) ;\r\n\t}\r\n\r\n\tvar staticValuesMapping = {\r\n\t\tquoteType:'Full',\r\n\t\tperiodStartDate: function() { return moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY')},\r\n\t\tproductCode : 'QPHHome',\r\n\t\tisInsuredsOverTheAge : false,\r\n\t\tisInsuredsRetired: false,\r\n\t\tanyConvictionsQuestion: 'no',\r\n\t\thasPortableContentsClaims: 'no',\r\n\t\tpaymentFrequency: 'everyyear',\r\n\t\temail : \"test@test.com\",\r\n\t\t\"includeFloodCover\" : true, // testing for cordelInfo\r\n\r\n\r\n\t\t\"policyHolders.0.mainHolder\": true,\r\n\t\t\"policyHolders.0.contact.contactType\": \"person\",\r\n\t\t\"policyHolders.0.contact.authorisedPersons.*.person.firstName\": \"An@n\",\r\n\t\t\"policyHolders.0.contact.authorisedPersons.*.person.lastName\": \"An@nym@us\",\r\n\t\t\"policyHolders.0.contact.authorisedPersons.*.person.dateOfBirth\": \"07/07/2000\",\r\n\t\t\"policyHolders.*.contact.passwordQuestionStr\" : '',\r\n\t\t\"policyHolders.*.contact.passwordQuestion\" : '',\r\n\t\t\"policyHolders.*.contact.passwordAnswer\" : '',\r\n\t\t\"policyHolders.0.contact.dateOfBirth\" : '07/07/2000',\r\n\t\t\"policyHolders.0.contact.firstName\" : 'An@n',\r\n\t\t\"policyHolders.0.contact.lastName\" : 'An@nym@us',\r\n\r\n\r\n\r\n\t\t\"dwellings.0.buildingType\" : \"house\",\r\n\t\t\"dwellings.0.externalWallMaterial\" : \"aluminium\",\r\n\t\t\"dwellings.0.homeOccupancy\" : \"own_live\",\r\n\t\t\"dwellings.0.coverType\" : \"building_and_contents\",\r\n\t\t\"dwellings.0.buildingSumInsured\" : \"200000\",\r\n\t\t\"dwellings.0.contentSumInsured\" : \"20000\",\r\n\t\t\"dwellings.0.offering\" : \"QPHStandardOffering\",\r\n\t\t\"dwellings.0.hasGeneralPortableContents\" : false,\r\n\t\t\"dwellings.0.portableCoverCountry\" : \"australia_nz\",\r\n\t\t\"dwellings.0.hasPortableContentsHomeAway\" : false,\r\n\r\n\r\n\t\t\"dwellings.0.policyOption\" : {},\r\n\t\t\"dwellings.0.policyOption.isBuildingAccidentalDamage\" : true,\r\n\t\t\"dwellings.0.policyOption.isContentsAccidentalDamage\" : true,\r\n\t\t\"dwellings.0.policyOption.isContentsDomesticWorkerComp\" : false,\r\n\t\t\"dwellings.0.policyOption.isContentsStoredAway\" : false,\r\n\t\t\"dwellings.0.policyOption.specifyCycleEquipment\" : false,\r\n\t\t\"dwellings.0.policyOption.isContentsCycleCover\" : false,\r\n\t\t// \"dwellings.0.isOwnersInsureUnits\":\"no\",\r\n\t\t\"dwellings.0.isSubUrbanLocated\" : true,\r\n\t\t\"dwellings.0.isRenovated\" : false,\r\n\t\t\"dwellings.0.isIncomeGenerated\" : false,\r\n\t\t\"dwellings.0.isMortgagePresent\" : false,\r\n\t\t\"dwellings.0.isUnrelatedPeople\" : false,\r\n\t\t\"dwellings.0.isUnitAboveGround\" : \"no\",\r\n\t\t\"dwellings.0.isPortionAboveGround\" : \"no\",\r\n\t\t\"dwellings.0.isCommunitySurrounded\" : true,\r\n\t\t\"dwellings.0.hasSpecifiedPortableContList\" : false,\r\n\t\t\"dwellings.0.hasIndividualContents\" : false,\r\n\t\t\"dwellings.0.homeLevels\" : '1',\r\n\t\t\"dwellings.0.isGroundLevelElevated\" : \"no\",\r\n\t\t\"dwellings.0.roofMaterial\" : \"concretetiles\",\r\n\t\t\"dwellings.0.yearsContInsurance\" : \"noPreviousInsurance\",\r\n\t\t\"dwellings.0.hasEntertainmentEquipment\" : false,\r\n\t\t\"dwellings.0.hasWorksArt\" : false,\r\n\t\t\"dwellings.0.homeBuiltYear\" : \"2000\",\r\n\t\t\"dwellings.0.isWaterTight\" : true, // no data\r\n\t\t\"dwellings.0.renovationCost\" : 0,\r\n\r\n\t\t\"dwellings.0.locationProperty\" : {},\r\n\t\t\"dwellings.0.locationProperty.knowHomeSize\" : false,\r\n\t\t\"dwellings.0.locationProperty.hasDuctedAirConditioning\" : false,\r\n\t\t\"dwellings.0.locationProperty.hasInGroundPool\" : false,\r\n\t\t\"dwellings.0.locationProperty.hasTennisCourt\" : false,\r\n\t\t\"dwellings.0.locationProperty.hasGrannyFlat\" : false,\r\n\t\t\"dwellings.0.locationSecurity\" : {},\r\n\t\t\"dwellings.0.locationSecurity.hasWindowScreenBars\" : false,\r\n\t\t\"dwellings.0.locationSecurity.isGatedCommunity\" : false,\r\n\t\t\"dwellings.0.locationSecurity.hasFixedHomeSafe\" : false,\r\n\t\t\"dwellings.0.locationSecurity.haveSecurityAlarm\" : false,\r\n\t\t\"dwellings.0.locationSecurity.hasWindowKeylocks\" : false,\r\n\t\t\"dwellings.0.locationSecurity.hasDoorSecurityScreen\" : false,\r\n\t\t\"dwellings.0.locationSecurity.hasDoorDeadlocks\" : false,\r\n\t\t\"dwellings.0.locationSecurity.has24HourConcierge\" : false,\r\n\t\t\"dwellings.0.locationSecurity.isSecurityRatedBuilding\" : false,\r\n\r\n\t\t\"dwellings.0.locationProperty.hasSheds\" : false,\r\n\r\n\t\t\"dwellings.0.isCycloneStandardlyBuilt\": 'yes',\r\n\t\t\"status\" : \"Draft\",\r\n\t\t\"documentDeliveryMethod\": 'email',\r\n\t\t\"displayStatus\": 'Draft',\r\n\t\t\"periodStartDateTimeAEDT\": formatDateAndTimeTheGuidewireWay(moment(), moment()),\r\n\t\t\"periodEndDateTimeAEDT\" : formatDateAndTimeTheGuidewireWay(moment().add(1,'years')),\r\n\t\t\"channel\": 'portal',\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar staticValuesMappingNew = ApplyDefaultExcess(userInput);\r\n\t\tvar transformedRequest = jsonMapper.setDefault(userInput, staticValuesMappingNew) ;\r\n\t\tvoid 0;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t\r\n\tfunction ApplyDefaultExcess(userInput) {\r\n\t\tvar staticValuesMappingNew = staticValuesMapping;\r\n\r\n\t\tvar excessValue = quoteOptions.getStateDefaultVoluntaryExcess(userInput.policyAddress.state);\r\n\t\tif(excessValue != null){\r\n\t\t\tvar tempObj = {\"dwellings.0.excess.voluntaryExcess\": excessValue};\r\n\t\t\tstaticValuesMappingNew = Object.extend(staticValuesMapping, tempObj);\r\n\t\t}\r\n\r\n\t\tvar portableExcessValue = quoteOptions.getStateDefaultVoluntaryExcess(userInput.policyAddress.state, 1);\r\n\t\tif(portableExcessValue != null){\r\n\t\t\tvar tempObj2 = {\"dwellings.0.excess.portableContentVoluntaryExcess\": portableExcessValue};\r\n\t\t\tstaticValuesMappingNew = Object.extend(staticValuesMappingNew, tempObj2);\r\n\t\t}\r\n\t\t\r\n\t\treturn staticValuesMappingNew;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction HomeFormatConverterTransformer(Util, jsonMapper) {\r\n\r\n\tfunction convertDateAndTimeTheGuidewireWay(dateTime) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\treturn Util.stringFormat(format, dateTime.format('Do MMM YYYY') , dateTime.format('h:mma')) ;\r\n\t}\r\n\r\n\tfunction convertDate(dateString) {\r\n\t\tvar date = moment(dateString, 'DD/MM/YYYY') ;\r\n\t\tvar formattedDate = date.format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\t// throw 'date format exception formatting ' + dateString ;\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertDateToGWTimeZone(dateString) {\r\n\t\tvar formattedDate = moment(dateString,'DDMMYYYY').tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\treturn null;\r\n\t}\r\n\t \r\n\tfunction getMonthString(monthInFigure){\r\n\t\tif(monthInFigure){\r\n\t\t\tvar objDate = new Date(\"2000-\"+String(monthInFigure)+\"-01\");\r\n\t \treturn objDate.toLocaleString(\"en-au\", { month: \"long\" });\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tfunction getMonthNumber(monthInString){\r\n\t\tif(monthInString){\r\n\t\t\tvar monthObj = {\r\n\t\t\t\t'January': '01',\r\n\t\t\t\t'February': '02',\r\n\t\t\t\t'March': '03',\r\n\t\t\t\t'April': '04',\r\n\t\t\t\t'May': '05',\r\n\t\t\t\t'June': '06',\r\n\t\t\t\t'July': '07',\r\n\t\t\t\t'August': '08',\r\n\t\t\t\t'September': '09',\r\n\t\t\t\t'October': '10',\r\n\t\t\t\t'November': '11',\r\n\t\t\t\t'December': '12',\r\n\t\t\t}\r\n\r\n\t\t\treturn monthObj[monthInString];\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertGender(gender) {\r\n\t\tvar gc = {\r\n\t\t\tmale : 'M',\r\n\t\t\tfemale : 'F',\r\n\t\t\tintersex : 'I',\r\n\t\t};\r\n\r\n\t\treturn gc[gender] ;\r\n\t}\r\n\r\n\tfunction convertFalsyToUnknown(value) {\r\n\r\n\t\tif ( value === null || value === undefined)\r\n\t\t\treturn 'unknown';\r\n\r\n\t\tif(value === 'unknown')\r\n\t\t\treturn 'unknown';\r\n\r\n\t\treturn convertBooleanToYesNo(value) ;\r\n\t}\r\n\r\n\tfunction convertBooleanToYesNo(value) {\r\n\t\treturn !!value ? 'yes' : 'no' ;\r\n\t}\r\n\r\n\tfunction convertStringToInt(value) {\r\n\t\treturn parseInt(value);\r\n\t}\r\n\r\n\tfunction convertIntToString(value) {\r\n\t\treturn value.toString();\r\n\t}\r\n\r\n\tfunction convertHomelevels(value){\r\n\t\tif(value=='3+'){\r\n\t\t\tvalue = '3Plus';\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\tfunction convertNumberToStringPattern(value, pattern, zeroValue) {\r\n\t\tvar stringValue = value > 0 ? Util.stringFormat(pattern, value) : zeroValue ;\r\n\t\treturn ( value == 0 || value > 1) ? stringValue + 's' : stringValue ;\r\n\t}\r\n\r\n\tfunction convertNumberToStringPatternZeroSingular(value, pattern, zeroValue) {\r\n\t\tvar stringValue = value > 0 ? Util.stringFormat(pattern, value) : zeroValue ;\r\n\t\treturn (value > 1) ? stringValue + 's' : stringValue ;\r\n\t}\r\n\r\n\tvar convertValueMapping = {\r\n\t\t'dwellings.*.isUnitAboveGround' : convertBooleanToYesNo,\r\n\t\t'dwellings.*.isPortionAboveGround' : convertBooleanToYesNo,\r\n\t\t'dwellings.*.isCycloneStandardlyBuilt' : convertBooleanToYesNo,\r\n\t\t'isInsuredsRetired': convertBooleanToYesNo,\r\n\r\n\t\t\"dwellings.*.homeLevels\": convertHomelevels,\r\n\t\t\"dwellings.*.locationSecurity.hasDoorDeadlocks\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasDoorSecurityScreen\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasWindowKeylocks\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasWindowRollerShutter\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasWindowScreenBars\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.isGatedCommunity\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.hasFixedHomeSafe\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.isSecurityRatedBuilding\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.haveSecurityAlarm\" : convertBooleanToYesNo,\r\n\t\t\"dwellings.*.locationSecurity.has24HourConcierge\" : convertBooleanToYesNo,\r\n\r\n\r\n\t\t\"policyHolders.*.contact.dateOfBirth\" : convertDate,\r\n\t\t\"policyHolders.*.contact.dwellingHistory.*.eventMonth\":getMonthNumber,\r\n\t\t\"policyHolders.*.contact.gender\":convertGender,\r\n\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.gender\":convertGender,\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.dateOfBirth\":convertDate,\r\n\r\n\r\n\r\n\t\t/**\r\n\t\t* Guide Wire formatting for bedrooms, balconies and etc ...\r\n\t\t* bring popcorn\r\n\r\n\t\tfor none of each :\r\n\r\n\t\tnumberOfBalconies:\"no_balconies_or_decks\"\r\n\t\tnumberOfBedrooms:\"1_item\"\r\n\t\tnumberOfCarports:\"no_carports\"\r\n\t\tnumberOfGarages:\"no_garages\"\r\n\t\tnumberOfVerandahs:\"no_verandahs\"\r\n\r\n\t\tFor 1 of each :\r\n\r\n\t\tnumberOfBalconies:\"1_item\"\r\n\t\tnumberOfBedrooms:\"1_item\"\r\n\t\tnumberOfCarports:\"carport_for_1_car\"\r\n\t\tnumberOfGarages:\"garage_for_1_car\"\r\n\t\tnumberOfVerandahs:\"1_item\"\r\n\r\n\t\tFor 2 of each :\r\n\r\n\t\tnumberOfBalconies:\"2_items\"\r\n\t\tnumberOfBedrooms:\"2_items\"\r\n\t\tnumberOfCarports:\"carport_for_2_cars\"\r\n\t\tnumberOfGarages:\"garage_for_2_cars\"\r\n\t\tnumberOfVerandahs:\"2_items\"\r\n\r\n\t\tfor max of each :\r\n\r\n\t\tnumberOfBalconies:\"6_items\"\r\n\t\tnumberOfBedrooms:\"9_items\"\r\n\t\tnumberOfCarports:\"carport_for_6_cars\"\r\n\t\tnumberOfGarages:\"garage_for_6_cars\"\r\n\t\tnumberOfVerandahs:\"6_items\"\r\n\t\t*/\r\n\t\t\"dwellings.0.locationProperty.numberOfBedrooms\" : function(value) {return convertNumberToStringPattern(value, '{0}_item', '1_item')},\r\n\t\t\"dwellings.0.locationProperty.numberOfBalconies\" : function(value) {return convertNumberToStringPattern(value, '{0}_item', 'no_balconies_or_deck')},\r\n\t\t\"dwellings.0.locationProperty.numberOfVerandahs\" : function(value) {return convertNumberToStringPattern(value, '{0}_item', 'no_verandah')},\r\n\t\t\"dwellings.0.locationProperty.numberOfCarports\" : function(value) {return convertNumberToStringPattern(value, 'carport_for_{0}_car', 'no_carport')},\r\n\t\t\"dwellings.0.locationProperty.numberOfGarages\" : function(value) {return convertNumberToStringPattern(value, 'garage_for_{0}_car', 'no_garage')},\r\n\t\t\"dwellings.0.locationProperty.numberOfLargeSheds\" : function(value) {return convertNumberToStringPatternZeroSingular(value, '{0}_item', '0_item')},\r\n\t\t\"dwellings.0.locationProperty.numberOfSmallSheds\" : function(value) {return convertNumberToStringPatternZeroSingular(value, '{0}_item', '0_item')},\r\n\t\t\"periodStartDate\": convertDateToGWTimeZone,\r\n\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.convert(intermediateRequest, convertValueMapping) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction HomePolicyHolderHandler(Util, publicIDTransformer) {\r\n\r\n\t\r\n\tfunction handle(quoteRequest, userInput) {\r\n\t\t\r\n\t\t\r\n\t\treturn quoteRequest;\r\n\t}\r\n\r\n return {\r\n\t\thandle: handle\r\n\t}\r\n};\n\"use strict\";\r\n\r\nfunction HomePublicIDTransformer(Util, jsonMapper, serviceResponseRepository) {\r\n\tvar currentResponse = null ;\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat('portal:{0}-{1}', moduleName, Util.generateRandomString(15) );\r\n\t}\r\n\r\n\tfunction hash(value) {\r\n\t\treturn md5(value);\r\n\t}\r\n\r\n\tfunction fetchFromPreviousResponse(path) {\r\n\t\tif ( currentResponse )\r\n\t\t\treturn Util.findHierarchyStringInObject(currentResponse, path , '.') ;\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tfunction convertPublicID(path, moduleName) {\r\n\t\tif ( currentResponse ) {\r\n\t\t\tvar lastPublicID = fetchFromPreviousResponse(path) ;\r\n\t\t\tif ( lastPublicID )\r\n\t\t\t\treturn lastPublicID;\r\n\t\t}\r\n\r\n\t\treturn forgePublicId(moduleName) ;\r\n\t}\r\n\r\n\r\n\tvar moduleNameMapping = {\r\n\t\t'policyHolders' : 'PolicyHolder',\r\n\t\t'policyHoldersContact' : 'PolicyHolder',\r\n\t\t'policyAddress' : 'Address',\r\n\t\t\"dwellings\":\"QPHDwelling\", // AbstractQPHDwelling\r\n\t\t\"mortgagees\":\"QPHMortgagee\",\r\n\t\t\"cycles\":\"QPHCycle\",\r\n\t\t\"cycleEquipments\":\"QPHCycleEquipment\",\r\n\t\t\"pattern\": \"qbePattern\",\r\n\t\t\"dwellingHistory\": \"QPHDwellingHistory\",\r\n\t\t\"dwellingHistories\": \"QPHDwellingHistoryDTO\"\r\n\t};\r\n\r\n\tvar publicIDTransformationMapping = {\r\n\t\t'policyAddress.publicID' : function() { return forgePublicId(moduleNameMapping.policyAddress) },\r\n\t\t'policyHolders.*.publicID' : function() { return forgePublicId(moduleNameMapping.policyHolders) },\r\n\t\t'policyHolders.*.contact.dwellingHistory.*.publicID' : function() { return forgePublicId(moduleNameMapping.dwellingHistory) },\r\n\t\t\"dwellings.0.publicID\": function() { return forgePublicId(moduleNameMapping.dwellings)},\r\n\t\t\"dwellings.0.location.publicID\": function() { return forgePublicId(moduleNameMapping.policyAddress)},\r\n\t\t\"policyHolders.*.contact.publicID\": function() { return forgePublicId(moduleNameMapping.policyHoldersContact)},\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.publicID\": function() { return forgePublicId(moduleNameMapping.policyHoldersContact)},\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.primaryAddress.publicID\": function() { return forgePublicId(moduleNameMapping.policyAddress)},\r\n\t\t\"policyHolders.*.contact.primaryAddress.publicID\": function() { return forgePublicId(moduleNameMapping.policyAddress)},\r\n\t\t\"dwellings.*.mortgagees.*.publicID\":function() { return forgePublicId(moduleNameMapping.mortgagees)},\r\n\t\t\"dwellings.*.policyOption.cycles.*.publicID\":function() { return forgePublicId(moduleNameMapping.cycles)},\r\n\t\t\"dwellings.*.policyOption.cycleEquipments.*.publicID\":function() { return forgePublicId(moduleNameMapping.cycleEquipments)},\r\n\t\t\"dwellings.*.dwellingHistories.*.publicID\":function() { return forgePublicId(moduleNameMapping.dwellingHistories)},\r\n\t};\r\n\r\n\tvar publicIDConversionMapping = {\r\n\t\t'policyAddress.publicID' : function(val) { return convertPublicID('policyAddress.publicID', moduleNameMapping.policyAddress);} ,\r\n\t\t'policyHolders.*.publicID' : function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.publicID', moduleNameMapping.policyHolders);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.dwellingHistory.*.publicID' : function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.dwellingHistory.' + mappedValueStarIndices[1] + '.publicID' , moduleNameMapping.dwellingHistory);\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.publicID\": function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.authorisedPersons.'+ mappedValueStarIndices[1] + '.person.publicID' , moduleNameMapping.policyHoldersContact);\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.authorisedPersons.*.person.primaryAddress.publicID\": function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.authorisedPersons.'+ mappedValueStarIndices[1] + '.person.primaryAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t\"dwellings.0.publicID\": function(val) { return convertPublicID('dwellings.0.publicID', moduleNameMapping.dwellings);} ,\r\n\t\t\"dwellings.0.location.publicID\": function(val) { return convertPublicID('dwellings.0.location.publicID', moduleNameMapping.policyAddress);},\r\n\t\t'policyHolders.*.contact.publicID' : function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.publicID', moduleNameMapping.policyHoldersContact);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID' : function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.primaryAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'dwellings.*.mortgagees.*.publicID':function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('dwellings.' + mappedValueStarIndices[0] + '.mortgagees.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.mortgagees);\r\n\t\t},\r\n\t\t'dwellings.*.policyOption.cycles.*.publicID':function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('dwellings.' + mappedValueStarIndices[0] + '.policyOption.cycles.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.cycles);\r\n\t\t},\r\n\t\t'dwellings.*.policyOption.cycleEquipments.*.publicID':function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('dwellings.' + mappedValueStarIndices[0] + '.policyOption.cycleEquipments.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.cycleEquipments);\r\n\t\t},\r\n\t\t'dwellings.*.dwellingHistories.*.publicID':function(val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('dwellings.' + mappedValueStarIndices[0] + '.dwellingHistories.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.dwellingHistories);\r\n\t\t},\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, response, quickQuote) {\r\n\r\n\t\tcurrentResponse = response ;\r\n\r\n\t\tvar transformedRequest = intermediateRequest;\r\n\t\tif ( !currentResponse || quickQuote )\r\n\t\t \ttransformedRequest = jsonMapper.transform(intermediateRequest, publicIDTransformationMapping) ;\r\n\t\telse\r\n\t\t \ttransformedRequest = jsonMapper.convert(intermediateRequest, publicIDConversionMapping) ;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction HomeQuoteResultModel(quoteResultResponse) {\r\n\tthis.isCoverAvailable = quoteResultResponse.quoteResult.totalPremium !== undefined ;\r\n\tthis.coverType = quoteResultResponse.dwellings[0].coverType;\r\n\tthis.quoteResult = quoteResultResponse.quoteResult;\r\n\tthis.paymentPlan = quoteResultResponse.paymentPlan;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.totalFSL = quoteResultResponse.quoteResult.totalFSL ;\r\n\tthis.totalGST = quoteResultResponse.quoteResult.totalGST ;\r\n\tthis.totalStampDuty = quoteResultResponse.quoteResult.totalStampDuty ;\r\n\tthis.premiumAfterDiscount = quoteResultResponse.quoteResult.premiumAfterDiscount ;\r\n\tthis.paymentFrequency = quoteResultResponse.paymentPlan ? quoteResultResponse.paymentPlan.paymentFrequency : null ;\r\n\tthis.excess = quoteResultResponse.dwellings[0].excess ;\r\n\tthis.cordelInfo = quoteResultResponse.dwellings[0].cordelInfo ;\r\n\tthis.availableSumInsuredTypes = quoteResultResponse.dwellings[0].availableSumInsuredTypes;\r\n\tthis.offering = quoteResultResponse.dwellings[0].offering;\r\n\tthis.isStandardOffering = this.offering === 'QPHStandardOffering' ; \r\n\tthis.isPrestigeOffering = this.offering === 'QPHPrestigeOffering' ; \r\n\tthis.coverageOptions = quoteResultResponse.dwellings[0].coverageOptions ;\r\n\tthis.response = quoteResultResponse ;\r\n\r\n}\r\n\nfunction HomeRetrieveSavedQuoteResponseTransformer($filter, jsonMapper, Util) {\r\n\t// transform functions\r\n\tvar transformers = {\r\n\t\tcamelcase: function(value) {\r\n\t\t\tif (value) {\r\n\t\t\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tdate: function(dateString) {\r\n\t\t\tvar date = moment(dateString, 'YYYY-MM-DD');\r\n\t\t\treturn date.format('DD/MM/YYYY');\r\n\t\t},\r\n\t\ttoday: function(dateString) {\r\n\t\t\tvar returnDate = '';\r\n\t\t\tif (moment().diff(dateString, 'days') > 0) {\r\n\t\t\t\tvar date = moment();\r\n\t\t\t\treturnDate = date.format('DD/MM/YYYY');\r\n\t\t\t} else {\r\n\t\t\t\tvar date = moment(dateString, 'YYYY-MM-DD');\r\n\t\t\t\treturnDate = date.format('DD/MM/YYYY');\r\n\t\t\t}\r\n\t\t\treturn returnDate;\r\n\t\t},\r\n\t\thasValue: function(value) {\r\n\t\t\tif (value) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tfinanceType: function(financeType) {\r\n\t\t\tswitch (financeType) {\r\n\t\t\t\tcase 'none':\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t},\r\n\t\tconvertGender: function(gender) {\r\n\t\t\tvar gc = {\r\n\t\t\t\tM: 'male',\r\n\t\t\t\tF: 'female',\r\n\t\t\t\tI: 'intersex'\r\n\t\t\t};\r\n\t\t\treturn gc[gender];\r\n\t\t},\r\n\t\tyesNo: function(value) {\r\n\t\t\treturn value == 'yes' ? true : false;\r\n\t\t},\r\n\t\tcheckbox: function(value) {},\r\n\t\tstate: function(state) {\r\n\t\t\tif (state) return state.replace('AU_', '');\r\n\t\t},\r\n\t\tcoverType: function(coverType) {\r\n\t\t\tif (\r\n\t\t\t\tcoverType === 'third_party' ||\r\n\t\t\t\tcoverType === 'third_party_fire_theft'\r\n\t\t\t) {\r\n\t\t\t\treturn 'third_party';\r\n\t\t\t}\r\n\t\t\treturn coverType;\r\n\t\t},\r\n\t\tpurchaseMonthFromMonthYear: function(monthYear) {\r\n\t\t\tif (monthYear) {\r\n\t\t\t\treturn monthYear.split('-')[1];\r\n\t\t\t} else {\r\n\t\t\t\treturn '';\r\n\t\t\t}\r\n\t\t},\r\n\t\tpurchaseYearFromMonthYear: function(monthYear) {\r\n\t\t\tif (monthYear) {\r\n\t\t\t\treturn monthYear.split('-')[0];\r\n\t\t\t} else {\r\n\t\t\t\treturn '';\r\n\t\t\t}\r\n\t\t},\r\n\t\tthirdPartyPref: function(coverType) {\r\n\t\t\tif (coverType === 'comprehensive') {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn coverType;\r\n\t\t},\r\n\t\titemCount: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tno_balconies_or_decks: '0',\r\n\t\t\t\tno_verandahs: '0',\r\n\t\t\t\t'0_item': '0',\r\n\t\t\t\t'1_item': '1',\r\n\t\t\t\t'2_items': '2',\r\n\t\t\t\t'3_items': '3',\r\n\t\t\t\t'4_items': '4',\r\n\t\t\t\t'5_items': '5',\r\n\t\t\t\t'6_items': '6',\r\n\t\t\t\t'7_items': '7',\r\n\t\t\t\t'8_items': '8',\r\n\t\t\t\t'9_items': '9',\r\n\t\t\t\t'10_items': '10',\r\n\t\t\t\t'11_items': '11'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\titemCountGarages: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tno_garages: '0',\r\n\t\t\t\tgarage_for_1_car: '1',\r\n\t\t\t\tgarage_for_2_cars: '2',\r\n\t\t\t\tgarage_for_3_cars: '3',\r\n\t\t\t\tgarage_for_4_cars: '4',\r\n\t\t\t\tgarage_for_5_cars: '5',\r\n\t\t\t\tgarage_for_6_cars: '6'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\titemCountCarPort: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tno_carports: '0',\r\n\t\t\t\tcarport_for_1_car: '1',\r\n\t\t\t\tcarport_for_2_cars: '2',\r\n\t\t\t\tcarport_for_3_cars: '3',\r\n\t\t\t\tcarport_for_4_cars: '4',\r\n\t\t\t\tcarport_for_5_cars: '5',\r\n\t\t\t\tcarport_for_6_cars: '6'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\tcycleNameMapping: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tmountain_bike: 'Mountain Bike',\r\n\t\t\t\troad_bike: 'Road Bike',\r\n\t\t\t\tbmx: 'BMX',\r\n\t\t\t\ttrack_bike: 'Track Bike',\r\n\t\t\t\tmotorised_bike: 'Motorised Bike',\r\n\t\t\t\taccessories: 'Accessories',\r\n\t\t\t\tcustom_parts: 'Custom parts',\r\n\t\t\t\ttravel_case: 'Travel case',\r\n\t\t\t\tcycling_apparel: 'Cycling Apparel',\r\n\t\t\t\tcycling_computer: 'Cycling Computer'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\tcoverMapping: function(itemString) {\r\n\t\t\tvar itemObj = {\r\n\t\t\t\tbuilding_only: 'Building only',\r\n\t\t\t\tcontents_only: 'Contents only',\r\n\t\t\t\tbuilding_and_contents: 'Building and Contents',\r\n\t\t\t\tmulti_item_loss: 'Multi Item Loss',\r\n\t\t\t\tbicycle: 'Bicycle',\r\n\t\t\t\tcamping_equipment: 'Camping Equipment',\r\n\t\t\t\tclothing: 'Clothing',\r\n\t\t\t\tcollection: 'Collection',\r\n\t\t\t\tcomputer_equipment: 'Computer Equipment',\r\n\t\t\t\teye_ware: 'Eye ware',\r\n\t\t\t\tfirearm: 'Firearm',\r\n\t\t\t\tgps_device: 'GPS Device',\r\n\t\t\t\thearing_aid: 'Hearing Aid',\r\n\t\t\t\tin_vault_item: 'In Vault Item',\r\n\t\t\t\tjewellery: 'Jewellery',\r\n\t\t\t\tmobile_phone: 'Mobile Phone',\r\n\t\t\t\tmusic_games_media: 'Music, Games and Media',\r\n\t\t\t\tpersonal_medical_item: 'Personal Medical Item',\r\n\t\t\t\tpersonal_valuable_item: 'Personal Valuable Item',\r\n\t\t\t\tphotographic_equipment: 'Photographic and Video Equipment',\r\n\t\t\t\tportable_music_instrument: 'Portable musical instrument',\r\n\t\t\t\tprosthetics: 'Prosthetics',\r\n\t\t\t\tother_portable_item: 'Other Portable Item',\r\n\t\t\t\tsporting_equipment: 'Sporting Equipment',\r\n\t\t\t\ttablet: 'Portable Computer Equipment',\r\n\t\t\t\twatch: 'Watch'\r\n\t\t\t};\r\n\r\n\t\t\treturn itemObj[itemString];\r\n\t\t},\r\n\t\tmonthFromNumber: function(monthNumber) {\r\n\t\t\tvar monthObj = {\r\n\t\t\t\t'01': 'January',\r\n\t\t\t\t'02': 'February',\r\n\t\t\t\t'03': 'March',\r\n\t\t\t\t'04': 'April',\r\n\t\t\t\t'05': 'May',\r\n\t\t\t\t'06': 'June',\r\n\t\t\t\t'07': 'July',\r\n\t\t\t\t'08': 'August',\r\n\t\t\t\t'09': 'September',\r\n\t\t\t\t'10': 'October',\r\n\t\t\t\t'11': 'November',\r\n\t\t\t\t'12': 'December'\r\n\t\t\t};\r\n\r\n\t\t\treturn monthObj[monthNumber];\r\n\t\t}\r\n\t};\r\n\r\n\tfunction transformBuilding(buildingDetails) {\r\n\t\tvar slope = buildingDetails.landSlope;\r\n\t\tif (slope === 'flat') {\r\n\t\t\tbuildingDetails.landSlope = 'flat';\r\n\t\t} else {\r\n\t\t\tbuildingDetails.landSlope = buildingDetails.slopeType;\r\n\t\t}\r\n\t\treturn buildingDetails;\r\n\t}\r\n\r\n\tfunction transformTellUsAboutBuilding(buildingDetails) {\r\n\t\tif (buildingDetails.isHomeElevated) {\r\n\t\t} else {\r\n\t\t\tbuildingDetails.isHomeElevated = 'notasked';\r\n\t\t}\r\n\t\treturn buildingDetails;\r\n\t}\r\n\r\n\tfunction transformInsuranceHistory(insuranceHistory) {\r\n\t\tvar _portableClaimHistory = [];\r\n\t\tvar _claimHistory = [];\r\n\r\n\t\tif (insuranceHistory.history) {\r\n\t\t\tinsuranceHistory.history.forEach(function(item) {\r\n\t\t\t\tif (item.isPortableContents) {\r\n\t\t\t\t\t_portableClaimHistory.push({\r\n\t\t\t\t\t\tcoverAffected: {\r\n\t\t\t\t\t\t\tvalue: item.contentCategory,\r\n\t\t\t\t\t\t\tlabel: transformers.coverMapping(\r\n\t\t\t\t\t\t\t\titem.contentCategory\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tyear: {\r\n\t\t\t\t\t\t\tvalue: item.year,\r\n\t\t\t\t\t\t\tlabel: item.year\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmonth: {\r\n\t\t\t\t\t\t\tvalue: transformers.monthFromNumber(\r\n\t\t\t\t\t\t\t\titem.eventMonth\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tlabel: transformers.monthFromNumber(item.eventMonth)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdescription: {\r\n\t\t\t\t\t\t\tvalue: item.pattern.description,\r\n\t\t\t\t\t\t\tlabel: item.pattern.description,\r\n\t\t\t\t\t\t\tdescription: item.pattern.description,\r\n\t\t\t\t\t\t\tpublicID: item.pattern.publicID,\r\n\t\t\t\t\t\t\tcode: item.pattern.code,\r\n\t\t\t\t\t\t\tfilter1: item.pattern.filter1\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_claimHistory.push({\r\n\t\t\t\t\t\tcoverAffected: {\r\n\t\t\t\t\t\t\tvalue: item.claimType,\r\n\t\t\t\t\t\t\tlabel: transformers.coverMapping(item.claimType)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tyear: {\r\n\t\t\t\t\t\t\tvalue: item.year,\r\n\t\t\t\t\t\t\tlabel: item.year\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmonth: {\r\n\t\t\t\t\t\t\tvalue: transformers.monthFromNumber(\r\n\t\t\t\t\t\t\t\titem.eventMonth\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tlabel: transformers.monthFromNumber(item.eventMonth)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdescription: {\r\n\t\t\t\t\t\t\tvalue: item.pattern.description,\r\n\t\t\t\t\t\t\tlabel: item.pattern.description,\r\n\t\t\t\t\t\t\tdescription: item.pattern.description,\r\n\t\t\t\t\t\t\tpublicID: item.pattern.publicID,\r\n\t\t\t\t\t\t\tcode: item.pattern.code,\r\n\t\t\t\t\t\t\tfilter1: item.pattern.filter1\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tinsuranceHistory.claimDetails = _claimHistory;\r\n\t\t\tinsuranceHistory.portableClaimDetails = _portableClaimHistory;\r\n\t\t}\r\n\r\n\t\treturn insuranceHistory;\r\n\t}\r\n\r\n\tfunction transformCycleCover(cycleCover) {\r\n\t\tvar _cycleList = [];\r\n\t\tvar _coverItemsList = [];\r\n\t\tif (cycleCover.cycleList) {\r\n\t\t\tcycleCover.cycleList.forEach(function(item) {\r\n\t\t\t\t_cycleList.push({\r\n\t\t\t\t\tbikeType: {\r\n\t\t\t\t\t\tvalue: item.typeOfBicycle,\r\n\t\t\t\t\t\tlabel: transformers.cycleNameMapping(item.typeOfBicycle)\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdescription: item.description,\r\n\t\t\t\t\tvalue: item.value\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cycleCover.coverItemsList) {\r\n\t\t\tcycleCover.coverItemsList.forEach(function(item) {\r\n\t\t\t\t_coverItemsList.push({\r\n\t\t\t\t\tcategory: {\r\n\t\t\t\t\t\tvalue: item.category,\r\n\t\t\t\t\t\tlabel: transformers.cycleNameMapping(item.category)\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdescription: item.description,\r\n\t\t\t\t\tvalue: item.value\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (_coverItemsList.length > 0) {\r\n\t\t\tcycleCover.coverItems = true;\r\n\t\t} else {\r\n\t\t\tcycleCover.coverItems = false;\r\n\t\t}\r\n\r\n\t\tcycleCover.cycleList = _cycleList;\r\n\t\tcycleCover.coverItemsList = _coverItemsList;\r\n\t\t// {\"bikeType\":{\"value\":\"mountain_bike\",\"label\":\"Mountain Bike\"},\"description\":\"mb\",\"value\":\"1000\"}\r\n\t\treturn cycleCover;\r\n\t}\r\n\r\n\tfunction transformMortgageOnProperty(mortgageOnProperty) {\r\n\t\tif (\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith &&\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith.length > 0\r\n\t\t) {\r\n\t\t\tmortgageOnProperty.isPropertyUnderMortgage = true;\r\n\t\t\tvar _mortgageWith = [];\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith.forEach(function(item) {\r\n\t\t\t\t_mortgageWith.push(item.mortgagee);\r\n\t\t\t});\r\n\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith = _mortgageWith;\r\n\t\t} else {\r\n\t\t\tmortgageOnProperty.isPropertyUnderMortgage = false;\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith = [];\r\n\t\t}\r\n\t\treturn mortgageOnProperty;\r\n\t}\r\n\r\n\tfunction transformSecurity(securityTransform) {\r\n\t\tvar _securityExternalDoors = {\r\n\t\t\tdeadlocks: securityTransform.security.hasDoorDeadlocks == 'yes',\r\n\t\t\tdoor_security_screen:\r\n\t\t\t\tsecurityTransform.security.hasDoorSecurityScreen == 'yes'\r\n\t\t};\r\n\r\n\t\tvar _securityExternalWindows = {\r\n\t\t\tkeylocks: securityTransform.security.hasWindowKeylocks == 'yes',\r\n\t\t\troller_shutter:\r\n\t\t\t\tsecurityTransform.security.hasWindowRollerShutter == 'yes',\r\n\t\t\tsecurity_screens_or_bars:\r\n\t\t\t\tsecurityTransform.security.hasWindowScreenBars == 'yes'\r\n\t\t};\r\n\r\n\t\tvar _otherSecurity = {\r\n\t\t\tgated_community:\r\n\t\t\t\tsecurityTransform.security.isGatedCommunity == 'yes',\r\n\t\t\t'24_hour_concierge':\r\n\t\t\t\tsecurityTransform.security.has24HourConcierge == 'yes',\r\n\t\t\tfixed_home_sage:\r\n\t\t\t\tsecurityTransform.security.hasFixedHomeSafe == 'yes',\r\n\t\t\tsecurity_rated_building:\r\n\t\t\t\tsecurityTransform.security.isSecurityRatedBuilding == 'yes',\r\n\t\t\t'24_hour_monitored_alarm':\r\n\t\t\t\tsecurityTransform.security.haveSecurityAlarm == 'yes'\r\n\t\t};\r\n\r\n\t\treturn {\r\n\t\t\tsecurityExternalDoors: _securityExternalDoors,\r\n\t\t\tsecurityExternalWindows: _securityExternalWindows,\r\n\t\t\totherSecurity: _otherSecurity\r\n\t\t};\r\n\t}\r\n\r\n\tfunction transformNeeds(needTransform, fullData) {\r\n\t\tvar coverType = needTransform.coverType;\r\n\t\tneedTransform.coverNeeds = {\r\n\t\t\tbuilding: false,\r\n\t\t\tcontents: false,\r\n\t\t\trent_default: false,\r\n\t\t\tmalicious_damage: false\r\n\t\t};\r\n\r\n\t\t//basic need\r\n\t\tif (coverType == 'building_and_contents') {\r\n\t\t\tneedTransform.coverNeeds.building = true;\r\n\t\t\tneedTransform.coverNeeds.contents = true;\r\n\t\t} else if (coverType == 'building_only') {\r\n\t\t\tneedTransform.coverNeeds.building = true;\r\n\t\t} else if (coverType == 'contents_only') {\r\n\t\t\tneedTransform.coverNeeds.contents = true;\r\n\t\t}\r\n\r\n\t\t//landlord needs\r\n\t\tvar policyOption = needTransform.policyOption;\r\n\t\tif (policyOption.isRentDefaultCover) {\r\n\t\t\tneedTransform.coverNeeds.rent_default = true;\r\n\t\t}\r\n\r\n\t\tif (fullData.theftAndVandalismByTenants) {\r\n\t\t\tif (\r\n\t\t\t\tfullData.theftAndVandalismByTenants.theftCoverContents ||\r\n\t\t\t\tfullData.theftAndVandalismByTenants.theftCoverBuilding\r\n\t\t\t) {\r\n\t\t\t\tneedTransform.coverNeeds.malicious_damage = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdelete needTransform.policyOption;\r\n\t\tdelete needTransform.coverType;\r\n\r\n\t\treturn needTransform;\r\n\t}\r\n\r\n\tfunction transformMainPolicyHolder(returnObject, policyHolder, response) {\r\n\t\t//tell us about the main policy holder -------------------------------------\r\n\t\treturnObject.mainPolicyHolder = {\r\n\t\t\tprefix: policyHolder.contact.prefix,\r\n\t\t\tfirstName: policyHolder.contact.firstName,\r\n\t\t\tlastName: policyHolder.contact.lastName,\r\n\t\t\tgender: policyHolder.contact.gender,\r\n\t\t\tdateOfBirth: policyHolder.contact.dateOfBirth,\r\n\t\t\ttenYears_chargedOrConvictedOffences:\r\n\t\t\t\tpolicyHolder.contact.hasConviction\r\n\t\t};\r\n\t\tconvertMapping = {\r\n\t\t\t'mainPolicyHolder.gender': transformers.convertGender,\r\n\t\t\t'mainPolicyHolder.dateOfBirth': transformers.date\r\n\t\t};\r\n\r\n\t\tvar mappedValue = jsonMapper.convert(returnObject, convertMapping);\r\n\t\tif (policyHolder.contact.hasConviction == 'yes') {\r\n\t\t\t//parse dwelling history only if the hasConviction is yes\r\n\t\t\tvar _convictionHistory = [];\r\n\t\t\tpolicyHolder.contact.dwellingHistory.forEach(function(conviction) {\r\n\t\t\t\t// tenYears_chargedOrConvictedOffences\r\n\r\n\t\t\t\tvar _conviction = {\r\n\t\t\t\t\tdescription: {\r\n\t\t\t\t\t\tpublicID: conviction.pattern.publicID,\r\n\t\t\t\t\t\tcode: conviction.pattern.code,\r\n\t\t\t\t\t\tdescription: conviction.pattern.description,\r\n\t\t\t\t\t\tvalue: conviction.pattern.description,\r\n\t\t\t\t\t\tlabel: conviction.pattern.description,\r\n\t\t\t\t\t\tfilter1: conviction.pattern.filter1\r\n\t\t\t\t\t},\r\n\t\t\t\t\tyear: {\r\n\t\t\t\t\t\tlabel: conviction.year,\r\n\t\t\t\t\t\tvalue: conviction.year\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmonth: {\r\n\t\t\t\t\t\tlabel: transformers.monthFromNumber(\r\n\t\t\t\t\t\t\tconviction.eventMonth\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\tvalue: transformers.monthFromNumber(\r\n\t\t\t\t\t\t\tconviction.eventMonth\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\t_convictionHistory.push(_conviction);\r\n\t\t\t});\r\n\r\n\t\t\treturnObject.mainPolicyHolder.tenYears_chargedOrConvictedOffencesDetails = _convictionHistory;\r\n\t\t}\r\n\r\n\t\t//main policy holder contact -------------------------------------\r\n\t\treturnObject.mainPolicyHolderContact = {\r\n\t\t\tpersonContactResidentialAddress:\r\n\t\t\t\tpolicyHolder.contact.primaryAddress,\r\n\t\t\taddress: policyHolder.contact.primaryAddress,\r\n\t\t\t//::'personContactSamePostalAddress' : policyHolder.contact,\r\n\t\t\t// 'personContactPostalAddress' : policyHolder.contact,\r\n\t\t\temailAddress1: policyHolder.contact.emailAddress1,\r\n\t\t\tprimaryPhone: policyHolder.contact.primaryPhone,\r\n\t\t\tpasswordQuestion: policyHolder.contact.passwordQuestion,\r\n\t\t\t// 'personContactEnterAQuestion' : policyHolder.contact,\r\n\t\t\tpasswordAnswer: policyHolder.contact.passwordAnswer,\r\n\t\t\tpersonContactMailingPreference: response.documentDeliveryMethod\r\n\t\t};\r\n\r\n\t\t//add number based on phone type\r\n\t\tif (policyHolder.contact.primaryPhone === 'work') {\r\n\t\t\treturnObject.mainPolicyHolderContact.contactNumber =\r\n\t\t\t\tpolicyHolder.contact.workPhone;\r\n\t\t} else if (policyHolder.contact.primaryPhone === 'home') {\r\n\t\t\treturnObject.mainPolicyHolderContact.contactNumber =\r\n\t\t\t\tpolicyHolder.contact.homePhone;\r\n\t\t} else if (policyHolder.contact.primaryPhone === 'mobile') {\r\n\t\t\treturnObject.mainPolicyHolderContact.contactNumber =\r\n\t\t\t\tpolicyHolder.contact.cellPhone;\r\n\t\t}\r\n\r\n\t\t//if custom question\r\n\t\tif (\r\n\t\t\tpolicyHolder.contact.passwordQuestion ===\r\n\t\t\t'customer_created_question'\r\n\t\t) {\r\n\t\t\treturnObject.mainPolicyHolderContact.personContactEnterAQuestion =\r\n\t\t\t\tpolicyHolder.contact.passwordQuestionStr;\r\n\t\t}\r\n\r\n\t\t// if contact type is company\r\n\t\tif (policyHolder.contact.contactType === 'company') {\r\n\t\t\tvar authorisedPerson =\r\n\t\t\t\tpolicyHolder.contact.authorisedPersons[0].person;\r\n\t\t\treturnObject.aboutTheCompany = {};\r\n\t\t\treturnObject.aboutTheCompany.name = policyHolder.contact.name;\r\n\t\t\treturnObject.aboutTheCompany.abn = policyHolder.contact.abn;\r\n\t\t\treturnObject.aboutTheCompany.emailAddress1 =\r\n\t\t\t\tpolicyHolder.contact.emailAddress1;\r\n\t\t\treturnObject.aboutTheCompany.workPhone =\r\n\t\t\t\tpolicyHolder.contact.workPhone;\r\n\t\t\treturnObject.aboutTheCompany.companyAddress =\r\n\t\t\t\tpolicyHolder.contact.primaryAddress;\r\n\r\n\t\t\treturnObject.aboutCompanyContact = {};\r\n\t\t\treturnObject.aboutCompanyContact.prefix = authorisedPerson.prefix;\r\n\t\t\treturnObject.aboutCompanyContact.firstName =\r\n\t\t\t\tauthorisedPerson.firstName;\r\n\t\t\treturnObject.aboutCompanyContact.lastName =\r\n\t\t\t\tauthorisedPerson.lastName;\r\n\t\t\treturnObject.aboutCompanyContact.gender = transformers.convertGender(\r\n\t\t\t\tauthorisedPerson.gender\r\n\t\t\t);\r\n\t\t\treturnObject.aboutCompanyContact.dateOfBirth = transformers.date(\r\n\t\t\t\tauthorisedPerson.dateOfBirth\r\n\t\t\t);\r\n\r\n\t\t\t// postal address and custom question is not saved in GW\r\n\t\t\treturnObject.companyContactContact = {};\r\n\t\t\treturnObject.companyContactContact.companyContactResidentialAddress =\r\n\t\t\t\tauthorisedPerson.primaryAddress;\r\n\t\t\treturnObject.companyContactContact.emailAddress1 =\r\n\t\t\t\tauthorisedPerson.emailAddress1;\r\n\t\t\t// returnObject.companyContactContact.companyContactDetailsPostalAddress = response.policyAddress;\r\n\t\t\treturnObject.companyContactContact.primaryPhone =\r\n\t\t\t\tauthorisedPerson.primaryPhone;\r\n\t\t\treturnObject.companyContactContact.contactNumber =\r\n\t\t\t\tauthorisedPerson.homePhone ||\r\n\t\t\t\tauthorisedPerson.workPhone ||\r\n\t\t\t\tauthorisedPerson.cellPhone;\r\n\t\t\treturnObject.companyContactContact.passwordQuestion =\r\n\t\t\t\tpolicyHolder.contact.passwordQuestion;\r\n\t\t\t// returnObject.companyContactContact.passwordQuestionStr = policyHolder.contact.passwordQuestionStr || '';\r\n\t\t\treturnObject.companyContactContact.passwordAnswer =\r\n\t\t\t\tpolicyHolder.contact.passwordAnswer;\r\n\t\t\treturnObject.companyContactContact.companyContactMailingPreference =\r\n\t\t\t\tresponse.documentDeliveryMethod;\r\n\t\t}\r\n\r\n\t\treturn returnObject;\r\n\t}\r\n\r\n\t//transform for the other policy holder\r\n\tfunction transformOtherPolicyHolder(returnObject, policyHolder) {\r\n\t\tif (!returnObject.additionalPolicyHolders) {\r\n\t\t\treturnObject.additionalPolicyHolders = {};\r\n\t\t}\r\n\r\n\t\tif (!returnObject.additionalPolicyHolders.policyHolders) {\r\n\t\t\treturnObject.additionalPolicyHolders.policyHolders = [];\r\n\t\t}\r\n\r\n\t\tvar _contact = {\r\n\t\t\tadditionalContactSamePostalAddress: 'yes',\r\n\t\t\taddress: policyHolder.contact.primaryAddress,\r\n\t\t\tcontactNumber: '',\r\n\t\t\tdateOfBirth: policyHolder.contact.dateOfBirth,\r\n\t\t\temailAddress1: policyHolder.contact.emailAddress1,\r\n\t\t\tfirstName: policyHolder.contact.firstName,\r\n\t\t\tgender: policyHolder.contact.gender,\r\n\t\t\tlastName: policyHolder.contact.lastName,\r\n\t\t\tpasswordAnswer: policyHolder.contact.passwordAnswer,\r\n\t\t\tpasswordQuestion: policyHolder.contact.passwordQuestion,\r\n\t\t\tprefix: policyHolder.contact.prefix,\r\n\t\t\tprimaryPhone: policyHolder.contact.primaryPhone\r\n\t\t\t// 'tenYears_chargedOrConvictedOffences':policyHolder.,\r\n\t\t\t// 'tenYears_chargedOrConvictedOffencesDetails':policyHolder.,\r\n\t\t};\r\n\r\n\t\t//add number based on phone type\r\n\t\tif (policyHolder.contact.primaryPhone === 'work') {\r\n\t\t\t_contact.contactNumber = policyHolder.contact.workPhone;\r\n\t\t} else if (policyHolder.contact.primaryPhone === 'home') {\r\n\t\t\t_contact.contactNumber = policyHolder.contact.homePhone;\r\n\t\t} else if (policyHolder.contact.primaryPhone === 'mobile') {\r\n\t\t\t_contact.contactNumber = policyHolder.contact.cellPhone;\r\n\t\t}\r\n\r\n\t\t//if custom question\r\n\t\tif (\r\n\t\t\tpolicyHolder.contact.passwordQuestion ===\r\n\t\t\t'customer_created_question'\r\n\t\t) {\r\n\t\t\t_contact.personContactEnterAQuestion =\r\n\t\t\t\tpolicyHolder.contact.passwordQuestionStr;\r\n\t\t}\r\n\r\n\t\tif (policyHolder.contact.hasConviction === 'yes') {\r\n\t\t\t_contact.tenYears_chargedOrConvictedOffences = 'yes';\r\n\t\t\t_contact.tenYears_chargedOrConvictedOffencesDetails = [];\r\n\t\t\tpolicyHolder.contact.dwellingHistory.forEach(function(history) {\r\n\t\t\t\t_contact.tenYears_chargedOrConvictedOffencesDetails.push({\r\n\t\t\t\t\tdescription: {\r\n\t\t\t\t\t\tpublicID: history.pattern.publicID,\r\n\t\t\t\t\t\tcode: history.pattern.code,\r\n\t\t\t\t\t\tdescription: history.pattern.description,\r\n\t\t\t\t\t\tvalue: history.pattern.description,\r\n\t\t\t\t\t\tlabel: history.pattern.description,\r\n\t\t\t\t\t\tfilter1: history.pattern.filter1\r\n\t\t\t\t\t},\r\n\t\t\t\t\tyear: {\r\n\t\t\t\t\t\tlabel: history.year,\r\n\t\t\t\t\t\tvalue: history.year\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmonth: {\r\n\t\t\t\t\t\tlabel: transformers.monthFromNumber(history.eventMonth),\r\n\t\t\t\t\t\tvalue: transformers.monthFromNumber(history.eventMonth)\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t_contact.tenYears_chargedOrConvictedOffences = 'no';\r\n\t\t}\r\n\r\n\t\tconvertMapping = {\r\n\t\t\tgender: transformers.convertGender,\r\n\t\t\tdateOfBirth: transformers.date\r\n\t\t};\r\n\r\n\t\tvar mappedValue = jsonMapper.convert(_contact, convertMapping);\r\n\t\treturnObject.additionalPolicyHolders.policyHolders.push(_contact);\r\n\r\n\t\treturn returnObject;\r\n\t}\r\n\r\n\t//transform policy holders\r\n\tfunction transformPolicyHolders(returnObject, response) {\r\n\t\tvar _policyHolders = returnObject.policyHolders;\r\n\t\tvar _policyHolderOldestDOB = moment();\r\n\t\t_policyHolders.forEach(function(policyHolder) {\r\n\t\t\tif (policyHolder.mainHolder == true) {\r\n\t\t\t\treturnObject = transformMainPolicyHolder(\r\n\t\t\t\t\treturnObject,\r\n\t\t\t\t\tpolicyHolder,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\treturnObject = transformOtherPolicyHolder(\r\n\t\t\t\t\treturnObject,\r\n\t\t\t\t\tpolicyHolder\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\t//sets as oldest date of birth if higher\r\n\t\t\tif (\r\n\t\t\t\t_policyHolderOldestDOB.diff(\r\n\t\t\t\t\tpolicyHolder.contact.dateOfBirth,\r\n\t\t\t\t\t'days'\r\n\t\t\t\t) > 0\r\n\t\t\t) {\r\n\t\t\t\t_policyHolderOldestDOB = moment(\r\n\t\t\t\t\tpolicyHolder.contact.dateOfBirth\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// sets the oldest persons date of birth\r\n\t\treturnObject.tellUsAboutInsured.dobOldestInsured = _policyHolderOldestDOB.format(\r\n\t\t\t'DD/MM/YYYY'\r\n\t\t);\r\n\r\n\t\treturn returnObject;\r\n\t}\r\n\r\n\t/**\r\n\t * Transforms the retrievedQuoteRepsonse into a format that can be injected into the userInputRepository\r\n\t * The returned value will populate all the forms in the quote process\r\n\t * @param {Object} retrievedQuoteResponse\t\t\t\t Response object from the retrieveSavedQuote service\r\n\t * @returns {Object}\t\t\t\t\t\t\t\t\t\tTransformed object ready to inject into the userInputRepository\r\n\t */\r\n\tfunction transform(retrievedQuoteResponse) {\r\n\t\tvoid 0;\r\n\r\n\t\tvar transformMapping = {\r\n\t\t\t\t//estimate =================================================\r\n\t\t\t\t//tell us about property -------------------------------------\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.address':\r\n\t\t\t\t\t'=_input.dwellings.0.location',\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.typeOfBuilding':\r\n\t\t\t\t\t'=_input.dwellings.0.buildingType',\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.wallsMadeOf':\r\n\t\t\t\t\t'=_input.dwellings.0.externalWallMaterial',\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.howIsHomeOccupied':\r\n\t\t\t\t\t'=_input.dwellings.0.homeOccupancy',\r\n\t\t\t\t'returnObject.tellUsAboutTheProperty.propertyProfessionalAgent':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isPropertyAgentManaged',\r\n\r\n\t\t\t\t//tell us how we can insure you -------------------------------------\r\n\t\t\t\t'returnObject.tellUsHowWeCanInsureYou.coverType':\r\n\t\t\t\t\t'=_input.dwellings.0.coverType',\r\n\t\t\t\t'returnObject.tellUsHowWeCanInsureYou.policyOption':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption',\r\n\t\t\t\t'returnObject.tellUsHowWeCanInsureYou.needCoverOutsideHome':\r\n\t\t\t\t\t'=_input.dwellings.0.hasPortableContentsHomeAway',\r\n\r\n\t\t\t\t//rapid estimate -------------------------------------\r\n\r\n\t\t\t\t//tell us a bit more -------------------------------------\r\n\t\t\t\t'returnObject.tellUsABitMore.yourEmailAddress': '=_input.email',\r\n\t\t\t\t'returnObject.tellUsABitMore.promotionalCode':\r\n\t\t\t\t\t'=_input.campaignCode',\r\n\r\n\t\t\t\t//property =================================================\r\n\t\t\t\t//lets get started -------------------------------------\r\n\t\t\t\t'returnObject.letsGetStarted.personOrCompany':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.contactType',\r\n\t\t\t\t'returnObject.letsGetStarted.startCoverDate':\r\n\t\t\t\t\t'=_input.periodStartDate',\r\n\r\n\t\t\t\t//tell us about the building -------------------------------------\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.yearHomeBuilt':\r\n\t\t\t\t\t'=_input.dwellings.0.homeBuiltYear',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isStrataRegdCorp':\r\n\t\t\t\t\t'=_input.dwellings.0.isStrataRegisteredBody',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.areUnitAboveBelow':\r\n\t\t\t\t\t'=_input.dwellings.0.isUnitsAvailable',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.corpInsureUnit':\r\n\t\t\t\t\t'=_input.dwellings.0.isOwnersInsureUnits',\r\n\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isSuburbanBlock':\r\n\t\t\t\t\t'=_input.dwellings.0.isSubUrbanLocated',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isBlockLarger':\r\n\t\t\t\t\t'=_input.dwellings.0.isPropertySize',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.waterSource':\r\n\t\t\t\t\t'=_input.dwellings.0.waterSourced',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.waterTankCapacity':\r\n\t\t\t\t\t'=_input.dwellings.0.waterTankCapacity',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isEmergencyFuelWaterTank':\r\n\t\t\t\t\t'=_input.dwellings.0.isSecondaryFitted',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isBuildingRelocatable':\r\n\t\t\t\t\t'=_input.dwellings.0.isCaravanHomeLocated',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.areFoundationsSecured':\r\n\t\t\t\t\t'=_input.dwellings.0.isSecuredFoundation',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isFixedPlumbingElectricityConnect':\r\n\t\t\t\t\t'=_input.dwellings.0.isPlumbingConnect',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.roofMake':\r\n\t\t\t\t\t'=_input.dwellings.0.roofMaterial',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isHomeElevated':\r\n\t\t\t\t\t'=_input.dwellings.0.groundElevated',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isPortionBelowGround':\r\n\t\t\t\t\t'=_input.dwellings.0.isPortionAboveGround',\r\n\r\n\t\t\t\t// 'returnObject.tellUsAboutTheBuilding.areContentsBelowGround':\t'=_input.dwellings.0.',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.homeLevels':\r\n\t\t\t\t\t'=_input.dwellings.0.homeLevels',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isNationalTrustListed':\r\n\t\t\t\t\t'=_input.dwellings.0.isNationalTrustListed',\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isHomeWired':\r\n\t\t\t\t\t'=_input.dwellings.0.isFullyRewired',\r\n\r\n\t\t\t\t//tell us about the security -------------------------------------\r\n\t\t\t\t'returnObject.tellUsAboutTheSecurity.security':\r\n\t\t\t\t\t'=_input.dwellings.0.locationSecurity',\r\n\r\n\t\t\t\t//rennovation and residents -------------------------------------\r\n\t\t\t\t'returnObject.renovationsAndResidents.isHomeUnderRepairs':\r\n\t\t\t\t\t'=_input.dwellings.0.isRenovated',\r\n\r\n\t\t\t\t//property usage -------------------------------------\r\n\t\t\t\t'returnObject.propertyUsage.isPropertyForBusiness':\r\n\t\t\t\t\t'=_input.dwellings.0.isIncomeGenerated',\r\n\t\t\t\t'returnObject.propertyUsage.propertyActivityDegree':\r\n\t\t\t\t\t'=_input.dwellings.0.incomeGeneratingDegree',\r\n\r\n\t\t\t\t'returnObject.propertyUsage.propertyActivities':\r\n\t\t\t\t\t'=_input.dwellings.0.incomeGeneratingActivities',\r\n\t\t\t\t'returnObject.propertyUsage.propertyAgricultureActivities':\r\n\t\t\t\t\t'=_input.dwellings.0.agriculturalActivities',\r\n\r\n\t\t\t\t//mortgage on property -------------------------------------\r\n\t\t\t\t'returnObject.mortgageOnProperty.propertyMortgagedWith':\r\n\t\t\t\t\t'=_input.dwellings.0.mortgagees',\r\n\r\n\t\t\t\t//building =================================================\r\n\t\t\t\t//building details -------------------------------\r\n\t\t\t\t'returnObject.buildingDetails.homeBuiltStandard':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.homeStandard',\r\n\t\t\t\t'returnObject.buildingDetails.landSlope':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.isLandSloped',\r\n\t\t\t\t'returnObject.buildingDetails.slopeType':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.slopeType',\r\n\t\t\t\t'returnObject.buildingDetails.homeTotalArea':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.knowHomeSize',\r\n\t\t\t\t'returnObject.buildingDetails.homeArea':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.sizeOfHome',\r\n\t\t\t\t'returnObject.buildingDetails.homeAreaUnit':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.areaUnit',\r\n\t\t\t\t'returnObject.buildingDetails.homeBedrooms':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfBedrooms',\r\n\t\t\t\t'returnObject.buildingDetails.homeBedroomSize':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.sizeOfBedroom',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.homeDecks':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfBalconies',\r\n\t\t\t\t'returnObject.buildingDetails.homeVerandahs':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfVerandahs',\r\n\t\t\t\t'returnObject.buildingDetails.homeCarports':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfCarports',\r\n\t\t\t\t'returnObject.buildingDetails.homeGarages':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfGarages',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.homeSheds':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasSheds',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.largeSheds':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfLargeSheds',\r\n\t\t\t\t'returnObject.buildingDetails.smallSheds':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.numberOfSmallSheds',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.homeFeatures.ducted_airconditioning':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasDuctedAirConditioning',\r\n\t\t\t\t'returnObject.buildingDetails.homeFeatures.in_ground_swimming_pool':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasInGroundPool',\r\n\t\t\t\t'returnObject.buildingDetails.homeFeatures.tennis_court':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasTennisCourt',\r\n\t\t\t\t'returnObject.buildingDetails.homeFeatures.granny_flat':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.hasGrannyFlat',\r\n\r\n\t\t\t\t'returnObject.buildingDetails.grannyFlatSize':\r\n\t\t\t\t\t'=_input.dwellings.0.locationProperty.grannyFlatSize',\r\n\t\t\t\t'returnObject.buildingDetails.isBuiltToCycloneStandards':\r\n\t\t\t\t\t'=_input.dwellings.0.isCycloneStandardlyBuilt',\r\n\r\n\t\t\t\t//covers =================================================\r\n\t\t\t\t//your buildings -------------------------------------\r\n\t\t\t\t'returnObject.yourBuilding.buildingSumInsured':\r\n\t\t\t\t\t'=_input.dwellings.0.buildingSumInsured',\r\n\t\t\t\t//your contents -------------------------------------\r\n\t\t\t\t'returnObject.yourContents.contentsSumInsured':\r\n\t\t\t\t\t'=_input.dwellings.0.contentSumInsured',\r\n\t\t\t\t//portable contents -------------------------------------\r\n\t\t\t\t'returnObject.portableContents.coverPortableContents':\r\n\t\t\t\t\t'=_input.dwellings.0.hasPortableContentsHomeAway',\r\n\t\t\t\t'returnObject.portableContents.coverPortableContentsRegion':\r\n\t\t\t\t\t'=_input.dwellings.0.portableCoverCountry',\r\n\t\t\t\t'returnObject.portableContents.coverPortableContentLimit':\r\n\t\t\t\t\t'=_input.dwellings.0.generalPortableContents',\r\n\t\t\t\t'returnObject.portableContents.portableContentsSpecifiedCover':\r\n\t\t\t\t\t'=_input.dwellings.0.hasSpecifiedPortableContList',\r\n\r\n\t\t\t\t//accidental loss or damage -------------------------------------\r\n\t\t\t\t'returnObject.accidentalLossOrDamage.coverAccDmgBuilding':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isBuildingAccidentalDamage',\r\n\t\t\t\t'returnObject.accidentalLossOrDamage.coverAccDmgContents':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentsAccidentalDamage',\r\n\r\n\t\t\t\t//cycle cover -------------------------------------\r\n\t\t\t\t'returnObject.cycleCover.coverCycle':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentsCycleCover',\r\n\t\t\t\t'returnObject.cycleCover.coverCycleExtendOption':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentsCycleRacingCover',\r\n\t\t\t\t'returnObject.cycleCover.cycleList':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.cycles',\r\n\t\t\t\t'returnObject.cycleCover.coverItemsList':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.cycleEquipments',\r\n\r\n\t\t\t\t//rent default\r\n\t\t\t\t'returnObject.rentDefault.rentDefault':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.rentDefaultAmount',\r\n\r\n\t\t\t\t'returnObject.rentDefault.rentCurrentWeekly':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.rentDefaultAmount',\r\n\t\t\t\t'returnObject.rentDefault.rentXWeeks':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.rentDefaultWeeks',\r\n\r\n\t\t\t\t//vandalism by tenanats\r\n\t\t\t\t'returnObject.theftAndVandalismByTenants.theftCoverContents':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentVandalismCover',\r\n\t\t\t\t'returnObject.theftAndVandalismByTenants.theftCoverBuilding':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isBuildingVandalismCover',\r\n\t\t\t\t// 'returnObject.tellUsHowWeCanInsureYou.coverNeeds.malicious_damage':\t'=_input.dwellings.0.isBuildingVandalismCover',\r\n\r\n\t\t\t\t//high risk items\r\n\t\t\t\t'returnObject.specifiedHighRiskItems.riskCoverIndividualWorks':\r\n\t\t\t\t\t'=_input.dwellings.0.hasWorksArt',\r\n\t\t\t\t'returnObject.specifiedHighRiskItems.riskEntertainmentEquipment':\r\n\t\t\t\t\t'=_input.dwellings.0.hasEntertainmentEquipment',\r\n\r\n\t\t\t\t//domestic worker compansation\r\n\t\t\t\t'returnObject.domesticWorkerCompensation.domesticWorkerCompCover':\r\n\t\t\t\t\t'=_input.dwellings.0.policyOption.isContentsDomesticWorkerComp',\r\n\r\n\t\t\t\t//details =================================================\r\n\t\t\t\t//tell us about insured -------------------------------------\r\n\t\t\t\t'returnObject.tellUsAboutInsured.dobOldestInsured':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.dateOfBirth',\r\n\t\t\t\t'returnObject.tellUsAboutInsured.isRetired':\r\n\t\t\t\t\t'=_input.isInsuredsRetired',\r\n\r\n\t\t\t\t// insurance history -------------------------------------\r\n\t\t\t\t'returnObject.insuranceHistory.history':\r\n\t\t\t\t\t'=_input.dwellings.0.dwellingHistories',\r\n\t\t\t\t'returnObject.insuranceHistory.insuranceHeldFor':\r\n\t\t\t\t\t'=_input.dwellings.0.yearsContInsurance',\r\n\t\t\t\t'returnObject.insuranceHistory.previousInsurer':\r\n\t\t\t\t\t'=_input.dwellings.0.previousInsurer',\r\n\t\t\t\t'returnObject.insuranceHistory.claimInLastYear':\r\n\t\t\t\t\t'=_input.dwellings.0.hasInsuredClaims',\r\n\t\t\t\t'returnObject.insuranceHistory.portableClaim':\r\n\t\t\t\t\t'=_input.hasPortableContentsClaims',\r\n\r\n\t\t\t\t//quote =================================================\r\n\t\t\t\t//insured excess value -------------------------------------\r\n\t\t\t\t//save on premium -------------------------------------\r\n\t\t\t\t// optional benifits -------------------------------------\r\n\t\t\t\t// promotonal code -------------------------------------\r\n\r\n\t\t\t\t//contact =================================================\r\n\t\t\t\t//tell us about the main policy holder -------------------------------------\r\n\t\t\t\t//main policy holder contact -------------------------------------\r\n\t\t\t\t//additional policy holder -------------------------------------\r\n\t\t\t\t//tell us about the company -------------------------------------\r\n\t\t\t\t//tell us about the authurised contact for the company -------------------------------------\r\n\t\t\t\t//compant contact -------------------------------------\r\n\t\t\t\t'returnObject.policyHolders': '=_input.policyHolders',\r\n\r\n\t\t\t\t//payment =================================================\r\n\t\t\t\t//payment details -------------------------------------\r\n\t\t\t\t//promotional code -------------------------------------\r\n\r\n\t\t\t\t//additional info\r\n\t\t\t\t'returnObject.info': {},\r\n\t\t\t\t'returnObject.info.offering': '=_input.dwellings.0.offering'\r\n\t\t\t},\r\n\t\t\tconvertMapping = {\r\n\t\t\t\t'returnObject.letsGetStarted.startCoverDate': transformers.date,\r\n\t\t\t\t'returnObject.buildingDetails.homeBedrooms':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.buildingDetails.homeDecks':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.buildingDetails.homeVerandahs':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.buildingDetails.homeCarports':\r\n\t\t\t\t\ttransformers.itemCountCarPort,\r\n\t\t\t\t'returnObject.buildingDetails.homeGarages':\r\n\t\t\t\t\ttransformers.itemCountGarages,\r\n\t\t\t\t'returnObject.buildingDetails.largeSheds':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.buildingDetails.smallSheds':\r\n\t\t\t\t\ttransformers.itemCount,\r\n\t\t\t\t'returnObject.rentDefault.rentDefault': transformers.hasValue,\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isPortionBelowGround':\r\n\t\t\t\t\ttransformers.yesNo,\r\n\t\t\t\t'returnObject.tellUsAboutInsured.isRetired': transformers.yesNo,\r\n\t\t\t\t'returnObject.tellUsAboutTheBuilding.isBuiltToCycloneStandards':\r\n\t\t\t\t\ttransformers.yesNo\r\n\r\n\t\t\t\t// 'returnObject.carDetails.colour':\t\t\t\t\t\t\t\t\t transformers.camelcase,\r\n\t\t\t\t// 'returnObject.getStarted.policyStartDate':\t\t\t\t\t\t\t transformers.date,\r\n\t\t\t\t// 'returnObject.carDetails.carFinance':\t\t\t\t\t\t\t\t\ttransformers.financeType,\r\n\t\t\t\t// 'returnObject.retrievedQuoteRego.state':\t\t\t\t\t\t\t\ttransformers.state,\r\n\t\t\t\t// 'returnObject.insuredExcessValue.coverType':\t\t\t\t\t\t\ttransformers.coverType,\r\n\t\t\t\t// 'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft': transformers.thirdPartyPref,\r\n\t\t\t\t// 'returnObject.carDetails.whenDidYouBuyYear':\t\t\t\t\t\t\ttransformers.purchaseMonthFromMonthYear,\r\n\t\t\t\t// 'returnObject.carDetails.whenDidYouBuyMonth':\t\t\t\t\t\t transformers.purchaseYearFromMonthYear\r\n\t\t\t};\r\n\t\tvar transformedQuote = jsonMapper.convert(\r\n\t\t\tjsonMapper.transform(retrievedQuoteResponse, transformMapping),\r\n\t\t\tconvertMapping\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.tellUsAboutTheSecurity = transformSecurity(\r\n\t\t\ttransformedQuote.returnObject.tellUsAboutTheSecurity\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.tellUsHowWeCanInsureYou = transformNeeds(\r\n\t\t\ttransformedQuote.returnObject.tellUsHowWeCanInsureYou,\r\n\t\t\ttransformedQuote.returnObject\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.buildingDetails = transformBuilding(\r\n\t\t\ttransformedQuote.returnObject.buildingDetails\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.tellUsAboutTheBuilding = transformTellUsAboutBuilding(\r\n\t\t\ttransformedQuote.returnObject.tellUsAboutTheBuilding\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.mortgageOnProperty = transformMortgageOnProperty(\r\n\t\t\ttransformedQuote.returnObject.mortgageOnProperty\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.cycleCover = transformCycleCover(\r\n\t\t\ttransformedQuote.returnObject.cycleCover\r\n\t\t);\r\n\t\ttransformedQuote.returnObject.insuranceHistory = transformInsuranceHistory(\r\n\t\t\ttransformedQuote.returnObject.insuranceHistory\r\n\t\t);\r\n\t\ttransformedQuote.returnObject = transformPolicyHolders(\r\n\t\t\ttransformedQuote.returnObject,\r\n\t\t\tretrievedQuoteResponse\r\n\t\t);\r\n\r\n\t\treturn transformedQuote.returnObject;\r\n\t}\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n\n\t'use strict' ;\r\n\r\nfunction HomeSplitterRequestTransformer(Util, serviceResponseRepository, jsonMapper, publicIDTransformer, coverTypeTransformer) {\r\n\r\n\tfunction getQuoteResponseValue(qouteResponse, pathString) {\r\n\t\treturn Util.findHierarchyStringInObject(qouteResponse, pathString, '.') ;\r\n\t}\r\n\r\n\tfunction transform(quotePermutations, quoteRequest) {\r\n\t\tvar quoteResponses = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\tvar transformedRequest = null ;\r\n\t\tif ( quoteResponses )\r\n\t\t\ttransformedRequest = transformExistingQuote(quotePermutations, quoteResponses, quoteRequest) ;\r\n\t\telse\r\n\t\t\ttransformedRequest = transformNewQuote(quotePermutations, quoteRequest) ;\r\n\r\n\t\treturn transformedRequest ;\r\n\t}\r\n\r\n\tfunction transformExistingQuote(quotePermutations, quoteResponses, quoteRequest) {\r\n\t\tvar quotes = Util.generatePermutationsArray(quotePermutations.offerings, quotePermutations.paymentFrequencies).map(function(permutation, index) {\r\n\t\t\tvar quote = Object.extend(permutation, quoteRequest);\r\n\t\t\tvar offering = permutation.option1;\r\n\t\t\tvar paymentFrequency = permutation.option2;\r\n\t\t\tdelete quote.option1; delete quote.option2 ; \r\n\t\t\tvar quoteType = quotePermutations.quoteType ;\r\n\t\t\tvar coverType = quotePermutations.coverTypes[0] ;\r\n\t\t\tvar q = Util.deepClone(quote) ;\r\n\t\t\tq = Object.extend(q,{\r\n\t\t\t\tquoteType: quoteType,\r\n\t\t\t\tpaymentFrequency: paymentFrequency,\r\n\t\t\t}) ;\r\n\r\n\t\t\tvar quoteResponseBody = null ;\r\n\t\t\tvar matchingQuoteResponse = findMatchingQuoteResponse(quoteResponses, coverType, offering) ;\r\n\t\t\tif ( matchingQuoteResponse )\r\n\t\t\t\tquoteResponseBody = matchingQuoteResponse.response;\r\n\r\n\t\t\tq = publicIDTransformer.transform(q, quoteResponseBody, true) ;\r\n\t\t\tq = coverTypeTransformer.transform(q, coverType.descriptor, offering.descriptor);\r\n\t\t\treturn q ;\r\n\t\t}) ;\r\n\r\n\t\treturn quotes.filter(function(quote) { return quote !== null }) ;\r\n\t}\r\n\r\n\tfunction findMatchingQuoteResponse(quoteResponses, coverType, offering){\r\n\t\tif ( ! quoteResponses )\r\n\t\t\treturn;\r\n\r\n\t\tvar matchingResponse = null ;\r\n\t\tquoteResponses.some(function(qr) {\r\n\t\t\tif (qr.coverType == coverType.descriptor && qr.offering == offering.descriptor ) {\r\n\t\t\t\tmatchingResponse = qr ;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matchingResponse;\r\n\t}\r\n\r\n\tfunction transformNewQuote(quotePermutations, quoteRequest) {\r\n\t\tvar nr = quotePermutations.offerings.length * quotePermutations.paymentFrequencies.length;\r\n\t\tvar counter = 0 ; \r\n\t\tvar quotes = Util.arrayFill(nr, quoteRequest).map(function(quote, index) {\r\n\t\t\tvar offering = quotePermutations.offerings[index % quotePermutations.offerings.length];\t\t\t\r\n\t\t\tvar paymentFrequency = quotePermutations.paymentFrequencies[counter % quotePermutations.paymentFrequencies.length];\r\n\t\t\tvar quoteType = quotePermutations.quoteType ;\r\n\t\t\tvar coverType = quotePermutations.coverTypes[0];\r\n\t\t\tvar q = Util.deepClone(quote) ;\r\n\t\t\tq = Object.extend(q,{\r\n\t\t\t\tquoteType: quoteType,\r\n\t\t\t\tpaymentFrequency: paymentFrequency,\r\n\t\t\t}) ;\r\n\r\n\t\t\tq = coverTypeTransformer.transform(q, coverType.descriptor, offering.descriptor);\r\n\t\t\tq = publicIDTransformer.transform(q) ;\r\n\t\t\tif ( index == quotePermutations.offerings.length - 1 )\r\n\t\t\t\tcounter = ++counter % quotePermutations.paymentFrequencies.length ; \r\n\t\t\t\r\n\t\t\treturn q ;\r\n\t\t}) ;\r\n\r\n\t\treturn quotes ;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction HomeStructureRequestTransformer(\r\n\tjsonMapper,\r\n\tutil,\r\n\tquoteOptions,\r\n\tstorage\r\n) {\r\n\tvar structureQuoteMapping = {\r\n\t\tperiodStartDate: \"=_input.homeForm.letsGetStarted.startCoverDate\",\r\n\t\tdwellings: [],\r\n\t\t\"dwellings.0\": {},\r\n\t\t\"dwellings.0.location\": \"=_addressSearch\",\r\n\t\t\"dwellings.0.buildingType\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheProperty.typeOfBuilding\",\r\n\t\t\"dwellings.0.externalWallMaterial\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheProperty.wallsMadeOf\",\r\n\t\t\"dwellings.0.homeOccupancy\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheProperty.howIsHomeOccupied\",\r\n\t\t\"dwellings.0.buildingSumInsured\":\r\n\t\t\t\"=_input.homeForm.rapidEstimate.buildingInsureAmount\",\r\n\t\t\"dwellings.0.contentSumInsured\":\r\n\t\t\t\"=_input.homeForm.rapidEstimate.contentInsureAmount\",\r\n\r\n\t\t\"dwellings.0.policyOption\": {},\r\n\t\t\"dwellings.0.policyOption.rentDefaultAmount\":\r\n\t\t\t\"=_input.homeForm.rapidEstimate.rentDefaultCoverAmount\",\r\n\t\t\"dwellings.0.policyOption.rentDefaultWeeks\":\r\n\t\t\t\"=_input.homeForm.rapidEstimate.uptoWeeks\",\r\n\t\t\"dwellings.0.policyOption.isPropertyAgentManaged\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheProperty.propertyProfessionalAgent\",\r\n\r\n\t\t\"dwellings.0.yearsContInsurance\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.insuranceHeldFor\",\r\n\t\t\"dwellings.0.previousInsurer\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.previousInsurer\",\r\n\t\t\"dwellings.0.hasInsuredClaims\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.claimInLastYear\",\r\n\r\n\t\t\"dwellings.0.dwellingHistories\": [],\r\n\r\n\t\t//multiple data for portable and other contents\r\n\t\t\"dwellings.0.dwellingClaimHistories\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.claimDetails\",\r\n\r\n\t\t\"dwellings.0.dwellingPortableClaimHistories\":\r\n\t\t\t\"=_input.homeForm.insuranceHistory.portableClaimDetails\",\r\n\r\n\t\t\"dwellings.0.homeBuiltYear\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.yearHomeBuilt\",\r\n\t\t\"dwellings.0.isStrataRegisteredBody\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isStrataRegdCorp\",\r\n\t\t\"dwellings.0.isUnitsAvailable\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.areUnitAboveBelow\",\r\n\t\t\"dwellings.0.isOwnersInsureUnits\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.corpInsureUnit\",\r\n\t\t\"dwellings.0.isSubUrbanLocated\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isSuburbanBlock\",\r\n\t\t\"dwellings.0.isPropertySize\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isBlockLarger\",\r\n\t\t\"dwellings.0.waterSourced\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.waterSource\",\r\n\t\t\"dwellings.0.waterTankCapacity\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.waterTankCapacity\",\r\n\t\t\"dwellings.0.isSecondaryFitted\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isEmergencyFuelWaterTank\",\r\n\t\t\"dwellings.0.isCaravanHomeLocated\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isBuildingRelocatable\",\r\n\t\t\"dwellings.0.isSecuredFoundation\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.areFoundationsSecured\",\r\n\t\t\"dwellings.0.isPlumbingConnect\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isFixedPlumbingElectricityConnect\",\r\n\t\t\"dwellings.0.roofMaterial\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.roofMake\",\r\n\t\t\"dwellings.0.groundElevated\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isHomeElevated\",\r\n\t\t\"dwellings.0.homeLevels\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.homeLevels\",\r\n\t\t\"dwellings.0.isUnitAboveGround\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isUnitAboveGround\",\r\n\t\t//IMPORTANT: Setting isPortionBelowGround to isPortionAboveGround is intentional as this is how it is mapped in guide-wire\r\n\t\t\"dwellings.0.isPortionAboveGround\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isPortionBelowGround\",\r\n\t\t// \"dwellings.0.isPortionAboveGround\" : \"=_input.homeForm.tellUsAboutTheBuilding.areContentsBelowGround\",\r\n\t\t\"dwellings.0.isNationalTrustListed\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isNationalTrustListed\",\r\n\t\t\"dwellings.0.isFullyRewired\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheBuilding.isHomeWired\",\r\n\r\n\t\t//Theft and vandalism by tenants\r\n\t\t\"dwellings.0.policyOption.isBuildingVandalismCover\":\r\n\t\t\t\"=_input.homeForm.theftAndVandalismByTenants.theftCoverBuilding\",\r\n\t\t\"dwellings.0.policyOption.isContentVandalismCover\":\r\n\t\t\t\"=_input.homeForm.theftAndVandalismByTenants.theftCoverContents\",\r\n\r\n\t\t// Tell us About the Security Section\r\n\t\t\"dwellings.0.locationSecurity\": {},\r\n\t\t\"dwellings.0.locationSecurity.hasDoorDeadlocks\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalDoors.deadlocks\",\r\n\t\t\"dwellings.0.locationSecurity.hasDoorSecurityScreen\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalDoors.door_security_screen\",\r\n\r\n\t\t\"dwellings.0.locationSecurity.hasWindowKeylocks\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalWindows.keylocks\",\r\n\t\t\"dwellings.0.locationSecurity.hasWindowRollerShutter\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalWindows.roller_shutter\",\r\n\t\t\"dwellings.0.locationSecurity.hasWindowScreenBars\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.securityExternalWindows.security_screens_or_bars\",\r\n\r\n\t\t\"dwellings.0.locationSecurity.isGatedCommunity\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.otherSecurity.gated_community\",\r\n\t\t\"dwellings.0.locationSecurity.has24HourConcierge\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.otherSecurity.24_hour_concierge\",\r\n\t\t\"dwellings.0.locationSecurity.hasFixedHomeSafe\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.otherSecurity.fixed_home_sage\",\r\n\t\t\"dwellings.0.locationSecurity.isSecurityRatedBuilding\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutTheSecurity.otherSecurity.security_rated_building\",\r\n\r\n\t\t//Renovations and Residents\r\n\t\t\"dwellings.0.isRenovated\":\r\n\t\t\t\"=_input.homeForm.renovationsAndResidents.isHomeUnderRepairs\",\r\n\t\t\"dwellings.0.isCommunitySurrounded\":\r\n\t\t\t\"=_input.homeForm.renovationsAndResidents.isHomeInCommunity\",\r\n\t\t\"dwellings.0.isUnrelatedPeople\":\r\n\t\t\t\"=_input.homeForm.renovationsAndResidents.areUnrelatedPeopleInHome\",\r\n\r\n\t\t//Property Usage\r\n\t\t\"dwellings.0.isIncomeGenerated\":\r\n\t\t\t\"=_input.homeForm.propertyUsage.isPropertyForBusiness\",\r\n\t\t\"dwellings.0.incomeGeneratingDegree\":\r\n\t\t\t\"=_input.homeForm.propertyUsage.propertyActivityDegree\",\r\n\t\t\"dwellings.0.incomeGeneratingActivities\":\r\n\t\t\t\"=_input.homeForm.propertyUsage.propertyActivities\",\r\n\t\t\"dwellings.0.agriculturalActivities\":\r\n\t\t\t\"=_input.homeForm.propertyUsage.propertyAgricultureActivities\",\r\n\r\n\t\t//Mortgage on Property\r\n\t\t\"dwellings.0.isMortgagePresent\":\r\n\t\t\t\"=_input.homeForm.mortgageOnProperty.isPropertyUnderMortgage\",\r\n\r\n\t\t//Building step\r\n\t\t//Building Details\r\n\t\t\"dwellings.0.locationProperty\": {},\r\n\t\t\"dwellings.0.locationProperty.homeStandard\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeBuiltStandard\",\r\n\t\t\"dwellings.0.locationProperty.isLandSloped\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.landSlope\",\r\n\t\t\"dwellings.0.locationProperty.knowHomeSize\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeTotalArea\",\r\n\t\t\"dwellings.0.locationProperty.sizeOfHome\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeArea\",\r\n\t\t\"dwellings.0.locationProperty.areaUnit\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeAreaUnit\",\r\n\t\t\"dwellings.0.locationProperty.sizeOfBedroom\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeBedroomSize\",\r\n\t\t\"dwellings.0.isCycloneStandardlyBuilt\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.isBuiltToCycloneStandards\",\r\n\r\n\t\t/** These need to be be commented back in and converted to guide-wire expected values */\r\n\r\n\t\t\"dwellings.0.locationProperty.numberOfBedrooms\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeBedrooms\",\r\n\t\t\"dwellings.0.locationProperty.numberOfBalconies\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeDecks\",\r\n\t\t\"dwellings.0.locationProperty.numberOfVerandahs\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeVerandahs\",\r\n\t\t\"dwellings.0.locationProperty.numberOfCarports\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeCarports\",\r\n\t\t\"dwellings.0.locationProperty.numberOfGarages\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeGarages\",\r\n\t\t\"dwellings.0.locationProperty.hasSheds\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeSheds\",\r\n\r\n\t\t\"dwellings.0.locationProperty.numberOfLargeSheds\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.largeSheds\",\r\n\t\t\"dwellings.0.locationProperty.numberOfSmallSheds\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.smallSheds\",\r\n\r\n\t\t\"dwellings.0.locationProperty.hasDuctedAirConditioning\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeFeatures.ducted_airconditioning\",\r\n\t\t\"dwellings.0.locationProperty.hasInGroundPool\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeFeatures.in_ground_swimming_pool\",\r\n\t\t\"dwellings.0.locationProperty.hasTennisCourt\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeFeatures.tennis_court\",\r\n\t\t\"dwellings.0.locationProperty.hasGrannyFlat\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.homeFeatures.granny_flat\",\r\n\t\t\"dwellings.0.locationProperty.grannyFlatSize\":\r\n\t\t\t\"=_input.homeForm.buildingDetails.grannyFlatSize\",\r\n\r\n\t\t//Covers Step\r\n\t\t//Your building\r\n\t\t\"dwellings.0.buildingSumInsured\":\r\n\t\t\t\"=_input.homeForm.yourBuilding.buildingSumInsured\",\r\n\r\n\t\t//Your contents\r\n\t\t\"dwellings.0.contentSumInsured\":\r\n\t\t\t\"=_input.homeForm.yourContents.contentsSumInsured\",\r\n\r\n\t\t//Portable Contents\r\n\t\t\"dwellings.0.hasPortableContentsHomeAway\":\r\n\t\t\t\"=_input.homeForm.portableContents.coverPortableContents\",\r\n\t\t\"dwellings.0.portableCoverCountry\":\r\n\t\t\t\"=_input.homeForm.portableContents.coverPortableContentsRegion\",\r\n\t\t\"dwellings.0.generalPortableContents\":\r\n\t\t\t\"=_input.homeForm.portableContents.coverPortableContentLimit\",\r\n\t\t\"dwellings.0.hasSpecifiedPortableContList\":\r\n\t\t\t\"=_input.homeForm.portableContents.portableContentsSpecifiedCover\",\r\n\t\t\"dwellings.0.hasGeneralPortableContents\":\r\n\t\t\t\"=_input.homeForm.portableContents.coverPortableContents\",\r\n\t\t//Accidental Loss or Damage\r\n\t\t\"dwellings.0.policyOption.isBuildingAccidentalDamage\":\r\n\t\t\t\"=_input.homeForm.accidentalLossOrDamage.coverAccDmgBuilding\",\r\n\t\t\"dwellings.0.policyOption.isContentsAccidentalDamage\":\r\n\t\t\t\"=_input.homeForm.accidentalLossOrDamage.coverAccDmgContents\",\r\n\r\n\t\t//Cycle Cover\r\n\t\t\"dwellings.0.policyOption.isContentsCycleCover\":\r\n\t\t\t\"=_input.homeForm.cycleCover.coverCycle\",\r\n\t\t\"dwellings.0.policyOption.isContentsCycleRacingCover\":\r\n\t\t\t\"=_input.homeForm.cycleCover.coverCycleExtendOption\",\r\n\t\t\"dwellings.0.policyOption.specifyCycleEquipment\":\r\n\t\t\t\"=_input.homeForm.cycleCover.coverItems\",\r\n\r\n\t\t//Rent Default\r\n\t\t\"dwellings.0.policyOption.isRentDefaultCover\":\r\n\t\t\t\"=_input.homeForm.rentDefault.rentDefault\",\r\n\r\n\t\t\"dwellings.0.excess\": {},\r\n\t\t\"dwellings.0.excess.voluntaryExcess\":\r\n\t\t\t\"=_input.homeForm.chooseYourExcess.homeExcess\",\r\n\t\t\"dwellings.0.excess.portableContentVoluntaryExcess\":\r\n\t\t\t\"=_input.homeForm.chooseYourExcess.portableContentsExcess\",\r\n\r\n\t\t//Specified High Risk Items\r\n\t\t\"dwellings.0.hasWorksArt\":\r\n\t\t\t\"=_input.homeForm.specifiedHighRiskItems.riskCoverIndividualWorks\",\r\n\t\t\"dwellings.0.hasEntertainmentEquipment\":\r\n\t\t\t\"=_input.homeForm.specifiedHighRiskItems.riskEntertainmentEquipment\",\r\n\r\n\t\t//Domestic Worker's compensation\r\n\t\t\"dwellings.0.policyOption.isContentsDomesticWorkerComp\":\r\n\t\t\t\"=_input.homeForm.domesticWorkerCompensation.domesticWorkerCompCover\",\r\n\r\n\t\t//quote steps\r\n\t\t\"dwellings.0.offering\":\r\n\t\t\t\"=_input.homeForm.confirmYourLevelOfCover.yourChosenCover\",\r\n\r\n\t\t//Contact Step\r\n\t\tpolicyHolders: [],\r\n\t\t\"policyHolders.0\": {},\r\n\t\t\"policyHolders.0.contact\": {},\r\n\t\t\"policyHolders.0.contact.primaryAddress\": \"=_addressSearch\",\r\n\t\t\"policyHolders.0.contact.dateOfBirth\":\r\n\t\t\t\"=_input.homeForm.tellUsAboutInsured.dobOldestInsured\",\r\n\t\tpolicyAddress: \"=_addressSearch\",\r\n\t\t\"policyHolders.0.contact.primaryAddress.addressType\": \"residential\",\r\n\t\t\"policyAddress.addressType\": \"residential\",\r\n\t\tisInsuredsRetired: \"=_input.homeForm.tellUsAboutInsured.isRetired\",\r\n\t\thasPortableContentsClaims:\r\n\t\t\t\"=_input.homeForm.insuranceHistory.portableClaim\",\r\n\t\temail: \"=_input.email\",\r\n\t\tcampaignCode: \"=_input.homeForm.tellUsABitMore.promotionalCode\",\r\n\t\tpostalAddress: \"=_addressSearch-postal-address\",\r\n\t};\r\n\r\n\tfunction updatePolicyHolderPrimaryAddress(transformedRequest) {\r\n\t\tvar policyHolder = util.deepClone(transformedRequest.policyHolders[0]);\r\n\r\n\t\tpolicyHolder.contact.primaryAddress.addressType = \"residential\";\r\n\r\n\t\ttransformedRequest.policyHolders[0] = policyHolder;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateProductCode(transformedRequest, userInput) {\r\n\t\t//update productCode if rented\r\n\t\tif (\r\n\t\t\tuserInput.homeForm &&\r\n\t\t\tuserInput.homeForm.tellUsAboutTheProperty &&\r\n\t\t\tuserInput.homeForm.tellUsAboutTheProperty.howIsHomeOccupied\r\n\t\t) {\r\n\t\t\tvar landlordConditions = [\r\n\t\t\t\t\"own_rent_tenants\",\r\n\t\t\t\t\"own_rent_tenants_causalbasis\",\r\n\t\t\t\t\"property_used_hostel_or_guest\",\r\n\t\t\t];\r\n\t\t\tif (\r\n\t\t\t\tlandlordConditions.indexOf(\r\n\t\t\t\t\tuserInput.homeForm.tellUsAboutTheProperty.howIsHomeOccupied\r\n\t\t\t\t) > -1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.productCode = \"QPHLandlord\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateMortgagees(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm && !userInput.homeForm.mortgageOnProperty) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tvar mortgageOnProperty = userInput.homeForm.mortgageOnProperty;\r\n\t\tif (mortgageOnProperty.isPropertyUnderMortgage) {\r\n\t\t\ttransformedRequest.dwellings[0].isMortgagePresent = true;\r\n\t\t\tvar _mortgagees = [];\r\n\t\t\tmortgageOnProperty.propertyMortgagedWith.forEach(function (\r\n\t\t\t\titem,\r\n\t\t\t\tindex\r\n\t\t\t) {\r\n\t\t\t\tvar _mortgagee = {\r\n\t\t\t\t\tmortgagee: item,\r\n\t\t\t\t\tstatus: index + 1,\r\n\t\t\t\t};\r\n\t\t\t\t_mortgagees.push(_mortgagee);\r\n\t\t\t});\r\n\t\t\tif (_mortgagees.length > 0) {\r\n\t\t\t\ttransformedRequest.dwellings[0].mortgagees = _mortgagees;\r\n\t\t\t} else {\r\n\t\t\t\tif (transformedRequest.dwellings[0].mortgagees) {\r\n\t\t\t\t\tdelete transformedRequest.dwellings[0].mortgagees;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\ttransformedRequest.dwellings[0].isMortgagePresent = false;\r\n\t\t\tif (transformedRequest.dwellings[0].mortgagees) {\r\n\t\t\t\tdelete transformedRequest.dwellings[0].mortgagees;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction UpdateAlarmType(transformedRequest, userInput) {\r\n\t\tvar localAlarm = false;\r\n\t\tvar _24HourAlarm = false;\r\n\r\n\t\tif (\r\n\t\t\tuserInput.homeForm.tellUsAboutTheSecurity &&\r\n\t\t\tuserInput.homeForm.tellUsAboutTheSecurity.otherSecurity\r\n\t\t) {\r\n\t\t\tlocalAlarm =\r\n\t\t\t\tuserInput.homeForm.tellUsAboutTheSecurity.otherSecurity[\r\n\t\t\t\t\t\"local_alarm\"\r\n\t\t\t\t];\r\n\t\t\t_24HourAlarm =\r\n\t\t\t\tuserInput.homeForm.tellUsAboutTheSecurity.otherSecurity[\r\n\t\t\t\t\t\"24_hour_monitored_alarm\"\r\n\t\t\t\t];\r\n\t\t}\r\n\r\n\t\ttransformedRequest.dwellings[0].locationSecurity.haveSecurityAlarm = false;\r\n\r\n\t\tvar result = \"\";\r\n\r\n\t\tif (localAlarm && Boolean(localAlarm)) {\r\n\t\t\tresult = \"local_alarm\";\r\n\t\t\ttransformedRequest.dwellings[0].locationSecurity.haveSecurityAlarm = true;\r\n\t\t} else if (_24HourAlarm && Boolean(_24HourAlarm)) {\r\n\t\t\tresult = \"monitored_alarm\";\r\n\t\t\ttransformedRequest.dwellings[0].locationSecurity.haveSecurityAlarm = true;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.dwellings[0].locationSecurity.typeOfAlarm = result;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction UpdateRentDefault(transformedRequest, userInput) {\r\n\t\t// if (!userInput.homeForm.rentDefault) {\r\n\t\t// \treturn transformedRequest;\r\n\t\t// }\r\n\r\n\t\t// var rentDefault = userInput.homeForm.rentDefault;\r\n\r\n\t\t// if (rentDefault.rentCurrentWeekly) {\r\n\t\t// \ttransformedRequest.dwellings[0].policyOption.rentDefaultAmount =\r\n\t\t// \t\trentDefault.rentCurrentWeekly;\r\n\t\t// }\r\n\r\n\t\t// if (rentDefault.rentXWeeks) {\r\n\t\t// \ttransformedRequest.dwellings[0].policyOption.rentDefaultWeeks =\r\n\t\t// \t\trentDefault.rentXWeeks;\r\n\t\t// }\r\n\r\n\t\t//dd-6486 - assign rent default cover to false when occupancy is rent casual basis\r\n\t\tif (\r\n\t\t\ttransformedRequest.dwellings[0].homeOccupancy ==\r\n\t\t\t\"own_rent_tenants_causalbasis\"\r\n\t\t) {\r\n\t\t\ttransformedRequest.dwellings[0].policyOption.isRentDefaultCover = false;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\ttransformedRequest.dwellings[0].homeOccupancy ===\r\n\t\t\t\t\"own_rent_tenants\" &&\r\n\t\t\ttransformedRequest.dwellings[0].policyOption\r\n\t\t\t\t.isPropertyAgentManaged == true\r\n\t\t) {\r\n\t\t\ttransformedRequest.dwellings[0].policyOption.isRentDefaultCover = false;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateCoverType(transformedRequest, userInput) {\r\n\t\t// debugger;\r\n\t\tif (userInput.homeForm && userInput.homeForm.tellUsHowWeCanInsureYou) {\r\n\t\t\tif (userInput.homeForm.tellUsHowWeCanInsureYou.coverNeeds) {\r\n\t\t\t\tvar needs =\r\n\t\t\t\t\tuserInput.homeForm.tellUsHowWeCanInsureYou.coverNeeds;\r\n\t\t\t\tif (needs.building && needs.contents) {\r\n\t\t\t\t\ttransformedRequest.dwellings[0].coverType =\r\n\t\t\t\t\t\t\"building_and_contents\";\r\n\t\t\t\t} else if (needs.building) {\r\n\t\t\t\t\ttransformedRequest.dwellings[0].coverType = \"building_only\";\r\n\t\t\t\t} else if (needs.contents) {\r\n\t\t\t\t\ttransformedRequest.dwellings[0].coverType = \"contents_only\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transposeMonth(monthName) {\r\n\t\tvar months = {\r\n\t\t\tJanuary: \"01\",\r\n\t\t\tFebruary: \"02\",\r\n\t\t\tMarch: \"03\",\r\n\t\t\tApril: \"04\",\r\n\t\t\tMay: \"05\",\r\n\t\t\tJune: \"06\",\r\n\t\t\tJuly: \"07\",\r\n\t\t\tAugust: \"08\",\r\n\t\t\tSeptember: \"09\",\r\n\t\t\tOctober: \"10\",\r\n\t\t\tNovember: \"11\",\r\n\t\t\tDecember: \"12\",\r\n\t\t};\r\n\r\n\t\treturn months[monthName];\r\n\t}\r\n\r\n\tfunction updateDwellingHistory(transformedRequest) {\r\n\t\tvar transformedHistoryList = [];\r\n\r\n\t\tif (\r\n\t\t\ttransformedRequest.dwellings &&\r\n\t\t\ttransformedRequest.dwellings[0].hasInsuredClaims === \"yes\"\r\n\t\t) {\r\n\t\t\tvar dwellingClaimHistory = transformedRequest.dwellings[0].dwellingClaimHistories.slice(\r\n\t\t\t\t0\r\n\t\t\t);\r\n\t\t\tdwellingClaimHistory.forEach(function (history) {\r\n\t\t\t\tvoid 0;\r\n\t\t\t\tvar transformedHistory = {\r\n\t\t\t\t\tpattern: {},\r\n\t\t\t\t\tyear: history.year.value,\r\n\t\t\t\t\tclaimType: history.coverAffected.value,\r\n\t\t\t\t\tisPortableContents: false,\r\n\t\t\t\t\teventMonth: transposeMonth(history.month.value),\r\n\t\t\t\t};\r\n\t\t\t\ttransformedHistory.pattern = {\r\n\t\t\t\t\tpublicID: history.description.publicID,\r\n\t\t\t\t\tcode: history.description.code,\r\n\t\t\t\t\tdescription: history.description.description,\r\n\t\t\t\t\tfilter1: history.description.filter1,\r\n\t\t\t\t};\r\n\t\t\t\ttransformedHistoryList.push(transformedHistory);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (transformedRequest.hasPortableContentsClaims === \"yes\") {\r\n\t\t\tvar dwellingPortableClaimHistory = transformedRequest.dwellings[0].dwellingPortableClaimHistories.slice(\r\n\t\t\t\t0\r\n\t\t\t);\r\n\t\t\tdwellingPortableClaimHistory.forEach(function (history) {\r\n\t\t\t\tvoid 0;\r\n\t\t\t\tvar transformedHistory = {\r\n\t\t\t\t\tpattern: {},\r\n\t\t\t\t\tyear: history.year.value,\r\n\t\t\t\t\tcontentCategory: history.coverAffected.value,\r\n\t\t\t\t\tisPortableContents: true,\r\n\r\n\t\t\t\t\teventMonth: transposeMonth(history.month.value),\r\n\t\t\t\t};\r\n\t\t\t\ttransformedHistory.pattern = {\r\n\t\t\t\t\tpublicID: history.description.publicID,\r\n\t\t\t\t\tcode: history.description.code,\r\n\t\t\t\t\tdescription: history.description.description,\r\n\t\t\t\t\tfilter1: history.description.filter1,\r\n\t\t\t\t};\r\n\t\t\t\ttransformedHistoryList.push(transformedHistory);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (transformedRequest.dwellings) {\r\n\t\t\tif (\r\n\t\t\t\ttransformedRequest.dwellings &&\r\n\t\t\t\ttransformedHistoryList.length > 0\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.dwellings[0].dwellingHistories = transformedHistoryList;\r\n\t\t\t} else {\r\n\t\t\t\tdelete transformedRequest.dwellings[0].dwellingHistories;\r\n\t\t\t}\r\n\r\n\t\t\t//removing as this is not requred by the service\r\n\t\t\tdelete transformedRequest.dwellings[0].dwellingClaimHistories;\r\n\t\t\tdelete transformedRequest.dwellings[0]\r\n\t\t\t\t.dwellingPortableClaimHistories;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction UpdateCycles(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.homeForm.cycleCover &&\r\n\t\t\tuserInput.homeForm.cycleCover.cycleList &&\r\n\t\t\tuserInput.homeForm.cycleCover.cycleList.length > 0\r\n\t\t) {\r\n\t\t\tvar cycles = [];\r\n\r\n\t\t\tuserInput.homeForm.cycleCover.cycleList.forEach(function (\r\n\t\t\t\tcycle,\r\n\t\t\t\tidx\r\n\t\t\t) {\r\n\t\t\t\tcycles.push({\r\n\t\t\t\t\ttypeOfBicycle: cycle.bikeType.value,\r\n\t\t\t\t\tdescription: cycle.description,\r\n\t\t\t\t\tvalue: cycle.value,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.dwellings[0].policyOption.cycles = cycles;\r\n\t\t} else {\r\n\t\t\tdelete transformedRequest.dwellings[0].policyOption.cycles;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.homeForm.cycleCover &&\r\n\t\t\tuserInput.homeForm.cycleCover.coverItemsList &&\r\n\t\t\tuserInput.homeForm.cycleCover.coverItemsList.length > 0\r\n\t\t) {\r\n\t\t\tvar cycleItems = [];\r\n\r\n\t\t\tuserInput.homeForm.cycleCover.coverItemsList.forEach(function (\r\n\t\t\t\titem,\r\n\t\t\t\tidx\r\n\t\t\t) {\r\n\t\t\t\tcycleItems.push({\r\n\t\t\t\t\tcategory: item.category.value,\r\n\t\t\t\t\tdescription: item.description,\r\n\t\t\t\t\tvalue: item.value,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.dwellings[0].policyOption.cycleEquipments = cycleItems;\r\n\t\t} else {\r\n\t\t\tdelete transformedRequest.dwellings[0].policyOption.cycleEquipments;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateSumInsured(transformedRequest, userInput) {\r\n\t\tvar homeForm = userInput.homeForm,\r\n\t\t\tdwellingsInfo = transformedRequest.dwellings[0];\r\n\t\tif (!homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\t//over write sum insured from quote page\r\n\t\tif (\r\n\t\t\thomeForm.confirmYourSumsInsured &&\r\n\t\t\thomeForm.confirmYourSumsInsured.yourBuildingSumInsured\r\n\t\t) {\r\n\t\t\tdwellingsInfo.buildingSumInsured =\r\n\t\t\t\thomeForm.confirmYourSumsInsured.yourBuildingSumInsured;\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\thomeForm.yourBuilding &&\r\n\t\t\t\thomeForm.yourBuilding.buildingSumInsured\r\n\t\t\t) {\r\n\t\t\t\tdwellingsInfo.buildingSumInsured =\r\n\t\t\t\t\thomeForm.yourBuilding.buildingSumInsured;\r\n\t\t\t} else if (\r\n\t\t\t\thomeForm.rapidEstimate &&\r\n\t\t\t\thomeForm.rapidEstimate.buildingInsureAmount\r\n\t\t\t) {\r\n\t\t\t\tdwellingsInfo.buildingSumInsured =\r\n\t\t\t\t\thomeForm.rapidEstimate.buildingInsureAmount;\r\n\t\t\t} else {\r\n\t\t\t\tdwellingsInfo.buildingSumInsured = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\t//over write sum insured from quote page\r\n\t\tif (\r\n\t\t\thomeForm.confirmYourSumsInsured &&\r\n\t\t\thomeForm.confirmYourSumsInsured.yourContentsSumInsured\r\n\t\t) {\r\n\t\t\tdwellingsInfo.contentSumInsured =\r\n\t\t\t\thomeForm.confirmYourSumsInsured.yourContentsSumInsured;\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\thomeForm.yourContents &&\r\n\t\t\t\thomeForm.yourContents.contentsSumInsured\r\n\t\t\t) {\r\n\t\t\t\tdwellingsInfo.contentSumInsured =\r\n\t\t\t\t\thomeForm.yourContents.contentsSumInsured;\r\n\t\t\t} else if (\r\n\t\t\t\thomeForm.rapidEstimate &&\r\n\t\t\t\thomeForm.rapidEstimate.contentInsureAmount\r\n\t\t\t) {\r\n\t\t\t\tdwellingsInfo.contentSumInsured =\r\n\t\t\t\t\thomeForm.rapidEstimate.contentInsureAmount;\r\n\t\t\t} else {\r\n\t\t\t\tdwellingsInfo.contentSumInsured = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateBuildingDetails(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (userInput.homeForm.buildingDetails) {\r\n\t\t\tvar slope =\r\n\t\t\t\ttransformedRequest.dwellings[0].locationProperty.isLandSloped;\r\n\t\t\tif (slope === \"flat\") {\r\n\t\t\t\ttransformedRequest.dwellings[0].locationProperty.isLandSloped =\r\n\t\t\t\t\t\"flat\";\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.dwellings[0].locationProperty.isLandSloped =\r\n\t\t\t\t\t\"sloped\";\r\n\r\n\t\t\t\ttransformedRequest.dwellings[0].locationProperty.slopeType = slope;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePersonContactDetails(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tvar homeForm = userInput.homeForm;\r\n\r\n\t\tif (\r\n\t\t\thomeForm.letsGetStarted &&\r\n\t\t\thomeForm.letsGetStarted.personOrCompany\r\n\t\t) {\r\n\t\t\tvar isCompany = homeForm.letsGetStarted.personOrCompany != \"person\";\r\n\t\t} else {\r\n\t\t\t//dont do transofrmation if personOrCompany is not present\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (isCompany) {\r\n\t\t\t// aboutTheCompany\r\n\t\t\tvar aboutTheCompany = homeForm.aboutTheCompany;\r\n\t\t\tvar aboutCompanyContact = homeForm.aboutCompanyContact;\r\n\t\t\tvar companyContactContact = homeForm.companyContactContact;\r\n\r\n\t\t\tif (\r\n\t\t\t\taboutTheCompany &&\r\n\t\t\t\taboutCompanyContact &&\r\n\t\t\t\tcompanyContactContact\r\n\t\t\t) {\r\n\t\t\t\tvar policyHolders = [];\r\n\r\n\t\t\t\tvar _authorisedPerson = util.deepClone(aboutCompanyContact);\r\n\t\t\t\t_authorisedPerson.contactType = \"person\";\r\n\t\t\t\t_authorisedPerson.primaryAddress = util.deepClone(\r\n\t\t\t\t\tcompanyContactContact.companyContactResidentialAddress\r\n\t\t\t\t);\r\n\t\t\t\t_authorisedPerson.emailAddress1 =\r\n\t\t\t\t\tcompanyContactContact.emailAddress1;\r\n\t\t\t\t_authorisedPerson.primaryPhone =\r\n\t\t\t\t\tcompanyContactContact.primaryPhone;\r\n\t\t\t\t_authorisedPerson.contactNumber =\r\n\t\t\t\t\tcompanyContactContact.contactNumber;\r\n\t\t\t\t_authorisedPerson = constructPhoneNumberObject(\r\n\t\t\t\t\t_authorisedPerson\r\n\t\t\t\t);\r\n\t\t\t\tdelete _authorisedPerson.address;\r\n\r\n\t\t\t\tvar _contact = util.deepClone(aboutTheCompany);\r\n\t\t\t\t_contact.contactType = \"company\";\r\n\t\t\t\t_contact.primaryPhone = \"work\";\r\n\t\t\t\t_contact.authorisedPersons = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tperson: _authorisedPerson,\r\n\t\t\t\t\t},\r\n\t\t\t\t];\r\n\t\t\t\t_contact.primaryAddress = util.deepClone(\r\n\t\t\t\t\t_contact.companyAddress\r\n\t\t\t\t);\r\n\t\t\t\t_contact.passwordQuestion =\r\n\t\t\t\t\tcompanyContactContact.passwordQuestion;\r\n\t\t\t\t_contact.passwordAnswer = companyContactContact.passwordAnswer;\r\n\t\t\t\tdelete _contact.address;\r\n\r\n\t\t\t\tpolicyHolders.push({\r\n\t\t\t\t\tcontact: _contact,\r\n\t\t\t\t\tmainHolder: true,\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\thomeForm &&\r\n\t\t\t\t\thomeForm.companyContactContact &&\r\n\t\t\t\t\thomeForm.companyContactContact\r\n\t\t\t\t\t\t.companyContactMailingPreference\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\t\t\thomeForm.companyContactContact.companyContactMailingPreference;\r\n\t\t\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t\t.companyContactMailingPreference;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttransformedRequest.policyHolders = policyHolders;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar mainPolicyHolder = homeForm.mainPolicyHolder;\r\n\t\t\tvar mainPolicyHolderContact = homeForm.mainPolicyHolderContact;\r\n\r\n\t\t\tif (mainPolicyHolder && mainPolicyHolderContact) {\r\n\t\t\t\tvar policyHolders = [];\r\n\r\n\t\t\t\t//create main policy holder\r\n\t\t\t\tvar _contact = Object.extend(\r\n\t\t\t\t\tmainPolicyHolder,\r\n\t\t\t\t\tmainPolicyHolderContact\r\n\t\t\t\t);\r\n\t\t\t\t_contact.contactType = \"person\";\r\n\t\t\t\t//_contact.primaryAddress = util.deepClone(_contact.address);\r\n\t\t\t\t_contact.primaryAddress = util.deepClone(\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.primaryAddress\r\n\t\t\t\t);\r\n\t\t\t\tdelete _contact.address;\r\n\r\n\t\t\t\tvar _mainPolicyHolder = {\r\n\t\t\t\t\tcontact: _contact,\r\n\t\t\t\t\tmainHolder: true,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tpolicyHolders.push(_mainPolicyHolder);\r\n\r\n\t\t\t\t//check for addition policy holders\r\n\t\t\t\tif (\r\n\t\t\t\t\thomeForm.additionalPolicyHolders &&\r\n\t\t\t\t\thomeForm.additionalPolicyHolders.policyHolders &&\r\n\t\t\t\t\thomeForm.additionalPolicyHolders.policyHolders.length > 0\r\n\t\t\t\t) {\r\n\t\t\t\t\tvar _additionalPolicyHolders =\r\n\t\t\t\t\t\thomeForm.additionalPolicyHolders.policyHolders;\r\n\r\n\t\t\t\t\t_additionalPolicyHolders.forEach(function (\r\n\t\t\t\t\t\tpolicyHolderItem\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tvar _contact = util.deepClone(policyHolderItem);\r\n\t\t\t\t\t\t_contact.contactType = \"person\";\r\n\t\t\t\t\t\t_contact.primaryAddress = util.deepClone(\r\n\t\t\t\t\t\t\t_contact.address\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tdelete _contact.address;\r\n\t\t\t\t\t\tvar _additionalPolicyHolder = {\r\n\t\t\t\t\t\t\tcontact: _contact,\r\n\t\t\t\t\t\t\tmainHolder: false,\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tpolicyHolders.push(_additionalPolicyHolder);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//update convictions for all and mobile number\r\n\t\t\t\tpolicyHolders.map(function (policyHolderItem) {\r\n\t\t\t\t\tpolicyHolderItem.contact = constructPhoneNumberObject(\r\n\t\t\t\t\t\tpolicyHolderItem.contact\r\n\t\t\t\t\t);\r\n\t\t\t\t\tpolicyHolderItem.contact = constructConvictionHistoryObject(\r\n\t\t\t\t\t\tpolicyHolderItem.contact\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treturn policyHolderItem;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\thomeForm &&\r\n\t\t\t\t\thomeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\thomeForm.mainPolicyHolderContact\r\n\t\t\t\t\t\t.personContactMailingPreference\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\t\t\thomeForm.mainPolicyHolderContact.personContactMailingPreference;\r\n\t\t\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t\t\t.personContactMailingPreference;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttransformedRequest.policyHolders = policyHolders;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/** required for saving/retrieving the policy */\r\n\t\tif (userInput.email) {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t} else if (\r\n\t\t\t\tuserInput.homeForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.email;\r\n\t\t\t\ttransformedRequest.email = userInput.email;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\tif (transformedRequest.policyHolders[0].contact.emailAddress1) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction constructPhoneNumberObject(contactInfo) {\r\n\t\tif (contactInfo) {\r\n\t\t\tif (!contactInfo.primaryPhone) {\r\n\t\t\t\tcontactInfo.primaryPhone = \"work\";\r\n\t\t\t}\r\n\r\n\t\t\tswitch (contactInfo.primaryPhone) {\r\n\t\t\t\tcase \"mobile\":\r\n\t\t\t\t\tcontactInfo.cellPhone = contactInfo.contactNumber;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"home\":\r\n\t\t\t\t\tcontactInfo.homePhone = contactInfo.contactNumber;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"work\":\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tcontactInfo.workPhone = contactInfo.contactNumber;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn contactInfo;\r\n\t}\r\n\r\n\tfunction constructConvictionHistoryObject(contactInfo) {\r\n\t\tif (contactInfo) {\r\n\t\t\tif (contactInfo.tenYears_chargedOrConvictedOffences == \"yes\") {\r\n\t\t\t\tcontactInfo.hasConviction = \"yes\";\r\n\t\t\t} else if (\r\n\t\t\t\tcontactInfo.tenYears_chargedOrConvictedOffences == \"no\"\r\n\t\t\t) {\r\n\t\t\t\tcontactInfo.hasConviction = \"no\";\r\n\t\t\t} else {\r\n\t\t\t\tcontactInfo.hasConviction = \"unknown\";\r\n\t\t\t}\r\n\r\n\t\t\tdelete contactInfo.tenYears_chargedOrConvictedOffences;\r\n\r\n\t\t\tif (\r\n\t\t\t\tcontactInfo &&\r\n\t\t\t\tcontactInfo.tenYears_chargedOrConvictedOffencesDetails &&\r\n\t\t\t\tcontactInfo.tenYears_chargedOrConvictedOffencesDetails.length >\r\n\t\t\t\t\t0\r\n\t\t\t) {\r\n\t\t\t\tcontactInfo.dwellingHistory = [];\r\n\r\n\t\t\t\tcontactInfo.tenYears_chargedOrConvictedOffencesDetails.forEach(\r\n\t\t\t\t\tfunction (incident) {\r\n\t\t\t\t\t\tcontactInfo.dwellingHistory.push({\r\n\t\t\t\t\t\t\tpattern: incident.description,\r\n\t\t\t\t\t\t\teventMonth: incident.month.value,\r\n\t\t\t\t\t\t\tyear: parseInt(incident.year.value),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\tdelete contactInfo.tenYears_chargedOrConvictedOffencesDetails;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn contactInfo;\r\n\t}\r\n\r\n\tfunction updateCordelInfo(transformedRequest) {\r\n\t\tif (quoteOptions.getSelectedQuoteResultForPayment())\r\n\t\t\ttransformedRequest.dwellings[0].cordelInfo = quoteOptions.getSelectedQuoteResultForPayment().cordelInfo;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateConfirmedValue(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tvar confirmYourSumsInsured = userInput.homeForm.confirmYourSumsInsured;\r\n\t\tif (confirmYourSumsInsured) {\r\n\t\t\tif (confirmYourSumsInsured.generalPortableContentsLimit) {\r\n\t\t\t\ttransformedRequest.dwellings[0].generalPortableContents =\r\n\t\t\t\t\tconfirmYourSumsInsured.generalPortableContentsLimit;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar confirmYourOptionalBenefits =\r\n\t\t\tuserInput.homeForm.confirmYourOptionalBenefits;\r\n\t\tif (confirmYourOptionalBenefits) {\r\n\t\t\tif (confirmYourOptionalBenefits.accdLossDmgCoverBuilding) {\r\n\t\t\t\ttransformedRequest.dwellings[0].policyOption.isBuildingAccidentalDamage = true;\r\n\t\t\t}\r\n\t\t\tif (confirmYourOptionalBenefits.accdLossDmgCoverContents) {\r\n\t\t\t\ttransformedRequest.dwellings[0].policyOption.isContentsAccidentalDamage = true;\r\n\t\t\t}\r\n\t\t\tif (confirmYourOptionalBenefits.domesticWrkCompCover) {\r\n\t\t\t\ttransformedRequest.dwellings[0].policyOption.isContentsDomesticWorkerComp = true;\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.dwellings[0].policyOption.isContentsDomesticWorkerComp = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// !imp - transform the quote to use company contact and transforms only if company data is not available\r\n\tfunction updateRequoteCompanyContactForBlank(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tif (!userInput.homeForm) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tvar homeForm = userInput.homeForm;\r\n\r\n\t\t//check if person or company data is available\r\n\t\tif (\r\n\t\t\thomeForm.letsGetStarted &&\r\n\t\t\thomeForm.letsGetStarted.personOrCompany\r\n\t\t) {\r\n\t\t\tvar isCompany = homeForm.letsGetStarted.personOrCompany != \"person\";\r\n\t\t} else {\r\n\t\t\t//dont do transofrmation if personOrCompany is not present\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (isCompany) {\r\n\t\t\t//check if company contact details are available\r\n\t\t\tvar aboutTheCompany = homeForm.aboutTheCompany;\r\n\t\t\tvar aboutCompanyContact = homeForm.aboutCompanyContact;\r\n\t\t\tvar companyContactContact = homeForm.companyContactContact;\r\n\t\t\tif (\r\n\t\t\t\taboutTheCompany &&\r\n\t\t\t\taboutCompanyContact &&\r\n\t\t\t\tcompanyContactContact\r\n\t\t\t) {\r\n\t\t\t\t//if data is available dont do anything\r\n\t\t\t} else {\r\n\t\t\t\t// create default data for company contact\r\n\t\t\t\tvar _contact = transformedRequest.policyHolders[0].contact;\r\n\t\t\t\t_contact.contactType = \"company\";\r\n\t\t\t\t_contact.primaryPhone = \"work\";\r\n\t\t\t\t_contact.authorisedPersons = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tperson: {\r\n\t\t\t\t\t\t\tcontactType: \"person\",\r\n\t\t\t\t\t\t\tprimaryAddress: _contact.primaryAddress,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t];\r\n\r\n\t\t\t\ttransformedRequest.policyHolders[0] = {\r\n\t\t\t\t\tmainHolder: true,\r\n\t\t\t\t\tcontact: _contact,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePropertyDetails(transformedRequest, userInput) {\r\n\t\tif (!userInput.homeForm && !userInput.homeForm.tellUsAboutTheBuilding) {\r\n\t\t\treturn transformedRequest;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!userInput.homeForm.tellUsAboutTheBuilding.isHomeElevated ||\r\n\t\t\tuserInput.homeForm.tellUsAboutTheBuilding.isHomeElevated ==\r\n\t\t\t\t\"notasked\"\r\n\t\t) {\r\n\t\t\ttransformedRequest.dwellings[0].isGroundLevelElevated = \"no\";\r\n\t\t} else {\r\n\t\t\ttransformedRequest.dwellings[0].isGroundLevelElevated = \"yes\";\r\n\t\t}\r\n\r\n\t\t//update cyclone standard based on the yearHomeBuilt\r\n\t\tvar yearBuilt = userInput.homeForm.tellUsAboutTheBuilding.yearHomeBuilt;\r\n\r\n\t\tif (yearBuilt == 19801989) {\r\n\t\t\t//don't change user selection\r\n\t\t} else if (yearBuilt == 19901999) {\r\n\t\t\ttransformedRequest.dwellings[0].isCycloneStandardlyBuilt = true;\r\n\t\t} else if (yearBuilt > 1999 && yearBuilt < 2100) {\r\n\t\t\ttransformedRequest.dwellings[0].isCycloneStandardlyBuilt = true;\r\n\t\t} else {\r\n\t\t\ttransformedRequest.dwellings[0].isCycloneStandardlyBuilt = false;\r\n\t\t}\r\n\t\t// transformedRequest.dwellings[0].isCycloneStandardlyBuilt\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//updates the email\r\n\tfunction updateEmail(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tuserInput.homeForm &&\r\n\t\t\tuserInput.homeForm.tellUsABitMore &&\r\n\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress\r\n\t\t) {\r\n\t\t\ttransformedRequest.email =\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore.yourEmailAddress;\r\n\t\t} else {\r\n\t\t\t//set email from maincontact if not available in tellUsABitMore\r\n\t\t\tif (\r\n\t\t\t\tuserInput.homeForm &&\r\n\t\t\t\tuserInput.homeForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.homeForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.homeForm &&\r\n\t\t\tuserInput.homeForm.tellUsABitMore &&\r\n\t\t\tuserInput.homeForm.tellUsABitMore.promotionalCode\r\n\t\t) {\r\n\t\t\ttransformedRequest.campaignCode =\r\n\t\t\t\tuserInput.homeForm.tellUsABitMore.promotionalCode;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//contains the logic for isInsuredsOverTheAge\r\n\tfunction determineIsInsuredsOverTheAge(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tuserInput.homeForm &&\r\n\t\t\tuserInput.homeForm.tellUsAboutInsured &&\r\n\t\t\tuserInput.homeForm.tellUsAboutInsured.dobOldestInsured\r\n\t\t) {\r\n\t\t\ttransformedRequest.isInsuredsOverTheAge =\r\n\t\t\t\tmoment().diff(\r\n\t\t\t\t\tmoment(\r\n\t\t\t\t\t\tuserInput.homeForm.tellUsAboutInsured.dobOldestInsured,\r\n\t\t\t\t\t\t\"DD/MM/YYYY\"\r\n\t\t\t\t\t),\r\n\t\t\t\t\t\"years\"\r\n\t\t\t\t) >= 50;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyAddress(transformedRequest, userInput) {\r\n\t\tvar postalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\tif (\r\n\t\t\tangular.isDefined(userInput.homeForm.mainPolicyHolderContact) ||\r\n\t\t\tangular.isDefined(userInput.homeForm.companyContact)\r\n\t\t) {\r\n\t\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t} else {\r\n\t\t\t\tvar isPostalOption = true;\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.homeForm.letsGetStarted.personOrCompany ==\r\n\t\t\t\t\t\"person\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tisPostalOption =\r\n\t\t\t\t\t\tuserInput.homeForm.mainPolicyHolderContact\r\n\t\t\t\t\t\t\t.personContactSamePostalAddress;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tisPostalOption = angular.isDefined(\r\n\t\t\t\t\t\tuserInput.homeForm.companyContact\r\n\t\t\t\t\t)\r\n\t\t\t\t\t\t? userInput.homeForm.companyContact\r\n\t\t\t\t\t\t\t\t.companyContactSamePostalAddress\r\n\t\t\t\t\t\t: true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0 && !isPostalOption) {\r\n\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdelete transformedRequest.postalAddress;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateWebBots(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tangular.isDefined(userInput.homeForm.isSyntheticTransaction_Ext) &&\r\n\t\t\tangular.isDefined(userInput.homeForm.syntheticSource_Ext)\r\n\t\t) {\r\n\t\t\ttransformedRequest.IsSyntheticTransaction_Ext =\r\n\t\t\t\tuserInput.homeForm.isSyntheticTransaction_Ext == \"true\"\r\n\t\t\t\t\t? true\r\n\t\t\t\t\t: false;\r\n\t\t\ttransformedRequest.SyntheticSource_Ext =\r\n\t\t\t\tuserInput.homeForm.syntheticSource_Ext;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(userInput) {\r\n\t\tvar transformedRequest = jsonMapper.transform(\r\n\t\t\tuserInput,\r\n\t\t\tstructureQuoteMapping\r\n\t\t);\r\n\t\ttransformedRequest = UpdateAlarmType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateCoverType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePropertyDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateMortgagees(transformedRequest, userInput);\r\n\r\n\t\ttransformedRequest = UpdateRentDefault(transformedRequest, userInput);\r\n\r\n\t\ttransformedRequest = UpdateCycles(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateDwellingHistory(transformedRequest);\r\n\t\ttransformedRequest = updateSumInsured(transformedRequest, userInput);\r\n\r\n\t\ttransformedRequest = updateProductCode(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateBuildingDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updatePersonContactDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\r\n\t\ttransformedRequest = updateCordelInfo(transformedRequest);\r\n\t\ttransformedRequest = updateConfirmedValue(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\r\n\t\ttransformedRequest = updateRequoteCompanyContactForBlank(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\r\n\t\ttransformedRequest = updateEmail(transformedRequest, userInput);\r\n\r\n\t\ttransformedRequest = determineIsInsuredsOverTheAge(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\r\n\t\ttransformedRequest = updatePolicyAddress(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateWebBots(transformedRequest, userInput);\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform,\r\n\t};\r\n}\r\n\nfunction VehicleCleanRequestTransformer(Util, jsonMapper) {\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tdelete intermediateRequest.vehicleForm;\r\n\r\n\t\tvar vehicle = intermediateRequest.vehicles[0];\r\n\t\tvar policyHolders = intermediateRequest.policyHolders;\r\n\t\tdelete vehicle.paymentOptions ;\r\n\t\tdelete vehicle.locationParked ;\r\n\t\tdelete vehicle.primaryCarUse ;\r\n\t\tdelete vehicle.businessActivityType ;\r\n\t\tdelete vehicle.commercialActivityType ;\r\n\t\tdelete vehicle.modifications ;\r\n\t\tdelete vehicle.modificationsOptions ;\r\n\t\tdelete vehicle.modificationsBuilt ;\r\n\t\tdelete vehicle.modificationsBuiltOptions ;\r\n\t\tdelete vehicle.carFinance ;\r\n\t\tdelete vehicle.last12Months ;\r\n\r\n\t\tdelete vehicle.vehicleInfo.averageKM;\r\n\t\tdelete vehicle.vehicleInfo.cylinders;\r\n\t\tdelete vehicle.vehicleInfo.description;\r\n\t\tdelete vehicle.vehicleInfo.engineDescription;\r\n\t\tdelete vehicle.vehicleInfo.goodKM;\r\n\t\tdelete vehicle.vehicleInfo.goodRetailPrice;\r\n\t\tdelete vehicle.vehicleInfo.imageUrls;\r\n\t\tdelete vehicle.vehicleInfo.inductionDescription;\r\n\t\tdelete vehicle.vehicleInfo.kerbWeight;\r\n\t\tdelete vehicle.vehicleInfo.optionalEquipments;\r\n\t\tdelete vehicle.vehicleInfo.power;\r\n\t\tdelete vehicle.vehicleInfo.ratingGrade;\r\n\t\tdelete vehicle.vehicleInfo.standardEquipments;\r\n\t\tdelete vehicle.vehicleInfo.vehicleKey;\r\n\t\tdelete vehicle.vehicleInfo.vin;\r\n\r\n\r\n\t\tif ( vehicle.drivers ) {\r\n\t\t\tvehicle.drivers.forEach(function(policyDriver) {\r\n\t\t\t\tdelete policyDriver.driver._HTMLID;\r\n\t\t\t\tdelete policyDriver.driver.$$hashKey;\r\n\t\t\t\tdelete policyDriver.driver._aggregator;\r\n\r\n\t\t\t\tdelete policyDriver.driver.maxNoClaimBonus;\r\n\t\t\t\tdelete policyDriver.driver.title;\r\n\t\t\t\tdelete policyDriver.driver.yearsHeld;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_licenceRSDC;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_licenceRSDCDetails;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_vehicleAccidentsClaimsDetails;\r\n\t\t\t\tdelete policyDriver.driver.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tdelete policyDriver.driver.tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t* Guidewire creates duplicate records of other drivers criminal histories\r\n\t\t\t\t* if the driverHistory is sent as an empty array :)\r\n\t\t\t\t* For now this has been commented out and moved to PublicIDTransformer as that\r\n\t\t\t\t* is creating an array when going through and transforming public ID's for a list. This behaviour should be changed for empty lists.\r\n\t\t\t\t* After changing that, this can be commented back in and removed from publicIDTransformer.\r\n\t\t\t\tif ( policyDriver.driver.driverHistory\r\n\t\t\t\t\t&& Array.isArray(policyDriver.driver.driverHistory)\r\n\t\t\t\t\t&& policyDriver.driver.driverHistory.length == 0 )\r\n\t\t\t\t\tdelete policyDriver.driver.driverHistory;\r\n\t\t\t\t*/\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif ( policyHolders ) {\r\n\t\t\tpolicyHolders.forEach(function(ph){\t\t\t\r\n\t\t\tdelete ph.contact._HTMLID;\r\n\t\t\tdelete ph.contact.$$hashKey;\r\n\t\t\tdelete ph.contact._aggregator;\r\n\r\n\t\t\tdelete ph.contact.anyInfringements;\r\n\t\t\tdelete ph.contact.anyLostLicences;\r\n\t\t\tdelete ph.contact.mainPolicyHolder;\r\n\t\t\tdelete ph.contact.isMainDriverMainPolicyHolder;\r\n\r\n\t\t\tdelete ph.contact.policyContact;\r\n\t\t\tdelete ph.contact.phoneNumber;\r\n\t\t\tdelete ph.contact.postalOption;\r\n\t\t\tdelete ph.contact.primaryPhoneNumber;\r\n\t\t\tdelete ph.contact.title;\r\n\t\t\tdelete ph.contact.address;\r\n\r\n\t\t\tdelete ph.contact.fourYears_chargedOrConvictedOffences;\r\n\t\t\tdelete ph.contact.fourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\tdelete ph.contact.fourYears_licenceRSDC;\r\n\t\t\tdelete ph.contact.fourYears_licenceRSDCDetails;\r\n\t\t\tdelete ph.contact.fourYears_vehicleAccidentsClaims;\r\n\t\t\tdelete ph.contact.fourYears_vehicleAccidentsClaimsDetails;\r\n\t\t\tdelete ph.contact.tenYears_chargedOrConvictedOffences;\r\n\t\t\tdelete ph.contact.tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_chargedOrConvictedOffences;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_licenceRSDC;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_licenceRSDCDetails;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_vehicleAccidentsClaims;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderFourYears_vehicleAccidentsClaimsDetails;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderTenYears_chargedOrConvictedOffences;\r\n\t\t\tdelete ph.contact.additionalPolicyHolderTenYears_chargedOrConvictedOffencesDetails;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\r\n\r\n\t\tif ( ! intermediateRequest.email )\r\n\t\t\tdelete intermediateRequest.email ;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction VehicleCoverTypeTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(intermediateRequest, coverTypeDescriptor) {\r\n\r\n\t\tintermediateRequest.vehicles[0].coverType = coverTypeDescriptor;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction VehicleDefaultValueRequestTransformer(\r\n\tUtil,\r\n\tjsonMapper,\r\n\tuserInputRepository,\r\n\tquoteOptions\r\n) {\r\n\tfunction formatDateAndTimeTheGuidewireWay(date, time) {\r\n\t\tvar format = '{0} at {1} AEST';\r\n\t\tvar timeFormatted = '4:00PM';\r\n\t\tif (time)\r\n\t\t\ttimeFormatted = moment()\r\n\t\t\t\t.tz('Australia/Sydney')\r\n\t\t\t\t.format('h:mma');\r\n\t\treturn Util.stringFormat(\r\n\t\t\tformat,\r\n\t\t\tmoment()\r\n\t\t\t\t.tz('Australia/Sydney')\r\n\t\t\t\t.format('Do MMM YYYY'),\r\n\t\t\ttimeFormatted\r\n\t\t);\r\n\t}\r\n\r\n\tvar staticValuesMapping = {\r\n\t\tquoteType: 'Full',\r\n\t\tproductCode: 'QPMMotorVehicle',\r\n\t\t// \"anyInfringementsQuestion\": \"no\",\r\n\t\t// \"anyClaimsQuestion\": \"no\",\r\n\t\t// \"anyLostLicencesQuestion\": \"no\",\r\n\t\t// \"anyConvictionsQuestion\": \"no\",\r\n\t\t'vehicles.0.primaryUsage': 'private',\r\n\t\t'vehicles.0.afterMarketModifications': false,\r\n\t\t'vehicles.0.isEligibleforSDExemption': false,\r\n\t\t'vehicles.0.financeType': 'none',\r\n\t\t'vehicles.0.sumInsuredType': 'market',\r\n\t\t'vehicles.0.garageType': 'garage',\r\n\t\t'vehicles.0.unrepairedDamage': 'none',\r\n\t\t'vehicles.0.colour': 'red',\r\n\t\t'vehicles.0.coverType': 'comprehensive',\r\n\t\t'vehicles.0.recentPurchase': false,\r\n\t\t'vehicles.0.otherDriverHasProLicense': false,\r\n\t\t'vehicles.0.youngestDriverGender': 'male',\r\n\t\t'vehicles.0.otherDriverUsageTimes': '0',\r\n\t\t'vehicles.0.sumInsuredAmount': '1000',\r\n\t\t'vehicles.0.garageAddress.addressType': 'postal',\r\n\t\t'vehicles.0.drivers.*.driver.licenceType': 'full',\r\n\t\t'vehicles.0.drivers.*.driver.yearsLicenced': '6',\r\n\t\t'vehicles.0.drivers.*.driver.hasConviction': false,\r\n\t\t'vehicles.0.drivers.*.driver.hasClaim': false,\r\n\t\t'vehicles.0.drivers.*.driver.hasInfringement': false,\r\n\t\t'vehicles.0.drivers.*.driver.hasLostLicence': false,\r\n\t\t'vehicles.0.drivers.*.driver.zeroDemerits': true,\r\n\t\t'vehicles.0.drivers.*.driver.previousInsurer': 'none',\r\n\t\t'vehicles.0.drivers.*.driver.noClaimBonus': 'rating_1',\r\n\t\t'vehicles.0.drivers.*.driver.maxNoClaimBonusLength': '2',\r\n\t\t// \"vehicles.0.drivers.*.driver.calculatedExcess\": 0,\r\n\t\t'vehicles.0.drivers.*.driver.person.contactType': 'person',\r\n\t\t'vehicles.0.drivers.*.driver.person.gender': 'male',\r\n\t\t'vehicles.0.drivers.*.driver.person.firstName': 'An@n',\r\n\t\t'vehicles.0.drivers.*.driver.person.lastName': 'An@nym@us',\r\n\t\t'vehicles.0.drivers.*.driver.person.isJustInsured': false,\r\n\t\t'vehicles.0.drivers.*.driver.person.dateOfBirth': '01/06/2000',\r\n\t\temail: 'a@a.com',\r\n\t\t'vehicles.0.availableCoverTypes': [\r\n\t\t\t'comprehensive',\r\n\t\t\t'comprehensive_nominated',\r\n\t\t\t'comprehensive_preferred',\r\n\t\t\t'third_party_fire_theft',\r\n\t\t\t'third_party'\r\n\t\t],\r\n\t\tavailableSumInsuredTypes: ['market', 'agreed'],\r\n\t\t'vehicles.0.coverageOptions': [\r\n\t\t\t{\r\n\t\t\t\tname: 'QPMMotVehHireCar',\r\n\t\t\t\tselected: false,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'QPMMotVehWindscreen',\r\n\t\t\t\tselected: false,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'QPMMotVehNCB',\r\n\t\t\t\tselected: false,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t],\r\n\t\t'vehicles.0.excess.standardVehicleExcess': 650,\r\n\t\t'vehicles.0.excess.ageExcessTier1': 1000,\r\n\t\t'vehicles.0.excess.ageExcessTier2': 750,\r\n\t\t'vehicles.0.excess.undeclaredDriverTier2': 500,\r\n\t\t'vehicles.0.excess.inexperiencedDriver': 750,\r\n\r\n\t\t'policyHolders.0.mainHolder': true,\r\n\t\t'policyHolders.0.contact.isJustInsured': false,\r\n\t\t'policyHolders.0.contact.contactType': 'person',\r\n\t\t'policyHolders.0.contact.dateOfBirth': '01/06/2000',\r\n\t\t// full quote transformation :\r\n\t\tstatus: 'Draft',\r\n\t\tdocumentDeliveryMethod: 'email',\r\n\t\tdisplayStatus: 'Draft',\r\n\t\tperiodStartDateTimeAEDT: formatDateAndTimeTheGuidewireWay(\r\n\t\t\tmoment(),\r\n\t\t\tmoment()\r\n\t\t),\r\n\t\tperiodEndDateTimeAEDT: formatDateAndTimeTheGuidewireWay(\r\n\t\t\tmoment().add(1, 'years')\r\n\t\t),\r\n\t\tchannel: 'portal',\r\n\t\t'vehicles.0.drivers.*.driverUsage': 'other'\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar staticValuesMappingNew = ApplyDefaultExcess(userInput);\r\n\t\tvar transformedRequest = jsonMapper.setDefault(\r\n\t\t\tuserInput,\r\n\t\t\tstaticValuesMappingNew\r\n\t\t);\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction ApplyDefaultExcess(userInput) {\r\n\t\tvar staticValuesMappingNew = staticValuesMapping;\r\n\t\tvar excessValue = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\tuserInput.policyAddress.state\r\n\t\t);\r\n\t\tif (excessValue != null) {\r\n\t\t\tvar tempObj = {\r\n\t\t\t\t'vehicles.0.excess.voluntaryVehicleExcess': excessValue\r\n\t\t\t};\r\n\t\t\tstaticValuesMappingNew = Object.extend(\r\n\t\t\t\tstaticValuesMapping,\r\n\t\t\t\ttempObj\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn staticValuesMappingNew;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n\n\r\nfunction VehicleFormatConverterTransformer(Util, jsonMapper) {\r\n\r\n\t\r\n\tfunction convertDateAndTimeTheGuidewireWay(dateTime) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\treturn Util.stringFormat(format, dateTime.format('Do MMM YYYY') , dateTime.format('h:mma')) ;\r\n\t}\r\n\r\n\tfunction convertDate(dateString) {\r\n\t\tvar date = moment(dateString, 'DD/MM/YYYY') ;\r\n\t\tvar formattedDate = date.format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\r\n\t\t// throw 'date format exception formatting ' + dateString ; \r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertDateToGWTimeZone(dateString) {\r\n\t\tvar formattedDate = moment(dateString,'DDMMYYYY').tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertGender(gender) {\r\n\t\tvar gc = {\r\n\t\t\tmale : 'M',\r\n\t\t\tfemale : 'F',\r\n\t\t\tintersex : 'I',\r\n\t\t};\r\n\r\n\t\treturn gc[gender] ;\r\n\t}\r\n\r\n\tfunction convertFalsyToUnknown(value) {\r\n\t\tif ( value === null || value === undefined )\r\n\t\t\treturn 'unknown';\r\n\r\n\t\treturn convertBooleanToYesNo(value) ;\r\n\t}\r\n\r\n\tfunction convertBooleanToYesNo(value) {\r\n\t\treturn value ? 'yes' : 'no' ;\r\n\t}\r\n\r\n\tfunction addAUToStateValue(value) {\r\n\t\tif ( value )\r\n\t\t\treturn 'AU_' + value ; \r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar convertValueMapping = {\r\n\t\tperiodStartDate: convertDateToGWTimeZone,\r\n\t\t'policyHolders.*.contact.gender' : convertGender,\r\n\t\t'policyHolders.*.contact.hasClaim' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.hasConviction' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyLostLicences' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyInfringements' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.dateOfBirth' : convertDate,\r\n\t\t\r\n\t\t'vehicles.0.otherDriverHasProLicense' : convertBooleanToYesNo,\r\n\t\t'vehicles.0.youngestDriverGender' : convertGender,\r\n\t\t'vehicles.0.youngestDriverDOB' : convertDate,\r\n\t\t\"vehicles.0.registrationState\" : addAUToStateValue,\r\n\t\t'vehicles.0.drivers.*.driver.person.dateOfBirth' : convertDate,\r\n\t\t'vehicles.0.drivers.*.driver.person.gender' : convertGender,\r\n\t\t'vehicles.0.drivers.*.driver.person.hasClaim' : convertBooleanToYesNo,\r\n\t\t'vehicles.0.drivers.*.driver.person.hasConviction' : convertBooleanToYesNo,\r\n\t\t\"vehicles.0.drivers.*.driver.zeroDemerits\": convertBooleanToYesNo,\r\n\r\n\t\t\"vehicles.0.drivers.*.driver.hasConviction\": convertFalsyToUnknown,\r\n\t\t\"vehicles.0.drivers.*.driver.hasClaim\": convertFalsyToUnknown,\r\n\t\t\"vehicles.0.drivers.*.driver.hasInfringement\": convertFalsyToUnknown,\r\n\t\t\"vehicles.0.drivers.*.driver.hasLostLicence\": convertFalsyToUnknown,\r\n\t};\r\n\r\n\tvar companyConvertValueMapping = {\r\n\t\t/** company contact details only */\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.gender' : convertGender,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.hasClaim' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.hasConviction' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.anyLostLicences' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.anyInfringements' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.dateOfBirth' : convertDate,\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.convert(intermediateRequest, convertValueMapping) ;\r\n\t\tif ( transformedRequest.policyHolders[0]\r\n\t\t\t&& transformedRequest.policyHolders[0].contact\r\n\t\t\t&& transformedRequest.policyHolders[0].contact.authorisedPersons\r\n\t\t\t)\r\n\t\t\ttransformedRequest = jsonMapper.convert(intermediateRequest, companyConvertValueMapping) ;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction VehiclePolicyHolderHandler(Util, publicIDTransformer) {\r\n\r\n\tfunction handle(quoteRequest, userInput) {\r\n\r\n\t\tvar mainPolicyholder = quoteRequest.policyHolders.filter(function (item) {\r\n\t\t\treturn item['mainHolder'];\r\n\t\t})[0];\r\n\r\n\t\tvar mainDriver = quoteRequest.vehicles[0].drivers.filter(function (item) {\r\n\t\t\treturn item['driverUsage'] == 'main';\r\n\t\t})[0];\r\n\r\n\t\tif ((!userInput.vehicleForm.mainPolicyHolder ||\r\n\t\t\t\t(userInput.vehicleForm.mainPolicyHolder && userInput.vehicleForm.mainPolicyHolder.isMainDriverMainPolicyHolder)) && userInput.vehicleForm.getStarted.personOrCompany != \"company\") {\r\n\t\t\tmainPolicyholder.contact.publicID = mainDriver.driver.person.publicID;\r\n\t\t} else if (userInput.vehicleForm.mainPolicyHolder != undefined && userInput.vehicleForm.mainPolicyHolder.isMainDriverMainPolicyHolder != undefined &&\r\n\t\t\t!userInput.vehicleForm.mainPolicyHolder.isMainDriverMainPolicyHolder &&\r\n\t\t\tmainPolicyholder.contact.publicID == mainDriver.driver.person.publicID) {\r\n\t\t\tquoteRequest = publicIDTransformer.transform(quoteRequest);\r\n\t\t\tdelete quoteRequest.secret;\r\n\t\t\tdelete quoteRequest.quoteID;\r\n\t\t}\r\n\r\n\t\tif (mainPolicyholder.contact.publicID == mainDriver.driver.person.publicID) {\r\n\t\t\tmainDriver.driver.person.passwordQuestion = mainPolicyholder.contact.passwordQuestion;\r\n\t\t\tmainDriver.driver.person.passwordAnswer = mainPolicyholder.contact.passwordAnswer;\r\n\t\t\tmainDriver.driver.person.primaryPhone = mainPolicyholder.contact.primaryPhone;\r\n\r\n\t\t\tswitch (mainPolicyholder.contact.primaryPhone) {\r\n\t\t\t\tcase 'mobile':\r\n\t\t\t\t\tmainDriver.driver.person.cellPhone = mainPolicyholder.contact.cellPhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'home':\r\n\t\t\t\t\tmainDriver.driver.person.homePhone = mainPolicyholder.contact.homePhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'work':\r\n\t\t\t\t\tmainDriver.driver.person.workPhone = mainPolicyholder.contact.workPhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tdelete mainPolicyholder.contact.drivingHistory;\r\n\t\t}\r\n\r\n\t\treturn quoteRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\thandle: handle\r\n\t}\r\n};\r\n\n'use strict';\r\n\r\nfunction VehiclePublicIDTransformer(\r\n\tUtil,\r\n\tjsonMapper,\r\n\tserviceResponseRepository,\r\n\taggregatedRemoveService\r\n) {\r\n\tvar currentResponse = null;\r\n\tvar driverUniqueIdCtr = 1;\r\n\tvar historyUniqueIdCtr = 1;\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat(\r\n\t\t\t'portal:{0}-{1}',\r\n\t\t\tmoduleName,\r\n\t\t\tUtil.generateRandomString(15)\r\n\t\t);\r\n\t}\r\n\r\n\tfunction hasValidGWPublicID(publicID) {\r\n\t\tif (publicID && publicID.indexOf('portal:') === -1) return true;\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction hash(value) {\r\n\t\treturn md5(value);\r\n\t}\r\n\r\n\tfunction fetchFromPreviousResponse(path) {\r\n\t\tif (currentResponse)\r\n\t\t\treturn Util.findHierarchyStringInObject(currentResponse, path, '.');\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertPublicID(path, moduleName) {\r\n\t\tif (currentResponse) {\r\n\t\t\tvar lastPublicID = fetchFromPreviousResponse(path);\r\n\t\t\tif (lastPublicID) return lastPublicID;\r\n\t\t}\r\n\r\n\t\treturn forgePublicId(moduleName);\r\n\t}\r\n\r\n\tvar moduleNameMapping = {\r\n\t\tpolicyHolders: 'PolicyHolder[]',\r\n\t\tpolicyAddress: 'Address',\r\n\t\tvehicles: 'QPMVehicle',\r\n\t\tdriver: 'QPMVehicleDriver',\r\n\t\tpolicyDriver: 'QPMPolicyDriver',\r\n\t\tperson: 'person',\r\n\t\tdriverHistory: 'QPMDriverHistory',\r\n\t\tdrivingHistory: 'QPMDrivingHistory',\r\n\t\tpattern: 'qbePattern'\r\n\t};\r\n\r\n\tvar publicIDTransformationMapping = {\r\n\t\t'policyAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'vehicles.0.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.vehicles);\r\n\t\t},\r\n\t\t'vehicles.0.garageAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driver);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.uniqueID': function() {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyDriver);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.person.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.person.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.driverHistory.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driverHistory);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.driverHistory.*.uniqueID': function() {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t'policyHolders.*.contact.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.drivingHistory);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t}\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDTransformationMapping = {\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.primaryAddress.publicID': function() {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t}\r\n\t};\r\n\r\n\tvar publicIDConversionMapping = {\r\n\t\t'policyAddress.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.publicID',\r\n\t\t\t\tmoduleNameMapping.vehicles\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.uniqueID': function() {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*.driver.driverHistory.*.uniqueID': function() {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t'vehicles.0.garageAddress.publicID': function(val) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.garageAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.publicID',\r\n\t\t\t\tmoduleNameMapping.policyHolders\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' + mappedValueStarIndices[0] + '.publicID',\r\n\t\t\t\tmoduleNameMapping.driver\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].driver.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.driver.publicID',\r\n\t\t\t\tmoduleNameMapping.policyDriver\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].driver.person.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.driver.person.publicID',\r\n\t\t\t\tmoduleNameMapping.person\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].driver.driverHistory.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.driver.driverHistory.' +\r\n\t\t\t\t\tmappedValueStarIndices[1] +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.driverHistory\r\n\t\t\t);\r\n\t\t},\r\n\t\t'vehicles.0.drivers.*[driverUsage].driver.person.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'driver.person.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolder.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.drivingHistory.' +\r\n\t\t\t\t\tmappedValueStarIndices[1] +\r\n\t\t\t\t\t'.publicID',\r\n\t\t\t\tmoduleNameMapping.drivingHistory\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDConversionMapping = {\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.authorisedPersons.0.person.publicID',\r\n\t\t\t\tmoduleNameMapping.person\r\n\t\t\t);\r\n\t\t},\r\n\t\t'policyHolders.*.contact.authorisedPersons.0.person.primaryAddress.publicID': function(\r\n\t\t\tval,\r\n\t\t\tmappedValueStarIndices\r\n\t\t) {\r\n\t\t\treturn convertPublicID(\r\n\t\t\t\t'policyHolders.' +\r\n\t\t\t\t\tmappedValueStarIndices[0] +\r\n\t\t\t\t\t'.contact.authorisedPersons.0.person.primaryAddress.publicID',\r\n\t\t\t\tmoduleNameMapping.policyAddress\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tfunction removeDeletedAdditionalDrivers(transformedRequest) {\r\n\t\tvar removedDrivers = aggregatedRemoveService.getList()\r\n\t\t\t? aggregatedRemoveService.getList()['driver']\r\n\t\t\t: null;\r\n\t\tvar savedDrivers = fetchFromPreviousResponse('drivers.0.drivers');\r\n\t\tif (savedDrivers && removedDrivers) {\r\n\t\t\tangular.forEach(removedDrivers, function(removedDriver) {\r\n\t\t\t\tvar matchingDriver = savedDrivers.filter(function(driver) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\tdriver.driver.person.firstName ==\r\n\t\t\t\t\t\t\tremovedDriver.person.firstName &&\r\n\t\t\t\t\t\tdriver.driver.person.lastName ==\r\n\t\t\t\t\t\t\tremovedDriver.person.lastName\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t\tmatchingDriver = matchingDriver[0] || null;\r\n\t\t\t\tif (matchingDriver) {\r\n\t\t\t\t\tmatchingDriver.markedForDelete = true;\r\n\t\t\t\t\ttransformedRequest.drivers[0].drivers.push(matchingDriver);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\taggregatedRemoveService.clear('driver');\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeDeletedDriverHistoryArrays(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.vehicles[0].drivers;\r\n\t\tvar fieldName = 'driverUsage';\r\n\t\tangular.forEach(drivers, function(driver, index) {\r\n\t\t\tvar fieldValue = driver[fieldName];\r\n\t\t\tvar locator = '[' + fieldName + '=' + fieldValue + ']';\r\n\t\t\tvar savedHistories = fetchFromPreviousResponse(\r\n\t\t\t\t'vehicles.0.drivers.' +\r\n\t\t\t\t\tindex +\r\n\t\t\t\t\tlocator +\r\n\t\t\t\t\t'.driver.driverHistory'\r\n\t\t\t);\r\n\t\t\tif (savedHistories && savedHistories.length > 0) {\r\n\t\t\t\tvar driverHistories = driver.driver.driverHistory;\r\n\t\t\t\tangular.forEach(savedHistories, function(savedHistory) {\r\n\t\t\t\t\tvar matchingInput = driverHistories.filter(function(\r\n\t\t\t\t\t\thistory\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn history.publicID == savedHistory.publicID;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!matchingInput || matchingInput.length == 0) {\r\n\t\t\t\t\t\tsavedHistory.markedForDelete = true;\r\n\t\t\t\t\t\tdriverHistories.push(savedHistory);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeEmptyDriverHistoryArrays(transformedRequest) {\r\n\t\tvar vehicle = transformedRequest.vehicles[0];\r\n\t\tif (vehicle && vehicle.drivers) {\r\n\t\t\tvehicle.drivers.forEach(function(policyDriver) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tpolicyDriver.driver &&\r\n\t\t\t\t\tpolicyDriver.driver.driverHistory &&\r\n\t\t\t\t\tArray.isArray(policyDriver.driver.driverHistory) &&\r\n\t\t\t\t\tpolicyDriver.driver.driverHistory.length == 0\r\n\t\t\t\t)\r\n\t\t\t\t\tdelete policyDriver.driver.driverHistory;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//dd-973 - requiring a sequence number for driver infringement\r\n\tfunction addUniqueHistoryID(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.vehicles[0].drivers;\r\n\r\n\t\tangular.forEach(drivers, function(driver, index) {\r\n\t\t\thistoryUniqueIdCtr = 1;\r\n\t\t\tvar driverHistory = driver.driver.driverHistory;\r\n\t\t\tif (driverHistory) {\r\n\t\t\t\tangular.forEach(driverHistory, function(driverHistory, index) {\r\n\t\t\t\t\tdriverHistory.uniqueID = historyUniqueIdCtr;\r\n\t\t\t\t\thistoryUniqueIdCtr++;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// if (driver.driverUsage !== 'main') {\r\n\t\t\t// \tif (driver.driver.person && driver.driver.person.primaryAddress) {\r\n\t\t\t// \t\tdelete driver.driver.person.primaryAddress;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, response) {\r\n\t\tcurrentResponse = response;\r\n\t\tdriverUniqueIdCtr = 1;\r\n\t\tvar transformedRequest = intermediateRequest;\r\n\r\n\t\tif (\r\n\t\t\ttransformedRequest.policyHolders[0] &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact.authorisedPersons\r\n\t\t) {\r\n\t\t\tpublicIDConversionMapping = Object.extend(\r\n\t\t\t\tpublicIDConversionMapping,\r\n\t\t\t\tauthorisedPersonsPublicIDConversionMapping\r\n\t\t\t);\r\n\t\t\tpublicIDTransformationMapping = Object.extend(\r\n\t\t\t\tpublicIDTransformationMapping,\r\n\t\t\t\tauthorisedPersonsPublicIDTransformationMapping\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (!currentResponse)\r\n\t\t\ttransformedRequest = jsonMapper.transform(\r\n\t\t\t\tintermediateRequest,\r\n\t\t\t\tpublicIDTransformationMapping\r\n\t\t\t);\r\n\t\telse {\r\n\t\t\ttransformedRequest = jsonMapper.convert(\r\n\t\t\t\tintermediateRequest,\r\n\t\t\t\tpublicIDConversionMapping\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\ttransformedRequest = addUniqueHistoryID(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedAdditionalDrivers(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedDriverHistoryArrays(\r\n\t\t\ttransformedRequest\r\n\t\t);\r\n\t\ttransformedRequest = removeEmptyDriverHistoryArrays(transformedRequest);\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n\nfunction VehicleQuoteResultModel(quoteResultResponse) {\r\n\tthis.isCoverAvailable = quoteResultResponse.quoteResult.totalPremium !== undefined ;\r\n\tthis.coverType = quoteResultResponse.vehicles[0].coverType;\r\n\tthis.quoteResult = quoteResultResponse.quoteResult;\r\n\tthis.paymentPlan = quoteResultResponse.paymentPlan;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.totalFSL = quoteResultResponse.quoteResult.totalFSL ;\r\n\tthis.totalGST = quoteResultResponse.quoteResult.totalGST ;\r\n\tthis.totalStampDuty = quoteResultResponse.quoteResult.totalStampDuty ;\r\n\tthis.premiumAfterDiscount = quoteResultResponse.quoteResult.premiumAfterDiscount ;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.paymentFrequency = quoteResultResponse.paymentPlan ? quoteResultResponse.paymentPlan.paymentFrequency : null ;\r\n\tthis.excess = quoteResultResponse.vehicles[0].excess ;\r\n\tthis.availableSumInsuredTypes = quoteResultResponse.vehicles[0].availableSumInsuredTypes;\r\n\tthis.vehicleValue = {\r\n\t\tupper: quoteResultResponse.vehicles[0].agreedValueUpper,\r\n\t\tlower: quoteResultResponse.vehicles[0].agreedValueLower\r\n\t};\r\n\tthis.coverageOptions = quoteResultResponse.vehicles[0].coverageOptions ;\r\n\tthis.response = quoteResultResponse ;\r\n}\r\n\nfunction VehicleRetrieveSavedQuoteResponseTransformer($filter, jsonMapper, Util) {\r\n // transform functions\r\n var transformers = {\r\n camelcase: function(value) {\r\n if(value) {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n }, \r\n date: function(dateString) {\r\n var date = moment(dateString, 'YYYY-MM-DD') ;\r\n return date.format('DD/MM/YYYY') ;\r\n },\r\n today : function() {\r\n return moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY') ;\r\n },\r\n convertGender: function(gender) {\r\n var gc = {\r\n M : 'male',\r\n F : 'female',\r\n I : 'intersex',\r\n };\r\n return gc[gender] ;\r\n },\r\n yesNo: function(value) {\r\n return value == 'yes' ? true : false;\r\n },\r\n defaultNull: function(value) {\r\n return null;\r\n },\r\n checkbox: function(value) {\r\n },\r\n state: function(state) {\r\n if ( state )\r\n return state.replace('AU_', '');\r\n },\r\n coverType: function(coverType) {\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n return 'third_party';\r\n }\r\n return coverType;\r\n },\r\n purchaseMonthFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n var month = monthYear.split('-')[1];\r\n return month;\r\n }else{\r\n return '';\r\n }\r\n\r\n },\r\n purchaseYearFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n var year = monthYear.split('-')[0];\r\n return year;\r\n }else{\r\n return '';\r\n }\r\n },\r\n thirdPartyPref: function(coverType) {\r\n if(coverType === 'comprehensive') {\r\n return null;\r\n }\r\n\r\n if(coverType==='third_party'){\r\n return 'standard';\r\n }\r\n return coverType;\r\n },\r\n financeWith: function(financeWith) {\r\n\r\n if(financeWith) {\r\n var carFinance = {};\r\n\r\n carFinance.label = financeWith.name;\r\n carFinance.value = financeWith.publicID;\r\n\r\n return carFinance;\r\n }\r\n },\r\n yearsHeld: function(years) {\r\n var yearsHeld;\r\n\r\n switch (years) {\r\n case '7':\r\n yearsHeld = 'lessThan_1';\r\n break;\r\n case '6':\r\n yearsHeld = 'greaterThan_5';\r\n break;\r\n default:\r\n yearsHeld = years;\r\n }\r\n\r\n return yearsHeld;\r\n },\r\n hasModifications: function(modifications) {\r\n return modifications.length > 1 ? true : false;\r\n },\r\n };\r\n function transformPerson(person) {\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date\r\n };\r\n var transformedPerson = jsonMapper.convert(jsonMapper.transform(person, transformMapping), convertMapping);\r\n return transformedPerson.returnObject;\r\n }\r\n\r\n function transformDriver(driver) {\r\n\r\n // transformPersonalHistory(driver.driverHistory);\r\n\r\n var transformMapping = {\r\n 'returnObject.yearsHeld': '=_input.yearsLicenced',\r\n 'returnObject.licenceType': '=_input.licenceType',\r\n 'returnObject.noClaimBonus': '=_input.noClaimBonus',\r\n 'returnObject.maxNoClaimBonusLength': '=_input.maxNoClaimBonusLength',\r\n 'returnObject.previousInsurer': '=_input.previousInsurer',\r\n 'returnObject.NSWDemeritPoints': '=_input.zeroDemerits',\r\n 'returnObject.fourYears_chargedOrConvictedOffences': '=_input.hasInfringement',\r\n // 'returnObject.fourYears_chargedOrConvictedOffencesDetails': '=_input.driverHistory',\r\n 'returnObject.fourYears_licenceRSDC': '=_input.hasLostLicence',\r\n // 'returnObject.fourYears_licenceRSDCDetails': '=_input.driverHistory',\r\n 'returnObject.fourYears_vehicleAccidentsClaims': '=_input.hasClaim',\r\n // 'returnObject.fourYears_vehicleAccidentsClaimsDetails': '=_input.driverHistory',\r\n 'returnObject.tenYears_chargedOrConvictedOffences': '=_input.hasConviction',\r\n // 'returnObject.tenYears_chargedOrConvictedOffencesDetails': '=_input.driverHistory',\r\n },\r\n convertMapping = {\r\n 'returnObject.yearsHeld': transformers.yearsHeld,\r\n 'returnObject.NSWDemeritPoints': transformers.yesNo,\r\n\r\n 'returnObject.fourYears_chargedOrConvictedOffences': transformers.defaultNull,\r\n // 'returnObject.fourYears_chargedOrConvictedOffencesDetails': transformers.history,\r\n\r\n 'returnObject.fourYears_licenceRSDC': transformers.defaultNull,\r\n // 'returnObject.fourYears_licenceRSDCDetails': transformers.history,\r\n\r\n 'returnObject.fourYears_vehicleAccidentsClaims': transformers.defaultNull,\r\n // 'returnObject.fourYears_vehicleAccidentsClaimsDetails': transformers.history,\r\n\r\n 'returnObject.tenYears_chargedOrConvictedOffences': transformers.defaultNull,\r\n // 'returnObject.tenYears_chargedOrConvictedOffencesDetails': transformers.history\r\n };\r\n\r\n var transformedDriver = jsonMapper.convert(jsonMapper.transform(driver, transformMapping), convertMapping);\r\n var returnObject = transformedDriver.returnObject;\r\n if(driver.person) {\r\n returnObject.person = transformPerson(driver.person);\r\n }\r\n\r\n // extract driver history\r\n returnObject.fourYears_chargedOrConvictedOffencesDetails = [];\r\n returnObject.fourYears_vehicleAccidentsClaimsDetails = [];\r\n returnObject.tenYears_chargedOrConvictedOffencesDetails = [];\r\n returnObject.fourYears_licenceRSDCDetails = [];\r\n\r\n if (!!driver.driverHistory) {\r\n driver.driverHistory.forEach(function(record) {\r\n var matchedPattern = {};\r\n\r\n switch (record.pattern.filter1) {\r\n case 'infringement_demerit':\r\n // case 'infringement_licence':\r\n returnObject.fourYears_chargedOrConvictedOffencesDetails.push(\r\n extractHistory(globals.fourYears_offences.options, record)\r\n );\r\n break;\r\n case 'infringement_licence':\r\n returnObject.fourYears_licenceRSDCDetails.push(\r\n extractHistory(globals.incidents.options, record)\r\n );\r\n break;\r\n case 'claim' :\r\n returnObject.fourYears_vehicleAccidentsClaimsDetails.push(\r\n extractHistory(globals.accidents.options, record));\r\n break;\r\n case 'conviction' :\r\n returnObject.tenYears_chargedOrConvictedOffencesDetails.push(\r\n extractHistory(globals.tenYears_offences.options, record)\r\n );\r\n break;\r\n\r\n }\r\n });\r\n }\r\n\r\n returnObject.fourYears_chargedOrConvictedOffences = returnObject.fourYears_chargedOrConvictedOffencesDetails.length > 0 ;\r\n returnObject.fourYears_vehicleAccidentsClaims = returnObject.fourYears_vehicleAccidentsClaimsDetails.length > 0 ;\r\n returnObject.tenYears_chargedOrConvictedOffences = returnObject.tenYears_chargedOrConvictedOffencesDetails.length > 0 ;\r\n returnObject.fourYears_licenceRSDC = returnObject.fourYears_licenceRSDCDetails.length > 0 ;\r\n\r\n return returnObject;\r\n }\r\n\r\n function extractHistory(collection, record) {\r\n var matchedPattern = {};\r\n var month = {};\r\n var year = {};\r\n\r\n matchedPattern = collection.find(function(opt) {\r\n return opt.publicID == record.pattern.publicID;\r\n });\r\n\r\n month.label = month.value = moment(record.month, 'MM').format('MMMM') ; // Util.capitalize(record.month.toString());\r\n year.label = year.value = Util.capitalize(record.year.toString());\r\n\r\n record.description = matchedPattern;\r\n record.month = month;\r\n record.year = year;\r\n\r\n delete record.pattern;\r\n\r\n return record;\r\n }\r\n // WIP deconstruction of driver history to separate them into the different tables\r\n // function transformPersonalHistory(history) {\r\n // console.info('history', history);\r\n // console.info('labels', labelService.getOptionsFor('fourYears_chargedOrConvictedOffencesDetails'));\r\n // }\r\n\r\n function transformPolicyHolder(holder) {\r\n\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth',\r\n 'returnObject.fourYears_chargedOrConvictedOffences': '=_input.hasInfringement',\r\n 'returnObject.fourYears_licenceRSDC': '=_input.hasLostLicence',\r\n 'returnObject.fourYears_vehicleAccidentsClaims': '=_input.hasClaim',\r\n 'returnObject.tenYears_chargedOrConvictedOffences': '=_input.hasConviction'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date,\r\n 'returnObject.fourYears_chargedOrConvictedOffences': transformers.yesNo,\r\n 'returnObject.fourYears_licenceRSDC': transformers.yesNo,\r\n 'returnObject.fourYears_vehicleAccidentsClaims': transformers.yesNo,\r\n 'returnObject.tenYears_chargedOrConvictedOffences': transformers.yesNo\r\n };\r\n\r\n var transformedPolicyHolder = jsonMapper.convert(jsonMapper.transform(holder, transformMapping), convertMapping);\r\n\r\n return transformedPolicyHolder.returnObject;\r\n }\r\n\r\n /**\r\n * Transforms the retrievedQuoteRepsonse into a format that can be injected into the userInputRepository\r\n * The returned value will populate all the forms in the quote process\r\n * @param {Object} retrievedQuoteResponse Response object from the retrieveSavedQuote service\r\n * @returns {Object} Transformed object ready to inject into the userInputRepository\r\n */\r\n function transform(retrievedQuoteResponse) {\r\n void 0;\r\n\r\n var transformMapping = {\r\n\t\t\t\t// getStarted\r\n\t\t\t\t'returnObject.getStarted.policyStartDate':\r\n\t\t\t\t\t'=_input.periodStartDate',\r\n\t\t\t\t'returnObject.getStarted.personOrCompany':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.contactType',\r\n\r\n\t\t\t\t// aboutYourCar\r\n\t\t\t\t'returnObject.aboutYourCar.address':\r\n\t\t\t\t\t'=_input.vehicles.0.garageAddress',\r\n\r\n\t\t\t\t// carDetails\r\n\t\t\t\t'returnObject.carDetails.locationParked':\r\n\t\t\t\t\t'=_input.vehicles.0.garageType',\r\n\t\t\t\t'returnObject.carDetails.primaryCarUse':\r\n\t\t\t\t\t'=_input.vehicles.0.primaryUsage',\r\n\t\t\t\t'returnObject.carDetails.colour': '=_input.vehicles.0.colour',\r\n\t\t\t\t'returnObject.carDetails.last12Months':\r\n\t\t\t\t\t'=_input.vehicles.0.recentPurchase',\r\n\t\t\t\t'returnObject.carDetails.carCost':\r\n\t\t\t\t\t'=_input.vehicles.0.purchasePrice',\r\n\t\t\t\t'returnObject.carDetails.originalOwner':\r\n\t\t\t\t\t'=_input.vehicles.0.originalOwner',\r\n\t\t\t\t'returnObject.carDetails.whenDidYouBuyYear':\r\n\t\t\t\t\t'=_input.vehicles.0.purchaseMonthYear',\r\n\t\t\t\t'returnObject.carDetails.whenDidYouBuyMonth':\r\n\t\t\t\t\t'=_input.vehicles.0.purchaseMonthYear',\r\n\t\t\t\t'returnObject.carDetails.carFinance':\r\n\t\t\t\t\t'=_input.vehicles.0.financeType',\r\n\t\t\t\t'returnObject.carDetails.financeWith':\r\n\t\t\t\t\t'=_input.vehicles.0.financeCompany',\r\n\t\t\t\t'returnObject.carDetails.existingDamage':\r\n\t\t\t\t\t'=_input.vehicles.0.unrepairedDamage',\r\n\t\t\t\t'returnObject.carDetails.writtenEvidence':\r\n\t\t\t\t\t'=_input.vehicles.0.evidenceOfValueOrPrice',\r\n\t\t\t\t'returnObject.carDetails.salvageValue':\r\n\t\t\t\t\t'=_input.vehicles.0.salvageValue',\r\n\t\t\t\t'returnObject.carDetails.modificationsBuilt':\r\n\t\t\t\t\t'=_input.vehicles.0.afterMarketModifications',\r\n\r\n\t\t\t\t//tell us a bit more -------------------------------------\r\n\t\t\t\t'returnObject.tellUsABitMore.yourEmailAddress': '=_input.email',\r\n\t\t\t\t'returnObject.tellUsABitMore.promotionalCode':\r\n\t\t\t\t\t'=_input.campaignCode',\r\n\t\t\t\t'returnObject.stampDutyExemption.isSmallBusiness':\r\n\t\t\t\t\t'=_input.vehicles.0.isSmallBusiness',\r\n\r\n\t\t\t\t//driver\r\n\t\t\t\t// 'vehicleForm.driver.paymentOptions': '=_input.?',\r\n\r\n\t\t\t\t//quote\r\n\t\t\t\t'returnObject.insuredExcessValue.coverType':\r\n\t\t\t\t\t'=_input.vehicles.0.coverType',\r\n\t\t\t\t'returnObject.insuredExcessValue.comprehensivePref':\r\n\t\t\t\t\t'=_input.vehicles.0.sumInsuredType',\r\n\t\t\t\t'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft':\r\n\t\t\t\t\t'=_input.vehicles.0.coverType',\r\n\t\t\t\t'returnObject.insuredExcessValue.vehicleExcess':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.voluntaryVehicleExcessOptions',\r\n\t\t\t\t'returnObject.insuredExcessValue.standardVehicleExcess':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.standardVehicleExcess',\r\n\t\t\t\t'returnObject.insuredExcessValue.voluntaryVehicleExcess':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.voluntaryVehicleExcess',\r\n\t\t\t\t'returnObject.insuredExcessValue.ageExcessTier1':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.ageExcessTier1',\r\n\t\t\t\t'returnObject.insuredExcessValue.ageExcessTier2':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.ageExcessTier2',\r\n\t\t\t\t'returnObject.insuredExcessValue.undeclaredDriverTier2':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.undeclaredDriverTier2',\r\n\t\t\t\t'returnObject.insuredExcessValue.inexperiencedDriver':\r\n\t\t\t\t\t'=_input.vehicles.0.excess.inexperiencedDriver',\r\n\t\t\t\t'returnObject.insuredExcessValue.agreedValue':\r\n\t\t\t\t\t'=_input.vehicles.0.sumInsuredAmount',\r\n\r\n\t\t\t\t// optional benefits\r\n\t\t\t\t'returnObject.optionalBenefits.QPMMotVehHireCar':\r\n\t\t\t\t\t'=_input.vehicles.0.coverageOptions.0.selected',\r\n\t\t\t\t'returnObject.optionalBenefits.QPMMotVehWindscreen':\r\n\t\t\t\t\t'=_input.vehicles.0.coverageOptions.1.selected',\r\n\t\t\t\t'returnObject.optionalBenefits.QPMMotVehNCB':\r\n\t\t\t\t\t'=_input.vehicles.0.coverageOptions.2.selected',\r\n\t\t\t\t'returnObject.optionalBenefits.QPMMotVehLifetimeNCB':\r\n\t\t\t\t\t'=_input.vehicles.0.coverageOptions.2.selected',\r\n\t\t\t\t// registration details\r\n\t\t\t\t'returnObject.aboutYourCar.regoSearchResponse':\r\n\t\t\t\t\t'=_input.vehicles.0.vehicleInfo',\r\n\t\t\t\t'returnObject.aboutYourCar.retrievedQuoteRego.rego':\r\n\t\t\t\t\t'=_input.vehicles.0.registrationNumber',\r\n\t\t\t\t'returnObject.aboutYourCar.retrievedQuoteRego.state':\r\n\t\t\t\t\t'=_input.vehicles.0.garageAddress.state',\r\n\t\t\t\t'returnObject.tellUsYourRegoNumber.regoNumber':\r\n\t\t\t\t\t'=_input.vehicles.0.registrationNumber',\r\n\t\t\t\t// Contact\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordQuestion':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordQuestion',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordAnswer':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordAnswer',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.primaryPhone':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.primaryPhone',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.personalContactDetailsMailingPreference':\r\n\t\t\t\t\t'=_input.documentDeliveryMethod',\r\n\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.emailAddress1':\r\n\t\t\t\t\t'=_input.email'\r\n\t\t\t},\r\n\t\t\tconvertMapping = {\r\n\t\t\t\t'returnObject.carDetails.colour': transformers.camelcase,\r\n\t\t\t\t'returnObject.getStarted.policyStartDate': transformers.date,\r\n\t\t\t\t'returnObject.carDetails.financeWith': transformers.financeWith,\r\n\t\t\t\t'returnObject.retrievedQuoteRego.state': transformers.state,\r\n\t\t\t\t'returnObject.insuredExcessValue.coverType':\r\n\t\t\t\t\ttransformers.coverType,\r\n\t\t\t\t'returnObject.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft':\r\n\t\t\t\t\ttransformers.thirdPartyPref,\r\n\t\t\t\t'returnObject.carDetails.whenDidYouBuyYear':\r\n\t\t\t\t\ttransformers.purchaseYearFromMonthYear,\r\n\t\t\t\t'returnObject.carDetails.whenDidYouBuyMonth':\r\n\t\t\t\t\ttransformers.purchaseMonthFromMonthYear\r\n\t\t\t};\r\n var transformedQuote = jsonMapper.convert(jsonMapper.transform(retrievedQuoteResponse, transformMapping), convertMapping);\r\n\r\n if(retrievedQuoteResponse.vehicles[0].primaryUsage) {\r\n var usage = retrievedQuoteResponse.vehicles[0].primaryUsage;\r\n\t\t\tswitch (usage) {\r\n\t\t\t\tcase 'commercial':\r\n transformedQuote.returnObject.carDetails.commercialActivityType = retrievedQuoteResponse.vehicles[0].businessUsage;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n transformedQuote.returnObject.carDetails.businessActivityType = retrievedQuoteResponse.vehicles[0].businessUsage;\r\n\t\t\t\t\tbreak;\r\n\t\t\t} \r\n }\r\n\r\n // set primary phone number to mobile phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.cellPhone) {\r\n transformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.cellPhone;\r\n }\r\n\r\n // set primary phone number to home phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.homePhone) {\r\n transformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.homePhone;\r\n }\r\n\r\n // set primary phone number to work phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.workPhone) {\r\n transformedQuote.returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.workPhone;\r\n }\r\n\r\n // set comprehensive preference to null if the coverType is third party\r\n if(retrievedQuoteResponse.vehicles[0].coverType.length && retrievedQuoteResponse.vehicles[0].sumInsuredType.length) {\r\n var coverType = retrievedQuoteResponse.vehicles[0].coverType;\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n transformedQuote.returnObject.insuredExcessValue.comprehensivePref = null;\r\n }\r\n }\r\n\r\n // set optional modifications\r\n // console.info(retrievedQuoteResponse.vehicles[0].vehicleInfo.selectedEquipments[0]);\r\n if(retrievedQuoteResponse.vehicles[0].vehicleInfo &&\r\n retrievedQuoteResponse.vehicles[0].vehicleInfo.selectedEquipments &&\r\n retrievedQuoteResponse.vehicles[0].vehicleInfo.selectedEquipments.length) {\r\n\r\n transformedQuote.returnObject.carDetails.modifications = true;\r\n\r\n transformedQuote.returnObject.carDetails.modificationsOptions = {};\r\n\r\n var selectedEquipments = retrievedQuoteResponse.vehicles[0].vehicleInfo.selectedEquipments;\r\n\r\n selectedEquipments.forEach(function(mod) {\r\n // console.info(mod.optionKey);\r\n transformedQuote.returnObject.carDetails.modificationsOptions[mod.optionKey] = true;\r\n });\r\n } else {\r\n transformedQuote.returnObject.carDetails.modifications = false;\r\n }\r\n\r\n if(retrievedQuoteResponse.vehicles[0] &&\r\n retrievedQuoteResponse.vehicles[0].afterMarketMods &&\r\n retrievedQuoteResponse.vehicles[0].afterMarketMods.length) {\r\n\r\n transformedQuote.returnObject.carDetails.modificationsBuilt = true;\r\n\r\n transformedQuote.returnObject.carDetails.modificationsBuiltOptions = {};\r\n\r\n var afterMarketMods = retrievedQuoteResponse.vehicles[0].afterMarketMods;\r\n\r\n afterMarketMods.forEach(function(mod) {\r\n transformedQuote.returnObject.carDetails.modificationsBuiltOptions[mod] = true;\r\n });\r\n }\r\n\r\n // sort drivers to put mainDriver first in the list\r\n if(retrievedQuoteResponse.vehicles && retrievedQuoteResponse.vehicles.length && retrievedQuoteResponse.vehicles[0].drivers) {\r\n var drivers = $filter('orderBy')(retrievedQuoteResponse.vehicles[0].drivers, function(driver) {\r\n return driver.driverUsage == 'main' ? 0 : 1;\r\n });\r\n transformedQuote.returnObject.driver = {};\r\n transformedQuote.returnObject.driver.drivers = [];\r\n drivers.forEach(function(driver, index) {\r\n transformedQuote.returnObject.driver.drivers.push(transformDriver(driver.driver));\r\n });\r\n }\r\n\r\n // set contact policy holders\r\n if(retrievedQuoteResponse.policyHolders && retrievedQuoteResponse.policyHolders.length) {\r\n var policyHolders = retrievedQuoteResponse.policyHolders;\r\n\r\n transformedQuote.returnObject.mainPolicyHolder = {};\r\n\r\n policyHolders.forEach(function(holder, index) {\r\n\r\n if(holder.mainHolder) {\r\n transformedQuote.returnObject.mainPolicyHolder.mainPolicyHolder = true;\r\n transformedQuote.returnObject.mainPolicyHolder = transformPolicyHolder(holder.contact);\r\n transformedQuote.returnObject.mainPolicyHolder.policyHolders = [];\r\n\r\n\t\t\t\t\tif (holder.contact.contactType === 'company') {\r\n\t\t\t\t\t\tvar authorisedPerson = holder.contact.authorisedPersons[0].person;\r\n\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany = {};\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.name = holder.contact.name;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.abn = holder.contact.abn;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.email = holder.contact.emailAddress1;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.aboutCompany.officePhone = holder.contact.workPhone;\r\n transformedQuote.returnObject.aboutCompany.companyAddress = holder.contact.primaryAddress;\r\n\r\n transformedQuote.returnObject.companyContact = {}; \r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.primaryPhone = authorisedPerson.primaryPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.preferredNumber = authorisedPerson.homePhone || authorisedPerson.workPhone || authorisedPerson.cellPhone;\r\n\t\t\t\t\t\ttransformedQuote.returnObject.companyContact.passwordQuestion = holder.contact.passwordQuestion;\r\n transformedQuote.returnObject.companyContact.passwordAnswer = holder.contact.passwordAnswer;\r\n transformedQuote.returnObject.companyContact\r\n .companyContactDetailsMailingPreference = retrievedQuoteResponse.documentDeliveryMethod;\r\n transformedQuote.returnObject.companyContact.address =\r\n\t\t\t\t\t\t\tauthorisedPerson.primaryAddress;\r\n } \r\n \r\n } else {\r\n transformedQuote.returnObject.mainPolicyHolder.policyHolders.push(transformPolicyHolder(holder.contact));\r\n }\r\n });\r\n }\r\n\r\n void 0;\r\n\r\n return transformedQuote.returnObject;\r\n }\r\n return {\r\n transform: transform\r\n }\r\n}\r\n\nfunction VehicleStructureRequestTransformer(\r\n\tjsonMapper,\r\n\tutil,\r\n\tquoteOptions,\r\n\tstorage\r\n) {\r\n\tvar structureQuoteMapping = {\r\n\t\tperiodStartDate: '=_input.vehicleForm.getStarted.policyStartDate',\r\n\t\tvehicles: [],\r\n\t\t'vehicles.0': '=_input.vehicleForm.carDetails',\r\n\t\t'vehicles.0.registrationState':\r\n\t\t\t'=_input.vehicleForm.aboutYourCar.regoDetails.state',\r\n\t\t'vehicles.0.garageType':\r\n\t\t\t'=_input.vehicleForm.carDetails.locationParked',\r\n\t\t'vehicles.0.afterMarketModifications':\r\n\t\t\t'=_input.vehicleForm.carDetails.modificationsBuilt',\r\n\t\t'vehicles.0.primaryUsage':\r\n\t\t\t'=_input.vehicleForm.carDetails.primaryCarUse',\r\n\r\n\t\t'vehicles.0.vin': '=_regoSearch.vin',\r\n\t\t'vehicles.0.drivers': [], //\"=_input.vehicleForm.driver.drivers\",\r\n\t\t'vehicles.0.vehicleInfo': '=_regoSearch',\r\n\t\t'vehicles.0.garageAddress': '=_addressSearch',\r\n\r\n\t\t'vehicles.0.excess.voluntaryVehicleExcess':\r\n\t\t\t'=_input.vehicleForm.insuredExcessValue.voluntaryVehicleExcess',\r\n\r\n\t\tpolicyHolders: [],\r\n\t\t'policyHolders.0': {},\r\n\t\t'policyHolders.0.mainHolder':\r\n\t\t\t'=_input.vehicleForm.mainPolicyHolder.mainPolicyHolder',\r\n\t\t'policyHolders.0.contact': '=_input.vehicleForm.mainPolicyHolder',\r\n\t\t'policyHolders.0.contact.primaryAddress': '=_addressSearch',\r\n\r\n\t\t// \"policyHolders.0.contact.driverHistory\": [],\r\n\t\t// \"policyHolders.0.contact.driverHistory\": \"=_input.vehicleForm.mainPolicyHolder.fourYears_chargedOrConvictedOffencesDetails\",\r\n\r\n\t\tpolicyAddress: '=_addressSearch',\r\n\t\temail: '=_input.email',\r\n\t\tcampaignCode: '=_input.vehicleForm.promotionalCode.promotionalCode',\r\n\t\tmainContactAddress: '=_addressSearch-main-contact',\r\n\t\tpostalAddress: '=_addressSearch-postal-address'\r\n\t};\r\n\r\n\tfunction updateVehicleDetails(transformedRequest, userInput) {\r\n\t\ttransformedRequest.vehicles[0] = util.deepClone(\r\n\t\t\ttransformedRequest.vehicles[0]\r\n\t\t);\r\n\t\tif (userInput.vehicleForm.insuredExcessValue) {\r\n\t\t\ttransformedRequest.vehicles[0].sumInsuredType =\r\n\t\t\t\tuserInput.vehicleForm.insuredExcessValue.comprehensivePref;\r\n\t\t}\r\n\t\t//userInput.vehicleForm.insuredExcessValue\r\n\t\tif (userInput.vehicleForm.carDetails) {\r\n\t\t\ttransformedRequest.vehicles[0].purchasePrice =\r\n\t\t\t\tuserInput.vehicleForm.carDetails.carCost;\r\n\t\t\tif (userInput.vehicleForm.carDetails.whenDidYouBuyYear) {\r\n\t\t\t\ttransformedRequest.vehicles[0].purchaseMonthYear =\r\n\t\t\t\t\tuserInput.vehicleForm.carDetails.whenDidYouBuyYear +\r\n\t\t\t\t\t'-' +\r\n\t\t\t\t\tuserInput.vehicleForm.carDetails.whenDidYouBuyMonth;\r\n\t\t\t}\r\n\r\n\t\t\tif (!!userInput.vehicleForm.carDetails.businessActivityType) {\r\n\t\t\t\ttransformedRequest.vehicles[0].businessUsage =\r\n\t\t\t\t\tuserInput.vehicleForm.carDetails.businessActivityType;\r\n\t\t\t} else if (\r\n\t\t\t\t!!userInput.vehicleForm.carDetails.commercialActivityType\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.vehicles[0].businessUsage =\r\n\t\t\t\t\tuserInput.vehicleForm.carDetails.commercialActivityType;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyHolders(transformedRequest, userInput) {\r\n\t\tif (userInput.vehicleForm.getStarted) {\r\n\t\t\tvar personOrCompany =\r\n\t\t\t\tuserInput.vehicleForm.getStarted.personOrCompany;\r\n\t\t\tif (personOrCompany == 'company')\r\n\t\t\t\treturn updateCompanyContactDetails(\r\n\t\t\t\t\ttransformedRequest,\r\n\t\t\t\t\tuserInput\r\n\t\t\t\t);\r\n\t\t\telse\r\n\t\t\t\treturn updatePersonContactDetails(\r\n\t\t\t\t\ttransformedRequest,\r\n\t\t\t\t\tuserInput\r\n\t\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateCompanyContactDetails(transformedRequest, userInput) {\r\n\t\tvar policyHolder = util.deepClone(transformedRequest.policyHolders[0]);\r\n\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm.companyContact &&\r\n\t\t\tuserInput.vehicleForm.aboutCompany\r\n\t\t) {\r\n\t\t\t// transformedRequest.email = userInput.vehicleForm.companyContact.email;\r\n\t\t\t// var policyHolder = util.deepClone(transformedRequest.policyHolders[0]);\r\n\t\t\tpolicyHolder.contact = policyHolder.contact || {};\r\n\t\t\tpolicyHolder.contact.workPhone =\r\n\t\t\t\tuserInput.vehicleForm.aboutCompany.officePhone;\r\n\t\t\tpolicyHolder.contact = Object.extend(\r\n\t\t\t\tpolicyHolder.contact,\r\n\t\t\t\tuserInput.vehicleForm.aboutCompany\r\n\t\t\t);\r\n\t\t\tpolicyHolder.contact.emailAddress1 =\r\n\t\t\t\tuserInput.vehicleForm.aboutCompany.email;\r\n\t\t\tpolicyHolder.contact.primaryAddress =\r\n\t\t\t\tuserInput.vehicleForm.aboutCompany.companyAddress;\r\n\r\n\t\t\tvar authorisedPerson = {};\r\n\t\t\tauthorisedPerson = Object.extend(\r\n\t\t\t\tauthorisedPerson,\r\n\t\t\t\tuserInput.vehicleForm.companyContact\r\n\t\t\t);\r\n\t\t\tauthorisedPerson.contactType = 'person';\r\n\t\t\tauthorisedPerson.primaryAddress =\r\n\t\t\t\ttransformedRequest.mainContactAddress !== null\r\n\t\t\t\t\t? transformedRequest.mainContactAddress\r\n\t\t\t\t\t: transformedRequest.vehicles[0].garageAddress;\r\n\t\t\tauthorisedPerson.emailAddress1 =\r\n\t\t\t\tuserInput.vehicleForm.companyContact.email;\r\n\r\n\t\t\tpolicyHolder.contact.passwordQuestion =\r\n\t\t\t\tauthorisedPerson.passwordQuestion;\r\n\t\t\tpolicyHolder.contact.passwordAnswer =\r\n\t\t\t\tauthorisedPerson.passwordAnswer;\r\n\r\n\t\t\tpolicyHolder.contact.authorisedPersons = [\r\n\t\t\t\t{\r\n\t\t\t\t\tperson: authorisedPerson\r\n\t\t\t\t}\r\n\t\t\t];\r\n\r\n\t\t\tpolicyHolder.contact.primaryPhone = 'work';\r\n\r\n\t\t\tdelete authorisedPerson.address;\r\n\t\t\tdelete policyHolder.contact.companyAddress;\r\n\t\t\tdelete policyHolder.contact.email;\r\n\t\t\tdelete policyHolder.contact.officePhone;\r\n\t\t} else {\r\n\t\t\tpolicyHolder.contact.authorisedPersons = [\r\n\t\t\t\t{\r\n\t\t\t\t\tperson: {\r\n\t\t\t\t\t\tcontactType: 'person',\r\n\t\t\t\t\t\tprimaryAddress: transformedRequest.policyAddress\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\tpolicyHolder.contact.contactType = 'company';\r\n\t\ttransformedRequest.policyHolders[0] = policyHolder;\r\n\t\ttransformedRequest.policyHolders[0].mainHolder = true;\r\n\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm &&\r\n\t\t\tuserInput.vehicleForm.companyContact &&\r\n\t\t\tuserInput.vehicleForm.companyContact\r\n\t\t\t\t.companyContactDetailsMailingPreference\r\n\t\t) {\r\n\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\tuserInput.vehicleForm.companyContact.companyContactDetailsMailingPreference;\r\n\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t.companyContactDetailsMailingPreference;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePersonContactDetails(transformedRequest, userInput) {\r\n\t\tvar vehicleForm = userInput.vehicleForm,\r\n\t\t\tmainPolicyHolder = vehicleForm.mainPolicyHolder;\r\n\r\n\t\tif (mainPolicyHolder) {\r\n\t\t\tvar policyHolders = [];\r\n\t\t\tmainPolicyHolder.policyContact =\r\n\t\t\t\tvehicleForm.mainPolicyHolderContact;\r\n\t\t\tif (mainPolicyHolder.isMainDriverMainPolicyHolder) {\r\n\t\t\t\tvar driver = util.deepClone(\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver\r\n\t\t\t\t);\r\n\t\t\t\tObject.extend(mainPolicyHolder, driver.person);\r\n\t\t\t}\r\n\r\n\t\t\tpolicyHolders.push(mainPolicyHolder);\r\n\t\t\tif (\r\n\t\t\t\tvehicleForm.additionalPolicyHolders &&\r\n\t\t\t\tvehicleForm.additionalPolicyHolders.policyHolders\r\n\t\t\t) {\r\n\t\t\t\tpolicyHolders = policyHolders.concat(\r\n\t\t\t\t\tvehicleForm.additionalPolicyHolders.policyHolders\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tpolicyHolders.forEach(function(policyHolder, index) {\r\n\t\t\t\tvar contact = util.deepClone(policyHolder);\r\n\t\t\t\tif (!transformedRequest.policyHolders[index])\r\n\t\t\t\t\ttransformedRequest.policyHolders[index] = {};\r\n\r\n\t\t\t\tvar transformedContact =\r\n\t\t\t\t\ttransformedRequest.policyHolders[index];\r\n\t\t\t\tif (!contact.contactType)\r\n\t\t\t\t\tcontact.contactType =\r\n\t\t\t\t\t\t'person'; /* TODO : check to make sure this condition is always safe to use */\r\n\r\n\t\t\t\tcontact.prefix = contact.title;\r\n\r\n\t\t\t\tif (contact.policyContact) {\r\n\t\t\t\t\tObject.extend(contact, contact.policyContact);\r\n\t\t\t\t\tif (contact.primaryPhone == 'mobile')\r\n\t\t\t\t\t\tcontact.cellPhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\telse if (contact.primaryPhone == 'home')\r\n\t\t\t\t\t\tcontact.homePhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\telse if (contact.primaryPhone == 'work')\r\n\t\t\t\t\t\tcontact.workPhone = contact.primaryPhoneNumber;\r\n\r\n\t\t\t\t\tdelete contact.policyContact;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!contact.primaryAddress)\r\n\t\t\t\t\tcontact.primaryAddress = util.clone(\r\n\t\t\t\t\t\tmainPolicyHolder.primaryAddress\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\tif (index == 0) {\r\n\t\t\t\t\tif (!contact.isMainDriverMainPolicyHolder) {\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t\t\t(!contact.fourYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t\t.fourYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\t\t\t(!contact.fourYears_vehicleAccidentsClaimsDetails ||\r\n\t\t\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaimsDetails\r\n\t\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tcontact.fourYears_licenceRSDC &&\r\n\t\t\t\t\t\t\t(!contact.fourYears_licenceRSDCDetails.length ||\r\n\t\t\t\t\t\t\t\tcontact.fourYears_licenceRSDCDetails.length < 1)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tcontact.fourYears_licenceRSDC = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t\t\t(!contact.tenYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t\t.tenYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcontact.drivingHistory = [];\r\n\r\n\t\t\t\t\t\tif (contact.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (contact.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (contact.fourYears_licenceRSDC) {\r\n\t\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\t\tcontact.fourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (contact.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcontact.drivingHistory.forEach(function(dh) {\r\n\t\t\t\t\t\t\tif (dh.description) {\r\n\t\t\t\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t\t(!contact.additionalPolicyHolderFourYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t.additionalPolicyHolderFourYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\t\t(!contact.additionalPolicyHolderFourYears_vehicleAccidentsClaimsDetails ||\r\n\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t.additionalPolicyHolderFourYears_vehicleAccidentsClaimsDetails\r\n\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaims = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_licenceRSDC &&\r\n\t\t\t\t\t\t(!contact\r\n\t\t\t\t\t\t\t.additionalPolicyHolderFourYears_licenceRSDCDetails\r\n\t\t\t\t\t\t\t.length ||\r\n\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t.additionalPolicyHolderFourYears_licenceRSDCDetails\r\n\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_licenceRSDC = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t\t(!contact.additionalPolicyHolderTenYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\t\tcontact\r\n\t\t\t\t\t\t\t\t.additionalPolicyHolderTenYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontact.drivingHistory = [];\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_chargedOrConvictedOffences\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaims\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (contact.additionalPolicyHolderFourYears_licenceRSDC) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.additionalPolicyHolderFourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffences\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontact.drivingHistory.forEach(function(dh) {\r\n\t\t\t\t\t\tif (dh.description) {\r\n\t\t\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontact.hasClaim =\r\n\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims ||\r\n\t\t\t\t\tcontact.additionalPolicyHolderFourYears_vehicleAccidentsClaims ||\r\n\t\t\t\t\tfalse;\r\n\t\t\t\tcontact.hasConviction =\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences ||\r\n\t\t\t\t\tcontact.additionalPolicyHolderTenYears_chargedOrConvictedOffences ||\r\n\t\t\t\t\tfalse;\r\n\r\n\t\t\t\tif (!transformedContact.contact)\r\n\t\t\t\t\ttransformedContact.contact = {};\r\n\t\t\t\tObject.extend(transformedContact.contact, contact);\r\n\t\t\t});\r\n\t\t} else if (\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0] &&\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver &&\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person\r\n\t\t) {\r\n\t\t\tvar driver = transformedRequest.vehicles[0].drivers[0].driver;\r\n\t\t\tvar contact = transformedRequest.policyHolders[0].contact;\r\n\t\t\tObject.extend(contact, driver.person);\r\n\t\t\tcontact.contactType =\r\n\t\t\t\t'person'; /* TODO : check to make sure this condition is always safe to use */\r\n\t\t}\r\n\t\ttransformedRequest.policyHolders[0].mainHolder = true;\r\n\t\tif (userInput.email) {\r\n\t\t\t/** required for saving/retrieving the policy */\r\n\t\t\tif (\r\n\t\t\t\tuserInput.vehicleForm &&\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t} else if (\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.email;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\tif (transformedRequest.policyHolders[0].contact.emailAddress1) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm &&\r\n\t\t\tuserInput.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\tuserInput.vehicleForm.mainPolicyHolderContact\r\n\t\t\t\t.personalContactDetailsMailingPreference\r\n\t\t) {\r\n\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.personalContactDetailsMailingPreference;\r\n\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t.personalContactDetailsMailingPreference;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateDrivers(transformedRequest, userInput) {\r\n\t\ttransformedRequest.vehicles[0].drivers = [];\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm.driver &&\r\n\t\t\tuserInput.vehicleForm.driver.drivers\r\n\t\t) {\r\n\t\t\tuserInput.vehicleForm.driver.drivers.forEach(function(driver) {\r\n\t\t\t\tdriver.person.contactType = 'person';\r\n\t\t\t\tdriver.person.prefix = driver.person.title;\r\n\t\t\t\tdriver.hasClaim = driver.person.hasClaim =\r\n\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tdriver.hasInfringement =\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tdriver.hasLostLicence = driver.fourYears_licenceRSDC;\r\n\t\t\t\tdriver.hasConviction = driver.person.hasConviction =\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tdriver.zeroDemerits = driver.NSWDemeritPoints;\r\n\t\t\t\t//driver.yearsLicenced = driver.yearsHeld ;\r\n\r\n\t\t\t\tdriver.person.primaryAddress = transformedRequest.policyAddress;\r\n\t\t\t\tdriver.person.primaryAddress.addressType =\r\n\t\t\t\t\ttransformedRequest.vehicleForm.getStarted\r\n\t\t\t\t\t\t.personOrCompany === 'company'\r\n\t\t\t\t\t\t? 'business'\r\n\t\t\t\t\t\t: 'residential';\r\n\r\n\t\t\t\tswitch (driver.yearsHeld) {\r\n\t\t\t\t\tcase 'lessThan_1':\r\n\t\t\t\t\t\tdriver.yearsLicenced = '7';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'greaterThan_5':\r\n\t\t\t\t\t\tdriver.yearsLicenced = '6';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdriver.yearsLicenced = driver.yearsHeld;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t(!driver.fourYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\t(!driver.fourYears_vehicleAccidentsClaimsDetails ||\r\n\t\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaimsDetails.length <\r\n\t\t\t\t\t\t\t1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_licenceRSDC &&\r\n\t\t\t\t\t(!driver.fourYears_licenceRSDCDetails.length ||\r\n\t\t\t\t\t\tdriver.fourYears_licenceRSDCDetails.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_licenceRSDC = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t(!driver.tenYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdriver.driverHistory = [];\r\n\r\n\t\t\t\tif (driver.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.fourYears_licenceRSDC) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdriver.driverHistory.forEach(function(dh) {\r\n\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t};\r\n\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvar driverObj = {\r\n\t\t\t\t\tdriver: driver\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// var toDelete = isItemMarkedForDelete('driver', driver) ;\r\n\t\t\t\t// if (toDelete) driverObj.markedForDelete = true ;\r\n\r\n\t\t\t\ttransformedRequest.vehicles[0].drivers.push(driverObj);\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driverUsage = 'main';\r\n\t\t} else {\r\n\t\t\ttransformedRequest.vehicles[0].drivers = [\r\n\t\t\t\t{\r\n\t\t\t\t\tdriverUsage: 'main'\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\tif (userInput.email) {\r\n\t\t\t/** required for saving/retrieving the policy */\r\n\t\t\tif (\r\n\t\t\t\tangular.isDefined(\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.email;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person\r\n\t\t\t\t\t\t.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleRegoDetails(transformedRequest, userInput) {\r\n\t\tvar aboutYourCar = userInput.vehicleForm.aboutYourCar,\r\n\t\t\ttellUsYourRegoNumber = userInput.vehicleForm.tellUsYourRegoNumber,\r\n\t\t\tregoNumber = null;\r\n\r\n\t\tif (aboutYourCar && aboutYourCar.regoDetails) {\r\n\t\t\tregoNumber = aboutYourCar.regoDetails.regoNumber;\r\n\t\t} else if (tellUsYourRegoNumber && tellUsYourRegoNumber.regoNumber) {\r\n\t\t\tregoNumber = tellUsYourRegoNumber.regoNumber;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.vehicles[0].registrationNumber = regoNumber;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAdditionalDrivers(transformedRequest, userInput) {\r\n\t\tvar fromRapidEstimate = !userInput.fromFullQuote,\r\n\t\t\tdriver = userInput.vehicleForm.driver,\r\n\t\t\tdrivers = driver ? driver.drivers : null,\r\n\t\t\t/** required for when checking decline on step 1 */\r\n\t\t\tyoungestDriver = null;\r\n\r\n\t\tif (!driver) return transformedRequest;\r\n\r\n\t\tvar rapidEstimateYoungerDriver =\r\n\t\t\tfromRapidEstimate &&\r\n\t\t\tdriver.youngestDriver &&\r\n\t\t\tdriver.numberOfOtherDrivers > 0;\r\n\t\tif (!rapidEstimateYoungerDriver)\r\n\t\t\tyoungestDriver = findYoungestDriver(drivers);\r\n\r\n\t\ttransformedRequest.vehicles[0].youngestDriverGender = rapidEstimateYoungerDriver\r\n\t\t\t? driver.youngestDriverGender /** value from rapid estimate */\r\n\t\t\t: youngestDriver\r\n\t\t\t? youngestDriver.person.gender\r\n\t\t\t: null; /** value from full quote */\r\n\r\n\t\ttransformedRequest.vehicles[0].otherDriverHasProLicense = fromRapidEstimate\r\n\t\t\t? driver.provisionalLicence /** value from rapid estimate */\r\n\t\t\t: youngestDriver\r\n\t\t\t? youngestDriver.licenceType == 'provisional'\r\n\t\t\t: false; /** value from full path */\r\n\r\n\t\ttransformedRequest.vehicles[0].youngestDriverDOB = rapidEstimateYoungerDriver\r\n\t\t\t? driver.youngestDriverDob\r\n\t\t\t: youngestDriver\r\n\t\t\t? youngestDriver.person.dateOfBirth\r\n\t\t\t: null;\r\n\r\n\t\ttransformedRequest.vehicles[0].otherDriverUsageTimes = fromRapidEstimate\r\n\t\t\t? numberOfOtherDrivers(\r\n\t\t\t\t\tdriver.numberOfOtherDrivers\r\n\t\t\t ) /* value from rapid estimate */\r\n\t\t\t: drivers.length - 1; /* value from full quote */\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction numberOfOtherDrivers(num) {\r\n\t\treturn num == 6 ? '5plus' : '' + num;\r\n\t}\r\n\r\n\tfunction updateMainDriverAddress(transformedRequest, userInput) {\r\n\t\tvar phs = transformedRequest.policyHolders,\r\n\t\t\tph = phs ? phs[0] : null,\r\n\t\t\tcontact = ph ? ph.contact : null,\r\n\t\t\tphAddress = contact ? contact.primaryAddress : null;\r\n\r\n\t\tphAddress = phAddress || transformedRequest.policyAddress;\r\n\r\n\t\treturn applyAddressForGoodDriverBonus(transformedRequest, phAddress);\r\n\t}\r\n\r\n\t/**\r\n\t * setting the policy contact address on the main driver.\r\n\t * This is required for good driver bonus discount to come through\r\n\t */\r\n\tfunction applyAddressForGoodDriverBonus(transformedRequest, address) {\r\n\t\tif (\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0] &&\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver &&\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person\r\n\t\t) {\r\n\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.primaryAddress = address;\r\n\r\n\t\t\tif (\r\n\t\t\t\ttransformedRequest.vehicleForm.getStarted.personOrCompany ===\r\n\t\t\t\t\t'company' &&\r\n\t\t\t\ttransformedRequest.postalAddress !== null\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.primaryAddress =\r\n\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t}\r\n\t\t\tif (angular.isDefined(transformedRequest.vehicleForm)) {\r\n\t\t\t\t/****************************************************************************\r\n\t\t\t\t * address is default to be residential to enable good driver bonus discount\r\n\t\t\t\t * Check Transformed request if come from vehicle form\r\n\t\t\t\t * Added Fallback to use the default values as residential\r\n\t\t\t\t ***************************************************************************/\r\n\t\t\t\t// Added checking for business Address Type to be able to include to good driver discount\r\n\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.primaryAddress.addressType =\r\n\t\t\t\t\ttransformedRequest.vehicleForm.getStarted\r\n\t\t\t\t\t\t.personOrCompany === 'company'\r\n\t\t\t\t\t\t? 'business'\r\n\t\t\t\t\t\t: 'residential';\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.vehicles[0].drivers[0].driver.person.primaryAddress.addressType =\r\n\t\t\t\t\t'residential';\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (angular.isDefined(transformedRequest.vehicleForm)) {\r\n\t\t\t\t// Replace Address Type via personOrCompany value\r\n\t\t\t\ttransformedRequest.policyAddress.addressType =\r\n\t\t\t\t\ttransformedRequest.vehicleForm.getStarted\r\n\t\t\t\t\t\t.personOrCompany === 'company'\r\n\t\t\t\t\t\t? 'business'\r\n\t\t\t\t\t\t: 'residential';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\ttransformedRequest.postalAddress.addressType = transformedRequest.policyAddress.addressType =\r\n\t\t\t\t'postal';\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction findYoungestDriver(drivers) {\r\n\t\tvar youngest = null;\r\n\t\tdrivers.forEach(function(driver) {\r\n\t\t\tif (!youngest) youngest = driver;\r\n\t\t\telse if (isYounger(driver, youngest)) youngest = driver;\r\n\t\t});\r\n\r\n\t\tfunction isYounger(driver, otherDriver) {\r\n\t\t\treturn (\r\n\t\t\t\tmoment(driver.person.dateOfBirth, 'DD/MM/YYYY') >\r\n\t\t\t\tmoment(otherDriver.person.dateOfBirth, 'DD/MM/YYYY')\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn youngest;\r\n\t}\r\n\r\n\tfunction updateVehicleInsuranceTypeAndAmount(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tvar insuredExcessValue = userInput.vehicleForm.insuredExcessValue;\r\n\t\tif (insuredExcessValue) {\r\n\t\t\ttransformedRequest.vehicles[0].sumInsuredType =\r\n\t\t\t\tinsuredExcessValue.comprehensivePref;\r\n\t\t\tif (insuredExcessValue.comprehensivePref == 'agreed') {\r\n\t\t\t\ttransformedRequest.vehicles[0].sumInsuredAmount =\r\n\t\t\t\t\tinsuredExcessValue.agreedValue;\r\n\t\t\t} else if (quoteOptions.getSelectedQuoteResult()) {\r\n\t\t\t\ttransformedRequest.vehicles[0].sumInsuredAmount = quoteOptions\r\n\t\t\t\t\t.getSelectedQuoteResult()\r\n\t\t\t\t\t.getAnnual().vehicleValue.lower;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleInsuranceOptionalBenefits(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tvar optionalBenefits = userInput.vehicleForm.optionalBenefits;\r\n\t\tvar coverageOptions = [];\r\n\t\tif (optionalBenefits) {\r\n\t\t\tfor (var key in optionalBenefits) {\r\n\t\t\t\tcoverageOptions.push({\r\n\t\t\t\t\tname: key,\r\n\t\t\t\t\tselected: optionalBenefits[key],\r\n\t\t\t\t\trequired: false\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\ttransformedRequest.vehicles[0].coverageOptions = coverageOptions;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateModificationOptions(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails;\r\n\r\n\t\tif (carDetails) {\r\n\t\t\tvar modifications = carDetails.modifications;\r\n\r\n\t\t\tif (modifications) {\r\n\t\t\t\tvar mods = carDetails.modificationsOptions,\r\n\t\t\t\t\tvehicleInfo = transformedRequest.vehicles[0].vehicleInfo;\r\n\r\n\t\t\t\tif (mods && vehicleInfo && vehicleInfo.optionalEquipments) {\r\n\t\t\t\t\tvar selectedEquipments = vehicleInfo.optionalEquipments.slice();\r\n\t\t\t\t\tvar modsKeys = Object.keys(mods);\r\n\t\t\t\t\t// need to do a look up to find code,optionKey and description from optionalEquipments\r\n\t\t\t\t\tselectedEquipments = selectedEquipments.filter(function(\r\n\t\t\t\t\t\teq\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn modsKeys.indexOf(eq.optionKey) !== -1;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tvehicleInfo.selectedEquipments = selectedEquipments;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAfterMarketModifications(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails;\r\n\t\tif (carDetails) {\r\n\t\t\tvar modificationsBuilt = carDetails.modificationsBuilt;\r\n\r\n\t\t\tif (modificationsBuilt) {\r\n\t\t\t\tvar mods = carDetails.modificationsBuiltOptions;\r\n\r\n\t\t\t\tif (mods) {\r\n\t\t\t\t\tafterMarketMods = [];\r\n\r\n\t\t\t\t\tfor (var key in mods) {\r\n\t\t\t\t\t\tif (mods[key] === true) {\r\n\t\t\t\t\t\t\tafterMarketMods.push(key);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttransformedRequest.vehicles[0].afterMarketMods = afterMarketMods;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateExistingDamage(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails,\r\n\t\t\texistingDamage = carDetails ? carDetails.existingDamage : null;\r\n\r\n\t\tif (existingDamage) {\r\n\t\t\ttransformedRequest.vehicles[0].unrepairedDamage = existingDamage;\r\n\t\t\tif (existingDamage != 'none') {\r\n\t\t\t\t/** do we have to set this to agree and set sumInsured to Salvage value ??? */\r\n\t\t\t\tif (carDetails.salvageValue) {\r\n\t\t\t\t\ttransformedRequest.vehicles[0].sumInsuredType = 'agreed';\r\n\t\t\t\t\ttransformedRequest.vehicles[0].sumInsured =\r\n\t\t\t\t\t\tcarDetails.salvageValue;\r\n\t\t\t\t\ttransformedRequest.vehicles[0].evidenceOfValueOrPrice =\r\n\t\t\t\t\t\tcarDetails.writtenEvidence;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateFinanceType(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails,\r\n\t\t\tcarFinance = carDetails ? carDetails.carFinance : 'none';\r\n\t\t// , financeWith = carDetails.financeWith ? carDetails.financeWith : null;\r\n\r\n\t\tif (carDetails) {\r\n\t\t\tif (carDetails.financeWith) {\r\n\t\t\t\tfinanceWith = carDetails.financeWith;\r\n\t\t\t} else {\r\n\t\t\t\tfinanceWith = null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfinanceWith = null;\r\n\t\t}\r\n\r\n\t\tif (carFinance) {\r\n\t\t\ttransformedRequest.vehicles[0].financeType = carFinance;\r\n\r\n\t\t\tif (\r\n\t\t\t\tfinanceWith &&\r\n\t\t\t\tfinanceWith.hasOwnProperty('label') &&\r\n\t\t\t\tfinanceWith.hasOwnProperty('value')\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.vehicles[0].financeCompany = {};\r\n\r\n\t\t\t\ttransformedRequest.vehicles[0].financeCompany.name =\r\n\t\t\t\t\tfinanceWith.label;\r\n\t\t\t\ttransformedRequest.vehicles[0].financeCompany.publicID =\r\n\t\t\t\t\tfinanceWith.value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateRecentPurchase(transformedRequest, userInput) {\r\n\t\tvar carDetails = userInput.vehicleForm.carDetails,\r\n\t\t\tlast12Months = carDetails ? carDetails.last12Months : false,\r\n\t\t\tcarCost = last12Months ? carDetails.carCost : null;\r\n\r\n\t\tif (last12Months) {\r\n\t\t\ttransformedRequest.vehicles[0].recentPurchase = last12Months;\r\n\r\n\t\t\tif (carCost) {\r\n\t\t\t\ttransformedRequest.vehicles[0].purchasePrice = carCost;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//updates the email\r\n\tfunction updateEmail(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm &&\r\n\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t) {\r\n\t\t\ttransformedRequest.email =\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.yourEmailAddress;\r\n\t\t} else {\r\n\t\t\t//set email from maincontact if not available in tellUsABitMore\r\n\t\t\tif (\r\n\t\t\t\tuserInput.vehicleForm &&\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// send the campaign code to GW\r\n\t\tif (\r\n\t\t\tuserInput.vehicleForm &&\r\n\t\t\tuserInput.vehicleForm.tellUsABitMore &&\r\n\t\t\tuserInput.vehicleForm.tellUsABitMore.promotionalCode\r\n\t\t) {\r\n\t\t\ttransformedRequest.campaignCode =\r\n\t\t\t\tuserInput.vehicleForm.tellUsABitMore.promotionalCode;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateStampDutyEligibility(transformedRequest, userInput) {\r\n\t\tvar stampDutyEligible = storage.getItem('stamp-duty');\r\n\t\tif (userInput.vehicleForm.stampDutyExemption && stampDutyEligible) {\r\n\t\t\ttransformedRequest.vehicles[0].isSmallBusiness =\r\n\t\t\t\tuserInput.vehicleForm.stampDutyExemption.isSmallBusiness;\r\n\t\t} else {\r\n\t\t\tdelete transformedRequest.vehicles[0].isSmallBusiness;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// function isItemMarkedForDelete(typeName, item) {\r\n\t// \tvar toRemove = aggregatedRemoveService.getList();\r\n\t// \tvar itemsToRemove = toRemove[typeName] || [];\r\n\t// \tvar removeItem = false ;\r\n\t// \titemsToRemove.some(function(itemToRemove) {\r\n\t// \t\tif ( itemToRemove._aggregator.id == item._aggregator.id){\r\n\t// \t\t\tremoveItem = true;\r\n\t// \t\t\treturn;\r\n\t// \t\t}\r\n\t// \t});\r\n\t// \treturn removeItem;\r\n\t// }\r\n\r\n\tfunction updatePolicyAddress(transformedRequest, userInput) {\r\n\t\tvar postalAddress = storage.getItem('policy-address');\r\n\r\n\t\tif (\r\n\t\t\tangular.isDefined(userInput.vehicleForm.mainPolicyHolderContact) ||\r\n\t\t\tangular.isDefined(userInput.vehicleForm.companyContact)\r\n\t\t) {\r\n\t\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t} else {\r\n\t\t\t\tvar isPostalOption = true;\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.vehicleForm.getStarted.personOrCompany == 'person'\r\n\t\t\t\t) {\r\n\t\t\t\t\tisPostalOption =\r\n\t\t\t\t\t\tuserInput.vehicleForm.mainPolicyHolderContact\r\n\t\t\t\t\t\t\t.postalOption;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tisPostalOption =\r\n\t\t\t\t\t\tuserInput.vehicleForm.companyContact.postalOption;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0 && !isPostalOption) {\r\n\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdelete transformedRequest.postalAddress;\r\n\t\tdelete transformedRequest.mainContactAddress;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(userInput) {\r\n\t\tvar transformedRequest = jsonMapper.transform(\r\n\t\t\tuserInput,\r\n\t\t\tstructureQuoteMapping\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleRegoDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateStampDutyEligibility(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateDrivers(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateAdditionalDrivers(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updatePolicyHolders(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateMainDriverAddress(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleInsuranceTypeAndAmount(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleInsuranceOptionalBenefits(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateAfterMarketModifications(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateModificationOptions(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateExistingDamage(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateFinanceType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateRecentPurchase(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateEmail(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePolicyAddress(transformedRequest, userInput);\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transposeMonth(monthName) {\r\n\t\tvar months = {\r\n\t\t\tJanuary: '01',\r\n\t\t\tFebruary: '02',\r\n\t\t\tMarch: '03',\r\n\t\t\tApril: '04',\r\n\t\t\tMay: '05',\r\n\t\t\tJune: '06',\r\n\t\t\tJuly: '07',\r\n\t\t\tAugust: '08',\r\n\t\t\tSeptember: '09',\r\n\t\t\tOctober: '10',\r\n\t\t\tNovember: '11',\r\n\t\t\tDecember: '12'\r\n\t\t};\r\n\r\n\t\treturn months[monthName];\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n\nfunction CaravanCleanRequestTransformer(Util, jsonMapper) {\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tdelete intermediateRequest.caravanForm;\r\n\r\n\t\tvar caravan = intermediateRequest.caravans[0];\r\n\t\tvar policyHolders = intermediateRequest.policyHolders[0];\r\n\r\n\t\tdelete caravan.cost;\r\n\t\tdelete caravan.existingDamage;\r\n\t\tdelete caravan.financeWith;\r\n\t\tdelete caravan.finance;\r\n\t\tdelete caravan.regoNumber;\r\n\t\tdelete caravan.sumInsuredAmount;\r\n\t\tdelete caravan.whenDidYouBuyMonth;\r\n\t\tdelete caravan.whenDidYouBuyYear;\r\n\t\tdelete caravan.security;\r\n\t\tdelete caravan.locationDescription;\r\n\t\tdelete caravan.primaryUse;\r\n\t\tdelete caravan.vehicleSubType;\r\n\r\n\t\t// Remove the subtype if the vehicle is any of these types\r\n\t\tif ( caravan.caravanType !== 'caravan' && caravan.caravanType !== 'campertrailer' && caravan.caravanType !== 'goodscarryingtrailer' ) {\r\n\t\t\tdelete caravan.caravanSubType;\r\n\t\t}\r\n\r\n\t\tif ( caravan.drivers ) {\r\n\t\t\tcaravan.drivers.forEach(function(policyDriver) {\r\n\t\t\t\tdelete policyDriver.driver._HTMLID;\r\n\t\t\t\tdelete policyDriver.driver.$$hashKey;\r\n\t\t\t\tdelete policyDriver.driver._aggregator;\r\n\r\n\t\t\t\tdelete policyDriver.driver.maxNoClaimBonus;\r\n\t\t\t\tdelete policyDriver.driver.title;\r\n\t\t\t\tdelete policyDriver.driver.yearsHeld;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_licenceRSDC;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_licenceRSDCDetails;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tdelete policyDriver.driver.fourYears_vehicleAccidentsClaimsDetails;\r\n\t\t\t\tdelete policyDriver.driver.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tdelete policyDriver.driver.tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t* Guidewire creates duplicate records of other drivers criminal histories\r\n\t\t\t\t* if the driverHistory is sent as an empty array :)\r\n\t\t\t\t* For now this has been commented out and moved to PublicIDTransformer as that\r\n\t\t\t\t* is creating an array when going through and transforming public ID's for a list. This behaviour should be changed for empty lists.\r\n\t\t\t\t* After changing that, this can be commented back in and removed from publicIDTransformer.\r\n\t\t\t\tif ( policyDriver.driver.driverHistory\r\n\t\t\t\t\t&& Array.isArray(policyDriver.driver.driverHistory)\r\n\t\t\t\t\t&& policyDriver.driver.driverHistory.length == 0 )\r\n\t\t\t\t\tdelete policyDriver.driver.driverHistory;\r\n\t\t\t\t*/\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tif ( policyHolders.contact ) {\r\n\t\t\tdelete policyHolders.contact._HTMLID;\r\n\t\t\tdelete policyHolders.contact.$$hashKey;\r\n\t\t\tdelete policyHolders.contact._aggregator;\r\n\r\n\t\t\tdelete policyHolders.contact.anyInfringements;\r\n\t\t\tdelete policyHolders.contact.anyLostLicences;\r\n\t\t\tdelete policyHolders.contact.mainPolicyHolder;\r\n\r\n\t\t\tdelete policyHolders.contact.fourYears_chargedOrConvictedOffences;\r\n\t\t\tdelete policyHolders.contact.fourYears_chargedOrConvictedOffencesDetails;\r\n\t\t\tdelete policyHolders.contact.fourYears_licenceRSDC;\r\n\t\t\tdelete policyHolders.contact.fourYears_licenceRSDCDetails;\r\n\t\t\tdelete policyHolders.contact.fourYears_bikeAccidentsClaims;\r\n\t\t\tdelete policyHolders.contact.fourYears_bikeAccidentsClaimsDetails;\r\n\t\t\tdelete policyHolders.contact.tenYears_chargedOrConvictedOffences;\r\n\t\t\tdelete policyHolders.contact.tenYears_chargedOrConvictedOffencesDetails;\r\n\t\t}\r\n\r\n\r\n\r\n\t\tif ( ! intermediateRequest.email )\r\n\t\t\tdelete intermediateRequest.email ;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction CaravanCoverTypeTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(intermediateRequest, coverTypeDescriptor) {\r\n\r\n\t\tintermediateRequest.caravans[0].coverType = coverTypeDescriptor;\r\n\r\n\t\treturn intermediateRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction CaravanDefaultValueRequestTransformer(Util, jsonMapper, userInputRepository, quoteOptions) {\r\n\r\n\tfunction formatDateAndTimeTheGuidewireWay(date, time) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\tvar timeFormatted = '4:00PM' ;\r\n\t\tif ( time )\r\n\t\t\ttimeFormatted = moment().tz(\"Australia/Sydney\").format('h:mma');\r\n\t\treturn Util.stringFormat(format, moment().tz(\"Australia/Sydney\").format('Do MMM YYYY') , timeFormatted) ;\r\n\t}\r\n\r\n\tvar staticValuesMapping = {\r\n\t\t\"quoteType\": 'Full',\r\n\t\t\"productCode\": 'QPCCaravanTrailer',\r\n\t\t\"caravans.0.financeType\": \"none\",\r\n\t\t\"caravans.0.sumInsuredType\": \"agreed\",\r\n\t\t\"caravans.0.garageType\": \"garage\",\r\n\t\t\"caravans.0.coverType\": \"comprehensive\",\r\n\t\t\"caravans.0.specifiedContents\": false,\r\n\t\t\"caravans.0.existingDamageType\": \"nodamage\",\r\n\t\t\"caravans.0.hasCurrentInsurance\": false,\r\n\t\t\"caravans.0.isEligibleforSDExemption\": false,\t\t\r\n\t\t\"caravans.0.isCaravanRegistered\": true,\r\n\t\t\"caravans.0.isCycloneRatedSecurity\": false,\r\n\t\t\"caravans.0.locationType\": \"residentialaddress\",\r\n\t\t\"caravans.0.securityType\": \"garage\",\r\n\t\t\"caravans.0.registrationNumber\": \"RAPID_QUOTE_REGNUMBER\",\r\n\t\t\"caravans.0.chassisNumber\": \"Not Supplied\",\r\n\t\t\"caravans.0.isCaravanOnNonRetractableJacks\": false,\r\n\t\t\"caravans.0.isCaravanConnectedToPlumbing\": false,\r\n\t\t\"caravans.0.isPermResidence\": false,\r\n\t\t\"caravans.0.caravanUsageType\": \"private\",\r\n\t\t\"caravans.0.contentsCover\": true,\r\n\t\t\"caravans.0.purchaseMonthYear\": moment().tz(\"Australia/Sydney\").format('YYYY-MM'),\r\n\t\t\"caravans.0.yearsContinuousInsurance\": \"0\",\r\n\t\t\"caravans.0.garageAddress.addressType\": \"postal\",\r\n\t\t\"caravans.0.drivers.*.driver.licenceType\": \"full\",\r\n\t\t\"caravans.0.drivers.*.driver.yearsLicenced\": \"6\",\r\n\t\t\"caravans.0.drivers.*.driver.hasConviction\": false,\r\n\t\t\"caravans.0.drivers.*.driver.hasClaim\": false,\r\n\t\t\"caravans.0.drivers.*.driver.hasInfringement\": false,\r\n\t\t\"caravans.0.drivers.*.driver.hasLostLicence\": false,\r\n\t\t\"caravans.0.drivers.*.driver.zeroDemerits\": true ,\r\n\t\t\"caravans.0.drivers.*.driver.previousInsurer\": \"none\",\r\n\t\t\"caravans.0.drivers.*.driver.person.contactType\": \"person\",\r\n\t\t\"caravans.0.drivers.*.driver.person.gender\": \"male\",\r\n\t\t\"caravans.0.drivers.*.driver.person.firstName\": \"An@n\",\r\n\t\t\"caravans.0.drivers.*.driver.person.lastName\": \"An@nym@us\",\r\n\t\t\"caravans.0.drivers.*.driver.person.isJustInsured\": false,\r\n\t\t\"caravans.0.drivers.*.driver.person.dateOfBirth\": \"01/06/2000\",\r\n\t\t\"caravans.0.availableCoverTypes\" : [\r\n \"comprehensive\"\r\n ],\r\n\t\t\"availableSumInsuredTypes\": [\r\n \"market\",\r\n \"agreed\"\r\n ],\r\n\t\t\"caravans.0.excess.standardVehicleExcess\": 650,\r\n\t \"caravans.0.excess.ageExcessTier1\": 1000,\r\n\t \"caravans.0.excess.ageExcessTier2\": 750,\r\n\t \"caravans.0.excess.undeclaredDriverTier2\": 500,\r\n\t \"caravans.0.excess.inexperiencedDriver\": 750,\r\n\t\t\"policyHolders.0.mainHolder\": true,\r\n\t\t\"policyHolders.0.contact.isJustInsured\": false,\r\n\t\t\"policyHolders.0.contact.contactType\": \"person\",\r\n\t\t\"policyHolders.0.contact.dateOfBirth\": \"01/06/2000\",\r\n\t\t// full quote transformation :\r\n \"status\" : \"Draft\",\r\n\t\t\"documentDeliveryMethod\": 'email',\r\n\t\t\"displayStatus\": 'Draft',\r\n\t\t\"periodStartDateTimeAEDT\": formatDateAndTimeTheGuidewireWay(moment(), moment()),\r\n\t\t\"periodEndDateTimeAEDT\" : formatDateAndTimeTheGuidewireWay(moment().add(1,'years')),\r\n\t\t\"channel\": 'portal',\r\n\t\t\"caravans.0.drivers.*.driverUsage\" : \"other\",\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar staticValuesMappingNew = ApplyDefaultExcess(userInput);\r\n\t\tvar transformedRequest = jsonMapper.setDefault(userInput, staticValuesMappingNew) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction ApplyDefaultExcess(userInput) {\r\n\t\tvar staticValuesMappingNew = staticValuesMapping;\r\n\t\tvar excessValue = quoteOptions.getStateDefaultVoluntaryExcess(userInput.policyAddress.state);\r\n\t\tif(excessValue != null){\r\n\t\t\tvar tempObj = {\"caravans.0.excess.voluntaryVehicleExcess\": excessValue};\r\n\t\t\tstaticValuesMappingNew = Object.extend(staticValuesMapping, tempObj);\r\n\t\t}\r\n\t\treturn staticValuesMappingNew;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction CaravanFormatConverterTransformer(Util, jsonMapper) {\r\n\r\n\tfunction convertDateAndTimeTheGuidewireWay(dateTime) {\r\n\t\tvar format = \"{0} at {1} AEST\" ;\r\n\t\treturn Util.stringFormat(format, dateTime.format('Do MMM YYYY') , dateTime.format('h:mma')) ;\r\n\t}\r\n\r\n\tfunction convertDate(dateString) {\r\n\t\tvar date = moment(dateString, 'DD/MM/YYYY') ;\r\n\t\tvar formattedDate = date.format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\r\n\t\t// throw 'date format exception formatting ' + dateString ;\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertDateToGWTimeZone(dateString) {\r\n\t\tvar formattedDate = moment(dateString,'DDMMYYYY').tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\t\tif ( formattedDate != \"Invalid date\")\r\n\t\t\treturn formattedDate;\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction convertGender(gender) {\r\n\t\tvar gc = {\r\n\t\t\tmale : 'M',\r\n\t\t\tfemale : 'F',\r\n\t\t\tintersex : 'I',\r\n\t\t};\r\n\r\n\t\treturn gc[gender] ;\r\n\t}\r\n\r\n\tfunction convertLengthUnits(inUnit) {\r\n\t\tvar units = {\r\n\t\t\tfeet : 'ft',\r\n\t\t\tmetres : 'm',\r\n\t\t};\r\n\r\n\t\treturn units[inUnit] ;\r\n\t}\r\n\r\n\tfunction convertFalsyToUnknown(value) {\r\n\t\tif ( value === null || value === undefined )\r\n\t\t\treturn 'unknown';\r\n\r\n\t\treturn convertBooleanToYesNo(value) ;\r\n\t}\r\n\r\n\tfunction convertBooleanToYesNo(value) {\r\n\t\treturn value ? 'yes' : 'no' ;\r\n\t}\r\n\r\n\tfunction convertStringToInt(value) {\r\n\t\treturn !!value ? parseInt(value) : value;\r\n\t}\r\n\r\n\tfunction convertIntToString(value) {\r\n\t\treturn !!value ? value.toString() : value;\r\n\t}\r\n\r\n\tfunction convertYearsContinuousInsurance(value) {\r\n\t\treturn value === '3+' ? 4 : value;\r\n\t}\r\n\r\n\r\n\tvar convertValueMapping = {\r\n\t\t'periodStartDate': convertDateToGWTimeZone,\r\n\r\n\t\t'policyHolders.*.contact.gender' : convertGender,\r\n\t\t'policyHolders.*.contact.hasClaim' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.hasConviction' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyLostLicences' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.anyInfringements' : convertFalsyToUnknown,\r\n\t\t'policyHolders.*.contact.dateOfBirth' : convertDate,\r\n\r\n\t\t'caravans.0.caravanInfo.weight' : convertIntToString,\r\n\t\t'caravans.0.caravanInfo.caravanLength' : convertIntToString,\r\n\t\t'caravans.0.caravanInfo.lengthUnits' : convertLengthUnits,\r\n\t\t'caravans.0.timeSinceLastClaim' : convertIntToString,\r\n\r\n\t\t'caravans.0.drivers.*.driver.person.dateOfBirth' : convertDate,\r\n\t\t'caravans.0.drivers.*.driver.person.gender' : convertGender,\r\n\t\t\"caravans.0.drivers.*.driver.hasConviction\": convertFalsyToUnknown,\r\n\t\t\"caravans.0.drivers.*.driver.person.hasConviction\": convertBooleanToYesNo,\r\n\t\t\"caravans.0.drivers.*.driver.hasClaim\": convertFalsyToUnknown,\r\n\t\t\"caravans.0.drivers.*.driver.person.hasClaim\": convertBooleanToYesNo,\r\n\t\t\"caravans.0.drivers.*.driver.hasLostLicence\": convertFalsyToUnknown,\r\n\t\t\"caravans.0.drivers.*.driver.hasInfringement\": convertFalsyToUnknown,\r\n\r\n\t\t\"caravans.0.yearsContinuousInsurance\": convertYearsContinuousInsurance,\r\n\t};\r\n\r\n\tfunction transform(intermediateRequest, userInput) {\r\n\t\tvar transformedRequest = jsonMapper.convert(intermediateRequest, convertValueMapping) ;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction CaravanPolicyHolderHandler(Util, publicIDTransformer) {\r\n\r\n\t\r\n\tfunction handle(quoteRequest, userInput) {\r\n\t\tvar mainPolicyholder = quoteRequest.policyHolders.filter(function (item) {\r\n return item['mainHolder'];\r\n })[0];\r\n\r\n var mainDriver = quoteRequest.caravans[0].drivers.filter(function (item) {\r\n return item['driverUsage'] == 'main';\r\n })[0];\r\n\r\n if ((!userInput.caravanForm.mainPolicyHolder ||\r\n (userInput.caravanForm.mainPolicyHolder && userInput.caravanForm.mainPolicyHolder.isMainDriverMainPolicyHolder))) {\r\n mainPolicyholder.contact.publicID = mainDriver.driver.person.publicID;\r\n } else if (userInput.caravanForm.mainPolicyHolder != undefined && userInput.caravanForm.mainPolicyHolder.isMainDriverMainPolicyHolder != undefined &&\r\n !userInput.caravanForm.mainPolicyHolder.isMainDriverMainPolicyHolder &&\r\n mainPolicyholder.contact.publicID == mainDriver.driver.person.publicID) {\r\n quoteRequest = publicIDTransformer.transform(quoteRequest);\r\n delete quoteRequest.secret;\r\n delete quoteRequest.quoteID;\r\n }\r\n\r\n if (mainPolicyholder.contact.publicID == mainDriver.driver.person.publicID) {\r\n mainDriver.driver.person.passwordQuestion = mainPolicyholder.contact.passwordQuestion;\r\n mainDriver.driver.person.passwordAnswer = mainPolicyholder.contact.passwordAnswer;\r\n mainDriver.driver.person.primaryPhone = mainPolicyholder.contact.primaryPhone;\r\n \r\n\t\t\tswitch (mainPolicyholder.contact.primaryPhone) {\r\n\t\t\t\tcase 'mobile':\r\n\t\t\t\t\tmainDriver.driver.person.cellPhone = mainPolicyholder.contact.cellPhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'home':\r\n\t\t\t\t\tmainDriver.driver.person.homePhone = mainPolicyholder.contact.homePhone;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'work':\r\n\t\t\t\t\tmainDriver.driver.person.workPhone = mainPolicyholder.contact.workPhone;\r\n\t\t\t\t\tbreak;\r\n }\r\n \r\n delete mainPolicyholder.contact.drivingHistory;\r\n }\r\n\r\n return quoteRequest;\r\n\t}\r\n\r\n return {\r\n\t\thandle: handle\r\n\t}\r\n};\n\"use strict\";\r\n\r\nfunction CaravanPublicIDTransformer(Util, jsonMapper, serviceResponseRepository, aggregatedRemoveService) {\r\n\r\n\tvar currentResponse = null;\r\n\tvar driverUniqueIdCtr = 1;\r\n\tvar historyUniqueIdCtr = 1;\r\n\r\n\tfunction forgePublicId(moduleName) {\r\n\t\treturn Util.stringFormat('portal:{0}-{1}', moduleName, Util.generateRandomString(15));\r\n\t}\r\n\r\n\tfunction hasValidGWPublicID(publicID) {\r\n\t\tif (publicID && publicID.indexOf('portal:') === -1)\r\n\t\t\treturn true;\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction hash(value) {\r\n\t\treturn md5(value);\r\n\t}\r\n\r\n\tfunction fetchFromPreviousResponse(path) {\r\n\t\tif (currentResponse)\r\n\t\t\treturn Util.findHierarchyStringInObject(currentResponse, path, '.');\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tfunction convertPublicID(path, moduleName) {\r\n\t\tif (currentResponse) {\r\n\t\t\tvar lastPublicID = fetchFromPreviousResponse(path);\r\n\t\t\tif (lastPublicID)\r\n\t\t\t\treturn lastPublicID;\r\n\t\t}\r\n\r\n\t\treturn forgePublicId(moduleName);\r\n\t}\r\n\r\n\r\n\tvar moduleNameMapping = {\r\n\t\t'policyHolders': 'PolicyHolder[]',\r\n\t\t'policyAddress': 'Address',\r\n\t\t'caravan': \"QPCCaravanTrailer\",\r\n\t\t'driver': 'QPCVehicleDriver',\r\n\t\t'policyDriver': 'QPCPolicyDriver',\r\n\t\t'person': 'Person',\r\n\t\t'contentsItems': 'QPCSpecifiedItem',\r\n\t\t'coverageOptions': 'QPCLayupCover',\r\n\t\t'driverHistory': \"QPCDriverHistory\",\r\n\t\t\"pattern\": \"qbePattern\"\r\n\t};\r\n\r\n\tvar publicIDTransformationMapping = {\r\n\t\t\"policyAddress.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress)\r\n\t\t},\r\n\t\t\"caravans.0.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.caravan)\r\n\t\t},\r\n\t\t\"caravans.0.garageAddress.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress)\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driver)\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.uniqueID\": function () {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyDriver)\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.person.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person);\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.person.primaryAddress.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress);\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.driverHistory.*.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driverHistory)\r\n\t\t},\r\n\t\t\"caravans.0.drivers.*.driver.driverHistory.*.uniqueID\": function () {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person)\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.primaryAddress.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.policyAddress)\r\n\t\t},\r\n\t\t\"policyHolders.*.contact.drivingHistory.*.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.driverHistory)\r\n\t\t},\r\n\t\t\"caravans.0.specifiedItems.*.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.contentsItems)\r\n\t\t},\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDTransformationMapping = {\r\n\t\t\"policyHolders.*.contact.authorisedPersons.0.person.publicID\": function () {\r\n\t\t\treturn forgePublicId(moduleNameMapping.person)\r\n\t\t},\r\n\t}\r\n\r\n\tvar publicIDConversionMapping = {\r\n\t\t\"policyAddress.publicID\": function (val) {\r\n\t\t\treturn convertPublicID('policyAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.publicID\": function (val) {\r\n\t\t\treturn convertPublicID('caravans.0.publicID', moduleNameMapping.caravan);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.uniqueID\": function () {\r\n\t\t\treturn driverUniqueIdCtr++;\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.driverHistory.*.uniqueID\": function () {\r\n\t\t\treturn historyUniqueIdCtr++;\r\n\t\t},\r\n\r\n\t\t\"caravans.0.garageAddress.publicID\": function (val) {\r\n\t\t\treturn convertPublicID('caravans.0.garageAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\r\n\t\t\"policyHolders.*.contact.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.publicID', moduleNameMapping.policyHolders);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + '.publicID', moduleNameMapping.driver);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + '.driver.publicID', moduleNameMapping.policyDriver);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.person.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + '.driver.person.publicID', moduleNameMapping.person);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.person.primaryAddress.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + 'driver.person.primaryAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.drivers.*.driver.driverHistory.*.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.drivers.' + mappedValueStarIndices[0] + '.driver.driverHistory.' + mappedValueStarIndices[1] + '.publicID', moduleNameMapping.driverHistory);\r\n\t\t},\r\n\r\n\t\t\"policyHolders.*.contact.primaryAddress.publicID\": function (val) {\r\n\t\t\treturn convertPublicID('policyAddress.publicID', moduleNameMapping.policyAddress);\r\n\t\t},\r\n\r\n\t\t\"caravans.0.specifiedItems.*.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('caravans.0.specifiedItems.' + mappedValueStarIndices[0] + '.publicID', moduleNameMapping.contentsItems);\r\n\t\t},\r\n\r\n\t\t'policyHolders.*.contact.drivingHistory.*.publicID': function (val, mappedValueStarIndex) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndex[0] + '.contact.drivingHistory.' + mappedValueStarIndex[1] + '.publicID', moduleNameMapping.drivingHistory);\r\n\t\t},\r\n\r\n\t};\r\n\r\n\tvar authorisedPersonsPublicIDConversionMapping = {\r\n\t\t\"policyHolders.*.contact.authorisedPersons.0.person.publicID\": function (val, mappedValueStarIndices) {\r\n\t\t\treturn convertPublicID('policyHolders.' + mappedValueStarIndices[0] + '.contact.authorisedPersons.0.person.publicID.', moduleNameMapping.person);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction removeDeletedAdditionalDrivers(transformedRequest) {\r\n\t\tvar removedDrivers = aggregatedRemoveService.getList() ? aggregatedRemoveService.getList()['driver'] : null;\r\n\t\tvar savedDrivers = fetchFromPreviousResponse('caravans.0.drivers');\r\n\t\tif (savedDrivers && removedDrivers) {\r\n\t\t\tangular.forEach(removedDrivers, function (removedDriver) {\r\n\t\t\t\tvar matchingDriver = savedDrivers.filter(function (driver) {\r\n\t\t\t\t\treturn driver.driver.person.firstName == removedDriver.person.firstName &&\r\n\t\t\t\t\t\tdriver.driver.person.lastName == removedDriver.person.lastName;\r\n\t\t\t\t});\r\n\t\t\t\tmatchingDriver = matchingDriver[0] || null;\r\n\t\t\t\tif (matchingDriver) {\r\n\t\t\t\t\tmatchingDriver.markedForDelete = true;\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers.push(matchingDriver);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\taggregatedRemoveService.clear('driver');\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateSpecifiedItems(transformedRequest) {\r\n\t\tif (!transformedRequest.caravans[0].specifiedContents) {\r\n\t\t\tdelete transformedRequest.caravans[0].specifiedItems;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction removeDeletedDriverHistoryArrays(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.caravans[0].drivers;\r\n\t\tangular.forEach(drivers, function (driver, index) {\r\n\t\t\tvar savedHistories = fetchFromPreviousResponse('caravans.0.drivers.' + index + '.driver.driverHistory');\r\n\t\t\tif (savedHistories && savedHistories.length > 0) {\r\n\t\t\t\tvar driverHistories = driver.driver.driverHistory;\r\n\t\t\t\tangular.forEach(savedHistories, function (savedHistory) {\r\n\t\t\t\t\tvar matchingInput = driverHistories.filter(function (history) {\r\n\t\t\t\t\t\treturn history.publicID == savedHistory.publicID;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!matchingInput || matchingInput.length == 0) {\r\n\t\t\t\t\t\tsavedHistory.markedForDelete = true;\r\n\t\t\t\t\t\tdriverHistories.push(savedHistory);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction removeEmptyDriverHistoryArrays(transformedRequest) {\r\n\t\tvar vehicle = transformedRequest.caravans[0];\r\n\t\tif (vehicle && vehicle.drivers) {\r\n\t\t\tvehicle.drivers.forEach(function (policyDriver) {\r\n\t\t\t\tif (policyDriver.driver &&\r\n\t\t\t\t\tpolicyDriver.driver.driverHistory &&\r\n\t\t\t\t\tArray.isArray(policyDriver.driver.driverHistory) &&\r\n\t\t\t\t\tpolicyDriver.driver.driverHistory.length == 0)\r\n\t\t\t\t\tdelete policyDriver.driver.driverHistory;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//dd-973 - requiring a sequence number for driver infringement\r\n\tfunction addUniqueHistoryID(transformedRequest) {\r\n\t\tvar drivers = transformedRequest.caravans[0].drivers;\r\n\r\n\t\tangular.forEach(drivers, function (driver, index) {\r\n\t\t\thistoryUniqueIdCtr = 1;\r\n\t\t\tvar driverHistory = driver.driver.driverHistory;\r\n\t\t\tif (driverHistory) {\r\n\t\t\t\tangular.forEach(driverHistory, function (driverHistory, index) {\r\n\t\t\t\t\tdriverHistory.uniqueID = historyUniqueIdCtr;\r\n\t\t\t\t\thistoryUniqueIdCtr++;\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(intermediateRequest, response) {\r\n\t\tcurrentResponse = response;\r\n\t\tdriverUniqueIdCtr = 1;\r\n\t\tvar transformedRequest = intermediateRequest;\r\n\r\n\t\tif (transformedRequest.policyHolders[0] &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact &&\r\n\t\t\ttransformedRequest.policyHolders[0].contact.authorisedPersons\r\n\t\t) {\r\n\t\t\tpublicIDConversionMapping = Object.extend(publicIDConversionMapping, authorisedPersonsPublicIDConversionMapping);\r\n\t\t\tpublicIDTransformationMapping = Object.extend(publicIDTransformationMapping, authorisedPersonsPublicIDTransformationMapping);\r\n\t\t}\r\n\r\n\t\tif (!currentResponse)\r\n\t\t\ttransformedRequest = jsonMapper.transform(intermediateRequest, publicIDTransformationMapping);\r\n\t\telse {\r\n\t\t\ttransformedRequest = jsonMapper.convert(intermediateRequest, publicIDConversionMapping);\r\n\t\t}\r\n\r\n\t\ttransformedRequest = addUniqueHistoryID(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedAdditionalDrivers(transformedRequest);\r\n\t\ttransformedRequest = removeDeletedDriverHistoryArrays(transformedRequest);\r\n\t\ttransformedRequest = removeEmptyDriverHistoryArrays(transformedRequest);\r\n\t\tupdateSpecifiedItems(transformedRequest);\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\nfunction CaravanQuoteResultModel(quoteResultResponse) {\r\n\tthis.isCoverAvailable = quoteResultResponse.quoteResult.totalPremium !== undefined ;\r\n\tthis.coverType = quoteResultResponse.caravans[0].coverType;\r\n\tthis.quoteResult = quoteResultResponse.quoteResult;\r\n\tthis.paymentPlan = quoteResultResponse.paymentPlan;\r\n\tthis.totalPremium = quoteResultResponse.quoteResult.totalPremium ;\r\n\tthis.totalFSL = quoteResultResponse.quoteResult.totalFSL ;\r\n\tthis.totalGST = quoteResultResponse.quoteResult.totalGST ;\r\n\tthis.totalStampDuty = quoteResultResponse.quoteResult.totalStampDuty ;\r\n\tthis.premiumAfterDiscount = quoteResultResponse.quoteResult.premiumAfterDiscount ;\r\n\tthis.paymentFrequency = quoteResultResponse.paymentPlan ? quoteResultResponse.paymentPlan.paymentFrequency : null ;\r\n\tthis.excess = quoteResultResponse.caravans[0].excess ;\r\n\tthis.availableSumInsuredTypes = quoteResultResponse.caravans[0].availableSumInsuredTypes;\r\n\r\n\tthis.coverageOptions = quoteResultResponse.caravans[0].coverageOptions ;\r\n\tthis.response = quoteResultResponse ;\r\n\r\n}\r\n\nfunction CaravanRetrieveSavedQuoteResponseTransformer($filter, jsonMapper,Util) {\r\n // transform functions\r\n var transformers = {\r\n camelcase: function(value) {\r\n if(value) {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n },\r\n minimumTodaysDate: function(dateString) {\r\n var date = moment(dateString, 'YYYY-MM-DD')\r\n , today = new moment()\r\n , biggerDate = date >= today ? date : today ;\r\n\r\n return biggerDate.format('DD/MM/YYYY');\r\n }\r\n ,date: function(dateString) {\r\n var date = moment(dateString, 'YYYY-MM-DD') ;\r\n return date.format('DD/MM/YYYY') ;\r\n },\r\n financeType: function(financeType) {\r\n switch(financeType) {\r\n case 'none':\r\n return '';\r\n break;\r\n }\r\n },\r\n convertGender: function(gender) {\r\n var gc = {\r\n M : 'male',\r\n F : 'female',\r\n I : 'intersex',\r\n };\r\n return gc[gender] ;\r\n },\r\n convertUnit: function(unit) {\r\n var gc = {\r\n 'ft' : 'feet',\r\n 'm' : 'metres'\r\n };\r\n return gc[unit] ;\r\n },\r\n convertSpecifiedCategory: function(category) {\r\n var gc = {\r\n 'camping_equipment' : 'Camping Equipment',\r\n 'commnav_equipment' : 'Communication and Navigation Equipment',\r\n 'electrical_equipment' : 'Electrical Equipment',\r\n 'entertain_equipment' : 'Entertainment Equipment',\r\n 'other' : 'Other',\r\n 'sporting_equipment' : 'Sporting Equipment'\r\n\r\n };\r\n return gc[category] ;\r\n },\r\n yesNo: function(value) {\r\n return value == 'yes' ? true : false;\r\n },\r\n checkbox: function(value) {\r\n },\r\n state: function(state) {\r\n if ( state )\r\n return state.replace('AU_', '');\r\n },\r\n coverType: function(coverType) {\r\n if(coverType === 'third_party' || coverType === 'third_party_fire_theft') {\r\n return 'third_party';\r\n }\r\n return coverType;\r\n },\r\n purchaseMonthFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n return monthYear.split('-')[1];\r\n }else{\r\n return '';\r\n }\r\n\r\n },\r\n purchaseYearFromMonthYear: function(monthYear) {\r\n if(monthYear){\r\n return monthYear.split('-')[0];\r\n }else{\r\n return '';\r\n }\r\n },\r\n thirdPartyPref: function(coverType) {\r\n if(coverType === 'comprehensive') {\r\n return null;\r\n }\r\n return coverType;\r\n },\r\n convertToLabelValue: function(o) {\r\n if ( o )\r\n return {\r\n label : o.name,\r\n value : o.code,\r\n }\r\n\r\n return null;\r\n },\r\n yearsHeld: function(years) {\r\n var yearsHeld;\r\n\r\n switch (years) {\r\n case '7':\r\n yearsHeld = 'lessThan_1';\r\n break;\r\n case '6':\r\n yearsHeld = 'greaterThan_5';\r\n break;\r\n default:\r\n yearsHeld = years;\r\n }\r\n\r\n return yearsHeld;\r\n }\r\n };\r\n function transformPerson(person) {\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date\r\n };\r\n var transformedPerson = jsonMapper.convert(jsonMapper.transform(person, transformMapping), convertMapping);\r\n return transformedPerson.returnObject;\r\n }\r\n\r\n function transformDriver(driver) {\r\n var transformMapping = {\r\n 'returnObject.yearsHeld': '=_input.driver.yearsLicenced',\r\n 'returnObject.licenceType': '=_input.driver.licenceType',\r\n 'returnObject.noClaimBonus': '=_input.driver.noClaimBonus',\r\n 'returnObject.previousInsurer': '=_input.driver.currentInsurer',\r\n 'returnObject.licensedToRide': '=_input.licensedToRide',\r\n 'returnObject.threeYears_accidentsClaims': '=_input.driver.hasClaim',\r\n 'returnObject.fiveYears_chargedOrConvicted': '=_input.driver.hasConviction',\r\n 'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled': '=_input.driver.hasLostLicence',\r\n 'returnObject.visaType': '=_input.driver.visaType',\r\n },\r\n convertMapping = {\r\n 'returnObject.yearsHeld': transformers.yearsHeld,\r\n 'returnObject.licensedToRide': transformers.yesNo,\r\n 'returnObject.threeYears_accidentsClaims': transformers.yesNo,\r\n 'returnObject.fiveYears_chargedOrConvicted': transformers.yesNo,\r\n 'returnObject.threeYears_restrictedSuspendedDisqualifiedCancelled': transformers.yesNo\r\n };\r\n\r\n var mappedRider = jsonMapper.transform(driver, transformMapping);\r\n var transformedRider = jsonMapper.convert(mappedRider, convertMapping);\r\n var returnObject = transformedRider.returnObject;\r\n if(driver.driver.person) {\r\n transformedRider.returnObject.person = transformPerson(driver.driver.person);\r\n }\r\n\r\n // extract driver history\r\n returnObject.fourYears_chargedOrConvictedOffencesDetails = [];\r\n returnObject.fourYears_vehicleAccidentsClaimsDetails = [];\r\n returnObject.tenYears_chargedOrConvictedOffencesDetails = [];\r\n returnObject.fourYears_licenceRSDCDetails = [];\r\n\r\n if (!!driver.driver.driverHistory) {\r\n driver.driver.driverHistory.forEach(function(record) {\r\n var matchedPattern = {};\r\n\r\n switch (record.pattern.filter1) {\r\n case 'infringement_demerit':\r\n // case 'infringement_licence':\r\n returnObject.fourYears_chargedOrConvictedOffencesDetails.push(\r\n extractHistory(globals.fourYears_offences.options, record)\r\n );\r\n break;\r\n case 'infringement_licence':\r\n returnObject.fourYears_licenceRSDCDetails.push(\r\n extractHistory(globals.incidents.options, record)\r\n );\r\n break;\r\n case 'claim' :\r\n returnObject.fourYears_vehicleAccidentsClaimsDetails.push(\r\n extractHistory(globals.accidents.options, record));\r\n break;\r\n case 'conviction' :\r\n returnObject.tenYears_chargedOrConvictedOffencesDetails.push(\r\n extractHistory(globals.tenYears_offences.options, record)\r\n );\r\n break;\r\n\r\n }\r\n });\r\n }\r\n\r\n returnObject.fourYears_chargedOrConvictedOffences = returnObject.fourYears_chargedOrConvictedOffencesDetails.length > 0 ;\r\n returnObject.fourYears_vehicleAccidentsClaims = returnObject.fourYears_vehicleAccidentsClaimsDetails.length > 0 ;\r\n returnObject.tenYears_chargedOrConvictedOffences = returnObject.tenYears_chargedOrConvictedOffencesDetails.length > 0 ;\r\n returnObject.fourYears_licenceRSDC = returnObject.fourYears_licenceRSDCDetails.length > 0 ;\r\n\r\n return returnObject;\r\n }\r\n\r\n function extractHistory(collection, record) {\r\n var matchedPattern = {};\r\n var month = {};\r\n var year = {};\r\n\r\n matchedPattern = collection.find(function(opt) {\r\n return opt.publicID == record.pattern.publicID;\r\n });\r\n\r\n month.label = month.value = moment(record.month, 'MM').format('MMMM') ; // Util.capitalize(record.month.toString());\r\n year.label = year.value = Util.capitalize(record.year.toString());\r\n\r\n record.description = matchedPattern;\r\n record.month = month;\r\n record.year = year;\r\n\r\n delete record.pattern;\r\n\r\n return record;\r\n }\r\n\r\n function transformPolicyHolder(holder) {\r\n\r\n var transformMapping = {\r\n 'returnObject.title': '=_input.prefix',\r\n 'returnObject.firstName': '=_input.firstName',\r\n 'returnObject.lastName': '=_input.lastName',\r\n 'returnObject.gender': '=_input.gender',\r\n 'returnObject.dateOfBirth': '=_input.dateOfBirth',\r\n 'returnObject.fourYears_chargedOrConvictedOffences': '=_input.hasConviction',\r\n 'returnObject.fourYears_licenceRSDC': '=_input.hasLostLicence',\r\n 'returnObject.fourYears_vehicleAccidentsClaims': '=_input.hasClaim',\r\n 'returnObject.tenYears_chargedOrConvictedOffences': '=_input.hasInfringement'\r\n },\r\n convertMapping = {\r\n 'returnObject.title': transformers.camelcase,\r\n 'returnObject.gender': transformers.convertGender,\r\n 'returnObject.dateOfBirth': transformers.date,\r\n 'returnObject.fourYears_chargedOrConvictedOffences': transformers.yesNo,\r\n 'returnObject.fourYears_licenceRSDC': transformers.yesNo,\r\n 'returnObject.fourYears_vehicleAccidentsClaims': transformers.yesNo,\r\n 'returnObject.tenYears_chargedOrConvictedOffences': transformers.yesNo\r\n };\r\n\r\n var transformedPolicyHolder = jsonMapper.convert(jsonMapper.transform(holder, transformMapping), convertMapping);\r\n\r\n return transformedPolicyHolder.returnObject;\r\n }\r\n\r\n /**\r\n * Transforms the retrievedQuoteRepsonse into a format that can be injected into the userInputRepository\r\n * The returned value will populate all the forms in the quote process\r\n * @param {Object} retrievedQuoteResponse Response object from the retrieveSavedQuote service\r\n * @returns {Object} Transformed object ready to inject into the userInputRepository\r\n */\r\n function transform(retrievedQuoteResponse) {\r\n \tvoid 0;\r\n\r\n var transformMapping = {\r\n\t\t\t\t'returnObject.email': '=_input.email',\r\n\r\n\t\t\t\t// getStarted\r\n\t\t\t\t'returnObject.getStarted.policyStartDate':\r\n\t\t\t\t\t'=_input.periodStartDate',\r\n\r\n\t\t\t\t// aboutYourCaravan\r\n\t\t\t\t'returnObject.aboutYourCaravan.vehicleType':\r\n\t\t\t\t\t'=_input.caravans.0.caravanType',\r\n\t\t\t\t'returnObject.aboutYourCaravan.address':\r\n\t\t\t\t\t'=_input.caravans.0.garageAddress',\r\n\r\n\t\t\t\t// caravanDetails\r\n\t\t\t\t'returnObject.caravanDetails.vehicleSubType':\r\n\t\t\t\t\t'=_input.caravans.0.caravanSubType',\r\n\t\t\t\t'returnObject.caravanDetails.isCaravanRegistered':\r\n\t\t\t\t\t'=_input.caravans.0.isCaravanRegistered',\r\n\t\t\t\t'returnObject.caravanDetails.regoNumber':\r\n\t\t\t\t\t'=_input.caravans.0.registrationNumber',\r\n\t\t\t\t'returnObject.caravanDetails.locationDescription':\r\n\t\t\t\t\t'=_input.caravans.0.locationType',\r\n\t\t\t\t'returnObject.caravanDetails.security':\r\n\t\t\t\t\t'=_input.caravans.0.securityType',\r\n\t\t\t\t'returnObject.caravanDetails.primaryUse':\r\n\t\t\t\t\t'=_input.caravans.0.caravanUsageType',\r\n\t\t\t\t'returnObject.caravanDetails.existingDamage':\r\n\t\t\t\t\t'=_input.caravans.0.existingDamageType',\r\n\t\t\t\t'returnObject.caravanDetails.finance':\r\n\t\t\t\t\t'=_input.caravans.0.financeType',\r\n\t\t\t\t'returnObject.caravanDetails.financeWith':\r\n\t\t\t\t\t'=_input.caravans.0.financeCompany',\r\n\t\t\t\t'returnObject.caravanDetails.whenDidYouBuyYear':\r\n\t\t\t\t\t'=_input.caravans.0.purchaseMonthYear',\r\n\t\t\t\t'returnObject.caravanDetails.whenDidYouBuyMonth':\r\n\t\t\t\t\t'=_input.caravans.0.purchaseMonthYear',\r\n\t\t\t\t'returnObject.caravanDetails.purchasePrice':\r\n\t\t\t\t\t'=_input.caravans.0.purchasePrice',\r\n\t\t\t\t'returnObject.caravanDetails.cost':\r\n\t\t\t\t\t'=_input.caravans.0.purchasePrice',\r\n\t\t\t\t'returnObject.caravanDetails.isPremanentResidence':\r\n\t\t\t\t\t'=_input.caravans.0.isPermResidence',\r\n\t\t\t\t'returnObject.caravanDetails.nonRetractableJacksorPermanantFoundations':\r\n\t\t\t\t\t'=_input.caravans.0.isCaravanOnNonRetractableJacks',\r\n\t\t\t\t'returnObject.caravanDetails.permanentlyConnected':\r\n\t\t\t\t\t'=_input.caravans.0.isCaravanConnectedToPlumbing',\r\n\r\n\t\t\t\t// aboutYourContents\r\n\t\t\t\t'returnObject.aboutYourContents.insureContents':\r\n\t\t\t\t\t'=_input.caravans.0.contentsCover',\r\n\t\t\t\t'returnObject.aboutYourContents.generalContentsValue':\r\n\t\t\t\t\t'=_input.caravans.0.contentsCoverAmount',\r\n\t\t\t\t'returnObject.aboutYourContents.contentsItems':\r\n\t\t\t\t\t'=_input.caravans.0.specifiedItems',\r\n\r\n\t\t\t\t// quote excess and sum insured values\r\n\t\t\t\t'returnObject.sumInsured.agreedValue':\r\n\t\t\t\t\t'=_input.caravans.0.agreedAmountValue',\r\n\t\t\t\t'returnObject.sumInsured.annexeReplacementCost':\r\n\t\t\t\t\t'=_input.caravans.0.replacementCostValue',\r\n\t\t\t\t'returnObject.excess.voluntaryVehicleExcess':\r\n\t\t\t\t\t'=_input.caravans.0.excess.voluntaryVehicleExcess',\r\n\r\n\t\t\t\t//tell us a bit more -------------------------------------\r\n\t\t\t\t'returnObject.tellUsABitMore.yourEmailAddress': '=_input.email',\r\n\t\t\t\t'returnObject.tellUsABitMore.promotionalCode':\r\n\t\t\t\t\t'=_input.campaignCode',\r\n\t\t\t\t'returnObject.stampDutyExemption.isSmallBusiness':\r\n\t\t\t\t\t'=_input.caravans.0.isSmallBusiness',\r\n\t\t\t\t//driver\r\n\t\t\t\t// 'vehicleForm.driver.paymentOptions': '=_input.?',\r\n\r\n\t\t\t\t// optional benefits\r\n\t\t\t\t// 'returnObject.discountOptions.discountLayup': '=_input.caravans.0.coverageOptions.0.activeLayupMonths',\r\n\r\n\t\t\t\t// registration details\r\n\t\t\t\t'returnObject.caravanInfo': '=_input.caravans.0.caravanInfo',\r\n\t\t\t\t'returnObject.retrievedQuoteRego.rego':\r\n\t\t\t\t\t'=_input.caravans.0.registrationNumber',\r\n\t\t\t\t'returnObject.retrievedQuoteRego.state':\r\n\t\t\t\t\t'=_input.caravans.0.garageAddress.state',\r\n\r\n\t\t\t\t// Contact\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordQuestion':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordQuestion',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.passwordAnswer':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.passwordAnswer',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.primaryPhone':\r\n\t\t\t\t\t'=_input.policyHolders.0.contact.primaryPhone',\r\n\t\t\t\t'returnObject.mainPolicyHolderContact.personalContactDetailsMailingPreference':\r\n\t\t\t\t\t'=_input.documentDeliveryMethod'\r\n\t\t\t},\r\n\t\t\tconvertMapping = {\r\n\t\t\t\t'returnObject.getStarted.policyStartDate':\r\n\t\t\t\t\ttransformers.minimumTodaysDate,\r\n\t\t\t\t'returnObject.caravanDetails.whenDidYouBuyYear':\r\n\t\t\t\t\ttransformers.purchaseYearFromMonthYear,\r\n\t\t\t\t'returnObject.caravanDetails.whenDidYouBuyMonth':\r\n\t\t\t\t\ttransformers.purchaseMonthFromMonthYear,\r\n\t\t\t\t'returnObject.caravanDetails.financeWith':\r\n\t\t\t\t\ttransformers.convertToLabelValue\r\n\t\t\t};\r\n\r\n var transformedQuote = jsonMapper.convert(jsonMapper.transform(retrievedQuoteResponse, transformMapping), convertMapping);\r\n\r\n var returnObject = transformedQuote.returnObject;\r\n // set comprehensive preference to null if the coverType is third party\r\n void 0;\r\n // set primary phone number to mobile phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.cellPhone) {\r\n returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.cellPhone;\r\n }\r\n\r\n // set primary phone number to home phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.homePhone) {\r\n returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.homePhone;\r\n }\r\n\r\n // set primary phone number to work phone\r\n if(retrievedQuoteResponse.policyHolders[0].contact.workPhone) {\r\n returnObject.mainPolicyHolderContact.primaryPhoneNumber = retrievedQuoteResponse.policyHolders[0].contact.workPhone;\r\n } \r\n\r\n if ( returnObject.caravanInfo && returnObject.caravanInfo.vgiId ){\r\n returnObject.aboutYourCaravan.searchType = 'yearMakeModel' ;\r\n returnObject.aboutYourCaravan.vgiId = returnObject.caravanInfo.vgiId;\r\n // returnObject.aboutYourCaravan.vehicleKey = returnObject.caravanInfo.\r\n returnObject.aboutYourCaravan.description= 'returnObject.caravanInfo.';\r\n returnObject.aboutYourCaravan.modelYear= returnObject.caravanInfo.modelYear;\r\n returnObject.aboutYourCaravan.make= returnObject.caravanInfo.make;\r\n returnObject.aboutYourCaravan.model= returnObject.caravanInfo.model;\r\n returnObject.aboutYourCaravan.bodyStyle= returnObject.caravanInfo.bodyType;\r\n returnObject.aboutYourCaravan.ratingGrade= 'returnObject.caravanInfo.';\r\n returnObject.aboutYourCaravan.weight= returnObject.caravanInfo.weight;\r\n\r\n } else {\r\n if(returnObject.caravanInfo){\r\n returnObject.aboutYourCaravan.searchType = 'manually' ;\r\n returnObject.aboutYourCaravan.year= ''+returnObject.caravanInfo.modelYear;\r\n returnObject.aboutYourCaravan.make= returnObject.caravanInfo.make;\r\n returnObject.aboutYourCaravan.model= returnObject.caravanInfo.model;\r\n returnObject.aboutYourCaravan.bodyType= returnObject.caravanInfo.bodyType;\r\n returnObject.aboutYourCaravan.berths= parseInt(returnObject.caravanInfo.berths);\r\n returnObject.aboutYourCaravan.weight= parseInt(returnObject.caravanInfo.weight);\r\n returnObject.aboutYourCaravan.manualLength= parseInt(returnObject.caravanInfo.caravanLength);\r\n returnObject.aboutYourCaravan.manualLengthUnits= transformers.convertUnit(returnObject.caravanInfo.lengthUnits);\r\n returnObject.aboutYourCaravan.customBuilt= returnObject.caravanInfo.customBuilt;\r\n returnObject.aboutYourCaravan.numOfAxels= returnObject.caravanInfo.numberOfAxles;\r\n }\r\n\r\n }\r\n\r\n // region Sort drivers to put mainRider first in the list\r\n if(retrievedQuoteResponse.caravans && retrievedQuoteResponse.caravans.length && retrievedQuoteResponse.caravans[0].drivers) {\r\n var drivers = $filter('orderBy')(retrievedQuoteResponse.caravans[0].drivers, function(driver) {\r\n return driver.driverUsage == 'main' ? 0 : 1;\r\n });\r\n transformedQuote.returnObject.driver = {};\r\n transformedQuote.returnObject.driver.drivers = [];\r\n drivers.forEach(function(driver, index) {\r\n transformedQuote.returnObject.driver.drivers.push(transformDriver(driver));\r\n });\r\n \r\n //dd-1040-extend driver object to reflect data\r\n if(transformedQuote.returnObject.driver && transformedQuote.returnObject.driver.drivers[0]){\r\n var years = retrievedQuoteResponse.caravans[0].yearsContinuousInsurance == '4'? '3+' : parseInt(retrievedQuoteResponse.caravans[0].yearsContinuousInsurance);\r\n var claims = Object.extend(transformedQuote.returnObject.driver.drivers[0], {yearsContinuousInsurance: years,\r\n timeSinceLastClaim: retrievedQuoteResponse.caravans[0].timeSinceLastClaim});\r\n }\r\n }\r\n\r\n //add content items\r\n if(returnObject.aboutYourContents && returnObject.aboutYourContents.contentsItems){\r\n returnObject.aboutYourContents.contentsItems.forEach(function(item){\r\n var _label = transformers.convertSpecifiedCategory(item.category);\r\n var _category = {'label' : _label, 'value' : item.category };\r\n item.category = _category;\r\n });\r\n }\r\n\r\n if(retrievedQuoteResponse.caravans[0].caravanUsageType) {\r\n var usage = retrievedQuoteResponse.caravans[0].caravanUsageType;\r\n\t\t\tswitch (usage) {\r\n\t\t\t\tcase 'commercial':\r\n transformedQuote.returnObject.caravanDetails.commercialActivityType = retrievedQuoteResponse.caravans[0].businessUsageType;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'business':\r\n transformedQuote.returnObject.caravanDetails.businessActivityType = retrievedQuoteResponse.caravans[0].businessUsageType;\r\n\t\t\t\t\tbreak;\r\n\t\t\t} \r\n } \r\n\r\n // \"category\":{\"label\":\"Electrical Equipment\",\"value\":\"electrical_equipment\"}\r\n\r\n // convert discount layups\r\n // convertDiscountLayups: function(list) {\r\n // var rekeyedObject = {} ;\r\n\r\n // angular.forEach(list, function(value, index) {\r\n // rekeyedObject[value] = true ;\r\n // });\r\n\r\n // return rekeyedObject ;\r\n // }\r\n\r\n\r\n // set optional benefits\r\n // if(retrievedQuoteResponse.vehicles[0].coverageOptions.length) {\r\n // var coverageOptions = retrievedQuoteResponse.vehicles[0].coverageOptions;\r\n // coverageOptions.forEach(function(option, index) {\r\n // console.info(option);\r\n // })\r\n // }\r\n\r\n // set about your content section for items over $750\r\n\r\n // set contact policy holders\r\n // if(retrievedQuoteResponse.policyHolders && retrievedQuoteResponse.policyHolders.length) {\r\n // var policyHolders = retrievedQuoteResponse.policyHolders;\r\n // transformedQuote.returnObject.mainPolicyHolder = {};\r\n // policyHolders.forEach(function(holder, index) {\r\n // if(holder.mainHolder) {\r\n // transformedQuote.returnObject.mainPolicyHolder.mainPolicyHolder = true;\r\n // transformedQuote.returnObject.mainPolicyHolder = transformPolicyHolder(holder.contact);\r\n // transformedQuote.returnObject.mainPolicyHolder.policyHolders = [];\r\n // } else {\r\n // transformedQuote.returnObject.mainPolicyHolder.policyHolders.push(transformPolicyHolder(holder.contact));\r\n // }\r\n // });\r\n // }\r\n\r\n void 0;\r\n\r\n return transformedQuote.returnObject;\r\n }\r\n return {\r\n transform: transform\r\n }\r\n}\r\n\nfunction CaravanStructureRequestTransformer(\r\n\tjsonMapper,\r\n\tutil,\r\n\tquoteOptions,\r\n\tstorage\r\n) {\r\n\tvar structureQuoteMapping = {\r\n\t\tperiodStartDate: '=_input.caravanForm.getStarted.policyStartDate',\r\n\t\tcaravans: [],\r\n\r\n\t\t'caravans.0': '=_input.caravanForm.caravanDetails',\r\n\r\n\t\t'caravans.0.caravanType':\r\n\t\t\t'=_input.caravanForm.aboutYourCaravan.vehicleType',\r\n\t\t'caravans.0.caravanInfo': '=_regoSearch',\r\n\t\t'caravans.0.garageAddress': '=_addressSearch',\r\n\r\n\t\t// caravanDetails\r\n\t\t'caravans.0.registrationNumber':\r\n\t\t\t'=_input.caravanForm.caravanDetails.regoNumber',\r\n\t\t'caravans.0.locationType':\r\n\t\t\t'=_input.caravanForm.caravanDetails.locationDescription',\r\n\t\t'caravans.0.securityType':\r\n\t\t\t'=_input.caravanForm.caravanDetails.security',\r\n\t\t'caravans.0.caravanUsageType':\r\n\t\t\t'=_input.caravanForm.caravanDetails.primaryUse',\r\n\t\t'caravans.0.existingDamageType':\r\n\t\t\t'=_input.caravanForm.caravanDetails.existingDamage',\r\n\t\t'caravans.0.purchaseMonthYear':\r\n\t\t\t'=_input.caravanForm.caravanDetails.whenDidYouBuyYear',\r\n\t\t'caravans.0.purchaseMonthYear':\r\n\t\t\t'=_input.caravanForm.caravanDetails.whenDidYouBuyMonth',\r\n\t\t'caravans.0.isCaravanRegistered':\r\n\t\t\t'=_input.caravanForm.caravanDetails.isCaravanRegistered',\r\n\t\t'caravans.0.isPermResidence':\r\n\t\t\t'=_input.caravanForm.caravanDetails.isPremanentResidence',\r\n\t\t'caravans.0.isCaravanOnNonRetractableJacks':\r\n\t\t\t'=_input.caravanForm.caravanDetails.nonRetractableJacksorPermanantFoundations',\r\n\t\t'caravans.0.isCaravanConnectedToPlumbing':\r\n\t\t\t'=_input.caravanForm.caravanDetails.permanentlyConnected',\r\n\t\t'caravans.0.chassisNumber':\r\n\t\t\t'=_input.caravanForm.caravanDetails.chassisNumber',\r\n\r\n\t\t'caravans.0.replacementCostValue':\r\n\t\t\t'=_input.caravanForm.sumInsured.annexeReplacementCost',\r\n\t\t'caravans.0.agreedAmountValue':\r\n\t\t\t'=_input.caravanForm.sumInsured.agreedValue',\r\n\r\n\t\t// aboutYourContents\r\n\t\t'caravans.0.agreedAmountValue':\r\n\t\t\t'=_input.caravanForm.aboutYourContents.agreedValue',\r\n\t\t'caravans.0.replacementCostValue':\r\n\t\t\t'=_input.caravanForm.aboutYourContents.annexeReplacementCost',\r\n\t\t'caravans.0.contentsCoverAmount':\r\n\t\t\t'=_input.caravanForm.aboutYourContents.generalContentsValue',\r\n\r\n\t\t'caravans.0.contentsCover':\r\n\t\t\t'=_input.caravanForm.aboutYourContents.insureContents',\r\n\t\t'caravans.0.excess.voluntaryVehicleExcess':\r\n\t\t\t'=_input.caravanForm.excess.voluntaryVehicleExcess',\r\n\r\n\t\t'caravans.0.yearsContinuousInsurance':\r\n\t\t\t'=_input.caravanForm.driver.yearsContinuousInsurance',\r\n\t\t'caravans.0.timeSinceLastClaim':\r\n\t\t\t'=_input.caravanForm.driver.timeSinceLastClaim',\r\n\r\n\t\tpolicyHolders: [],\r\n\t\t'policyHolders.0': {},\r\n\t\t'policyHolders.0.mainHolder':\r\n\t\t\t'=_input.caravanForm.mainPolicyHolder.mainPolicyHolder',\r\n\t\t'policyHolders.0.contact': '=_input.caravanForm.mainPolicyHolder',\r\n\t\t'policyHolders.0.contact.primaryAddress': '=_addressSearch',\r\n\r\n\t\tpolicyAddress: '=_addressSearch',\r\n\t\temail: '=_input.email',\r\n\t\tcampaignCode: '=_input.caravanForm.promotionalCode.promotionalCode',\r\n\t\tpostalAddress: '=_addressSearch-postal-address'\r\n\t};\r\n\r\n\tfunction updateCaravanInfo(transformedRequest, userInput) {\r\n\t\tvar aboutYourCaravan = userInput.caravanForm.aboutYourCaravan,\r\n\t\t\tsearchType = userInput.caravanForm.aboutYourCaravan.searchType,\r\n\t\t\tcaravanInfo = transformedRequest.caravans[0].caravanInfo || {};\r\n\r\n\t\tif (aboutYourCaravan) {\r\n\t\t\tif (searchType === 'manually') {\r\n\t\t\t\tcaravanInfo = {\r\n\t\t\t\t\tmodelYear: aboutYourCaravan.year,\r\n\t\t\t\t\tmake: aboutYourCaravan.make,\r\n\t\t\t\t\tmodel: aboutYourCaravan.model,\r\n\t\t\t\t\tbodyType: aboutYourCaravan.bodyType,\r\n\t\t\t\t\tberths: aboutYourCaravan.berths,\r\n\t\t\t\t\tweight: aboutYourCaravan.weight,\r\n\t\t\t\t\tcaravanLength: aboutYourCaravan.manualLength,\r\n\t\t\t\t\tlengthUnits: aboutYourCaravan.manualLengthUnits,\r\n\t\t\t\t\tcustomBuilt: aboutYourCaravan.customBuilt,\r\n\t\t\t\t\tnumberOfAxles: aboutYourCaravan.numOfAxels\r\n\t\t\t\t};\r\n\r\n\t\t\t\ttransformedRequest.caravans[0].caravanInfo = caravanInfo;\r\n\t\t\t} else if (searchType === 'yearMakeModel') {\r\n\t\t\t\tif (caravanInfo && caravanInfo.vgiId) {\r\n\t\t\t\t\t//if aviailable continue\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//set vgiId from retrive\r\n\t\t\t\t\tcaravanInfo = {\r\n\t\t\t\t\t\tvgiId: aboutYourCaravan.vgiId\r\n\t\t\t\t\t};\r\n\t\t\t\t\ttransformedRequest.caravans[0].caravanInfo = caravanInfo;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateContentsItems(transformedRequest, userInput) {\r\n\t\tvar aboutYourContents = userInput.caravanForm.aboutYourContents;\r\n\r\n\t\tif (\r\n\t\t\taboutYourContents &&\r\n\t\t\taboutYourContents.contentsItems &&\r\n\t\t\taboutYourContents.contentsItems.length > 0\r\n\t\t) {\r\n\t\t\tvar contents = aboutYourContents.contentsItems;\r\n\r\n\t\t\tvar specifiedItems = contents.map(function(item, i) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tcategory: item.category.value,\r\n\t\t\t\t\tdescription: item.description,\r\n\t\t\t\t\tvalue: item.value\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.caravans[0].specifiedContents = true;\r\n\t\t\ttransformedRequest.caravans[0].specifiedItems = specifiedItems;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateTotalSpecifiedContentsValue(transformedRequest, userInput) {\r\n\t\tvar aboutYourContents = userInput.caravanForm.aboutYourContents;\r\n\r\n\t\tif (\r\n\t\t\taboutYourContents &&\r\n\t\t\taboutYourContents.contentsItems &&\r\n\t\t\taboutYourContents.contentsItems.length > 0\r\n\t\t) {\r\n\t\t\tvar contents = aboutYourContents.contentsItems,\r\n\t\t\t\ttotalSpecifiedItemsValue = 0;\r\n\r\n\t\t\tfor (var index in contents) {\r\n\t\t\t\ttotalSpecifiedItemsValue += contents[index].value;\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.caravans[0].totalSpecifiedItemsValue = totalSpecifiedItemsValue;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateTotalContentsSpecifiedValue(transformedRequest, userInput) {\r\n\t\tvar aboutYourContents = userInput.caravanForm.aboutYourContents;\r\n\r\n\t\tif (aboutYourContents && aboutYourContents.generalContentsValue) {\r\n\t\t\tvar contentsCoverAmount =\r\n\t\t\t\t\tuserInput.caravanForm.aboutYourContents\r\n\t\t\t\t\t\t.generalContentsValue,\r\n\t\t\t\ttotalSpecifiedItemsValue =\r\n\t\t\t\t\ttransformedRequest.caravans[0].totalSpecifiedItemsValue ||\r\n\t\t\t\t\t0;\r\n\r\n\t\t\tif (contentsCoverAmount && totalSpecifiedItemsValue) {\r\n\t\t\t\ttransformedRequest.caravans[0].totalContentsAndSpecifiedValue =\r\n\t\t\t\t\tcontentsCoverAmount + totalSpecifiedItemsValue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (transformedRequest.caravans[0].contentsCover === false) {\r\n\t\t\ttransformedRequest.caravans[0].contentsCoverAmount = '';\r\n\t\t}\r\n\r\n\t\tif (aboutYourContents.insureContents === undefined) {\r\n\t\t\ttransformedRequest.caravans[0].contentsCover = false;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleDetails(transformedRequest, userInput) {\r\n\t\ttransformedRequest.caravans[0] = util.deepClone(\r\n\t\t\ttransformedRequest.caravans[0]\r\n\t\t);\r\n\r\n\t\tif (userInput.caravanForm.insuredExcessValue) {\r\n\t\t\ttransformedRequest.caravans[0].sumInsuredType =\r\n\t\t\t\tuserInput.caravanForm.insuredExcessValue.comprehensivePref;\r\n\t\t}\r\n\t\t//userInput.caravanForm.insuredExcessValue\r\n\t\tif (userInput.caravanForm.caravanDetails) {\r\n\t\t\tif (userInput.caravanForm.caravanDetails.whenDidYouBuyYear) {\r\n\t\t\t\ttransformedRequest.caravans[0].purchaseMonthYear =\r\n\t\t\t\t\tuserInput.caravanForm.caravanDetails.whenDidYouBuyYear +\r\n\t\t\t\t\t'-' +\r\n\t\t\t\t\tuserInput.caravanForm.caravanDetails.whenDidYouBuyMonth;\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.caravans[0].businessUsageType =\r\n\t\t\t\tuserInput.caravanForm.caravanDetails.businessActivityType ||\r\n\t\t\t\tuserInput.caravanForm.caravanDetails.commercialActivityType ||\r\n\t\t\t\tundefined;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyHolders(transformedRequest, userInput) {\r\n\t\tvar caravanForm = userInput.caravanForm,\r\n\t\t\tmainPolicyHolder = caravanForm.mainPolicyHolder,\r\n\t\t\tdrivers = transformedRequest.caravans[0].drivers;\r\n\r\n\t\tif (mainPolicyHolder) {\r\n\t\t\tvar policyHolders = [];\r\n\r\n\t\t\tmainPolicyHolder.policyContact =\r\n\t\t\t\tcaravanForm.mainPolicyHolderContact;\r\n\r\n\t\t\tif (mainPolicyHolder.isMainDriverMainPolicyHolder) {\r\n\t\t\t\tvar driver = util.deepClone(\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t);\r\n\t\t\t\tObject.extend(mainPolicyHolder, driver.person);\r\n\t\t\t}\r\n\r\n\t\t\tpolicyHolders.push(mainPolicyHolder);\r\n\r\n\t\t\tif (\r\n\t\t\t\tcaravanForm.additionalPolicyHolders &&\r\n\t\t\t\tcaravanForm.additionalPolicyHolders.policyHolders\r\n\t\t\t) {\r\n\t\t\t\tpolicyHolders = policyHolders.concat(\r\n\t\t\t\t\tcaravanForm.additionalPolicyHolders.policyHolders\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tpolicyHolders.forEach(function(policyHolder, index) {\r\n\t\t\t\tvar contact = util.deepClone(policyHolder);\r\n\t\t\t\tif (!transformedRequest.policyHolders[index])\r\n\t\t\t\t\ttransformedRequest.policyHolders[index] = {};\r\n\r\n\t\t\t\tvar transformedContact =\r\n\t\t\t\t\ttransformedRequest.policyHolders[index];\r\n\t\t\t\tif (!contact.contactType)\r\n\t\t\t\t\tcontact.contactType =\r\n\t\t\t\t\t\t'person'; /* TODO : check to make sure this condition is always safe to use */\r\n\r\n\t\t\t\tcontact.prefix = contact.title;\r\n\t\t\t\tcontact.hasClaim = contact.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tcontact.hasInfringement =\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tcontact.hasLostLicence = contact.fourYears_licenceRSDC;\r\n\t\t\t\tcontact.hasConviction =\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences;\r\n\r\n\t\t\t\tif (contact.policyContact) {\r\n\t\t\t\t\tObject.extend(contact, contact.policyContact);\r\n\t\t\t\t\tif (contact.primaryPhone == 'mobile')\r\n\t\t\t\t\t\tcontact.cellPhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\telse if (contact.primaryPhone == 'home')\r\n\t\t\t\t\t\tcontact.homePhone = contact.primaryPhoneNumber;\r\n\t\t\t\t\telse if (contact.primaryPhone == 'work')\r\n\t\t\t\t\t\tcontact.workPhone = contact.primaryPhoneNumber;\r\n\r\n\t\t\t\t\tdelete contact.policyContact;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!contact.primaryAddress)\r\n\t\t\t\t\tcontact.primaryAddress = util.clone(\r\n\t\t\t\t\t\tmainPolicyHolder.primaryAddress\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\tcontact.hasClaim = contact.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tcontact.hasInfringement =\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tcontact.hasLostLicence = contact.fourYears_licenceRSDC;\r\n\t\t\t\tcontact.hasConviction =\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tcontact.zeroDemerits = contact.NSWDemeritPoints;\r\n\r\n\t\t\t\tcontact.drivingHistory = [];\r\n\r\n\t\t\t\t// 4 years Charged or Convicted Offences\r\n\t\t\t\tif (\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffencesDetails.length <\r\n\t\t\t\t\t\t1\r\n\t\t\t\t) {\r\n\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (contact.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\tcontact.fourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 4 years Licence RSDC\r\n\t\t\t\tif (\r\n\t\t\t\t\tcontact.fourYears_licenceRSDC &&\r\n\t\t\t\t\tcontact.fourYears_licenceRSDCDetails.length < 1\r\n\t\t\t\t) {\r\n\t\t\t\t\tcontact.fourYears_licenceRSDC = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (contact.fourYears_licenceRSDC) {\r\n\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\tcontact.fourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 4 years accidents and claims\r\n\t\t\t\tif (\r\n\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaimsDetails.length < 1\r\n\t\t\t\t) {\r\n\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaims = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (contact.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\tcontact.fourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 10 years charged or convicted\r\n\t\t\t\tif (\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffencesDetails.length <\r\n\t\t\t\t\t\t1\r\n\t\t\t\t) {\r\n\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (contact.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tcontact.drivingHistory = contact.drivingHistory.concat(\r\n\t\t\t\t\t\tcontact.tenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Concat time!\r\n\t\t\t\tcontact.drivingHistory.forEach(function(dh) {\r\n\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t};\r\n\t\t\t\t\tif (dh.description) {\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (dh.accident) {\r\n\t\t\t\t\t\t\tdh.description = dh.accident;\r\n\t\t\t\t\t\t} else if (dh.incident) {\r\n\t\t\t\t\t\t\tdh.description = dh.incident;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (!transformedContact.contact)\r\n\t\t\t\t\ttransformedContact.contact = {};\r\n\r\n\t\t\t\tObject.extend(transformedContact.contact, contact);\r\n\t\t\t});\r\n\t\t} else if (\r\n\t\t\ttransformedRequest.caravans[0].drivers[0] &&\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driver &&\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person\r\n\t\t) {\r\n\t\t\tvar driver = transformedRequest.caravans[0].drivers[0].driver;\r\n\t\t\tvar contact = transformedRequest.policyHolders[0].contact;\r\n\r\n\t\t\tObject.extend(contact, driver.person);\r\n\t\t\tcontact.contactType =\r\n\t\t\t\t'person'; /* TODO : check to make sure this condition is always safe to use */\r\n\t\t\tcontact.hasClaim = driver.hasClaim;\r\n\t\t\tcontact.hasConviction = driver.hasConviction;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.policyHolders[0].mainHolder = true;\r\n\r\n\t\tif (userInput.email) {\r\n\t\t\t/** required for saving/retrieving the policy */\r\n\t\t\tif (\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t} else if (\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t} else {\r\n\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\tuserInput.email;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tangular.isDefined(\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.email;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t) {\r\n\t\t\t\tif (transformedRequest.policyHolders[0].contact.emailAddress1) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.policyHolders[0].contact.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person\r\n\t\t\t\t\t\t.emailAddress1\r\n\t\t\t\t) {\r\n\t\t\t\t\t//use the existing if available\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver.person.emailAddress1 =\r\n\t\t\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tuserInput.caravanForm &&\r\n\t\t\tuserInput.caravanForm.mainPolicyHolderContact &&\r\n\t\t\tuserInput.caravanForm.mainPolicyHolderContact\r\n\t\t\t\t.personalContactDetailsMailingPreference\r\n\t\t) {\r\n\t\t\ttransformedRequest.documentDeliveryMethod =\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.personalContactDetailsMailingPreference;\r\n\t\t\tdelete transformedRequest.policyHolders[0].contact\r\n\t\t\t\t.personalContactDetailsMailingPreference;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateDrivers(transformedRequest, userInput) {\r\n\t\ttransformedRequest.caravans[0].drivers = [];\r\n\t\tif (\r\n\t\t\tuserInput.caravanForm.driver &&\r\n\t\t\tuserInput.caravanForm.driver.drivers\r\n\t\t) {\r\n\t\t\tuserInput.caravanForm.driver.drivers.forEach(function(driver) {\r\n\t\t\t\tdriver.person.contactType = 'person';\r\n\t\t\t\tdriver.person.prefix = driver.person.title;\r\n\t\t\t\tdriver.person.primaryAddress = transformedRequest.policyAddress;\r\n\t\t\t\tdriver.person.primaryAddress.addressType = 'residential';\r\n\r\n\t\t\t\tdriver.hasClaim = driver.person.hasClaim =\r\n\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tdriver.hasInfringement =\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tdriver.hasLostLicence = driver.fourYears_licenceRSDC;\r\n\t\t\t\tdriver.hasConviction = driver.person.hasConviction =\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tdriver.zeroDemerits = driver.NSWDemeritPoints;\r\n\t\t\t\t//driver.yearsLicenced = driver.yearsHeld ;\r\n\r\n\t\t\t\tswitch (driver.yearsHeld) {\r\n\t\t\t\t\tcase 'lessThan_1':\r\n\t\t\t\t\t\tdriver.yearsLicenced = '7';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'greaterThan_5':\r\n\t\t\t\t\t\tdriver.yearsLicenced = '6';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdriver.yearsLicenced = driver.yearsHeld;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t(!driver.fourYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaims &&\r\n\t\t\t\t\t(!driver.fourYears_vehicleAccidentsClaimsDetails ||\r\n\t\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaimsDetails.length <\r\n\t\t\t\t\t\t\t1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.fourYears_licenceRSDC &&\r\n\t\t\t\t\t(!driver.fourYears_licenceRSDCDetails.length ||\r\n\t\t\t\t\t\tdriver.fourYears_licenceRSDCDetails.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.fourYears_licenceRSDC = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences &&\r\n\t\t\t\t\t(!driver.tenYears_chargedOrConvictedOffencesDetails ||\r\n\t\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffencesDetails\r\n\t\t\t\t\t\t\t.length < 1)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffences = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdriver.driverHistory = [];\r\n\r\n\t\t\t\tif (driver.fourYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.fourYears_vehicleAccidentsClaims) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_vehicleAccidentsClaimsDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.fourYears_licenceRSDC) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.fourYears_licenceRSDCDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (driver.tenYears_chargedOrConvictedOffences) {\r\n\t\t\t\t\tdriver.driverHistory = driver.driverHistory.concat(\r\n\t\t\t\t\t\tdriver.tenYears_chargedOrConvictedOffencesDetails.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdriver.driverHistory.forEach(function(dh) {\r\n\t\t\t\t\tdh.pattern = {\r\n\t\t\t\t\t\tpublicID: '',\r\n\t\t\t\t\t\tdescription: '',\r\n\t\t\t\t\t\tcode: '',\r\n\t\t\t\t\t\tfilter1: ''\r\n\t\t\t\t\t};\r\n\t\t\t\t\tdh.pattern.publicID = dh.description.publicID;\r\n\t\t\t\t\tdh.pattern.description = dh.description.label;\r\n\t\t\t\t\tdh.pattern.code = dh.description.code;\r\n\t\t\t\t\tdh.pattern.filter1 = dh.description.filter1;\r\n\r\n\t\t\t\t\tdh.month = transposeMonth(dh.month.value);\r\n\t\t\t\t\tdh.year = dh.year.value;\r\n\r\n\t\t\t\t\tdelete dh.description;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvar driverObj = {\r\n\t\t\t\t\tdriver: driver\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// var toDelete = isItemMarkedForDelete('driver', driver) ;\r\n\t\t\t\t// if (toDelete) driverObj.markedForDelete = true ;\r\n\r\n\t\t\t\ttransformedRequest.caravans[0].drivers.push(driverObj);\r\n\t\t\t});\r\n\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driverUsage = 'main';\r\n\t\t} else {\r\n\t\t\ttransformedRequest.caravans[0].drivers = [\r\n\t\t\t\t{\r\n\t\t\t\t\tdriverUsage: 'main'\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleSubType(transformedRequest, userInput) {\r\n\t\tvar caravanDetails = userInput.caravanForm.caravanDetails,\r\n\t\t\tcaravanType = userInput.caravanForm.aboutYourCaravan.vehicleType,\r\n\t\t\tvehicleSubType = null;\r\n\r\n\t\tif (caravanDetails && caravanDetails.vehicleSubType) {\r\n\t\t\tvehicleSubType = caravanDetails.vehicleSubType;\r\n\t\t} else {\r\n\t\t\tswitch (caravanType) {\r\n\t\t\t\tcase 'caravan':\r\n\t\t\t\t\tvehicleSubType = 'standardcaravan';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'campertrailer':\r\n\t\t\t\t\tvehicleSubType = 'standardcampertrailer';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'goodscarryingtrailer':\r\n\t\t\t\t\tvehicleSubType = 'boxtrailer';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttransformedRequest.caravans[0].caravanSubType = vehicleSubType;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateTotalCaravanValue(transformedRequest, userInput) {\r\n\t\tvar sumInsured = userInput.caravanForm.sumInsured;\r\n\r\n\t\tif (\r\n\t\t\tsumInsured &&\r\n\t\t\tsumInsured.annexeReplacementCost &&\r\n\t\t\tsumInsured.agreedValue\r\n\t\t) {\r\n\t\t\ttransformedRequest.caravans[0].totalCaravanValue =\r\n\t\t\t\tsumInsured.agreedValue + sumInsured.annexeReplacementCost;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleInsuranceTypeAndAmount(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tvar insuredExcessValue = userInput.caravanForm.insuredExcessValue;\r\n\r\n\t\tif (insuredExcessValue) {\r\n\t\t\ttransformedRequest.caravans[0].sumInsuredType =\r\n\t\t\t\tinsuredExcessValue.comprehensivePref;\r\n\t\t\tif (insuredExcessValue.comprehensivePref == 'agreed') {\r\n\t\t\t\ttransformedRequest.caravans[0].sumInsuredAmount =\r\n\t\t\t\t\tinsuredExcessValue.agreedValue;\r\n\t\t\t} else if (quoteOptions.getSelectedQuoteResult()) {\r\n\t\t\t\ttransformedRequest.caravans[0].sumInsuredAmount = quoteOptions\r\n\t\t\t\t\t.getSelectedQuoteResult()\r\n\t\t\t\t\t.getAnnual().vehicleValue.lower;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateDiscountLayup(transformedRequest, userInput) {\r\n\t\tvar discountOptions = userInput.caravanForm.discountOptions;\r\n\r\n\t\tif (discountOptions && discountOptions.discountLayup) {\r\n\t\t\tvar coverageOptions =\r\n\t\t\t\t\ttransformedRequest.caravans[0].coverageOptions || [],\r\n\t\t\t\tdiscountLayup = {\r\n\t\t\t\t\tname: 'QPCLayupCover',\r\n\t\t\t\t\tselected: discountOptions.discountLayup,\r\n\t\t\t\t\trequired: false\r\n\t\t\t\t};\r\n\r\n\t\t\tif (\r\n\t\t\t\t!!discountOptions.discountLayup &&\r\n\t\t\t\t!!discountOptions.discountLayupMonths\r\n\t\t\t) {\r\n\t\t\t\tdiscountLayup.activeLayupMonths = [];\r\n\r\n\t\t\t\tvar layupMonths = Object.keys(\r\n\t\t\t\t\tdiscountOptions.discountLayupMonths\r\n\t\t\t\t);\r\n\t\t\t\tlayupMonths.forEach(function(monthItem) {\r\n\t\t\t\t\tif (discountOptions.discountLayupMonths[monthItem]) {\r\n\t\t\t\t\t\tdiscountLayup.activeLayupMonths.push(monthItem);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tcoverageOptions.push(discountLayup);\r\n\r\n\t\t\ttransformedRequest.caravans[0].coverageOptions = coverageOptions;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateVehicleInsuranceOptionalBenefits(\r\n\t\ttransformedRequest,\r\n\t\tuserInput\r\n\t) {\r\n\t\tvar optionalBenefits = userInput.caravanForm.optionalBenefits;\r\n\r\n\t\tif (optionalBenefits) {\r\n\t\t\tvar coverageOptions =\r\n\t\t\t\ttransformedRequest.caravans[0].coverageOptions || [];\r\n\r\n\t\t\tfor (var key in optionalBenefits) {\r\n\t\t\t\t//dd-6512-Do not include \"expiryDate\" option\r\n\t\t\t\tif (key.indexOf('QPC') > -1) {\r\n\t\t\t\t\tcoverageOptions.push({\r\n\t\t\t\t\t\tname: key,\r\n\t\t\t\t\t\tselected: optionalBenefits[key],\r\n\t\t\t\t\t\trequired: false\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttransformedRequest.caravans[0].coverageOptions = coverageOptions;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateOnSiteDiscount(transformedRequest, userInput) {\r\n\t\tvar discountOptions = userInput.caravanForm.discountOptions;\r\n\r\n\t\tif (discountOptions) {\r\n\t\t\tvar coverageOptions =\r\n\t\t\t\t\ttransformedRequest.caravans[0].coverageOptions || [],\r\n\t\t\t\tonSiteDiscount = discountOptions.onSiteDiscount;\r\n\r\n\t\t\tif (onSiteDiscount === true) {\r\n\t\t\t\tcoverageOptions.push({\r\n\t\t\t\t\tname: 'QPCOnSite',\r\n\t\t\t\t\tselected: true,\r\n\t\t\t\t\trequired: true\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// coverageOptions.push({\r\n\t\t\t\t// \tname:'QPCLayupCover',\r\n\t\t\t\t// \tselected:false\r\n\t\t\t\t// });\r\n\t\t\t}\r\n\r\n\t\t\tif (onSiteDiscount === false) {\r\n\t\t\t\tcoverageOptions.push({\r\n\t\t\t\t\tname: 'QPCOnSite',\r\n\t\t\t\t\tselected: false,\r\n\t\t\t\t\trequired: true\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// coverageOptions.push({\r\n\t\t\t\t// \tname:'QPCLayupCover',\r\n\t\t\t\t// \tselected:false\r\n\t\t\t\t// });\r\n\t\t\t}\r\n\r\n\t\t\ttransformedRequest.caravans[0].coverageOptions = coverageOptions;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateFinanceType(transformedRequest, userInput) {\r\n\t\tvar caravanDetails = userInput.caravanForm.caravanDetails,\r\n\t\t\tfinance = caravanDetails ? caravanDetails.finance : 'none';\r\n\r\n\t\tif (caravanDetails) {\r\n\t\t\tif (caravanDetails.financeWith) {\r\n\t\t\t\tfinanceWith = caravanDetails.financeWith;\r\n\t\t\t} else {\r\n\t\t\t\tfinanceWith = null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfinanceWith = null;\r\n\t\t}\r\n\r\n\t\tif (finance) {\r\n\t\t\ttransformedRequest.caravans[0].financeType = finance;\r\n\r\n\t\t\tif (\r\n\t\t\t\tfinanceWith &&\r\n\t\t\t\tfinanceWith.hasOwnProperty('label') &&\r\n\t\t\t\tfinanceWith.hasOwnProperty('value')\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.caravans[0].financeCompany = {};\r\n\r\n\t\t\t\ttransformedRequest.caravans[0].financeCompany.name =\r\n\t\t\t\t\tfinanceWith.label;\r\n\t\t\t\ttransformedRequest.caravans[0].financeCompany.publicID =\r\n\t\t\t\t\tfinanceWith.value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t// function isItemMarkedForDelete(typeName, item) {\r\n\t// \tvar toRemove = aggregatedRemoveService.getList();\r\n\t// \tvar itemsToRemove = toRemove[typeName] || [];\r\n\t// \tvar removeItem = false ;\r\n\t// \titemsToRemove.some(function(itemToRemove) {\r\n\t// \t\tif ( itemToRemove._aggregator.id == item._aggregator.id){\r\n\t// \t\t\tremoveItem = true;\r\n\t// \t\t\treturn;\r\n\t// \t\t}\r\n\t// \t});\r\n\t// \treturn removeItem;\r\n\t// }\r\n\r\n\tfunction updateAgreedValue(transformedRequest, userInput) {\r\n\t\tvar sumInsured = userInput.caravanForm.sumInsured;\r\n\r\n\t\tif (sumInsured && sumInsured.agreedValue) {\r\n\t\t\ttransformedRequest.caravans[0].agreedAmountValue =\r\n\t\t\t\tsumInsured.agreedValue;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateAnnexeValue(transformedRequest, userInput) {\r\n\t\tvar sumInsured = userInput.caravanForm.sumInsured;\r\n\r\n\t\tif (sumInsured && sumInsured.annexeReplacementCost) {\r\n\t\t\ttransformedRequest.caravans[0].replacementCostValue =\r\n\t\t\t\tsumInsured.annexeReplacementCost;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePurchasePrice(transformedRequest, userInput) {\r\n\t\tvar caravanDetails = userInput.caravanForm.caravanDetails,\r\n\t\t\taboutYourContents = userInput.caravanForm.aboutYourContents,\r\n\t\t\tpurchasePrice = 100;\r\n\r\n\t\tif (caravanDetails && caravanDetails.purchasePrice) {\r\n\t\t\tpurchasePrice = caravanDetails.purchasePrice;\r\n\t\t} else if (aboutYourContents && aboutYourContents.agreedValue) {\r\n\t\t\t// Use the agreed value if they're coming from rapid estimate\r\n\t\t\tpurchasePrice = aboutYourContents.agreedValue;\r\n\t\t}\r\n\r\n\t\ttransformedRequest.caravans[0].purchasePrice = purchasePrice;\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//updates the email\r\n\tfunction updateEmail(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\tuserInput.caravanForm &&\r\n\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t) {\r\n\t\t\ttransformedRequest.email =\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore.yourEmailAddress;\r\n\t\t} else {\r\n\t\t\t//set email from maincontact if not available in tellUsABitMore\r\n\t\t\tif (\r\n\t\t\t\tuserInput.caravanForm &&\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact &&\r\n\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t) {\r\n\t\t\t\ttransformedRequest.email =\r\n\t\t\t\t\tuserInput.caravanForm.mainPolicyHolderContact.emailAddress1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// send the campaign code to GW\r\n\t\tif (\r\n\t\t\tuserInput.caravanForm &&\r\n\t\t\tuserInput.caravanForm.tellUsABitMore &&\r\n\t\t\tuserInput.caravanForm.tellUsABitMore.promotionalCode\r\n\t\t) {\r\n\t\t\ttransformedRequest.campaignCode =\r\n\t\t\t\tuserInput.caravanForm.tellUsABitMore.promotionalCode;\r\n\t\t}\r\n\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\t//dd-1040 - function to update hasCurrentInsurance field when yearContinuous Insurance > 0\r\n\tfunction updateCurrentInsurance(transformedRequest, userInput) {\r\n\t\tif (\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driver &&\r\n\t\t\ttransformedRequest.caravans[0].drivers[0].driverUsage == 'main'\r\n\t\t) {\r\n\t\t\tif (\r\n\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t\t.yearsContinuousInsurance != '0'\r\n\t\t\t) {\r\n\t\t\t\tvar claims = Object.extend(transformedRequest.caravans[0], {\r\n\t\t\t\t\tyearsContinuousInsurance:\r\n\t\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t\t\t\t.yearsContinuousInsurance,\r\n\t\t\t\t\ttimeSinceLastClaim:\r\n\t\t\t\t\t\ttransformedRequest.caravans[0].drivers[0].driver\r\n\t\t\t\t\t\t\t.timeSinceLastClaim,\r\n\t\t\t\t\thasCurrentInsurance: true\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updateStampDutyEligibility(transformedRequest, userInput) {\r\n\t\tvar stampDutyEligible = storage.getItem('stamp-duty');\r\n\t\tif (userInput.caravanForm.stampDutyExemption && stampDutyEligible) {\r\n\t\t\ttransformedRequest.caravans[0].isSmallBusiness =\r\n\t\t\t\tuserInput.caravanForm.stampDutyExemption.isSmallBusiness;\r\n\t\t} else {\r\n\t\t\tdelete transformedRequest.caravans[0].isSmallBusiness;\r\n\t\t}\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction updatePolicyAddress(transformedRequest, userInput) {\r\n\t\tvar postalAddress = storage.getItem('policy-address');\r\n\r\n\t\tif (angular.isDefined(userInput.caravanForm.mainPolicyHolderContact)) {\r\n\t\t\tif (transformedRequest.postalAddress !== null) {\r\n\t\t\t\ttransformedRequest.policyAddress =\r\n\t\t\t\t\ttransformedRequest.postalAddress;\r\n\t\t\t} else {\r\n\t\t\t\tif (\r\n\t\t\t\t\tObject.keys(postalAddress).length > 0 &&\r\n\t\t\t\t\t!userInput.caravanForm.mainPolicyHolderContact.postalOption\r\n\t\t\t\t) {\r\n\t\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\ttransformedRequest.policyAddress = postalAddress;\r\n\t\t\t}\r\n\t\t}\r\n\t\tdelete transformedRequest.postalAddress;\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transform(userInput) {\r\n\t\tvar transformedRequest = jsonMapper.transform(\r\n\t\t\tuserInput,\r\n\t\t\tstructureQuoteMapping\r\n\t\t);\r\n\r\n\t\t// Caravan\r\n\t\ttransformedRequest = updateVehicleDetails(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleSubType(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateCaravanInfo(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateFinanceType(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateAgreedValue(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateAnnexeValue(transformedRequest, userInput);\r\n\t\ttransformedRequest = updatePurchasePrice(transformedRequest, userInput);\r\n\r\n\t\t// Contents\r\n\t\ttransformedRequest = updateContentsItems(transformedRequest, userInput);\r\n\r\n\t\t// Main driver/insured\r\n\t\ttransformedRequest = updateStampDutyEligibility(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateDrivers(transformedRequest, userInput);\r\n\r\n\t\t// Contact\r\n\t\ttransformedRequest = updatePolicyHolders(transformedRequest, userInput);\r\n\r\n\t\t// Quote\r\n\t\ttransformedRequest = updateTotalCaravanValue(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateTotalSpecifiedContentsValue(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateTotalContentsSpecifiedValue(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateDiscountLayup(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateOnSiteDiscount(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateVehicleInsuranceOptionalBenefits(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updateEmail(transformedRequest, userInput);\r\n\t\ttransformedRequest = updateCurrentInsurance(\r\n\t\t\ttransformedRequest,\r\n\t\t\tuserInput\r\n\t\t);\r\n\t\ttransformedRequest = updatePolicyAddress(transformedRequest, userInput);\r\n\t\treturn transformedRequest;\r\n\t}\r\n\r\n\tfunction transposeMonth(monthName) {\r\n\t\tvar months = {\r\n\t\t\tJanuary: '01',\r\n\t\t\tFebruary: '02',\r\n\t\t\tMarch: '03',\r\n\t\t\tApril: '04',\r\n\t\t\tMay: '05',\r\n\t\t\tJune: '06',\r\n\t\t\tJuly: '07',\r\n\t\t\tAugust: '08',\r\n\t\t\tSeptember: '09',\r\n\t\t\tOctober: '10',\r\n\t\t\tNovember: '11',\r\n\t\t\tDecember: '12'\r\n\t\t};\r\n\r\n\t\treturn months[monthName];\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t};\r\n}\r\n\nfunction CaravanTriggerGoalTransformer(jsonMapper, util, quoteOptions) {\r\n\tfunction transform(userInput) {\r\n\t\tvar policyHolder = userInput.policyHolders[0];\r\n\t\tvar address = userInput.policyAddress;\r\n\t\t\r\n\t\tvar request = {\r\n\t\t\tEmail: policyHolder.contact.emailAddress1,\r\n\t\t\tFirstName: policyHolder.contact.firstName,\r\n\t\t\tLastName: policyHolder.contact.lastName,\r\n\t\t\tAddressLine: address.addressLine1,\r\n\t\t\tCity: address.city,\r\n\t\t\tState: address.state,\r\n\t\t\tPostCode: address.postalCode,\r\n\t\t\tCountryCode: \"Australia\",\r\n\t\t\tProduct: \"Caravan\",\r\n\t\t\tUserAgent: \"SPA-Caravan\"\r\n\t\t};\r\n\t\treturn request;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttransform: transform\r\n\t}\r\n}\r\n\n\"use strict\";\r\n\r\nfunction GtmService($window, campaignService) {\r\n\tvar dataLayer = $window.dataLayer;\r\n\r\n\tfunction addStandardTrackingToDataLayer(obj) {\r\n\t\tif (dataLayer) {\r\n\t\t\tif (dataLayer.length > 0) {\r\n\t\t\t\tvar dataLayerLastItem = dataLayer[dataLayer.length - 1];\r\n\t\t\t\tvar isMatched = (obj.event == dataLayerLastItem.event && \r\n\t\t\t\t\tobj.eventAction == dataLayerLastItem.eventAction && \r\n\t\t\t\t\tobj.eventCategory == dataLayerLastItem.eventCategory && \r\n\t\t\t\t\tobj.eventLabel == dataLayerLastItem.eventLabel && \r\n\t\t\t\t\tobj.nonInteraction == dataLayerLastItem.nonInteraction);\r\n\r\n\t\t\t\tif (!isMatched) {\r\n\t\t\t\t\tdataLayer.push(obj);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataLayer.push(obj);\r\n\t\t\t}\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tfunction trackTransactionCompleted(page, policyDetails, quoteModel, paymentRef, receiptNumber, paymentType) {\r\n\t\tvar selectedQuote = quoteModel.selectedQuoteForPayment,\r\n\t\t\toffering = quoteModel.offering,\r\n\t\t\tcoverType = selectedQuote ? selectedQuote.coverType : null,\r\n\t\t\tcombinedCoverType = getCombinedCoverType(coverType, offering),\r\n\t\t\tpaymentPlan = selectedQuote ? selectedQuote.paymentPlan : null,\r\n\t\t\tactiveCampaign = campaignService.getCampaign(),\r\n\t\t\tcampaignId = activeCampaign ? activeCampaign.sc_camp : null;\r\n\r\n\t\tvar trackingData = {\r\n\t\t\tevent: \"virtualPageTransaction\",\r\n\t\t\tvirtualPageUrl: page.url,\r\n\t\t\tvirtualPageTitle: page.name,\r\n\t\t\tproductCode: quoteModel.productCode,\r\n\t\t\ttransactionId: policyDetails.policyNumber,\r\n\t\t\ttransactionAffiliation: quoteModel.gtmTransactionAffiliation,\r\n\t\t\ttransactionTotal: selectedQuote ? selectedQuote.totalPremium : null,\r\n\t\t\ttotalFSL: selectedQuote ? selectedQuote.totalFSL : null,\r\n\t\t\ttotalGST: selectedQuote ? selectedQuote.totalGST : null,\r\n\t\t\ttotalStampDuty: selectedQuote ? selectedQuote.totalStampDuty : null,\r\n\t\t\tdata: {\r\n\t\t\t\tpaymentReference: paymentRef,\r\n\t\t\t\tpolicyId: policyDetails.policyNumber,\r\n\t\t\t\treceiptNumber: receiptNumber,\r\n\t\t\t\tpaymentType: paymentType,\r\n\t\t\t},\r\n\t\t\ttransactionProducts: [\r\n\t\t\t\t{\r\n\t\t\t\t\tsku: quoteModel.productCode,\r\n\t\t\t\t\tname: quoteModel.productCode,\r\n\t\t\t\t\tcategory: combinedCoverType,\r\n\t\t\t\t\tcoupon: quoteModel.campaignCode,\r\n\t\t\t\t\tpaymentFrequency: paymentPlan\r\n\t\t\t\t\t\t? paymentPlan.paymentFrequency\r\n\t\t\t\t\t\t: null,\r\n\t\t\t\t\tprice: selectedQuote\r\n\t\t\t\t\t\t? selectedQuote.premiumAfterDiscount\r\n\t\t\t\t\t\t: null,\r\n\t\t\t\t\tquantity: 1\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t};\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction trackTransaction(page, policyDetails, quoteModel) {\r\n\t\tvar selectedQuote = quoteModel.selectedQuoteForPayment,\r\n\t\t\toffering = quoteModel.offering,\r\n\t\t\tcoverType = selectedQuote ? selectedQuote.coverType : null,\r\n\t\t\tcombinedCoverType = getCombinedCoverType(coverType, offering),\r\n\t\t\tpaymentPlan = selectedQuote ? selectedQuote.paymentPlan : null,\r\n\t\t\tactiveCampaign = campaignService.getCampaign(),\r\n\t\t\tcampaignId = activeCampaign ? activeCampaign.sc_camp : null;\r\n\r\n\t\tvar trackingData = {\r\n\t\t\tevent: \"virtualPageTransaction\",\r\n\t\t\tvirtualPageUrl: page.url,\r\n\t\t\tvirtualPageTitle: page.name,\r\n\t\t\tproductCode: quoteModel.productCode,\r\n\t\t\ttransactionId: policyDetails.policyNumber,\r\n\t\t\ttransactionAffiliation: quoteModel.gtmTransactionAffiliation,\r\n\t\t\ttransactionTotal: selectedQuote ? selectedQuote.totalPremium : null,\r\n\t\t\ttotalFSL: selectedQuote ? selectedQuote.totalFSL : null,\r\n\t\t\ttotalGST: selectedQuote ? selectedQuote.totalGST : null,\r\n\t\t\ttotalStampDuty: selectedQuote ? selectedQuote.totalStampDuty : null,\r\n\t\t\ttransactionProducts: [\r\n\t\t\t\t{\r\n\t\t\t\t\tsku: quoteModel.productCode,\r\n\t\t\t\t\tname: quoteModel.productCode,\r\n\t\t\t\t\tcategory: combinedCoverType,\r\n\t\t\t\t\tcoupon: quoteModel.campaignCode,\r\n\t\t\t\t\tpaymentFrequency: paymentPlan\r\n\t\t\t\t\t\t? paymentPlan.paymentFrequency\r\n\t\t\t\t\t\t: null,\r\n\t\t\t\t\tprice: selectedQuote\r\n\t\t\t\t\t\t? selectedQuote.premiumAfterDiscount\r\n\t\t\t\t\t\t: null,\r\n\t\t\t\t\tquantity: 1\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t};\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction getCombinedCoverType(coverType, offering) {\r\n\t\tvar combinedCoverType = null;\r\n\t\tif (coverType) {\r\n\t\t\tcombinedCoverType = coverType;\r\n\t\t\tif (offering) {\r\n\t\t\t\tcombinedCoverType += \"_\" + offering;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn combinedCoverType;\r\n\t}\r\n\r\n\tfunction trackEvent(eventName, evt) {\r\n\t\tvar trackingData = {};\r\n\r\n\t\tif (evt === \"validationError\") {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tvalidationError: eventName\r\n\t\t\t};\r\n\t\t} else if (evt === \"paymentError\") {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tpaymentError: eventName\r\n\t\t\t};\r\n\t\t} else if (evt === \"formValidationError\") {\r\n\t\t\ttrackingData = eventName;\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tevent: eventName\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\t/////gdd-8403\r\n\tfunction getSha256(dataString) {\r\n\t\tif (!dataString) { return null; }\r\n\t\treturn sha256(dataString);\r\n\t}\r\n\r\n\tfunction streetTypeAbbreviation(addressLine) {\t\t\r\n\t\tif (!addressLine) { return null; }\r\n\t\treturn addressLine.trim().toLowerCase()\r\n\t\t\t\t.replace(' street', 'st').replace(' road', 'rd')\r\n\t\t\t\t.replace(' alley', 'ally').replace(' arcade', 'arc')\r\n\t\t\t\t.replace(' avenue', 'ave').replace(' boulevard', 'bvd')\r\n\t\t\t\t.replace(' bypass', 'bypa').replace(' circuit', 'cct')\r\n\t\t\t\t.replace(' close', 'cl').replace(' corner', 'crn')\r\n\t\t\t\t.replace(' court', 'ct').replace(' crescent', 'cres')\r\n\t\t\t\t.replace(' cul-de-sac', 'cds').replace(' drive', 'dr')\r\n\t\t\t\t.replace(' esplanade', 'esp').replace(' green', 'grn')\r\n\t\t\t\t.replace(' grove', 'gr').replace(' highway', 'hwy')\r\n\t\t\t\t.replace(' junction', 'jnc').replace(' parade', 'pde')\r\n\t\t\t\t.replace(' place', 'pl').replace(' ridge', 'rdge')\r\n\t\t\t\t.replace(' terrace', 'tce');\r\n\t}\r\n\r\n\tfunction nomalizeAddress(quoteModel) {\r\n\t\tif (!quoteModel || !quoteModel.address) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tvar addr = quoteModel.address;\r\n\t\tvar address = streetTypeAbbreviation(addr.addressLine1)\r\n\t\t\t\t\t\t + addr.city + addr.state + addr.postalCode;\t\t\r\n\t\treturn address.replace(/\\s|,|:|-|AU_|_||\\(|\\)|'|\\/|\\./gi, '')\r\n\t\t\t\t\t .trim().toLowerCase();\r\n\t}\r\n\r\n\tfunction harshAddress(quoteModel) {\r\n\t\treturn getSha256(nomalizeAddress(quoteModel));\r\n\t}\r\n\r\n\tfunction harshEmail(emailAddress) {\r\n\t\tif (!emailAddress) { return null; }\r\n\t\treturn getSha256(emailAddress.trim().replace(/\\s/gi, '').toLowerCase());\r\n\t}\r\n\r\n\tfunction harshPhoneNumber(phoneNo) {\r\n\t\tif (!phoneNo) { return null; }\r\n\t\treturn getSha256(phoneNo.trim().replace(/\\s|-/gi, '').toLowerCase());\r\n\t}\r\n\r\n\tfunction harshRego(regoNo) {\r\n\t\tif (!regoNo) { return null; }\r\n\t\treturn getSha256(regoNo.trim().replace(/\\s/gi, '').toLowerCase());\r\n\t}\r\n\r\n\tfunction getPhoneNumber(quoteModel) {\r\n\t\tif (!quoteModel) { return null; }\r\n\t\tif (quoteModel.insuranceType === 'Bike') {\r\n\t\t\tif (!quoteModel \r\n\t\t\t\t|| !quoteModel.gtmPolicyHolder \r\n\t\t\t\t|| !quoteModel.gtmPolicyHolder.phoneNumber) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn quoteModel.gtmPolicyHolder.phoneNumber;\r\n\t\t}\r\n\t\tif (quoteModel.insuranceType === 'Caravan') {\r\n\t\t\tif (!quoteModel \r\n\t\t\t\t|| !quoteModel.mainPolicyHolder \r\n\t\t\t\t|| !quoteModel.mainPolicyHolder.primaryPhoneNumber) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn quoteModel.mainPolicyHolder.primaryPhoneNumber;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\t/////End gdd-8403\r\n\r\n\tfunction trackPageView(page, quoteModel) {\r\n\t\t//dd-6334 - do not trigger this event for Unauth Payments\r\n\t\tif (quoteModel.gtmTransactionAffiliation !== \"payments\") {\r\n\t\t\tvar selectedQuote = quoteModel.selectedQuoteForPayment\r\n\t\t\t\t\t? quoteModel.selectedQuoteForPayment\r\n\t\t\t\t\t: null,\r\n\t\t\t\toffering = quoteModel.offering,\r\n\t\t\t\tcoverType = selectedQuote ? selectedQuote.coverType : null,\r\n\t\t\t\tcombinedCoverType = getCombinedCoverType(coverType, offering),\r\n\t\t\t\tgtmPolicyHolder = quoteModel.gtmPolicyHolder,\r\n\t\t\t\tpostCode = quoteModel.postCode,\r\n\t\t\t\tactiveCampaign = campaignService.getCampaign(),\r\n\t\t\t\tcampaignId = activeCampaign ? activeCampaign.sc_camp : null;\r\n\r\n\t\t\tvar trackingData = {\r\n\t\t\t\tevent: \"virtualPageView\",\r\n\t\t\t\tvirtualPageUrl: page.url,\r\n\t\t\t\tvirtualPageTitle: page.name,\r\n\t\t\t\tqqOption: selectedQuote ? selectedQuote.totalPremium : null,\r\n\t\t\t\tqqEstimate: selectedQuote ? selectedQuote.totalPremium : null,\r\n\t\t\t\tDOB: gtmPolicyHolder\r\n\t\t\t\t\t? moment(gtmPolicyHolder.dateOfBirth, \"DD/MM/YYYY\").format(\r\n\t\t\t\t\t\t\t\"DD/MM/YYYY\"\r\n\t\t\t\t\t )\r\n\t\t\t\t\t: null,\r\n\t\t\t\tcustGender: gtmPolicyHolder ? gtmPolicyHolder.gender : null,\r\n\t\t\t\tpostCode: postCode,\r\n\t\t\t\tinsuranceType: quoteModel.insuranceType,\r\n\t\t\t\tcoverType: combinedCoverType,\r\n\t\t\t\tquoteNo: quoteModel.quoteId,\r\n\t\t\t\tsitecoreCampaignId: campaignId,\r\n\t\t\t\tattributes: {\r\n\t\t\t\t\troute: page.url\r\n\t\t\t\t},\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tregistrationHash: harshRego((quoteModel.regoDetails) ? quoteModel.regoDetails.regoNumber : null),\r\n\t\t\t\t\temailHash: harshEmail(quoteModel.email),\r\n\t\t\t\t\tphoneHash: harshPhoneNumber(getPhoneNumber(quoteModel)),\r\n\t\t\t\t\taddressHash: harshAddress(quoteModel)\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tdataLayer.push(trackingData);\r\n\t\t}\r\n\t}\r\n\r\n\t/*\r\n\t * dd-6181-function to track events for unauthenticated payments\r\n\t * parameters-page data, payment data\r\n\t * return-none\r\n\t */\r\n\tfunction trackUnauthPayments(page, paymentData, paymentType, receiptNumber, policyNumber) {\r\n\t\tvar trackingData;\r\n\r\n\t\tif (page.name == \"payments.payments\") {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tevent: \"VirtualPageview\",\r\n\t\t\t\tvirtualPageUrl: page.url,\r\n\t\t\t\tvirtualPageTitle: page.progressBarShortTitle,\r\n\t\t\t\tproductCode: paymentData.selectInsuranceType,\r\n\t\t\t\tpaymentRef: paymentData.enterPaymentRef,\r\n\t\t\t\tpaymentMethod: paymentData.howToPay\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\ttrackingData = {\r\n\t\t\t\tevent: \"virtualPageTransaction\",\r\n\t\t\t\tvirtualPageUrl: page.url,\r\n\t\t\t\tvirtualPageTitle: page.progressBarShortTitle,\r\n\t\t\t\ttransactionId: paymentData.transactionId,\r\n\t\t\t\ttransactionTotal: paymentData.amount.amountPay,\r\n\t\t\t\tprofile: \"QBE Direct Online\",\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tpaymentReference: paymentData.referenceNumber,\r\n\t\t\t\t\tpolicyId: policyNumber,\r\n\t\t\t\t\treceiptNumber: receiptNumber,\r\n\t\t\t\t\tpaymentType: paymentType,\r\n\t\t\t\t},\r\n\t\t\t\ttransactionProducts: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsku: paymentData.transactionId,\r\n\t\t\t\t\t\tname: paymentData.transactionId,\r\n\t\t\t\t\t\tcoupon: \"\",\r\n\t\t\t\t\t\tprice: paymentData.amount.amountPay,\r\n\t\t\t\t\t\tquantity: 1\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction trackCTPEvent(type, page, action) {\r\n\t\tvar trackingData;\r\n\t\tvar url = page.url.split(\"?\");\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase \"gaClick\":\r\n\t\t\t\ttrackingData = {\r\n\t\t\t\t\tevent: type,\r\n\t\t\t\t\teventCategory: page.progressBarTitle,\r\n\t\t\t\t\teventAction: action,\r\n\t\t\t\t\teventLabel: url[0]\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"VirtualPageview\":\r\n\t\t\t\ttrackingData = {\r\n\t\t\t\t\tevent: type,\r\n\t\t\t\t\tvirtualPageUrl: url[0],\r\n\t\t\t\t\tvirtualPageTitle: \"Summary\"\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"gaFormSubmission\":\r\n\t\t\t\ttrackingData = {\r\n\t\t\t\t\tevent: type,\r\n\t\t\t\t\teventCategory: page.progressBarTitle,\r\n\t\t\t\t\teventAction: action.event,\r\n\t\t\t\t\teventLabel: url[0],\r\n\t\t\t\t\texpiryDate: action.expiryDate,\r\n\t\t\t\t\tpaymentNumber: action.paymentNumber,\r\n\t\t\t\t\tclientNumber: action.clientNumber\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t}\r\n\r\n\t\tdataLayer.push(trackingData);\r\n\t}\r\n\r\n\tfunction trackStandardEvent(category, action, label, nonInteraction) {\r\n\t\tif (!$window.qbeTrack) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar item = {\r\n\t\t\tevent: 'standard',\r\n\t\t\teventCategory: category, \r\n\t\t\teventAction: action,\r\n\t\t\teventLabel: label,\r\n\t\t\tnonInteraction: nonInteraction\r\n\t\t};\r\n\r\n\t\taddStandardTrackingToDataLayer(item);\r\n\t}\r\n\r\n\tfunction trackProductSelect(productType) {\r\n\t\tif (!$window.qbeTrack || !productType) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t$window.qbeTrack.meta.appProduct = productType;\r\n\t\ttrackStandardEvent('click drop down', 'Select Insurance Type', productType, false);\r\n\t}\r\n\r\n\tfunction trackTooltipMouseOver(tooltipMessage) {\r\n\t\ttrackStandardEvent('mouse over', 'tooltip', tooltipMessage, false);\r\n\t}\r\n\r\n\tfunction trackPayBillVirtualPageLanding() {\t\t\r\n\t\tdataLayer.push({\r\n\t\t\tevent: 'virtualPageView',\r\n\t\t\tvirtualPagePath: '/au/pay-bills/welcome',\r\n\t\t\tvirtualPageTitle: 'Welcome - Pay My Bills | QBE AU',\r\n\t\t});\r\n\t}\r\n\r\n\tfunction trackPayBillVirtualBillFound(paymentRef, policyNumber) {\r\n\t\tvar dataObj = {\r\n\t\t\tpaymentReference: paymentRef,\r\n\t\t\tpolicyId: policyNumber,\r\n\t\t};\r\n\r\n\t\tdataLayer.push({\r\n\t\t\tevent: 'virtualPageView',\r\n\t\t\tvirtualPagePath: '/au/pay-bills/bill-found',\r\n\t\t\tvirtualPageTitle: 'Bill Found - Pay My Bills | QBE AU',\r\n\t\t\tdata: dataObj,\r\n\t\t});\r\n\t}\r\n\r\n\tfunction trackPayBillVirtualPageDetails(paymentRef, policyNumber, paymentType) {\r\n\t\tvar dataObj = {\r\n\t\t\tpaymentReference: paymentRef,\r\n\t\t\tpolicyId: policyNumber,\r\n\t\t};\r\n\t\tif (paymentType) {\r\n\t\t\tdataObj.paymentType = paymentType;\r\n\t\t}\r\n\r\n\t\tdataLayer.push({\r\n\t\t\tevent: 'virtualPageView',\r\n\t\t\tvirtualPagePath: '/au/pay-bills/payment-details',\r\n\t\t\tvirtualPageTitle: 'Payment Details- Pay My Bills | QBE AU',\r\n\t\t\tdata: dataObj,\r\n\t\t});\r\n\t}\r\n\r\n\tfunction trackApiError(errCode, errMessage) {\r\n\t\tdataLayer.push({\r\n\t\t\tevent: 'standard',\r\n\t\t\teventCategory: 'error',\r\n\t\t\teventAction: 'api',\r\n\t\t\teventLabel: errMessage, \r\n\t\t\tnonInteraction: true,\r\n\t\t\tdata: {\r\n\t\t\t\terrorCode: (!errCode) ? '(not set)' : errCode,\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction createGtmValidationErrorEvent(errorMessageTitle) {\r\n\t\treturn {\r\n\t\t\tevent: 'validation_error',\r\n\t\t\teventCategory: 'validation error',\r\n\t\t\teventAction: 'validation error',\r\n\t\t\teventLabel: errorMessageTitle, // error validation title\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\ttrackTransaction: trackTransaction,\r\n\t\ttrackTransactionCompleted: trackTransactionCompleted,\r\n\t\ttrackPageView: trackPageView,\r\n\t\ttrackEvent: trackEvent,\r\n\t\ttrackUnauthPayments: trackUnauthPayments,\r\n\t\ttrackCTPEvent: trackCTPEvent,\r\n\t\ttrackStandardEvent: trackStandardEvent,\r\n\t\ttrackProductSelect: trackProductSelect,\r\n\t\ttrackTooltipMouseOver: trackTooltipMouseOver,\r\n\t\ttrackPayBillVirtualPageLanding: trackPayBillVirtualPageLanding,\r\n\t\ttrackPayBillVirtualBillFound: trackPayBillVirtualBillFound,\r\n\t\ttrackPayBillVirtualPageDetails: trackPayBillVirtualPageDetails,\r\n\t\ttrackApiError: trackApiError,\r\n\t\tcreateGtmValidationErrorEvent: createGtmValidationErrorEvent,\r\n\t};\r\n}\n(function() {\r\n 'use strict';\r\n \r\n angular\r\n .module('qbePortal.routes')\r\n .run($run);\r\n \r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n \r\n $run.$inject = ['$rootScope', '$state' , 'gtmService', 'quoteModelFactory'];\r\n\r\n /**\r\n * track virtual page views for all page.\r\n */ \r\n function $run($rootScope, $state, gtmService, quoteModelFactory) {\r\n \r\n $rootScope.$on('$stateChangeSuccess', function() {\r\n gtmService.trackPageView($state.current, quoteModelFactory.create());\r\n });\r\n \r\n }\r\n \r\n})(angular);\r\n\nfunction AggregatedRemoveService(storage) {\r\n\t\r\n\r\n\tfunction markForDelete(typeName, item) {\r\n\t\tvar itemsMarkedForDelete = storage.getItem('itemsMarkedForDelete') || {} ; \r\n\t\titemsMarkedForDelete[typeName] = itemsMarkedForDelete[typeName] || [] ; \r\n\t\titemsMarkedForDelete[typeName].push(item);\r\n\t\tstorage.setItem('itemsMarkedForDelete', itemsMarkedForDelete) ; \r\n\t}\r\n\r\n\tfunction getList() {\r\n\t\tvar items = storage.getItem('itemsMarkedForDelete');\r\n\t\tif ( ! Object.keys(items) )\r\n\t\t\titems = null ; \r\n\r\n\t\treturn items;\r\n\t}\r\n\r\n\tfunction clear(typeName) {\r\n\t\tvar itemsMarkedForDelete = storage.getItem('itemsMarkedForDelete') || {} ; \r\n\t\tif ( itemsMarkedForDelete[typeName])\r\n\t\t\tdelete itemsMarkedForDelete[typeName] ; \r\n\t\tstorage.setItem('itemsMarkedForDelete', itemsMarkedForDelete) ; \r\n\t}\r\n\r\n\treturn {\r\n\t\tmarkForDelete: markForDelete,\r\n\t\tgetList: getList,\r\n\t\tclear: clear,\r\n\t}\r\n}\nfunction BikeQuoteConfiguration(){\r\n\tthis.coverTypeClasses = {\r\n\t\tcomprehensive : {\r\n\t\t\tlabel : 'Comprehensive',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Comprehensive',\r\n\t\t\t\t\tdescriptor: 'comprehensive',\r\n\t\t\t\t\tsuperType: 'comprehensive'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\t\tthird_party: {\r\n\t\t\tlabel: 'Third Party',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Third party only',\r\n\t\t\t\t\tdescriptor: 'thirdpartyonly',\r\n\t\t\t\t\tsuperType: 'third_party'\r\n\t\t\t\t},\r\n\t\t\t\tfire_and_theft: {\r\n\t\t\t\t\tlabel: 'Third party fire and theft',\r\n\t\t\t\t\tdescriptor: 'thirdpartyfiretheft',\r\n\t\t\t\t\tsuperType: 'third_party'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.allCoverTypes = {\r\n\t\tcomprehensive_standard: this.coverTypeClasses.comprehensive.subClasses.standard,\r\n\t\tthird_party_fire_theft:this.coverTypeClasses.third_party.subClasses.fire_and_theft,\r\n\t\tthird_party_standard: this.coverTypeClasses.third_party.subClasses.standard,\r\n\t\t// platinum: this.coverTypeClasses.platinum.subClasses.standard,\r\n\t};\r\n\r\n\tthis.allCoverTypesByKey = {\r\n\t\tcomprehensive: this.coverTypeClasses.comprehensive.subClasses.standard,\r\n\t\tthird_party_fire_theft: this.coverTypeClasses.third_party.subClasses.fire_and_theft,\r\n\t\tthird_party: this.coverTypeClasses.third_party.subClasses.standard,\r\n\t};\r\n\r\n\r\n\tthis.allPaymentFrequencies = {\r\n\t\tannual: 'everyyear',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'everyotherweek'\r\n\t};\r\n\r\n\tthis.defaultPaymentFrequency = 'annual' ; // this.allPaymentFrequencies.annual;\r\n\r\n\tthis._reversePaymentFrequenciesLookup = {\r\n\t\tyearly: 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'fortnightly'\r\n\t};\r\n\r\n\tthis.allQuoteTypes = {\r\n\t\tfull: 'Full',\r\n\t\tquick: 'Quick',\r\n\t};\r\n\r\n\tthis.quoteRuleOptions = {\r\n\t\t// Rapid estimate quote options\r\n\t\t'rapidEstimate': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.estimate' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.riders': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.rider' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\t// coverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.quote': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\t// coverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.contact': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.contacts'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.payment': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.testQuoteDeclineOptions = {\r\n\t\t'bike.bike' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.motorcycle'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.riders' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.rider'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'bike.quote' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'motorcycle.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tthis.defaultCoverType = this.allCoverTypes.comprehensive_standard;\r\n\r\n\tthis.defaultRequotePageName = 'bike.quote';\r\n}\r\n\n'use strict';\r\n\r\nfunction CampaignService(ipCookie, util, labelService, CAMPAIGN_COOKIE_EXPIRY) {\r\n\tvar campaignId = null;\r\n\r\n\tfunction init() {\r\n\t\tvar campaignIdFromCookie = ipCookie('sc_camp');\r\n\t\tvar campaignIdFromQS = util.getQueryStringByName(window.location, 'sc_camp');\r\n\r\n\t\t// //expires: CAMPAIGN_COOKIE_EXPIRY, expirationUnit: 'milliseconds'\r\n\t\tcampaignId = campaignIdFromQS ? campaignIdFromQS : campaignIdFromCookie;\r\n\t\tif (campaignIdFromQS)\r\n\t\t\tipCookie('sc_camp', campaignIdFromQS, {});\r\n\t}\r\n\r\n\tfunction hasActiveCampaign() {\r\n\t\treturn campaignId != null;\r\n\t}\r\n\r\n\tfunction getActiveCampaignId() {\r\n\t\treturn campaignId;\r\n\t}\r\n\r\n\tfunction getCampaign() {\r\n\t\tif (!campaignId)\r\n\t\t\treturn null;\r\n\r\n\t\tvar campaign = labelService.extractCampaignInfoFor(campaignId);\r\n\t\tif (!campaign)\r\n\t\t\tvoid 0;\r\n\r\n\t\treturn campaign;\r\n\t}\r\n\r\n\tfunction getCampaignConfig(code, isCampaignNextStep) {\r\n\t\tvar campaignText;\r\n\r\n\t\tif (isCampaignNextStep) {\r\n\t\t\tcampaignText = util.isUndefinedOrNull(labelService.getGlobalOptionLabel('campaignConfiguration', code)) ?\r\n\t\t\t\tnull : labelService.getGlobalOptionLabel('campaignConfiguration', code);\r\n\t\t} else {\r\n\t\t\tcampaignText = util.isUndefinedOrNull(labelService.getGlobalOption('campaignBannerConfiguration', code)) ?\r\n\t\t\t\tnull : labelService.getGlobalOption('campaignBannerConfiguration', code).bannerContent;\r\n\t\t}\r\n\t\tvar campaignData = {\r\n\t\t\tisCampaignCodeValid: true,\r\n\t\t\tcontent: campaignText\r\n\t\t}\r\n\r\n\t\tif (util.isUndefinedOrNull(campaignText)) {\r\n\t\t\tcampaignData.isCampaignCodeValid = false;\r\n\t\t}\r\n\r\n\t\treturn campaignData;\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t\thasActiveCampaign: hasActiveCampaign,\r\n\t\tgetActiveCampaignId: getActiveCampaignId,\r\n\t\tgetCampaign: getCampaign,\r\n\t\tgetCampaignConfig: getCampaignConfig\r\n\t}\r\n}\r\n\nfunction CaravanQuoteConfiguration(){\r\n\tthis.coverTypeClasses = {\r\n\t\tcomprehensive : {\r\n\t\t\tlabel : 'Comprehensive',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Comprehensive',\r\n\t\t\t\t\tdescriptor: 'comprehensive',\r\n\t\t\t\t\tsuperType: 'comprehensive'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\tthis.allCoverTypes = {\r\n\t\tcomprehensive_standard: this.coverTypeClasses.comprehensive.subClasses.standard\r\n\t};\r\n\r\n\tthis.allCoverTypesByKey = {\r\n\t\tcomprehensive: this.coverTypeClasses.comprehensive.subClasses.standard\r\n\t};\r\n\r\n\r\n\tthis.allPaymentFrequencies = {\r\n\t\tannual: 'everyyear',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'everyotherweek'\r\n\t};\r\n\r\n\tthis.defaultPaymentFrequency = this.allPaymentFrequencies.annual;\r\n\r\n\tthis._reversePaymentFrequenciesLookup = {\r\n\t\tyearly: 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'fortnightly'\r\n\t};\r\n\r\n\tthis.allQuoteTypes = {\r\n\t\tfull: 'Full',\r\n\t\tquick: 'Quick',\r\n\t};\r\n\r\n\tthis.quoteRuleOptions = {\r\n\t\t// Rapid estimate quote options\r\n\t\t'rapidEstimate': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.estimate' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.drivers': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.policyHolder' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.quote': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.contact': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.contacts'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.payment': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.testQuoteDeclineOptions = {\r\n\t\t'caravan.caravan' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.caravan'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.drivers' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.policyHolder'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.quote' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'caravan.contact' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'caravan.contacts'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tthis.defaultCoverType = this.allCoverTypes.comprehensive_standard;\r\n\tthis.defaultRequotePageName = 'caravan.quote';\r\n}\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('qbePortal.routes')\r\n .run($run);\r\n\r\n\r\n $run.$inject = ['$rootScope', '$state' , '$stateParams', 'Util', 'storage', 'MODULE_INFO'];\r\n\r\n /**\r\n * track virtual page views for all page.\r\n */\r\n function $run($rootScope, $state, $stateParams, util, storage, MODULE_INFO) {\r\n\r\n\r\n $rootScope.$on('$stateChangeSuccess', function() {\r\n var completed = typeof(storage.getItem('completed-step')) === 'string' ? storage.getItem('completed-step') : null ;\r\n var fromRapidEstimate = typeof(storage.getItem('ignoreRapidEstimateRoute')) === 'string' ? true : false;\r\n\t var isRetrieval = storage.getItem('retrieve');\r\n util.dispatchCustomEvent('route-changed' , {current: $state.current, completed: completed});\r\n\r\n\r\n /** clean up storage on the first load of the first route\r\n * it's important this does not run when user comes back to\r\n * the first route through back or progress bar.\r\n */\r\n if ( !completed && !isRetrieval\r\n && $state.current.name == MODULE_INFO.startRouteName\r\n && ! fromRapidEstimate\r\n ) {\r\n storage.clear();\r\n }\r\n\r\n storage.removeItem('ignoreRapidEstimateRoute');\r\n });\r\n\r\n window.addEventListener('route-disallowed', function (e) {\r\n var redirect = e.detail.redirect || MODULE_INFO.startRouteName ;\r\n $state.go(redirect);\r\n });\r\n\r\n window.addEventListener('cross-route-disallowed', function (e) {\r\n var redirect = MODULE_INFO.startRouteName ;\r\n storage.clear();\r\n $state.go(redirect);\r\n });\r\n\r\n }\r\n})(angular);\r\n\nangular\r\n\t.module('qbePortal.services')\r\n\t.constant('STATES', [\r\n\t\t{\r\n\t\t\tlabel: 'ACT',\r\n\t\t\tvalue: 'ACT'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'NSW',\r\n\t\t\tvalue: 'NSW'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'NT',\r\n\t\t\tvalue: 'NT'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'QLD',\r\n\t\t\tvalue: 'QLD'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'SA',\r\n\t\t\tvalue: 'SA'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'TAS',\r\n\t\t\tvalue: 'TAS'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'VIC',\r\n\t\t\tvalue: 'VIC'\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'WA',\r\n\t\t\tvalue: 'WA'\r\n\t\t}\r\n\t])\r\n\t.constant('CAMPAIGN_COOKIE_EXPIRY', 30)\r\n\t.constant('CREDIT_CARD_ATTEMPT', 3)\r\n\t.service('Util', Util)\r\n\t.filter('excessValue', function() {\r\n\t\treturn function(excessValue, baseExcess) {\r\n\t\t\treturn excessValue + baseExcess;\r\n\t\t};\r\n\t})\r\n\t.service('labelService', ['$window', LabelService])\r\n\t.service('validationService', ['labelService', ValidationService])\r\n\t.service('storage', ['$window', '$state', SessionStorage])\r\n\t.service('userInputRepository', ['storage', 'Util', UserInputRepository])\r\n\t.service('hierarchyDecorator', HierarchyDecorator)\r\n\t.service('MAService', ['$http', 'campaignService', MAService])\r\n\t.service('quoteResultModelBuilder', ['Util', QuoteResultModelBuilder])\r\n\t.service('serviceResponseRepository', [\r\n\t\t'storage',\r\n\t\tServiceResponseRepository\r\n\t])\r\n\t.service('quoteResultModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\tQuoteResultModelFactory\r\n\t])\r\n\t.service('quoteServiceResponseTransformer', [\r\n\t\t'quoteResultModelBuilder',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteResultModelFactory',\r\n\t\tQuoteServiceResponseTransformer\r\n\t])\r\n\t.service('jsonMapper', ['serviceResponseRepository', JsonMapper])\r\n\t.service('splitterRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'jsonMapper',\r\n\t\t'publicIDTransformer',\r\n\t\t'coverTypeTransformer',\r\n\t\tSplitterRequestTransformer\r\n\t])\r\n\t.service('quoteOptions', [\r\n\t\t'quoteConfiguration',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteResultModelBuilder',\r\n\t\t'storage',\r\n\t\tQuoteOptions\r\n\t])\r\n\t.service('quoteRequestRepository', [\r\n\t\t'Util',\r\n\t\t'storage',\r\n\t\t'quoteOptions',\r\n\t\t'quoteConfiguration',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'structuredRequestTransformer',\r\n\t\t'defaultValueRequestTransformer',\r\n\t\t'formatConverterTransformer',\r\n\t\t'cleanRequestTransformer',\r\n\t\t'splitterRequestTransformer',\r\n\t\t'publicIDTransformer',\r\n\t\t'policyHolderHandler',\r\n\t\t'coverTypeTransformer',\r\n\t\t'coverTypeResolver',\r\n\t\t'coverOfferingResolver',\r\n\t\t'triggerGoalTransformer',\r\n\t\tQuoteRequestRepository\r\n\t])\r\n\t.service('portalServiceWrapper', [\r\n\t\t'guideWireService',\r\n\t\t'quoteRequestRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'retrieveSavedQuoteResponseTransformer',\r\n\t\t'quoteServiceResponseTransformer',\r\n\t\t'quoteOptions',\r\n\t\tPortalServiceWrapper\r\n\t])\r\n\t.service('guideWireService', ['$http', 'storage', 'Util', GuideWireService])\r\n\t.service('regoSearchService', [\r\n\t\t'guideWireService',\r\n\t\tfunction(guideWireService) {\r\n\t\t\treturn RegoSearchService.create(guideWireService);\r\n\t\t}\r\n\t])\r\n\t.service('gtmService', ['$window', 'campaignService', GtmService])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('coverOfferingResolver', [\r\n\t\t'MODULE_INFO',\r\n\t\tCoverOfferingResolverService\r\n\t])\r\n\t.service('aggregatedRemoveService', ['storage', AggregatedRemoveService])\r\n\t.service('quoteResultFilter', QuoteResultFilter)\r\n\t.service('campaignService', [\r\n\t\t'ipCookie',\r\n\t\t'Util',\r\n\t\t'labelService',\r\n\t\t'CAMPAIGN_COOKIE_EXPIRY',\r\n\t\tCampaignService\r\n\t])\r\n\t.service('tokenTimeoutService', [\r\n\t\t'$state',\r\n\t\t'jwtHelper',\r\n\t\t'storage',\r\n\t\t'labelService',\r\n\t\t'MODULE_INFO',\r\n\t\tJWTTimeoutService\r\n\t]);\r\n\r\nangular\r\n\t.module('qbePortal.services.bike')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'bike',\r\n\t\tinsuranceType: 'Bike',\r\n\t\troutePrefix: 'bike.',\r\n\t\tstartRouteName: 'bike.bike',\r\n\t\tproductCode: 'QPMMotorBike',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'bikeForm',\r\n\t\tpaymentPageRouteName: 'bike.payment',\r\n\t\tdonePageRouteName: 'bike.done',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'bike.quote': 'purchase_now',\r\n\t\t\t'bike.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t.service('quoteConfiguration', BikeQuoteConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeRetrieveSavedQuoteResponseTransformer\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tBikeCleanRequestTransformer\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tBikeFormatConverterTransformer\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tBikeDefaultValueRequestTransformer\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'storage',\r\n\t\tBikeStructureRequestTransformer\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tBikePublicIDTransformer\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tBikePolicyHolderHandler\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeCoverTypeTransformer\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('quoteResultModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\tQuoteResultModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tutil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tutil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeTriggerGoalTransformer\r\n\t]);\r\n\r\nangular\r\n\t.module('qbePortal.services.caravan')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'caravan',\r\n\t\tinsuranceType: 'Caravan',\r\n\t\troutePrefix: 'caravan.',\r\n\t\tstartRouteName: 'caravan.caravan',\r\n\t\tproductCode: 'QPCCaravanTrailer',\r\n\t\tmainFormName: 'caravanForm',\r\n\t\tpaymentPageRouteName: 'caravan.payment',\r\n\t\tdonePageRouteName: 'caravan.done',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'caravan.quote': 'purchase_now',\r\n\t\t\t'caravan.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t.service('quoteConfiguration', CaravanQuoteConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tCaravanRetrieveSavedQuoteResponseTransformer\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tCaravanCleanRequestTransformer\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tCaravanFormatConverterTransformer\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'userInputRepository',\r\n\t\t'quoteOptions',\r\n\t\tCaravanDefaultValueRequestTransformer\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'storage',\r\n\t\tCaravanStructureRequestTransformer\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tCaravanPublicIDTransformer\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tCaravanPolicyHolderHandler\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tCaravanCoverTypeTransformer\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.filter('vehicleType', function() {\r\n\t\treturn function(type) {\r\n\t\t\tvar vehicleTypes = {\r\n\t\t\t\tcaravan: 'Caravan',\r\n\t\t\t\tcampertrailer: 'Camper Trailer',\r\n\t\t\t\tslideoncamper: 'Slide on Camper',\r\n\t\t\t\tgoodscarryingtrailer: 'Goods Carrying Trailer',\r\n\t\t\t\tcampervan: 'Camper Van',\r\n\t\t\t\trelocatablehome: 'Relocatable Home',\r\n\t\t\t\tmotorhome: 'Motor Home'\r\n\t\t\t};\r\n\r\n\t\t\treturn vehicleTypes[type];\r\n\t\t};\r\n\t})\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tCaravanTriggerGoalTransformer\r\n\t]);\r\n\r\nangular\r\n\t.module('qbePortal.services.home')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'home',\r\n\t\tinsuranceType: 'Home',\r\n\t\troutePrefix: 'home.',\r\n\t\tstartRouteName: 'home.estimate',\r\n\t\tproductCode: 'QPHHome',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'homeForm',\r\n\t\tpaymentPageRouteName: 'home.payment',\r\n\t\tdonePageRouteName: 'home.done',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'home.quote': 'purchase_now',\r\n\t\t\t'home.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t// service('commonData', 'storage', HomeCommonData ).\r\n\t.service('quoteConfiguration', HomeQuoteConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tHomeRetrieveSavedQuoteResponseTransformer\r\n\t])\r\n\t.service('splitterRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'jsonMapper',\r\n\t\t'publicIDTransformer',\r\n\t\t'coverTypeTransformer',\r\n\t\tHomeSplitterRequestTransformer\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tHomeCleanRequestTransformer\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tHomeFormatConverterTransformer\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'userInputRepository',\r\n\t\t'quoteOptions',\r\n\t\tHomeDefaultValueRequestTransformer\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'storage',\r\n\t\tHomeStructureRequestTransformer\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\tHomePublicIDTransformer\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tHomePolicyHolderHandler\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tHomeCoverTypeTransformer\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('quoteResultModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\tQuoteResultModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeTriggerGoalTransformer\r\n\t]);;\r\n\r\nangular\r\n\t.module('qbePortal.services.vehicle')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'vehicle',\r\n\t\tinsuranceType: 'Car',\r\n\t\troutePrefix: 'vehicle.',\r\n\t\tstartRouteName: 'vehicle.vehicle',\r\n\t\tproductCode: 'QPMMotorVehicle',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'vehicleForm',\r\n\t\tpaymentPageRouteName: 'vehicle.payment',\r\n\t\tdonePageRouteName: 'vehicle.done',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'vehicle.quote': 'purchase_now',\r\n\t\t\t'vehicle.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t// service('commonData', [ 'storage', VehicleCommonData])\r\n\t.service('quoteConfiguration', VehicleQuoteConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tVehicleRetrieveSavedQuoteResponseTransformer\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tVehicleCleanRequestTransformer\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tVehicleFormatConverterTransformer\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'userInputRepository',\r\n\t\t'quoteOptions',\r\n\t\tVehicleDefaultValueRequestTransformer\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'storage',\r\n\t\tVehicleStructureRequestTransformer\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tVehiclePublicIDTransformer\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tVehiclePolicyHolderHandler\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tVehicleCoverTypeTransformer\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', CoverTypeResolverService])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t]);\r\n\r\nangular\r\n\t.module('qbePortal.services.ctp')\r\n\t/** requires insurance form type */\r\n\t.constant('MODULE_INFO', {\r\n\t\tid: 'ctp',\r\n\t\tinsuranceType: 'CTP SA',\r\n\t\troutePrefix: 'ctp.',\r\n\t\tstartRouteName: 'ctp.ctp',\r\n\t\tproductCode: '',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'ctpForm',\r\n\t\tpaymentPageRouteName: '',\r\n\t\tdonePageRouteName: '',\r\n\t\tpaymentPanelButtonText: {}\r\n\t})\r\n\t.service('quoteConfiguration', GenericConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', GenericConfiguration])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeTriggerGoalTransformer\r\n\t]);;\r\n\r\nangular\r\n\t.module('qbePortal.services.payments')\r\n\t.constant('MODULE_INFO', {\r\n\t\t/*id is for QBE bar on top and side bar on left*/\r\n\t\tid: 'payments',\r\n\t\tinsuranceType: 'Car',\r\n\t\troutePrefix: 'payments.',\r\n\t\tstartRouteName: 'payments.payments',\r\n\t\tproductCode: 'QPMMotorVehicle',\r\n\t\tavailableCoverTypes: [],\r\n\t\tmainFormName: 'paybillForm',\r\n\t\tpaymentPageRouteName: 'payments.payments',\r\n\t\tdonePageRouteName: 'payments.complete',\r\n\t\tpaymentPanelButtonText: {\r\n\t\t\t'payments.quote': 'purchase_now',\r\n\t\t\t'payments.contact': 'proceed_to_payment'\r\n\t\t}\r\n\t})\r\n\t.service('quoteConfiguration', GenericConfiguration)\r\n\t.service('retrieveSavedQuoteResponseTransformer', [\r\n\t\t'$filter',\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('cleanRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('formatConverterTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('defaultValueRequestTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('structuredRequestTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('publicIDTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\t'serviceResponseRepository',\r\n\t\t'aggregatedRemoveService',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('policyHolderHandler', [\r\n\t\t'Util',\r\n\t\t'publicIDTransformer',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('coverTypeTransformer', [\r\n\t\t'Util',\r\n\t\t'jsonMapper',\r\n\t\tGenericConfiguration\r\n\t])\r\n\t.service('coverTypeResolver', ['MODULE_INFO', GenericConfiguration])\r\n\t.service('quoteModelFactory', [\r\n\t\t'MODULE_INFO',\r\n\t\t'userInputRepository',\r\n\t\t'serviceResponseRepository',\r\n\t\t'quoteOptions',\r\n\t\t'quoteRequestRepository',\r\n\t\t'Util',\r\n\t\t'$rootScope',\r\n\t\tQuoteModelFactory\r\n\t])\r\n\t.service('paymentService', [\r\n\t\t'$http',\r\n\t\t'$state',\r\n\t\t'storage',\r\n\t\t'userInputRepository',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteModelFactory',\r\n\t\t'Util',\r\n\t\t'quoteOptions',\r\n\t\t'paymentLoggerService',\r\n\t\tfunction(\r\n\t\t\t$http,\r\n\t\t\t$state,\r\n\t\t\tstorage,\r\n\t\t\tuserInputRepository,\r\n\t\t\tportalServiceWrapper,\r\n\t\t\tquoteModelFactory,\r\n\t\t\tUtil,\r\n\t\t\tquoteOptions,\r\n\t\t\tpaymentLoggerService\r\n\t\t) {\r\n\t\t\treturn PaymentService.bootstrap(\r\n\t\t\t\t$http,\r\n\t\t\t\t$state,\r\n\t\t\t\tstorage,\r\n\t\t\t\tuserInputRepository,\r\n\t\t\t\tportalServiceWrapper,\r\n\t\t\t\tquoteModelFactory,\r\n\t\t\t\tUtil,\r\n\t\t\t\tquoteOptions,\r\n\t\t\t\tpaymentLoggerService\r\n\t\t\t);\r\n\t\t}\r\n\t])\r\n\t.service('triggerGoalTransformer', [\r\n\t\t'jsonMapper',\r\n\t\t'Util',\r\n\t\tBikeTriggerGoalTransformer\r\n\t]);;\r\n\n'use strict';\r\nfunction CoverOfferingResolverService(MODULE_INFO) {\r\n\tfunction resolve(quote) {\r\n\t\tswitch (MODULE_INFO.id) {\r\n\t\t\tcase 'home':\r\n\t\t\t\treturn quote.dwellings[0].offering;\r\n\t\t\tcase 'bike':\r\n\t\t\tcase 'vehicle' :\r\n\t\t\tcase 'caravan':\r\n\t\t\t\treturn null;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow 'Unknown module info';\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tresolve: resolve\r\n\t}\r\n}\r\n\n'use strict';\r\nfunction CoverTypeResolverService(MODULE_INFO) {\r\n\tfunction resolve(quote) {\r\n\t\tswitch (MODULE_INFO.id) {\r\n\t\t\tcase 'home':\r\n\t\t\t\treturn quote.dwellings[0].coverType;\r\n\t\t\tcase 'bike':\r\n\t\t\t\treturn quote.motorcycles[0].coverType ;\r\n\t\t\tcase 'vehicle' :\r\n\t\t\t\treturn quote.vehicles[0].coverType ;\r\n\t\t\tcase 'caravan':\r\n\t\t\t\treturn quote.caravans[0].coverType ;\r\n\t\t\t\t// return quote.coverType ;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow 'Unknown module info';\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tresolve: resolve\r\n\t}\r\n}\r\n\n\"use strict\";\r\n\r\nfunction dynamicRouterProvider($stateProvider, util) {\r\n\tthis.$get = function () {\r\n\t\treturn new DynamicRouter(stacks, util);\r\n\t};\r\n\r\n\tvar stacks = {};\r\n\r\n\tfunction registerCommonRoutes(conf, route, routeName) {\r\n\t\tif( conf.pages[routeName]) {\r\n\t\t\tvar routeConfig = angular.extend({}, conf.pages[routeName], route.config);\r\n\t\t\trouteConfig.views = {\r\n\t\t\t\t'@': {\r\n\t\t\t\t\ttitle: routeConfig.title,\r\n\t\t\t\t\ttemplateUrl: routeConfig.templateUrl,\r\n\t\t\t\t\tcontroller : routeConfig.controller,\r\n\t\t\t\t\tcontrollerAs : routeConfig.controllerAs\r\n\t\t\t\t},\r\n\t\t\t\t'header@': {\r\n\t\t\t\t\ttemplate: routeConfig.title\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t$stateProvider.state(routeName, routeConfig);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction registerStepsRoutes(conf, stack, stackName) {\r\n\t\tvar allRoutes = stack.steps.slice();\r\n\t\tallRoutes.push(stack.home);\r\n\r\n\t\tfor (var key in allRoutes) {\r\n\t\t\tvar route = allRoutes[key];\r\n\t\t\tvar page = conf.pages[route.name];\r\n\t\t\tvar stepNum = parseInt(key) + 1;\r\n\t\t\t\r\n\t\t\tif (!(page || route.config.abstract ))\r\n\t\t\t\tthrow 'Qbe Portal : Expected state URL for state ' + route.name + ' but could not find it';\r\n\r\n\t\t\tif (page) {\r\n\t\t\t\troute.config.url = page.url;\r\n\t\t\t\troute.config.views['@'].title = page.title;\r\n\t\t\t\troute.config.views['@'].templateUrl = page.templateUrl;\r\n\t\t\t\troute.config.views['sidebar@'].templateUrl = page.sidebarTemplateUrl;\r\n\t\t\t\t// start add updates\r\n\t\t //route.config.views['progressbar@'].templateUrl = page.progressbarTemplateUrl;\r\n\t\t //route.config.views['headbar@'].templateUrl = page.headbarTemplateUrl;\r\n\t\t // end\r\n\t\t\t\troute.config.views['meta@'].templateUrl = page.metaTemplateUrl;\r\n\t\t\t\troute.config.views['header@'].template = page.title;\r\n\t\t\t\troute.config.progressBarTitle = page.progressBarTitle;\r\n\t\t\t\troute.config.progressBarShortTitle = 'Step ' + stepNum + ' - ' + page.progressBarShortTitle;\r\n\t\t\t\troute.config.stateName = route.name;\r\n\r\n\t\t\t\tif(page.params) {\r\n\t\t\t\t\troute.config.params = page.params;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$stateProvider.state(route.name, route.config);\r\n\t\t}\r\n\t\tstacks[stackName] = stack;\r\n\t}\r\n\r\n\tthis.init = function (conf, stacks) {\r\n\t\tfor (var routeName in routes.common) {\r\n\t\t\tvar route = routes.common[routeName],\r\n\t\t\t\trouteConfig;\r\n\r\n\t\t\tif (!route) {\r\n\t\t\t\tthrow 'Qbe Portal : Expected routing stack with name ' + routeName + ' but could not find it';\r\n\t\t\t}\r\n\r\n\t\t\tregisterCommonRoutes(conf, route, routeName) ;\r\n\t\t}\r\n\r\n\t\tfor (var key in stacks) {\r\n\t\t\tvar stackName = stacks[key];\r\n\t\t\tvar stack = routes[stackName];\r\n\t\t\tif (!stack)\r\n\t\t\t\tthrow 'Qbe Portal : Expected routing stack with name ' + stackName + ' but could not find it';\r\n\r\n\t\t\tregisterStepsRoutes(conf, stack, stackName) ;\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction DynamicRouter(stacks, util) {\r\n\tvar currentStack,\r\n\t\tcurrentState,\r\n\t\tcurrentStep,\r\n\t\ttotalSteps,\r\n\t\tsteps,\r\n\t\tconditions,\r\n\t\tlastCompletedStep;\r\n\r\n\r\n\twindow.addEventListener('route-changed', function (e) {\r\n\t\tlastCompletedStep = typeof(e.detail.completed) === 'string' ? e.detail.completed : null;\r\n\t}, false);\r\n\r\n\r\n\t/**\r\n\t * Initialises the dynamic router.\r\n\t * @stateName: state name of current page e.g. 'vehicle.drivers'\r\n\t * @stackname: name of the parent of current page e.e. 'vehicle'\r\n\t * @stepConditions: optional - a conditions object which may includes conditions for certain states determining if they are visible.\r\n\t */\r\n\tfunction initialise(stateName, stackName, stepConditions, markCompletedFn) {\r\n\t\tif (stackName == \"\") stackName = stateName; // state is parent state.\r\n\t\tconditions = stepConditions || {} ;\r\n\t\tcurrentStack = stacks[stackName];\r\n\t\tclearSteps() ;\r\n\t\tsteps = getSteps() ;\r\n\t\tvar currentStepDef = findStepByName(steps, stateName) ;\r\n\t\tcurrentState = currentStepDef.name;\r\n\t\tcurrentStep = currentStepDef.index;\r\n\t\ttotalSteps = steps.length;\r\n\t\tcheckRouteAllowed(markCompletedFn);\r\n\t}\r\n\r\n\tfunction checkRouteAllowed(markCompletedFn) {\r\n\t\t/** first route step is always allowed */\r\n\t\tvar step = findStepByName(steps, lastCompletedStep);\r\n\r\n\t\tif ( currentState.indexOf('.done') !== -1 )\r\n\t\t\treturn true;\r\n\r\n\t\tif (!step && lastCompletedStep) {\r\n\t\t\tdispatchCustomEvent('cross-route-disallowed');\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif(currentState == 'home.property'){\r\n\t\t\t//special condition to allow the home retrieve\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(currentState == 'bike.quote'){\r\n\t\t\t//special condition to allow the home retrieve\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(currentState == 'caravan.quote'){\r\n\t\t\t//special condition to allow the home retrieve\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (currentStep > 0) {\r\n\t\t\tif ( ! step || currentStep > step.index + 1 ){\r\n\t\t\t\tdispatchCustomEvent('route-disallowed',\r\n\t\t\t\t\t{\r\n\t\t\t\t\tredirect: lastCompletedStep,\r\n\t\t\t\t\tmsg :'Not allowed to navigate to route ' + currentStep\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * updates the completed route only when backtracking\r\n\t\t * to previous steps. For going next update completed\r\n\t\t * needs to be updated by the next() function.\r\n\t\t */\r\n\t\tif (step && currentStep < step.index)\r\n\t\t\tmarkCompletedFn(currentState) ;\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tfunction findStepByName(steps, stateName) {\r\n\t\tvar selectedStep = null ;\r\n\t\tsteps.some(\r\n\t\t\tfunction (step, i) {\r\n\t\t\t\tif (step.stateName == stateName) {\r\n\t\t\t\t\tselectedStep = {\r\n\t\t\t\t\t\tname : stateName,\r\n\t\t\t\t\t\tindex : i,\r\n\t\t\t\t\t};\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn selectedStep ;\r\n\t}\r\n\r\n\tfunction getPageTitle() {\r\n\t\treturn steps[currentStep].progressBarTitle;\r\n\t}\r\n\r\n\tfunction getSteps() {\r\n\t\tif ( currentStack && currentStack.steps ) {\r\n\t\t\tif ( !steps) {\r\n\t\t\t\tsteps = currentStack.steps.map(\r\n\t\t\t\t\tfunction (step, i) {\r\n\t\t\t\t\t\tvar addStep = !conditions[step.config.stateName] || conditions[step.config.stateName]() ;\r\n\t\t\t\t\t\tif ( addStep )\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\ttitle: step.config.title,\r\n\t\t\t\t\t\t\t\tprogressBarTitle: step.config.progressBarTitle,\r\n\t\t\t\t\t\t\t\tprogressBarShortTitle: step.config.progressBarShortTitle,\r\n\t\t\t\t\t\t\t\tstepNumber: i,\r\n\t\t\t\t\t\t\t\tstateName : step.config.stateName\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\r\n\t\t\t\tsteps = steps.filter(function(step){ return !!step}) ;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn steps;\r\n\t}\r\n\r\n\tfunction clearSteps() {\r\n\t\tsteps = null ;\r\n\t}\r\n\r\n\tfunction next(markCompletedFn) {\r\n\t\tmarkCompletedFn(getCurrentState().name);\r\n\t\treturn steps[++currentStep].stateName;\r\n\t}\r\n\r\n\tfunction getNextState() {\r\n\t\treturn steps[currentStep+1].stateName;\r\n\t}\r\n\r\n\r\n\tfunction getCurrentState() {\r\n\t\treturn {\r\n\t\t\tname: steps[currentStep].stateName,\r\n\t\t\tnumber: currentStep\r\n\t\t}\r\n\t}\r\n\r\n\tfunction back() {\r\n\t\tif ( currentStep > 0)\r\n\t\t\treturn steps[--currentStep].stateName;\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction getState(step) {\r\n\t\treturn steps[step].stateName;\r\n\t}\r\n\r\n\treturn {\r\n\t\tinitialise: initialise,\r\n\t\tnext: next,\r\n\t\tback: back,\r\n\t\tgetPageTitle: getPageTitle,\r\n\t\tgetSteps: getSteps,\r\n\t\tgetState: getState,\r\n\t\tgetCurrentState: getCurrentState,\r\n\t\tgetNextState: getNextState,\r\n\t};\r\n}\r\n\n(function() {\r\n\t\"use strict\";\r\n\r\n\tangular\r\n\t\t.module(\"qbePortal\")\r\n\t\t.service(\"embargoTestService\", embargoTestService);\r\n\r\n\tembargoTestService.$inject = [\"$state\"];\r\n\r\n\tfunction embargoTestService($state) {\r\n\t\tthis.testEmbargoDecline = testEmbargoDecline;\r\n\r\n\t\tfunction testEmbargoDecline(response) {\r\n\t\t\tvar data = response.data || response.quote;\r\n\r\n\t\t\tif (data.quoteResult) {\r\n\t\t\t\tvar declineParams = {\r\n\t\t\t\t\tdeclineType: \"\",\r\n\t\t\t\t\tdeclineCodes: []\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (data.quoteResult.embargo) {\r\n\t\t\t\t\tdeclineParams.declineType = \"embargo\";\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tdata.quoteResult.referral &&\r\n\t\t\t\t\t!data.quoteResult.embargo\r\n\t\t\t\t) {\r\n\t\t\t\t\tdeclineParams.declineType = \"referral\";\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tdata.quoteResult.decline &&\r\n\t\t\t\t\t!data.quoteResult.embargo\r\n\t\t\t\t) {\r\n\t\t\t\t\tdeclineParams.declineType = \"decline\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdata.quoteResult.uwIssues.forEach(function(element) {\r\n\t\t\t\t\tdeclineParams.declineCodes.push(element.typeCode);\r\n\t\t\t\t}, this);\r\n\r\n\t\t\t\treturn declineParams;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n})();\r\n\n\"use strict\";\r\n\r\nfunction FormSchemaService(DOM) {\r\n\tvar schema = {},\r\n\t\tstructure = {} ;\r\n\r\n\tDOM.addEventListener('register-schema', function (e) {\r\n\t\tregisterSchema(DOM.qbe);\r\n\t}, false);\r\n\r\n\tfunction registerSchema(conf) {\r\n\t\tschema = conf.formSchema;\r\n\t\tstructure = conf.formStructure;\r\n\t}\r\n\t\r\n\tfunction extractGroup(groupName, param) {\r\n\t\tvar field = structure[groupName] ;\r\n\t\tif ( ! field )\r\n\t\t\tthrow groupName + ' does not exist in the form structure';\r\n\t\telse if ( typeof(field) == 'string' )\r\n\t\t\treturn extractGroup(field) ; \r\n\r\n\t\treturn structure[groupName] ; \r\n\t}\r\n\r\n\tfunction extractField(fieldName) {\r\n\t\tvar field = schema[fieldName];\r\n\t\tif ( ! field )\r\n\t\t\tthrow fieldName + ' does not exist in the form schema/structure';\r\n\t\treturn field;\r\n\t}\r\n\t\r\n\tfunction getGenericValidationMessageFor(rule) {\r\n\t\treturn 'generic error message' ; \r\n\t}\r\n\r\n\treturn {\r\n\t\textractGroup: extractGroup,\r\n\t\textractField: extractField,\r\n\t\tgetGenericValidationMessageFor: getGenericValidationMessageFor,\r\n\t};\r\n}\r\n\nfunction GenericConfiguration() {\r\n\t// handles routes that are not part of the quote process\r\n}\r\n\n\"use strict\";\r\n\r\nfunction GuideWireService($http, storage, util) {\r\n\r\n var mulesoftApiHeaders = (endpointUrls.rego.mulesoftApiHeader) \r\n ? { \r\n 'X-SourceSystem': 'Sitecore',\r\n 'X-TrackingID': '',\r\n 'X-Mockable': (endpointUrls.rego.mulesoftApiHeader.xMockable) ? true : false,\r\n }\r\n : {};\r\n\r\n var conf = {\r\n embargo: {\r\n method: 'GET',\r\n url: '',\r\n headers: {\r\n 'X-Mockable': endpointUrls.quote.embargoxMockable,\r\n 'X-SourceSystem': '',\r\n 'X-TrackingID': '',\r\n 'X-TargetEnv': '',\r\n },\r\n },\r\n regoSearch: {\r\n method: 'GET',\r\n url: endpointUrls.rego.regoSearch,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'X-Requested-By': '98wuebh3e2',\r\n 'UserID': \"\"\r\n },\r\n },\r\n makeSearch: {\r\n method: 'GET',\r\n url: endpointUrls.rego.makeSearch,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n modelSearch: {\r\n method: 'GET',\r\n url: endpointUrls.rego.modelSearch,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n carSearch: {\r\n method: 'GET',\r\n url: endpointUrls.rego.carSearch,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n addressSearch: {\r\n method: 'GET',\r\n url: endpointUrls.addresses.addressSearch,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc'\r\n },\r\n },\r\n createQuote: {\r\n method: 'POST',\r\n url: endpointUrls.quote.quote,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'channel': 'portal',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n updateQuote: {\r\n method: 'PUT',\r\n url: endpointUrls.quote.quote,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'channel': 'portal',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n quickQuote: {\r\n method: 'POST',\r\n url: endpointUrls.quote.quickQuote,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'channel': 'portal',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n\t\ttriggerGoal: {\r\n\t\t\tmethod: 'POST',\r\n\t\t\turl: '/sitecore/api/qbe/Experience/TriggerGoal',\r\n\t\t\theaders: {\r\n\t\t\t\t'EY-Access-Key': 'test123',\r\n\t\t\t\t'EY-Product-Type': 'pc',\r\n\t\t\t\t'channel': 'portal',\r\n\t\t\t\tAccept: \"application/json, text/plain, */*\",\r\n\t\t\t\t'Cache-Control': \"no-cache\",\r\n\t\t\t\tPragma: \"no-cache\",\r\n\t\t\t\t'X-Requested-By': \"92tvt8iy2b\"\r\n\t\t\t},\r\n\t\t},\t\t\r\n retrieveSavedQuote: {\r\n method: 'GET',\r\n url: endpointUrls.quote.retrieveSavedQuote,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'channel': 'portal',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n isCampaignCodeValid: {\r\n method: 'HEAD',\r\n url: endpointUrls.quote.campaign,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'X-Requested-By': '92tvt8iy2b'\r\n },\r\n },\r\n refreshAddress: {\r\n method: 'POST',\r\n url: endpointUrls.addresses.refresh,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n Accept: \"application/json, text/plain, */*\",\r\n 'Cache-Control': \"no-cache\",\r\n Pragma: \"no-cache\",\r\n 'X-Requested-By': \"92tvt8iy2b\"\r\n },\r\n },\r\n refreshVehicleDetails: {\r\n method: 'GET',\r\n url: endpointUrls.rego.refresh,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n refreshCaravanDetails: {\r\n method: 'GET',\r\n url: endpointUrls.rego.refresh,\r\n headers: getMulesoftApiHeadersForVgi(mulesoftApiHeaders),\r\n },\r\n isBSBValid: {\r\n method: 'GET',\r\n url: endpointUrls.quote.bsbValidation,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'X-Requested-By': '92tvt8iy2b'\r\n },\r\n },\r\n doesUserExist: {\r\n method: 'HEAD',\r\n url: endpointUrls.quote.doesUserExist,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc',\r\n 'X-Requested-By': '92tvt8iy2b'\r\n },\r\n },\r\n getPayment: {\r\n method: 'GET',\r\n url: endpointUrls.payments.referenceNumber,\r\n headers: {\r\n 'EY-Access-Key': 'test123',\r\n 'EY-Product-Type': 'pc'\r\n }\r\n }\r\n };\r\n\r\n return {\r\n regoSearch: function (data) {\r\n var req = conf.regoSearch;\r\n req.params = data;\r\n req.headers.UserID = checkUserID();\r\n return $http(req);\r\n },\r\n addressSearch: function (data) {\r\n var req = conf.addressSearch;\r\n req.params = data;\r\n return $http(req);\r\n },\r\n makeSearch: function (data) {\r\n var req = conf.makeSearch;\r\n req.params = data;\r\n return $http(req);\r\n },\r\n modelSearch: function (data) {\r\n var req = conf.modelSearch;\r\n req.params = data;\r\n return $http(req);\r\n },\r\n carSearch: function (data) {\r\n var req = conf.carSearch;\r\n req.params = data;\r\n return $http(req);\r\n },\r\n saveQuote: function (quoteRequest, credentials, params) {\r\n var req = quoteRequest.quoteID ? conf.updateQuote : conf.createQuote;\r\n req = Object.extend({}, req);\r\n req.data = quoteRequest;\r\n\r\n if (params) {\r\n req.params = params;\r\n }\r\n\r\n if (quoteRequest.quoteID) {\r\n req.url = req.url + '/' + quoteRequest.quoteID;\r\n }\r\n if (credentials) {\r\n req.headers['EY-USER-TOKEN'] = credentials.eyUserToken;\r\n }\r\n return $http(req);\r\n },\r\n getQuickQuote: function (quoteRequests, params, credentials) {\r\n var req = conf.quickQuote;\r\n req.data = quoteRequests;\r\n req.params = params;\r\n return $http(req);\r\n },\r\n\t\ttriggerGoal: function (quoteRequests) {\r\n\t\t\tvar req = conf.triggerGoal; \r\n\t\t\treq.data = quoteRequests;\r\n\t\t\treturn $http(req);\r\n\t\t},\r\n retrieveSavedQuote: function (quoteId, email) {\r\n var req = conf.retrieveSavedQuote;\r\n req = Object.extend({}, req);\r\n req.url += quoteId;\r\n req.params = {\r\n email: email\r\n };\r\n return $http(req);\r\n },\r\n isCampaignCodeValid: function (code) {\r\n var req = conf.isCampaignCodeValid;\r\n req.params = {\r\n code: code,\r\n timestamp: (new Date()).getTime()\r\n };\r\n return $http(req);\r\n },\r\n refreshAddress: function (address) {\r\n var req = conf.refreshAddress;\r\n req.data = address;\r\n return $http(req);\r\n },\r\n refreshVehicleDetails: function (vgiId, effectiveDate) {\r\n var req = conf.refreshVehicleDetails;\r\n req.params = {\r\n effectiveDate: effectiveDate,\r\n id: vgiId, \r\n categoryId: 'VehID'\r\n }\r\n return $http(req);\r\n },\r\n refreshCaravanDetails: function (vgiId, effectiveDate) {\r\n var req = conf.refreshCaravanDetails;\r\n\r\n req.params = {\r\n effectiveDate: effectiveDate,\r\n id: vgiId,\r\n categoryId: 'VehID'\r\n }\r\n return $http(req);\r\n },\r\n isBSBValid: function (bsb) {\r\n var req = conf.isBSBValid, bsbReformatted = null;\r\n req = Object.extend({}, req);\r\n // reformat bsb to xxx-xxx format for service\r\n try {\r\n bsbReformatted = bsb.replace(/[^0-9.]/g, \"\").match(/.{3}/g).join('-');\r\n req.url = req.url + '/' + bsbReformatted;\r\n return $http(req);\r\n } catch (ex) {\r\n throw 'Invalid BSB provided';\r\n }\r\n },\r\n doesUserExist: function (email) {\r\n var req = conf.doesUserExist;\r\n req = Object.extend({}, req);\r\n req.url = req.url + '/' + email;\r\n return $http(req);\r\n },\r\n getPaymentInfo: function (refNumber){\r\n var req = conf.getPayment;\r\n req = Object.extend({}, req);\r\n req.url = req.url + '/' + refNumber;\r\n return $http(req);\r\n },\r\n checkEmbargo: function(postcode, type) {\r\n var req = conf.embargo;\r\n req.headers['X-TrackingID'] = uuidv4();\r\n req.headers['X-SourceSystem'] = 'QBE-SPA-' + type + '-QuoteBuy'; //type: 'Bike' 'Caravan'\r\n req.headers['X-TargetEnv'] = endpointUrls.quote.embargoTargetEnv;\r\n req.url = endpointUrls.quote.embargo + \"?postalCode=[postcode]&policyLine=\" + endpointUrls.quote.embargoPolicyLine + \"&asOfDate=[date]\";\r\n req.url = req.url.replace(\"[date]\", moment().tz(\"Australia/Sydney\").format(\"YYYY-MM-DD\"));\r\n req.url = req.url.replace(\"[postcode]\", postcode);\r\n return $http(req);\r\n }\r\n };\r\n\r\n function checkUserID() {\r\n if (storage.getItem('uKey').uKey) {\r\n return storage.getItem('uKey').uKey;\r\n } else {\r\n var newKey = util.generateRandomString(5);\r\n storage.setItem('uKey', { uKey : newKey });\r\n return newKey;\r\n }\r\n }\r\n\r\n function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n function getMulesoftApiHeadersForVgi(mulesoftApiHeadersConfig) {\r\n if (endpointUrls.quote && endpointUrls.quote.embargoTargetEnv) {\r\n mulesoftApiHeadersConfig['X-TargetEnv'] = endpointUrls.quote.embargoTargetEnv;\r\n } \r\n mulesoftApiHeadersConfig['X-TrackingID'] = uuidv4();\r\n return mulesoftApiHeadersConfig;\r\n }\r\n\r\n return new GuideWireService(new gwService());\r\n}\r\n\nfunction HierarchyDecorator() {\r\n\t\r\n\tfunction attach($scope, params) {\r\n\t\tvar element = params.element,\r\n\t\t\tname = params.name,\r\n\t\t\thierarchy = params.hierarchy; \r\n\t\t\r\n\t\tif ( name === '') \r\n\t\t\tname = 'ag_' + $scope.$id ; \r\n\r\n\t\t$scope.hierarchyList = [name] ; \r\n\r\n\t\t$scope.setHierarchy(\r\n\t\t\t{\r\n\t\t\t name : name, \r\n\t\t\t setHierarchyFn : function(parentHierarchy) {\r\n\t\t\t \t\t$scope.hierarchyList = parentHierarchy.concat($scope.hierarchyList);\r\n\t\t\t\t\t$scope.HTMLId = $scope.hierarchyList.slice().join('_');\r\n\t\t\t\t\telement.attr('id' , $scope.HTMLId);\r\n\t\t\t\t\t$scope.$emit('element-id-set',element.attr('label-key'), $scope.HTMLId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t) ; \r\n\t}\r\n\r\n\treturn {\r\n\t\tattach: attach\r\n\t}\t\r\n}\nfunction HomeQuoteConfiguration(){\r\n\tthis.coverTypeClasses = {\r\n\t\tbuilding_and_contents: {\r\n\t\t\tlabel : 'Building & contents',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Building & contents',\r\n\t\t\t\t\tdescriptor: 'building_and_contents',\r\n\t\t\t\t\tsuperType: 'building_and_contents'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tbuilding_only: {\r\n\t\t\tlabel : 'Building only',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Building only',\r\n\t\t\t\t\tdescriptor: 'building_only',\r\n\t\t\t\t\tsuperType: 'building_only'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\t\tcontents_only: {\r\n\t\t\tlabel : 'Contents',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Contents',\r\n\t\t\t\t\tdescriptor: 'contents_only',\r\n\t\t\t\t\tsuperType: 'contents_only'\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\tthis.allCoverTypes = {\r\n\t\tbuilding_and_contents: this.coverTypeClasses.building_and_contents.subClasses.standard,\r\n\t\tbuilding_only: this.coverTypeClasses.building_only.subClasses.standard,\r\n\t\tcontents_only: this.coverTypeClasses.contents_only.subClasses.preferred,\r\n\t};\r\n\r\n\tthis.allOfferings = {\r\n\t\tQPHStandardOffering: {\r\n\t\t\tlabel: 'Standard',\r\n\t\t\tdescriptor: 'QPHStandardOffering',\r\n\t\t\tsuperType: ''\r\n\t\t},\r\n\t\tQPHPrestigeOffering: {\r\n\t\t\tlabel: 'Prestige',\r\n\t\t\tdescriptor: 'QPHPrestigeOffering',\r\n\t\t\tsuperType: ''\r\n\t\t},\r\n\t\tQPHLandlordOffering: {\r\n\t\t\tlabel: 'Landlord',\r\n\t\t\tdescriptor: 'QPHLandlordOffering',\r\n\t\t\tsuperType: ''\r\n\t\t},\r\n\t\tQPHStrataContentsOffering: {\r\n\t\t\tlabel: 'Strata Contents',\r\n\t\t\tdescriptor: 'QPHStrataContentsOffering',\r\n\t\t\tsuperType: ''\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t\t//get required covertypes\r\n\tthis.getOfferingPermutations = function(quoteOptions, coverOptions, selectedCoverType, selectedOffering){\r\n\t\tquoteOptions.permutations.offerings = [selectedOffering];\r\n\t\tquoteOptions.permutations.coverTypes = [selectedCoverType];\r\n\r\n\t\tif ( ! selectedOffering ) {\r\n\t\t\tapplicableOfferings = getOfferings( coverOptions.homeOccupancy, coverOptions.buildingType, coverOptions.needs, coverOptions.needRapidEstimate);\r\n\t\t\t//select permutations in homequote configuration based on the above logic\r\n\t\t\tvar permutationsBasedOnSelection = [];\r\n\t\t\tangular.forEach(this.allOfferings, function(offering){\r\n\t\t\t\tif(applicableOfferings.indexOf(offering.descriptor)>-1){\r\n\t\t\t\t\tpermutationsBasedOnSelection.push(offering);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tquoteOptions.permutations.offerings = permutationsBasedOnSelection;\r\n\t\t}\r\n\r\n\t\treturn quoteOptions;\r\n\t}\r\n\r\n\r\n\tfunction getOfferings(homeOccupancy, buildingType, needs, needRapidEstimate){\r\n\t\t//logic from exsting portal\r\n\t\tvar offerings = [];\r\n\t\tif (\r\n\t\t\t(homeOccupancy === 'own_live' ||\r\n\t\t\thomeOccupancy === 'rent_live' ||\r\n\t\t\thomeOccupancy === 'own_holidayhome') && !(buildingType === 'unit' || buildingType === 'flat')\r\n\t\t) {\r\n\t\t\tofferings.push('QPHStandardOffering');\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push('QPHPrestigeOffering');\r\n\t\t\t}\r\n\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === 'own_live' ||\r\n\t\t\thomeOccupancy === 'rent_live' ||\r\n\t\t\thomeOccupancy === 'own_holidayhome') &&\r\n\t\t\t(buildingType === 'unit' || buildingType === 'flat') &&\r\n\t\t\tneeds.building\r\n\t\t) {\r\n\t\t\tofferings.push('QPHStandardOffering');\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push('QPHPrestigeOffering');\r\n\t\t\t}\r\n\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === 'own_live' ||\r\n\t\t\thomeOccupancy === 'rent_live' ||\r\n\t\t\thomeOccupancy === 'own_holidayhome') &&\r\n\t\t\t(buildingType === 'unit' || buildingType === 'flat') &&\r\n\t\t\tneeds.contents\r\n\t\t) {\r\n\t\t\tofferings.push('QPHStrataContentsOffering');\r\n\t\t\tif (needRapidEstimate) {\r\n\t\t\t\tofferings.push('QPHPrestigeOffering');\r\n\t\t\t}\r\n\r\n\t\t} else if (\r\n\t\t\t(homeOccupancy === 'own_rent_tenants' ||\r\n\t\t\thomeOccupancy === 'own_rent_tenants_causalbasis' ||\r\n\t\t\thomeOccupancy === 'property_used_hostel_or_guest')\r\n\t\t) {\r\n\t\t\tofferings.push('QPHLandlordOffering');\r\n\t\t}\r\n\t\treturn offerings;\r\n\t}\r\n\r\n\tthis.allPaymentFrequencies = {\r\n\t\tannual: 'everyyear',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'everyotherweek',\r\n\t};\r\n\r\n\tthis.defaultPaymentFrequency = this.allPaymentFrequencies.annual;\r\n\r\n\tthis._reversePaymentFrequenciesLookup = {\r\n\t\tyearly: 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'fortnightly',\r\n\t};\r\n\r\n\tthis.allQuoteTypes = {\r\n\t\tfull: 'Full',\r\n\t\tquick: 'Quick',\r\n\t};\r\n\r\n\tthis.defaultOffering = this.allOfferings.QPHStandardOffering ;\r\n\r\n\tthis.quoteRuleOptions = {\r\n\t\t// Rapid estimate quote options\r\n\t\t'rapidEstimate': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.estimate' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tuseSelectedOffering: false,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.property': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.property' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.building': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.building'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.covers': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.covers'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.details': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.details'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.quote': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.contact': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.additional'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.payment': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.testQuoteDeclineOptions = {\r\n\t\t'home.estimate' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.estimate'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.property' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.property'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.building' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.building'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.covers' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.covers'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.details' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.details'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.quote' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.contact' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.additional'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'home.payment' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'home.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tuseSelectedOffering: true,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t}\r\n\r\n\t/** cover type for home needs to be determine in step 1 and cannot be defaulted */\r\n\tthis.defaultCoverType = null;\r\n\tthis.defaultRequotePageName = 'home.quote';\r\n}\r\n\nfunction HouseCommonData(userInputRepository, houseForm) {\r\n\r\n var commonData = null ;\r\n\r\n this.data = {} ;\r\n\r\n function set(item, value) {\r\n commonData[item] = value ;\r\n }\r\n\r\n function getCommonMaterial() {\r\n return houseForm.commonMaterial ;\r\n }\r\n\r\n\r\n}\r\n\n 'use strict';\r\n \r\n /**\r\n * track virtual page views for all page.\r\n */ \r\n function JWTTimeoutService($state, jwtHelper, storage, labelService, MODULE_INFO) {\r\n\r\n function isSessionTimedout() {\r\n \tvar eyUserToken = storage.getItem('eyUserToken');\r\n \tif( typeof(eyUserToken) == 'string' &&\r\n\t\t\tjwtHelper.isTokenExpired(eyUserToken)){\r\n\t\t\treturn true;\r\n\t } else {\r\n\t \treturn false;\r\n\t }\r\n\r\n \t}\r\n\r\n \tfunction handleTimeout() {\r\n \t\tvar sessionTimeoutMessage = labelService.getGlobalOptionLabel('content', 'session_timeout_message');\r\n \t\tvoid 0;\r\n\t\tstorage.clear();\r\n\t\t$state.go(MODULE_INFO.startRouteName);\r\n \t}\r\n\r\n return {\r\n \tisSessionTimedout : isSessionTimedout,\r\n \thandleTimeout : handleTimeout\t\r\n } \r\n }\r\n\n\"use strict\";\r\n\r\nfunction LabelService(DOM) {\r\n\tvar schema = {} ;\r\n\tvar section_schema = {};\r\n\tvar remoteOptions = {} ;\r\n\tvar globals = {} ;\r\n\tvar genericValidationMessages = {} ;\r\n\tvar content = {} ;\r\n\tvar campaigns = {} ;\r\n\r\n\tDOM.addEventListener('register-labels', function (e) {\r\n\t\tregisterLabels(DOM);\r\n\t}, false);\r\n\r\n\tfunction registerLabels(conf) {\r\n\t\tschema = conf.qbe.fieldLabels;\r\n\t\tsection_schema = conf.qbe.sectionLabels;\r\n\t\tgenericValidationMessages = conf.qbe.validationMessages ;\r\n\t\tcontent = conf.qbe.content;\r\n\t\tcampaigns = conf.qbe.campaigns;\r\n\t\tglobals = conf.globals;\r\n\t}\r\n\r\n\tfunction extractLabelsFor(fieldName) {\r\n\t\tvar field = schema[fieldName] ;\r\n\t\tif ( ! field ) {\r\n\t\t\treturn '' ;\r\n\t\t\t// throw fieldName + ' does not exist in the form schema';\r\n\t\t}\r\n\r\n\t\treturn schema[fieldName] ;\r\n\t}\r\n\r\n\tfunction extractSectionLabelsFor(fieldName) {\r\n\t\tvar field = section_schema[fieldName] ;\r\n\t\tif ( ! field ) {\r\n\t\t\treturn '' ;\r\n\t\t\t// throw fieldName + ' does not exist in the form schema';\r\n\t\t}\r\n\r\n\t\treturn section_schema[fieldName] ;\r\n\t}\r\n\r\n\tfunction extractContentLabelsFor(fieldName) {\r\n\t\tvar field = content[fieldName] ;\r\n\t\tif ( ! field ) {\r\n\t\t\treturn '' ;\r\n\t\t\t// throw fieldName + ' does not exist in the form schema';\r\n\t\t}\r\n\r\n\t\treturn content[fieldName] ;\r\n\t}\r\n\r\n\tfunction extractCampaignInfoFor(campaignId) {\r\n\t\treturn function findCampaignById(campaigns) {\r\n\t\t\tvar campaign;\r\n\t\t\tangular.forEach(campaigns, function(c){\r\n\t\t\t\tif ( c.sc_camp == campaignId){\r\n\t\t\t\t\treturn campaign = c ; \t\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn campaign;\r\n\t\t}(campaigns) ;\r\n\t}\r\n\r\n\tfunction getObjectValue(fieldName, fieldLabel) { \r\n\t\treturn extractLabelsFor(fieldName)[fieldLabel] ;\r\n\t}\r\n\r\n\tfunction getLabelFor(fieldName) {\r\n\t\treturn extractLabelsFor(fieldName)['label'] ;\r\n\t}\r\n\r\n\tfunction getSectionLabelFor(fieldName) {\r\n\t\treturn extractSectionLabelsFor(fieldName)['sectionHeadingText'] ;\r\n\t}\r\n\r\n\tfunction getSectionDescriptionFor(fieldName) {\r\n\t\treturn extractSectionLabelsFor(fieldName)['sectionDescriptionText'] ;\r\n\t}\r\n\r\n\tfunction getHintTextFor(fieldName) {\r\n\t\treturn extractLabelsFor(fieldName)['hintText'] ;\r\n\t}\r\n\r\n\tfunction getHelpTextFor(fieldName) {\r\n\t\treturn extractLabelsFor(fieldName)['extendedHintText'] ;\r\n\t}\r\n\r\n\tfunction getTooltipFor(fieldName) {\r\n\t\treturn extractLabelsFor(fieldName)['tooltip'] ;\r\n\t}\r\n\r\n\tfunction getSecondaryInfoTextFor(fieldName){\r\n\t\treturn extractLabelsFor(fieldName)['secondaryInfoText'];\r\n\t}\r\n\r\n\tfunction getValidationMessagesFor(fieldName, rule) {\r\n\t\tvar validations = extractLabelsFor(fieldName)['validationMessages'] ;\r\n\t\tif ( ! validations || ! validations[rule] )\r\n\t\t\treturn getGenericValidationMessageFor(rule) ;\r\n\r\n\t\treturn validations[rule];\r\n\t}\r\n\r\n\tfunction getGenericValidationMessageFor(rule) {\r\n\t\treturn genericValidationMessages[rule] ;\r\n\t}\r\n\r\n\tfunction getOptionsFor(fieldName) {\r\n\t\treturn schema[fieldName].options;\r\n\t}\r\n\r\n\tfunction getGlobalOptionsFor(fieldName) {\r\n\t\treturn globals[fieldName].options;\r\n\t}\r\n\r\n\tfunction getLabelForRemoteOption(fieldName, option) {\r\n\t\t//return schema[fieldName].remoteOptions[options];\r\n\t\tvar arr = schema[fieldName].remoteOptions;\r\n\t\tvar obj = arr.filter(function ( obj ) {\r\n\t\t\treturn obj.key === option;\r\n\t\t})[0];\r\n\t\treturn obj;\r\n\t}\r\n\r\n\tfunction getSecondaryInfoTextFlag(fieldName){\r\n\t\treturn Boolean(schema[fieldName]['secondaryInfoTextDisplayOn']);\r\n\t}\r\n\r\n\r\n\tfunction getContent(fieldName) {\r\n\t\treturn extractContentLabelsFor(fieldName);\r\n\t}\r\n\r\n\tfunction getGlobalOptionLabel(optionType, optionValue) {\r\n\t\tvar optionKeyValues = this.getGlobalOptionsFor(optionType) ;\r\n\t\tvar label = null;\r\n\t\tif ( optionKeyValues ) {\r\n\t\t\tangular.forEach(optionKeyValues, function(option){\r\n\t\t\t\tif ( option.value == optionValue )\r\n\t\t\t\t\tlabel = option.label ;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn label;\r\n\t}\r\n\tfunction getGlobalOption(optionType, optionValue) {\r\n\t\tvar optionKeyValues = this.getGlobalOptionsFor(optionType) ;\r\n\t\tvar returnOption = null;\r\n\t\tif ( optionKeyValues ) {\r\n\t\t\tangular.forEach(optionKeyValues, function(option){\r\n\t\t\t\tif ( option.value === optionValue )\r\n\t\t\t\t\treturnOption = option ;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn returnOption;\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit:registerLabels,\r\n\t\tgetObjectValue: getObjectValue,\r\n\t\tgetLabelFor: getLabelFor,\r\n\t\tgetSectionLabelFor: getSectionLabelFor,\r\n\t\tgetSectionDescriptionFor: getSectionDescriptionFor,\r\n\t\tgetHintTextFor: getHintTextFor,\r\n\t\tgetHelpTextFor: getHelpTextFor,\r\n\t\tgetTooltipFor: getTooltipFor,\r\n\t\tgetValidationMessagesFor: getValidationMessagesFor,\r\n\t\tgetGenericValidationMessageFor: getGenericValidationMessageFor,\r\n\t\tgetOptionsFor: getOptionsFor,\r\n\t\tgetGlobalOptionsFor: getGlobalOptionsFor,\r\n\t\tgetLabelForRemoteOption: getLabelForRemoteOption,\r\n\t\tgetContent: getContent,\r\n\t\textractCampaignInfoFor: extractCampaignInfoFor,\r\n\t\tgetSecondaryInfoTextFor: getSecondaryInfoTextFor,\r\n\t\tgetSecondaryInfoTextFlag: getSecondaryInfoTextFlag,\r\n\t\tgetGlobalOptionLabel: getGlobalOptionLabel,\r\n\t\tgetGlobalOption: getGlobalOption\r\n\t};\r\n}\r\n\n\"use strict\";\r\n\r\nfunction MAService(serviceWrapper, campaignService) {\r\n var endpoint= '/api/qbe/marketing';\r\n\r\n function send(event, data) {\r\n\r\n if ( ! qbe.marketing || ! qbe.marketing.Marketing)\r\n return;\r\n\r\n //var isFullQuote = false;\r\n //if (data.pageName != 'vehicle.vehicle' && data.pageName != 'vehicle.drivers' && data.pageName != 'rapid-estimate')\r\n // isFullQuote = true;\r\n var isSave = (event === 'save');\r\n var isfromRapidEstimate = (data.pageName === 'rapid-estimate');\r\n var isDeclined = (event === 'declined');\r\n\r\n //debugger;\r\n var qbeContact = {\r\n\r\n EmailAddress: data.policyEmail ? data.policyEmail : null,\r\n Enrol: false,\r\n Unenrol: false,\r\n Address : data.address ? data.address : null,\r\n ContactNumber : data.contactNumber ? data.contactNumber : null,\r\n InceptionDate : data.inceptionDate ? data.inceptionDate : null,\r\n Product: {\r\n\r\n QuoteReferenceId: data.quoteId ? data.quoteId : null,\r\n CoverType: data.annualResult?(data.annualResult.coverType ? data.annualResult.coverType : (data.monthlyResult.coverType ? data.monthlyResult.coverType : null)):null,\r\n PromotionalCode: data.campaignCode ? data.campaignCode : null,\r\n NoClaimBonus: data.noClaimBonus ? data.noClaimBonus : null,\r\n Declined: isDeclined\r\n }\r\n }\r\n\r\n if (!isfromRapidEstimate)\r\n {\r\n if (data.mainPolicyHolder != null) {\r\n qbeContact.FirstName = data.mainPolicyHolder.firstName ? data.mainPolicyHolder.firstName : null;\r\n qbeContact.Surname = data.mainPolicyHolder.lastName ? data.mainPolicyHolder.lastName : null;\r\n\r\n qbeContact.DOB = data.mainPolicyHolder.dateOfBirth ? data.mainPolicyHolder.dateOfBirth : null;\r\n\r\n qbeContact.State = data.state ? data.state : null;\r\n qbeContact.PostCode = data.postCode ? data.postCode : null;\r\n }\r\n\r\n qbeContact.SaveQuoteOutcomeId = qbe.marketing.Marketing.SaveOutcome ? qbe.marketing.Marketing.SaveOutcome : null;\r\n qbeContact.TriggerSaveOutcome= isSave;\r\n qbeContact.SaveQuoteGoalId= qbe.marketing.Marketing.SaveGoal ? qbe.marketing.Marketing.SaveGoal : null;\r\n qbeContact.OutcomeId= qbe.marketing.Marketing.Outcome ? qbe.marketing.Marketing.Outcome : null;\r\n qbeContact.EngagementPlanId= qbe.marketing.Marketing.EngagementPlan ? qbe.marketing.Marketing.EngagementPlan : null;\r\n qbeContact.EngagementStateId=qbe.marketing.Marketing.EngagementState ? qbe.marketing.Marketing.EngagementState : null;\r\n qbeContact.Unenrol= qbe.marketing.Marketing.Unenrol ? qbe.marketing.Marketing.Unenrol : false;\r\n qbeContact.Enrol= isSave;\r\n qbeContact.Product.InsuranceType= qbe.marketing.Marketing.InsuranceType;\r\n }\r\n\r\n var isFullQuote = false;\r\n if(data.monthlyResult && data.monthlyResult.paymentPlan && data.monthlyResult.paymentPlan.installment){\r\n isFullQuote = true;\r\n }\r\n\r\n // var isFullQuote = data.monthlyResult.paymentPlan.installment? true : false;\r\n\r\n if (isFullQuote) {\r\n qbeContact.Product.FullQuoteAnnualPremium = data.annualResult.totalPremium ? data.annualResult.totalPremium.toFixed(2) : null;\r\n qbeContact.Product.FullQuoteMonthlyPremium = data.monthlyResult.paymentPlan.installment ? data.monthlyResult.paymentPlan.installment.toFixed(2) : null;\r\n qbeContact.Product.FullQuoteMonthlyTotal = data.monthlyResult.totalPremium ? data.monthlyResult.totalPremium.toFixed(2) : null;\r\n\r\n qbeContact = createPremiumBreakdown(qbeContact, data);\r\n\r\n } else {\r\n qbeContact.Product.QuickQuoteAnnualPremium = data.annualResult?(data.annualResult.totalPremium ? data.annualResult.totalPremium.toFixed(2) : null):null;\r\n qbeContact.Product.QuickQuoteMonthlyPremium = data.monthlyResult?(data.monthlyResult.totalPremium ? data.monthlyResult.totalPremium.toFixed(2) : null):null;\r\n //qbeContact.Product.QuickQuoteMonthlyTotal = data.monthlyResult.totalPremium ? data.monthlyResult.totalPremium : null;\r\n\r\n qbeContact = createPremiumBreakdown(qbeContact, data);\r\n }\r\n\r\n var activeCampaign = campaignService.getCampaign() ;\r\n if (activeCampaign) {\r\n qbeContact.Product.CampaignId = activeCampaign.sc_camp;\r\n qbeContact.Product.CampaignHeader = activeCampaign.header;\r\n qbeContact.Product.CampaignImgUrl = activeCampaign.emailImageUrl ? activeCampaign.emailImageUrl : activeCampaign.imgURL;\r\n qbeContact.Product.CampaignTerms = activeCampaign.termsAndConditions;\r\n }\r\n\r\n var req = {\r\n method: 'POST',\r\n url: endpoint,\r\n data: qbeContact\r\n }\r\n\r\n serviceWrapper(req).then(function () {\r\n void 0\r\n }, function (error) {\r\n void 0;\r\n });\r\n }\r\n\r\n function mergeContacts(event, data) {\r\n try {\r\n send(event, data);\r\n } catch(ex) {\r\n void 0 ;\r\n }\r\n }\r\n\r\n function createPremiumBreakdown(qbeContact, data) {\r\n qbeContact.Product.AnnualPremium = data.annualResult.quoteResult.premiumAfterDiscount ? data.annualResult.quoteResult.premiumAfterDiscount.toFixed(2) : null;\r\n qbeContact.Product.AnnualTotalFSL = data.annualResult.quoteResult.totalFSL ? data.annualResult.quoteResult.totalFSL.toFixed(2) : null;\r\n qbeContact.Product.AnnualTotalGST = data.annualResult.quoteResult.totalGST ? data.annualResult.quoteResult.totalGST.toFixed(2) : null;\r\n qbeContact.Product.AnnualStampDuty = data.annualResult.quoteResult.totalStampDuty ? data.annualResult.quoteResult.totalStampDuty.toFixed(2) : null;\r\n qbeContact.Product.MonthlyPremium = data.monthlyResult.quoteResult.premiumAfterDiscount ? data.monthlyResult.quoteResult.premiumAfterDiscount.toFixed(2) : null;\r\n qbeContact.Product.MonthlyTotalFSL = data.monthlyResult.quoteResult.totalFSL ? data.monthlyResult.quoteResult.totalFSL.toFixed(2) : null;\r\n qbeContact.Product.MonthlyTotalGST = data.monthlyResult.quoteResult.totalGST ? data.monthlyResult.quoteResult.totalGST.toFixed(2) : null;\r\n qbeContact.Product.MonthlyStampDuty = data.monthlyResult.quoteResult.totalStampDuty ? data.monthlyResult.quoteResult.totalStampDuty.toFixed(2) : null; \r\n\r\n return qbeContact;\r\n }\r\n\r\n return {\r\n mergeContacts: mergeContacts\r\n };\r\n}\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t\t.module('qbePortal')\r\n\t\t.service('paymentLoggerService', paymentLoggerService);\r\n\r\n\tpaymentLoggerService.$inject = [\r\n\t\t'$log',\r\n\t\t'$http',\r\n\t\t'Util',\r\n\t\t'quoteModelFactory',\r\n\t\t'MODULE_INFO',\r\n\t\t'storage'\r\n\t];\r\n\tfunction paymentLoggerService(\r\n\t\t$log,\r\n\t\t$http,\r\n\t\tutil,\r\n\t\tquoteModelFactory,\r\n\t\tMODULE_INFO,\r\n\t\tstorage\r\n\t) {\r\n\t\tthis.trackQuoteStatus = trackQuoteStatus;\r\n\t\tvar endpoint = '/api/QuoteAndBuyLog/QuoteAndBuyLogger'; // put sitecore endpoint here\r\n\r\n\t\tfunction trackQuoteStatus(serviceCallStatus, nextStep, response) {\r\n\t\t\tvar processData = {};\r\n\t\t\ttry {\r\n\t\t\t\tif (MODULE_INFO.id === 'payments') {\r\n\t\t\t\t\tvar referenceNumber = util.b64DecodeUnicode(\r\n\t\t\t\t\t\tstorage.getItem('unauth-reference')\r\n\t\t\t\t\t);\r\n\t\t\t\t\tprocessData = {\r\n\t\t\t\t\t\tquoteId: referenceNumber,\r\n\t\t\t\t\t\tcurrentService: serviceCallStatus,\r\n\t\t\t\t\t\tnextService: nextStep,\r\n\t\t\t\t\t\tresponse: JSON.stringify(response)\r\n\t\t\t\t\t};\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\t\t\t\tquoteId = quoteModel.quoteId;\r\n\t\t\t\t\tprocessData = {\r\n\t\t\t\t\t\tquoteId: quoteId,\r\n\t\t\t\t\t\tcurrentService: serviceCallStatus,\r\n\t\t\t\t\t\tnextService: nextStep,\r\n\t\t\t\t\t\tresponse: JSON.stringify(response)\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t$log.log(processData);\r\n\t\t\t\tsendLogs(processData);\r\n\t\t\t} catch (error) {\r\n\t\t\t\t$log.log(error);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction sendLogs(processData) {\r\n\t\t\tvar req = {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\turl: endpoint,\r\n\t\t\t\tdata: processData\r\n\t\t\t};\r\n\r\n\t\t\t$http(req).then(\r\n\t\t\t\tfunction() {\r\n\t\t\t\t\t$log.log('successfully called the logger API');\r\n\t\t\t\t},\r\n\t\t\t\tfunction(error) {\r\n\t\t\t\t\t$log.log(error.status + ' : ' + error.statusText);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n})();\r\n\n\"use strict\";\r\n\r\nfunction PaymentService(\r\n\tserviceWrapper,\r\n\tportalServiceWrapper,\r\n\t$state,\r\n\tstorage,\r\n\tuserInputRepository,\r\n\tquoteModelFactory,\r\n\tutil,\r\n\tquoteOptions,\r\n\tpaymentLoggerService\r\n) {\r\n\tvar EMBARGO_STATE = \"embargo\";\r\n\r\n\tfunction getItemById (key, configs) {\r\n\t\tfor (var i = 0; i < configs.length; i++) {\r\n\t\t\tif (configs[i].id === key) {\r\n\t\t\t\treturn configs[i].title;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn '';\r\n\t};\r\n\r\n\t//global variable from page layout\r\n\t// return data structure {clientId: '', clientSecret: '', merchantIdentifier: '', mulesoftFlexiMicroformApiUrl: ''}\r\n\tfunction getPaybillConfig() {\r\n\t\t//return endpointUrls.payments.ausPortalUISettings;\r\n\t\treturn appConfigs.payments.ausPortalUISettings;\r\n\t}\r\n\r\n\t/* call mulesoft to prepare tokenization of cc number */\r\n\tfunction initialCreditcardPayment(initialCreditcardPaymentUrl, host, guid, merchantId, clientId, clientSecret, successCallback, errorCallback) {\r\n\t\tserviceWrapper.initialCreditcardPayment(initialCreditcardPaymentUrl, host, guid, merchantId, clientId, clientSecret)\r\n\t\t.then(function(response) {\r\n\t\t\tvar jwk = response.data.jwk;\r\n\t\t\tsuccessCallback(jwk);\r\n\t\t})\r\n\t\t.catch(function(error) {\r\n\t\t\terrorCallback(error);\r\n\t\t});\r\n\t}\r\n\r\n\tfunction generateUniqueId() {\r\n\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { \r\n\t\t\tvar r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8); \r\n\t\t\treturn v.toString(16); \r\n\t\t });\r\n\t}\r\n\tfunction getKeyData(jwk, cardNumberFieldId, cardNumberLabelId, placeholderText) {\r\n return {\r\n keyId: jwk.kid,\r\n keystore: jwk,\r\n container: cardNumberFieldId,\r\n label: cardNumberLabelId,\r\n placeholder: placeholderText,\r\n styles: {\r\n 'input': {\r\n 'font-family': 'Verdana',\r\n 'font-size': '15px',\r\n 'line-height': '1.5',\r\n\t\t\t\t\t'color': '#343e44'\r\n },\r\n ':focus': {'color': '#343e44'},\r\n ':disabled': {'cursor': 'not-allowed'},\r\n 'valid': {'color': '#343e44'},\r\n 'invalid': {'color': '#343e44'},\r\n },\r\n encryptionType: 'rsaoaep'\r\n };\r\n }\r\n function flexiFormFunction (microformInstance, payButton, cardExpirationMonth, cardExpirationYear, flexResponse, submitForm) {\r\n\r\n // intercept the form submission and make a tokenize request instead\r\n payButton.addEventListener('click', function () {\r\n\r\n // Send in optional parameters from other parts of your payment form\r\n var options = {\r\n cardExpirationMonth: cardExpirationMonth, //expMonth.value,\r\n cardExpirationYear: cardExpirationYear, //expYear.value\r\n };\r\n\r\n microformInstance.createToken(options, function (err, response) {\r\n if (err) {\r\n void 0;\r\n return;\r\n }\r\n\r\n // At this point the token may be added to the form\r\n // as hidden fields and the submission continued\r\n flexResponse.value = JSON.stringify(response);\r\n submitForm();\r\n });\r\n });\r\n }\r\n\t/**\r\n\t * Pays by credit card\r\n\t * The entire flow is as follows:\r\n\t * \t1 - Create a payment with GuideWire\r\n\t * \t2 - Generate Cybersource form data using response from GuideWire and credit card data entered by the user\r\n\t * \t3 - Convert the form data into a form (in an iFrame on the Payments page)\r\n\t * \t4 - The following happens in the iFrame\r\n\t * \t\t4.1 - Submit the form (in the iFrame) to Cybersource using a form.submit()\r\n\t * \t\t4.2 - Cybersource responds back with an HTML page that contains a form. This form auto-submits to GuideWire\r\n\t * \t\t4.3 - Guidewire loads a callback page (Angular) in the iFrame. This page tells the parent (Payment) page that the payment was successful/unsuccessful\r\n\t * \t5 - When the Payment page receives the payment complete from the iFrame, transition to the Confirmation page\r\n\t *\r\n\t * @param {Object} creditCard\t\t\t\t\tObject with credit card data submitted by user\r\n\t * @param {Function} successCallback\t\t\tSuccess callback that accepts argument of type `Object` with form data to submit to Cybersource\r\n\t * @param errorCallback\t\t\t\t\t\t\tError callback that accepts argument argument of type `ErrorResponse`\r\n\t */\r\n\tfunction payByCreditCard(creditCard, successCallback, errorCallback) {\r\n\t\tportalServiceWrapper.updateQuote(userInputRepository.get());\r\n\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\tportalServiceWrapper\r\n\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\tissueCheck: \"true\",\r\n\t\t\t\tquote: \"true\"\r\n\t\t\t})\r\n\t\t\t.then(function(response) {\r\n\t\t\t\ttestEmbargoDecline(response);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"attempting to save quote-credit card\",\r\n\t\t\t\t\t\"generate cybersource form data\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\treturn _createCreditCardPayment();\r\n\t\t\t})\r\n\t\t\t.then(function(_createCreditCardPaymentResponse) {\r\n\t\t\t\tvar formData = _generateCybersourceFormData(\r\n\t\t\t\t\t_createCreditCardPaymentResponse,\r\n\t\t\t\t\tcreditCard\r\n\t\t\t\t);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"generating Cybersource form data\",\r\n\t\t\t\t\t\"submit payment to Cybersource\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(formData);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"saveQuote error-credit card\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t\tif (response.declineType === \"embargo\")\r\n\t\t\t\t\t$state.go(EMBARGO_STATE, response);\r\n\t\t\t\telse if (errorCallback) {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-credit card');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\terrorCallback(response);\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction unAuthCreditCardPayment(\r\n\t\tcreditCard,\r\n\t\tsuccessCallback,\r\n\t\terrorCallback\r\n\t) {\r\n\t\tvar paymentData = {\r\n\t\t\treferenceID: creditCard.referenceNumber,\r\n\t\t\tpaymentType: creditCard.paymentType,\r\n\t\t\tredirectUrl: $state.href(\r\n\t\t\t\t\"cybersourceCallback\",\r\n\t\t\t\t{},\r\n\t\t\t\t{\r\n\t\t\t\t\tabsolute: true\r\n\t\t\t\t}\r\n\t\t\t),\r\n\t\t\tpayWithToken: true,\r\n\t\t\tpayment_token: creditCard.cardToken\r\n\t\t};\r\n\r\n\t\t// call GW to get to create payload\r\n\t\tserviceWrapper\r\n\t\t\t.createCreditcardPayment(paymentData)\r\n\t\t\t.then(function(_createCreditCardPaymentResponse) {\r\n\t\t\t\tvar formData = _generateCybersourceFormData(\r\n\t\t\t\t\t_createCreditCardPaymentResponse,\r\n\t\t\t\t\tcreditCard\r\n\t\t\t\t);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"generating Cybersource form data\",\r\n\t\t\t\t\t\"submit payment to Cybersource\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(formData);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"pay bills error-credit card\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\tgtmService.trackApiError(response.status, 'pay bills error-credit card');\r\n\t\t\t\t}\r\n\r\n\t\t\t\terrorCallback(response);\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction unAuthPaypalPayment(paymentInfo, successCallback, errorCallback) {\r\n\t\tvar paymentData = {\r\n\t\t\treferenceID: paymentInfo.referenceNumber,\r\n\t\t\tpaymentType: paymentInfo.paymentType,\r\n\t\t\tredirectUrl: $state.href(\r\n\t\t\t\t\"paypalCallback\",\r\n\t\t\t\t{},\r\n\t\t\t\t{\r\n\t\t\t\t\tabsolute: true\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t};\r\n\r\n\t\tserviceWrapper\r\n\t\t\t.createPaypalPayment(paymentData)\r\n\t\t\t.then(function(_createPaypalPaymentResponse) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"generating Paypal payment response\",\r\n\t\t\t\t\t\"submit payment to Paypal\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(_createPaypalPaymentResponse.data.redirectURL);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"pay bills error-paypal\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\tgtmService.trackApiError(response.status, 'pay bills error-paypal');\r\n\t\t\t\t}\r\n\r\n\t\t\t\terrorCallback(response);\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Pays by PayPal\r\n\t * The flow is as follows:\r\n\t * \t1 - Create a payment with GuideWire\r\n\t * \t2 - GuideWire responds with a PayPal redirect URL\r\n\t * \t3 - The browser is redirected to PayPal (using the redirect URL returned from the GuideWire service)\r\n\t * \t4 - User completes payment in PayPal and is redirected back to a PayPal Payment Success page (Angular page)\r\n\t * \t5 - If success parameters are passed to the PayPal Payment Success Page, send data to GuideWire PayPal Success service\r\n\t * \t6 - Transition to Confirmation Page\r\n\t *\r\n\t * @param {Function} successCallback\t\t\tSuccess callback that accepts argument `redirectUrl` of type `String`\r\n\t * @param {Function} errorCallback\t\t\t\tError callback that accepts argument argument of type `ErrorResponse`\r\n\t */\r\n\tfunction payByPaypal(successCallback, errorCallback) {\r\n\t\tportalServiceWrapper.updateQuote(userInputRepository.get());\r\n\r\n\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\tportalServiceWrapper\r\n\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\tissueCheck: \"true\",\r\n\t\t\t\tquote: \"true\"\r\n\t\t\t})\r\n\t\t\t.then(function(response) {\r\n\t\t\t\ttestEmbargoDecline(response);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"attempting to save quote-paypal\",\r\n\t\t\t\t\t\"generate Paypal payment response\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\treturn _createPaypalPayment();\r\n\t\t\t})\r\n\t\t\t.then(function(_createPaypalPaymentResponse) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"generating Paypal payment response\",\r\n\t\t\t\t\t\"submit payment to Paypal\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(_createPaypalPaymentResponse.data.redirectURL);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"saveQuote error-paypal\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t\tif (response.declineType === \"embargo\") {\r\n\t\t\t\t\t$state.go(EMBARGO_STATE, response);\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-paypal. Declined. Type: embargo.');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\telse if (errorCallback) {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-paypal');\r\n\t\t\t\t\t}\r\n\t\t\t\t\terrorCallback(response);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction unAuthDirectDebitPayment(\r\n\t\tbankAccount,\r\n\t\tsuccessCallback,\r\n\t\terrorCallback\r\n\t) {\r\n\t\tbankAccount.bsb = convertBsbNumberToGuidewireFormat(bankAccount.bsb);\r\n\r\n\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\tpaymentData = {\r\n\t\t\t\tamount: bankAccount.amountPay,\r\n\t\t\t\treferenceID: bankAccount.referenceNumber,\r\n\t\t\t\tpaymentType: bankAccount.paymentType,\r\n\t\t\t\tbsbNumber: bankAccount.bsb,\r\n\t\t\t\tbankAccountNumber: bankAccount.accountNumber,\r\n\t\t\t\taccountHolderName: bankAccount.accountName\r\n\t\t\t};\r\n\r\n\t\tserviceWrapper\r\n\t\t\t.createDirectDebitPayment(paymentData)\r\n\t\t\t.then(function(_createDirectDebitPaymentResponse) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"create direct debit payment response\",\r\n\t\t\t\t\t\"create direct debit payment\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(_createDirectDebitPaymentResponse.data);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"pay bills error-direct debit\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\tgtmService.trackApiError(response.status, 'pay bills error-direct debit');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (errorCallback) {\r\n\t\t\t\t\terrorCallback(response);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Pays by Direct Debit\r\n\t * A straight forward AJAX call to the directDebit service\r\n\t * @param {Object} bankAccount\t\t\t\t\tBank account details entered by the user\r\n\t * @param {Function} successCallback\t\t\tSuccess callback that accept service response data as argument\r\n\t * @param {Function} errorCallback\t\t\t\tError callback that accepts service error response as argument\r\n\t */\r\n\tfunction payByDirectDebit(bankAccount, successCallback, errorCallback) {\r\n\t\tportalServiceWrapper.updateQuote(userInputRepository.get());\r\n\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\tportalServiceWrapper\r\n\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\tissueCheck: \"true\",\r\n\t\t\t\tquote: \"true\"\r\n\t\t\t})\r\n\t\t\t.then(function(response) {\r\n\t\t\t\ttestEmbargoDecline(response);\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"attempting to save quote-direct debit\",\r\n\t\t\t\t\t\"create direct debit payment\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\treturn _createDirectDebitPayment(bankAccount);\r\n\t\t\t})\r\n\t\t\t.then(function(_createDirectDebitPaymentResponse) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"create direct debit payment response\",\r\n\t\t\t\t\t\"create direct debit payment\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tsuccessCallback(_createDirectDebitPaymentResponse.data);\r\n\t\t\t})\r\n\t\t\t.catch(function(response) {\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"saveQuote error-direct debit\",\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tresponse\r\n\t\t\t\t);\r\n\t\t\t\tif (response.declineType === \"embargo\") {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-direct debit. Declined. Type: embargo.');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$state.go(EMBARGO_STATE, response);\r\n\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\telse if (errorCallback) {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t\tgtmService.trackApiError(response.status, 'saveQuote error-direct debit.');\r\n\t\t\t\t\t}\r\n\t\t\t\t\terrorCallback(response);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tfunction testEmbargoDecline(response) {\r\n\t\t// var data = response.data;\r\n\r\n\t\t// if (data.quoteResult && data.quoteResult.embargo == true) {\r\n\t\t// \tvar declineParams = {\r\n\t\t// \t\tdeclineType: \"embargo\",\r\n\t\t// \t\tdeclineCodes: []\r\n\t\t// \t};\r\n\r\n\t\t// \tdata.quoteResult.uwIssues.forEach(function(element) {\r\n\t\t// \t\tdeclineParams.declineCodes.push(element.typeCode);\r\n\t\t// \t}, this);\r\n\r\n\t\t// \tthrow declineParams;\r\n\t\t// }\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a Direct Debit Payment in GuideWire\r\n\t * Calls the GuideWire service to create a direct debit payment\r\n\t * @param {Object} bankAccount\r\n\t * @private\r\n\t */\r\n\tfunction _createDirectDebitPayment(bankAccount) {\r\n\t\tbankAccount.bsb = convertBsbNumberToGuidewireFormat(bankAccount.bsb);\r\n\r\n\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\tpaymentData = {\r\n\t\t\t\treferenceID: quoteModel.quoteId,\r\n\t\t\t\tpaymentType: \"QUOTE\",\r\n\t\t\t\tbsbNumber: bankAccount.bsb,\r\n\t\t\t\tbankAccountNumber: bankAccount.accountNumber,\r\n\t\t\t\taccountHolderName: bankAccount.accountName\r\n\t\t\t};\r\n\r\n\t\treturn serviceWrapper.createDirectDebitPayment(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts BSB from a number to a string in this format \"XXX-XXX\". As input is a number, leading 0's are removed by default\r\n\t * so function pads with 0s if shorter than 6 digits\r\n\t */\r\n\tfunction convertBsbNumberToGuidewireFormat(bsb) {\r\n\t\tvar bsb = bsb + \"\";\r\n\t\tbsb = util.padNumber(bsb, 6, \"0\");\r\n\t\treturn bsb.match(/.{3}/g).join(\"-\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a Credit Card Payment in GuideWire\r\n\t * Calls the GuideWire service to create a credit card payment. The data returned from this is then augmented with the credit card details, injected into a form and submitted to CyberSource\r\n\t * @private\r\n\t */\r\n\tfunction _createCreditCardPayment() {\r\n\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\tpaymentData = {\r\n\t\t\t\treferenceID: quoteModel.quoteId,\r\n\t\t\t\tpaymentType: \"QUOTE\",\r\n\t\t\t\tredirectUrl: $state.href(\r\n\t\t\t\t\t\"cybersourceCallback\",\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tabsolute: true\r\n\t\t\t\t\t}\r\n\t\t\t\t)\r\n\t\t\t};\r\n\t\treturn serviceWrapper.createCreditcardPayment(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a PayPal Payment in GuideWire\r\n\t * Calls the GuideWire service to create a PayPal payment. The data returned is a redirectURL that is used to redirect the browser to PayPal for payment processing\r\n\t * @private\r\n\t */\r\n\tfunction _createPaypalPayment() {\r\n\t\tvar quoteModel = quoteModelFactory.create(),\r\n\t\t\tpaymentData = {\r\n\t\t\t\treferenceID: quoteModel.quoteId,\r\n\t\t\t\tpaymentType: \"QUOTE\",\r\n\t\t\t\tredirectUrl: $state.href(\r\n\t\t\t\t\t\"paypalCallback\",\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tabsolute: true\r\n\t\t\t\t\t}\r\n\t\t\t\t)\r\n\t\t\t};\r\n\r\n\t\treturn serviceWrapper.createPaypalPayment(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends successful PayPal payment data to GuideWire\r\n\t * @param {String} payerId\t\t\t\t\t\tPayerID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @param {String} sessionId\t\t\t\t\tSessionID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @returns {Promise}\t\t\t\t\t\t\tPromise to fulfil after data is sent to GuideWire service\r\n\t */\r\n\tfunction sendPaypalPaymentToGW(payerId, sessionId) {\r\n\t\tvar paymentData = {\r\n\t\t\tpayerID: payerId,\r\n\t\t\tsessionID: sessionId\r\n\t\t};\r\n\r\n\t\treturn serviceWrapper.sendPaypalPaymentToGw(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends successful Unauthenticated PayPal payment data to GuideWire\r\n\t * @param {String} payerId\t\t\t\t\t\tPayerID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @param {String} sessionId\t\t\t\t\tSessionID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @param {String} paymentId\t\t\t\t\tPaymentID querystring parameter returned by PayPal in the PayPal Callback page\r\n\t * @returns {Promise}\t\t\t\t\t\t\tPromise to fulfil after data is sent to GuideWire service\r\n\t */\r\n\tfunction unAuthSendPaypalPaymentToGW(payerId, sessionId, paymentId) {\r\n\t\tvar paymentData = {\r\n\t\t\tpayerID: payerId,\r\n\t\t\tsessionID: sessionId,\r\n\t\t\tpaymentID: paymentId\r\n\t\t};\r\n\r\n\t\treturn serviceWrapper.sendPaypalPaymentToGw(paymentData);\r\n\t}\r\n\r\n\t/**\r\n\t * Generates data to submit to CyberSource\r\n\t * This data will be used by a form in an iFrame to generate the form fields, which will then be posted to Cybersource\r\n\t * @param {AJAXResponse} _createCreditCardPaymentResponse\t\t\tResponse from the GuideWire `_createCreditCardPayment` service call\r\n\t * @param {Object} creditCard\t\t\t\t\t\t\t\t\t\tCredit card data submitted by the user\r\n\t * @private\r\n\t */\r\n\tfunction _generateCybersourceFormData(\r\n\t\t_createCreditCardPaymentResponse,\r\n\t\tcreditCard\r\n\t) {\r\n\t\tif (\r\n\t\t\t_createCreditCardPaymentResponse &&\r\n\t\t\t_createCreditCardPaymentResponse.data &&\r\n\t\t\t_createCreditCardPaymentResponse.data.formData\r\n\t\t) {\r\n\t\t\tif (creditCard.cardExpiryDate) {\r\n\t\t\t\tvar date = moment(creditCard.cardExpiryDate, \"MM/YY\");\r\n\t\t\t\tvar formattedDate = date.format(\"MM/YY\");\r\n\t\t\t\tcreditCard.cardExpiryDate = formattedDate.replace(\r\n\t\t\t\t\t/(\\d+)\\//,\r\n\t\t\t\t\t\"$1-20\"\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tvar formData = (creditCard.cardNumber) ?\r\n\t\t\t angular.extend(\r\n\t\t\t\t{},\r\n\t\t\t\t_createCreditCardPaymentResponse.data.formData,\r\n\t\t\t\t{\r\n\t\t\t\t\tcard_type: _getCyberSourceCardType(creditCard.type),\r\n\t\t\t\t\tcard_number: creditCard.cardNumber,\r\n\t\t\t\t\tcard_expiry_date: creditCard.cardExpiryDate,\r\n\t\t\t\t\tcard_cvn: creditCard.cvc,\r\n\t\t\t\t\tmerchant_secure_data1: creditCard.cardHolderName\r\n\t\t\t\t}\r\n\t\t\t )\r\n\t\t\t :\r\n\t\t\t // payment_token is in _createCreditCardPaymentResponse.data.formData\r\n\t\t\t angular.extend(\r\n\t\t\t\t{},\r\n\t\t\t\t_createCreditCardPaymentResponse.data.formData,\r\n\t\t\t\t{\r\n\t\t\t\t\tcard_type: creditCard.type,\r\n\t\t\t\t\tcard_expiry_date: creditCard.cardExpiryDate,\r\n\t\t\t\t\tcard_cvn: creditCard.cvc,\r\n\t\t\t\t\tmerchant_secure_data1: creditCard.cardHolderName,\r\n\t\t\t\t}\r\n\t\t\t );\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts credit card type to Cybersource cardType ID\r\n\t * @param cardType\r\n\t * @returns {String}\r\n\t * @private\r\n\t */\r\n\t function _getCyberSourceCardType(cardType) {\r\n\t\tvar type = \"\";\r\n\r\n\t\tif (cardType) {\r\n\t\t\ttype = cardType.toLowerCase();\r\n\t\t}\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase \"visa\":\r\n\t\t\t\treturn \"001\";\r\n\t\t\tcase \"mastercard\":\r\n\t\t\t\treturn \"002\";\r\n\t\t\tcase \"american express\":\r\n\t\t\t\treturn \"003\";\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetPaybillConfig: getPaybillConfig,\r\n\t\tinitialCreditcardPayment: initialCreditcardPayment,\r\n\t\tgenerateUniqueId: generateUniqueId,\r\n\t\tgetKeyData: getKeyData,\r\n\t\tflexiFormFunction: flexiFormFunction,\r\n\t\tpayByCreditCard: payByCreditCard,\r\n\t\tpayByPaypal: payByPaypal,\r\n\t\tpayByDirectDebit: payByDirectDebit,\r\n\t\tsendPaypalPaymentToGW: sendPaypalPaymentToGW,\r\n\t\tunAuthCreditCardPayment: unAuthCreditCardPayment,\r\n\t\tunAuthPaypalPayment: unAuthPaypalPayment,\r\n\t\tunAuthSendPaypalPaymentToGW: unAuthSendPaypalPaymentToGW,\r\n\t\tunAuthDirectDebitPayment: unAuthDirectDebitPayment\r\n\t};\r\n}\r\n\r\nPaymentService.bootstrap = function(\r\n\t$http,\r\n\t$state,\r\n\tstorage,\r\n\tuserInputRepository,\r\n\tportalServiceWrapper,\r\n\tquoteModelFactory,\r\n\tutil,\r\n\tquoteOptions,\r\n\tpaymentLoggerService\r\n) {\r\n\tvar userToken =\r\n\t\t\"eyJhbGciOiJIUzI1NiJ9.eyJhdXRob3JpdGllcyI6WyJRVU9URToxMDAwMDQwODU2Il0sImlhdCI6MTQ2NDc0ODU1MiwiZXhwIjoxNDY0NzUyMTUyfQ.0GFJ-SxgqEq16Rr1PPC-lhAL0PxblesSRVa2bkRBWxM\";\r\n\r\n\tvar conf = {\r\n\t\tpaybillConfig: function(host) {\r\n\t\t\t//for local\r\n\t\t\tvar host1 = host;\r\n\t\t\tif (host1.indexOf('localhost') !== -1) {\r\n\t\t\t\thost1 = 'https://gsc-sys.au.qbe.com/';\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\tmethod: \"GET\",\r\n\t\t\t\turl: host1 + '/api/spa/v3/configuration?id={89E52B78-FAE0-4B62-A2E1-CDD8F5F8713E}'\r\n\t\t\t}\r\n\t\t},\r\n\t\tinitPaymentToken: function(initPaymentTokenUrl, host, guid, merchantId, clientId, clientSecret) {\r\n\t\t\treturn {\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\turl: initPaymentTokenUrl,\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t\"X-ClientId\": clientId,\r\n\t\t\t\t\t\"X-ClientSecret\": clientSecret,\r\n\t\t\t\t\t\"X-SourceSystem\": \"SIteCore\",\r\n\t\t\t\t\t\"X-TargetOrigin\": host,\r\n\t\t\t\t\t\"X-Mockable\": \"false\"\r\n\t\t\t\t},\r\n\t\t\t\tdata: {\r\n\t\t\t\t\t\"guid\": guid,\r\n\t\t\t\t\t\"merchantIdentifier\": merchantId\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tcreateCreditcardPayment: {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: endpointUrls.payments.createCreditcardPayment,\r\n\t\t\theaders: {\r\n\t\t\t\t\"EY-Access-Key\": \"test123\",\r\n\t\t\t\t\"EY-Product-Type\": \"pc\",\r\n\t\t\t\t\"EY-USER-TOKEN\": userToken,\r\n\t\t\t\t\"X-Requested-By\": \"92tvt8iy2b\"\r\n\t\t\t}\r\n\t\t},\r\n\t\tcreatePaypalPayment: {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: endpointUrls.payments.createPaypalPayment,\r\n\t\t\theaders: {\r\n\t\t\t\t\"EY-Access-Key\": \"test123\",\r\n\t\t\t\t\"EY-Product-Type\": \"pc\",\r\n\t\t\t\t\"EY-USER-TOKEN\": userToken,\r\n\t\t\t\t\"X-Requested-By\": \"92tvt8iy2b\"\r\n\t\t\t}\r\n\t\t},\r\n\t\tcreateDirectDebitPayment: {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: endpointUrls.payments.createDirectDebitPayment,\r\n\t\t\theaders: {\r\n\t\t\t\t\"EY-Access-Key\": \"test123\",\r\n\t\t\t\t\"EY-Product-Type\": \"pc\",\r\n\t\t\t\t\"EY-USER-TOKEN\": userToken,\r\n\t\t\t\t\"X-Requested-By\": \"92tvt8iy2b\"\r\n\t\t\t}\r\n\t\t},\r\n\t\tsendPaypalPaymentToGw: {\r\n\t\t\tmethod: \"POST\",\r\n\t\t\turl: endpointUrls.payments.sendPaypalPaymentToGw,\r\n\t\t\theaders: {\r\n\t\t\t\t\"EY-Access-Key\": \"test123\",\r\n\t\t\t\t\"EY-Product-Type\": \"pc\",\r\n\t\t\t\t\"EY-USER-TOKEN\": userToken,\r\n\t\t\t\t\"X-Requested-By\": \"92tvt8iy2b\"\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tvar serviceWrapper = function() {\r\n\t\treturn {\r\n\t\t\tpaybillConfig: function(host) {\r\n\t\t\t\tvar req = conf.paybillConfig(host);\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tinitialCreditcardPayment: function(initPaymentTokenUrl, host, guid, merchantId, clientId, clientSecret) {\r\n\t\t\t\tvar req = conf.initPaymentToken(initPaymentTokenUrl, host, guid, merchantId, clientId, clientSecret);\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tcreateCreditcardPayment: function(data) {\r\n\t\t\t\tif (storage.getItem(\"eyUserToken\")) {\r\n\t\t\t\t\tuserToken = storage.getItem(\"eyUserToken\");\r\n\t\t\t\t}\r\n\t\t\t\tvar req = conf.createCreditcardPayment;\r\n\t\t\t\treq.data = data;\r\n\t\t\t\treq.headers[\"EY-USER-TOKEN\"] = userToken;\r\n\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tcreatePaypalPayment: function(data) {\r\n\t\t\t\tif (storage.getItem(\"eyUserToken\")) {\r\n\t\t\t\t\tuserToken = storage.getItem(\"eyUserToken\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar req = conf.createPaypalPayment;\r\n\t\t\t\treq.data = data;\r\n\t\t\t\treq.headers[\"EY-USER-TOKEN\"] = userToken;\r\n\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tcreateDirectDebitPayment: function(data) {\r\n\t\t\t\tif (storage.getItem(\"eyUserToken\")) {\r\n\t\t\t\t\tuserToken = storage.getItem(\"eyUserToken\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar req = conf.createDirectDebitPayment;\r\n\t\t\t\treq.data = data;\r\n\t\t\t\treq.headers[\"EY-USER-TOKEN\"] = userToken;\r\n\r\n\t\t\t\treturn $http(req);\r\n\t\t\t},\r\n\t\t\tsendPaypalPaymentToGw: function(data) {\r\n\t\t\t\tif (storage.getItem(\"eyUserToken\")) {\r\n\t\t\t\t\tuserToken = storage.getItem(\"eyUserToken\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar req = conf.sendPaypalPaymentToGw;\r\n\t\t\t\treq.data = data;\r\n\t\t\t\treq.headers[\"EY-USER-TOKEN\"] = userToken;\r\n\r\n\t\t\t\treturn $http(req);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\treturn new PaymentService(\r\n\t\tnew serviceWrapper(),\r\n\t\tportalServiceWrapper,\r\n\t\t$state,\r\n\t\tstorage,\r\n\t\tuserInputRepository,\r\n\t\tquoteModelFactory,\r\n\t\tutil,\r\n\t\tquoteOptions,\r\n\t\tpaymentLoggerService\r\n\t);\r\n};\r\n\n\"use strict\";\r\n\r\nfunction QuoteModelFactory(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util, $rootScope) {\r\n\tfunction create() {\r\n\t\tquoteOptions.setAvailableQuoteResults(serviceResponseRepository.getLastResponseFrom('quickQuote'));\r\n\r\n\t\tswitch (MODULE_INFO.id) {\r\n\t\t\tcase 'vehicle':\r\n\t\t\t\treturn new QuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util);\r\n\t\t\tcase 'bike':\r\n\t\t\t\treturn new BikeQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util);\r\n\t\t\tcase 'caravan':\r\n\t\t\t\treturn new CaravanQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util);\r\n\t\t\tcase 'payments':\r\n\t\t\t\treturn new PaymentsQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, Util);\r\n\t\t\tcase 'home':\r\n\t\t\t\treturn new HomeQuoteModel(MODULE_INFO, userInputRepository, serviceResponseRepository, quoteOptions, quoteRequestRepository, Util, $rootScope);\r\n\t\t\tcase 'ctp':\r\n\t\t\t\treturn new CTPModel(MODULE_INFO, userInputRepository, serviceResponseRepository, Util);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow 'Unknown module info';\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcreate: create\r\n\t}\r\n}\r\n\nfunction QuoteOptions(quoteConfiguration, serviceResponseRepository, quoteResultModelBuilder, storage) {\r\n\r\n\tvar coverTypeClasses = quoteConfiguration.coverTypeClasses;\r\n\r\n\tvar allCoverTypes = quoteConfiguration.allCoverTypes;\r\n\r\n\tvar allCoverTypesByKey = quoteConfiguration.allCoverTypesByKey;\r\n\r\n\tvar allPaymentFrequencies = quoteConfiguration.allPaymentFrequencies;\r\n\r\n\tvar _reversePaymentFrequenciesLookup = quoteConfiguration._reversePaymentFrequenciesLookup;\r\n\r\n\tvar allQuoteTypes = quoteConfiguration.allQuoteTypes;\r\n\r\n\tvar quoteRuleOptions = quoteConfiguration.quoteRuleOptions;\r\n\r\n\tvar testQuoteDeclineOptions = quoteConfiguration.testQuoteDeclineOptions;\r\n\r\n\tvar defaultCoverType = quoteConfiguration.defaultCoverType;\r\n\tvar defaultPaymentFrequency = quoteConfiguration.defaultPaymentFrequency ;\r\n\tvar availableQuoteResults =[];\r\n\tvar defaultRequotePageName = quoteConfiguration.defaultRequotePageName;\r\n\r\n\tvar defaultOffering = quoteConfiguration.defaultOffering || null ;\r\n\r\n\tfunction setSelectedCoverType(coverTypeClass, coverTypeSubClass) {\r\n\t\tif ( ! coverTypeClass )\r\n\t\t\tthrow 'Invalid cover type class provided' ;\r\n\r\n\t\tif ( ! coverTypeSubClass )\r\n\t\t\tcoverTypeSubClass = 'standard' ;\r\n\t\tif (!coverTypeClasses[coverTypeClass] || !coverTypeClasses[coverTypeClass].subClasses[coverTypeSubClass]) {\r\n\t\t selectedCoverType = allCoverTypesByKey[coverTypeClass];\r\n\t\t}\r\n\t\telse {\r\n\t\t selectedCoverType = coverTypeClasses[coverTypeClass].subClasses[coverTypeSubClass];\r\n\t\t}\r\n\t\tif ( ! selectedCoverType) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\r\n\t\tstorage.setItem('selectedCoverType' , selectedCoverType ) ;\r\n\t}\r\n\r\n\tfunction setSelectedOffering(offering) {\r\n\t\tif ( ! offering )\r\n\t\t\tthrow 'Invalid offering provided' ;\r\n\r\n\t\t//get offering object from the configuration\r\n\t\tselectedOffering = quoteConfiguration.allOfferings[offering];\r\n\r\n\t\tif ( ! selectedOffering) {\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\r\n\t\tstorage.setItem('selectedOffering' , selectedOffering ) ;\r\n\t}\r\n\r\n\tfunction getSelectedOffering(){\r\n\t\tvar so = storage.getItem('selectedOffering');\r\n\t\tif ( ! so.descriptor )\r\n\t\t\tso = defaultOffering;\r\n\t\treturn so;\r\n\t}\r\n\r\n\tfunction setDefaultCoverType() {\r\n\t\tsetSelectedCoverType(defaultCoverType.superType, defaultCoverType.subType);\r\n\t}\r\n\r\n\r\n\tfunction setSelectedPaymentFrequency(paymentFrequency) {\r\n\t\tselectedPaymentFrequency = _reversePaymentFrequenciesLookup[paymentFrequency];\r\n\t\tstorage.setItem('selectedPaymentFrequency' , selectedPaymentFrequency ) ;\r\n\t\tif ( ! selectedPaymentFrequency )\r\n\t\t\tthrow 'Invalid payment frequencey selected' ;\r\n\t}\r\n\r\n\tfunction getSelectedCoverType(){\r\n\t\tvar ct = storage.getItem('selectedCoverType');\r\n\t\tif ( ! ct.descriptor )\r\n\t\t\tct = defaultCoverType;\r\n\t\treturn ct;\r\n\t}\r\n\r\n\tfunction getSelectedPaymentFrequency() {\r\n\t\tvar selectedPaymentFrequency = storage.getItem('selectedPaymentFrequency');\r\n\t\tif ( typeof(selectedPaymentFrequency) != 'string' )\r\n\t\t\tselectedPaymentFrequency = defaultPaymentFrequency ;\r\n\r\n\t\treturn selectedPaymentFrequency;\r\n\t}\r\n\r\n\tfunction getSelectedPaymentFrequencyForService() {\r\n\t\tvar selectedPaymentFrequency = getSelectedPaymentFrequency();\r\n\t\treturn allPaymentFrequencies[selectedPaymentFrequency] ;\r\n\t}\r\n\r\n\tfunction getSelectedQuoteResult() {\r\n\t\tvar selectedQuoteResult = null ;\r\n\t\tvar mergedQuoteResults = getMergedQuoteResults(availableQuoteResults);\r\n\t\tvar coverTypeSelector = getCoverTypeSelector() ; \r\n\t\tif ( mergedQuoteResults && coverTypeSelector )\r\n\t\t\treturn mergedQuoteResults[coverTypeSelector];\r\n\r\n\t\treturn null ;\r\n\t}\r\n\r\n\tfunction getCoverTypeSelector() {\r\n\t\tif (getSelectedCoverType()) {\r\n\t\t\tvar coverTypeSelector = getSelectedCoverType().descriptor ;\r\n\t\t\tvar selectedOffering = getSelectedOffering();\r\n\t\t\tif ( selectedOffering )\r\n\t\t\t\tcoverTypeSelector += '_' + selectedOffering.descriptor ;\r\n\r\n\t\t\treturn coverTypeSelector;\t\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* @return the selected quote result for the selected payment frequency.\r\n\t*/\r\n\tfunction getSelectedQuoteResultForPayment() {\r\n\t\tvar qr = getSelectedQuoteResult() ;\r\n\t\tif ( qr ) {\r\n\t\t\treturn qr.getQuoteResult( getSelectedPaymentFrequency() );\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction setAvailableQuoteResults(quoteResults) {\r\n\t\tavailableQuoteResults = quoteResults ;\r\n\t}\r\n\r\n\tfunction clearQuoteResults() {\r\n\t\tquoteResultModelBuilder.clear() ; \r\n\t}\r\n\r\n\tfunction getMergedQuoteResults(quoteResults) {\r\n\t\tif ( ! quoteResults ) return null;\r\n\r\n\t\tquoteResults.forEach(function(result) {\r\n\t\t\tquoteResultModelBuilder.addQuoteResult(result) ;\r\n\t\t});\r\n\r\n\t\treturn quoteResultModelBuilder.getMergedQuoteResults();\r\n\t}\r\n\r\n\tfunction getAvailableCoverTypes() {\r\n\t\tvar availableQuoteResults = serviceResponseRepository.getLastResponseFrom('quote') ;\r\n\t\tvar availableCoverTypes = [];\r\n\t\tif ( availableQuoteResults ) {\r\n\t\t\tavailableQuoteResults.vehicles[0].availableCoverTypes.forEach(function(qr) {\t\r\n\t\t\t\tavailableCoverTypes.push(allCoverTypesByKey[qr] );\r\n\t\t\t})\r\n\t\t}\r\n\t\treturn availableCoverTypes;\r\n\t}\r\n\r\n\tfunction getAvailableSumInsuredTypes(){\r\n\t\tvar availableQuoteResults = serviceResponseRepository.getLastResponseFrom('quote') ;\r\n\t\tvar availableSumInsuredTypes = [];\r\n\t\tif (availableQuoteResults) {\r\n\t\t if (availableQuoteResults.productCode == \"QPYPersonalMotorcycle\") {\r\n\t\t availableQuoteResults.motorcycles[0].availableSumInsuredTypes.forEach(function (qr) {\r\n\t\t availableSumInsuredTypes.push(qr);\r\n\t\t })\r\n\t\t }\r\n\t\t else {\r\n\t\t availableQuoteResults.vehicles[0].availableSumInsuredTypes.forEach(function (qr) {\r\n\t\t availableSumInsuredTypes.push(qr);\r\n\t\t })\r\n\t\t }\r\n\t\t}\r\n\t\treturn availableSumInsuredTypes;\r\n\t}\r\n\r\n\tfunction isSumInsuredTypeAvailable(insuredType){\r\n\t\tvar availableSumInsuredTypes = getAvailableSumInsuredTypes();\r\n\t\treturn (availableSumInsuredTypes.indexOf(insuredType)>-1);\r\n\t}\r\n\r\n\tfunction isCoverTypeAvailable(coverTypeClass) {\r\n\t\tvar availableCoverTypes = getAvailableCoverTypes() ;\r\n\t\tif (availableCoverTypes) {\r\n\t\t\tfor (var key in availableCoverTypes) {\r\n\t\t\t\tvar ct = availableCoverTypes[key] ;\r\n\t\t\t\tif (ct.superType == coverTypeClass )\r\n\t\t\t\t\treturn true ;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false ;\r\n\t}\r\n\r\n\tfunction isCoverSubTypeAvailable(coverTypeClass, coverTypeSubClass) {\r\n\t\tvar availableCoverTypes = getAvailableCoverTypes() ;\r\n\t\tvar expectedType = coverTypeClasses[coverTypeClass].subClasses[coverTypeSubClass];\r\n\t\treturn availableCoverTypes.indexOf(expectedType) !== -1 ;\r\n\t}\r\n\r\n\tfunction getRequoteOptions(pageName) {\r\n\t\tif ( ! pageName )\r\n\t\t\tpageName = defaultRequotePageName;\r\n\r\n\t\treturn quoteRuleOptions[pageName] ;\r\n\t}\r\n\r\n\tfunction isReplacementAvailable(){\r\n\t\t//not used as this info is not available in vehicle page\r\n\t\tvar availableQuoteResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\tvar sumInsuredTypes = [];\r\n\t\tif(availableQuoteResults && (availableQuoteResults.length>0)){\r\n\t\t\tsumInsuredTypes = availableQuoteResults[0].response.vehicles[0].availableSumInsuredTypes;\r\n\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\r\n\t\tif(sumInsuredTypes.indexOf('replacement')>-1){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction getTestQuoteDeclineOptions(stepName) {\r\n\t\treturn testQuoteDeclineOptions[stepName];\r\n\t}\r\n\r\n\tfunction getQuickQuoteOptionsForStep(stepName) {\r\n\t\treturn quoteRuleOptions[stepName] ;\r\n\t}\r\n\r\n\tfunction getAllOfferings(){\r\n\t\treturn quoteConfiguration.allOfferings;\r\n\t}\r\n\r\n\tfunction getOfferingPermutations(stepName, coverOptions) {\r\n\t\tvar qqOptions = getQuickQuoteOptionsForStep(stepName);\r\n\t\tif ( ! qqOptions )\r\n\t\t\treturn null;\r\n\r\n\t\tvar offering = null\r\n\t\tif ( qqOptions.permutations.useSelectedOffering == true )\r\n\t\t\toffering = getSelectedOffering() ;\r\n\r\n\t\treturn quoteConfiguration.getOfferingPermutations(qqOptions, coverOptions, getSelectedCoverType(), offering);\r\n\t}\r\n\r\n\tfunction getStateDefaultVoluntaryExcess(state, itemIndex){\r\n\r\n\t\titemIndex = typeof itemIndex !== 'undefined' ? itemIndex : 0;\r\n\t\t\r\n\t\tif(window.globals.defaultExcessMapping == undefined || window.globals.defaultExcessMapping.options == undefined || state == undefined){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar prefix = 'AU_';\r\n\t\tif(state.indexOf(prefix) == -1){\r\n\t\t\tstate = prefix + state;\r\n\t\t}\r\n\r\n\t\tvar excessMapping = window.globals.defaultExcessMapping.options[itemIndex];\r\n\r\n\t\treturn excessMapping[state];\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetQuickQuoteOptionsForStep: getQuickQuoteOptionsForStep,\r\n\t\tgetRequoteOptions: getRequoteOptions,\r\n\t\tsetSelectedCoverType: setSelectedCoverType,\r\n\t\tsetDefaultCoverType: setDefaultCoverType,\r\n\t\tgetSelectedCoverType: getSelectedCoverType,\r\n\t\tsetSelectedPaymentFrequency: setSelectedPaymentFrequency,\r\n\t\tgetSelectedPaymentFrequency: getSelectedPaymentFrequency,\r\n\t\tgetSelectedPaymentFrequencyForService: getSelectedPaymentFrequencyForService,\r\n\t\tgetSelectedQuoteResult: getSelectedQuoteResult,\r\n\t\tgetSelectedQuoteResultForPayment: getSelectedQuoteResultForPayment,\r\n\t\tgetSelectedOffering: getSelectedOffering,\r\n\t\tgetOfferingPermutations: getOfferingPermutations,\r\n\t\tsetSelectedOffering: setSelectedOffering,\r\n\t\tsetAvailableQuoteResults: setAvailableQuoteResults,\r\n\t\tgetMergedQuoteResults: getMergedQuoteResults,\r\n\t\tisCoverTypeAvailable: isCoverTypeAvailable,\r\n\t\tisCoverSubTypeAvailable: isCoverSubTypeAvailable,\r\n\t\tgetTestQuoteDeclineOptions: getTestQuoteDeclineOptions,\r\n\t\tgetAllCoverTypes: function() { return allCoverTypes },\r\n\t\tgetAllPaymentFrequencies: function() {return allPaymentFrequencies},\r\n\t\tgetAllQuoteTypes: function() {return allQuoteTypes},\r\n\t\tgetCoverTypeSelector: getCoverTypeSelector,\r\n\t\tisReplacementAvailable: isReplacementAvailable,\r\n\t\tisSumInsuredTypeAvailable: isSumInsuredTypeAvailable,\r\n\t\tgetAllOfferings:getAllOfferings,\r\n\t\tclearQuoteResults: clearQuoteResults,\r\n\t\tgetStateDefaultVoluntaryExcess: getStateDefaultVoluntaryExcess\r\n\t}\r\n\r\n}\r\n\n'use strict' ;\r\n\r\nfunction QuoteResultFilter() {\r\n\treturn {\r\n\t\tfilter : function(filter, list) {\r\n\t\t\tif ( !filter) return list;\r\n\r\n\t\t\tvar filteredList = list.filter(function(quoteResult) {\r\n\t\t\t\treturn !filter.displayCover || filter.displayCover[quoteResult.coverType] === true ;\r\n\t\t\t});\r\n\r\n\t\t\tif ( !!filter.displayOffering ) {\r\n\t\t\t\tfilteredList = filteredList.filter(function(quoteResult) {\r\n\t\t\t\t\treturn ! filter.displayOffering || filter.displayOffering[quoteResult.offering] === true ;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tvar orderedList = filteredList.sort(function(cover1, cover2) {\r\n\t\t\t\tif ( filter.order && filter.order.orderByPrice ){\r\n\t\t\t\t\tvar cover1Bigger = cover1.totalPremium > cover2.totalPremium ;\r\n\t\t\t\t\treturn filter.order.cheapestFirst ? cover1Bigger : ! cover1Bigger ;\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t})\r\n\r\n\t\t\treturn orderedList;\r\n\t\t}\r\n\t}\r\n}\r\n\n'use strict';\r\n\r\nfunction QuoteResultModelFactory(MODULE_INFO) {\r\n\tfunction newQuoteResultModel(response) {\r\n\t\tswitch (MODULE_INFO.id) {\r\n\t\t\tcase 'vehicle':\r\n\t\t\t\treturn new VehicleQuoteResultModel(response);\r\n\t\t\tcase 'bike':\r\n\t\t\t\treturn new BikeQuoteResultModel(response);\r\n\t\t\tcase 'caravan':\r\n\t\t\t\treturn new CaravanQuoteResultModel(response);\r\n\t\t\tcase 'home':\r\n\t\t\t\treturn new HomeQuoteResultModel(response);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow 'Unknown module info';\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tnewQuoteResultModel: newQuoteResultModel\r\n\t}\r\n}\r\n\n\"use strict\";\r\n\r\nfunction QuoteService(serviceWrapper, quoteModel, Util) {\r\n\r\n\tfunction getQuote() {\r\n\t\treturn serviceWrapper.getQuote();\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetQuote: getQuote\r\n\t}\r\n}\r\n\r\nQuoteService.createDummyService = function ($q, quoteModel, Util) {\r\n\tvar conf = {};\r\n\r\n\tvar serviceWrapper = function () {\r\n\t\treturn {\r\n\t\t\tgetQuote: function (data) {\r\n\t\t\t\treturn $q(function (resolve, reject) {\r\n\t\t\t\t\tresolve({\r\n\t\t\t\t\t\t\"return\": \"data\"\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn new QuoteService(new serviceWrapper());\r\n}\r\n\r\nQuoteService.bootstrap = function (http, $q, quoteModel, Util) {\r\n\tvar conf = {\r\n\t\tgetQuote: {\r\n\t\t\tmethod: 'PUT',\r\n\t\t\turl: '#URL',\r\n\t\t\theaders: {\r\n\t\t\t\t'EY-Access-Key': 'test123',\r\n\t\t\t\t'EY-Product-Type': 'pc',\r\n\t\t\t\t'EY-USER-TOKEN': 'eyJhbGciOiJIUzI1NiJ9.eyJhdXRob3JpdGllcyI6WyJRVU9URToxMDAxMDYyNTc1Il0sImlhdCI6MTQ2Mjg2MTM4OCwiZXhwIjoxNDYyODY0OTg4fQ.u1254ES1-_6com7Y2lSltBkVEV6z_WlP43MwbsuwnjE'\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tvar serviceWrapper = function () {\r\n\t\treturn {\r\n\t\t\tgetQuote: function (data, success, error) {\r\n\t\t\t\tvar req = conf.createPayment;\r\n\t\t\t\treq.params = data;\r\n\t\t\t\thttp(req).then(function (response) {\r\n\t\t\t\t\tsuccess(response);\r\n\t\t\t\t}, function (error) {\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn new QuoteService(new serviceWrapper(), quoteModel, Util);\r\n}\r\n\nfunction RegisterFieldDecorator() {\r\n\t\r\n\tfunction attach($scope, params) {\r\n\t\t\r\n\t}\r\n\r\n\treturn {\r\n\t\tattach: attach\r\n\t}\t\r\n}\n\"use strict\";\r\n\r\nfunction RegoSearchService(guideWireService, transformers) {\r\n\tvar formData = {},\r\n\t\tgwResponse = {}, // response as received from guideWire\r\n\t\tserviceResponse = {}, // response after being process by any registered transformers\r\n\t\tlastStatus = {}, // error or success in last service call\r\n\t\ttransformers = transformers || {} ;\r\n\r\n\tfunction transformGWResponse(serviceName, resp) {\r\n\t\tvar response = resp;\r\n\t\tif ( transformers.serviceName )\r\n\t\t\tresponse = transformers.serviceName.transform(resp);\r\n\r\n\t\treturn response;\r\n\t}\r\n\r\n\tfunction processErrorResponse(serviceName, resp, errorFn) {\r\n\t\tgwResponse[serviceName]= resp;\r\n\t\tlastStatus[serviceName]=false;\r\n\t\tserviceResponse[serviceName] = transformGWResponse(serviceName, resp);\r\n\t\terrorFn(serviceResponse[serviceName]);\r\n\t}\r\n\r\n\tfunction processSuccessResponse(serviceName, resp, successFn) {\r\n\t\tgwResponse[serviceName]= resp;\r\n\t\tlastStatus[serviceName]= true;\r\n\t\tserviceResponse[serviceName] = transformGWResponse(serviceName, resp);\r\n\t\tsuccessFn(serviceResponse[serviceName]);\r\n\t}\r\n\r\n\tfunction search(data, success, error) {\r\n\r\n\t\tguideWireService.regoSearch(data)\r\n .then(function(response) {\r\n\t\t\t\t//console.log(response.data);\r\n success(response.data);\r\n })\r\n .catch(function(response) {\r\n if(error) {\r\n error(response);\r\n }\r\n });\r\n\t}\r\n\r\n\tfunction searchMake(data, success, error) {\r\n\r\n\t\tguideWireService.makeSearch(data)\r\n .then(function(response) {\t\t\t\t\r\n\t\t\t\tvar data1 = convertSearchMakeResponse(response.data.make);\r\n success(data1);\r\n })\r\n .catch(function(response) {\r\n if(error) {\r\n error(response);\r\n }\r\n });\r\n\t}\r\n\r\n\t//after vgi uplift, payload changed\r\n\tfunction convertSearchMakeResponse(response) {\r\n\t\tvar makes = []; \r\n\t\tif (!response || response.length == 0) {\r\n\t\t\treturn makes;\r\n\t\t}\t\t\r\n\t\tfor (var idx1 = 0; idx1 < response.length; idx1++) {\r\n\t\t\tvar priorityNum1 = parseInt(response[idx1].priority);\r\n\t\t\tmakes.push({\r\n\t\t\t\tname: response[idx1].description,\r\n\t\t\t\tcode: response[idx1].makeCode,\r\n\t\t\t\tpriority: (priorityNum1 !== NaN) ? priorityNum1 : 0,\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn makes;\r\n\t}\r\n\r\n\tfunction searchModel(data, success, error) {\r\n\r\n\t\tguideWireService.modelSearch(data)\r\n .then(function(response) {\t\t\t\t\r\n\t\t\t\tvar data2 = convertSearchModelResponse(response.data.model);\r\n success(data2);\r\n })\r\n .catch(function(response) {\t\t\t\t\r\n if(error) {\r\n error(response);\r\n }\r\n });\r\n\t}\r\n\r\n\tfunction convertSearchModelResponse(response) {\r\n\t\tvar models = [];\r\n\t\tif (!response || response.length == 0) {\r\n\t\t\treturn models;\r\n\t\t}\t\t\r\n\t\tfor (var idx2 = 0; idx2 < response.length; idx2++) {\r\n\t\t\tvar priorityNum = parseInt(response[idx2].priority);\r\n\t\t\tmodels.push({\r\n\t\t\t\tname: response[idx2].description,\r\n\t\t\t\tcode: response[idx2].modelCode,\r\n\t\t\t\tpriority: (priorityNum !== NaN) ? priorityNum : 0,\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn models;\r\n\t}\r\n\r\n\tfunction searchCar(data, success, error) {\r\n\r\n\t\tguideWireService.carSearch(data)\r\n .then(function(response) {\r\n\t\t\t\tvar searchedData = response.data;\r\n\t\t\t\tfor (var i = 0; searchedData && i < searchedData.length; i++) {\r\n\t\t\t\t\tif (!searchedData[i].goodRetailPrice) {\r\n\t\t\t\t\t\tsearchedData[i].goodRetailPrice = \"0\";\r\n\t\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tsuccess(searchedData);\r\n })\r\n .catch(function(response) {\r\n if(error) {\r\n error(response);\r\n }\r\n });\r\n\t}\r\n\r\n\tfunction getLastResponse(serviceName) {\r\n\t\treturn serviceResponse[serviceName] ;\r\n\t}\r\n\r\n\tfunction getLastRequest(serviceName) {\r\n\t\treturn formData[serviceName] ;\r\n\t}\r\n\r\n\treturn {\r\n\t\tsearch: search,\r\n\t\tsearchMake: searchMake,\r\n\t\tsearchModel: searchModel,\r\n\t\tsearchCar: searchCar,\r\n\t\tgetLastRequest: getLastRequest,\r\n\t\tgetLastResponse: getLastResponse,\r\n\t}\r\n}\r\n\r\nRegoSearchService.create=function(guideWireService) {\r\n\tvar transformers = {\r\n\t\tsearch: function(resp) {\r\n\t\t\treturn {\r\n\t\t\t\tyear: resp.modelYear,\r\n\t\t\t\tmake: resp.make,\r\n\t\t\t\tmodel: resp.model,\r\n\t\t\t\tseries: resp.series,\r\n\t\t\t\tbody: resp.bodyStyle,\r\n\t\t\t\ttransmission: resp.gearType,\r\n\t\t\t\tdrive: resp.driveDescription,\r\n\t\t\t\tengine: resp.engineDescription,\r\n\t\t\t}\r\n\t\t},\r\n\t\tsearchMake: function(resp) {\r\n\t\t\treturn {\r\n\t\t\t\tcode: resp.code,\r\n\t\t\t\tname: resp.name\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn new RegoSearchService(guideWireService)\r\n}\r\n\n\"use strict\" ;\r\n\r\nfunction SessionStorage(window) {\r\n\tvar engine = window.sessionStorage ;\r\n\r\n\tvar setItem = function(key, value) {\r\n\t\tengine.setItem(key, JSON.stringify(value)) ;\r\n\t}\r\n\r\n\tvar getItem = function(key) {\r\n\t\tvar value = engine.getItem(key) || \"{}\";\r\n\t\treturn JSON.parse(value) ;\r\n\t}\r\n\r\n\tvar removeItem = function(key) {\r\n\t\tengine.removeItem(key);\r\n\t}\r\n\r\n\tvar clear = function() {\r\n\t\tengine.clear();\r\n\t}\r\n\r\n\treturn {\r\n\t\tsetItem: setItem,\r\n\t\tgetItem: getItem,\r\n\t\tremoveItem: removeItem,\r\n\t\tclear: clear\r\n\t};\r\n}\r\n\n(function () {\r\n\t\"use strict\";\r\n\r\n\tangular.module(\"qbePortal\").service(\"smartLinkService\", smartLinkService);\r\n\r\n\tfunction smartLinkService() {\r\n\t\tthis.generateLink = generateLink;\r\n\r\n\t\tfunction generateLink(customerData) {\r\n\t\t\t// JS Implementation of the buildSmartlink code\r\n\t\t\tvar url = customerData.smartLinkURL; //do not change this\r\n\t\t\tvar sharedkey = customerData.hashKey;\r\n\r\n\t\t\t//required arguments\r\n\t\t\tvar merchantidentifer = \"qbe-insurance\"; // your feefo merchant identifier. This account must have Smartlink activated.\r\n\t\t\tvar name = customerData.policyHolderName; // the customer name\r\n\t\t\tvar email = customerData.email; // the customer email address\r\n\t\t\tvar orderref =\r\n\t\t\t\tcustomerData.policyNumber != null\r\n\t\t\t\t\t? customerData.policyNumber\r\n\t\t\t\t\t: undefined; // your unique order reference number\r\n\r\n\t\t\tvar descriptions = [customerData.description]; // description(s) of item(s) purchased\r\n\r\n\t\t\tvar productrefs = [customerData.productRefs]; // product ref(s) of items purchased - usually SKU or equivalent\r\n\r\n\t\t\t// recommended arguments\r\n\t\t\tvar date = moment().tz(\"Australia/Sydney\").format(\"YYYY-MM-DD\"); // date of the transaction\r\n\r\n\t\t\tvar productlink; // URL to web page of product(s) purchased\r\n\r\n\t\t\t// variable list ends - we now have all the inforamtion we need to build a SmartLink\r\n\r\n\t\t\t// Do not change the variables immediately below\r\n\t\t\tvar markerstart = \"|!\";\r\n\t\t\tvar markers = {\r\n\t\t\t\tEMAIL: \"B\",\r\n\t\t\t\tNAME: \"C\",\r\n\t\t\t\tDATE: \"D\",\r\n\t\t\t\tFEEDBACKDATE: \"E\",\r\n\t\t\t\tDESCRIPTION: \"F\",\r\n\t\t\t\tLINK: \"G\",\r\n\t\t\t\tPRODUCTREF: \"H\",\r\n\t\t\t\tORDERREF: \"I\",\r\n\t\t\t\tAMOUNT: \"J\",\r\n\t\t\t\tCURRENCY: \"K\",\r\n\t\t\t\tCUSTOMERREF: \"M\",\r\n\t\t\t\tMERCHANTIDENTIFIER: \"N\",\r\n\t\t\t\tTAG: \"O\",\r\n\t\t\t};\r\n\r\n\t\t\t// this \"if\" checks that all required fields exist and are not empty\r\n\r\n\t\t\tif (\r\n\t\t\t\ttypeof merchantidentifer !== \"undefined\" &&\r\n\t\t\t\tmerchantidentifer.length > 0 &&\r\n\t\t\t\ttypeof email !== \"undefined\" &&\r\n\t\t\t\temail.length > 0 &&\r\n\t\t\t\ttypeof name !== \"undefined\" &&\r\n\t\t\t\tname.length > 0 &&\r\n\t\t\t\ttypeof descriptions !== \"undefined\" &&\r\n\t\t\t\tdescriptions.length > 0 &&\r\n\t\t\t\ttypeof productrefs !== \"undefined\" &&\r\n\t\t\t\tproductrefs.length > 0 &&\r\n\t\t\t\ttypeof orderref !== \"undefined\" &&\r\n\t\t\t\torderref.length > 0\r\n\t\t\t) {\r\n\t\t\t\t// this enormous \"if\" checks whether the multiline fields all have the same number of items\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tdescriptions.length == productrefs.length &&\r\n\t\t\t\t\t(typeof productlinks === \"undefined\" ||\r\n\t\t\t\t\t\tproductlinks.length == descriptions.length) &&\r\n\t\t\t\t\t(typeof tags === \"undefined\" ||\r\n\t\t\t\t\t\ttags.length == descriptions.length) &&\r\n\t\t\t\t\t(typeof amounts === \"undefined\" ||\r\n\t\t\t\t\t\tamounts.length == descriptions.length)\r\n\t\t\t\t) {\r\n\t\t\t\t\tvar initialparams = \"\";\r\n\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\tmarkers.MERCHANTIDENTIFIER +\r\n\t\t\t\t\t\tmerchantidentifer;\r\n\t\t\t\t\tinitialparams += markerstart + markers.EMAIL + email;\r\n\t\t\t\t\tinitialparams += markerstart + markers.NAME + name;\r\n\t\t\t\t\tinitialparams += markerstart + markers.ORDERREF + orderref;\r\n\t\t\t\t\tif (typeof date !== \"undefined\" && date.length > 0) {\r\n\t\t\t\t\t\tinitialparams += markerstart + markers.DATE + date;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof customerref !== \"undefined\" &&\r\n\t\t\t\t\t\tcustomerref.length > 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart + markers.CUSTOMERREF + customerref;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof feedbackdate !== \"undefined\" &&\r\n\t\t\t\t\t\tfeedbackdate.length > 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart + markers.FEEDBACKDATE + feedbackdate;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof currencyid !== \"undefined\" &&\r\n\t\t\t\t\t\tcurrencyid.length > 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart + markers.CURRENCY + currencyid;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (var count = 1; count <= descriptions.length; count++) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\tmarkers.DESCRIPTION +\r\n\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\tdescriptions[count - 1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (var count = 1; count <= productrefs.length; count++) {\r\n\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\tmarkers.PRODUCTREF +\r\n\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\tproductrefs[count - 1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof productlinks !== \"undefined\") {\r\n\t\t\t\t\t\tfor (\r\n\t\t\t\t\t\t\tvar count = 1;\r\n\t\t\t\t\t\t\tcount <= productlinks.length;\r\n\t\t\t\t\t\t\tcount++\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\t\tmarkers.LINK +\r\n\t\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\t\tproductlinks[count - 1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof amounts !== \"undefined\") {\r\n\t\t\t\t\t\tfor (var count = 1; count <= amounts.length; count++) {\r\n\t\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\t\tmarkers.AMOUNT +\r\n\t\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\t\tamounts[count - 1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof tags !== \"undefined\") {\r\n\t\t\t\t\t\tfor (var count = 1; count <= tags.length; count++) {\r\n\t\t\t\t\t\t\tinitialparams +=\r\n\t\t\t\t\t\t\t\tmarkerstart +\r\n\t\t\t\t\t\t\t\tmarkers.TAG +\r\n\t\t\t\t\t\t\t\tcount +\r\n\t\t\t\t\t\t\t\ttags[count - 1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar key = Sha1.hash(\r\n\t\t\t\t\t\tSha1.hash(initialparams + sharedkey) + sharedkey\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar smartlink = url + bin2hex(initialparams) + key;\r\n\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t\treturn smartlink;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvoid 0;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar Sha1 = {};\r\n\r\n\t/**\r\n\t * Generates SHA-1 hash of string\r\n\t *\r\n\t * @param {String} msg String to be hashed\r\n\t * @param {Boolean} [utf8encode=true] Encode msg as UTF-8 before generating hash\r\n\t * @returns {String} Hash of msg as hex character string\r\n\t */\r\n\tSha1.hash = function (msg, utf8encode) {\r\n\t\tutf8encode = typeof utf8encode == \"undefined\" ? true : utf8encode;\r\n\r\n\t\t// convert string to UTF-8, as SHA only deals with byte-streams\r\n\t\tif (utf8encode) msg = Utf8.encode(msg);\r\n\r\n\t\t// constants [§4.2.1]\r\n\t\tvar K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\r\n\r\n\t\t// PREPROCESSING\r\n\r\n\t\tmsg += String.fromCharCode(0x80);\r\n\r\n\t\t// convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1]\r\n\t\tvar l = msg.length / 4 + 2;\r\n\t\tvar N = Math.ceil(l / 16);\r\n\t\tvar M = new Array(N);\r\n\r\n\t\tfor (var i = 0; i < N; i++) {\r\n\t\t\tM[i] = new Array(16);\r\n\t\t\tfor (var j = 0; j < 16; j++) {\r\n\t\t\t\tM[i][j] =\r\n\t\t\t\t\t(msg.charCodeAt(i * 64 + j * 4) << 24) |\r\n\t\t\t\t\t(msg.charCodeAt(i * 64 + j * 4 + 1) << 16) |\r\n\t\t\t\t\t(msg.charCodeAt(i * 64 + j * 4 + 2) << 8) |\r\n\t\t\t\t\tmsg.charCodeAt(i * 64 + j * 4 + 3);\r\n\t\t\t} // note running off the end of msg is ok 'cos bitwise ops on NaN return 0\r\n\t\t}\r\n\t\t// add length (in bits) into final pair of 32-bit integers (big-endian) [§5.1.1]\r\n\t\tM[N - 1][14] = ((msg.length - 1) * 8) / Math.pow(2, 32);\r\n\t\tM[N - 1][14] = Math.floor(M[N - 1][14]);\r\n\t\tM[N - 1][15] = ((msg.length - 1) * 8) & 0xffffffff;\r\n\r\n\t\t// set initial hash value [§5.3.1]\r\n\t\tvar H0 = 0x67452301;\r\n\t\tvar H1 = 0xefcdab89;\r\n\t\tvar H2 = 0x98badcfe;\r\n\t\tvar H3 = 0x10325476;\r\n\t\tvar H4 = 0xc3d2e1f0;\r\n\r\n\t\t// HASH COMPUTATION [§6.1.2]\r\n\r\n\t\tvar W = new Array(80);\r\n\t\tvar a, b, c, d, e;\r\n\t\tfor (var i = 0; i < N; i++) {\r\n\t\t\t// 1 - prepare message schedule 'W'\r\n\t\t\tfor (var t = 0; t < 16; t++) W[t] = M[i][t];\r\n\t\t\tfor (var t = 16; t < 80; t++)\r\n\t\t\t\tW[t] = Sha1.ROTL(\r\n\t\t\t\t\tW[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16],\r\n\t\t\t\t\t1\r\n\t\t\t\t);\r\n\r\n\t\t\t// 2 - initialise five working variables a, b, c, d, e with previous hash value\r\n\t\t\ta = H0;\r\n\t\t\tb = H1;\r\n\t\t\tc = H2;\r\n\t\t\td = H3;\r\n\t\t\te = H4;\r\n\r\n\t\t\t// 3 - main loop\r\n\t\t\tfor (var t = 0; t < 80; t++) {\r\n\t\t\t\tvar s = Math.floor(t / 20);\r\n\t\t\t\tvar T =\r\n\t\t\t\t\t(Sha1.ROTL(a, 5) + Sha1.f(s, b, c, d) + e + K[s] + W[t]) &\r\n\t\t\t\t\t0xffffffff;\r\n\t\t\t\te = d;\r\n\t\t\t\td = c;\r\n\t\t\t\tc = Sha1.ROTL(b, 30);\r\n\t\t\t\tb = a;\r\n\t\t\t\ta = T;\r\n\t\t\t}\r\n\r\n\t\t\t// 4 - compute the new intermediate hash value\r\n\t\t\tH0 = (H0 + a) & 0xffffffff;\r\n\t\t\tH1 = (H1 + b) & 0xffffffff;\r\n\t\t\tH2 = (H2 + c) & 0xffffffff;\r\n\t\t\tH3 = (H3 + d) & 0xffffffff;\r\n\t\t\tH4 = (H4 + e) & 0xffffffff;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\tSha1.toHexStr(H0) +\r\n\t\t\tSha1.toHexStr(H1) +\r\n\t\t\tSha1.toHexStr(H2) +\r\n\t\t\tSha1.toHexStr(H3) +\r\n\t\t\tSha1.toHexStr(H4)\r\n\t\t);\r\n\t};\r\n\r\n\t//\r\n\t// function 'f' [§4.1.1]\r\n\t//\r\n\tSha1.f = function (s, x, y, z) {\r\n\t\tswitch (s) {\r\n\t\t\tcase 0:\r\n\t\t\t\treturn (x & y) ^ (~x & z); // Ch()\r\n\t\t\tcase 1:\r\n\t\t\t\treturn x ^ y ^ z; // Parity()\r\n\t\t\tcase 2:\r\n\t\t\t\treturn (x & y) ^ (x & z) ^ (y & z); // Maj()\r\n\t\t\tcase 3:\r\n\t\t\t\treturn x ^ y ^ z; // Parity()\r\n\t\t}\r\n\t};\r\n\r\n\t//\r\n\t// rotate left (circular left shift) value x by n positions [§3.2.5]\r\n\t//\r\n\tSha1.ROTL = function (x, n) {\r\n\t\treturn (x << n) | (x >>> (32 - n));\r\n\t};\r\n\r\n\t//\r\n\t// hexadecimal representation of a number\r\n\t// (note toString(16) is implementation-dependant, and\r\n\t// in IE returns signed numbers when used on full words)\r\n\t//\r\n\tSha1.toHexStr = function (n) {\r\n\t\tvar s = \"\",\r\n\t\t\tv;\r\n\t\tfor (var i = 7; i >= 0; i--) {\r\n\t\t\tv = (n >>> (i * 4)) & 0xf;\r\n\t\t\ts += v.toString(16);\r\n\t\t}\r\n\t\treturn s;\r\n\t};\r\n\r\n\tvar Utf8 = {}; // Utf8 namespace\r\n\r\n\t/**\r\n\t * Encode multi-byte Unicode string into utf-8 multiple single-byte characters\r\n\t * (BMP / basic multilingual plane only)\r\n\t *\r\n\t * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars\r\n\t *\r\n\t * @param {String} strUni Unicode string to be encoded as UTF-8\r\n\t * @returns {String} encoded string\r\n\t */\r\n\tUtf8.encode = function (strUni) {\r\n\t\tvar strUtf = strUni.replace(/[\\u0080-\\u07ff]/g, function (c) {\r\n\t\t\tvar cc = c.charCodeAt(0);\r\n\t\t\treturn String.fromCharCode(0xc0 | (cc >> 6), 0x80 | (cc & 0x3f));\r\n\t\t});\r\n\t\tstrUtf = strUtf.replace(/[\\u0800-\\uffff]/g, function (c) {\r\n\t\t\tvar cc = c.charCodeAt(0);\r\n\t\t\treturn String.fromCharCode(\r\n\t\t\t\t0xe0 | (cc >> 12),\r\n\t\t\t\t0x80 | ((cc >> 6) & 0x3f),\r\n\t\t\t\t0x80 | (cc & 0x3f)\r\n\t\t\t);\r\n\t\t});\r\n\t\treturn strUtf;\r\n\t};\r\n\r\n\tfunction bin2hex(s) {\r\n\t\t// http://kevin.vanzonneveld.net\r\n\t\t// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\r\n\t\t// + bugfixed by: Onno Marsman\r\n\t\t// + bugfixed by: Linuxworld\r\n\t\t// + improved by: ntoniazzi (http://phpjs.org/functions/bin2hex:361#comment_177616)\r\n\t\t// * example 1: bin2hex('Kev');\r\n\t\t// * returns 1: '4b6576'\r\n\t\t// * example 2: bin2hex(String.fromCharCode(0x00));\r\n\t\t// * returns 2: '00'\r\n\r\n\t\tvar i,\r\n\t\t\tl,\r\n\t\t\to = \"\",\r\n\t\t\tn;\r\n\r\n\t\ts += \"\";\r\n\r\n\t\tfor (i = 0, l = s.length; i < l; i++) {\r\n\t\t\tn = s.charCodeAt(i).toString(16);\r\n\t\t\to += n.length < 2 ? \"0\" + n : n;\r\n\t\t}\r\n\r\n\t\treturn o;\r\n\t}\r\n})();\r\n\n\"use strict\";\r\n\r\nfunction UserInputRepository(storage, Util) {\r\n\t// var userInput = {};\r\n\r\n\tfunction update(input) {\r\n\t\tvar userInput = this.get();\r\n\t\tuserInput = angular.extend(userInput, input);\r\n\t\tstorage.setItem('userInput', userInput);\r\n\t\t// console.log(input);\r\n\t}\r\n\r\n\tfunction get(defaultData, dotSeperatedFieldPath) {\r\n\t\tdefaultData = defaultData || {}\r\n\t\tvar userInput = storage.getItem('userInput');\r\n\t\tuserInput = Object.extend(defaultData, userInput);\r\n\t\tif (dotSeperatedFieldPath)\r\n\t\t\treturn Util.findHierarchyStringInObject(userInput, dotSeperatedFieldPath, '.');\r\n\r\n\t\treturn userInput;\r\n\t}\r\n\r\n\treturn {\r\n\t\tupdate: update,\r\n\t\tget: get\r\n\t};\r\n}\r\n\nfunction dispatchCustomEvent(event, detail) {\r\n\tif (\r\n\t\t$(\"html\").hasClass(\"lt-ie10\") ||\r\n\t\t$(\"html\").hasClass(\"is-ie10\") ||\r\n\t\t$(\"html\").hasClass(\"is-ie11\")\r\n\t) {\r\n\t\tvar newEvent = document.createEvent(\"CustomEvent\");\r\n\t\tnewEvent.initCustomEvent(event, true, true, detail);\r\n\t\twindow.dispatchEvent(newEvent);\r\n\t} else {\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent(event, {\r\n\t\t\t\tdetail: detail\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n}\r\n\r\nfunction Util() {\r\n\tthis.findHierarchyStringInObject = function(object, pathString, delimiter) {\r\n\t\tvar keys = pathString.split(delimiter);\r\n\t\treturn this.findHierarchyArrayInObject(object, keys);\r\n\t};\r\n\r\n\tthis.findHierarchyArrayInObject = function(object, hierarchyArray) {\r\n\t\tvar val = object;\r\n\t\tfor (var i = 0; i < hierarchyArray.length; i++) {\r\n\t\t\tvar index = i;\r\n\t\t\tvar key = hierarchyArray[i];\r\n\t\t\tif (key.indexOf(\"[\") == 1 && key.indexOf(\"]\") == key.length - 1) {\r\n\t\t\t\tvar propertyName = key.substring(2, key.indexOf(\"=\"));\r\n\t\t\t\tvar propertyValue = key.substring(\r\n\t\t\t\t\tkey.indexOf(\"=\") + 1,\r\n\t\t\t\t\tkey.length - 1\r\n\t\t\t\t);\r\n\t\t\t\t// GDD-3853 - modified for mixed driver usages\r\n\t\t\t\t// var matchingOne = val.filter(function (item) {\r\n\t\t\t\t// \treturn item[propertyName] == propertyValue;\r\n\t\t\t\t// });\r\n\t\t\t\tvar matchingOne = val;\r\n\t\t\t\tvar index = key.replace(\r\n\t\t\t\t\t\"[\" + propertyName + \"=\" + propertyValue + \"]\",\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif ((index != \"\") & (index != \"0\")) {\r\n\t\t\t\t\tvar propertyIndex = parseInt(index);\r\n\r\n\t\t\t\t\tif (!isNaN(propertyIndex)) {\r\n\t\t\t\t\t\tval = matchingOne[propertyIndex];\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tval = matchingOne[0];\r\n\r\n\t\t\t\tif (val == null) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (val[hierarchyArray[index]] == null) return null;\r\n\r\n\t\t\tval = val[hierarchyArray[index]];\r\n\t\t}\r\n\t\treturn val;\r\n\t};\r\n\r\n\tthis.updateValueInObject = function(object, value, pathString, delimiter) {\r\n\t\tvar pathStringArray = pathString.split(delimiter);\r\n\t\tvar lastKey = pathStringArray.pop();\r\n\t\tvar val = object;\r\n\t\tfor (var i = 0; i < pathStringArray.length; i++) {\r\n\t\t\tif (!val[pathStringArray[i]]) return;\r\n\r\n\t\t\tval = val[pathStringArray[i]];\r\n\t\t}\r\n\t\tval[lastKey] = value;\r\n\t};\r\n\r\n\tthis.stringFormat = function(str) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\t\treturn str.replace(/{(\\d+)}/g, function(match, number) {\r\n\t\t\treturn typeof args[number] != \"undefined\" ? args[number] : match;\r\n\t\t});\r\n\t};\r\n\r\n\tthis.padNumber = function(num, width, padWith) {\r\n\t\tvar padWith = padWith || \"0\",\r\n\t\t\tnum = num + \"\";\r\n\t\treturn num.length >= width\r\n\t\t\t? num\r\n\t\t\t: new Array(width - num.length + 1).join(padWith) + num;\r\n\t};\r\n\r\n\tthis.clone = function(value) {\r\n\t\treturn jQuery.extend({}, value);\r\n\t};\r\n\r\n\tthis.deepClone = function(value) {\r\n\t\treturn jQuery.extend(true, {}, value);\r\n\t};\r\n\r\n\tthis.generateRandomChar = function() {\r\n\t\tvar s = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\r\n\t\treturn s.charAt(Math.floor(Math.random() * s.length));\r\n\t};\r\n\r\n\tthis.generateRandomString = function(length) {\r\n\t\tvar self = this;\r\n\t\treturn new Array(length + 1)\r\n\t\t\t.join(\"0\")\r\n\t\t\t.split(\"\")\r\n\t\t\t.map(function() {\r\n\t\t\t\treturn self.generateRandomChar();\r\n\t\t\t})\r\n\t\t\t.join(\"\");\r\n\t};\r\n\r\n\tthis.dispatchCustomEvent = function(event, detail) {\r\n\t\tdispatchCustomEvent(event, detail);\r\n\t};\r\n\r\n\tthis.arrayFill = function(number, object) {\r\n\t\tif (!Array.prototype.fill) {\r\n\t\t\t//console.info('hi');\r\n\t\t\tArray.prototype.fill = function(value) {\r\n\t\t\t\t// Steps 1-2.\r\n\t\t\t\tif (this == null) {\r\n\t\t\t\t\tthrow new TypeError(\"this is null or not defined\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar O = Object(this);\r\n\r\n\t\t\t\t// Steps 3-5.\r\n\t\t\t\tvar len = O.length >>> 0;\r\n\r\n\t\t\t\t// Steps 6-7.\r\n\t\t\t\tvar start = arguments[1];\r\n\t\t\t\tvar relativeStart = start >> 0;\r\n\r\n\t\t\t\t// Step 8.\r\n\t\t\t\tvar k =\r\n\t\t\t\t\trelativeStart < 0\r\n\t\t\t\t\t\t? Math.max(len + relativeStart, 0)\r\n\t\t\t\t\t\t: Math.min(relativeStart, len);\r\n\r\n\t\t\t\t// Steps 9-10.\r\n\t\t\t\tvar end = arguments[2];\r\n\t\t\t\tvar relativeEnd = end === undefined ? len : end >> 0;\r\n\r\n\t\t\t\t// Step 11.\r\n\t\t\t\tvar final =\r\n\t\t\t\t\trelativeEnd < 0\r\n\t\t\t\t\t\t? Math.max(len + relativeEnd, 0)\r\n\t\t\t\t\t\t: Math.min(relativeEnd, len);\r\n\r\n\t\t\t\t// Step 12.\r\n\t\t\t\twhile (k < final) {\r\n\t\t\t\t\tO[k] = value;\r\n\t\t\t\t\tk++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Step 13.\r\n\t\t\t\treturn O;\r\n\t\t\t};\r\n\t\t}\r\n\t\t//console.info(Array(number).fill(object));\r\n\t\treturn Array(number).fill(object);\r\n\t};\r\n\r\n\tthis.generatePermutationsArray = function(options1, options2) {\r\n\t\tvar permutations = [];\r\n\t\tangular.forEach(options1, function(option1) {\r\n\t\t\tangular.forEach(options2, function(option2) {\r\n\t\t\t\tpermutations.push({\r\n\t\t\t\t\toption1: option1,\r\n\t\t\t\t\toption2: option2\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn permutations;\r\n\t};\r\n\r\n\tthis.getQueryStringByName = function(location, name) {\r\n\t\tname = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\r\n\t\tvar regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\"),\r\n\t\t\tresults = regex.exec(location.search);\r\n\t\treturn results === null\r\n\t\t\t? \"\"\r\n\t\t\t: decodeURIComponent(results[1].replace(/\\+/g, \" \"));\r\n\t};\r\n\r\n\tthis.capitalize = function(token) {\r\n\t\tif (token) {\r\n\t\t\treturn token.charAt(0).toUpperCase() + token.slice(1).toLowerCase();\r\n\t\t}\r\n\t};\r\n\r\n\tthis.compareDays = function(responseDate) {\r\n\t\tvar expiredQuote;\r\n\t\tvar today = moment().tz(\"Australia/Sydney\");\r\n\t\tvar quoteDate = moment(responseDate).tz(\"Australia/Sydney\");\r\n\t\tvar dateDiff = today.diff(quoteDate, \"days\");\r\n\t\tif (dateDiff >= 30) {\r\n\t\t\treturn (expiredQuote = true);\r\n\t\t} else return (expiredQuote = false);\r\n\t};\r\n\r\n\tthis.linkBuilder = function(generalLink) {\r\n\t\tvar sessionProt = window.location.protocol;\r\n\t\tvar sessionProtHost = window.location.host;\r\n\t\tvar sessionProtPath = generalLink;\r\n\t\tvar sessionProtURL =\r\n\t\t\tsessionProt + \"//\" + sessionProtHost + sessionProtPath;\r\n\r\n\t\treturn sessionProtURL;\r\n\t};\r\n\r\n\tthis.isUndefinedOrNull = function(arg) {\r\n\t\tif (angular.isUndefined(arg) || arg == null) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t};\r\n\r\n\tthis.b64EncodeUnicode = function(str) {\r\n\t\treturn btoa(\r\n\t\t\tencodeURIComponent(str).replace(\r\n\t\t\t\t/%([0-9A-F]{2})/g,\r\n\t\t\t\tfunction toSolidBytes(match, p1) {\r\n\t\t\t\t\treturn String.fromCharCode(\"0x\" + p1);\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t);\r\n\t};\r\n\r\n\tthis.b64DecodeUnicode = function(str) {\r\n\t\treturn decodeURIComponent(\r\n\t\t\tatob(str)\r\n\t\t\t\t.split(\"\")\r\n\t\t\t\t.map(function(c) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2)\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t\t.join(\"\")\r\n\t\t);\r\n\t};\r\n}\r\n\r\nangular.module(\"qbePortal\").filter(\"capitalize\", function() {\r\n\treturn function(token) {\r\n\t\tif (token) {\r\n\t\t\treturn token.charAt(0).toUpperCase() + token.slice(1).toLowerCase();\r\n\t\t}\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"sortalpha\", function() {\r\n\treturn function(list, prop) {\r\n\t\treturn list.sort(function(a, b) {\r\n\t\t\tvar nameA = a[prop].toUpperCase(); // ignore upper and lowercase\r\n\t\t\tvar nameB = b[prop].toUpperCase(); // ignore upper and lowercase\r\n\t\t\tif (nameA < nameB) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif (nameA > nameB) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\r\n\t\t\t// names must be equal\r\n\t\t\treturn 0;\r\n\t\t});\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"formatAddress\", function() {\r\n\treturn function(address) {\r\n\t\tfunction parseState(state) {\r\n\t\t\treturn state.replace(\"AU_\", \"\");\r\n\t\t}\r\n\r\n\t\tif (address)\r\n\t\t\treturn (\r\n\t\t\t\taddress.addressLine1 +\r\n\t\t\t\t\" \" +\r\n\t\t\t\taddress.city +\r\n\t\t\t\t\", \" +\r\n\t\t\t\tparseState(address.state) +\r\n\t\t\t\t\", \" +\r\n\t\t\t\taddress.postalCode\r\n\t\t\t);\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"removeNonAlpha\", function() {\r\n\treturn function(token) {\r\n\t\tif (token) {\r\n\t\t\tvar value = token.replace(/[^a-zA-Z0-9]+/g, \" \");\r\n\t\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\r\n\t\t}\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"splitJoinedWords\", function() {\r\n\treturn function(token) {\r\n\t\tif (token) {\r\n\t\t\tvar value = token.replace(/([A-Z])/g, \" $1\");\r\n\t\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\r\n\t\t}\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"styledCurrency\", [\"$filter\", function($filter) {\r\n\treturn function(token) {\r\n\t\tif (token) {\r\n\t\t\tvar value = $filter(\"currency\")(token)\r\n\t\t\t\t.toString()\r\n\t\t\t\t.split(\".\");\r\n\t\t\treturn value;\r\n\t\t}\r\n\t};\r\n}]);\r\n\r\nangular.module(\"qbePortal\").filter(\"useFilter\", [\"$filter\", function($filter) {\r\n\treturn function() {\r\n\t\tvar filterName = [].splice.call(arguments, 1, 1)[0];\r\n\t\treturn $filter(filterName).apply(null, arguments);\r\n\t};\r\n}]);\r\n\r\nangular.module(\"qbePortal\").filter(\"calculateTotal\", function() {\r\n\treturn function(list, fieldName) {\r\n\t\tvar total = null;\r\n\t\tangular.forEach(list, function(value) {\r\n\t\t\ttotal += parseFloat(value[fieldName]);\r\n\t\t});\r\n\t\treturn total;\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"wildcardReplace\", [\r\n\t\"Util\",\r\n\tfunction(Util) {\r\n\t\treturn function(inString, replaceWith) {\r\n\t\t\tvar args = [].slice.call(arguments);\r\n\t\t\tif (args[0]) {\r\n\t\t\t\tif (typeof args[0] !== \"string\") {\r\n\t\t\t\t\targs[0] = args[0].$$unwrapTrustedValue();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn Util.stringFormat.apply(null, args);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n]);\r\n\r\nangular.module(\"qbePortal\").filter(\"driverInsured\", [\r\n\t\"Util\",\r\n\tfunction(Util) {\r\n\t\treturn function(inString, vehicleType) {\r\n\t\t\tvar finalString;\r\n\r\n\t\t\tif (inString) {\r\n\t\t\t\tif (typeof inString !== \"string\") {\r\n\t\t\t\t\tinString = inString.$$unwrapTrustedValue();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfinalString = inString;\r\n\r\n\t\t\t\tvar replaceWith = \"insured\",\r\n\t\t\t\t\treplace = true;\r\n\r\n\t\t\t\tswitch (vehicleType) {\r\n\t\t\t\t\tcase undefined:\r\n\t\t\t\t\t\treplace = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"motorhome\":\r\n\t\t\t\t\t\treplace = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"campervan\":\r\n\t\t\t\t\t\treplace = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if(vehicleType == undefined)\r\n\t\t\t\t// {\r\n\t\t\t\t// \treplace = false;\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif (replace) {\r\n\t\t\t\t\tfinalString = inString\r\n\t\t\t\t\t\t.toLowerCase()\r\n\t\t\t\t\t\t.replace(\"driver\", replaceWith);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn finalString;\r\n\t\t};\r\n\t}\r\n]);\r\n\r\nangular.module(\"qbePortal\").filter(\"booleanToYesNo\", [\"$filter\", function($filter) {\r\n\treturn function(token) {\r\n\t\tvar value = null;\r\n\t\tif (typeof token === \"string\") {\r\n\t\t\tif ([\"yes\", \"no\"].indexOf(token.toLowerCase()) != -1) {\r\n\t\t\t\tvalue = token.toLowerCase() === \"yes\";\r\n\t\t\t} else if ([\"true\", \"false\"].indexOf(token.toLowerCase() != -1)) {\r\n\t\t\t\tvalue = token.toLowerCase() === \"true\";\r\n\t\t\t} else if ([\"1\", \"0\"].indexOf(token) != -1) {\r\n\t\t\t\tvalue = String(token) === \"1\";\r\n\t\t\t}\r\n\t\t} else if (typeof token === \"number\") {\r\n\t\t\tif ([1, 0].indexOf(token) != -1) {\r\n\t\t\t\tvalue = token == 1;\r\n\t\t\t}\r\n\t\t} else if (typeof token === \"boolean\") {\r\n\t\t\tvalue = token;\r\n\t\t}\r\n\r\n\t\treturn value ? \"Yes\" : \"No\";\r\n\t};\r\n}]);\r\n\r\nangular.module(\"qbePortal\").filter(\"stringToSummaryDate\", [\"$filter\", function($filter) {\r\n\treturn function(token) {\r\n\t\tif (isNaN(Date.parse(token))) {\r\n\t\t\tvar returnObject = null;\r\n\r\n\t\t\tvar dateObject = {\r\n\t\t\t\tday: \"\",\r\n\t\t\t\tmonth: \"\",\r\n\t\t\t\tyear: \"\"\r\n\t\t\t};\r\n\r\n\t\t\tif (token && token.length > 0 && token.length == 8) {\r\n\t\t\t\tdateObject.day = token.substr(0, 2);\r\n\t\t\t\tdateObject.month = token.substr(2, 2);\r\n\t\t\t\tdateObject.year = token.substr(4, 4);\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\t!isNaN(dateObject.day) &&\r\n\t\t\t\t\t!isNaN(dateObject.month) &&\r\n\t\t\t\t\t!isNaN(dateObject.year)\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\tdateObject.day +\r\n\t\t\t\t\t\t\"/\" +\r\n\t\t\t\t\t\tdateObject.month +\r\n\t\t\t\t\t\t\"/\" +\r\n\t\t\t\t\t\tdateObject.year\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn token;\r\n\t};\r\n}]);\r\n\r\nangular.module(\"qbePortal\").filter(\"showFslOnlyNsw\", function() {\r\n\treturn function(referenceDocuments, state) {\r\n\t\treturn state != \"AU_NSW\"\r\n\t\t\t? referenceDocuments.filter(function(d) {\r\n\t\t\t\t\treturn d.type != \"fsl\";\r\n\t\t\t })\r\n\t\t\t: referenceDocuments;\r\n\t};\r\n});\r\n\r\nangular.module(\"qbePortal\").filter(\"unique\", function() {\r\n\t// we will return a function which will take in a collection\r\n\t// and a keyname\r\n\treturn function(collection, keyname) {\r\n\t\t// we define our output and keys array;\r\n\t\tvar output = [],\r\n\t\t\tkeys = [];\r\n\r\n\t\t// we utilize angular's foreach function\r\n\t\t// this takes in our original collection and an iterator function\r\n\t\tangular.forEach(collection, function(item) {\r\n\t\t\t// we check to see whether our object exists\r\n\t\t\tvar key = item[keyname];\r\n\t\t\t// if it's not already part of our keys array\r\n\t\t\tif (keys.indexOf(key) === -1) {\r\n\t\t\t\t// add it to our keys array\r\n\t\t\t\tkeys.push(key);\r\n\t\t\t\t// push this item to our final output array\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\t\t// return our array which should be devoid of\r\n\t\t// any duplicates\r\n\t\treturn output;\r\n\t};\r\n});\r\n\n\"use strict\";\r\n\r\nfunction ValidationService(labelService) {\r\n\tvar errors = {} ; \r\n\t\r\n\tvar supressErrorTypes = [\r\n\t\t'ccNumberType'/** cc validation library used\r\n\t\t\t\t\t\t generates two error messages \r\n\t\t\t\t\t\t for invalid card number and invalid\r\n\t\t\t\t\t\t card type, the latter is not required\r\n\t\t\t\t\t\t to be displayed. */\r\n\t];\r\n\r\n\tfunction isFormValid() {\r\n\t\treturn errors.length > 0;\r\n\t}\r\n\r\n\tfunction clearAllErrors() {\r\n\t\terrors = {} ; \r\n\t}\r\n\r\n\tfunction getFieldErrors(fieldSelector) {\r\n\t\tvar err = null ; \r\n\t\tfor (var elementId in errors) {\r\n\t\t\tvar error = errors[elementId] ; \r\n\t\t\tif ( error.input == fieldSelector ){\r\n\t\t\t\terr = error ; \r\n\t\t\t\tbreak ; \r\n\t\t\t}\r\n\t\t}\r\n\t\treturn err;\r\n\t}\r\n\r\n\t/**\r\n\t* Error types that are redundant are supressed/filtered out, to avoid displaying them to users. \r\n\t*/\r\n\tfunction removeSupressedErrors(inputErrors) {\r\n\t\tangular.forEach(supressErrorTypes, function(errorType) {\r\n\t\t\tif ( inputErrors.hasOwnProperty(errorType)) \r\n\t\t\t\tdelete inputErrors[errorType] ; \r\n\t\t});\r\n\t\treturn inputErrors ; \r\n\t}\r\n\r\n\tfunction registerInputErrors(element, fieldSelector, inputErrors) {\r\n\t\tvar commonFieldArray = element.parents('ng-form').map(function(index, parent){return \t$(parent).attr('name');}) ; \r\n\t\tvar commonFieldId = /** this is meant to be common among multiple radio or checkbox inputs */\r\n\t\t\tArray.prototype.join.call(commonFieldArray, '_') + element.attr('name') ; \r\n\r\n\t\tvar wildcard = element.parents('.ctrl-holder').attr('label-wildcard') ; \r\n\t\tinputErrors = removeSupressedErrors(inputErrors) ; \r\n\r\n\t\terrors[commonFieldId] = {\r\n\t\t\tinput : fieldSelector, \r\n\t\t\tlabel: labelService.getLabelFor(element.attr('label-key')),\r\n\t\t\telement: element, \r\n\t\t\twildcard : wildcard,\r\n\t\t\terrors : inputErrors\r\n\t\t};\r\n\t}\r\n\r\n\tfunction getAllErrors() {\r\n\t\treturn getNonEmptyErrors(errors) ; \r\n\t}\r\n\r\n\tfunction getNonEmptyErrors(errors) {\r\n\t\tvar nonEmptyErrors = {} ; \r\n\t\tfor (var key in errors) {\r\n\t\t\tif ( errors[key] && errors[key].errors && Object.keys(errors[key].errors).length > 0 )\r\n\t\t\t\tnonEmptyErrors[key] = errors[key] ; \r\n\t\t}\r\n\r\n\t\treturn nonEmptyErrors ; \r\n\t}\r\n\r\n\t/*\r\n\t* Validate input fields\r\n\t* Param - field name of element\r\n\t*/\r\n\tfunction validateField(fieldKey){\r\n\t\tvar nonEmptyErrors = {} ; \r\n\t\tfor (var key in errors) {\r\n\r\n\t\t\tif ( errors[key] && errors[key].errors && Object.keys(errors[key].errors).length > 0 && key.indexOf(fieldKey) >= 0 ){\r\n\t\t\t\tnonEmptyErrors[key] = errors[key] ; \r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nonEmptyErrors ; \r\n\t}\r\n\r\n\tfunction validateInput(element, fieldSelector, messageKey) {\r\n\t\tvar inputErrors = {} ; \r\n\t\tif ( ! fieldSelector ) {\r\n\t\t\tvoid 0;\r\n\t\t\treturn {};\r\n\t\t}\r\n\r\n\t\tvar $error = fieldSelector.$error ;\r\n\t\tif ( ! $error ) {\r\n\t\t\tinputErrors = {};\r\n\t\t\treturn inputErrors ; \r\n\t\t}\r\n\r\n\t\tfor (var key in $error) {\r\n\t\t\tinputErrors[key] = labelService.getValidationMessagesFor(messageKey, key) ; \r\n\t\t\t//console.log('input errors for ' + key , inputErrors[key]) ;\r\n\t\t}\r\n\r\n\t\tregisterInputErrors(element, fieldSelector, inputErrors) ; \r\n\r\n\t\treturn inputErrors ;\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetFieldErrors: getFieldErrors,\r\n\t\tvalidateInput: validateInput,\r\n\t\tgetAllErrors: getAllErrors,\r\n\t\tclearAllErrors: clearAllErrors,\r\n\t\tvalidateField: validateField\r\n\t};\r\n}\r\n\nfunction VehicleQuoteConfiguration(){\r\n\tthis.coverTypeClasses = {\r\n\t\tcomprehensive : {\r\n\t\t\tlabel : 'Comprehensive',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Comprehensive',\r\n\t\t\t\t\tdescriptor: 'comprehensive',\r\n\t\t\t\t\tsuperType: 'comprehensive',\r\n\t\t\t\t\tsubType:'standard',\r\n\t\t\t\t},\r\n\t\t\t\tnominated : {\r\n\t\t\t\t\tlabel: 'Comprehensive Nominated',\r\n\t\t\t\t\tdescriptor: 'comprehensive_nominated',\r\n\t\t\t\t\tsuperType: 'comprehensive',\r\n\t\t\t\t\tsubType: 'nominated',\r\n\t\t\t\t},\r\n\t\t\t\tpreferred: {\r\n\t\t\t\t\tlabel: 'Comprehensive Preferred',\r\n\t\t\t\t\tdescriptor: 'comprehensive_preferred',\r\n\t\t\t\t\tsuperType: 'comprehensive',\r\n\t\t\t\t\tsubType : 'preferred',\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tthird_party: {\r\n\t\t\tlabel: 'Third Party',\r\n\t\t\tsubClasses : {\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\tlabel: 'Third party only',\r\n\t\t\t\t\tdescriptor: 'third_party',\r\n\t\t\t\t\tsuperType: 'third_party',\r\n\t\t\t\t\tsubType: 'standard',\r\n\t\t\t\t},\r\n\t\t\t\tfire_and_theft: {\r\n\t\t\t\t\tlabel: 'Third party fire and theft',\r\n\t\t\t\t\tdescriptor: 'third_party_fire_theft',\r\n\t\t\t\t\tsuperType: 'third_party',\r\n\t\t\t\t\tsubType: 'fire_and_theft',\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.allCoverTypes = {\r\n\t\tcomprehensive_standard: this.coverTypeClasses.comprehensive.subClasses.standard,\r\n\t\tcomprehensive_nominated: this.coverTypeClasses.comprehensive.subClasses.nominated,\r\n\t\tcomprehensive_preferred: this.coverTypeClasses.comprehensive.subClasses.preferred,\r\n\t\tthird_party_fire_theft: this.coverTypeClasses.third_party.subClasses.fire_and_theft,\r\n\t\tthird_party_standard: this.coverTypeClasses.third_party.subClasses.standard,\r\n\t};\r\n\r\n\tthis.allCoverTypesByKey = {\r\n\t\tcomprehensive: this.coverTypeClasses.comprehensive.subClasses.standard,\r\n\t\tcomprehensive_nominated: this.coverTypeClasses.comprehensive.subClasses.nominated,\r\n\t\tcomprehensive_preferred: this.coverTypeClasses.comprehensive.subClasses.preferred,\r\n\t\tthird_party_fire_theft: this.coverTypeClasses.third_party.subClasses.fire_and_theft,\r\n\t\tthird_party: this.coverTypeClasses.third_party.subClasses.standard,\r\n\t};\r\n\r\n\tthis.allPaymentFrequencies = {\r\n\t\tannual: 'everyyear',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'everyotherweek',\r\n\t};\r\n\r\n\tthis.defaultPaymentFrequency = this.allPaymentFrequencies.annual;\r\n\r\n\tthis._reversePaymentFrequenciesLookup = {\r\n\t\tyearly: 'annual',\r\n\t\tmonthly: 'monthly',\r\n\t\tfortnightly: 'fortnightly',\r\n\t};\r\n\r\n\tthis.allQuoteTypes = {\r\n\t\tfull: 'Full',\r\n\t\tquick: 'Quick',\r\n\t};\r\n\r\n\tthis.quoteRuleOptions = {\r\n\t\t// Rapid estimate quote options\r\n\t\t'rapidEstimate': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.estimate' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.drivers': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.vehicle' // Note : THESE ARE GUIDEWIRE RULESET AND DO NOT NECESSARILY CORRESPOND TO PAGE NAMES.\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.quick,\r\n\t\t\t\tcoverTypes: Object.values(this.allCoverTypes),\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.quote': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual, this.allPaymentFrequencies.monthly]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.contact': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.additional'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.payment': {\r\n\t\t\trules : {\r\n\t\t\t\tprice: true,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.payment'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: Object.values(this.allPaymentFrequencies)\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tthis.testQuoteDeclineOptions = {\r\n\t\t'vehicle.vehicle' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.vehicle'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.drivers' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.driver'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.quote' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.quote'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t},\r\n\t\t'vehicle.contact' : {\r\n\t\t\trules : {\r\n\t\t\t\tprice: false,\r\n\t\t\t\tquote: true,\r\n\t\t\t\tpurchase: false,\r\n\t\t\t\truleSet: 'vehicle.additional'\r\n\t\t\t},\r\n\t\t\tpermutations: {\r\n\t\t\t\tquoteType: this.allQuoteTypes.full,\r\n\t\t\t\tpaymentFrequencies: [this.allPaymentFrequencies.annual]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tthis.defaultCoverType = this.allCoverTypes.comprehensive_standard;\r\n\tthis.defaultRequotePageName = 'vehicle.quote';\r\n}\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('addressValidation', function () {\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: 'A',\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\r\n\t\t\t\t//important- this handler is to manage selection from type-ahead\r\n\t\t\t\tscope.$on('type-ahead-value-received', function (value) {\r\n\t\t\t\t\tif (scope.$eval(attrs.addressValidation) == true) {\r\n\t\t\t\t\t\t//false mark valid\r\n\t\t\t\t\t\tctrl.$setValidity('address', true);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//false marks invalid\r\n\t\t\t\t\t\tctrl.$setValidity('address', false);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\r\n\t\t\t\tfunction validateAddress(ngModelValue) {\r\n\t\t\t\t\t// //console.log(scope.$eval(attrs.addressValidation));\r\n\t\t\t\t\tif (scope.$eval(attrs.addressValidation) == 'true') {\r\n\t\t\t\t\t\t//false mark valid\r\n\t\t\t\t\t\tctrl.$setValidity('address', true);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//false marks invalid\r\n\t\t\t\t\t\tctrl.$setValidity('address', false);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn ngModelValue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctrl.$parsers.push(validateAddress);\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('fullEmailValidation', function () {\r\n\t\t//var EMAIL_REGEXP = /^[_a-zA-Z0-9]+(\\.'[_a-zA-Z0-9]+)*@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*(\\.[a-zA-Z]{2,4})$/;\r\n\t\tvar EMAIL_REGEXP = /^(?!.*\\.{2})[A-Za-z0-9._-]+@[A-Za-z0-9._-]+\\.[A-Za-z]{2,4}$/;\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: '',\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\t// only apply the validator if ngModel is present and Angular has added the email validator\r\n\t\t\t\tif (ctrl && ctrl.$validators.email) {\r\n\r\n\t\t\t\t\t// this will overwrite the default Angular email validator\r\n\t\t\t\t\tctrl.$validators.email = function (modelValue) {\r\n\t\t\t\t\t\treturn ctrl.$isEmpty(modelValue) || EMAIL_REGEXP.test(modelValue);\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('mutualExclusiveValidation', function () {\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: 'A',\r\n\t\t\tscope: {\r\n\t\t\t\tmutualExclusiveValidation: \"=\"\r\n\t\t\t},\r\n\t\t\tlink: function (scope, elm, attrs, ngModel) {\r\n\t\t\t\t// only apply the validator if ngModel is present and Angular has added the email validator\r\n\t\t\t\telm.change(function () {\r\n\r\n\t\t\t\t\tif (scope.mutualExclusiveValidation) {\r\n\t\t\t\t\t\t//atleast 1 option should be present for the validation to function\r\n\t\t\t\t\t\tif (scope.mutualExclusiveValidation.exclusiveOptions.length > 1) {\r\n\t\t\t\t\t\t\tvar optionValue = attrs.value;\r\n\r\n\t\t\t\t\t\t\t//Is the current element one of the mutually exclusive options\r\n\t\t\t\t\t\t\tvar isRequiredForValidation = scope.mutualExclusiveValidation.exclusiveOptions.indexOf(optionValue) > -1;\r\n\t\t\t\t\t\t\tif (isRequiredForValidation) {\r\n\r\n\t\t\t\t\t\t\t\t//Get the state of that option and proceed with the validation if true\r\n\t\t\t\t\t\t\t\tif (scope.mutualExclusiveValidation.modelValue[attrs.value]) {\r\n\t\t\t\t\t\t\t\t\tscope.mutualExclusiveValidation.exclusiveOptions.forEach(function(item){\r\n\t\t\t\t\t\t\t\t\t\tif(item!=optionValue){\r\n\t\t\t\t\t\t\t\t\t\t\tscope.mutualExclusiveValidation.modelValue[item] = false;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\tscope.$apply();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbAmountDue',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbAmountDue.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tamountDue: '=',\r\n\t\t\t\t}, \r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbAutoSubmitForm', [\"$timeout\", function ($timeout) {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\tlink: function ($scope, $el, $attr) {\r\n\t\t\t\t$timeout(function () {\r\n\t\t\t\t\tangular.element($el).submit();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBConfirmDialog', QBConfirmDialog);\r\n\r\n\tQBConfirmDialog.$inject = [\r\n\t\t'$scope',\r\n\t\t'ngDialog',\r\n\t\t'gtmService',\r\n\t\t'labelService',\r\n\t\t'$state',\r\n\t\t'userInputRepository',\r\n\t\t'MODULE_INFO',\r\n\t\t'$sce',\r\n\t\t'$http',\r\n\t\t'storage',\r\n\t\t'Util',\r\n\t\t'$sanitize'\r\n\t];\r\n\r\n\tfunction QBConfirmDialog(\r\n\t\t$scope,\r\n\t\tngDialog,\r\n\t\tgtmService,\r\n\t\tlabelService,\r\n\t\t$state,\r\n\t\tuserInputRepository,\r\n\t\tMODULE_INFO,\r\n\t\t$sce,\r\n\t\t$http,\r\n\t\tstorage,\r\n\t\tutil,\r\n\t\t$sanitize\r\n\t) {\r\n\t\tvar vm = this;\r\n\t\tvm.formData = {};\r\n\r\n\t\t$scope.$root.$on('open-confirmation-dialog', openDialog);\r\n\r\n\t\tfunction openDialog() {\r\n\t\t\tgetFormName();\r\n\r\n\t\t\tgtmService.trackCTPEvent('VirtualPageview', $state.current, null);\r\n\r\n\t\t\tngDialog\r\n\t\t\t\t.openConfirm({\r\n\t\t\t\t\ttemplate: '../ngviews/directives/qbConfirmDialog.html',\r\n\t\t\t\t\tclassName: 'ngdialog-theme-default',\r\n\t\t\t\t\tappendClassName: 'ngdialog--confirm',\r\n\t\t\t\t\tscope: $scope,\r\n\t\t\t\t\tcloseByDocument: false,\r\n\t\t\t\t\tcloseByEscape: false,\r\n\t\t\t\t\tshowClose: false,\r\n\t\t\t\t\tdisableAnimation: true\r\n\t\t\t\t})\r\n\t\t\t\t.then(\r\n\t\t\t\t\tfunction(value) {\r\n\t\t\t\t\t\tcallSaveData(value);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfunction(reason) {\r\n\t\t\t\t\t\tgtmService.trackCTPEvent(\r\n\t\t\t\t\t\t\t'gaClick',\r\n\t\t\t\t\t\t\t$state.current,\r\n\t\t\t\t\t\t\treason\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\t\t\t\t\t\t$scope.$root.$broadcast('reload-recaptcha');\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction callSaveData(event) {\r\n\t\t\tvar req = {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\turl: '/api/ctpswitch/savedata',\r\n\t\t\t\tdata: vm.formData\r\n\t\t\t};\r\n\r\n\t\t\t$http(req).then(\r\n\t\t\t\tfunction() {\r\n\t\t\t\t\tvm.incentiveDetails.event = event;\r\n\t\t\t\t\tgtmService.trackCTPEvent(\r\n\t\t\t\t\t\t'gaFormSubmission',\r\n\t\t\t\t\t\t$state.current,\r\n\t\t\t\t\t\tvm.incentiveDetails\r\n\t\t\t\t\t);\r\n\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\tvar sessionProtPath = labelService.getLabelFor(\r\n\t\t\t\t\t\t'redirectURL'\r\n\t\t\t\t\t);\r\n\t\t\t\t\twindow.location.href = util.linkBuilder(sessionProtPath);\r\n\t\t\t\t},\r\n\t\t\t\tfunction(err) {\r\n\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\t$state.go('error');\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction getFormName() {\r\n\t\t\tvm.formName = MODULE_INFO.mainFormName;\r\n\r\n\t\t\tswitch (vm.formName) {\r\n\t\t\t\tcase 'ctpForm': {\r\n\t\t\t\t\tvm.formData = userInputRepository.get();\r\n\r\n\t\t\t\t\tdelete vm.formData.email;\r\n\t\t\t\t\tdelete vm.formData.ctpForm.expiryDate;\r\n\t\t\t\t\tdelete vm.formData.ctpForm.formConsent.expiryDate;\r\n\t\t\t\t\tdelete vm.formData.ctpForm.contactDetails.expiryDate;\r\n\r\n\t\t\t\t\tangular.forEach(vm.formData.ctpForm, function(value, key) {\r\n\t\t\t\t\t\tvm.formData.ctpForm[key] = sanitizeForm(\r\n\t\t\t\t\t\t\tvm.formData.ctpForm[key]\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tangular.isDefined(\r\n\t\t\t\t\t\t\tvm.formData.ctpForm.incentiveDetails.paymentNumber\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tvm.formData.ctpForm.incentiveDetails.directDebit ===\r\n\t\t\t\t\t\t\t'true'\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\tvm.formData.ctpForm.incentiveDetails.paymentNumber =\r\n\t\t\t\t\t\t\t\t'';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvm.formData.ctpForm.incentiveDetails.paymentNumber = '';\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvm.incentiveDetails = vm.formData.ctpForm.incentiveDetails;\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!angular.isDefined(\r\n\t\t\t\t\t\t\tvm.formData.ctpForm.contactDetails.surName\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) {\t\t\r\n\t\t\t\t\t\tvm.formData.ctpForm.contactDetails.surName = '';\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tvm.contactDetails = vm.formData.ctpForm.contactDetails;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction sanitizeForm(object) {\r\n\t\t\tangular.forEach(object, function(value, key) {\r\n\t\t\t\tobject[key] = $sanitize(value);\r\n\t\t\t});\r\n\t\t\treturn object;\r\n\t\t}\r\n\r\n\t\tvm.getLabelFor = function(fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getSectionLabelFor = function(fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getSectionLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getSectionDescriptionFor = function(fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\tlabelService.getSectionDescriptionFor(fieldName)\r\n\t\t\t);\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbConfirmDialog', function() {\r\n\t\treturn {\r\n\t\t\trestrict: 'E',\r\n\t\t\tcontroller: 'QBConfirmDialog',\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\tscope: {},\r\n\t\t\ttransclude: true,\r\n\t\t\tlink: function($scope, element, attrs) {}\r\n\t\t};\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbCoverIncludes',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbCoverIncludes.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tcoverIncludes: '=',\r\n\t\t\t\t\tcoverIncludesTitle: '='\r\n\t\t\t\t}, \r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\t// angular.module('qbePortal').controller('ctpProgress', ctpProgress);\r\n\r\n\t// ctpProgress.$inject = ['$scope'];\r\n\r\n\t// function ctpProgress($scope) {\r\n\t// \tvar vm = this;\r\n\t// \tvm.ctpCompleted = false;\r\n\r\n\t// \t$scope.$on('ctp-completed', function(event){\r\n\t// \t\tvm.ctpCompleted = true;\r\n\t// \t});\t\r\n\r\n\t// }\t\r\n\r\n\tangular.module('qbePortal').directive('qbCtpProgress', \r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbCtpProgress.html',\r\n\t\t\t\t//controller: ctpProgress,\r\n\t\t\t\t//controllerAs: 'vm',\t\t\t\t\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t scope: {\r\n\t\t\t \t\ttextDisplay:'=',\r\n\t\t\t \t\tctpStepTotal:'=',\r\n\t\t\t \t\tctpStepNum:'=',\r\n\t\t\t \t\tctpCompleted:'='\t\t\t \r\n\t\t\t },\r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\tscope.backToForm = function() {\r\n\t\t\t\t\t\tif(scope.ctpStepNum == 2){\r\n\t\t\t\t\t\t\tscope.$emit('show-form-entry');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbCvcNumeric',\r\n\r\n\t\tfunction () {\r\n\t\t\tvar regexNumber = /^\\d+$/;\r\n\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\trequire: 'ngModel',\r\n\t\t\t\tlink: function (scope, element, attrs, ngModel) {\r\n\t\t\t\t\tscope.$watch(function () {\r\n\t\t\t\t\t\treturn ngModel.$viewValue;\r\n\t\t\t\t\t}, function (newValue, oldValue) {\r\n\r\n\t\t\t\t\t\tif (newValue && !regexNumber.test(newValue)) {\r\n\t\t\t\t\t\t\tngModel.$setViewValue(oldValue);\r\n\t\t\t\t\t\t\tngModel.$render();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\t/*\r\n\t * \tusage\r\n\t * \tminDate:maxDate in jQuery datepicker format\r\n\t *\t0d:30d - shows from today to next 30 days\r\n\t *\t-1y:1y - shows from last yesr to next year\r\n\t */\r\n\t//TODO: Add year range to display all the possible years\r\n\tangular.module('qbePortal').directive('qbDatePicker', ['$timeout', '$filter', function ($timeout, $filter) {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: function (scope, element, attrs, ngModelCtrl) {\r\n\t\t\t\tvar dateRange = attrs.qbDatePicker;\r\n\r\n\t\t\t\t//set start date and end date\r\n\t\t\t\tvar startDate = (dateRange.split(':')[0]) ? dateRange.split(':')[0] : '';\r\n\t\t\t\tvar endDate = (dateRange.split(':')[1]) ? dateRange.split(':')[1] : '';\r\n\r\n\t\t\t\tvar datePickerOptions = {\r\n\t\t\t\t\tchangeYear: true,\r\n\t\t\t\t\tchangeMonth: true,\r\n\t\t\t\t\tminDate: startDate,\r\n\t\t\t\t\tmaxDate: endDate,\r\n\t\t\t\t\tdateFormat: 'dd/mm/yy',\r\n\t\t\t\t\tyearRange: \"-100:+0\",\r\n\t\t\t\t\tdefaultDate: '+0'\r\n\t\t\t\t};\r\n\t\t\t\t//timeout is added to add datepicker in next digest cycle\r\n\t\t\t\t$timeout(function () {\r\n\t\t\t\t\telement.datepicker(datePickerOptions).change(\r\n\t\t\t\t\t\tfunction (e) {\r\n\t\t\t\t\t\t\t//if user inputs an oout of range date then datepicker changes it to within range\r\n\t\t\t\t\t\t\telement.datepicker('setDate', element.datepicker('getDate'));\r\n\t\t\t\t\t\t\t//setting the ngModel explicity after the value on the textbox is modified in the previous step\r\n\t\t\t\t\t\t\tngModelCtrl.$setViewValue($filter('date')(element.datepicker('getDate'), 'dd/MM/yyyy'));\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t}, 0, ngModelCtrl, element);\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\t/*\r\n\t * \tusage\r\n\t * \tminDate:maxDate in jQuery datepicker format\r\n\t *\t0d:30d - shows from today to next 30 days\r\n\t *\t-1y:1y - shows from last year to next year\r\n\t */\r\n\t//TODO: Add year range to display all the possible years\r\n\tangular.module('qbePortal').directive('qbDateRange', [function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\tgetDateUnit: function (u) {\r\n\t\t\t\tif (u === 'm') {\r\n\t\t\t\t\treturn 'months';\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn u;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tparseDate: function (dateString) {\r\n\t\t\t\tif (dateString !== '') {\r\n\t\t\t\t\tvar unitSplit = dateString.match(/[a-zA-Z]+|[\\-0-9]+/g);\r\n\t\t\t\t\tif (unitSplit.length === 2) {\r\n\t\t\t\t\t\tvar dateUnit = this.getDateUnit(unitSplit[1]);\r\n\t\t\t\t\t\tdateString = moment().startOf('day').add(parseInt(unitSplit[0]), dateUnit);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn dateString;\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs, ctrl) {\r\n\t\t\t\tvar dateRange = attrs.qbDateRange.split(':');\r\n\r\n\t\t\t\t//set start date and end date\r\n\t\t\t\tvar startDate = (!!dateRange[0]) ? dateRange[0] : '';\r\n\t\t\t\tvar endDate = (!!dateRange[1]) ? dateRange[1] : '';\r\n\t\t\t\tstartDate = this.parseDate(startDate);\r\n\t\t\t\tendDate = this.parseDate(endDate);\r\n\r\n\t\t\t\telement.text('Enter a date between ' + startDate.format('DD/MM/YYYY') + ' and ' + endDate.format('DD/MM/YYYY'));\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\t/*\r\n\t * \tusage\r\n\t * \tminDate:maxDate in jQuery datepicker format\r\n\t *\t0d:30d - shows from today to next 30 days\r\n\t *\t-1y:1y - shows from last year to next year\r\n\t */\r\n\t//TODO: Add year range to display all the possible years\r\n\tangular.module('qbePortal').directive('qbDateValidation', [function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tgetDateUnit: function (u) {\r\n\t\t\t\tif (u === 'm') {\r\n\t\t\t\t\treturn 'months';\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn u;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tparseDate: function (dateString) {\r\n\t\t\t\tif (dateString !== '') {\r\n\t\t\t\t\tvar unitSplit = dateString.match(/[a-zA-Z]+|[\\-0-9]+/g);\r\n\t\t\t\t\tif (unitSplit.length === 2) {\r\n\t\t\t\t\t\tvar dateUnit = this.getDateUnit(unitSplit[1]);\r\n\t\t\t\t\t\tdateString = moment().startOf('day').add(parseInt(unitSplit[0]), dateUnit);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn dateString;\r\n\t\t\t},\r\n\t\t\tisValid: function (value, startDate, endDate) {\r\n\t\t\t\tvar d = moment(value, 'DDMMYYYY');\r\n\t\t\t\tif (d.isValid()) {\r\n\t\t\t\t\treturn moment(d).isBetween(startDate, endDate, null, '[]');\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs, ctrl) {\r\n\r\n\t\t\t\tvar dateRange = attrs.qbDateValidation.split(':');\r\n\r\n\t\t\t\t//set start date and end date\r\n\t\t\t\tvar startDate = (!!dateRange[0]) ? dateRange[0] : '';\r\n\t\t\t\tvar endDate = (!!dateRange[1]) ? dateRange[1] : '';\r\n\t\t\t\tstartDate = this.parseDate(startDate);\r\n\t\t\t\tendDate = this.parseDate(endDate);\r\n\r\n\t\t\t\t// bind enter key\r\n\t\t\t\telement.bind(\"keydown keypress\", function (event) {\r\n\t\t\t\t\tif (event.which === 13 && !ctrl.$valid) {\r\n\t\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\t\tctrl.$setViewValue(moment(startDate).startOf('day').format('DDMMYYYY'));\r\n\t\t\t\t\t\t\tctrl.$render();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tctrl.$validators.date = function (modelValue) {\r\n\t\t\t\t\treturn ctrl.$isEmpty(modelValue) || this.isValid(modelValue, startDate, endDate);\r\n\t\t\t\t}.bind(this);\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\t\tangular.module('qbePortal').directive('qbEmptyShedValidation', [function () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict:'AE',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tshedModels:'<',\r\n\t\t\t\t\tngModel:'<',\r\n\t\t\t\t\ttrigger:'<'\r\n\t\t\t\t},\r\n\t\t\t\thasValidSheds:function(shedModels){\r\n\t\t\t\t\tvar zeroItems=0;\r\n\t\t\t\t\tif(Array.isArray(shedModels)){\r\n\t\t\t\t\t\tshedModels.forEach(function(item){\r\n\t\t\t\t\t\t\tif(item!=undefined && item!=null && item===0){\r\n\t\t\t\t\t\t\t\tzeroItems++;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn zeroItems!=shedModels.length;\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs){\r\n\t\t\t\t\tscope.checkValidSheds = this.hasValidSheds;\r\n\r\n\t\t\t\t\tscope.$watch('shedModels',function(newValue,oldValue,scope){\r\n\t\t\t\t\t\tif (scope.ngModel!=undefined) {\r\n\t\t\t\t\t\t\tif(scope.trigger){\r\n\t\t\t\t\t \t\t\tscope.ngModel.$setValidity('qbEmptyShedValidation', scope.checkValidSheds(newValue));\r\n\t\t\t\t\t\t \t}\r\n\t\t\t\t\t\t \telse{\r\n\t\t\t\t\t\t \t\tscope.ngModel.$setValidity('qbEmptyShedValidation', false);\r\n\t\t\t\t\t\t \t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tscope.$watch('trigger',function(newValue,oldValue,scope){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (scope.ngModel!=undefined) {\r\n\t\t\t\t\t\t\tif(newValue!=undefined && newValue===false ){\r\n\t\t\t\t\t\t\tscope.ngModel.$setValidity('qbEmptyShedValidation', true);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\t\tscope.ngModel.$setValidity('qbEmptyShedValidation', scope.checkValidSheds(scope.shedModels));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n\t\t\t}\r\n\t\t}]);\r\n\t})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbEmptyTableValidation', ['aggregatedRemoveService', function (aggregatedRemoveService) {\r\n\t\treturn {\r\n\t\t\trestrict: 'AE',\r\n\t\t\tscope: {\r\n\t\t\t\ttableData: '<',\r\n\t\t\t\tngModel: '<',\r\n\t\t\t\ttrigger: '<',\r\n\t\t\t\tvalidYears: '<',\r\n\t\t\t},\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\tfunction tableHasData(rows) {\r\n\t\t\t\t\tvar hasData = false;\r\n\t\t\t\t\tif (rows && rows.length > 0) {\r\n\t\t\t\t\t\tvar removedData = aggregatedRemoveService.getList();\r\n\t\t\t\t\t\tif (!angular.isArray(removedData)) {\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trows.some(function (row) {\r\n\t\t\t\t\t\t\tif (removedData.indexOf(row) === -1) {\r\n\t\t\t\t\t\t\t\thasData = true;\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn hasData;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar months = {\r\n\t\t\t\t\t'January': '01',\r\n\t\t\t\t\t'February': '02',\r\n\t\t\t\t\t'March': '03',\r\n\t\t\t\t\t'April': '04',\r\n\t\t\t\t\t'May': '05',\r\n\t\t\t\t\t'June': '06',\r\n\t\t\t\t\t'July': '07',\r\n\t\t\t\t\t'August': '08',\r\n\t\t\t\t\t'September': '09',\r\n\t\t\t\t\t'October': '10',\r\n\t\t\t\t\t'November': '11',\r\n\t\t\t\t\t'December': '12',\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\t/*\r\n\t\t\t\t* Function - validate year position via index\r\n\t\t\t\t* Params - table data, year length\r\n\t\t\t\t* Return - boolean\r\n\t\t\t\t*/\r\n\t\t\t\tfunction validMonths(rows, validYears) {\r\n\t\t\t\t\tvar isMonthValid = true;\r\n\t\t\t\t\tvar lastYearIndex = validYears.length - 1;\r\n\t\t\t\t\tangular.forEach(validYears, function (years, index) {\r\n\t\t\t\t\t\tif (isMonthValid) {\r\n\t\t\t\t\t\t\tfor (var i = 0; rows.length > i; i++) {\r\n\t\t\t\t\t\t\t\tif (years.value == rows[i].year.value && isMonthValid) {\r\n\t\t\t\t\t\t\t\t\tif (index == 0) {\r\n\t\t\t\t\t\t\t\t\t\tvar month = rows[i].month.value;\r\n\t\t\t\t\t\t\t\t\t\tisMonthValid = getEligibleMonths(months[month], true);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse if (index == lastYearIndex) {\r\n\t\t\t\t\t\t\t\t\t\tvar month = rows[i].month.value;\r\n\t\t\t\t\t\t\t\t\t\tisMonthValid = getEligibleMonths(months[month], false);\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tisMonthValid = true;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\treturn isMonthValid;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*\r\n\t\t\t\t* Function - validate month input against current month\r\n\t\t\t\t* Params - month, is current year\r\n\t\t\t\t* Return - boolean\r\n\t\t\t\t*/\t\t\t\t\r\n\t\t\t\tfunction getEligibleMonths(month, currentYear) {\r\n\t\t\t\t\tvar validMonth = true;\r\n\t\t\t\t\tvar currentMonth = moment().tz(\"Australia/Sydney\").format(\"M\");\r\n\r\n\t\t\t\t\tif (!currentYear && parseInt(currentMonth) >= parseInt(month)) {\r\n\t\t\t\t\t\tvalidMonth = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (currentYear && parseInt(month) > parseInt(currentMonth)) {\r\n\t\t\t\t\t\tvalidMonth = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn validMonth;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// scope.$on('table-number-of-rows-changed', function() {\r\n\t\t\t\t// validateTable();\r\n\t\t\t\t// });\r\n\r\n\t\t\t\tscope.$on('form-submitted', function () {\r\n\t\t\t\t\tvalidateTable();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfunction validateTable() {\r\n\t\t\t\t\tif (scope.trigger) {\r\n\t\t\t\t\t\tscope.ngModel.$setValidity('qbEmptyTableValidation', tableHasData(scope.tableData));\r\n\t\t\t\t\t\tif (scope.validYears)\r\n\t\t\t\t\t\t\tscope.ngModel.$setValidity('qbInvalidMonth', validMonths(scope.tableData, scope.validYears));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tscope.ngModel.$setValidity('qbEmptyTableValidation', true);\r\n\t\t\t\t\t\tif (scope.validYears)\r\n\t\t\t\t\t\t\tscope.ngModel.$setValidity('qbInvalidMonth', true);\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}]);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('qbRadioLabel', qbRadioLabelController);\r\n\r\n\tqbRadioLabelController.$inject = ['$scope', 'labelService'];\r\n\r\n\tfunction qbRadioLabelController($scope, labelService) {\r\n\t\tvar vm = this,\r\n\t\t\tfieldKey = $scope.fieldKey;\r\n\r\n\t\tvm.fieldName = $scope.name;\r\n\t\tvm.isError = false;\r\n\r\n\t\t$scope.$on('enable-field-error-class', function (event) {\r\n\t\t\tvm.isError = true;\r\n\t\t});\r\n\r\n\t\t$scope.$on('element-id-set', function (event, labelKey, id) {\r\n\t\t\tif (fieldKey !== labelKey) return;\r\n\t\t\tvm.labelFor = id;\r\n\t\t});\r\n\r\n\t\tvm.label = $scope.label || labelService.getLabelFor(fieldKey);\r\n\r\n\t\tvm.addTooltip = $scope.hasOwnProperty('addTooltip');\r\n\t\tif (vm.addTooltip)\r\n\t\t\tvm.tooltip = labelService.getTooltipFor(fieldKey);\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbRadioLabel', function () {\r\n\t\treturn {\r\n\t\t\ttemplateUrl: '../ngviews/directives/qbRadioLabel.html',\r\n\t\t\trestrict: 'E',\r\n\t\t\tcontroller: qbRadioLabelController,\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\t// transclude: true,\r\n\t\t\tscope: {\r\n\t\t\t\tlabel: '@',\r\n\t\t\t\tfieldKey: '@',\r\n\t\t\t\taddTooltip: '@?',\r\n\t\t\t},\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('FieldWrapper', FieldWrapper);\r\n\r\n\tFieldWrapper.$inject = ['$scope', 'labelService', '$sce', '$filter', 'gtmService'];\r\n\r\n\tfunction FieldWrapper($scope, labelService, $sce, $filter, gtmService) {\r\n\t\tvar vm = this,\r\n\t\t\tfieldKey = $scope.fieldKey,\r\n\t\t\tqbTrack = $scope.qbTrack;\r\n\r\n\t\tvm.fieldName = $scope.name;\r\n\t\tvm.showErrorBottom = $scope.showErrorBottom;\r\n\t\tvm.isError = false;\r\n\t\tvm.hintCatcher = null;\r\n\t\tvm.expandHintText = $scope.expandHintText == undefined ? false : $scope.expandHintText;\r\n\r\n\t\tvm.getGlobalOptionLabel = function (optionType, optionValue) {\r\n\t\t\treturn labelService.getGlobalOptionLabel(optionType, optionValue);\r\n\t\t}\r\n\r\n\t\t$scope.$on('enable-field-error-class', function (event) {\t\t\t\r\n\t\t\tvm.isError = true;\r\n\t\t});\r\n\r\n\t\t$scope.$on('element-id-set', function (event, labelKey, id) {\r\n\t\t\tif (fieldKey !== labelKey) return;\r\n\t\t\tvm.labelFor = id;\r\n\t\t});\r\n\r\n\t\t$scope.$on('hide-hint', function(event){\r\n\t\t\tvm.showHint = false;\r\n\t\t});\r\n\r\n\t\t$scope.$on('show-hint', function(event){\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tQBE.expandCollapse.init();\r\n\t\t\t}, 1000)\t\t\t\r\n\t\t\tvm.showHint = true;\r\n\t\t});\t\t\r\n\r\n\r\n\t\t// If there's a fieldKey, look up all the labels/helptext\r\n\t\tif (fieldKey) {\r\n\t\t\t//Additional hint param\r\n\t\t\tvm.showHint = true;\r\n\t\t\t\r\n\t\t\t// Wildcard\r\n\t\t\tvm.labelWildcard = $scope.labelWildcard;\r\n\r\n\t\t\t// Label\r\n\t\t\tvm.label = labelService.getLabelFor(fieldKey);\r\n\r\n\t\t\t// Hide labels which are used for accessibility\r\n\t\t\tvm.hideLabel = $scope.hasOwnProperty('hideLabel');\r\n\r\n\t\t\t// Tooltip\r\n\t\t\tvm.tooltip = labelService.getTooltipFor(fieldKey);\r\n\r\n\t\t\t// HTML Label\r\n\t\t\t// vm.labelMarkup = $sce.trustAsHtml(labelService.getLabelFor(fieldKey));\r\n\r\n\t\t\t// Help Text\r\n\t\t\tif(typeof vm.labelWildcard == 'string' || typeof vm.labelWildcard == 'undefined'){\r\n\t\t\t\tvm.hintText = $sce.trustAsHtml($filter('wildcardReplace')(labelService.getHintTextFor(fieldKey), vm.labelWildcard));\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\t// Handle multiple wildcard\r\n\t\t\t\tvar argArr = [];\r\n\t\t\t\targArr.push(labelService.getHintTextFor(fieldKey));\r\n\t\t\t\targArr = argArr.concat(vm.labelWildcard);\r\n\t\t\t\tvm.hintText = $sce.trustAsHtml($filter('wildcardReplace').apply(null, argArr));\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Extended Help Text\r\n\t\t\t// TODO: fix this to not use timeout\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tQBE.expandCollapse.init();\r\n\t\t\t}, 1000)\r\n\t\t\tvm.helpText = $sce.trustAsHtml(labelService.getHelpTextFor(fieldKey));\r\n\r\n\t\t\t// Secondary info Text\r\n\t\t\tvm.secondaryInfoText = $sce.trustAsHtml(labelService.getSecondaryInfoTextFor(fieldKey));\r\n\t\t}\r\n\r\n\t\tvm.getLabel = function () {\r\n\t\t\tvar label = vm.label;\r\n\r\n\t\t\tvm.labelWildcard = $scope.labelWildcard;\r\n\r\n\t\t\tif (vm.labelWildcard) {\r\n\t\t\t\tlabel = $filter('wildcardReplace')($sce.trustAsHtml(vm.label), vm.labelWildcard);\r\n\t\t\t}\r\n\r\n\t\t\treturn label;\r\n\t\t}\r\n\r\n\t\tvm.showImageRefForPayment = function(data) {\r\n\t\t\tvoid 0;\r\n\t\t\tif(data == 'enterPaymentRef') {\r\n\t\t\t\tangular.element('#pay-img-ref').toggleClass('ng-hide');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t\tWhen select a product from drop down\r\n\t\t\tvalidate product and do Gtm tracking\r\n\t\t*/\r\n\t\tvm.tooltipMouseOver = function(tooltipMessage) {\r\n\t\t\tif (qbTrack === 'true') {\r\n\t\t\t\tgtmService.trackTooltipMouseOver(tooltipMessage);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbFieldWrapper', function () {\r\n\t\treturn {\r\n\t\t\ttemplateUrl: '/ngviews/directives/qbFieldWrapper.html',\r\n\t\t\trestrict: 'A',\r\n\t\t\tcontroller: FieldWrapper,\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\ttransclude: true,\r\n\t\t\tscope: {\r\n\t\t\t\tfieldKey: '@',\r\n\t\t\t\thideLabel: '@?',\r\n\t\t\t\tlabelWildcard: '<',\r\n\t\t\t\tsecondaryInfoTextDisplayOn: '=?',\r\n\t\t\t\tvalidationSelector: '@',\r\n\t\t\t\tshowErrorBottom: '@',\r\n\t\t\t\texpandHintText: '=',\r\n\t\t\t\tqbTrack:'@?',\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbFormField', ['hierarchyDecorator', 'validationService', 'userInputRepository',\r\n\t\tfunction (hierarchyDecorator, validationService, userInputRepository) {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tcontrollerAs: 'vm',\r\n\t\t\t\trequire: 'ngModel',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tname: '@',\r\n\t\t\t\t\tlabelKey: '@',\r\n\t\t\t\t\tsetHierarchy: '&?',\r\n\t\t\t\t\tcommonValue: '@?',\r\n\t\t\t\t\tspinner:'<',\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs, ngModelCtrl, transclude) {\r\n\t\t\t\t\tvar hasError = false;\r\n\t\t\t\t\tscope._element = element;\r\n\t\t\t\t\tvar model = ngModelCtrl;\r\n\r\n\t\t\t\t\tscope.$on('broadcast-field-errors', function () {\r\n\t\t\t\t\t\thasError = true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tfunction formIsSubmitted() {\r\n\t\t\t\t\t\treturn hasError == true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tscope.$watch(function () {\r\n\t\t\t\t\t\tvalidationService.validateInput(element, ngModelCtrl, scope.labelKey);\r\n\t\t\t\t\t\tvar parent = element.parents('div.ctrl-holder');\r\n\t\t\t\t\t\tif (!parent || !parent[0]) return;\r\n\t\t\t\t\t\tparent = $(parent).first();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (ngModelCtrl.$invalid && (ngModelCtrl.$dirty || formIsSubmitted())) {\r\n\t\t\t\t\t\t\tparent.addClass('is-error');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tparent.find('[data-name='+scope.labelKey+']').addClass('ng-hide'); //applicable only for CTP forms\r\n\t\t\t\t\t\t\tparent.removeClass('is-error');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (scope.commonValue !== undefined) {\r\n\t\t\t\t\t\t// console.log( model.$modelValue ) ;\r\n\t\t\t\t\t\tmodel.$viewChangeListeners.push(function () {\r\n\t\t\t\t\t\t\tscope.$emit('common-value-update', {name: scope.commonValue, value: model.$modelValue});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tmodel.$formatters.push(function () {\r\n\t\t\t\t\t\t\t/** run on initialisation of model value */\r\n\t\t\t\t\t\t\tscope.$emit('common-value-update', {name: scope.commonValue, value: model.$modelValue});\r\n\t\t\t\t\t\t\treturn model.$modelValue;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (scope.setHierarchy !== undefined)\r\n\t\t\t\t\t\thierarchyDecorator.attach(scope, {element: scope._element, name: scope.name});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}]);\r\n})();\r\n\n/**\r\n * qbFormSection (qb-form-section) aims to implement a reusable binding container which facilitate access to reference values\r\n * and main functionalities and services available to different sections of the form without coupling each section to the parent\r\n * data structure.\r\n */\r\n(function () {\r\n\t\"use strict\";\r\n\r\n\tangular.module(\"qbePortal\").controller(\"FormSection\", FormSection);\r\n\r\n\tFormSection.$inject = [\r\n\t\t\"$scope\",\r\n\t\t\"$rootScope\",\r\n\t\t\"$state\",\r\n\t\t\"$sce\",\r\n\t\t\"$window\",\r\n\t\t\"quoteOptions\",\r\n\t\t\"quoteModelFactory\",\r\n\t\t\"labelService\",\r\n\t\t\"userInputRepository\",\r\n\t\t\"serviceResponseRepository\",\r\n\t\t\"paymentService\",\r\n\t\t\"Util\",\r\n\t\t\"$http\",\r\n\t\t\"$filter\",\r\n\t\t\"$location\",\r\n\t\t\"storage\",\r\n\t\t\"campaignService\",\r\n\t\t\"paymentLoggerService\",\r\n\t\t\"gtmService\"\r\n\t];\r\n\r\n\tfunction FormSection(\r\n\t\t$scope,\r\n\t\t$rootScope,\r\n\t\t$state,\r\n\t\t$sce,\r\n\t\t$window,\r\n\t\tquoteOptions,\r\n\t\tquoteModelFactory,\r\n\t\tlabelService,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tpaymentService,\r\n\t\tUtil,\r\n\t\t$http,\r\n\t\t$filter,\r\n\t\t$location,\r\n\t\tstorage,\r\n\t\tcampaignService,\r\n\t\tpaymentLoggerService,\r\n\t\tgtmService\r\n\t) {\r\n\t\tvar vm = this;\r\n\t\tvar userInputValues = {},\r\n\t\t\tchildren = {},\r\n\t\t\tsectionData = {};\r\n\t\tvar errorCount = 0;\r\n\t\tvar isRetrieval = storage.getItem(\"retrieve\");\r\n\t\t$scope.hierarchyList = [$scope.name];\r\n\t\tvm.sectionName = $scope.name;\r\n\t\tvm.fieldValues = $scope.fieldValues || {};\r\n\t\tvm.formSelector = $scope.formSelector;\r\n\t\tvm.aggregatedListName = $scope.aggregatedListName;\r\n\t\tvm.fieldOptions = {};\r\n\t\tvm.children = children;\r\n\t\tvm.commonValues = {};\r\n\t\tvm.isEligible = false;\r\n\t\tvm.showError = false;\r\n\t\tvm.showPaypalError = false;\r\n\t\tvm.showAustpostBillpay = 0;\r\n\t\tvm.showSDExemption = storage.getItem(\"stamp-duty\");\r\n\t\tvm.showCreditCard = false;\r\n\t\tvm.microformInstance = undefined;\t\t\r\n\r\n\t\tvm.policyStartDateChanged = function(value) {\r\n\t\t\tif (!moment(value, \"DD/MM/YYYY\").isValid()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tstorage.setItem(\r\n\t\t\t\t'policy-start-date', \r\n\t\t\t\tmoment(\r\n\t\t\t\t\tvalue,\r\n\t\t\t\t\t\"DD/MM/YYYY\"\r\n\t\t\t\t).format(\"YYYY-MM-DD\"));\r\n\t\t\t$rootScope.$broadcast(\"recall-get-details\");\r\n\t\t};\r\n\r\n\t\tvm.toolTipHover = function(message) {\r\n\t\t\tgtmService.trackTooltipMouseOver(message);\r\n\t\t};\r\n\r\n\t\tfunction trackformErrorByErrorMessage(errMessage) {\r\n\t\t\t/* gtm track error message */\r\n\t\t\tif (errMessage) {\r\n\t\t\t\tgtmService.trackStandardEvent('error', 'error message', errMessage, true);\r\n\t\t\t}\t\t\t\r\n\t\t\t/* end gtm track error message */\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!isUndefinedOrNull($window.qbe.fieldLabels.config) &&\r\n\t\t\t!isUndefinedOrNull(\r\n\t\t\t\t$window.qbe.fieldLabels.config.AllowClaimsPayments\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\tvm.showAustpostBillpay =\r\n\t\t\t\t$window.qbe.fieldLabels.config.AllowClaimsPayments;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.validationSummary != undefined) {\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.validationSummary.formErrorMessage;\r\n\r\n\t\t\tif (vm.showError) {\r\n\t\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\r\n\t\t//unauthenticated payment\r\n\t\tvm.showPaymentSection = false;\r\n\t\tvm.isEnterPaymentRefError = false;\r\n\t\tvm.isEnterPaymentRefErrorLength = false;\r\n\t\tvm.policyCategory = \"\";\r\n\t\tvm.validateProducts = validateProducts;\r\n\t\tvm.selectProduct = selectProduct;\r\n\r\n\t\tvm.showContentsSumInsuredInLowerRange = false;\r\n\t\tvm.showYourContentsSumInsuredInLowerRange = false;\r\n\t\tvm.getBuildingEstimate = getBuildingEstimate;\r\n\t\tvm.getBuildingMaximum = getBuildingMaximum;\r\n\t\tvm.getBuildingMinimum = getBuildingMinimum;\r\n\t\tvm.getEstimateRebuild = getEstimateRebuild;\r\n\t\tvm.stateName = $state.$current.name;\r\n\t\tvm.validateBuildingSumInsured = validateBuildingSumInsured;\r\n\t\tvm.toggleContentsSumInsuredInLowerRange = toggleContentsSumInsuredInLowerRange;\r\n\t\tvm.toggleYourContentsSumInsuredInLowerRange = toggleYourContentsSumInsuredInLowerRange;\r\n\t\tvm.showAggregate = false;\r\n\r\n\t\tvm.csCCInvalid = false;\r\n\t\tvm.csCVCInvalid = false;\r\n\r\n\t\t$scope.$on(\"credit-card-number-isvalid\", function (e, val) {\r\n\t\t\tvm.csCCInvalid = !val;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"credit-card-cvc-isvalid\", function (e, val) {\r\n\t\t\tvm.csCVCInvalid = !val;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"bike-selected\", function (e, val) {\r\n\t\t\tif (vm.fieldValues.insuredExcessValue){\r\n\t\t\t\tif (vm.fieldValues.insuredExcessValue.comprehensivePref === \"agreed\") {\r\n\t\t\t\t\tvm.fieldValues.insuredExcessValue.comprehensivePref = \"market\";\r\n\t\t\t\t\tvm.requote();\r\n\t\t\t\t}\r\n\t\t\t}\t\t\t\r\n\t\t});\r\n\t\t//validate if quote is from retrieval to show driver aggregates\r\n\t\tif (angular.equals(isRetrieval, {})) vm.showAggregate = true;\r\n\r\n\t\t/*\r\n\t\t * Polyfill for startswith for non supported browser\r\n\t\t *\r\n\t\t */\r\n\t\tif (!String.prototype.startsWith) {\r\n\t\t\tString.prototype.startsWith = function (searchString, position) {\r\n\t\t\t\tposition = position || 0;\r\n\t\t\t\treturn (\r\n\t\t\t\t\tthis.substr(position, searchString.length) === searchString\r\n\t\t\t\t);\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t//Fill in old details if returned from Paypal\r\n\t\tfunction restoreDetails() {\r\n\t\t\tvar formDetails = storage.getItem(\"userInput\");\r\n\r\n\t\t\tvm.fieldValues.selectInsuranceType =\r\n\t\t\t\tformDetails.paybillForm.selectInsuranceType.selectInsuranceType;\r\n\t\t\tvalidateProducts(vm.fieldValues.selectInsuranceType);\r\n\t\t\tvm.fieldValues.enterPaymentRef =\r\n\t\t\t\tformDetails.paybillForm.selectInsuranceType.enterPaymentRef;\r\n\t\t\tstorage.setItem(\"auto-find-bill\", {\r\n\t\t\t\ttrigger: true,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tvm.sessionLabels = $window.qbe.fieldLabels.sessionFunction;\r\n\t\t}\r\n\r\n\t\t$scope.$on(\"restore-payment-details\", function () {\r\n\t\t\trestoreDetails();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"clear-field-values\", function () {\r\n\t\t\tstorage.clear();\r\n\t\t\t$scope.formData = {};\r\n\t\t});\r\n\r\n\t\t$scope.$root.$on(\"common-value-update\", function (event, update) {\r\n\t\t\tvm.commonValues[update.name] = update.value;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"switch-to-QBE\", function (event, isEligible) {\r\n\t\t\tvm.isEligible = isEligible;\r\n\t\t});\r\n\r\n\t\t//show amount on top right payments pag\r\n\t\t$scope.$on(\"switch-payment-amount\", function (\r\n\t\t\tevent,\r\n\t\t\tshowPaymentSection\r\n\t\t) {\r\n\t\t\tvm.showPaymentSection = showPaymentSection;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"show-aggregate\", function () {\r\n\t\t\tvm.showAggregate = true;\r\n\t\t});\r\n\r\n\t\t/** Event received from child sections to receive common values upon initialisation\r\n\t\t * This is for cases when sections requiring common values are registered after those providing them\r\n\t\t */\r\n\t\t$scope.$on(\"request-common-values\", function (event, update) {\r\n\t\t\t$scope.$broadcast(\"received-common-values\", vm.commonValues);\r\n\t\t});\r\n\r\n\t\t/** updates common values upon receiving from parent section */\r\n\t\t$scope.$on(\"received-common-values\", function (event, commonValues) {\r\n\t\t\tvm.commonValues = commonValues;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"broadcast-field-errors\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.validationSummary == undefined\r\n\t\t\t\t\t? null\r\n\t\t\t\t\t: $window.qbe.fieldLabels.validationSummary\r\n\t\t\t\t\t\t\t.formErrorMessage;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"broadcast-no-field-errors\", function (event) {\r\n\t\t\tvm.showError = false;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"paypal-payment-error\", function (event) {\r\n\t\t\tvm.showPaypalError = true;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.paypalCodeMessage.value;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"payment-already-made\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.validationSummary.alreadyPaidMessage;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"payment-error\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.validationSummary.paymentErrorMessage;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalid-payment-reference-number\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tif ($window.qbe.fieldLabels.paymentRefNoMatchFound) {\r\n\t\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentRefNoMatchFound.pleaseCheckRefNumber;\r\n\t\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"direct-debit-payment-error\", function (event) {\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\tvm.formErrorMessage =\r\n\t\t\t\t$window.qbe.fieldLabels.directDebitMessage.value;\r\n\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\t\t});\r\n\r\n\t\t// $scope.$on('credit-card-form-error', function (event) {\r\n\t\t// \tvm.showError = true;\r\n\t\t// \tvm.showPaypalError = false;\r\n\t\t// \tvm.formErrorMessage = $window.qbe.fieldLabels.validationSummary.formErrorMessage;\r\n\t\t// });\r\n\t\t/**\r\n\t\t * Holds all the reference values to be used by the form section to access\r\n\t\t * other values entered by the user in other steps of the form.\r\n\t\t */\r\n\t\tvm.quoteModel = quoteModelFactory.create();\r\n\r\n\t\t$scope.$root.$on(\"selected-quote-changed\", function () {\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\t\t});\r\n\r\n\t\t// Check the return of campaign code validation\r\n\t\t$scope.$on(\"valid-campaign\", function (event, args) {\r\n\t\t\tif (args.isValid) {\r\n\t\t\t\tvm.campaignBanner = campaignService.getCampaignConfig(\r\n\t\t\t\t\targs.promoValue,\r\n\t\t\t\t\tfalse\r\n\t\t\t\t).content;\r\n\t\t\t\tvm.isCampaignCodeValid = campaignService.getCampaignConfig(\r\n\t\t\t\t\targs.promoValue,\r\n\t\t\t\t\tfalse\r\n\t\t\t\t).isCampaignCodeValid;\r\n\t\t\t} else {\r\n\t\t\t\tvm.isCampaignCodeValid = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$root.$on(\"update-quote-model-reference\", function () {\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\t\t});\r\n\t\t/**\r\n\t\t * Creates an Array and assigns it to the fieldValues with the given name @fieldName\r\n\t\t */\r\n\t\tvm.initialiseListFor = function (fieldName) {\r\n\t\t\tif (\r\n\t\t\t\t!vm.fieldValues[fieldName] ||\r\n\t\t\t\t!Array.isArray(vm.fieldValues[fieldName])\r\n\t\t\t)\r\n\t\t\t\tvm.fieldValues[fieldName] = [];\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Creates an object {} and assings it to the fieldValues with given name @fieldName\r\n\t\t */\r\n\t\tvm.initialiseFieldValue = function (formObjectName) {\r\n\t\t\tif (!vm.fieldValues[formObjectName]) {\r\n\t\t\t\tvm.fieldValues[formObjectName] = {};\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Gets the list of options from labelService for the fieldName provided @fieldName\r\n\t\t * optionally adds @defaultValue to the list.\r\n\t\t */\r\n\t\tvm.getOptionsFor = function (fieldName, defaultValue) {\r\n\t\t\treturn getOptions(fieldName, defaultValue);\r\n\t\t};\r\n\r\n\t\tvm.disableNext = function (disable) {\r\n\t\t\t$scope.$emit(\"disable-next\", disable);\r\n\t\t};\r\n\r\n\t\tvm.disableNextForConvictions = function (key, value, section) {\r\n\t\t\t$scope.$emit(\"conviction-check\", {\r\n\t\t\t\tconviction: key,\r\n\t\t\t\tinput: value,\r\n\t\t\t\tsection: section,\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tfunction getOptions(fieldName, defaultValue) {\r\n\t\t\tif (!vm.fieldOptions[fieldName]) {\r\n\t\t\t\tvm.fieldOptions[fieldName] = labelService\r\n\t\t\t\t\t.getOptionsFor(fieldName)\r\n\t\t\t\t\t.slice();\r\n\t\t\t\tif (defaultValue)\r\n\t\t\t\t\tvm.fieldOptions[fieldName].unshift(defaultValue);\r\n\t\t\t}\r\n\r\n\t\t\treturn vm.fieldOptions[fieldName];\r\n\t\t}\r\n\r\n\t\t// TODO: set campaign code for ctp sa\r\n\t\tvm.getCtpBanner = function () {\r\n\t\t\tvar codeFromLink = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"ctpForm.promotionalCode.value\"\r\n\t\t\t);\r\n\r\n\t\t\tif (!isUndefinedOrNull(codeFromLink)) {\r\n\t\t\t\tvm.campaignBanner = campaignService.getCampaignConfig(\r\n\t\t\t\t\tcodeFromLink,\r\n\t\t\t\t\tfalse\r\n\t\t\t\t).content;\r\n\t\t\t\tif (isUndefinedOrNull(vm.campaignBanner)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else return true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.getCampaignSteps = function (text) {\r\n\t\t\treturn $sce.trustAsHtml(text);\r\n\t\t};\r\n\r\n\t\tvm.getObjectValue = function (fieldName, fieldLabel) {\r\n\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\tlabelService.getObjectValue(fieldName, fieldLabel)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getObjectValueRaw = function (fieldName, fieldLabel) {\r\n\t\t\treturn labelService.getObjectValue(fieldName, fieldLabel);\r\n\t\t};\r\n\r\n\t\tvm.getLabelFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getSectionLabelFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getSectionLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getSectionDescriptionFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\tlabelService.getSectionDescriptionFor(fieldName)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getHintTextFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getHintTextFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getHelpTextFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getHelpTextFor(fieldName));\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOptionsFor = function (optionType, defaultValue) {\r\n\t\t\tvar options = labelService.getGlobalOptionsFor(optionType).slice();\r\n\t\t\tif (defaultValue) {\r\n\t\t\t\toptions.unshift(defaultValue);\r\n\t\t\t}\r\n\r\n\t\t\treturn options;\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOptionLabel = function (optionType, optionValue) {\r\n\t\t\tvar optionKeyValues = this.getGlobalOptionsFor(optionType);\r\n\t\t\tvar label = null;\r\n\t\t\tif (optionKeyValues) {\r\n\t\t\t\tangular.forEach(optionKeyValues, function (option) {\r\n\t\t\t\t\tif (option.value == optionValue) label = option.label;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn label;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Gets content-authored option names from the label service for options returned by the service.\r\n\t\t * This allows content-authors to define labels for values returned by GuideWire services for example.\r\n\t\t */\r\n\t\tvm.getLabelForRemoteOption = function (fieldName, labelKey) {\r\n\t\t\treturn labelService.getLabelForRemoteOption(fieldName, labelKey);\r\n\t\t};\r\n\r\n\t\tvm.hasServiceResponseFrom = function (serviceName) {\r\n\t\t\t//call getUserInput method in form.controller to have a session storage\r\n\t\t\t$scope.$root.$broadcast(\"get-user-input\");\r\n\t\t\tQBE.expandCollapse.init();\r\n\t\t\treturn (\r\n\t\t\t\tserviceResponseRepository.getLastResponseFrom(serviceName) !==\r\n\t\t\t\tnull\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.setCoverTypeClass = function (coverTypeClass) {\r\n\t\t\tvm.setSelectedCoverType(coverTypeClass, \"standard\");\r\n\t\t};\r\n\r\n\t\tvm.setCoverTypeClassWithMotorSubClass = function (\r\n\t\t\tcoverTypeClass,\r\n\t\t\tcomprehensiveCoverTypeSubClass,\r\n\t\t\tthirdPartyCoverTypeSubClass\r\n\t\t) {\r\n\t\t\tif (coverTypeClass === \"comprehensive\") {\r\n\t\t\t\t//comprehensive set to standard\r\n\t\t\t\tvm.setSelectedCoverType(coverTypeClass, \"standard\");\r\n\t\t\t} else if (coverTypeClass === \"third_party\") {\r\n\t\t\t\tif (thirdPartyCoverTypeSubClass === \"third_party\") {\r\n\t\t\t\t\t//production issue fix [CPJIRA-4147] as default 3rd party is standard\r\n\t\t\t\t\tthirdPartyCoverTypeSubClass = \"standard\";\r\n\t\t\t\t}\r\n\t\t\t\tvm.setSelectedCoverType(\r\n\t\t\t\t\tcoverTypeClass,\r\n\t\t\t\t\tthirdPartyCoverTypeSubClass\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\t//else do a standard subclass\r\n\t\t\t\tvm.setSelectedCoverType(coverTypeClass, \"standard\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.setCoverTypeSubClass = function (coverTypeSubClass) {\r\n\t\t\tvar coverType = quoteOptions.getSelectedCoverType();\r\n\t\t\tvm.setSelectedCoverType(coverType.superType, coverTypeSubClass);\r\n\t\t};\r\n\r\n\t\tvm.setSelectedCoverType = function (coverTypeClass, coverTypeSubClass) {\r\n\t\t\tquoteOptions.setSelectedCoverType(\r\n\t\t\t\tcoverTypeClass,\r\n\t\t\t\tcoverTypeSubClass\r\n\t\t\t);\r\n\t\t\tvm.requote();\r\n\t\t\t// $scope.$root.$broadcast('selected-quote-changed') ;\r\n\t\t};\r\n\r\n\t\tvm.setSelectedOffering = function (offering) {\r\n\t\t\tquoteOptions.setSelectedOffering(offering);\r\n\t\t\tvm.requote();\r\n\t\t\t// $scope.$root.$broadcast('selected-quote-changed') ;\r\n\t\t};\r\n\r\n\t\t/*\r\n\t\t *calculates the claimable rent\r\n\t\t * weeks - in format '4Weeks'...'15Weeks'\r\n\t\t */\r\n\t\tvm.getRentClaimValue = function (weeklyRent, weeks) {\r\n\t\t\treturn parseInt(weeks) * weeklyRent;\r\n\t\t};\r\n\r\n\t\tvm.isSumInsuredTypeAvailable = function (insuredType) {\r\n\t\t\treturn quoteOptions.isSumInsuredTypeAvailable(insuredType);\r\n\t\t};\r\n\r\n\t\tvm.isCoverTypeAvailable = function (coverTypeClass) {\r\n\t\t\treturn quoteOptions.isCoverTypeAvailable(coverTypeClass);\r\n\t\t};\r\n\r\n\t\tvm.isCoverSubTypeAvailable = function (\r\n\t\t\tcoverTypeClass,\r\n\t\t\tcoverTypeSubClass\r\n\t\t) {\r\n\t\t\treturn quoteOptions.isCoverSubTypeAvailable(\r\n\t\t\t\tcoverTypeClass,\r\n\t\t\t\tcoverTypeSubClass\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getSelectedCoverType = function () {\r\n\t\t\treturn quoteOptions.getSelectedCoverType();\r\n\t\t};\r\n\r\n\t\tvm.getSelectedQuote = function () {\r\n\t\t\treturn quoteOptions.getSelectedQuoteResponse();\r\n\t\t};\r\n\r\n\t\tvm.getQuickQuoteData = function () {\r\n\t\t\treturn serviceResponseRepository.getLastResponseFrom(\"quickQuote\");\r\n\t\t};\r\n\r\n\t\tvm.isStrataOrRegisteredVisible = function () {\r\n\t\t\tvar buildingType = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.tellUsAboutTheProperty.typeOfBuilding\"\r\n\t\t\t);\r\n\t\t\tvar state = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.tellUsAboutTheProperty.address.state\"\r\n\t\t\t);\r\n\t\t\tvar includedTypes = [\r\n\t\t\t\t\"unit\",\r\n\t\t\t\t\"duplex\",\r\n\t\t\t\t\"triplex\",\r\n\t\t\t\t\"flat\",\r\n\t\t\t\t\"villa\",\r\n\t\t\t\t\"townhouse\",\r\n\t\t\t];\r\n\t\t\tif (state === \"AU_WA\" && includedTypes.indexOf(buildingType) > -1) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.getAddressState = function () {\r\n\t\t\tvar state = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.tellUsAboutTheProperty.address.state\"\r\n\t\t\t);\r\n\t\t\treturn state;\r\n\t\t};\r\n\r\n\t\tvm.isRapidEstimatePanelVisible = function () {\r\n\t\t\tvar visible = true;\r\n\t\t\tif (vm.sectionName === \"homeForm\") {\r\n\t\t\t\tvar howIsHomeOccupied = vm.commonValues.howIsHomeOccupied;\r\n\t\t\t\tif (howIsHomeOccupied === \"unoccupied\") {\r\n\t\t\t\t\tvisible = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tvm.commonValues.coverNeeds_contents == true ||\r\n\t\t\t\t\tvm.commonValues.coverNeeds_building == true\r\n\t\t\t\t) {\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvisible = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn visible;\r\n\t\t};\r\n\r\n\t\tvm.isDisplayRapidEstimate = function () {\r\n\t\t\tvar display = false;\r\n\t\t\tif ($window.qbe.rapidEstimateDisplay) {\r\n\t\t\t\tif ($window.qbe.rapidEstimateDisplay.display == true) {\r\n\t\t\t\t\tdisplay = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdisplay = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn display;\r\n\t\t};\r\n\t\tvm.$onInit = function () {\r\n\t\t\tif ($scope.register)\r\n\t\t\t\t// gtm track landing page\r\n\t\t\t\tif ($scope.name === 'paybillForm') {\r\n\t\t\t\t\tgtmService.trackPayBillVirtualPageLanding();\r\n\t\t\t\t}\r\n\t\t\t\t$scope.register({\r\n\t\t\t\t\tname: $scope.name,\r\n\t\t\t\t\tinit: vm.initFn,\r\n\t\t\t\t\tget: vm.getValue,\r\n\t\t\t\t});\r\n\r\n\t\t\tif ($scope.formData) {\r\n\t\t\t\t//sets it back to the formsection as the object has not been fully initialised when called in form controller\r\n\t\t\t\tUtil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t\tvm.fieldValues = $scope.formData[$scope.name] || {};\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.sectionName == \"yourBuilding\") {\r\n\t\t\t\t//dd-3747 - added building sum insured checking because radio buttons are not in the data model\r\n\t\t\t\tcheckBuildingSumInsured();\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.sectionName == \"mainPolicyHolderContact\") {\r\n\t\t\t\tvm.fieldValues.emailAddress1 = vm.quoteModel.email;\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.sectionName == \"selectInsuranceType\") {\r\n\t\t\t\tvar paymentError = storage.getItem(\"payment-error-details\");\r\n\t\t\t\tif (paymentError && paymentError.mode == \"paypal\") {\r\n\t\t\t\t\t$scope.$broadcast(\"paypal-payment-error\");\r\n\t\t\t\t\trestoreDetails();\r\n\t\t\t\t\tstorage.removeItem(\"payment-error-details\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (paymentError && paymentError.mode == \"cc\") {\r\n\t\t\t\t\t$scope.$broadcast(\"payment-error\");\r\n\t\t\t\t\trestoreDetails();\r\n\t\t\t\t\tstorage.removeItem(\"payment-error-details\");\r\n\t\t\t\t}\t\t\t\t\r\n\r\n\t\t\t\t// open section according to param\r\n\t\t\t\tvar uiSelectedInsuranceType = '';\r\n\t\t\t\tvar uiSelectedInsuranceTypeCode = $location.search().t;\r\n\t\t\t\tvar uiRefNum = $location.search().r;\r\n\r\n\t\t\t\tvar selectedInsuranceTypeOptions = vm.getOptionsFor('selectInsuranceType');\r\n\r\n\t\t\t\tif (uiSelectedInsuranceTypeCode) {\r\n\t\t\t\t\tuiSelectedInsuranceTypeCode = uiSelectedInsuranceTypeCode.toLowerCase();\r\n\r\n\t\t\t\t\tif (selectedInsuranceTypeOptions && selectedInsuranceTypeOptions.length > 0) {\r\n\t\t\t\t\t\tfor (var n = 0; n < selectedInsuranceTypeOptions.length; n++) {\r\n\t\t\t\t\t\t\tvar selectedInsuranceTypeItem = selectedInsuranceTypeOptions[n];\r\n\t\t\t\t\t\t\tif (selectedInsuranceTypeItem.attributes != \"\" && selectedInsuranceTypeItem.attributes == uiSelectedInsuranceTypeCode) {\r\n\t\t\t\t\t\t\t\tuiSelectedInsuranceType = selectedInsuranceTypeItem.value;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif (uiSelectedInsuranceType) {\r\n\t\t\t\t\tvm.fieldValues.selectInsuranceType = uiSelectedInsuranceType;\r\n\t\t\t\t\tvm.selectProduct(vm.fieldValues.selectInsuranceType);\r\n\t\t\t\t}\t\t\t\t\r\n\r\n\t\t\t\tif (uiRefNum) {\r\n\t\t\t\t\tvm.fieldValues.enterPaymentRef = uiRefNum;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// // perform search\r\n\t\t\t\tif (vm.fieldValues.selectInsuranceType && vm.fieldValues.enterPaymentRef) {\r\n\t\t\t\t\tsetTimeout(function (){\r\n\t\t\t\t\t\tvar findBillButton = document.getElementById(\"find-bill\");\r\n\t\t\t\t\t\tif (findBillButton) {\r\n\t\t\t\t\t\t\tfindBillButton.click();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 500);\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\t// Check if campaign code is valid\r\n\t\t\tif (vm.quoteModel && vm.quoteModel.quoteResult) {\r\n\t\t\t\tvar quoteResponse = vm.quoteModel.quoteResult.response;\r\n\t\t\t\tif (\r\n\t\t\t\t\tquoteResponse.isCampaignCodeValid ||\r\n\t\t\t\t\tquoteResponse.isGiftCardApplied\r\n\t\t\t\t) {\r\n\t\t\t\t\tvm.campaignBanner = campaignService.getCampaignConfig(\r\n\t\t\t\t\t\tquoteResponse.campaignCode,\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t).content;\r\n\t\t\t\t\tvm.isCampaignCodeValid = campaignService.getCampaignConfig(\r\n\t\t\t\t\t\tquoteResponse.campaignCode,\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t).isCampaignCodeValid;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.isCampaignCodeValid = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.quoteModel && !vm.quoteModel.policyStartDate) {\r\n\t\t\t\tstorage.setItem('policy-start-date', moment().tz(\"Australia/Sydney\").format(\"YYYY-MM-DD\"));\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Registers child form sections with the current form section.\r\n\t\t * Similar to registerSection in form controller, it keeps track of child sections, their value and\r\n\t\t * initialisation.\r\n\t\t */\r\n\t\tvm.registerFormField = function (childName, initValueFn, getValueFn) {\r\n\t\t\tif (!children[childName]) children[childName] = {};\r\n\t\t\tchildren[childName].initValueFn = initValueFn;\r\n\t\t\tchildren[childName].getValueFn = getValueFn;\r\n\t\t\t$scope.$emit(\"request-common-values\");\r\n\t\t\tif (vm.fieldValues && vm.fieldValues[childName]) {\r\n\t\t\t\tinitValueFn(vm.fieldValues[childName]);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.registerIdGenerator = function (childName, initIdFn) {\r\n\t\t\tif (!children[childName]) children[childName] = {};\r\n\r\n\t\t\tchildren[childName].initIdFn = initIdFn;\r\n\t\t\tinitIdFn($scope.name);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * keep track of the hierarchy of form sections and is used to generate automatic, unique HTML IDs.\r\n\t\t */\r\n\t\tvm.registerHierarchy = function (childName, setHierarchyFn) {\r\n\t\t\tif (!children[childName]) children[childName] = {};\r\n\t\t\tchildren[childName].setHierarchyFn = setHierarchyFn;\r\n\t\t\tsetHierarchyFn($scope.hierarchyList);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * @return the value of all child form sections as well as all direct inputs of the current section.\r\n\t\t */\r\n\t\tvm.getValue = function () {\r\n\t\t\tfor (var key in children) {\r\n\t\t\t\tif (children[key].getValueFn) {\r\n\t\t\t\t\tif (vm.aggregatedListName)\r\n\t\t\t\t\t\tvm.fieldValues[vm.aggregatedListName][\r\n\t\t\t\t\t\t\tparseInt(key)\r\n\t\t\t\t\t\t] = children[key].getValueFn();\r\n\t\t\t\t\telse vm.fieldValues[key] = children[key].getValueFn();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn vm.fieldValues;\r\n\t\t};\r\n\r\n\t\tvm.resetInsuredExcessValue = function() {\r\n\t\t\tvar test = vm.fieldValues;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Callback used by components to update their value and pass it back to the parent form section.\r\n\t\t */\r\n\t\tvm.updateComponentValue = function (name, value) {\r\n\t\t\tvm.fieldValues[name] = value;\r\n\t\t};\r\n\r\n\t\tvm.removeSection = function (aggregator) {\r\n\t\t\tvar childSectionsToRemove = [];\r\n\t\t\tfor (var key in vm.children) {\r\n\t\t\t\tvar childSection = vm.children[key],\r\n\t\t\t\t\tchildValue = childSection.getValueFn();\r\n\t\t\t\tif (childValue._aggregator == aggregator) {\r\n\t\t\t\t\tchildSectionsToRemove.push(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tchildSectionsToRemove.forEach(function (sectionKey) {\r\n\t\t\t\tdelete vm.children[sectionKey];\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Initialises the form section and all its child sections.\r\n\t\t */\r\n\t\tvm.initFn = function (data, parentName) {\r\n\t\t\tvm.fieldValues = data;\r\n\t\t\t// for (var key in children) {\r\n\t\t\t// \tchild.setParent()\r\n\t\t\t// \tvar child = children[key] ;\r\n\t\t\t// \tif ( child.initIdFn ) child.initIdFn(parentName);\r\n\t\t\t// \tif ( child.setHierarchyFn ) child.setHierarchyFn(parentName);\r\n\t\t\t// };\r\n\t\t};\r\n\r\n\t\tvm.getAge = function (dob) {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tmoment(new Date()).diff(\r\n\t\t\t\t\tmoment(dob, \"DD/MM/YYYY\"),\r\n\t\t\t\t\t\"years\",\r\n\t\t\t\t\ttrue\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getCeilingAge = function (dob, floatPoint) {\r\n\t\t\treturn Math.ceil(\r\n\t\t\t\tmoment(new Date()).diff(\r\n\t\t\t\t\tmoment(dob, \"DD/MM/YYYY\"),\r\n\t\t\t\t\t\"years\",\r\n\t\t\t\t\ttrue\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getAgeInDays = function (dob) {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tmoment(new Date()).diff(moment(dob, \"DD/MM/YYYY\"), \"days\", true)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getPastYears = function (numYears) {\r\n\t\t\tif (!vm.fieldOptions[\"years_\" + numYears]) {\r\n\t\t\t\tvar years = [];\r\n\t\t\t\tvar prevYear = \"\";\r\n\t\t\t\tfor (var i = 0; i < numYears; i++) {\r\n\t\t\t\t\tprevYear = moment().subtract(i, \"year\").format(\"Y\");\r\n\t\t\t\t\tyears.push({\r\n\t\t\t\t\t\tlabel: prevYear,\r\n\t\t\t\t\t\tvalue: prevYear,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tvm.fieldOptions[\"years_\" + numYears] = years;\r\n\t\t\t}\r\n\t\t\treturn vm.fieldOptions[\"years_\" + numYears];\r\n\t\t};\r\n\r\n\t\tvm.getPastYearsFrom = function (year) {\r\n\t\t\tvar currentYear = parseInt(moment().format(\"Y\"));\r\n\t\t\treturn vm.getPastYears(currentYear - (year - 1));\r\n\t\t};\r\n\r\n\t\tvm.payByPaypal = function () {\r\n\t\t\t$scope.$root.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\tpaymentService.payByPaypal(\r\n\t\t\t\t// on successfully calling the Create Paypal Payment service\r\n\t\t\t\tfunction (redirectUrl) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"redirecting to paypal\",\r\n\t\t\t\t\t\t\"waiting for Paypal callback\"\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$window.location.href = redirectUrl;\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"cannot connect to paypal\",\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.requote = function (form, isRequoteBlocked) {\r\n\t\t\tif (isRequoteBlocked === true) {\r\n\t\t\t\t//to do additional checking for requote, if set to true requote is not done\r\n\t\t\t} else {\r\n\t\t\t\t$scope.$root.$broadcast(\"requote\", form);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.setMainPolicyHolderEmail = function (email) {\r\n\t\t\tuserInputRepository.update({\r\n\t\t\t\temail: email,\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tvm.onPaymentFrequencyChanged = function (paymentFrequency) {\r\n\t\t\t$scope.$root.$broadcast(\"update-payment-options\", paymentFrequency);\r\n\t\t\tquoteOptions.setSelectedPaymentFrequency(paymentFrequency);\r\n\t\t\tvm.updatePaymentSummary(paymentFrequency);\r\n\t\t\tvm.updatePaymentStartDate(paymentFrequency);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * vm.updatePaymentStartDate - Update payment start date\r\n\t\t * @param {string} data selected payment option\r\n\t\t */\r\n\t\tvm.updatePaymentStartDate = function (data) {\r\n\t\t\tif (data === \"monthly\" || data === \"fortnightly\") {\r\n\t\t\t\tvm.fieldValues.paymentStartDate = moment(\r\n\t\t\t\t\tvm.quoteModel.policyStartDate,\r\n\t\t\t\t\t\"DDMMYYYY\"\r\n\t\t\t\t).format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.getRange = function (data) {\r\n\t\t\tif (\r\n\t\t\t\tmoment(vm.quoteModel.policyStartDate, \"DDMMYYYY\").format(\r\n\t\t\t\t\t\"DDMMYYYY\"\r\n\t\t\t\t) === moment().tz(\"Australia/Sydney\").format(\"DDMMYYYY\")\r\n\t\t\t) {\r\n\t\t\t\treturn \"0d:14d\";\r\n\t\t\t}\r\n\t\t\tvar sDate =\r\n\t\t\t\tmoment(vm.quoteModel.policyStartDate, \"DDMMYYYY\").diff(\r\n\t\t\t\t\tmoment(),\r\n\t\t\t\t\t\"days\"\r\n\t\t\t\t) + 1;\r\n\t\t\tvar eDate =\r\n\t\t\t\tparseInt(\r\n\t\t\t\t\tmoment(vm.quoteModel.policyStartDate, \"DDMMYYYY\").diff(\r\n\t\t\t\t\t\tmoment(),\r\n\t\t\t\t\t\t\"days\"\r\n\t\t\t\t\t) + 1\r\n\t\t\t\t) + parseInt(data);\r\n\t\t\treturn sDate + \"d:\" + eDate + \"d\";\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * vm.updatePaymentSummary - Update payment summary\r\n\t\t *\r\n\t\t * @param {string} data selected payment option\r\n\t\t */\r\n\t\tvm.updatePaymentSummary = function (data) {\r\n\t\t\tif (data == \"yearly\") {\r\n\t\t\t\t//yearly frequency should not allow bankaccount\r\n\t\t\t\tif (vm.fieldValues.paymentMethod == \"bankaccount\") {\r\n\t\t\t\t\t//sets credit card as the default option\r\n\t\t\t\t\tvm.fieldValues.paymentMethod = \"creditcard\";\r\n\t\t\t\t\t$scope.$root.$broadcast(\r\n\t\t\t\t\t\t\"payment-method-changed\",\r\n\t\t\t\t\t\t\"creditcard\"\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t//any frequency other than yearly should not allow paypal\r\n\t\t\t\tif (vm.fieldValues.paymentMethod == \"paypal\") {\r\n\t\t\t\t\t//sets credit card as the default option\r\n\t\t\t\t\tvm.fieldValues.paymentMethod = \"creditcard\";\r\n\t\t\t\t\t$scope.$root.$broadcast(\r\n\t\t\t\t\t\t\"payment-method-changed\",\r\n\t\t\t\t\t\t\"creditcard\"\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.paymentMethodChanged = function (paymentMethod) {\r\n\t\t\t$scope.$root.$broadcast(\"payment-method-changed\", paymentMethod);\r\n\t\t\tvoid 0;\r\n\t\t};\r\n\r\n\t\tvm.termsAndConditionsChanged = function (termsAndConditions) {\r\n\t\t\t$scope.$root.$broadcast(\r\n\t\t\t\t\"terms-and-conditions-changed\",\r\n\t\t\t\ttermsAndConditions ? true : false\r\n\t\t\t);\r\n\t\t\tvoid 0;\r\n\t\t};\r\n\r\n\t\tvm.noItemIsChecked = function (list) {\r\n\t\t\tif (Object.keys(list)) {\r\n\t\t\t\tfor (var key in list) {\r\n\t\t\t\t\tif (list[key] == true) return false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\t\tvm.numberOfItemsChecked = function (list) {\r\n\t\t\tvar counter = 0;\r\n\t\t\tangular.forEach(list, function (value) {\r\n\t\t\t\tif (value === true) counter++;\r\n\t\t\t});\r\n\t\t\treturn counter;\r\n\t\t};\r\n\r\n\t\tvm.refreshPolicy = function (paymentType) {\r\n\t\t\tvm.showCreditCard = false;\r\n\t\t\t//option choose credit card\r\n\t\t\tif (paymentType === 'credit-card') {\t\r\n\t\t\t\tvm.showError = false;\t\r\n\t\t\t\tvm.showCreditCard = true;\r\n\t\t\t\t\r\n\t\t\t\tvar hostOrigin = $window.location.origin;\r\n\t\t\t\t\r\n\t\t\t\t//get concig\r\n\t\t\t\tvar paymentConfig = paymentService.getPaybillConfig()\r\n\t\t\t\tif (!paymentConfig) {\r\n\t\t\t\t\terrorDuringTokenization();\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tpaymentService.initialCreditcardPayment(\r\n\t\t\t\t\t\tpaymentConfig.mulesoftFlexiMicroformApiUrl,\r\n\t\t\t\t\t\thostOrigin, \r\n\t\t\t\t\t\tpaymentService.generateUniqueId(),\r\n\t\t\t\t\t\tpaymentConfig.merchantIdentifier,\r\n\t\t\t\t\t\tpaymentConfig.clientId,\r\n\t\t\t\t\t\tpaymentConfig.clientSecret,\r\n\t\t\t\t\t\tinitialCreditcardPaymentSuccessCallback,\r\n\t\t\t\t\t\tinitialCreditcardPaymentFailCallback);\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\t\t\tif (vm.sectionName == \"getStartedCtp\")\r\n\t\t\t\t$scope.$emit(\r\n\t\t\t\t\t\"set-has-personOrCompany\",\r\n\t\t\t\t\tvm.fieldValues.personOrCompany == \"no\"\r\n\t\t\t\t);\r\n\t\t\telse if (vm.sectionName == \"selectInsuranceType\") {\r\n\t\t\t\t/* track payment details to gtm */\r\n\t\t\t\t$scope.$root.$broadcast('trackPaymentDetailsPaymentType', vm.fieldValues.howToPay);\r\n\t\t\t\t/* end track payment details to gtm */\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//console.log('invalidting quick quote responses');\r\n\t\t\t$scope.$emit(\"invalidate-quotes\");\r\n\t\t};\r\n\t\tfunction initialCreditcardPaymentSuccessCallback(jwk) {\r\n\t\t\tvm.showCreditCard = true;\r\n\r\n\t\t\t// cybersourceService\r\n\t\t\tFLEX.microform(\r\n\t\t\t\tpaymentService.getKeyData(\r\n\t\t\t\t\tjwk, \r\n\t\t\t\t\t'#cardNumber-container', \r\n\t\t\t\t\t'#cardNumber-label',\r\n\t\t\t\t\t''),\r\n\t\t\t\tfunction (setupError, microformInstance) {\r\n\t\t\t\t\tif (setupError) {\r\n\t\t\t\t\t\t// handle error\r\n\t\t\t\t\t\terrorDuringTokenization();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$rootScope.$broadcast(\"set-micoform-instance\", microformInstance);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction initialCreditcardPaymentFailCallback(error) {\t\t\t\r\n\t\t\terrorDuringTokenization();\r\n\t\t}\r\n\r\n\t\tfunction errorDuringTokenization(message) {\r\n\t\t\tvm.showCreditCard = false;\r\n\t\t\tvm.showError = true;\r\n\t\t\tvm.showPaypalError = false;\r\n\t\t\terrorCount++;\r\n\r\n\t\t\tvm.formErrorMessage = 'Credit card service is not available at the moment. Please try again later.';\r\n\r\n\t\t\tscrollViewTo($(\"#content\"));\r\n\t\t}\r\n\r\n\t\tvm.getOptionsForBuildingYearBuilt = function (fieldName) {\r\n\t\t\tif (!vm.fieldOptions[fieldName]) {\r\n\t\t\t\tvar options = vm.getGlobalOptionsFor(fieldName);\r\n\t\t\t\tfor (var i = 2000; i <= new Date().getFullYear(); i++) {\r\n\t\t\t\t\toptions.unshift({\r\n\t\t\t\t\t\tlabel: String(i),\r\n\t\t\t\t\t\tvalue: String(i),\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tvm.fieldOptions[fieldName] = options;\r\n\t\t\t\treturn options;\r\n\t\t\t} else return vm.fieldOptions[fieldName];\r\n\t\t};\r\n\r\n\t\t/*\r\n\t\t * TO BE MOVED TO HOME QUOTE MODEL\r\n\t\t *\r\n\t\t * Checks if the provided cover need is available for the options selected on page\r\n\t\t */\r\n\t\tvm.isHomeCoverNeedAvailable = function (coverNeed) {\r\n\t\t\tvar typeOfBuilding = \"\";\r\n\t\t\tvar isPropertyProfessionalAgent = false;\r\n\t\t\tvar howIsHomeOccupied = \"\";\r\n\r\n\t\t\tif (vm.commonValues.typeOfBuilding) {\r\n\t\t\t\ttypeOfBuilding = vm.commonValues.typeOfBuilding;\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.commonValues.propertyProfessionalAgent !== undefined) {\r\n\t\t\t\tisPropertyProfessionalAgent =\r\n\t\t\t\t\tvm.commonValues.propertyProfessionalAgent;\r\n\t\t\t} else if (\r\n\t\t\t\t!!vm.quoteModel.homeForm &&\r\n\t\t\t\t!!vm.quoteModel.homeForm.tellUsAboutTheProperty\r\n\t\t\t\t\t.propertyProfessionalAgent\r\n\t\t\t) {\r\n\t\t\t\tisPropertyProfessionalAgent =\r\n\t\t\t\t\tvm.quoteModel.homeForm.tellUsAboutTheProperty\r\n\t\t\t\t\t\t.propertyProfessionalAgent;\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.commonValues.howIsHomeOccupied) {\r\n\t\t\t\thowIsHomeOccupied = vm.commonValues.howIsHomeOccupied;\r\n\t\t\t}\r\n\r\n\t\t\tif (coverNeed === \"contents\") {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (coverNeed === \"building\") {\r\n\t\t\t\t//dont show building if rent and live\r\n\t\t\t\tif (howIsHomeOccupied === \"rent_live\") {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeOfBuilding === \"unit\" || typeOfBuilding === \"flat\") {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t} else if (coverNeed === \"rent_default\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\tisPropertyProfessionalAgent === true &&\r\n\t\t\t\t\thowIsHomeOccupied === \"own_rent_tenants\"\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else if (coverNeed === \"malicious_damage\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\tisPropertyProfessionalAgent === true &&\r\n\t\t\t\t\thowIsHomeOccupied === \"own_rent_tenants\"\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\t\tvm.yearHomeBuilt = function () {\r\n\t\t\tvar cycloneRating = vm.getObjectValueRaw(\"cycloneRating\", \"value\");\r\n\t\t\tvar cycloneParams = [\r\n\t\t\t\tuserInputRepository.get(\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t\"homeForm.tellUsAboutTheBuilding.yearHomeBuilt\"\r\n\t\t\t\t),\r\n\t\t\t\tparseInt(cycloneRating),\r\n\t\t\t];\r\n\t\t\treturn cycloneParams;\r\n\t\t};\r\n\r\n\t\t// Show/Hide of Payment Failure - Credit Card error message\r\n\t\t$scope.$on(\"cyber-source-error\", function (event, code) {\r\n\t\t\tvalidateCybersourceError(code);\r\n\t\t});\r\n\r\n\t\tfunction validateCybersourceError(data) {\r\n\t\t\tvar cybersourceList =\r\n\t\t\t\t$window.qbe.fieldLabels.cybersourceCodeMessage.cybersourceError;\r\n\t\t\tif (!isUndefinedOrNull(data)) {\r\n\t\t\t\tvm.showError = true;\r\n\t\t\t\tvm.showPaypalError = false;\r\n\t\t\t\terrorCount++;\r\n\r\n\t\t\t\tif (typeof cybersourceList[data] !== \"undefined\") {\r\n\t\t\t\t\tvm.formErrorMessage = cybersourceList[data];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formErrorMessage = cybersourceList[\"default\"];\r\n\t\t\t\t}\r\n\t\t\t\ttrackformErrorByErrorMessage(vm.formErrorMessage);\r\n\r\n\t\t\t\tscrollViewTo($(\"#content\"));\r\n\t\t\t} else {\r\n\t\t\t\tvm.showError = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction splitKeyInValidation(key) {\r\n\t\t\tkey.split(\",\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Scrolls to the field element\r\n\t\t */\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\t//return options to the needs checkbox\r\n\t\tvm.getOptionsForCoverNeeds = function (fieldName) {\r\n\t\t\tvar options = getOptions(fieldName).slice();\r\n\t\t\tvar returnOptions = [];\r\n\t\t\tfor (var item in options) {\r\n\t\t\t\tif (vm.isHomeCoverNeedAvailable(options[item].value)) {\r\n\t\t\t\t\treturnOptions.push(options[item]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.commonValues[\r\n\t\t\t\t\t\t\"coverNeeds_\" + options[item].value\r\n\t\t\t\t\t] = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn returnOptions;\r\n\t\t};\r\n\r\n\t\tvm.showNeedsCoverOutsideHome = function () {\r\n\t\t\tvar show =\r\n\t\t\t\t!!vm.commonValues.coverNeeds_contents &&\r\n\t\t\t\t[\r\n\t\t\t\t\t\"own_live\",\r\n\t\t\t\t\t\"rent_live\",\r\n\t\t\t\t\t\"unoccupied\",\r\n\t\t\t\t\t\"own_holidayhome\",\r\n\t\t\t\t].indexOf(vm.commonValues.howIsHomeOccupied) != -1;\r\n\t\t\t// update the form value\r\n\t\t\tvm.commonValues.needCoverOutsideHome =\r\n\t\t\t\tvm.fieldValues.needCoverOutsideHome;\r\n\r\n\t\t\treturn show;\r\n\t\t};\r\n\r\n\t\t//methods for home\r\n\t\tvm.submitRapidEstimate = function (form, isNavigatingForward) {\r\n\t\t\t$scope.$root.$broadcast(\"home-rapid-estimate\", form);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Set default selected payment option\r\n\t\t */\r\n\t\tvm.paymentOptions = \"yearly\";\r\n\t\tvm.updatePaymentSummary(\"yearly\");\r\n\r\n\t\tvm.moveToPage = function (page) {\r\n\t\t\t$scope.$root.$broadcast(\"moveToPage\", page);\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"confirm-form-data\", function (event, formData) {\r\n\t\t\tif (\r\n\t\t\t\tvm.sectionName == \"nearCompleteCtp\" ||\r\n\t\t\t\tvm.sectionName == \"paybillForm\"\r\n\t\t\t) {\r\n\t\t\t\tvm.fieldValues.firstName =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.firstName;\r\n\t\t\t\tvm.fieldValues.surName =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.surName;\r\n\t\t\t\tvar bDate =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.birthDate;\r\n\t\t\t\tvm.fieldValues.birthDate = bDate; //bDate.substr(0, 2) + \"/\" + bDate.substr(3,2) + \"/\" + bDate.substr(6,4);\r\n\t\t\t\tvm.fieldValues.regEmail =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.regEmail;\r\n\t\t\t\tvm.fieldValues.regMobileNum =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.regMobileNum;\r\n\t\t\t\tvm.fieldValues.regPostCode =\r\n\t\t\t\t\tformData.vehicleFormCtp.registeredOwnerCtp.regPostCode;\r\n\r\n\t\t\t\t//about your card\r\n\t\t\t\tvar regDate =\r\n\t\t\t\t\tformData.vehicleFormCtp.aboutYourCarCtp.registrationDueDate;\r\n\t\t\t\tvm.fieldValues.registrationDueDate = regDate; //regDate.substr(0, 2) + \"/\" + regDate.substr(3,2) + \"/\" + regDate.substr(6,4);\r\n\t\t\t\tvm.fieldValues.driverLicenseNum =\r\n\t\t\t\t\tformData.vehicleFormCtp.aboutYourCarCtp.driverLicenseNum;\r\n\t\t\t\tvm.fieldValues.vehicleRegNum =\r\n\t\t\t\t\tformData.vehicleFormCtp.aboutYourCarCtp.vehicleRegNum;\r\n\t\t\t\tvm.fieldValues.vehicleType =\r\n\t\t\t\t\tformData.vehicleFormCtp.aboutYourCarCtp.vehicleType;\r\n\t\t\t\tvm.fieldValues.insurancePeriod =\r\n\t\t\t\t\tformData.vehicleFormCtp.insurancePeriodCtp.insurancePeriod;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.enterPaymentRef\", function () {\r\n\t\t\tvm.showPaymentSection = false;\r\n\t\t\tvm.isEnterPaymentRefError = false;\r\n\t\t\tvm.isEnterPaymentRefErrorLength = false;\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.birthDay\", function (value) {\r\n\t\t\tvalidateBirthDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.birthMonth\", function (value) {\r\n\t\t\tvalidateBirthDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.birthYear\", function (value) {\r\n\t\t\tvalidateBirthDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.birthDate\", function (value) {\r\n\t\t\tif (vm.sectionName == \"registeredOwnerCtp\" && value.length >= 8) {\r\n\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\tvar isValid = isDate(vm.fieldValues.birthDate);\r\n\t\t\t\tvar parent = angular.element(\r\n\t\t\t\t\tdocument.querySelector(\"[field-key='birthDate']\")\r\n\t\t\t\t);\r\n\t\t\t\tif (!isValid) {\r\n\t\t\t\t\tparent.addClass(\"is-error\");\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tparent.removeClass(\"is-error\");\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t\t\t\tvar birthDate = new Date(\r\n\t\t\t\t\t\tvm.fieldValues.birthYear,\r\n\t\t\t\t\t\tvm.fieldValues.birthMonth - 1,\r\n\t\t\t\t\t\tvm.fieldValues.birthDay\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar age = getYearDiff(birthDate, Date.now());\r\n\t\t\t\t\tif (age >= 16) {\r\n\t\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\t\t\tparent.removeClass(\"is-error\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", false);\r\n\t\t\t\t\t\tparent.addClass(\"is-error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.regDueDay\", function (value) {\r\n\t\t\tvalidateRegistrationDueDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.regDueMonth\", function (value) {\r\n\t\t\tvalidateRegistrationDueDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.regDueYear\", function (value) {\r\n\t\t\tvalidateRegistrationDueDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.regPostCode\", function (value) {\r\n\t\t\tvalidatePostCode();\r\n\t\t});\r\n\r\n\t\t// $scope.$watch('vm.fieldValues.enterPaymentRef', function (value) {\r\n\t\t// \tvm.showError = false;\r\n\t\t// \tif (value) {\r\n\t\t// \t\tvalidatePaymentRefNum();\r\n\t\t// \t\tsearchForRefNum();\r\n\t\t// \t} else {\r\n\t\t// \t\t$scope.$emit('billUpdate');\r\n\t\t// \t\t$scope.$emit('toggle-amount-due');\r\n\t\t// \t}\r\n\t\t// });\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.registrationDueDate\", function (value) {\r\n\t\t\tif (vm.sectionName == \"aboutYourCarCtp\" && value.length >= 8) {\r\n\t\t\t\tvar isValid = isDate(vm.fieldValues.registrationDueDate);\r\n\t\t\t\tvar parent = angular.element(\r\n\t\t\t\t\tdocument.querySelector(\"[field-key='registrationDueDate']\")\r\n\t\t\t\t);\r\n\t\t\t\tif (!isValid) {\r\n\t\t\t\t\tparent.addClass(\"is-error\");\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tparent.removeClass(\"is-error\");\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar regDueDate = new Date(\r\n\t\t\t\t\t\tvm.fieldValues.regDueYear,\r\n\t\t\t\t\t\tvm.fieldValues.regDueMonth - 1,\r\n\t\t\t\t\t\tvm.fieldValues.regDueDay\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar dateToday = new Date(Date.now());\r\n\t\t\t\t\tdateToday.setHours(0);\r\n\t\t\t\t\tdateToday.setMinutes(0);\r\n\t\t\t\t\tdateToday.setSeconds(0);\r\n\t\t\t\t\tdateToday.setMilliseconds(0);\r\n\t\t\t\t\tvar maxRegDate = new Date(Date.now());\r\n\t\t\t\t\tmaxRegDate.setFullYear(dateToday.getFullYear() + 1);\r\n\t\t\t\t\tif (regDueDate >= dateToday && regDueDate <= maxRegDate) {\r\n\t\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\t\"maxdate\",\r\n\t\t\t\t\t\t\ttrue\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t} else\r\n\t\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\t\"maxdate\",\r\n\t\t\t\t\t\t\tfalse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"form-submitted\", function (event, args) {\r\n\t\t\tvalidateBirthDate();\r\n\t\t\tvalidateRegistrationDueDate();\r\n\t\t\tvalidatePostCode();\r\n\t\t\tvalidateExpiryDate();\r\n\t\t});\r\n\r\n\t\tfunction getYearDiff(fromDate, toDate) {\r\n\t\t\t//var birthDate = new Date(vm.fieldValues.birthYear, vm.fieldValues.birthMonth - 1, vm.fieldValues.birthDay);\r\n\t\t\tvar ageDifMs = toDate - fromDate.getTime();\r\n\t\t\tvar ageDate = new Date(ageDifMs); // miliseconds\r\n\t\t\treturn Math.abs(ageDate.getUTCFullYear() - 1970);\r\n\t\t}\r\n\r\n\t\tfunction validateBirthDate() {\r\n\t\t\tif (vm.sectionName != \"registeredOwnerCtp\") return;\r\n\t\t\tvar dateHasPartialValue = false;\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthDay) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthMonth) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthYear)\r\n\t\t\t) {\r\n\t\t\t\tdateHasPartialValue = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthDay) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthYear)\r\n\t\t\t) {\r\n\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\tvm.fieldValues.birthDate = \"\";\r\n\t\t\t\tif (dateHasPartialValue) {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"required\", true);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"required\", false);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar birthDate =\r\n\t\t\t\tvm.fieldValues.birthDay +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.birthMonth +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.birthYear;\r\n\t\t\tvar date = moment(birthDate, \"DDMMYYYY\");\r\n\r\n\t\t\tif (date.isValid()) {\r\n\t\t\t\tif (vm.fieldValues.birthYear.toString().length == 4) {\r\n\t\t\t\t\tvm.fieldValues.birthDate = birthDate;\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction validateRegistrationDueDate() {\r\n\t\t\tif (vm.sectionName != \"aboutYourCarCtp\") return;\r\n\t\t\tvar dateHasPartialValue = false;\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueDay) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueMonth) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueYear)\r\n\t\t\t) {\r\n\t\t\t\tdateHasPartialValue = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueDay) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueYear)\r\n\t\t\t) {\r\n\t\t\t\tvm.fieldValues.registrationDueDate = \"\";\r\n\t\t\t\tif (dateHasPartialValue) {\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"required\",\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t} else\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"required\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar regDueDate =\r\n\t\t\t\tvm.fieldValues.regDueDay +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.regDueMonth +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.regDueYear;\r\n\t\t\tvar date = moment(regDueDate, \"DDMMYYYY\");\r\n\r\n\t\t\tif (date.isValid()) {\r\n\t\t\t\tif (vm.fieldValues.regDueYear.toString().length == 4) {\r\n\t\t\t\t\tvm.fieldValues.registrationDueDate = regDueDate;\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction validatePostCode() {\r\n\t\t\tif (vm.sectionName == \"registeredOwnerCtp\") {\r\n\t\t\t\tvm.formSelector.regPostCode.$setValidity(\"valid\", true);\r\n\t\t\t\tif (!isUndefinedOrNull(vm.fieldValues.regPostCode)) {\r\n\t\t\t\t\tvar postCode = parseInt(vm.fieldValues.regPostCode);\r\n\t\t\t\t\tvar postCodeIsValid =\r\n\t\t\t\t\t\t(postCode >= 4000 && postCode <= 4999) ||\r\n\t\t\t\t\t\tpostCode == 9726;\r\n\t\t\t\t\tif (!postCodeIsValid) {\r\n\t\t\t\t\t\tvm.formSelector.regPostCode.$setValidity(\r\n\t\t\t\t\t\t\t\"valid\",\r\n\t\t\t\t\t\t\tfalse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction isDate(value) {\r\n\t\t\t//format(dd/MM/yyyy)\r\n\t\t\tvar re = /^(?=\\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\\x20|$))|(?:2[0-8]|1\\d|0?[1-9]))([-.\\/])(?:1[012]|0?[1-9])\\1(?:1[6-9]|[2-9]\\d)?\\d\\d(?:(?=\\x20\\d)\\x20|$))?(((0?[1-9]|1[012])(:[0-5]\\d){0,2}(\\x20[AP]M))|([01]\\d|2[0-3])(:[0-5]\\d){1,2})?$/;\r\n\t\t\tvar flag = re.test(value);\r\n\t\t\treturn flag;\r\n\t\t}\r\n\r\n\t\tfunction isUndefinedOrNull(arg) {\r\n\t\t\tif (angular.isUndefined(arg) || arg == null) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvm.confirmSwitch = function () {\r\n\t\t\t$scope.$emit(\"confirm-switch\");\r\n\t\t};\r\n\r\n\t\tvm.backToForm = function () {\r\n\t\t\t$scope.$emit(\"show-form-entry\");\r\n\t\t};\r\n\r\n\t\tfunction getYearDiff(fromDate, toDate) {\r\n\t\t\t//var birthDate = new Date(vm.fieldValues.birthYear, vm.fieldValues.birthMonth - 1, vm.fieldValues.birthDay);\r\n\t\t\tvar ageDifMs = toDate - fromDate.getTime();\r\n\t\t\tvar ageDate = new Date(ageDifMs); // miliseconds\r\n\t\t\treturn Math.abs(ageDate.getUTCFullYear() - 1970);\r\n\t\t}\r\n\r\n\t\tfunction validateBirthDate() {\r\n\t\t\tif (vm.sectionName != \"registeredOwnerCtp\") return;\r\n\t\t\tvar dateHasPartialValue = false;\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthDay) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthMonth) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.birthYear)\r\n\t\t\t) {\r\n\t\t\t\tdateHasPartialValue = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthDay) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.birthYear)\r\n\t\t\t) {\r\n\t\t\t\tvm.formSelector.birthDate.$setValidity(\"age\", true);\r\n\t\t\t\tvm.fieldValues.birthDate = \"\";\r\n\t\t\t\tif (dateHasPartialValue) {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"required\", true);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"required\", false);\r\n\t\t\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar birthDate =\r\n\t\t\t\tvm.fieldValues.birthDay +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.birthMonth +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.birthYear;\r\n\t\t\tif (isDate(birthDate)) vm.fieldValues.birthDate = birthDate;\r\n\r\n\t\t\tvm.formSelector.birthDate.$setValidity(\"date\", true);\r\n\t\t}\r\n\r\n\t\tfunction validateRegistrationDueDate() {\r\n\t\t\tif (vm.sectionName != \"aboutYourCarCtp\") return;\r\n\t\t\tvar dateHasPartialValue = false;\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueDay) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueMonth) ||\r\n\t\t\t\t!isUndefinedOrNull(vm.fieldValues.regDueYear)\r\n\t\t\t) {\r\n\t\t\t\tdateHasPartialValue = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueDay) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.regDueYear)\r\n\t\t\t) {\r\n\t\t\t\tvm.fieldValues.registrationDueDate = \"\";\r\n\t\t\t\tif (dateHasPartialValue) {\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"required\",\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"date\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t} else\r\n\t\t\t\t\tvm.formSelector.registrationDueDate.$setValidity(\r\n\t\t\t\t\t\t\"required\",\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar regDueDate =\r\n\t\t\t\tvm.fieldValues.regDueDay +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.regDueMonth +\r\n\t\t\t\t\"/\" +\r\n\t\t\t\tvm.fieldValues.regDueYear;\r\n\t\t\tif (isDate(regDueDate))\r\n\t\t\t\tvm.fieldValues.registrationDueDate = regDueDate;\r\n\t\t\tvm.formSelector.registrationDueDate.$setValidity(\"date\", true);\r\n\t\t}\r\n\r\n\t\tfunction validatePostCode() {\r\n\t\t\tif (vm.sectionName == \"registeredOwnerCtp\") {\r\n\t\t\t\tvm.formSelector.regPostCode.$setValidity(\"valid\", true);\r\n\t\t\t\tif (!isUndefinedOrNull(vm.fieldValues.regPostCode)) {\r\n\t\t\t\t\tvar postCode = parseInt(vm.fieldValues.regPostCode);\r\n\t\t\t\t\tvar postCodeIsValid =\r\n\t\t\t\t\t\t(postCode >= 4000 && postCode <= 4999) ||\r\n\t\t\t\t\t\tpostCode == 9726;\r\n\t\t\t\t\tif (!postCodeIsValid) {\r\n\t\t\t\t\t\tvm.formSelector.regPostCode.$setValidity(\r\n\t\t\t\t\t\t\t\"valid\",\r\n\t\t\t\t\t\t\tfalse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t\tWhen select a product from drop down\r\n\t\t\tvalidate product and do Gtm tracking\r\n\t\t*/\r\n\t\tfunction selectProduct(value) {\r\n\t\t\tvalidateProducts(value);\r\n\t\t\tgtmService.trackProductSelect(value);\t\t\t\r\n\t\t}\t\t\r\n\r\n\t\t/*\r\n\t\t * Redirect to other payment sites\r\n\t\t * Param - Product value from drop down list\r\n\t\t \r\n\t\tvm.payNonQbe = function () {\t\t\t\r\n\t\t\tvar sessionProt = window.location.protocol;\r\n\t\t\tvar sessionProtHost = window.location.host;\r\n\t\t\tvar sessionProtPath = $window.qbe.fieldLabels && $window.qbe.fieldLabels.nonQbeRedirect ? $window.qbe.fieldLabels.nonQbeRedirect.QBE : '/'; \r\n\t\t\tvar sessionProtURL = sessionProt + \"//\" + sessionProtHost + sessionProtPath;\r\n\t\t\t\r\n\t\t\twindow.location.href = sessionProtURL;\t\t\t\r\n\t\t};\r\n\t\t*/\r\n\r\n\t\t/*\r\n\t\t * Validate Products for Redirect Link\r\n\t\t * Param - Product value from drop down list\r\n\t\t */\r\n\t\tfunction validateProducts(value) {\r\n\t\t\tvar QBEProducts = [\r\n\t\t\t\t\"CAR\",\r\n\t\t\t\t\"BOAT\",\r\n\t\t\t\t\"CARAVAN\",\r\n\t\t\t\t\"CONTENTS\",\r\n\t\t\t\t\"HOME\",\r\n\t\t\t\t\"LANDLORD\",\r\n\t\t\t\t\"MOTORCYCLE\",\r\n\t\t\t];\r\n\t\t\tvar NonQBEProducts = [\r\n\t\t\t\t\"CTP - NSW GREEN SLIP\",\r\n\t\t\t\t\"CTP - QLD\",\r\n\t\t\t\t\"TRAVEL\",\r\n\t\t\t\t\"SMALL BUSINESS\"\r\n\t\t\t];\r\n\t\t\tvar redirectLinks = $window.qbe.fieldLabels.nonQbeRedirect;\r\n\r\n\t\t\tif (!isUndefinedOrNull(value)) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-no-field-errors\");\r\n\t\t\t\tvar productLabel = value.replace(/[^a-z\\d\\s]+/gi, \"\");\r\n\t\t\t\tvm.productCode = value;\r\n\t\t\t\tvm.otherWaysLabel = productLabel;\r\n\t\t\t\tvalue = value.toUpperCase();\r\n\r\n\t\t\t\tif (containsInArray(QBEProducts, value)) {\r\n\t\t\t\t\tvm.productValue = \"QBEProducts\";\r\n\t\t\t\t} else if (containsInArray(NonQBEProducts, value)) {\r\n\t\t\t\t\tvm.productValue = \"NonQBEProducts\";\r\n\t\t\t\t\tswitch (value) {\r\n\t\t\t\t\t\tcase \"CTP - NSW GREEN SLIP\":\r\n\t\t\t\t\t\t\tvm.nonQbeLink = redirectLinks.NSW;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"CTP - QLD\":\r\n\t\t\t\t\t\t\tvm.nonQbeLink = redirectLinks.QLD;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"TRAVEL\":\r\n\t\t\t\t\t\t\tvm.nonQbeLink = redirectLinks.Travel;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"SMALL BUSINESS\":\r\n\t\t\t\t\t\t\tvm.nonQbeLink = redirectLinks.SmallBusiness;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (containsInArray(MotorProducts, value)) {\r\n\t\t\t\t\tvm.productValue = \"MotorProducts\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvm.showPaymentSection = false;\r\n\r\n\t\t\t\t$scope.$emit(\"pay-now-button\", vm.productValue);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction containsInArray(arrayList, value) {\r\n\t\t\treturn arrayList.indexOf(value) > -1;\r\n\t\t}\r\n\r\n\t\t//PAYMENTS FORM END\r\n\r\n\t\tfunction isDate(value) {\r\n\t\t\t//format(dd/MM/yyyy)\r\n\t\t\tvar re = /^(?=\\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\\x20|$))|(?:2[0-8]|1\\d|0?[1-9]))([-.\\/])(?:1[012]|0?[1-9])\\1(?:1[6-9]|[2-9]\\d)?\\d\\d(?:(?=\\x20\\d)\\x20|$))?(((0?[1-9]|1[012])(:[0-5]\\d){0,2}(\\x20[AP]M))|([01]\\d|2[0-3])(:[0-5]\\d){1,2})?$/;\r\n\t\t\tvar flag = re.test(value);\r\n\t\t\treturn flag;\r\n\t\t}\r\n\r\n\t\tfunction isUndefinedOrNull(arg) {\r\n\t\t\tif (angular.isUndefined(arg) || arg == null) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvm.confirmSwitch = function () {\r\n\t\t\t$scope.$emit(\"confirm-switch\");\r\n\t\t};\r\n\r\n\t\tvm.backToForm = function () {\r\n\t\t\t$scope.$emit(\"show-form-entry\");\r\n\t\t};\r\n\r\n\t\tvm.back = function () {\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\t\tfunction validateBuildingSumInsured(event) {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange = false;\r\n\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getBuildingEstimate() {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t).toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMaximum() {\r\n\t\t\treturn vm.quoteModel.maxSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMinimum() {\r\n\t\t\treturn vm.quoteModel.minSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction toggleContentsSumInsuredInLowerRange() {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange =\r\n\t\t\t\tvm.quoteModel.isSumInsuredInLowerRange(\r\n\t\t\t\t\tvm.fieldValues.buildingSumInsured\r\n\t\t\t\t) && vm.fieldValues.isEstimatedRebuildCost == \"no\";\r\n\t\t}\r\n\r\n\t\tfunction toggleYourContentsSumInsuredInLowerRange() {\r\n\t\t\tvm.showYourContentsSumInsuredInLowerRange =\r\n\t\t\t\tvm.quoteModel.isSumInsuredInLowerRange(\r\n\t\t\t\t\tvm.fieldValues.yourBuildingSumInsured\r\n\t\t\t\t) && vm.fieldValues.isYourEstimatedRebuildCost == \"no\";\r\n\t\t}\r\n\r\n\t\tfunction checkBuildingSumInsured() {\r\n\t\t\tif (!isUndefinedOrNull(vm.fieldValues.buildingSumInsured)) {\r\n\t\t\t\tvm.fieldValues.isEstimatedRebuildCost = \"no\";\r\n\t\t\t}\r\n\t\t}\r\n\t\t//dd-3747 - function to assign building sum insured if estimated is selected\r\n\t\tfunction getEstimateRebuild() {\r\n\t\t\tif (vm.fieldValues.isEstimatedRebuildCost == \"yes\") {\r\n\t\t\t\tvm.fieldValues.buildingSumInsured = Math.floor(\r\n\t\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tif (vm.fieldValues.isYourEstimatedRebuildCost == \"yes\") {\r\n\t\t\t\tvm.fieldValues.yourBuildingSumInsured = Math.floor(\r\n\t\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.dutyClicked = function ($event) {\r\n\t\t\tvar $target = $($event.currentTarget);\r\n\t\t\tif ($target.hasClass(\"is-expanded\")) {\r\n\t\t\t\t$target.parent().removeClass(\"expanded\");\r\n\t\t\t} else $target.parent().addClass(\"expanded\");\r\n\t\t};\r\n\r\n\t\t/*\r\n\t\t * Function to limit numbers on text input\r\n\t\t * Param - key event\r\n\t\t */\r\n\r\n\t\t$scope.validNumber = function (event) {\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key === 8) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.validPhoneNum = function (event, element) {\r\n\t\t\tvar futureValue = event.delegateTarget.value;\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\r\n\t\t\tif (key === 43) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key === 8) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction validateBuildingSumInsured(event) {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange = false;\r\n\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.expiryMonth\", function (value) {\r\n\t\t\tvalidateExpiryDate();\r\n\t\t});\r\n\r\n\t\t$scope.$watch(\"vm.fieldValues.expiryYear\", function (value) {\r\n\t\t\tvalidateExpiryDate();\r\n\t\t});\r\n\r\n\t\tfunction validateExpiryDate() {\r\n\t\t\tif (\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.expiryMonth) ||\r\n\t\t\t\tisUndefinedOrNull(vm.fieldValues.expiryYear)\r\n\t\t\t) {\r\n\t\t\t\t// if(!isUndefinedOrNull(vm.formSelector) && !isUndefinedOrNull(vm.formSelector.expiryDate)){\r\n\t\t\t\t// vm.formSelector.expiryDate.$setValidity('required', false);\r\n\t\t\t\t// }\r\n\t\t\t\tvm.fieldValues.expiryDate = \"\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar expiryDate =\r\n\t\t\t\tvm.fieldValues.expiryMonth + \"/\" + vm.fieldValues.expiryYear;\r\n\t\t\tvar date = moment(expiryDate, \"MMYY\");\r\n\t\t\t// vm.formSelector.expiryDate.$setValidity('required', true);\r\n\t\t\tif (date.isValid()) {\r\n\t\t\t\tvm.fieldValues.expiryDate = expiryDate;\r\n\t\t\t\t// vm.formSelector.expiryDate.$setValidity('invalidDate', true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getBuildingEstimate() {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t).toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMaximum() {\r\n\t\t\treturn vm.quoteModel.maxSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMinimum() {\r\n\t\t\treturn vm.quoteModel.minSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction toggleContentsSumInsuredInLowerRange() {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange =\r\n\t\t\t\tvm.quoteModel.isSumInsuredInLowerRange(\r\n\t\t\t\t\tvm.fieldValues.buildingSumInsured\r\n\t\t\t\t) && vm.fieldValues.isEstimatedRebuildCost == \"no\";\r\n\t\t}\r\n\r\n\t\t$scope.validPhoneNum = function (event, element) {\r\n\t\t\tvar futureValue = event.delegateTarget.value;\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\r\n\t\t\tif (key === 43) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key === 8) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction validateBuildingSumInsured(event) {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange = false;\r\n\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getBuildingEstimate() {\r\n\t\t\treturn Math.floor(\r\n\t\t\t\tvm.quoteModel.cordelInfo.spotValue\r\n\t\t\t).toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMaximum() {\r\n\t\t\treturn vm.quoteModel.maxSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction getBuildingMinimum() {\r\n\t\t\treturn vm.quoteModel.minSumInsured.toLocaleString(\"en-US\");\r\n\t\t}\r\n\r\n\t\tfunction toggleContentsSumInsuredInLowerRange() {\r\n\t\t\tvm.showContentsSumInsuredInLowerRange =\r\n\t\t\t\tvm.quoteModel.isSumInsuredInLowerRange(\r\n\t\t\t\t\tvm.fieldValues.buildingSumInsured\r\n\t\t\t\t) && vm.fieldValues.isEstimatedRebuildCost == \"no\";\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").directive(\"qbFormSection\", [\r\n\t\t\"hierarchyDecorator\",\r\n\t\tfunction (hierarchyDecorator) {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: \"EA\",\r\n\t\t\t\tcontroller: FormSection,\r\n\t\t\t\tcontrollerAs: \"vm\",\r\n\t\t\t\ttransclude: true,\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tinit: \"&\",\r\n\t\t\t\t\tregister: \"&?\",\r\n\t\t\t\t\tname: \"@\",\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * @formData : Used on the highest level of form sections to bind values to the controller.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tformData: \"<\",\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * @setHierarchy: Callback used by hierarchy decorator to set the current hierarchy of a form section\r\n\t\t\t\t\t */\r\n\t\t\t\t\tsetHierarchy: \"&\",\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * @fieldValues: Binding to set the field values for a section.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tfieldValues: \"= sessionCount) {\r\n\t\t\t\t\tredirectLink(true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\topenDialog();\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\topenDialog();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t * redirectLink - redirect URL\r\n\t\t * Param - true/false\r\n\t\t * Return - none\r\n\t\t */\r\n\t\tfunction redirectLink(arg) {\r\n\t\t\tvm.sessionProtPath =\r\n\t\t\t\targ == true ? vm.redirectURL : vm.noRedirectURL;\r\n\t\t\t$rootScope.$broadcast(\"session-save-quote\");\r\n\t\t\t// $rootScope.$broadcast(\"clear-field-values\");\r\n\t\t\t// window.location.href = util.linkBuilder(sessionProtPath);\r\n\t\t}\r\n\r\n\t\t$scope.$on(\"session-redirect\", function () {\r\n\t\t\tvoid 0;\r\n\t\t\twindow.location.href = util.linkBuilder(vm.sessionProtPath);\r\n\t\t});\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").directive(\"qbNgDialog\", function () {\r\n\t\treturn {\r\n\t\t\trestrict: \"A\",\r\n\t\t\tcontroller: \"QBNgDialog\",\r\n\t\t\tcontrollerAs: \"vm\",\r\n\t\t\tscope: {},\r\n\t\t\ttransclude: true,\r\n\t\t\tlink: function ($scope, element, attrs) {\r\n\t\t\t\t$scope.timeLeft = null;\r\n\t\t\t\t$scope.contentData = {};\r\n\t\t\t},\r\n\t\t};\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBParentClass', QBParentClass);\r\n\r\n\tQBParentClass.$inject = ['$scope'];\r\n\r\n\tfunction QBParentClass($scope) {\r\n\t\tvar vm = this;\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbParentClass', [\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tcontroller: QBParentClass,\r\n\t\t\t\tcontrollerAs: 'vm',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tqbParentClass: '<',\r\n\t\t\t\t\tqbParentElement: '@?'\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs, ctrl) {\r\n\r\n\t\t\t\t\tscope.$watch(function () {\r\n\t\t\t\t\t\tvar classes = $(element).find('input').attr('class');\r\n\t\t\t\t\t\treturn classes;\r\n\t\t\t\t\t}, function (newValue, oldValue) {\r\n\t\t\t\t\t\tif (!newValue) return;\r\n\t\t\t\t\t\tif (newValue.indexOf('ng-invalid') >= 0)\r\n\t\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tvoid 0\r\n\r\n\r\n\t\t\t\t\t});\r\n\r\n\r\n\t\t\t\t\t// for (var cssClass in scope.qbParentClass ) {\r\n\t\t\t\t\t// \tvar condition = scope.qbParentClass[cssClass] ;\r\n\t\t\t\t\t// \tvar parent = scope.qbParentElement ? element.parents(scope.qbParentElement) : element.parent() ;\r\n\t\t\t\t\t// \tif (condition)\r\n\t\t\t\t\t// \t\tparent.addClass(cssClass);\r\n\t\t\t\t\t// \telse\r\n\t\t\t\t\t// \t\tparent.removeClass(cssClass) ;\r\n\t\t\t\t\t// }\r\n\r\n\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}]);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\t// angular.module('qbePortal').controller('ctpProgress', ctpProgress);\r\n\r\n\t// ctpProgress.$inject = ['$scope'];\r\n\r\n\t// function ctpProgress($scope) {\r\n\t// \tvar vm = this;\r\n\t// \tvm.ctpCompleted = false;\r\n\t// }\r\n\r\n\r\n\tangular.module('qbePortal').directive('qbPaybillProgress', \r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbPaybillProgress.html',\r\n\t\t\t\t// controller: ctpProgress,\r\n\t\t\t\t// controllerAs: 'vm',\t\t\t\t\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t scope: {\r\n\t\t\t \t\ttextDisplay:'=',\r\n\t\t\t \t\tctpStepTotal:'=',\r\n\t\t\t \t\tctpStepNum:'=',\r\n\t\t\t \t\tctpCompleted:'='\t\t\t \r\n\t\t\t },\r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t\t.module('qbePortal')\r\n\t\t.controller('QBPaymentSummary', QBPaymentSummary);\r\n\tQBPaymentSummary.$inject = [\r\n\t\t'$scope',\r\n\t\t'quoteModelFactory',\r\n\t\t'$filter',\r\n\t\t'$state',\r\n\t\t'MODULE_INFO',\r\n\t\t'labelService',\r\n\t\t'userInputRepository',\r\n\t\t'$window',\r\n\t];\r\n\r\n\tfunction QBPaymentSummary(\r\n\t\t$scope,\r\n\t\tquoteModelFactory,\r\n\t\t$filter,\r\n\t\t$state,\r\n\t\tMODULE_INFO,\r\n\t\tlabelService,\r\n\t\tuserInputRepository,\r\n\t\t$window\r\n\t) {\r\n\t\tvar vm = this,\r\n\t\t\tquoteHasCoverType = false;\r\n\r\n\t\tvm.state = $state;\r\n\t\tvm.saveSuccess = null;\r\n\t\tvar quoteModel = quoteModelFactory.create();\r\n\r\n\t\tvm.saveQuote = function() {\r\n\t\t\tif (validateMail()) {\r\n\t\t\t\t$scope.$root.$broadcast(\r\n\t\t\t\t\t'sidebar-save-quote',\r\n\t\t\t\t\tvm.yourEmailAddress\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tvm.saveSuccess = false;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.assignEmail = function() {\r\n\t\t\t$scope.$root.$broadcast('sidebar-assign-mail', vm.yourEmailAddress);\r\n\t\t};\r\n\r\n\t\tfunction validateMail() {\r\n\t\t\tif (\r\n\t\t\t\tvm.yourEmailAddress == '' ||\r\n\t\t\t\tvm.yourEmailAddress == null ||\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element('div')\r\n\t\t\t\t\t.find('[label-key=yourEmailAddress]')\r\n\t\t\t\t\t.hasClass('ng-invalid-email')\r\n\t\t\t) {\r\n\t\t\t\treturn false;\r\n\t\t\t} else {\r\n\t\t\t\tuserInputRepository.update({\r\n\t\t\t\t\temail: vm.yourEmailAddress\r\n\t\t\t\t});\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Add print specific class to pages with payment summary\r\n\t\tif (\r\n\t\t\twindow.location.href.indexOf('quote') > -1 ||\r\n\t\t\twindow.location.href.indexOf('contact') > -1 ||\r\n\t\t\twindow.location.href.indexOf('payment') > -1\r\n\t\t) {\r\n\t\t\tvar $columns = $('.columns').get(0);\r\n\t\t\t$columns.classList.add('print-ready');\r\n\t\t}\r\n\r\n\t\t$scope.$on('save-quote-success', function() {\r\n\t\t\tvm.saveSuccess = true;\r\n\t\t});\r\n\r\n\t\t$scope.$on('quote-received', onNewQuoteReceived);\r\n\r\n\t\t$scope.$on('selected-quote-changed', function() {\r\n\t\t\tsetSelectedQuoteModel();\r\n\t\t});\r\n\r\n\t\t$scope.$root.$on('update-payment-options', updatePaymentOptions);\r\n\r\n\t\t$scope.$root.$on('$stateChangeSuccess', function() {\r\n\t\t\t$scope.mobileUnmatch();\r\n\t\t});\r\n\r\n\t\t$scope.mobileUnmatch = function() {\r\n\t\t\tvar $colMain = document.querySelector('.col--main');\r\n\t\t\t// var colMainPosTop = $colMain.getClientRects()[0].top;\r\n\t\t\tvar $content = document.getElementById('content');\r\n\t\t\tvar $floatingModule = document.querySelector('.floating-module');\r\n\r\n\t\t\t$colMain.style.removeProperty('margin-top');\r\n\r\n\t\t\t// Reset element position\r\n\t\t\t// colMainPosTop = $colMain.getClientRects()[0].top;\r\n\r\n\t\t\t// Remove sticky classes\r\n\t\t\t$content.classList.remove('sticky');\r\n\t\t\tif (!!$floatingModule) {\r\n\t\t\t\t$floatingModule.classList.remove('sticky-mobile');\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.paymentPanelButtonText = getPaymentButtonText();\r\n\t\tvm.displayPaymentButton = vm.paymentPanelButtonText != null;\r\n\r\n\t\tfunction getPaymentButtonText() {\r\n\t\t\tif (\r\n\t\t\t\tMODULE_INFO.paymentPanelButtonText &&\r\n\t\t\t\tMODULE_INFO.paymentPanelButtonText[$state.current.name]\r\n\t\t\t)\r\n\t\t\t\treturn MODULE_INFO.paymentPanelButtonText[$state.current.name];\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfunction onNewQuoteReceived(event, resp) {\r\n\t\t\tsetSelectedQuoteModel();\r\n\t\t}\r\n\r\n\t\tfunction setSelectedQuoteModel(frequency) {\r\n\t\t\tquoteModel = quoteModelFactory.create();\r\n\r\n\t\t\tif (quoteModel.email != '') {\r\n\t\t\t\tvm.yourEmailAddress = quoteModel.email;\r\n\t\t\t}\r\n\r\n\t\t\tif (quoteModel.selectedQuote) {\r\n\t\t\t\tquoteHasCoverType = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (!frequency) frequency = 'annual';\r\n\r\n\t\t\tif (quoteHasCoverType) {\r\n\t\t\t\tvm.quoteModel = quoteModel.selectedQuote;\r\n\t\t\t\trefreshPrices(frequency);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.paymentOptions = 'yearly';\r\n\r\n\t\tfunction updatePaymentOptions(event, paymentOptions) {\r\n\t\t\tvar frequency;\r\n\t\t\t// Set payment option\r\n\t\t\tvm.paymentOptions = paymentOptions;\r\n\r\n\t\t\tif (quoteHasCoverType) {\r\n\t\t\t\t// Set frequency label\r\n\t\t\t\tif (paymentOptions === 'yearly') {\r\n\t\t\t\t\tfrequency = 'annual';\r\n\t\t\t\t\tvm.frequencyLabel = 'per_annum';\r\n\t\t\t\t} else if (paymentOptions === 'monthly') {\r\n\t\t\t\t\tfrequency = 'monthly';\r\n\t\t\t\t\tvm.frequencyLabel = 'per_month';\r\n\t\t\t\t} else if (paymentOptions === 'fortnightly') {\r\n\t\t\t\t\tfrequency = 'fortnightly';\r\n\t\t\t\t\tvm.frequencyLabel = 'per_fortnight';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetSelectedQuoteModel(frequency);\r\n\t\t\t\t// refreshPrices(frequency) ;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction refreshPrices(frequency) {\r\n\t\t\t// Set cover type\r\n\t\t\tvm.frequencyLabel = 'per_annum';\r\n\r\n\t\t\tvm.coverType = vm.quoteModel.getQuoteResult(frequency).coverType;\r\n\r\n\t\t\t//additional condition for home\r\n\t\t\tif (\r\n\t\t\t\tvm.coverType === 'building_and_contents' ||\r\n\t\t\t\tvm.coverType === 'building_only' ||\r\n\t\t\t\tvm.coverType === 'contents_only'\r\n\t\t\t) {\r\n\t\t\t\tvm.coverType = vm.quoteModel.getQuoteResult(frequency).offering;\r\n\t\t\t}\r\n\r\n\t\t\t// Set quote results\r\n\t\t\tvm.quoteResults = vm.quoteModel.getQuoteResult(frequency).response;\r\n\r\n\t\t\t// Set discounts\r\n\t\t\tvm.discounts = vm.quoteResults.quoteResult.discounts;\r\n\r\n\t\t\t// Filter discounts per mapping and amount is greater than zero\r\n\t\t\tif (vm.discounts) {\r\n\t\t\t\tvm.savings = [];\r\n\t\t\t\tangular.forEach(vm.discounts, function(index) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!vm.mapServiceValue(\r\n\t\t\t\t\t\t\t'paymentSummaryDiscounts',\r\n\t\t\t\t\t\t\tindex.discountType\r\n\t\t\t\t\t\t) &&\r\n\t\t\t\t\t\tindex.amount !== 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tvm.savings.push({\r\n\t\t\t\t\t\t\tdiscountType: index.discountType,\r\n\t\t\t\t\t\t\tamount: index.amount\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Apply gift card\r\n\t\t\tif (\r\n\t\t\t\tvm.quoteResults.isGiftCardApplied &&\r\n\t\t\t\tvm.quoteResults.isGiftCardApplied === true\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tvm.mapServiceValue(\r\n\t\t\t\t\t\t'paymentSummaryGiftCards',\r\n\t\t\t\t\t\tvm.quoteResults.campaignCode\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tvm.savings.push({\r\n\t\t\t\t\t\tdiscountType: vm.mapServiceValue(\r\n\t\t\t\t\t\t\t'paymentSummaryGiftCards',\r\n\t\t\t\t\t\t\tvm.quoteResults.campaignCode\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set payment plan\r\n\t\t\tvm.paymentPlan = vm.quoteResults.paymentPlan;\r\n\r\n\t\t\t// If there are any payment installments\r\n\t\t\tif (vm.paymentPlan.installment) {\r\n\t\t\t\tvm.paymentInstallment = $filter('styledCurrency')(\r\n\t\t\t\t\tvm.paymentPlan.installment\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\t//set monthly values\r\n\t\t\tvm.quoteMonthly = vm.quoteModel.getMonthly();\r\n\t\t\tvm.monthlyQuoteAmount = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteMonthly.paymentPlan.installment\r\n\t\t\t);\r\n\r\n\t\t\t//downpayment\r\n\t\t\tvm.monthlyDownPayment = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteMonthly.paymentPlan.downPayment\r\n\t\t\t);\r\n\r\n\t\t\t//set fortnightly values\r\n\t\t\tvm.quoteFortnightly = vm.quoteModel.getFortnightly();\r\n\t\t\tvm.fortnightlyQuoteAmount = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteFortnightly.paymentPlan.installment\r\n\t\t\t);\r\n\r\n\t\t\t//down payment\r\n\t\t\tvm.fortnightlyDownPayment = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteFortnightly.paymentPlan.downPayment\r\n\t\t\t);\r\n\r\n\t\t\t// Set quote after discounts\r\n\t\t\tvm.quote = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteResults.quoteResult.totalPremium\r\n\t\t\t);\r\n\r\n\t\t\t// Set total monthly premium\r\n\t\t\tvm.premAfterDisc = $filter('styledCurrency')(\r\n\t\t\t\tvm.quoteMonthly.totalPremium\r\n\t\t\t);\r\n\r\n\t\t\t// Set reference documents\r\n\t\t\tvm.referenceDocuments = $filter('showFslOnlyNsw')(\r\n\t\t\t\tvm.quoteResults.referenceDocuments,\r\n\t\t\t\tvm.quoteResults.policyAddress.state\r\n\t\t\t);\r\n\r\n\t\t\tif (\r\n\t\t\t\tvm.referenceDocuments &&\r\n\t\t\t\t(vm.quoteResults.productCode === 'QPHHome' ||\r\n\t\t\t\t\tvm.quoteResults.productCode === 'QPHLandlord')\r\n\t\t\t) {\r\n\t\t\t\tangular.forEach(vm.referenceDocuments, function(\r\n\t\t\t\t\tdocuments,\r\n\t\t\t\t\tindex\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (documents.type === 'pds') {\r\n\t\t\t\t\t\tswitch (vm.coverType) {\r\n\t\t\t\t\t\t\tcase 'QPHStandardOffering':\r\n\t\t\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t\t\t'standardPDSLabel'\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase 'QPHPrestigeOffering':\r\n\t\t\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t\t\t'prestigePDSLabel'\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase 'QPHLandlordOffering':\r\n\t\t\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t\t\t'landlordPDSLabel'\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase 'QPHStrataContentsOffering':\r\n\t\t\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t\t\t'strataPDSLabel'\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tangular.forEach(vm.referenceDocuments, function(\r\n\t\t\t\t\tdocuments,\r\n\t\t\t\t\tindex\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (documents.type === 'pds') {\r\n\t\t\t\t\t\tvm.referenceDocuments[\r\n\t\t\t\t\t\t\tindex\r\n\t\t\t\t\t\t].name = labelService.getGlobalOptionLabel(\r\n\t\t\t\t\t\t\t'PDS',\r\n\t\t\t\t\t\t\t'sideBarlinkLabel'\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.purchaseNow = function() {\r\n\t\t\t$scope.$root.$broadcast('form-submit', MODULE_INFO.mainFormName);\r\n\t\t};\r\n\r\n\t\tvm.printPage = function() {\r\n\t\t\twindow.print();\r\n\t\t};\r\n\r\n\t\tvm.getPage = function() {\r\n\t\t\treturn vm.state.current.name.split('.')[1];\r\n\t\t};\r\n\r\n\t\tvm.isPaymentOptionVisible = function(paymentOption) {\r\n\t\t\tif (vm.getPage() === 'payment') {\r\n\t\t\t\t//on payment page display baed on the user selection\r\n\t\t\t\tif (vm.paymentOptions === paymentOption) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t//if not on payment page display yearly and monthly\r\n\t\t\t\tif (paymentOption === 'yearly' || paymentOption === 'monthly') {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\t\tvm.lookupLabel = function(fieldName) {\r\n\t\t\treturn labelService.getGlobalOptionLabel(\r\n\t\t\t\t'paymentSummary',\r\n\t\t\t\tfieldName\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getDocument = function(gwDocument) {\r\n\t\t\tif (!gwDocument.url || !gwDocument.name) {\r\n\t\t\t\treturn gwDocument;\r\n\t\t\t}\r\n\t\t\tif ($window.location.pathname.indexOf('/bike') !== -1) {\r\n\t\t\t\tif (gwDocument.name.indexOf('Insurance PDS') !== -1) {\r\n\t\t\t\t\tvar bikePdsLink = vm.getGlobalOption('PDS', 'bikePdsLink');\r\n\t\t\t\t\tif (bikePdsLink) {\r\n\t\t\t\t\t\tgwDocument.url = bikePdsLink.label;\r\n\t\t\t\t\t\treturn gwDocument;\r\n\t\t\t\t\t}\t\t\t\t\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\t\t\telse if ($window.location.pathname.indexOf('/caravan') !== -1) {\r\n\t\t\t\tif (gwDocument.name.indexOf('Insurance PDS') !== -1) {\r\n\t\t\t\t\tvar caravanPdsLink = vm.getGlobalOption('PDS', 'caravanPdsLink');\r\n\t\t\t\t\tif (caravanPdsLink)\t{\r\n\t\t\t\t\t\tgwDocument.url = caravanPdsLink.label;\r\n\t\t\t\t\t\treturn gwDocument;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn gwDocument;\r\n\t\t}\r\n\r\n\t\tvm.mapServiceValue = function(serviceName, option) {\r\n\t\t\toption = option.trim();\r\n\t\t\t/** some service values come back untrimmed :) */\r\n\t\t\treturn labelService.getGlobalOptionLabel(serviceName, option);\r\n\t\t};\r\n\t\tvm.getGlobalOption = function(key, option) {\r\n\t\t\toption = option.trim();\r\n\t\t\treturn labelService.getGlobalOption(key, option);\r\n\t\t};\r\n\r\n\t\tsetSelectedQuoteModel();\r\n\t}\r\n\r\n\tangular\r\n\t\t.module('qbePortal')\r\n\t\t.directive('qbPaymentSummary', [\"$window\", \"$timeout\", function($window, $timeout) {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\ttemplateUrl: '../ngviews/sections/common/payment-summary.html',\r\n\t\t\t\tcontroller: QBPaymentSummary,\r\n\t\t\t\tcontrollerAs: 'vm',\r\n\t\t\t\tlink: function(scope, element) {\r\n\t\t\t\t\t// $timeout(function () {\r\n\r\n\t\t\t\t\t// Get qbPaymentSummary position and width\r\n\t\t\t\t\tvar qbPaymentSummaryPosTop = element[0].getClientRects()[0]\r\n\t\t\t\t\t\t.top;\r\n\t\t\t\t\tvar qbPaymentSummaryPosLeft = element[0].getClientRects()[0]\r\n\t\t\t\t\t\t.left;\r\n\t\t\t\t\tvar qbPaymentSummaryWidth = element[0]\r\n\t\t\t\t\t\t.querySelector('div')\r\n\t\t\t\t\t\t.getClientRects()[0].width;\r\n\r\n\t\t\t\t\t// Floating module\r\n\t\t\t\t\tvar $floatingModule = element[0].querySelector(\r\n\t\t\t\t\t\t'.floating-module'\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar $floatingModuleContainer = element[0].querySelector(\r\n\t\t\t\t\t\t'.floating-module-container'\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tvar $floatingModulePosTop = $floatingModule.getClientRects()[0]\r\n\t\t\t\t\t\t.top;\r\n\t\t\t\t\t// var breakPoint = $floatingModuleContainer.getClientRects()[0].bottom;\r\n\r\n\t\t\t\t\t// Cover details\r\n\t\t\t\t\tvar $coverDetails = element[0].querySelector(\r\n\t\t\t\t\t\t'.expandcollapse'\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar coverDetailsPosTop = $coverDetails.getClientRects()[0]\r\n\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t// Content element\r\n\t\t\t\t\tvar $content = document.getElementById('content');\r\n\r\n\t\t\t\t\tvar $colMain = document.querySelector('.col--main');\r\n\t\t\t\t\tvar colMainHeight = $colMain.offsetHeight;\r\n\t\t\t\t\tvar colMainPosTop = $colMain.getClientRects()[0].top;\r\n\r\n\t\t\t\t\t// Footer element\r\n\t\t\t\t\tvar $footer = $('.footer').get(0);\r\n\t\t\t\t\tvar footerHeight = $footer.offsetHeight;\r\n\r\n\t\t\t\t\t// For mobile\r\n\t\t\t\t\tenquire.register(DD.bp.get('0, s'), {\r\n\t\t\t\t\t\tmatch: function() {\r\n\t\t\t\t\t\t\t$content.classList.add('sticky');\r\n\t\t\t\t\t\t\tcolMainPosTop = $colMain.getClientRects()[0].top;\r\n\r\n\t\t\t\t\t\t\tangular.element($window).off('scroll');\r\n\r\n\t\t\t\t\t\t\t// Set Initial Window position\r\n\t\t\t\t\t\t\tvar windowPosition = $(window).scrollTop();\r\n\t\t\t\t\t\t\tangular.element($window).on('scroll', function() {\r\n\t\t\t\t\t\t\t\t// Set Floating module height and top position\r\n\t\t\t\t\t\t\t\tvar $floatingModuleHeight =\r\n\t\t\t\t\t\t\t\t\t$floatingModule.clientHeight;\r\n\t\t\t\t\t\t\t\tvar colMainPos = $colMain.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t\t\t\t// When scroll position is below quote panel\r\n\t\t\t\t\t\t\t\tif (colMainPos <= 0) {\r\n\t\t\t\t\t\t\t\t\t// Check scroll position\r\n\t\t\t\t\t\t\t\t\tvar windowScroll = $(window).scrollTop();\r\n\t\t\t\t\t\t\t\t\tvar floatingModuleHeight =\r\n\t\t\t\t\t\t\t\t\t\t'-' + $floatingModuleHeight + 'px';\r\n\r\n\t\t\t\t\t\t\t\t\t// Scrolling Down\r\n\t\t\t\t\t\t\t\t\tif (windowScroll > windowPosition) {\r\n\t\t\t\t\t\t\t\t\t\t$floatingModule.style.top = floatingModuleHeight;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t// Scrolling Up\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t$floatingModule.style.top = '0px';\r\n\t\t\t\t\t\t\t\t\t\t$floatingModule.classList.add(\r\n\t\t\t\t\t\t\t\t\t\t\t'sticky-mobile'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\twindowPosition = windowScroll;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// Other scroll positions\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t$floatingModule.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t'sticky-mobile'\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t$floatingModule.style.top = '0px';\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t$timeout(function() {\r\n\t\t\t\t\t\t\t\t$colMain.style.marginTop =\r\n\t\t\t\t\t\t\t\t\t$floatingModule.offsetHeight - 10 + 'px';\r\n\t\t\t\t\t\t\t}, 1000);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tunmatch: scope.mobileUnmatch\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// For table and above\r\n\t\t\t\t\tenquire.register(DD.bp.get('m'), {\r\n\t\t\t\t\t\tmatch: function() {\r\n\t\t\t\t\t\t\tangular.element('.floating-module').css('top', '');\r\n\r\n\t\t\t\t\t\t\t// Update position and width on resize\r\n\t\t\t\t\t\t\tangular.element($window).on('resize', function() {\r\n\t\t\t\t\t\t\t\tif ($floatingModule.length > 0) {\r\n\t\t\t\t\t\t\t\t\t// Set element position and width\r\n\t\t\t\t\t\t\t\t\tqbPaymentSummaryPosLeft = element[0].getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t\t.left;\r\n\t\t\t\t\t\t\t\t\tqbPaymentSummaryWidth = element[0]\r\n\t\t\t\t\t\t\t\t\t\t.querySelector('div')\r\n\t\t\t\t\t\t\t\t\t\t.getClientRects()[0].width;\r\n\r\n\t\t\t\t\t\t\t\t\tcolMainHeight = $colMain.offsetHeight;\r\n\t\t\t\t\t\t\t\t\tcolMainPosTop = $colMain.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t\t\t\t\tcoverDetailsPosTop = $coverDetails.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t\t.top;\r\n\t\t\t\t\t\t\t\t\t// breakPoint = $floatingModuleContainer.getClientRects()[0].bottom;\r\n\r\n\t\t\t\t\t\t\t\t\tfooterHeight = $footer.offsetHeight;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tangular.element($window).off('scroll');\r\n\t\t\t\t\t\t\tangular.element($window).on('scroll', function() {\r\n\t\t\t\t\t\t\t\tvar $sidebarContainer = $('.floating-module');\r\n\t\t\t\t\t\t\t\tif ($sidebarContainer.length > 0) {\r\n\t\t\t\t\t\t\t\t\t// Floating save quote\r\n\t\t\t\t\t\t\t\t\tvar $floatingSave =\r\n\t\t\t\t\t\t\t\t\t\t$('.floating-save-quote').length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t? $('.floating-save-quote')[0]\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.offsetHeight * 4\r\n\t\t\t\t\t\t\t\t\t\t\t: 0;\r\n\r\n\t\t\t\t\t\t\t\t\t// When scroll position is below quote panel\r\n\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t$window.pageYOffset >=\r\n\t\t\t\t\t\t\t\t\t\t\tcoverDetailsPosTop &&\r\n\t\t\t\t\t\t\t\t\t\t$window.pageYOffset + footerHeight <\r\n\t\t\t\t\t\t\t\t\t\t\t$colMain.offsetHeight +\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolMainPosTop -\r\n\t\t\t\t\t\t\t\t\t\t\t\t$floatingSave\r\n\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t// $floatingModule.style.width = qbPaymentSummaryWidth + 'px';\r\n\t\t\t\t\t\t\t\t\t\t// $floatingModule.style.left = qbPaymentSummaryPosLeft + 'px';\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-fixed'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.add(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-follow'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\t\t// When scroll position is near the bottom of the page\r\n\t\t\t\t\t\t\t\t\t} else if (\r\n\t\t\t\t\t\t\t\t\t\t$window.pageYOffset + footerHeight >=\r\n\t\t\t\t\t\t\t\t\t\t$colMain.offsetHeight +\r\n\t\t\t\t\t\t\t\t\t\t\tcolMainPosTop -\r\n\t\t\t\t\t\t\t\t\t\t\t$floatingSave\r\n\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t// $floatingModule.style.left = '';\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-follow'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.add('sidebar-fixed');\r\n\r\n\t\t\t\t\t\t\t\t\t\t// Other scroll positions\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t$floatingModule.removeAttribute(\r\n\t\t\t\t\t\t\t\t\t\t\t'style'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-follow'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t$content.classList.remove(\r\n\t\t\t\t\t\t\t\t\t\t\t'sidebar-fixed'\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tunmatch: function() {\r\n\t\t\t\t\t\t\tif ($floatingModule.length > 0) {\r\n\t\t\t\t\t\t\t\t// Reset element position and width\r\n\t\t\t\t\t\t\t\tqbPaymentSummaryPosLeft = element[0].getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t.left;\r\n\t\t\t\t\t\t\t\tqbPaymentSummaryWidth = element[0]\r\n\t\t\t\t\t\t\t\t\t.querySelector('div')\r\n\t\t\t\t\t\t\t\t\t.getClientRects()[0].width;\r\n\r\n\t\t\t\t\t\t\t\tcolMainHeight = $colMain.offsetHeight;\r\n\t\t\t\t\t\t\t\tcolMainPosTop = $colMain.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t\t\t\tcoverDetailsPosTop = $coverDetails.getClientRects()[0]\r\n\t\t\t\t\t\t\t\t\t.top;\r\n\r\n\t\t\t\t\t\t\t\tfooterHeight = $footer.offsetHeight;\r\n\r\n\t\t\t\t\t\t\t\t// Remove sticky classes\r\n\t\t\t\t\t\t\t\t$floatingModule.removeAttribute('style');\r\n\t\t\t\t\t\t\t\t$content.classList.remove('sidebar-follow');\r\n\t\t\t\t\t\t\t\t$content.classList.remove('sidebar-fixed');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}]);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbPhoneNumberValidation', function () {\r\n\t\t\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: '',\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\t\r\n\t\t\t\tctrl.$validators.pattern = function(modelValue, viewValue) {\r\n\r\n\t\t\t\t\t//Polyfill code for the \"startswith\" to be use in IE *Can be move in a startup where the JS executes\r\n\t\t\t\t\tif (!String.prototype.startsWith) {\r\n\t\t\t\t\t\tString.prototype.startsWith = function(searchString, position) {\r\n\t\t\t\t\t\t\tposition = position || 0;\r\n\t\t\t\t\t\t\treturn this.indexOf(searchString, position) === position;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\t\t\r\n\r\n\t\t\t\t\tif (ctrl.$isEmpty(modelValue)) {\r\n\t\t\t\t\t\t// consider empty models to be valid\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tvar validPhone = false;\r\n\r\n\t\t\t\t\t\tif(viewValue.length >= 8){\r\n\t\t\t\t\t\t\tvalidPhone = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Starts with 13 and is 6 digits long\r\n\t\t\t\t\t\t// Starts with 1300 and is 10 digits long\r\n\t\t\t\t\t\tif(viewValue.startsWith(\"13\")){\r\n\t\t\t\t\t\t\tif(viewValue.startsWith(\"1300\")){\r\n\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 10 || viewValue.length === 6;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 6;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Starts with (0_) followed by 8 digits (where _ is 1-9), and is a minimum of 10 digits long\r\n\t\t\t\t\t\t// This should account for international numbers as well as local Australian numbers \"0011\"\r\n\t\t\t\t\t\tif(viewValue.startsWith(\"0\")){\r\n\t\t\t\t\t\t\tif(viewValue.startsWith(\"0011\")){\r\n\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 10;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tif(viewValue[1] >= 1 && viewValue[1] <= 9){\r\n\t\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 10;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Starts with +61 followed by 9 digits\r\n\t\t\t\t\t\tif(viewValue.startsWith(\"+\")){\r\n\t\t\t\t\t\t\tvalidPhone = false;\r\n\t\t\t\t\t\t\tif(viewValue.startsWith(\"+61\")){\r\n\t\t\t\t\t\t\t\tvalidPhone = viewValue.length === 12;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(viewValue.indexOf('+') > 0 || (viewValue.match(/\\+/g)||[]).length > 1){\r\n\t\t\t\t\t\t\tvalidPhone = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn validPhone;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbPromoBox',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbPromoBox.html',\t\t\t\t\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t transclude: true,\t\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tisConfirmed: '=',\r\n\t\t\t\t\tcoreData: '=',\r\n\t\t\t\t\tshowThankYou: '=',\r\n\t\t\t\t\tpromoData: '='\r\n\t\t\t\t},\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\tscope.clearUserForm = function() {\r\n\t\t\t\t\t\tscope.$emit('clear-User-Input');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbPromoCode', ['guideWireService', 'labelService', '$rootScope', '$q', function (guideWireService, labelService, $rootScope, $q) {\r\n\r\n\t\tfunction addValidPromoMessage(wrapper, promoValue) {\r\n\t\t\tif (wrapper) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t$rootScope.$broadcast('valid-campaign', {\r\n\t\t\t\t\t\tisValid: true,\r\n\t\t\t\t\t\tpromoValue: promoValue\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif ($(wrapper).find('em.valid-promo').length == 0) {\r\n\t\t\t\t\t\tvar promoMessage = labelService.getGlobalOptionLabel('content', 'promo_acknowledged_message');\r\n\t\t\t\t\t\t$(wrapper).append('' + promoMessage + '');\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (ex) {\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction removeValidPromoMessage(wrapper) {\r\n\t\t\tif (wrapper) {\r\n\t\t\t\t$(wrapper).find('em.valid-promo').remove();\r\n\t\t\t\t$rootScope.$broadcast('valid-campaign', {\r\n\t\t\t\t\tisValid: false\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction validateInput(element, ngModel) {\r\n\t\t\tif (!ngModel || typeof (element.val()) != 'string') return;\r\n\t\t\tvar currentValue = element.val();\r\n\t\t\tvar promoWrapper = element.parent('.promo-wrapper');\r\n\t\t\tif (currentValue && currentValue != '') {\r\n\t\t\t\treturn guideWireService.isCampaignCodeValid(currentValue)\r\n\t\t\t\t\t.then(function (unique) {\r\n\t\t\t\t\t\taddValidPromoMessage(promoWrapper, currentValue);\r\n\t\t\t\t\t\treturn $q.resolve();\r\n\t\t\t\t\t}).catch(function () {\r\n\t\t\t\t\t\tremoveValidPromoMessage(promoWrapper);\r\n\t\t\t\t\t\treturn $q.reject();\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tremoveValidPromoMessage(promoWrapper);\r\n\t\t\t\treturn $q.resolve();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction _link(scope, element, attrs, ngModel) {\r\n\t\t\tngModel.$asyncValidators.qbPromoCode = function (modelValue) {\r\n\t\t\t\treturn validateInput(element, ngModel);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: _link,\r\n\t\t};\r\n\t}]);\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbRestrictInput', function() {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: function($scope, element, attr, ctrl) {\r\n\t\t\t\t// ng-trim must be set to false if you want to prevent whitespaces\r\n\t\t\t\tif (attr.ngTrim == 'false') {\r\n\t\t\t\t\telement.bind('keydown', function(e) {\r\n\t\t\t\t\t\tif (e.which === 32) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctrl.$parsers.push(function(value) {\r\n\t\t\t\t\tvar viewValue;\r\n\t\t\t\t\tvar options = $scope.$eval(attr.qbRestrictInput);\r\n\r\n\t\t\t\t\tif (options.type) {\r\n\t\t\t\t\t\tswitch (options.type) {\r\n\t\t\t\t\t\t\tcase 'digitsOnly':\r\n\t\t\t\t\t\t\t\tviewValue = value.replace(/\\D/g, '');\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'lettersAndDigitsOnly':\r\n\t\t\t\t\t\t\t\tviewValue = value.replace(/\\W/g, '');\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'lettersAndDigitsSpaceOnly':\r\n\t\t\t\t\t\t\t\tif (/\\s/g.test(value)) {\r\n\t\t\t\t\t\t\t\t\tviewValue = value.replace(\r\n\t\t\t\t\t\t\t\t\t\t/[^a-zA-Z0-9 ]/g,\r\n\t\t\t\t\t\t\t\t\t\t''\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tviewValue = value.replace(/\\W/g, '');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tviewValue = '';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (viewValue !== value) {\r\n\t\t\t\t\t\tctrl.$setViewValue(viewValue);\r\n\t\t\t\t\t\tctrl.$render();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn viewValue;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbSimpleSelectArrowClick',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\t\tvar $select = $(elm).find('select');\r\n\r\n\t\t\t\t\tvar openSelect = function (element) {\r\n\t\t\t\t\t\tvar worked = false;\r\n\t\t\t\t\t\tif (document.createEvent) { // all browsers\r\n\t\t\t\t\t\t\tvar e = document.createEvent(\"MouseEvents\");\r\n\t\t\t\t\t\t\te.initMouseEvent(\"mousedown\", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\r\n\t\t\t\t\t\t\tworked = element.dispatchEvent(e);\r\n\t\t\t\t\t\t} else if (element.fireEvent) { // ie\r\n\t\t\t\t\t\t\tworked = element.fireEvent(\"onmousedown\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(elm).click(function (event) {\r\n\t\t\t\t\t\topenSelect($select.get(0));\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBSmartLink', QBSmartLink);\r\n\r\n\tQBSmartLink.$inject = ['$scope', '$window', '$rootScope'];\r\n\r\n\tfunction QBSmartLink($scope, $window, $rootScope) {\r\n\t\tvar vm = this;\r\n\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\t$scope.contentData = $window.qbe.fieldLabels.smartLink;\r\n\t\t}\r\n\r\n\t\tvm.header = $scope.contentData.header;\r\n\t\tvm.content = $scope.contentData.content;\r\n\t\tvm.star = $scope.contentData.feefoStar;\r\n\t\tvm.feedbackButton = $scope.contentData.feedbackButton;\r\n\t\tvm.feefoLogo = $scope.contentData.feefoLogo;\r\n\r\n\t\tvm.submitFeedback = function () {\r\n\t\t\t$rootScope.$broadcast('submit-feedback');\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbSmartLink',\r\n\t\t[\"$window\", function ($window) {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbSmartLink.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\tcontroller: QBSmartLink,\r\n\t\t\t\tcontrollerAs: 'vm',\r\n\t\t\t\tlink: function (scope, element) {\r\n\r\n\t\t\t\t\t//Repeat by defined number of times\r\n\t\t\t\t\tscope.starCount = function (count) {\r\n\t\t\t\t\t\treturn new Array(count);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($window.innerWidth > 767) {\r\n\t\t\t\t\t\tsetFeefoPosition();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tscope.feefoStyle = {\r\n\t\t\t\t\t\t\t\"position\": \"relative\",\r\n\t\t\t\t\t\t\t\"top\": \"0px\"\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//Feefo container position\r\n\t\t\t\t\tangular.element($window).bind('resize', function () {\r\n\t\t\t\t\t\tif ($window.innerWidth > 767) {\r\n\t\t\t\t\t\t\tsetFeefoPosition();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tscope.feefoStyle = {\r\n\t\t\t\t\t\t\t\t\"position\": \"relative\",\r\n\t\t\t\t\t\t\t\t\"top\": \"0px\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tscope.$apply();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tfunction setFeefoPosition() {\r\n\t\t\t\t\t\tvar receiptPosition = document.querySelector('.form-group__container').offsetTop;\r\n\t\t\t\t\t\tvar feefoNewPosition = receiptPosition - 30 + 'px';\r\n\r\n\t\t\t\t\t\tscope.feefoStyle = {\r\n\t\t\t\t\t\t\t\"position\": \"relative\",\r\n\t\t\t\t\t\t\t\"top\": feefoNewPosition\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}]);\r\n\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('SummarySection', SummarySection);\r\n\r\n\tSummarySection.$inject = ['$scope', '$state', 'dynamicRouter', '$window','$filter'\r\n\t\t, 'quoteModelFactory' // labelService is not directly referenced but is required before initialisation\r\n\t\t, 'userInputRepository'\r\n\t\t, 'serviceResponseRepository'\r\n\t\t, 'Util'\r\n\t\t, 'labelService'\r\n\t];\r\n\r\n\tfunction SummarySection($scope, $state, dynamicRouter, window,$filter, quoteModelFactory, userInputRepository, serviceResponseRepository, Util, labelService) {\r\n\t\tvar vm = this;\r\n\t\tvar children = {}, sectionData = {};\r\n\r\n\t\t//dispatch label event as this summary view is outside the form controller\r\n\t\tUtil.dispatchCustomEvent('register-labels');\r\n\t\tvm.labelService = labelService;\r\n\r\n\t\tvm.quoteModel = quoteModelFactory.create();\r\n\r\n\t\t$scope.$root.$on('selected-quote-changed', function () {\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\t\t});\r\n\r\n\t\t$scope.HTML_ID = $scope.name;\r\n\t\t$scope.hierarchyList = [$scope.name];\r\n\r\n\t\tvm.sectionName = $scope.name;\r\n\r\n\t\tvm.summary = $scope.summaryModel\r\n\t\tvoid 0;\r\n\t\tvoid 0;\r\n\t\tvm.getLabel = function (labelKey) {\r\n\t\t\tvar excessLabel = vm.labelService.getLabelForRemoteOption('driverExcess', labelKey);\r\n\t\t\treturn (excessLabel) ? excessLabel.label : '';\r\n\t\t};\r\n\r\n\t\tvm.getRiderExcessLabel = function (labelKey) {\r\n\t\t\tvar excessLabel = vm.labelService.getLabelForRemoteOption('riderExcess', labelKey);\r\n\t\t\treturn (excessLabel) ? excessLabel.label : '';\r\n\t\t};\r\n\r\n\t\tvm.getWallConstructionLabel = function (labelKey) {\r\n\t\t\tvar wallConstruction = this.getGlobalOptionLabel('wallsMadeOf', labelKey);\r\n\t\t\treturn (wallConstruction) ? wallConstruction : '';\r\n\t\t};\r\n\r\n\t\tvm.getLabelForRemoteOption = function (labelSet, labelKey) {\r\n\t\t\tvar label = vm.labelService.getLabelForRemoteOption(labelSet, labelKey);\r\n\t\t\treturn (label) ? label.label : '';\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOptionsFor = function (optionType) {\r\n\t\t\treturn labelService.getGlobalOptionsFor(optionType);\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOptionLabel = function (optionType, optionValue) {\r\n\t\t\tvar optionKeyValues = this.getGlobalOptionsFor(optionType);\r\n\t\t\tvoid 0;\r\n\t\t\tvar label = null;\r\n\t\t\tvar values=$filter('filter')(optionKeyValues, {value:optionValue}); \r\n\t\t\tvoid 0;\r\n\t\t\tif (values && values.length>0) {\r\n\t\t\t\tlabel=values[0].label;\t\t\t\t\r\n\t\t\t}\r\n\t\t\treturn label;\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOption = function (key, option) {\r\n\t\t\toption = option.trim();\r\n\t\t\treturn labelService.getGlobalOption(key, option);\r\n\t\t};\r\n\r\n\t\tvm.getLiability = function () {\r\n\t\t\tvar liability = vm.getGlobalOption('content', 'legal_liability');\r\n\t\t\treturn (liability) ? liability.content : '';\r\n\t\t};\r\n\r\n\t\tvm.moveToState = function (step) {\r\n\t\t\tvoid 0;\r\n\t\t\t$state.go(dynamicRouter.getState(step));\r\n\t\t};\r\n\r\n\t\tvm.moveToHomeState = function (step) {\r\n\t\t\tvoid 0;\r\n\t\t\tif(vm.summary.annualCoverType.coverType==='contents_only' && step>2)\r\n\t\t\t\tstep--;\r\n\t\t\tvm.moveToState(step);\r\n\t\t};\r\n\r\n\t\tvm.getStateName = function(address){\r\n\t\t\treturn address!=null && address.state && address.state!=null ?address.state.replace(/AU_/,''):'';\r\n\t\t}\r\n\r\n\t\tvm.generateAddressText = function(address){\r\n\t\t\t\r\n\t\t\tvar addressText='';\r\n\t\t\taddressText = address.addressLine1 + \" \" +address.city+\", \"+ vm.getStateName(address)+\", \"\r\n\t\t\t\t+address.postalCode;\r\n\t\t\treturn addressText;\r\n\t\t}\r\n\r\n\t\tvm.liability = vm.getLiability();\r\n\r\n\t\tvm.getYearHomeBuilt = function(yearValue){\r\n\t\t\tvar yearHomeBuiltOptions = this.getOptionsForBuildingYearBuilt('yearHomeBuilt');\r\n\t\t\tif(yearHomeBuiltOptions!=null && vm.summary.homeForm && vm.summary.homeForm.tellUsAboutTheBuilding.yearHomeBuilt\r\n\t\t\t\t&& vm.summary.homeForm.tellUsAboutTheBuilding.yearHomeBuilt){\r\n\t\t\t\tvar filteredResult = $filter('filter')(yearHomeBuiltOptions,{value:vm.summary.homeForm.tellUsAboutTheBuilding.yearHomeBuilt});\r\n\t\t\t\tif(filteredResult.length>0){\r\n\t\t\t\t\treturn filteredResult[0].label;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvm.getOptionsForBuildingYearBuilt = function (fieldName) {\r\n\t\t\tvar options = vm.getGlobalOptionsFor(fieldName);\r\n\t\t\tfor (var i = 2000; i <= (new Date()).getFullYear(); i++) {\r\n\t\t\t\toptions.unshift({\r\n\t\t\t\t\tlabel: String(i),\r\n\t\t\t\t\tvalue: String(i)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn options;\t\t\r\n\t\t}\r\n\r\n\t\tvm.includeFloodCover = function(){\t\t\t\r\n\t\t\tvar quickQuoteResponse = serviceResponseRepository.getLastResponseFrom('quote');\r\n\t\t\tif(quickQuoteResponse && quickQuoteResponse!=null){\r\n\r\n\t\t\t\treturn quickQuoteResponse.includeFloodCover!=undefined && quickQuoteResponse.includeFloodCover==true;\r\n\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbSummarySection', [function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'EA',\r\n\t\t\tcontroller: SummarySection,\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\ttransclude: true,\r\n\t\t\tscope: {\r\n\t\t\t\tinit: '&',\r\n\t\t\t\tsummaryModel: '='\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs, ctrl, transclude) {\r\n\t\t\t\tif (scope.setHierarchy !== undefined)\r\n\t\t\t\t\thierarchyDecorator.attach(scope, {element: element, name: scope.name});\r\n\r\n\t\t\t\ttransclude(scope, function (clone) {\r\n\t\t\t\t\telement.append(clone);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\tangular.module('qbePortal').directive('qbTabs',\r\n\t\t[\"quoteOptions\", \"userInputRepository\", function (quoteOptions, userInputRepository) {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbTabs.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\ttransclude: true,\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tselectedTab: '<',\r\n\t\t\t\t\tsetSelectedTab: '&',\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs) {\r\n\t\t\t\t\tscope.vm = {};\r\n\r\n\t\t\t\t\t$(element).on('changeTab.tabs', function (event, $activeTabId) {\r\n\t\t\t\t\t\tvar $tab = $($activeTabId);\r\n\t\t\t\t\t\tvar tabId = $tab.attr('tab-id');\r\n\t\t\t\t\t\tscope.setSelectedTab({\r\n\t\t\t\t\t\t\t'tabId': tabId\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tfunction initTabs(selectedTab) {\r\n\t\t\t\t\t\t$(element).find('[tab-id=' + selectedTab + ']').addClass('is-active');\r\n\t\t\t\t\t\tQBE.tabs.init();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinitTabs(scope.selectedTab);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}]\r\n\t);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbThankYou',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbThankYou.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tthankYou: \"=\",\r\n\t\t\t\t\tisEligible: \"=\",\r\n\t\t\t\t\tisConfirmed: '=',\r\n\t\t\t\t\tcoreData: '=',\r\n\t\t\t\t\tshowThankYou: '=',\r\n\t\t\t\t\tpromoData: '=',\r\n\t\t \t\ttextDisplay:'=',\r\n\t\t \t\tctpStepTotal:'=',\r\n\t\t \t\tctpStepNum:'=',\r\n\t\t \t\tctpCompleted:'='\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t},\r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbTooltip',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\ttooltip: '@'\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs) {\r\n\t\t\t\t\telement.attr('title', scope.tooltip);\r\n\t\t\t\t\t$('.js-tooltip').ddTooltip();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbValidBsb', ['guideWireService', function (guideWireService) {\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: function (scope, element, attrs, ngModel) {\r\n\t\t\t\tngModel.gwService = guideWireService;\r\n\r\n\t\t\t\tngModel.$setValidity('qbValidBsb', true);\r\n\r\n\t\t\t\telement.bind('keyup', function (e) {\r\n\t\t\t\t\tif (!ngModel || typeof(element.val()) != 'string') return;\r\n\r\n\t\t\t\t\t// var keyProperty = scope.$eval(attrs.wcUnique);\r\n\t\t\t\t\tvar currentValue = element.val();\r\n\t\t\t\t\tif (currentValue && currentValue != ''\r\n\t\t\t\t\t\t&& currentValue.length >= 6\r\n\t\t\t\t\t\t&& Number.isNumeric(currentValue)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tngModel.gwService.isBSBValid(currentValue)\r\n\t\t\t\t\t\t\t.then(function (bsbResult) {\r\n\t\t\t\t\t\t\t\tvar valid = bsbResult.data ?\r\n\t\t\t\t\t\t\t\t\t( bsbResult.data.bankName != undefined\r\n\t\t\t\t\t\t\t\t\t&& bsbResult.data.bankName != 'Unknown' )\r\n\t\t\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t\t\t\tngModel.$setValidity('qbValidBsb', valid);\r\n\t\t\t\t\t\t\t}).catch(function () {\r\n\t\t\t\t\t\t\tngModel.$setValidity('qbValidBsb', false);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tngModel.$setValidity('qbValidBsb', true);\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t};\r\n\t}]);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbValidExpiryDate', function () {\r\n\t\tvar EXPIRY_DATE_REGEXP = /^([0-9]{2})\\/([0-9]{2})$/;\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: '',\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\t// only apply the validator if ngModel is present and Angular has added the email validator\r\n\t\t\t\tif (ctrl) {\r\n\r\n\t\t\t\t\t// this will overwrite the default Angular email validator\r\n\t\t\t\t\tctrl.$validators.invalidDate = function (modelValue) {\r\n\t\t\t\t\t\treturn ctrl.$isEmpty(modelValue)\r\n\t\t\t\t\t\t\t|| (EXPIRY_DATE_REGEXP.test(ctrl.$viewValue) && validDate(ctrl.$viewValue));\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction validDate(modelValue) {\r\n\t\t\t\t\tvar monthValue = parseInt(modelValue.match(EXPIRY_DATE_REGEXP)[1]),\r\n\t\t\t\t\t\tyearValue = parseInt(modelValue.match(EXPIRY_DATE_REGEXP)[2]);\r\n\r\n\t\t\t\t\treturn monthValue > 0 && monthValue <= 12 && validYearAndMonth(monthValue, yearValue);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction validYearAndMonth(monthValue, yearValue) {\r\n\t\t\t\t\tvar yearMonthConcat = yearValue * 100 + monthValue;\r\n\t\t\t\t\treturn parseInt(moment().format('YYMM')) <= yearMonthConcat;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n\n/*\r\n * angular-ui-bootstrap\r\n * http://angular-ui.github.io/bootstrap/\r\n\r\n * Version: 1.3.3 - 2016-05-22\r\n * License: MIT\r\n */\r\nangular.module(\"ui.bootstrap\", [\"ui.bootstrap.typeahead\", \"ui.bootstrap.debounce\", \"ui.bootstrap.position\"]);\r\nangular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap.position'])\r\n\r\n/**\r\n * A helper service that can parse typeahead's syntax (string provided by users)\r\n * Extracted to a separate service for ease of unit testing\r\n */\r\n\t.factory('uibTypeaheadParser', ['$parse', function ($parse) {\r\n\t\t// 00000111000000000000022200000000000000003333333333333330000000000044000\r\n\t\tvar TYPEAHEAD_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+([\\s\\S]+?)$/;\r\n\t\treturn {\r\n\t\t\tparse: function (input) {\r\n\t\t\t\tvar match = input.match(TYPEAHEAD_REGEXP);\r\n\t\t\t\tif (!match) {\r\n\t\t\t\t\tthrow new Error(\r\n\t\t\t\t\t\t'Expected typeahead specification in form of \"_modelValue_ (as _label_)? for _item_ in _collection_\"' +\r\n\t\t\t\t\t\t' but got \"' + input + '\".');\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\titemName: match[3],\r\n\t\t\t\t\tsource: $parse(match[4]),\r\n\t\t\t\t\tviewMapper: $parse(match[2] || match[1]),\r\n\t\t\t\t\tmodelMapper: $parse(match[1])\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\r\n\t.controller('UibTypeaheadController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$q', '$timeout', '$document', '$window', '$rootScope', '$$debounce', '$uibPosition', 'uibTypeaheadParser',\r\n\t\tfunction (originalScope, element, attrs, $compile, $parse, $q, $timeout, $document, $window, $rootScope, $$debounce, $position, typeaheadParser) {\r\n\t\t\tvar HOT_KEYS = [9, 13, 27, 38, 40];\r\n\t\t\tvar eventDebounceTime = 200;\r\n\t\t\tvar modelCtrl, ngModelOptions;\r\n\t\t\t//SUPPORTED ATTRIBUTES (OPTIONS)\r\n\r\n\t\t\t//minimal no of characters that needs to be entered before typeahead kicks-in\r\n\t\t\tvar minLength = originalScope.$eval(attrs.typeaheadMinLength);\r\n\t\t\tif (!minLength && minLength !== 0) {\r\n\t\t\t\tminLength = 1;\r\n\t\t\t}\r\n\r\n\t\t\toriginalScope.$watch(attrs.typeaheadMinLength, function (newVal) {\r\n\t\t\t\tminLength = !newVal && newVal !== 0 ? 1 : newVal;\r\n\t\t\t});\r\n\r\n\t\t\t//minimal wait time after last character typed before typeahead kicks-in\r\n\t\t\tvar waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;\r\n\r\n\t\t\t//should it restrict model values to the ones selected from the popup only?\r\n\t\t\tvar isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;\r\n\t\t\toriginalScope.$watch(attrs.typeaheadEditable, function (newVal) {\r\n\t\t\t\tisEditable = newVal !== false;\r\n\t\t\t});\r\n\r\n\t\t\t//binding to a variable that indicates if matches are being retrieved asynchronously\r\n\t\t\tvar isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;\r\n\r\n\t\t\t//a function to determine if an event should cause selection\r\n\t\t\tvar isSelectEvent = attrs.typeaheadShouldSelect ? $parse(attrs.typeaheadShouldSelect) : function (scope, vals) {\r\n\t\t\t\tvar evt = vals.$event;\r\n\t\t\t\treturn evt.which === 13 || evt.which === 9;\r\n\t\t\t};\r\n\r\n\t\t\t//a callback executed when a match is selected\r\n\t\t\tvar onSelectCallback = $parse(attrs.typeaheadOnSelect);\r\n\r\n\t\t\t//should it select highlighted popup value when losing focus?\r\n\t\t\tvar isSelectOnBlur = angular.isDefined(attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false;\r\n\r\n\t\t\t//binding to a variable that indicates if there were no results after the query is completed\r\n\t\t\tvar isNoResultsSetter = $parse(attrs.typeaheadNoResults).assign || angular.noop;\r\n\r\n\t\t\tvar inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;\r\n\r\n\t\t\tvar appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;\r\n\r\n\t\t\tvar appendTo = attrs.typeaheadAppendTo ?\r\n\t\t\t\toriginalScope.$eval(attrs.typeaheadAppendTo) : null;\r\n\r\n\t\t\tvar focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;\r\n\r\n\t\t\t//If input matches an item of the list exactly, select it automatically\r\n\t\t\tvar selectOnExact = attrs.typeaheadSelectOnExact ? originalScope.$eval(attrs.typeaheadSelectOnExact) : false;\r\n\r\n\t\t\t//binding to a variable that indicates if dropdown is open\r\n\t\t\tvar isOpenSetter = $parse(attrs.typeaheadIsOpen).assign || angular.noop;\r\n\r\n\t\t\tvar showHint = originalScope.$eval(attrs.typeaheadShowHint) || false;\r\n\r\n\t\t\t//INTERNAL VARIABLES\r\n\r\n\t\t\t//model setter executed upon match selection\r\n\t\t\tvar parsedModel = $parse(attrs.ngModel);\r\n\t\t\tvar invokeModelSetter = $parse(attrs.ngModel + '($$$p)');\r\n\t\t\tvar $setModelValue = function (scope, newValue) {\r\n\t\t\t\tif (angular.isFunction(parsedModel(originalScope)) &&\r\n\t\t\t\t\tngModelOptions && ngModelOptions.$options && ngModelOptions.$options.getterSetter) {\r\n\t\t\t\t\treturn invokeModelSetter(scope, {$$$p: newValue});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn parsedModel.assign(scope, newValue);\r\n\t\t\t};\r\n\r\n\t\t\t//expressions used by typeahead\r\n\t\t\tvar parserResult = typeaheadParser.parse(attrs.uibTypeahead);\r\n\r\n\t\t\tvar hasFocus;\r\n\r\n\t\t\t//Used to avoid bug in iOS webview where iOS keyboard does not fire\r\n\t\t\t//mousedown & mouseup events\r\n\t\t\t//Issue #3699\r\n\t\t\tvar selected;\r\n\r\n\t\t\t//create a child scope for the typeahead directive so we are not polluting original scope\r\n\t\t\t//with typeahead-specific data (matches, query etc.)\r\n\t\t\tvar scope = originalScope.$new();\r\n\t\t\tvar offDestroy = originalScope.$on('$destroy', function () {\r\n\t\t\t\tscope.$destroy();\r\n\t\t\t});\r\n\t\t\tscope.$on('$destroy', offDestroy);\r\n\r\n\t\t\t// WAI-ARIA\r\n\t\t\tvar popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\r\n\t\t\telement.attr({\r\n\t\t\t\t'aria-autocomplete': 'list',\r\n\t\t\t\t'aria-expanded': false,\r\n\t\t\t\t'aria-owns': popupId\r\n\t\t\t});\r\n\r\n\t\t\tvar inputsContainer, hintInputElem;\r\n\t\t\t//add read-only input to show hint\r\n\t\t\tif (showHint) {\r\n\t\t\t\tinputsContainer = angular.element('
');\r\n\t\t\t\tinputsContainer.css('position', 'relative');\r\n\t\t\t\telement.after(inputsContainer);\r\n\t\t\t\thintInputElem = element.clone();\r\n\t\t\t\thintInputElem.attr('placeholder', '');\r\n\t\t\t\thintInputElem.attr('tabindex', '-1');\r\n\t\t\t\thintInputElem.val('');\r\n\t\t\t\thintInputElem.css({\r\n\t\t\t\t\t'position': 'absolute',\r\n\t\t\t\t\t'top': '0px',\r\n\t\t\t\t\t'left': '0px',\r\n\t\t\t\t\t'border-color': 'transparent',\r\n\t\t\t\t\t'box-shadow': 'none',\r\n\t\t\t\t\t'opacity': 1,\r\n\t\t\t\t\t'background': 'none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255)',\r\n\t\t\t\t\t'color': '#999'\r\n\t\t\t\t});\r\n\t\t\t\telement.css({\r\n\t\t\t\t\t'position': 'relative',\r\n\t\t\t\t\t'vertical-align': 'top',\r\n\t\t\t\t\t'background-color': 'transparent'\r\n\t\t\t\t});\r\n\t\t\t\tinputsContainer.append(hintInputElem);\r\n\t\t\t\thintInputElem.after(element);\r\n\t\t\t}\r\n\r\n\t\t\t//pop-up element used to display matches\r\n\t\t\tvar popUpEl = angular.element('
');\r\n\t\t\tpopUpEl.attr({\r\n\t\t\t\tid: popupId,\r\n\t\t\t\tmatches: 'matches',\r\n\t\t\t\tactive: 'activeIdx',\r\n\t\t\t\tselect: 'select(activeIdx, evt)',\r\n\t\t\t\t'move-in-progress': 'moveInProgress',\r\n\t\t\t\tquery: 'query',\r\n\t\t\t\tposition: 'position',\r\n\t\t\t\t'assign-is-open': 'assignIsOpen(isOpen)',\r\n\t\t\t\tdebounce: 'debounceUpdate'\r\n\t\t\t});\r\n\t\t\t//custom item template\r\n\t\t\tif (angular.isDefined(attrs.typeaheadTemplateUrl)) {\r\n\t\t\t\tpopUpEl.attr('template-url', attrs.typeaheadTemplateUrl);\r\n\t\t\t}\r\n\r\n\t\t\tif (angular.isDefined(attrs.typeaheadPopupTemplateUrl)) {\r\n\t\t\t\tpopUpEl.attr('popup-template-url', attrs.typeaheadPopupTemplateUrl);\r\n\t\t\t}\r\n\r\n\t\t\tvar resetHint = function () {\r\n\t\t\t\tif (showHint) {\r\n\t\t\t\t\thintInputElem.val('');\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tvar resetMatches = function () {\r\n\t\t\t\tscope.matches = [];\r\n\t\t\t\tscope.activeIdx = -1;\r\n\t\t\t\telement.attr('aria-expanded', false);\r\n\t\t\t\tresetHint();\r\n\t\t\t};\r\n\r\n\t\t\tvar getMatchId = function (index) {\r\n\t\t\t\treturn popupId + '-option-' + index;\r\n\t\t\t};\r\n\r\n\t\t\t// Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.\r\n\t\t\t// This attribute is added or removed automatically when the `activeIdx` changes.\r\n\t\t\tscope.$watch('activeIdx', function (index) {\r\n\t\t\t\tif (index < 0) {\r\n\t\t\t\t\telement.removeAttr('aria-activedescendant');\r\n\t\t\t\t} else {\r\n\t\t\t\t\telement.attr('aria-activedescendant', getMatchId(index));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvar inputIsExactMatch = function (inputValue, index) {\r\n\t\t\t\tif (scope.matches.length > index && inputValue) {\r\n\t\t\t\t\treturn inputValue.toUpperCase() === scope.matches[index].label.toUpperCase();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\r\n\t\t\tvar getMatchesAsync = function (inputValue, evt) {\r\n\t\t\t\tvar locals = {$viewValue: inputValue};\r\n\t\t\t\tisLoadingSetter(originalScope, true);\r\n\t\t\t\tisNoResultsSetter(originalScope, false);\r\n\t\t\t\t$q.when(parserResult.source(originalScope, locals)).then(function (matches) {\r\n\t\t\t\t\t//it might happen that several async queries were in progress if a user were typing fast\r\n\t\t\t\t\t//but we are interested only in responses that correspond to the current view value\r\n\t\t\t\t\tvar onCurrentRequest = inputValue === modelCtrl.$viewValue;\r\n\t\t\t\t\tif (onCurrentRequest && hasFocus) {\r\n\t\t\t\t\t\tif (matches && matches.length > 0) {\r\n\t\t\t\t\t\t\tscope.activeIdx = focusFirst ? 0 : -1;\r\n\t\t\t\t\t\t\tisNoResultsSetter(originalScope, false);\r\n\t\t\t\t\t\t\tscope.matches.length = 0;\r\n\r\n\t\t\t\t\t\t\t//transform labels\r\n\t\t\t\t\t\t\tfor (var i = 0; i < matches.length; i++) {\r\n\t\t\t\t\t\t\t\tlocals[parserResult.itemName] = matches[i];\r\n\t\t\t\t\t\t\t\tscope.matches.push({\r\n\t\t\t\t\t\t\t\t\tid: getMatchId(i),\r\n\t\t\t\t\t\t\t\t\tlabel: parserResult.viewMapper(scope, locals),\r\n\t\t\t\t\t\t\t\t\tmodel: matches[i]\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tscope.query = inputValue;\r\n\t\t\t\t\t\t\t//position pop-up with matches - we need to re-calculate its position each time we are opening a window\r\n\t\t\t\t\t\t\t//with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page\r\n\t\t\t\t\t\t\t//due to other elements being rendered\r\n\t\t\t\t\t\t\trecalculatePosition();\r\n\r\n\t\t\t\t\t\t\telement.attr('aria-expanded', true);\r\n\r\n\t\t\t\t\t\t\t//Select the single remaining option if user input matches\r\n\t\t\t\t\t\t\tif (selectOnExact && scope.matches.length === 1 && inputIsExactMatch(inputValue, 0)) {\r\n\t\t\t\t\t\t\t\tif (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\r\n\t\t\t\t\t\t\t\t\t$$debounce(function () {\r\n\t\t\t\t\t\t\t\t\t\tscope.select(0, evt);\r\n\t\t\t\t\t\t\t\t\t}, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tscope.select(0, evt);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (showHint) {\r\n\t\t\t\t\t\t\t\tvar firstLabel = scope.matches[0].label;\r\n\t\t\t\t\t\t\t\tif (angular.isString(inputValue) &&\r\n\t\t\t\t\t\t\t\t\tinputValue.length > 0 &&\r\n\t\t\t\t\t\t\t\t\tfirstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\thintInputElem.val(inputValue + firstLabel.slice(inputValue.length));\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\thintInputElem.val('');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tresetMatches();\r\n\t\t\t\t\t\t\tisNoResultsSetter(originalScope, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (onCurrentRequest) {\r\n\t\t\t\t\t\tisLoadingSetter(originalScope, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, function () {\r\n\t\t\t\t\tresetMatches();\r\n\t\t\t\t\tisLoadingSetter(originalScope, false);\r\n\t\t\t\t\tisNoResultsSetter(originalScope, true);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\t// bind events only if appendToBody params exist - performance feature\r\n\t\t\tif (appendToBody) {\r\n\t\t\t\tangular.element($window).on('resize', fireRecalculating);\r\n\t\t\t\t$document.find('body').on('scroll', fireRecalculating);\r\n\t\t\t}\r\n\r\n\t\t\t// Declare the debounced function outside recalculating for\r\n\t\t\t// proper debouncing\r\n\t\t\tvar debouncedRecalculate = $$debounce(function () {\r\n\t\t\t\t// if popup is visible\r\n\t\t\t\tif (scope.matches.length) {\r\n\t\t\t\t\trecalculatePosition();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tscope.moveInProgress = false;\r\n\t\t\t}, eventDebounceTime);\r\n\r\n\t\t\t// Default progress type\r\n\t\t\tscope.moveInProgress = false;\r\n\r\n\t\t\tfunction fireRecalculating() {\r\n\t\t\t\tif (!scope.moveInProgress) {\r\n\t\t\t\t\tscope.moveInProgress = true;\r\n\t\t\t\t\tscope.$digest();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdebouncedRecalculate();\r\n\t\t\t}\r\n\r\n\t\t\t// recalculate actual position and set new values to scope\r\n\t\t\t// after digest loop is popup in right position\r\n\t\t\tfunction recalculatePosition() {\r\n\t\t\t\tscope.position = appendToBody ? $position.offset(element) : $position.position(element);\r\n\t\t\t\tscope.position.top += element.prop('offsetHeight');\r\n\t\t\t}\r\n\r\n\t\t\t//we need to propagate user's query so we can higlight matches\r\n\t\t\tscope.query = undefined;\r\n\r\n\t\t\t//Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later\r\n\t\t\tvar timeoutPromise;\r\n\r\n\t\t\tvar scheduleSearchWithTimeout = function (inputValue) {\r\n\t\t\t\ttimeoutPromise = $timeout(function () {\r\n\t\t\t\t\tgetMatchesAsync(inputValue);\r\n\t\t\t\t}, waitTime);\r\n\t\t\t};\r\n\r\n\t\t\tvar cancelPreviousTimeout = function () {\r\n\t\t\t\tif (timeoutPromise) {\r\n\t\t\t\t\t$timeout.cancel(timeoutPromise);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tresetMatches();\r\n\r\n\t\t\tscope.assignIsOpen = function (isOpen) {\r\n\t\t\t\tisOpenSetter(originalScope, isOpen);\r\n\t\t\t};\r\n\r\n\t\t\tscope.select = function (activeIdx, evt) {\r\n\t\t\t\t//called from within the $digest() cycle\r\n\t\t\t\tvar locals = {};\r\n\t\t\t\tvar model, item;\r\n\r\n\t\t\t\tselected = true;\r\n\t\t\t\tlocals[parserResult.itemName] = item = scope.matches[activeIdx].model;\r\n\t\t\t\tmodel = parserResult.modelMapper(originalScope, locals);\r\n\t\t\t\t$setModelValue(originalScope, model);\r\n\t\t\t\tmodelCtrl.$setValidity('editable', true);\r\n\t\t\t\tmodelCtrl.$setValidity('parse', true);\r\n\r\n\t\t\t\tonSelectCallback(originalScope, {\r\n\t\t\t\t\t$item: item,\r\n\t\t\t\t\t$model: model,\r\n\t\t\t\t\t$label: parserResult.viewMapper(originalScope, locals),\r\n\t\t\t\t\t$event: evt\r\n\t\t\t\t});\r\n\r\n\t\t\t\tresetMatches();\r\n\r\n\t\t\t\t//return focus to the input element if a match was selected via a mouse click event\r\n\t\t\t\t// use timeout to avoid $rootScope:inprog error\r\n\t\t\t\tif (scope.$eval(attrs.typeaheadFocusOnSelect) !== false) {\r\n\t\t\t\t\t$timeout(function () {\r\n\t\t\t\t\t\telement[0].focus();\r\n\t\t\t\t\t}, 0, false);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t//bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)\r\n\t\t\telement.on('keydown', function (evt) {\r\n\t\t\t\t//typeahead is open and an \"interesting\" key was pressed\r\n\t\t\t\tif (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar shouldSelect = isSelectEvent(originalScope, {$event: evt});\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * if there's nothing selected (i.e. focusFirst) and enter or tab is hit\r\n\t\t\t\t * or\r\n\t\t\t\t * shift + tab is pressed to bring focus to the previous element\r\n\t\t\t\t * then clear the results\r\n\t\t\t\t */\r\n\t\t\t\tif (scope.activeIdx === -1 && shouldSelect || evt.which === 9 && !!evt.shiftKey) {\r\n\t\t\t\t\tresetMatches();\r\n\t\t\t\t\tscope.$digest();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tvar target;\r\n\t\t\t\tswitch (evt.which) {\r\n\t\t\t\t\tcase 27: // escape\r\n\t\t\t\t\t\tevt.stopPropagation();\r\n\r\n\t\t\t\t\t\tresetMatches();\r\n\t\t\t\t\t\toriginalScope.$digest();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 38: // up arrow\r\n\t\t\t\t\t\tscope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;\r\n\t\t\t\t\t\tscope.$digest();\r\n\t\t\t\t\t\ttarget = popUpEl.find('li')[scope.activeIdx];\r\n\t\t\t\t\t\ttarget.parentNode.scrollTop = target.offsetTop;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 40: // down arrow\r\n\t\t\t\t\t\tscope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;\r\n\t\t\t\t\t\tscope.$digest();\r\n\t\t\t\t\t\ttarget = popUpEl.find('li')[scope.activeIdx];\r\n\t\t\t\t\t\ttarget.parentNode.scrollTop = target.offsetTop;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif (shouldSelect) {\r\n\t\t\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\t\t\tif (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\r\n\t\t\t\t\t\t\t\t\t$$debounce(function () {\r\n\t\t\t\t\t\t\t\t\t\tscope.select(scope.activeIdx, evt);\r\n\t\t\t\t\t\t\t\t\t}, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tscope.select(scope.activeIdx, evt);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.bind('focus', function (evt) {\r\n\t\t\t\thasFocus = true;\r\n\t\t\t\tif (minLength === 0 && !modelCtrl.$viewValue) {\r\n\t\t\t\t\t$timeout(function () {\r\n\t\t\t\t\t\tgetMatchesAsync(modelCtrl.$viewValue, evt);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.bind('blur', function (evt) {\r\n\t\t\t\tif (isSelectOnBlur && scope.matches.length && scope.activeIdx !== -1 && !selected) {\r\n\t\t\t\t\tselected = true;\r\n\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\tif (angular.isObject(scope.debounceUpdate) && angular.isNumber(scope.debounceUpdate.blur)) {\r\n\t\t\t\t\t\t\t$$debounce(function () {\r\n\t\t\t\t\t\t\t\tscope.select(scope.activeIdx, evt);\r\n\t\t\t\t\t\t\t}, scope.debounceUpdate.blur);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tscope.select(scope.activeIdx, evt);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (!isEditable && modelCtrl.$error.editable) {\r\n\t\t\t\t\tmodelCtrl.$setViewValue();\r\n\t\t\t\t\t// Reset validity as we are clearing\r\n\t\t\t\t\tmodelCtrl.$setValidity('editable', true);\r\n\t\t\t\t\tmodelCtrl.$setValidity('parse', true);\r\n\t\t\t\t\telement.val('');\r\n\t\t\t\t}\r\n\t\t\t\thasFocus = false;\r\n\t\t\t\tselected = false;\r\n\t\t\t});\r\n\r\n\t\t\t// Keep reference to click handler to unbind it.\r\n\t\t\tvar dismissClickHandler = function (evt) {\r\n\t\t\t\t// Issue #3973\r\n\t\t\t\t// Firefox treats right click as a click on document\r\n\t\t\t\tif (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {\r\n\t\t\t\t\tresetMatches();\r\n\t\t\t\t\tif (!$rootScope.$$phase) {\r\n\t\t\t\t\t\toriginalScope.$digest();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t$document.on('click', dismissClickHandler);\r\n\r\n\t\t\toriginalScope.$on('$destroy', function () {\r\n\t\t\t\t$document.off('click', dismissClickHandler);\r\n\t\t\t\tif (appendToBody || appendTo) {\r\n\t\t\t\t\t$popup.remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (appendToBody) {\r\n\t\t\t\t\tangular.element($window).off('resize', fireRecalculating);\r\n\t\t\t\t\t$document.find('body').off('scroll', fireRecalculating);\r\n\t\t\t\t}\r\n\t\t\t\t// Prevent jQuery cache memory leak\r\n\t\t\t\tpopUpEl.remove();\r\n\r\n\t\t\t\tif (showHint) {\r\n\t\t\t\t\tinputsContainer.remove();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvar $popup = $compile(popUpEl)(scope);\r\n\r\n\t\t\tif (appendToBody) {\r\n\t\t\t\t$document.find('body').append($popup);\r\n\t\t\t} else if (appendTo) {\r\n\t\t\t\tangular.element(appendTo).eq(0).append($popup);\r\n\t\t\t} else {\r\n\t\t\t\telement.after($popup);\r\n\t\t\t}\r\n\r\n\t\t\tthis.init = function (_modelCtrl, _ngModelOptions) {\r\n\t\t\t\tmodelCtrl = _modelCtrl;\r\n\t\t\t\tngModelOptions = _ngModelOptions;\r\n\r\n\t\t\t\tscope.debounceUpdate = modelCtrl.$options && $parse(modelCtrl.$options.debounce)(originalScope);\r\n\r\n\t\t\t\t//plug into $parsers pipeline to open a typeahead on view changes initiated from DOM\r\n\t\t\t\t//$parsers kick-in on all the changes coming from the view as well as manually triggered by $setViewValue\r\n\t\t\t\tmodelCtrl.$parsers.unshift(function (inputValue) {\r\n\t\t\t\t\thasFocus = true;\r\n\r\n\t\t\t\t\tif (minLength === 0 || inputValue && inputValue.length >= minLength) {\r\n\t\t\t\t\t\tif (waitTime > 0) {\r\n\t\t\t\t\t\t\tcancelPreviousTimeout();\r\n\t\t\t\t\t\t\tscheduleSearchWithTimeout(inputValue);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tgetMatchesAsync(inputValue);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tisLoadingSetter(originalScope, false);\r\n\t\t\t\t\t\tcancelPreviousTimeout();\r\n\t\t\t\t\t\tresetMatches();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (isEditable) {\r\n\t\t\t\t\t\treturn inputValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!inputValue) {\r\n\t\t\t\t\t\t// Reset in case user had typed something previously.\r\n\t\t\t\t\t\tmodelCtrl.$setValidity('editable', true);\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmodelCtrl.$setValidity('editable', false);\r\n\t\t\t\t\treturn undefined;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tmodelCtrl.$formatters.push(function (modelValue) {\r\n\t\t\t\t\tvar candidateViewValue, emptyViewValue;\r\n\t\t\t\t\tvar locals = {};\r\n\r\n\t\t\t\t\t// The validity may be set to false via $parsers (see above) if\r\n\t\t\t\t\t// the model is restricted to selected values. If the model\r\n\t\t\t\t\t// is set manually it is considered to be valid.\r\n\t\t\t\t\tif (!isEditable) {\r\n\t\t\t\t\t\tmodelCtrl.$setValidity('editable', true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (inputFormatter) {\r\n\t\t\t\t\t\tlocals.$model = modelValue;\r\n\t\t\t\t\t\treturn inputFormatter(originalScope, locals);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//it might happen that we don't have enough info to properly render input value\r\n\t\t\t\t\t//we need to check for this situation and simply return model value if we can't apply custom formatting\r\n\t\t\t\t\tlocals[parserResult.itemName] = modelValue;\r\n\t\t\t\t\tcandidateViewValue = parserResult.viewMapper(originalScope, locals);\r\n\t\t\t\t\tlocals[parserResult.itemName] = undefined;\r\n\t\t\t\t\temptyViewValue = parserResult.viewMapper(originalScope, locals);\r\n\r\n\t\t\t\t\treturn candidateViewValue !== emptyViewValue ? candidateViewValue : modelValue;\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t}])\r\n\r\n\t.directive('uibTypeahead', function () {\r\n\t\treturn {\r\n\t\t\tcontroller: 'UibTypeaheadController',\r\n\t\t\trequire: ['ngModel', '^?ngModelOptions', 'uibTypeahead'],\r\n\t\t\tlink: function (originalScope, element, attrs, ctrls) {\r\n\t\t\t\tctrls[2].init(ctrls[0], ctrls[1]);\r\n\t\t\t}\r\n\t\t};\r\n\t})\r\n\r\n\t.directive('uibTypeaheadPopup', ['$$debounce', function ($$debounce) {\r\n\t\treturn {\r\n\t\t\tscope: {\r\n\t\t\t\tmatches: '=',\r\n\t\t\t\tquery: '=',\r\n\t\t\t\tactive: '=',\r\n\t\t\t\tposition: '&',\r\n\t\t\t\tmoveInProgress: '=',\r\n\t\t\t\tselect: '&',\r\n\t\t\t\tassignIsOpen: '&',\r\n\t\t\t\tdebounce: '&'\r\n\t\t\t},\r\n\t\t\treplace: true,\r\n\t\t\ttemplateUrl: function (element, attrs) {\r\n\t\t\t\treturn attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs) {\r\n\t\t\t\tscope.templateUrl = attrs.templateUrl;\r\n\r\n\t\t\t\tscope.isOpen = function () {\r\n\t\t\t\t\tvar isDropdownOpen = scope.matches.length > 0;\r\n\t\t\t\t\tscope.assignIsOpen({isOpen: isDropdownOpen});\r\n\t\t\t\t\treturn isDropdownOpen;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscope.isActive = function (matchIdx) {\r\n\t\t\t\t\treturn scope.active === matchIdx;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscope.selectActive = function (matchIdx) {\r\n\t\t\t\t\tscope.active = matchIdx;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscope.selectMatch = function (activeIdx, evt) {\r\n\t\t\t\t\tvar debounce = scope.debounce();\r\n\t\t\t\t\tif (angular.isNumber(debounce) || angular.isObject(debounce)) {\r\n\t\t\t\t\t\t$$debounce(function () {\r\n\t\t\t\t\t\t\tscope.select({activeIdx: activeIdx, evt: evt});\r\n\t\t\t\t\t\t}, angular.isNumber(debounce) ? debounce : debounce['default']);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tscope.select({activeIdx: activeIdx, evt: evt});\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\r\n\t.directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function ($templateRequest, $compile, $parse) {\r\n\t\treturn {\r\n\t\t\tscope: {\r\n\t\t\t\tindex: '=',\r\n\t\t\t\tmatch: '=',\r\n\t\t\t\tquery: '='\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs) {\r\n\t\t\t\tvar tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'uib/template/typeahead/typeahead-match.html';\r\n\t\t\t\t$templateRequest(tplUrl).then(function (tplContent) {\r\n\t\t\t\t\tvar tplEl = angular.element(tplContent.trim());\r\n\t\t\t\t\telement.replaceWith(tplEl);\r\n\t\t\t\t\t$compile(tplEl)(scope);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\r\n\t.filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function ($sce, $injector, $log) {\r\n\t\tvar isSanitizePresent;\r\n\t\tisSanitizePresent = $injector.has('$sanitize');\r\n\r\n\t\tfunction escapeRegexp(queryToEscape) {\r\n\t\t\t// Regex: capture the whole query string and replace it with the string that will be used to match\r\n\t\t\t// the results, for example if the capture is \"a\" the result will be \\a\r\n\t\t\treturn queryToEscape.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\r\n\t\t}\r\n\r\n\t\tfunction containsHtml(matchItem) {\r\n\t\t\treturn /<.*>/g.test(matchItem);\r\n\t\t}\r\n\r\n\t\treturn function (matchItem, query) {\r\n\t\t\tif (!isSanitizePresent && containsHtml(matchItem)) {\r\n\t\t\t\t$log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger\r\n\t\t\t}\r\n\t\t\tmatchItem = query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem; // Replaces the capture string with a the same string inside of a \"strong\" tag\r\n\t\t\tif (!isSanitizePresent) {\r\n\t\t\t\tmatchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive\r\n\t\t\t}\r\n\t\t\treturn matchItem;\r\n\t\t};\r\n\t}]);\r\n\r\nangular.module('ui.bootstrap.debounce', [])\r\n/**\r\n * A helper, internal service that debounces a function\r\n */\r\n\t.factory('$$debounce', ['$timeout', function ($timeout) {\r\n\t\treturn function (callback, debounceTime) {\r\n\t\t\tvar timeoutPromise;\r\n\r\n\t\t\treturn function () {\r\n\t\t\t\tvar self = this;\r\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\t\t\tif (timeoutPromise) {\r\n\t\t\t\t\t$timeout.cancel(timeoutPromise);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttimeoutPromise = $timeout(function () {\r\n\t\t\t\t\tcallback.apply(self, args);\r\n\t\t\t\t}, debounceTime);\r\n\t\t\t};\r\n\t\t};\r\n\t}]);\r\n\r\nangular.module('ui.bootstrap.position', [])\r\n\r\n/**\r\n * A set of utility methods for working with the DOM.\r\n * It is meant to be used where we need to absolute-position elements in\r\n * relation to another element (this is the case for tooltips, popovers,\r\n * typeahead suggestions etc.).\r\n */\r\n\t.factory('$uibPosition', ['$document', '$window', function ($document, $window) {\r\n\t\t/**\r\n\t\t * Used by scrollbarWidth() function to cache scrollbar's width.\r\n\t\t * Do not access this variable directly, use scrollbarWidth() instead.\r\n\t\t */\r\n\t\tvar SCROLLBAR_WIDTH;\r\n\t\t/**\r\n\t\t * scrollbar on body and html element in IE and Edge overlay\r\n\t\t * content and should be considered 0 width.\r\n\t\t */\r\n\t\tvar BODY_SCROLLBAR_WIDTH;\r\n\t\tvar OVERFLOW_REGEX = {\r\n\t\t\tnormal: /(auto|scroll)/,\r\n\t\t\thidden: /(auto|scroll|hidden)/\r\n\t\t};\r\n\t\tvar PLACEMENT_REGEX = {\r\n\t\t\tauto: /\\s?auto?\\s?/i,\r\n\t\t\tprimary: /^(top|bottom|left|right)$/,\r\n\t\t\tsecondary: /^(top|bottom|left|right|center)$/,\r\n\t\t\tvertical: /^(top|bottom)$/\r\n\t\t};\r\n\t\tvar BODY_REGEX = /(HTML|BODY)/;\r\n\r\n\t\treturn {\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides a raw DOM element from a jQuery/jQLite element.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to convert.\r\n\t\t\t *\r\n\t\t\t * @returns {element} A HTML element.\r\n\t\t\t */\r\n\t\t\tgetRawNode: function (elem) {\r\n\t\t\t\treturn elem.nodeName ? elem : elem[0] || elem;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides a parsed number for a style property. Strips\r\n\t\t\t * units and casts invalid numbers to 0.\r\n\t\t\t *\r\n\t\t\t * @param {string} value - The style value to parse.\r\n\t\t\t *\r\n\t\t\t * @returns {number} A valid number.\r\n\t\t\t */\r\n\t\t\tparseStyle: function (value) {\r\n\t\t\t\tvalue = parseFloat(value);\r\n\t\t\t\treturn isFinite(value) ? value : 0;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides the closest positioned ancestor.\r\n\t\t\t *\r\n\t\t\t * @param {element} element - The element to get the offest parent for.\r\n\t\t\t *\r\n\t\t\t * @returns {element} The closest positioned ancestor.\r\n\t\t\t */\r\n\t\t\toffsetParent: function (elem) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar offsetParent = elem.offsetParent || $document[0].documentElement;\r\n\r\n\t\t\t\tfunction isStaticPositioned(el) {\r\n\t\t\t\t\treturn ($window.getComputedStyle(el).position || 'static') === 'static';\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {\r\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn offsetParent || $document[0].documentElement;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides the scrollbar width, concept from TWBS measureScrollbar()\r\n\t\t\t * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js\r\n\t\t\t * In IE and Edge, scollbar on body and html element overlay and should\r\n\t\t\t * return a width of 0.\r\n\t\t\t *\r\n\t\t\t * @returns {number} The width of the browser scollbar.\r\n\t\t\t */\r\n\t\t\tscrollbarWidth: function (isBody) {\r\n\t\t\t\tif (isBody) {\r\n\t\t\t\t\tif (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {\r\n\t\t\t\t\t\tvar bodyElem = $document.find('body');\r\n\t\t\t\t\t\tbodyElem.addClass('uib-position-body-scrollbar-measure');\r\n\t\t\t\t\t\tBODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;\r\n\t\t\t\t\t\tBODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;\r\n\t\t\t\t\t\tbodyElem.removeClass('uib-position-body-scrollbar-measure');\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn BODY_SCROLLBAR_WIDTH;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (angular.isUndefined(SCROLLBAR_WIDTH)) {\r\n\t\t\t\t\tvar scrollElem = angular.element('
');\r\n\t\t\t\t\t$document.find('body').append(scrollElem);\r\n\t\t\t\t\tSCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;\r\n\t\t\t\t\tSCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;\r\n\t\t\t\t\tscrollElem.remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn SCROLLBAR_WIDTH;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides the padding required on an element to replace the scrollbar.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **scrollbarWidth**: the width of the scrollbar
  • \r\n\t\t\t *
  • **widthOverflow**: whether the the width is overflowing
  • \r\n\t\t\t *
  • **right**: the amount of right padding on the element needed to replace the scrollbar
  • \r\n\t\t\t *
  • **rightOriginal**: the amount of right padding currently on the element
  • \r\n\t\t\t *
  • **heightOverflow**: whether the the height is overflowing
  • \r\n\t\t\t *
  • **bottom**: the amount of bottom padding on the element needed to replace the scrollbar
  • \r\n\t\t\t *
  • **bottomOriginal**: the amount of bottom padding currently on the element
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tscrollbarPadding: function (elem) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar elemStyle = $window.getComputedStyle(elem);\r\n\t\t\t\tvar paddingRight = this.parseStyle(elemStyle.paddingRight);\r\n\t\t\t\tvar paddingBottom = this.parseStyle(elemStyle.paddingBottom);\r\n\t\t\t\tvar scrollParent = this.scrollParent(elem, false, true);\r\n\t\t\t\tvar scrollbarWidth = this.scrollbarWidth(scrollParent, BODY_REGEX.test(scrollParent.tagName));\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tscrollbarWidth: scrollbarWidth,\r\n\t\t\t\t\twidthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,\r\n\t\t\t\t\tright: paddingRight + scrollbarWidth,\r\n\t\t\t\t\toriginalRight: paddingRight,\r\n\t\t\t\t\theightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,\r\n\t\t\t\t\tbottom: paddingBottom + scrollbarWidth,\r\n\t\t\t\t\toriginalBottom: paddingBottom\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Checks to see if the element is scrollable.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to check.\r\n\t\t\t * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\r\n\t\t\t * default is false.\r\n\t\t\t *\r\n\t\t\t * @returns {boolean} Whether the element is scrollable.\r\n\t\t\t */\r\n\t\t\tisScrollable: function (elem, includeHidden) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\r\n\t\t\t\tvar elemStyle = $window.getComputedStyle(elem);\r\n\t\t\t\treturn overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides the closest scrollable ancestor.\r\n\t\t\t * A port of the jQuery UI scrollParent method:\r\n\t\t\t * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to find the scroll parent of.\r\n\t\t\t * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\r\n\t\t\t * default is false.\r\n\t\t\t * @param {boolean=} [includeSelf=false] - Should the element being passed be\r\n\t\t\t * included in the scrollable llokup.\r\n\t\t\t *\r\n\t\t\t * @returns {element} A HTML element.\r\n\t\t\t */\r\n\t\t\tscrollParent: function (elem, includeHidden, includeSelf) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\r\n\t\t\t\tvar documentEl = $document[0].documentElement;\r\n\t\t\t\tvar elemStyle = $window.getComputedStyle(elem);\r\n\t\t\t\tif (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {\r\n\t\t\t\t\treturn elem;\r\n\t\t\t\t}\r\n\t\t\t\tvar excludeStatic = elemStyle.position === 'absolute';\r\n\t\t\t\tvar scrollParent = elem.parentElement || documentEl;\r\n\r\n\t\t\t\tif (scrollParent === documentEl || elemStyle.position === 'fixed') {\r\n\t\t\t\t\treturn documentEl;\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (scrollParent.parentElement && scrollParent !== documentEl) {\r\n\t\t\t\t\tvar spStyle = $window.getComputedStyle(scrollParent);\r\n\t\t\t\t\tif (excludeStatic && spStyle.position !== 'static') {\r\n\t\t\t\t\t\texcludeStatic = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tscrollParent = scrollParent.parentElement;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn scrollParent;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides read-only equivalent of jQuery's position function:\r\n\t\t\t * http://api.jquery.com/position/ - distance to closest positioned\r\n\t\t\t * ancestor. Does not account for margins by default like jQuery position.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to caclulate the position on.\r\n\t\t\t * @param {boolean=} [includeMargins=false] - Should margins be accounted\r\n\t\t\t * for, default is false.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **width**: the width of the element
  • \r\n\t\t\t *
  • **height**: the height of the element
  • \r\n\t\t\t *
  • **top**: distance to top edge of offset parent
  • \r\n\t\t\t *
  • **left**: distance to left edge of offset parent
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tposition: function (elem, includeMagins) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar elemOffset = this.offset(elem);\r\n\t\t\t\tif (includeMagins) {\r\n\t\t\t\t\tvar elemStyle = $window.getComputedStyle(elem);\r\n\t\t\t\t\telemOffset.top -= this.parseStyle(elemStyle.marginTop);\r\n\t\t\t\t\telemOffset.left -= this.parseStyle(elemStyle.marginLeft);\r\n\t\t\t\t}\r\n\t\t\t\tvar parent = this.offsetParent(elem);\r\n\t\t\t\tvar parentOffset = {top: 0, left: 0};\r\n\r\n\t\t\t\tif (parent !== $document[0].documentElement) {\r\n\t\t\t\t\tparentOffset = this.offset(parent);\r\n\t\t\t\t\tparentOffset.top += parent.clientTop - parent.scrollTop;\r\n\t\t\t\t\tparentOffset.left += parent.clientLeft - parent.scrollLeft;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\twidth: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),\r\n\t\t\t\t\theight: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),\r\n\t\t\t\t\ttop: Math.round(elemOffset.top - parentOffset.top),\r\n\t\t\t\t\tleft: Math.round(elemOffset.left - parentOffset.left)\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides read-only equivalent of jQuery's offset function:\r\n\t\t\t * http://api.jquery.com/offset/ - distance to viewport. Does\r\n\t\t\t * not account for borders, margins, or padding on the body\r\n\t\t\t * element.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to calculate the offset on.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **width**: the width of the element
  • \r\n\t\t\t *
  • **height**: the height of the element
  • \r\n\t\t\t *
  • **top**: distance to top edge of viewport
  • \r\n\t\t\t *
  • **right**: distance to bottom edge of viewport
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\toffset: function (elem) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar elemBCR = elem.getBoundingClientRect();\r\n\t\t\t\treturn {\r\n\t\t\t\t\twidth: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),\r\n\t\t\t\t\theight: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),\r\n\t\t\t\t\ttop: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),\r\n\t\t\t\t\tleft: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides offset distance to the closest scrollable ancestor\r\n\t\t\t * or viewport. Accounts for border and scrollbar width.\r\n\t\t\t *\r\n\t\t\t * Right and bottom dimensions represent the distance to the\r\n\t\t\t * respective edge of the viewport element. If the element\r\n\t\t\t * edge extends beyond the viewport, a negative value will be\r\n\t\t\t * reported.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to get the viewport offset for.\r\n\t\t\t * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead\r\n\t\t\t * of the first scrollable element, default is false.\r\n\t\t\t * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element\r\n\t\t\t * be accounted for, default is true.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **top**: distance to the top content edge of viewport element
  • \r\n\t\t\t *
  • **bottom**: distance to the bottom content edge of viewport element
  • \r\n\t\t\t *
  • **left**: distance to the left content edge of viewport element
  • \r\n\t\t\t *
  • **right**: distance to the right content edge of viewport element
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tviewportOffset: function (elem, useDocument, includePadding) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\t\t\t\tincludePadding = includePadding !== false ? true : false;\r\n\r\n\t\t\t\tvar elemBCR = elem.getBoundingClientRect();\r\n\t\t\t\tvar offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};\r\n\r\n\t\t\t\tvar offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);\r\n\t\t\t\tvar offsetParentBCR = offsetParent.getBoundingClientRect();\r\n\r\n\t\t\t\toffsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;\r\n\t\t\t\toffsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;\r\n\t\t\t\tif (offsetParent === $document[0].documentElement) {\r\n\t\t\t\t\toffsetBCR.top += $window.pageYOffset;\r\n\t\t\t\t\toffsetBCR.left += $window.pageXOffset;\r\n\t\t\t\t}\r\n\t\t\t\toffsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;\r\n\t\t\t\toffsetBCR.right = offsetBCR.left + offsetParent.clientWidth;\r\n\r\n\t\t\t\tif (includePadding) {\r\n\t\t\t\t\tvar offsetParentStyle = $window.getComputedStyle(offsetParent);\r\n\t\t\t\t\toffsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);\r\n\t\t\t\t\toffsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);\r\n\t\t\t\t\toffsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);\r\n\t\t\t\t\toffsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttop: Math.round(elemBCR.top - offsetBCR.top),\r\n\t\t\t\t\tbottom: Math.round(offsetBCR.bottom - elemBCR.bottom),\r\n\t\t\t\t\tleft: Math.round(elemBCR.left - offsetBCR.left),\r\n\t\t\t\t\tright: Math.round(offsetBCR.right - elemBCR.right)\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides an array of placement values parsed from a placement string.\r\n\t\t\t * Along with the 'auto' indicator, supported placement strings are:\r\n\t\t\t *
    \r\n\t\t\t *
  • top: element on top, horizontally centered on host element.
  • \r\n\t\t\t *
  • top-left: element on top, left edge aligned with host element left edge.
  • \r\n\t\t\t *
  • top-right: element on top, lerightft edge aligned with host element right edge.
  • \r\n\t\t\t *
  • bottom: element on bottom, horizontally centered on host element.
  • \r\n\t\t\t *
  • bottom-left: element on bottom, left edge aligned with host element left edge.
  • \r\n\t\t\t *
  • bottom-right: element on bottom, right edge aligned with host element right edge.
  • \r\n\t\t\t *
  • left: element on left, vertically centered on host element.
  • \r\n\t\t\t *
  • left-top: element on left, top edge aligned with host element top edge.
  • \r\n\t\t\t *
  • left-bottom: element on left, bottom edge aligned with host element bottom edge.
  • \r\n\t\t\t *
  • right: element on right, vertically centered on host element.
  • \r\n\t\t\t *
  • right-top: element on right, top edge aligned with host element top edge.
  • \r\n\t\t\t *
  • right-bottom: element on right, bottom edge aligned with host element bottom edge.
  • \r\n\t\t\t *
\r\n\t\t\t * A placement string with an 'auto' indicator is expected to be\r\n\t\t\t * space separated from the placement, i.e: 'auto bottom-left' If\r\n\t\t\t * the primary and secondary placement values do not match 'top,\r\n\t\t\t * bottom, left, right' then 'top' will be the primary placement and\r\n\t\t\t * 'center' will be the secondary placement. If 'auto' is passed, true\r\n\t\t\t * will be returned as the 3rd value of the array.\r\n\t\t\t *\r\n\t\t\t * @param {string} placement - The placement string to parse.\r\n\t\t\t *\r\n\t\t\t * @returns {array} An array with the following values\r\n\t\t\t *
    \r\n\t\t\t *
  • **[0]**: The primary placement.
  • \r\n\t\t\t *
  • **[1]**: The secondary placement.
  • \r\n\t\t\t *
  • **[2]**: If auto is passed: true, else undefined.
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tparsePlacement: function (placement) {\r\n\t\t\t\tvar autoPlace = PLACEMENT_REGEX.auto.test(placement);\r\n\t\t\t\tif (autoPlace) {\r\n\t\t\t\t\tplacement = placement.replace(PLACEMENT_REGEX.auto, '');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tplacement = placement.split('-');\r\n\r\n\t\t\t\tplacement[0] = placement[0] || 'top';\r\n\t\t\t\tif (!PLACEMENT_REGEX.primary.test(placement[0])) {\r\n\t\t\t\t\tplacement[0] = 'top';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tplacement[1] = placement[1] || 'center';\r\n\t\t\t\tif (!PLACEMENT_REGEX.secondary.test(placement[1])) {\r\n\t\t\t\t\tplacement[1] = 'center';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (autoPlace) {\r\n\t\t\t\t\tplacement[2] = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tplacement[2] = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn placement;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides coordinates for an element to be positioned relative to\r\n\t\t\t * another element. Passing 'auto' as part of the placement parameter\r\n\t\t\t * will enable smart placement - where the element fits. i.e:\r\n\t\t\t * 'auto left-top' will check to see if there is enough space to the left\r\n\t\t\t * of the hostElem to fit the targetElem, if not place right (same for secondary\r\n\t\t\t * top placement). Available space is calculated using the viewportOffset\r\n\t\t\t * function.\r\n\t\t\t *\r\n\t\t\t * @param {element} hostElem - The element to position against.\r\n\t\t\t * @param {element} targetElem - The element to position.\r\n\t\t\t * @param {string=} [placement=top] - The placement for the targetElem,\r\n\t\t\t * default is 'top'. 'center' is assumed as secondary placement for\r\n\t\t\t * 'top', 'left', 'right', and 'bottom' placements. Available placements are:\r\n\t\t\t *
    \r\n\t\t\t *
  • top
  • \r\n\t\t\t *
  • top-right
  • \r\n\t\t\t *
  • top-left
  • \r\n\t\t\t *
  • bottom
  • \r\n\t\t\t *
  • bottom-left
  • \r\n\t\t\t *
  • bottom-right
  • \r\n\t\t\t *
  • left
  • \r\n\t\t\t *
  • left-top
  • \r\n\t\t\t *
  • left-bottom
  • \r\n\t\t\t *
  • right
  • \r\n\t\t\t *
  • right-top
  • \r\n\t\t\t *
  • right-bottom
  • \r\n\t\t\t *
\r\n\t\t\t * @param {boolean=} [appendToBody=false] - Should the top and left values returned\r\n\t\t\t * be calculated from the body element, default is false.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **top**: Value for targetElem top.
  • \r\n\t\t\t *
  • **left**: Value for targetElem left.
  • \r\n\t\t\t *
  • **placement**: The resolved placement.
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tpositionElements: function (hostElem, targetElem, placement, appendToBody) {\r\n\t\t\t\thostElem = this.getRawNode(hostElem);\r\n\t\t\t\ttargetElem = this.getRawNode(targetElem);\r\n\r\n\t\t\t\t// need to read from prop to support tests.\r\n\t\t\t\tvar targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');\r\n\t\t\t\tvar targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');\r\n\r\n\t\t\t\tplacement = this.parsePlacement(placement);\r\n\r\n\t\t\t\tvar hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);\r\n\t\t\t\tvar targetElemPos = {top: 0, left: 0, placement: ''};\r\n\r\n\t\t\t\tif (placement[2]) {\r\n\t\t\t\t\tvar viewportOffset = this.viewportOffset(hostElem, appendToBody);\r\n\r\n\t\t\t\t\tvar targetElemStyle = $window.getComputedStyle(targetElem);\r\n\t\t\t\t\tvar adjustedSize = {\r\n\t\t\t\t\t\twidth: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),\r\n\t\t\t\t\t\theight: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tplacement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :\r\n\t\t\t\t\t\tplacement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :\r\n\t\t\t\t\t\t\tplacement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :\r\n\t\t\t\t\t\t\t\tplacement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :\r\n\t\t\t\t\t\t\t\t\tplacement[0];\r\n\r\n\t\t\t\t\tplacement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :\r\n\t\t\t\t\t\tplacement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :\r\n\t\t\t\t\t\t\tplacement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :\r\n\t\t\t\t\t\t\t\tplacement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :\r\n\t\t\t\t\t\t\t\t\tplacement[1];\r\n\r\n\t\t\t\t\tif (placement[1] === 'center') {\r\n\t\t\t\t\t\tif (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n\t\t\t\t\t\t\tvar xOverflow = hostElemPos.width / 2 - targetWidth / 2;\r\n\t\t\t\t\t\t\tif (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {\r\n\t\t\t\t\t\t\t\tplacement[1] = 'left';\r\n\t\t\t\t\t\t\t} else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {\r\n\t\t\t\t\t\t\t\tplacement[1] = 'right';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;\r\n\t\t\t\t\t\t\tif (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {\r\n\t\t\t\t\t\t\t\tplacement[1] = 'top';\r\n\t\t\t\t\t\t\t} else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {\r\n\t\t\t\t\t\t\t\tplacement[1] = 'bottom';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tswitch (placement[0]) {\r\n\t\t\t\t\tcase 'top':\r\n\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top - targetHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top + hostElemPos.height;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left - targetWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left + hostElemPos.width;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tswitch (placement[1]) {\r\n\t\t\t\t\tcase 'top':\r\n\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'center':\r\n\t\t\t\t\t\tif (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n\t\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttargetElemPos.top = Math.round(targetElemPos.top);\r\n\t\t\t\ttargetElemPos.left = Math.round(targetElemPos.left);\r\n\t\t\t\ttargetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];\r\n\r\n\t\t\t\treturn targetElemPos;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides a way for positioning tooltip & dropdown\r\n\t\t\t * arrows when using placement options beyond the standard\r\n\t\t\t * left, right, top, or bottom.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The tooltip/dropdown element.\r\n\t\t\t * @param {string} placement - The placement for the elem.\r\n\t\t\t */\r\n\t\t\tpositionArrow: function (elem, placement) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar innerElem = elem.querySelector('.tooltip-inner, .popover-inner');\r\n\t\t\t\tif (!innerElem) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar isTooltip = angular.element(innerElem).hasClass('tooltip-inner');\r\n\r\n\t\t\t\tvar arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');\r\n\t\t\t\tif (!arrowElem) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar arrowCss = {\r\n\t\t\t\t\ttop: '',\r\n\t\t\t\t\tbottom: '',\r\n\t\t\t\t\tleft: '',\r\n\t\t\t\t\tright: ''\r\n\t\t\t\t};\r\n\r\n\t\t\t\tplacement = this.parsePlacement(placement);\r\n\t\t\t\tif (placement[1] === 'center') {\r\n\t\t\t\t\t// no adjustment necessary - just reset styles\r\n\t\t\t\t\tangular.element(arrowElem).css(arrowCss);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar borderProp = 'border-' + placement[0] + '-width';\r\n\t\t\t\tvar borderWidth = $window.getComputedStyle(arrowElem)[borderProp];\r\n\r\n\t\t\t\tvar borderRadiusProp = 'border-';\r\n\t\t\t\tif (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n\t\t\t\t\tborderRadiusProp += placement[0] + '-' + placement[1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tborderRadiusProp += placement[1] + '-' + placement[0];\r\n\t\t\t\t}\r\n\t\t\t\tborderRadiusProp += '-radius';\r\n\t\t\t\tvar borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];\r\n\r\n\t\t\t\tswitch (placement[0]) {\r\n\t\t\t\t\tcase 'top':\r\n\t\t\t\t\t\tarrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t\tarrowCss.top = isTooltip ? '0' : '-' + borderWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\tarrowCss.right = isTooltip ? '0' : '-' + borderWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\tarrowCss.left = isTooltip ? '0' : '-' + borderWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tarrowCss[placement[1]] = borderRadius;\r\n\r\n\t\t\t\tangular.element(arrowElem).css(arrowCss);\r\n\t\t\t}\r\n\t\t};\r\n\t}]);\r\nangular.module('ui.bootstrap.typeahead').run(function () {\r\n\t!angular.$$csp().noInlineStyle && !angular.$$uibTypeaheadCss && angular.element(document).find('head').prepend('');\r\n\tangular.$$uibTypeaheadCss = true;\r\n});\r\nangular.module('ui.bootstrap.position').run(function () {\r\n\t!angular.$$csp().noInlineStyle && !angular.$$uibPositionCss && angular.element(document).find('head').prepend('');\r\n\tangular.$$uibPositionCss = true;\r\n});\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('uiSelectRequired', ['validationService',\r\n\t\tfunction (validationService) {\r\n\r\n\t\t\treturn {\r\n\t\t\t\trequire: 'ngModel',\r\n\t\t\t\tlink: function (scope, element, attrs, ctrl) {\r\n\r\n\t\t\t\t\tvar formIsSubmitted = false;\r\n\r\n\t\t\t\t\tscope.$on('broadcast-field-errors', function () {\r\n\t\t\t\t\t\tformIsSubmitted = true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tscope.$on('reset-field-errors', function () {\r\n\t\t\t\t\t\tformIsSubmitted = true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tctrl.$validators.uiSelectRequired = function (modelValue, viewValue) {\r\n\t\t\t\t\t\tif (!modelValue || !modelValue.$select)\r\n\t\t\t\t\t\t\treturn true;\r\n\r\n\t\t\t\t\t\tvar value = ( modelValue.$select ) ? modelValue.$select.selected : null;\r\n\t\t\t\t\t\tvar valid = value !== undefined;\r\n\t\t\t\t\t\tvalidationService.validateInput(element, ctrl, attrs.labelKey);\r\n\r\n\t\t\t\t\t\tif (valid) {\r\n\t\t\t\t\t\t\tif (ctrl.$error.required)\r\n\t\t\t\t\t\t\t\tdelete ctrl.$error.required;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tctrl.$error.required = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (ctrl.$error.uiSelectRequired)\r\n\t\t\t\t\t\t\tdelete ctrl.$error.uiSelectRequired;\r\n\r\n\t\t\t\t\t\tvar parent = element.parents('div.ctrl-holder');\r\n\t\t\t\t\t\tif (!parent || !parent[0]) return;\r\n\t\t\t\t\t\tparent = $(parent).first();\r\n\r\n\t\t\t\t\t\tif (valid) {\r\n\t\t\t\t\t\t\tparent.removeClass('is-error');\r\n\t\t\t\t\t\t} else if (ctrl.$dirty || formIsSubmitted) {\r\n\t\t\t\t\t\t\tparent.addClass('is-error');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn valid;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tscope.$watch(ctrl.$validators.uiSelectRequired);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}])\r\n})();\r\n\nangular.module(\"qbePortal\").controller(\"BikeFormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteOptions\",\r\n\t\"paymentService\",\r\n\t\"quoteModelFactory\",\r\n\t\"dynamicRouter\",\r\n\t\"portalServiceWrapper\",\r\n\t\"MAService\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"$q\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"quoteRequestRepository\",\r\n\t\"tokenTimeoutService\",\r\n\t\"$compile\",\r\n\t\"smartLinkService\",\r\n\t\"campaignService\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteOptions,\r\n\t\tpaymentService,\r\n\t\tquoteModelFactory,\r\n\t\tdynamicRouter,\r\n\t\tportalServiceWrapper,\r\n\t\tMAService,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$q,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository,\r\n\t\ttokenTimeoutService,\r\n\t\t$compile,\r\n\t\tsmartLinkService,\r\n\t\tcampaignService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tstorage.removeItem(\"policy-date-input\");\r\n\r\n\t\t\tvar stepConditions = {\r\n\t\t\t\t\"bike.payment\": function () {\r\n\t\t\t\t\treturn $state.$current.name != \"bike.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"bike.done\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"bike.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"bike.policy-start-date\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"bike.policy-start-date\";\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t$ctrl.elementName = \"Form Controller\";\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sideBarEmail = null;\r\n\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t$ctrl.saveOnExit = false;\r\n\t\t$ctrl.smartLink = null;\r\n\r\n\t\t$window.onbeforeunload = function (event) {\r\n\t\t\texitSaveQuote();\r\n\t\t\tif ($ctrl.saveOnExit) {\r\n\t\t\t\t$rootScope.$digest();\r\n\t\t\t\treturn \"Are you sure you want to leave?\";\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"session-save-quote\", exitSaveQuote);\r\n\r\n\t\tfunction exitSaveQuote() {\r\n\t\t\tvar emailAddress = angular\r\n\t\t\t\t.element(\"div\")\r\n\t\t\t\t.find(\"[label-key=yourEmailAddress]\")\r\n\t\t\t\t.val();\r\n\r\n\t\t\tif (dynamicRouter.getPageTitle() != \"Payment\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.quoteModel.email != null ||\r\n\t\t\t\t\t$ctrl.sideBarEmail != null ||\r\n\t\t\t\t\temailAddress != \"\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tif ($ctrl.quoteModel && $ctrl.quoteModel.quoteResult) {\r\n\t\t\t\t\t\t$ctrl.saveOnExit = true;\r\n\t\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\t\tvar paymentFrequency = \"everyyear\";\r\n\r\n\t\t\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\t\t\t\t\tquote: \"true\",\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} else $rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\treturn {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tbikeForm: {\r\n\t\t\t\t\tgetStarted: {\r\n\t\t\t\t\t\tpolicyStartDate: moment()\r\n\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\t\t\tpersonOrCompany: \"person\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tinsuredExcessValue: {\r\n\t\t\t\t\t\tthirdPartyOrThirdPartyFireAndTheft: \"standard\",\r\n\t\t\t\t\t\tcomprehensivePref: \"market\",\r\n\t\t\t\t\t\tvoluntaryMotorcycleExcess: 0,\r\n\t\t\t\t\t\texcess: 0,\r\n\t\t\t\t\t\tflexiExcess: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\tpaymentForm: {\r\n\t\t\t\t\tpaymentDetails: {\r\n\t\t\t\t\t\tpaymentOptions: \"yearly\",\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalidate-quotes\", invalidatePreviousQuote);\r\n\r\n\t\tfunction invalidatePreviousQuote() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tstorage.removeItem(\"policy-address\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to submit the form\r\n\t\t */\r\n\t\t//hadles form submit from child elements\r\n\t\t$scope.$on(\"form-submit\", function (event, formName) {\r\n\t\t\t$ctrl.submit($scope[formName]);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to save the form\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-save-quote\", function (event, data) {\r\n\t\t\t$ctrl.sideBarEmail = data;\r\n\t\t\t$ctrl.save();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to assign the email address\r\n\t\t */\r\n\t\t $scope.$on(\"sidebar-assign-mail\", function (event, data) {\r\n\t\t\tif (data != \"\") $ctrl.sideBarEmail = data;\r\n\t\t});\r\n\r\n\t\tfunction requote(form) {\r\n\t\t\tvar isValid = !form || form.$valid;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\t\r\n\t\t\tif (isValid) {\t\t\t\t\t\t\t\t\r\n\t\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tgetRequote(formData, null, function (resp) {\r\n\t\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tdisplayFormErrors();\r\n\t\t\t}\r\n\t\t}\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, form) {\t\t\t\r\n\t\t\trequote(form);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbFormSection.directive to move to a page\r\n\t\t */\r\n\t\t$scope.$on(\"moveToPage\", function (event, page) {\r\n\t\t\t$ctrl.moveToPage(page);\r\n\t\t});\r\n\r\n\t\tfunction prepopulateRetrievedQuote() {\r\n\t\t\tif ($stateParams.quoteNo && $stateParams.email) {\r\n\t\t\t\tgtmService.trackEvent(\"retrieve-quote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.retrieveSavedQuote(\r\n\t\t\t\t\t\t$stateParams.quoteNo,\r\n\t\t\t\t\t\t$stateParams.email\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (transformedQuote) {\r\n\t\t\t\t\t\t$q.all([\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshAddress(\r\n\t\t\t\t\t\t\t\ttransformedQuote.address\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshVehicleDetails(\r\n\t\t\t\t\t\t\t\ttransformedQuote.motorcycleInfo.vgiId,\r\n\t\t\t\t\t\t\t\tstorage.getItem('policy-start-date'))\r\n\t\t\t\t\t\t]).then(function (resps) {\r\n\t\t\t\t\t\t\tvar bikeFormData = ($ctrl.formData.bikeForm = transformedQuote);\r\n\t\t\t\t\t\t\tvar serviceResponse = storage.getItem(\r\n\t\t\t\t\t\t\t\t\"service-response\"\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"policy-address\",\r\n\t\t\t\t\t\t\t\tserviceResponse.quote.policyAddress\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (!bikeFormData.aboutYourBike)\r\n\t\t\t\t\t\t\t\tbikeFormData.aboutYourBike = {};\r\n\t\t\t\t\t\t\tbikeFormData.aboutYourBike.address = resps[0].data;\r\n\t\t\t\t\t\t\tuserInputRepository.update($ctrl.formData);\r\n\t\t\t\t\t\t\tstorage.setItem(\"retrieve\", true);\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tmoment()\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\") >\r\n\t\t\t\t\t\t\t\tmoment(serviceResponse.quote.periodStartDate)\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\")\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\t\"policy-date-input\",\r\n\t\t\t\t\t\t\t\t\t$ctrl.formData\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"bike.policy-start-date\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"bike.bike\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tvar expiredQuote = storage.getItem(\"expired-quote\");\r\n\t\t\t\t\t\tif (expiredQuote.displayStatus == \"Expired\") {\r\n\t\t\t\t\t\t\tstorage.removeItem(\"expired-quote\");\r\n\t\t\t\t\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t\t\t\t\twindow.qbe.fieldLabels.expiredQuoteRedirect\r\n\t\t\t\t\t\t\t\t\t.bikeExpired\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction applyPromoCodeThroughLink() {\r\n\t\t\tif ($stateParams.promotionalCode) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\t\t\t\tif (formData.bikeForm) {\r\n\t\t\t\t\tif (!formData.bikeForm.tellUsABitMore) {\r\n\t\t\t\t\t\tformData.bikeForm.tellUsABitMore = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tformData.bikeForm.tellUsABitMore.promotionalCode =\r\n\t\t\t\t\t\t$stateParams.promotionalCode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tif (formData.bikeForm && formData.bikeForm.insuredExcessValue) {\r\n\t\t\t\tif (formData.bikeForm.insuredExcessValue.excess > 0) {\r\n\t\t\t\t\tformData.bikeForm.insuredExcessValue.flexiExcess = \r\n\t\t\t\t\tformData.bikeForm.insuredExcessValue.excess - $ctrl.quoteModel.excess.standardExcess;\r\n\t\t\t\t}\t\t\t\t\t\r\n\t\t\t}\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.sideBarEmail != null) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.bikeForm.tellUsABitMore &&\r\n\t\t\t\t\tformData.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.bikeForm.tellUsABitMore.yourEmailAddress =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tformData.bikeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.bikeForm.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t}\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction displayFormErrors() {\r\n\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\tdisplayFormErrors();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgtmService.trackEvent(\"next\");\r\n\r\n\t\t\tsetDefaultContactValuesIfRequired();\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\t\r\n\t\t\t//send quote to decline when isRegistered is NO\r\n\t\t\tif (formData.bikeForm.aboutYourBike.isRegistered === false) {\r\n\t\t\t\t//decline quote\r\n\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\tstorage.clear();\r\n\t\t\t\tredirectToDecline(\"decline\", \"Policy Was Declined\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar quickQuote = getQuickQuote(formData, function (resp) {\r\n\t\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\t\t\t\t\r\n\t\t\t\tvar regoSearchDetails = serviceResponseRepository.getLastResponseFrom('regoSearch');\r\n\t\t\t\tif (regoSearchDetails && regoSearchDetails.goodRetailPrice === '0') {\r\n\t\t\t\t\tvar quickQuoteResultList = resp.data;\r\n\t\t\t\t\tif (quickQuoteResultList && quickQuoteResultList.length > 0) {\r\n\t\t\t\t\t\tvar quickQuoteResult = quickQuoteResultList[0];\r\n\t\t\t\t\t\tvar motorcycles = quickQuoteResult.motorcycles;\t\t\t\t\t\r\n\t\t\t\t\t\tif (motorcycles && motorcycles.length > 0) {\r\n\t\t\t\t\t\t\t//update goodRetailPrice when quickquote provided sumInsuredAmount\r\n\t\t\t\t\t\t\tregoSearchDetails.goodRetailPrice = motorcycles[0].sumInsuredAmount;\r\n\t\t\t\t\t\t\tserviceResponseRepository.update('regoSearch', regoSearchDetails);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t$rootScope.$broadcast(\"perform-ma-service\", \"next\");\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t});\r\n\r\n\t\t\tif (!quickQuote) {\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValuesIfRequired(formData) {\r\n\t\t\tvar contactValuesRequired = [\"bike.contact\"];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tcontactValuesRequired.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\tsetDefaultContactValues();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDeclineIfRequired(formData) {\r\n\t\t\tvar declineTestRequiredFor = [\r\n\t\t\t\t\"bike.riders\",\r\n\t\t\t\t\"bike.bike\",\r\n\t\t\t\t\"bike.quote\",\r\n\t\t\t];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tdeclineTestRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\ttestDecline(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDecline(formData) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar declineQuoteOptions = quoteOptions.getTestQuoteDeclineOptions(\r\n\t\t\t\t$state.$current.name\r\n\t\t\t);\r\n\t\t\t//test quote decline and then check embargo\r\n\t\t\tvar postcode = formData.bikeForm.aboutYourBike.address.postalCode;\r\n\t\t\tportalServiceWrapper.checkEmbargo(postcode, 'Bike')\r\n\t\t\t.then(function(resp) {\r\n\t\t\t\tif (resp) {\r\n\t\t\t\t\t//it is embargo\r\n\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\tstorage.clear();\t\r\n\t\t\t\t\tvar declineObj = {declineType: 'embargo'};\r\n\t\t\t\t\tredirectToDecline(declineObj, \"Policy Was Declined\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.testQuoteDecline(declineQuoteOptions)\r\n\t\t\t\t\t.catch(function (decline) {\r\n\t\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\t\tredirectToDecline(decline, \"Policy Was Declined\");\r\n\t\t\t\t\t});\t\r\n\t\t\t\t}\r\n\t\t\t});\t\t\t\t\t\t\t\t\r\n\t\t}\r\n\r\n\t\tfunction redirectToDecline(decline) {\r\n\t\t\tvar redirectPage = decline.declineType || \"decline\";\r\n\t\t\t$state.go(redirectPage, decline);\r\n\t\t}\r\n\r\n\t\tfunction saveQuoteIfRequired(formData) {\r\n\t\t\tsaveQuoteNotRequiredFor = [\"bike.bike\", \"bike.done\"];\r\n\t\t\tvar notRequired =\r\n\t\t\t\tsaveQuoteNotRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (!notRequired) {\r\n\t\t\t\tsaveQuote(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction triggerGoalCompleteQuoteIfRequired() {\r\n\t\t\tif ($state.$current.name == \"bike.done\") {\r\n\t\t\t\tvar userInputFromRepo = quoteRequestRepository.getUserInput();\r\n\t\t\t\tif (!userInputFromRepo || !userInputFromRepo.email) {\r\n\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\tquoteRequestRepository.update(formData);\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t\tportalServiceWrapper.triggerGoalCompleteQuote();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions =\r\n\t\t\t\tpage == \"payment\"\r\n\t\t\t\t\t? quoteOptions.getRequoteOptions(\"bike.payment\")\r\n\t\t\t\t\t: quoteOptions.getRequoteOptions();\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getQuickQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep(\r\n\t\t\t\t$state.current.name\r\n\t\t\t);\r\n\t\t\tif (quickQuoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\tquickQuoteOptions.permutations,\r\n\t\t\t\t\t\tquickQuoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tbroadcastError(err, \"getQuickQuote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction broadcastError(err, msg) {\r\n\t\t\t$rootScope.$broadcast(\"error\", {\r\n\t\t\t\terrorMessage: msg,\r\n\t\t\t\tresponse: err,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction saveQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t// If quoteId found and email found, triggerGoal service quote\r\n\t\t\t\t\tvar qr = quoteRequestRepository.getSaveQuoteRequest(paymentFrequency);\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t\tif (qr && qr.quoteID && qr.email) {\r\n\t\t\t\t\t\tportalServiceWrapper.triggerGoalSaveQuote();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tif (tokenTimeoutService.isSessionTimedout()) {\r\n\t\t\t\t\t\ttokenTimeoutService.handleTimeout();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbroadcastError(err, \"Save quote error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction proceedToNextStep(formData) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tsaveQuoteIfRequired(formData);\r\n\t\t\ttestDeclineIfRequired(formData);\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t}\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"bikeForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar maData = {\r\n\t\t\t\tstate: quoteModel ? quoteModel.state : null,\r\n\t\t\t\tpostCode: quoteModel ? quoteModel.postCode : null,\r\n\t\t\t\tcampaignCode: quoteModel ? quoteModel.campaignCode : null,\r\n\t\t\t\tnoClaimBonus: quoteModel ? quoteModel.noClaimBonus : null,\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult ? quoteResult.getAnnual() : null,\r\n\t\t\t\tmonthlyResult: quoteResult ? quoteResult.getMonthly() : null,\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\r\n\t\t\tif ($state.current.name == \"bike.done\") {\r\n\t\t\t\tmaData.inceptionDate = moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.address &&\r\n\t\t\t\tquoteModel.address.addressLine1\r\n\t\t\t) {\r\n\t\t\t\tmaData.address =\r\n\t\t\t\t\tquoteModel.address.addressLine1 +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\tquoteModel.address.city;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.gtmPolicyHolder &&\r\n\t\t\t\tquoteModel.gtmPolicyHolder.phoneNumber\r\n\t\t\t) {\r\n\t\t\t\tmaData.contactNumber = quoteModel.gtmPolicyHolder.phoneNumber;\r\n\t\t\t}\r\n\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\r\n\t\t// Payments\r\n\r\n\t\t/**\r\n\t\t * Scrolls a field into view when an error is clicked\r\n\t\t * @param {Object} error Error object with key `name`\r\n\t\t */\r\n\t\t$ctrl.showInView = function (error) {\r\n\t\t\t//console.log(error);\r\n\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]'));\r\n\t\t};\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * determines if a quote is available to enable save button.\r\n\t\t */\r\n\t\t$ctrl.isSaveButtonEnabled = function () {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\treturn formData.rapidEstimateUrl != null;\r\n\t\t};\r\n\r\n\t\t$ctrl.isQuoteAvailable = function () {\r\n\t\t\treturn quoteOptions.getSelectedQuoteResult() !== null;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\toverwritePromoCodeFromQueryString();\r\n\t\t\tvar currentPageName = $ctrl.state.current.name;\r\n\t\t\t$ctrl.displayBack =\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl != null ||\r\n\t\t\t\tcurrentPageName != \"bike.bike\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl &&\r\n\t\t\t\tcurrentPageName === \"bike.bike\"\r\n\t\t\t) {\r\n\t\t\t\tinvalidatePreviousQuote();\r\n\t\t\t}\r\n\t\t\ttriggerGoalCompleteQuoteIfRequired();\r\n\t\t\tprepopulateRetrievedQuote();\r\n\t\t\tapplyPromoCodeThroughLink();\r\n\t\t};\r\n\r\n\t\tfunction overwritePromoCodeFromQueryString() {\r\n\t\t\tvar promoCode = util.getQueryStringByName(\r\n\t\t\t\twindow.location,\r\n\t\t\t\t\"promotionalCode\"\r\n\t\t\t);\r\n\t\t\tif (promoCode) {\r\n\t\t\t\t$ctrl.formData.promotionalCode =\r\n\t\t\t\t\t$ctrl.formData.promotionalCode || {};\r\n\t\t\t\t$ctrl.formData.promotionalCode.promotionalCode = promoCode;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.initQuotePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tvar selectedCoverType = quoteOptions.getSelectedCoverType();\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.bikeForm;\r\n\r\n\t\t\t// getRequote(formData);\r\n\t\t\t$scope.$broadcast(\"requote\");\r\n\r\n\t\t\tif (!form.insuredExcessValue) form.insuredExcessValue = {};\r\n\r\n\t\t\tform.saveOnPremium = form.saveOnPremium || {};\r\n\t\t\tform.saveOnPremium.saveOnYourPremium = selectedCoverType.subType;\r\n\r\n\t\t\tif (selectedCoverType.superType == \"third_party\")\r\n\t\t\t\tform.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft =\r\n\t\t\t\t\tselectedCoverType.subType;\r\n\r\n\t\t\t$ctrl.formData.bikeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initContact = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tsetDefaultContactValues();\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValues() {\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.bikeForm,\r\n\t\t\t\tpostalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\t\tif (form.getStarted.personOrCompany === \"person\") {\r\n\t\t\t\tform.mainPolicyHolder = form.mainPolicyHolder || {};\r\n\t\t\t\tif (\r\n\t\t\t\t\tform.mainPolicyHolder.isMainRiderMainPolicyHolder !== false\r\n\t\t\t\t) {\r\n\t\t\t\t\tform.mainPolicyHolder.isMainRiderMainPolicyHolder = true;\r\n\t\t\t\t\tform.mainPolicyHolder.title =\r\n\t\t\t\t\t\tform.mainPolicyHolder.title ||\r\n\t\t\t\t\t\tform.rider.riders[0].person.title;\r\n\t\t\t\t\tform.mainPolicyHolder.firstName =\r\n\t\t\t\t\t\tform.rider.riders[0].person.firstName;\r\n\t\t\t\t\tform.mainPolicyHolder.lastName =\r\n\t\t\t\t\t\tform.rider.riders[0].person.lastName;\r\n\t\t\t\t\tform.mainPolicyHolder.gender =\r\n\t\t\t\t\t\tform.rider.riders[0].person.gender;\r\n\t\t\t\t\tform.mainPolicyHolder.dateOfBirth =\r\n\t\t\t\t\t\tform.rider.riders[0].person.dateOfBirth;\r\n\r\n\t\t\t\t\tform.mainPolicyHolder.threeYears_restrictedSuspendedDisqualifiedCancelled =\r\n\t\t\t\t\t\tform.rider.riders[0].threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\t\t\t\t\tform.mainPolicyHolder.threeYears_restrictedSuspendedDisqualifiedCancelledDetails =\r\n\t\t\t\t\t\tform.rider.riders[0].threeYears_restrictedSuspendedDisqualifiedCancelledDetails;\r\n\r\n\t\t\t\t\tform.mainPolicyHolder.threeYears_accidentsClaims =\r\n\t\t\t\t\t\tform.rider.riders[0].threeYears_accidentsClaims;\r\n\t\t\t\t\tform.mainPolicyHolder.threeYears_accidentsClaimsDetails =\r\n\t\t\t\t\t\tform.rider.riders[0].threeYears_accidentsClaimsDetails;\r\n\r\n\t\t\t\t\tform.mainPolicyHolder.fiveYears_chargedOrConvicted =\r\n\t\t\t\t\t\tform.rider.riders[0].fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tform.mainPolicyHolder.fiveYears_chargedOrConvictedDetails =\r\n\t\t\t\t\t\tform.rider.riders[0].fiveYears_chargedOrConvictedDetails;\r\n\r\n\t\t\t\t\tform.mainPolicyHolderContact =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact || {};\r\n\t\t\t\t\tform.mainPolicyHolderContact.postalOption =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalOption || true;\r\n\t\t\t\t\tform.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.emailAddress1 ||\r\n\t\t\t\t\t\tformData.email;\r\n\t\t\t\t\tform.mainPolicyHolderContact.primaryPhone =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.primaryPhone || \"mobile\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\t!!form.mainPolicyHolderContact &&\r\n\t\t\t\t\t!form.mainPolicyHolderContact.address\r\n\t\t\t\t) {\r\n\t\t\t\t\tform.mainPolicyHolderContact.address =\r\n\t\t\t\t\t\tform.aboutYourBike.address;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalOption = false;\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (form.getStarted.personOrCompany === \"company\") {\r\n\t\t\t\tform.aboutCompany = form.aboutCompany || {};\r\n\t\t\t\tform.aboutCompany.name = form.aboutCompany.name || \"\";\r\n\t\t\t\tform.aboutCompany.abn = form.aboutCompany.abn || \"\";\r\n\t\t\t\tform.aboutCompany.email = form.aboutCompany.email || \"\";\r\n\t\t\t\tform.aboutCompany.officePhone =\r\n\t\t\t\t\tform.aboutCompany.officePhone || \"\";\r\n\t\t\t\tform.aboutCompany.companyAddress =\r\n\t\t\t\t\tform.aboutCompany.companyAddress || undefined;\r\n\r\n\t\t\t\tform.companyContact = form.companyContact || {};\r\n\t\t\t\tform.companyContact.postalOption =\r\n\t\t\t\t\tform.companyContact.companyContactDetailsPostalOption ||\r\n\t\t\t\t\ttrue;\r\n\t\t\t\tform.companyContact.companyContactTitle =\r\n\t\t\t\t\tutil.capitalize(form.companyContact.companyContactTitle) ||\r\n\t\t\t\t\tform.rider.riders[0].person.title;\r\n\t\t\t\tform.companyContact.companyContactFirstName =\r\n\t\t\t\t\tform.companyContact.companyContactFirstName ||\r\n\t\t\t\t\tform.rider.riders[0].person.firstName;\r\n\t\t\t\tform.companyContact.companyContactLastName =\r\n\t\t\t\t\tform.companyContact.companyContactLastName ||\r\n\t\t\t\t\tform.rider.riders[0].person.lastName;\r\n\t\t\t\tform.companyContact.companyContactGender =\r\n\t\t\t\t\tparseGender(form.companyContact.companyContactGender) ||\r\n\t\t\t\t\tform.rider.riders[0].person.gender;\r\n\t\t\t\tform.companyContact.companyContactDateOfBirth =\r\n\t\t\t\t\tform.companyContact.companyContactDateOfBirth ||\r\n\t\t\t\t\tform.rider.riders[0].person.dateOfBirth;\r\n\t\t\t\tform.companyContact.companyContactDetailsAddress =\r\n\t\t\t\t\tform.companyContact.companyContactDetailsAddress ||\r\n\t\t\t\t\tform.aboutYourBike.address;\r\n\t\t\t\tform.companyContact.companyContactDetailsEmail =\r\n\t\t\t\t\tform.companyContact.companyContactDetailsEmail ||\r\n\t\t\t\t\tformData.email;\r\n\t\t\t\tform.companyContact.companyContactDetailsPostalAddress =\r\n\t\t\t\t\tform.companyContact.companyContactDetailsPostalAddress ||\r\n\t\t\t\t\tundefined;\r\n\t\t\t\tform.companyContact.primaryPhone =\r\n\t\t\t\t\tform.companyContact.primaryPhone || \"mobile\";\r\n\t\t\t\tform.companyContact.preferredNumber =\r\n\t\t\t\t\tform.companyContact.preferredNumber || \"\";\r\n\t\t\t\tform.companyContact.passwordQuestion = !!form.companyContact\r\n\t\t\t\t\t.enterAQuestion\r\n\t\t\t\t\t? \"customerCreatedQuestion\"\r\n\t\t\t\t\t: \"\" || \"\";\r\n\t\t\t\tform.companyContact.enterAQuestion =\r\n\t\t\t\t\tform.companyContact.enterAQuestion || \"\";\r\n\t\t\t\tform.companyContact.passwordAnswer =\r\n\t\t\t\t\tform.companyContact.passwordAnswer || \"\";\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.companyContact.companyContactDetailsAddress\r\n\t\t\t\t\t\t\t\t.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.companyContact.companyContactDetailsAddress\r\n\t\t\t\t\t\t\t\t.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.companyContact.postalOption = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.bikeForm = form;\r\n\t\t}\r\n\r\n\t\tfunction parseGender(gender) {\r\n\t\t\tif (gender === \"F\") {\r\n\t\t\t\treturn \"female\";\r\n\t\t\t} else if (gender === \"I\") {\r\n\t\t\t\treturn \"intersex\";\r\n\t\t\t} else return \"male\";\r\n\t\t}\r\n\r\n\t\tfunction constructDonePageViewModel() {\r\n\t\t\tvar done = {\r\n\t\t\t\tpolicyNumber: $stateParams.policyNumber,\r\n\t\t\t\taccountNumber: $stateParams.accountNumber,\r\n\t\t\t\tisAwaitingProcess: $stateParams.isAwaitingProcess,\r\n\t\t\t\tpolicyType: quoteOptions.getSelectedCoverType().label,\r\n\t\t\t\tpolicyStartDate: $ctrl.quoteModel.policyStartDate,\r\n\t\t\t\tshowYearMakeModelInSummary: false,\r\n\t\t\t\tsmartLinkURL: $window.qbe.fieldLabels.smartLink.url,\r\n\t\t\t\thashKey: $window.qbe.fieldLabels.smartLink.hashKey,\r\n\t\t\t\temail: $ctrl.quoteModel.email,\r\n\t\t\t\tdescription: \"Motorcycle Insurance\",\r\n\t\t\t\tproductRefs: \"Motorcycle Insurance\",\r\n\t\t\t};\r\n\r\n\t\t\tvar regoNumber = $ctrl.quoteModel.regoNumber || \"\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.quoteModel.bikeForm.tellUsYourRegoNumber &&\r\n\t\t\t\t$ctrl.quoteModel.bikeForm.tellUsYourRegoNumber.regoNumber\r\n\t\t\t) {\r\n\t\t\t\tdone.showYearMakeModelInSummary = true;\r\n\t\t\t}\r\n\r\n\t\t\tdone.regoNumber = regoNumber.toUpperCase();\r\n\r\n\t\t\tif ($ctrl.quoteModel.bikeForm.aboutYourBike.regoDetails) {\r\n\t\t\t\tvar year =\r\n\t\t\t\t\t\t$ctrl.quoteModel.bikeForm.aboutYourBike.regoDetails\r\n\t\t\t\t\t\t\t.modelYear,\r\n\t\t\t\t\tmake =\r\n\t\t\t\t\t\t$ctrl.quoteModel.bikeForm.aboutYourBike.regoDetails\r\n\t\t\t\t\t\t\t.make,\r\n\t\t\t\t\tmodel =\r\n\t\t\t\t\t\t$ctrl.quoteModel.bikeForm.aboutYourBike.regoDetails\r\n\t\t\t\t\t\t\t.model;\r\n\r\n\t\t\t\tdone.yearMakeModel = year + \" \" + make + \" \" + model;\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.quoteModel.bikeForm.mainPolicyHolder) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.bikeForm.mainPolicyHolder.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.bikeForm.mainPolicyHolder.lastName;\r\n\t\t\t} else if ($ctrl.quoteModel.bikeForm.companyContact) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.bikeForm.companyContact.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.bikeForm.companyContact.lastName;\r\n\t\t\t\tdone.email = $ctrl.quoteModel.bikeForm.companyContact.email;\r\n\t\t\t}\r\n\r\n\t\t\tdone.purchaseDate = moment()\r\n\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\treturn done;\r\n\t\t}\r\n\r\n\t\t$ctrl.initDonePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar done = storage.getItem(\"done\");\r\n\t\t\tif (!done || !done.policyNumber) {\r\n\t\t\t\tdone = constructDonePageViewModel();\r\n\t\t\t\t$ctrl.smartLink = smartLinkService.generateLink(done);\r\n\t\t\t\tgtmService.trackTransaction(\r\n\t\t\t\t\t$state.current,\r\n\t\t\t\t\tdone,\r\n\t\t\t\t\t$ctrl.quoteModel\r\n\t\t\t\t);\r\n\t\t\t\tperformMAServices(\"paid\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.storage.clear();\r\n\t\t\tstorage.setItem(\"done\", done);\r\n\t\t\tvar $columns = $(\".columns\").get(0);\r\n\t\t\t$columns.classList.remove(\"print-ready\");\r\n\t\t\t$ctrl.done = done;\r\n\t\t\t$ctrl.done.campaignSteps = {};\r\n\r\n\t\t\t// check if campaign code is valid\r\n\t\t\tif (\r\n\t\t\t\tquoteModel.quoteResult.response.isCampaignCodeValid ||\r\n\t\t\t\tquoteModel.quoteResult.response.isGiftCardApplied\r\n\t\t\t) {\r\n\t\t\t\t// get campaign next steps\r\n\t\t\t\t$ctrl.done.campaignSteps = campaignService.getCampaignConfig(\r\n\t\t\t\t\tquoteModel.quoteResult.response.campaignCode,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else $ctrl.done.campaignSteps.isCampaignCodeValid = false;\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"submit-feedback\", submitFeedback);\r\n\r\n\t\tfunction submitFeedback() {\r\n\t\t\tif ($ctrl.done.policyNumber != null && $ctrl.smartLink != null) {\r\n\t\t\t\twindow.open($ctrl.smartLink, \"_blank\");\r\n\t\t\t} else {\r\n\t\t\t\tvoid 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// TODO: fix this to not use timeout\r\n\t\tsetTimeout(function () {\r\n\t\t\tQBE.expandCollapse.init();\r\n\t\t}, 1000);\r\n\r\n\t\t$ctrl.clear = function () {\r\n\t\t\t$scope.$broadcast(\"clear\");\r\n\t\t};\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = $scope.bikeForm.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgetUserInput();\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", {\r\n\t\t\t\tmodal: \"saveQuote\",\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.moveToStep = function (step) {\r\n\t\t\t$state.go(dynamicRouter.getState(step));\r\n\t\t};\r\n\t\t$ctrl.moveToPage = function (page) {\r\n\t\t\t$state.go(page);\r\n\t\t};\r\n\t},\r\n]);\r\n\nangular.module('qbePortal.rapidEstimate.bike')\r\n\t.controller('BikeRapidEstimateController', [\r\n\t\t'$scope',\r\n\t\t'$state',\r\n\t\t'userInputRepository',\r\n\t\t'labelService',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteOptions',\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'gtmService',\r\n\t\t'$sce',\r\n\t\tfunction($scope, $state, userInputRepository, labelService, portalServiceWrapper, quoteOptions, util, serviceResponseRepository, gtmService, $sce) {\r\n\t\t\tvar vm = this;\r\n\t\t\tvm.formData = {};\r\n\t\t\tvm.promoCode = util.getQueryStringByName(window.location, 'promotionalCode') ;\r\n\t\t\tvoid 0 ; \r\n\t\t\tvm.elementName = 'Form Controller';\r\n\t\t\tvm.validationErrors = null;\r\n\t\t\tvm.sections = {};\r\n\r\n\t\t\tvm.initPage= function() {\r\n\t\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t\tvm.formData = userInputRepository.get({\r\n\t\t\t\t\tbikeForm: {\r\n\t\t\t\t\t\ttellUsMore: {\r\n\t\t\t\t\t\t\tpromotionalCode: vm.promoCode\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t\r\n\r\n\t\t\tvm.registerSection = function (name, init, getValueFn) {\r\n\t\t\t\tvm.sections[name] = getValueFn;\r\n\t\t\t}\r\n\r\n\t\t\t// Submit form to get quickQuote\r\n\t\t\tvm.submit = function(event, form) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tgtmService.trackEvent('rapid-estimate-submit') ;\r\n\r\n\t\t\t\tvm.showErrorSummary = false;\r\n\t\t\t\tisInvalid = form.$invalid;\r\n\r\n\t\t\t\tif (isInvalid) {\r\n\t\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t\tvm.showErrorSummary = true;\r\n\t\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\t\tscrollViewTo($('#combinedValidationListing')) ;\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$scope.$root.$broadcast('loading-animation-start');\r\n\r\n\t\t\t\t// Populate formData\r\n\t\t\t\tvar formData = {};\r\n\t\t\t\tfor (var key in this.sections) {\r\n\t\t\t\t\tformData[key] = this.sections[key]();\r\n\t\t\t\t}\r\n\t\t\t\tvar now = moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY');\r\n\t\t\t\tformData.bikeForm.getStarted = {\r\n\t\t\t\t\tpersonOrCompany: 'person',\r\n\t\t\t\t\tpolicyStartDate: now\r\n\t\t\t\t};\r\n\t\t\t\tformData.bikeForm.rider.riders = [];\r\n\t\t\t\tformData.bikeForm.rider.riders[0] = {\r\n\t\t\t\t\tperson: util.deepClone(formData.bikeForm.rider)\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(formData.bikeForm.tellUsMore) {\r\n\t\t\t\t\tformData.email = formData.bikeForm.tellUsMore.email;\r\n\t\t\t\t\tformData.bikeForm.promotionalCode = {\r\n\t\t\t\t\t\tpromotionalCode: formData.bikeForm.tellUsMore.promotionalCode\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep('rapidEstimate') ;\r\n\r\n\t\t\t\tportalServiceWrapper.getQuickQuote(quickQuoteOptions.permutations, quickQuoteOptions.rules)\r\n\t\t\t\t\t.then(function(resp) {\r\n\t\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t\tvar quoteResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\t\t\t\t\tserviceResponseRepository.update('rapidEstimate' , quoteResults ) ;\r\n\t\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\t\tformData: formData,\r\n\t\t\t\t\t\t\tresults : quoteResults,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\t\t\terrorMessage: 'getQuickQuote error',\r\n\t\t\t\t\t\t\tresponse: err\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t};\r\n\r\n\t\t\t/**\r\n\t\t\t * Scrolls a field into view when an error is clicked\r\n\t\t\t * @param {Object} error Error object with key `name`\r\n\t\t\t */\r\n\t\t\tvm.showInView = function (error) {\r\n\t\t\t\t//console.log(error);\r\n\t\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]')) ;\r\n\t\t\t}\r\n\r\n\t\t\tfunction scrollViewTo($element) {\r\n\t\t\t\tvar offset = $element.offset();\r\n\t\t\t\tif ( offset ) {\r\n\t\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.getSectionDescriptionFor = function (fieldName) {\r\n\t\t\t\treturn $sce.trustAsHtml(labelService.getSectionDescriptionFor(fieldName));\r\n\t\t\t}\r\n\r\n\t\t\t// Scroll to estimates once they're loaded\r\n\t\t\t$scope.$root.$on('show-rapid-estimates', function() {\r\n\t\t\t\tvm.showRapidEstimatesPanel = true;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$root.$on('rapid-estimates-panel-initialised', function() {\r\n\t\t \t\tvar rapidEstimateResults = serviceResponseRepository.getLastResponseFrom('rapidEstimate') ;\r\n\t\t\t\tif ( rapidEstimateResults ) {\r\n\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\tresults: rapidEstimateResults,\r\n\t\t\t\t\t\tformData: userInputRepository.get()\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t]);\r\n\nangular.module(\"qbePortal\").controller(\"CaravanFormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteOptions\",\r\n\t\"paymentService\",\r\n\t\"quoteModelFactory\",\r\n\t\"dynamicRouter\",\r\n\t\"portalServiceWrapper\",\r\n\t\"MAService\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"$q\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"quoteRequestRepository\",\r\n\t\"tokenTimeoutService\",\r\n\t\"$compile\",\r\n\t\"smartLinkService\",\r\n\t\"campaignService\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteOptions,\r\n\t\tpaymentService,\r\n\t\tquoteModelFactory,\r\n\t\tdynamicRouter,\r\n\t\tportalServiceWrapper,\r\n\t\tMAService,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$q,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository,\r\n\t\ttokenTimeoutService,\r\n\t\t$compile,\r\n\t\tsmartLinkService,\r\n\t\tcampaignService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tstorage.removeItem(\"policy-date-input\");\r\n\r\n\t\t\tvar stepConditions = {\r\n\t\t\t\t\"caravan.payment\": function () {\r\n\t\t\t\t\treturn $state.$current.name != \"caravan.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"caravan.done\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"caravan.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"caravan.policy-start-date\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"caravan.policy-start-date\";\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t$ctrl.elementName = \"Form Controller\";\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sideBarEmail = null;\r\n\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t$ctrl.saveOnExit = false;\r\n\t\t$ctrl.smartLink = null;\r\n\t\t$ctrl.goToNextStep = true;\r\n\r\n\t\t$window.onbeforeunload = function (event) {\r\n\t\t\texitSaveQuote();\r\n\t\t\tif ($ctrl.saveOnExit) {\r\n\t\t\t\t$rootScope.$digest();\r\n\t\t\t\treturn \"Are you sure you want to leave?\";\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"session-save-quote\", exitSaveQuote);\r\n\r\n\t\tfunction exitSaveQuote() {\r\n\t\t\tvar emailAddress = angular\r\n\t\t\t\t.element(\"div\")\r\n\t\t\t\t.find(\"[label-key=yourEmailAddress]\")\r\n\t\t\t\t.val();\r\n\r\n\t\t\tif (dynamicRouter.getPageTitle() != \"Payment\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.quoteModel.email != null ||\r\n\t\t\t\t\t$ctrl.sideBarEmail != null ||\r\n\t\t\t\t\temailAddress != \"\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tif ($ctrl.quoteModel && $ctrl.quoteModel.quoteResult) {\r\n\t\t\t\t\t\t$ctrl.saveOnExit = true;\r\n\t\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\t\tvar paymentFrequency = \"everyyear\";\r\n\r\n\t\t\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\t\t\t\t\tquote: \"true\",\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} else $rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tcaravanForm: {\r\n\t\t\t\t\tgetStarted: {\r\n\t\t\t\t\t\tpolicyStartDate: moment()\r\n\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\t\t},\r\n\t\t\t\t\taboutYourCaravan: {\r\n\t\t\t\t\t\tvehicleType: \"caravan\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdiscountOptions: {\r\n\t\t\t\t\t\tdiscountLayup: false,\r\n\t\t\t\t\t\tonSiteDiscount: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsaveOnPremium: {\r\n\t\t\t\t\t\tsaveOnYourPremium: \"standard\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmainPolicyHolderContact: {\r\n\t\t\t\t\t\tprimaryPhone: \"mobile\",\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t};\r\n\r\n\t\t\tvar defaultStateExcess = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\t\t$ctrl.quoteModel.state\r\n\t\t\t);\r\n\t\t\tif (defaultStateExcess != null) {\r\n\t\t\t\tvar tempObj = {\r\n\t\t\t\t\tcaravanForm: {\r\n\t\t\t\t\t\texcess: {\r\n\t\t\t\t\t\t\tvoluntaryVehicleExcess: defaultStateExcess,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tdefaultValues = Object.extend(defaultValues, tempObj);\r\n\t\t\t}\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalidate-quotes\", invalidatePreviousQuote);\r\n\r\n\t\tfunction invalidatePreviousQuote() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tstorage.removeItem(\"policy-address\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to submit the form\r\n\t\t */\r\n\t\t//hadles form submit from child elements\r\n\t\t$scope.$on(\"form-submit\", function (event, formName) {\r\n\t\t\t$ctrl.submit($scope[formName]);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to save the form\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-save-quote\", function (event, data) {\r\n\t\t\t$ctrl.sideBarEmail = data;\r\n\t\t\t$ctrl.save();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to assign the email address\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-assign-mail\", function (event, data) {\r\n\t\t\tif (data != \"\") $ctrl.sideBarEmail = data;\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, form) {\r\n\t\t\tvar isValid = !form || form.$valid;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tif (isValid) {\r\n\t\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tgetRequote(formData, null, function (resp) {\r\n\t\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tdisplayFormErrors();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbFormSection.directive to move to a page\r\n\t\t */\r\n\t\t$scope.$on(\"moveToPage\", function (event, page) {\r\n\t\t\t$ctrl.moveToPage(page);\r\n\t\t});\r\n\r\n\t\tfunction prepopulateRetrievedQuote() {\r\n\t\t\tif ($stateParams.quoteNo && $stateParams.email) {\r\n\t\t\t\tgtmService.trackEvent(\"retrieve-quote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.retrieveSavedQuote(\r\n\t\t\t\t\t\t$stateParams.quoteNo,\r\n\t\t\t\t\t\t$stateParams.email\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (transformedQuote) {\r\n\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t\t$q.all([\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshAddress(\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCaravan.address\r\n\t\t\t\t\t\t\t),\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshCaravanDetails(\r\n\t\t\t\t\t\t\t\ttransformedQuote.caravanInfo.vgiId,\r\n\t\t\t\t\t\t\t\tstorage.getItem('policy-start-date'))\r\n\t\t\t\t\t\t]).then(function (resps) {\r\n\t\t\t\t\t\t\tvar caravanFormData = ($ctrl.formData.caravanForm = transformedQuote);\r\n\t\t\t\t\t\t\tvar serviceResponse = storage.getItem(\r\n\t\t\t\t\t\t\t\t\"service-response\"\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t$ctrl.formData.email = $stateParams.email;\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"policy-address\",\r\n\t\t\t\t\t\t\t\tserviceResponse.quote.policyAddress\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (!caravanFormData.aboutYourCaravan)\r\n\t\t\t\t\t\t\t\tcaravanFormData.aboutYourCaravan = {};\r\n\t\t\t\t\t\t\tcaravanFormData.aboutYourCaravan.address =\r\n\t\t\t\t\t\t\t\tresps[0].data;\r\n\t\t\t\t\t\t\tuserInputRepository.update($ctrl.formData);\r\n\t\t\t\t\t\t\tstorage.setItem(\"retrieve\", true);\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tmoment()\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\") >\r\n\t\t\t\t\t\t\t\tmoment(serviceResponse.quote.periodStartDate)\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\")\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\t\"policy-date-input\",\r\n\t\t\t\t\t\t\t\t\t$ctrl.formData\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"caravan.policy-start-date\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"caravan.caravan\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tvar expiredQuote = storage.getItem(\"expired-quote\");\r\n\t\t\t\t\t\tif (expiredQuote.displayStatus == \"Expired\") {\r\n\t\t\t\t\t\t\tstorage.removeItem(\"expired-quote\");\r\n\t\t\t\t\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t\t\t\t\twindow.qbe.fieldLabels.expiredQuoteRedirect\r\n\t\t\t\t\t\t\t\t\t.caravanExpired\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction applyPromoCodeThroughLink() {\r\n\t\t\tif ($stateParams.promotionalCode) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\t\t\t\tif (formData.caravanForm) {\r\n\t\t\t\t\tif (!formData.caravanForm.tellUsABitMore) {\r\n\t\t\t\t\t\tformData.caravanForm.tellUsABitMore = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tformData.caravanForm.tellUsABitMore.promotionalCode =\r\n\t\t\t\t\t\t$stateParams.promotionalCode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.sideBarEmail != null) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.caravanForm.tellUsABitMore &&\r\n\t\t\t\t\tformData.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.caravanForm.tellUsABitMore.yourEmailAddress =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.caravanForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tformData.caravanForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.caravanForm.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t}\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction displayFormErrors() {\r\n\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\tdisplayFormErrors();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgtmService.trackEvent(\"next\");\r\n\r\n\t\t\tsetDefaultContactValuesIfRequired();\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tvar quickQuote = getQuickQuote(formData, function () {\r\n\t\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t\t\t$rootScope.$broadcast(\"perform-ma-service\", \"next\");\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t});\r\n\r\n\t\t\tif (!quickQuote) {\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValuesIfRequired(formData) {\r\n\t\t\tvar contactValuesRequired = [\"caravan.contact\"];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tcontactValuesRequired.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\tsetDefaultContactValues();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDeclineIfRequired(formData) {\r\n\t\t\tvar declineTestRequiredFor = [\r\n\t\t\t\t\"caravan.drivers\",\r\n\t\t\t\t\"caravan.caravan\",\r\n\t\t\t\t\"caravan.quote\",\r\n\t\t\t\t\"caravan.contact\",\r\n\t\t\t];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tdeclineTestRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\ttestDecline(formData, nextStep);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDecline(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\t\t\t\t\t\r\n\t\t\t\r\n\t\t\tvar declineQuoteOptions = quoteOptions.getTestQuoteDeclineOptions(\r\n\t\t\t\t$state.$current.name\r\n\t\t\t);\r\n\t\t\tvar postcode = formData.caravanForm.aboutYourCaravan.address.postalCode;\r\n\t\t\tportalServiceWrapper.checkEmbargo(postcode, 'Caravan')\r\n\t\t\t.then(function(resp) {\r\n\t\t\t\tif (resp) {\r\n\t\t\t\t\t//it is embargo\r\n\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\tvar declineObj = {declineType: 'embargo'};\r\n\t\t\t\t\tredirectToDecline(declineObj, \"Policy Was Declined\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.testQuoteDecline(declineQuoteOptions)\r\n\t\t\t\t\t.then(function (resp) {\t\t\t\t\t\t\r\n\t\t\t\t\t\t// post testQuoteDecline\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tangular.isDefined(\r\n\t\t\t\t\t\t\t\tresp.data[0].caravans[0].isEligibleforSDExemption\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"stamp-duty\",\r\n\t\t\t\t\t\t\t\tresp.data[0].caravans[0].isEligibleforSDExemption\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstorage.setItem(\"stamp-duty\", false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ($ctrl.goToNextStep) callback();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (decline) {\r\n\t\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\t\tredirectToDecline(decline, \"Policy Was Declined\");\r\n\t\t\t\t\t});\t\t\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\t\t\t\t\r\n\t\t}\r\n\r\n\t\tfunction redirectToDecline(decline) {\r\n\t\t\tvar redirectPage = decline.declineType || \"decline\";\r\n\t\t\t$state.go(redirectPage, decline);\r\n\t\t}\r\n\r\n\t\tfunction saveQuoteIfRequired(formData) {\r\n\t\t\tsaveQuoteNotRequiredFor = [\"caravan.caravan\", \"caravan.done\"];\r\n\t\t\tvar notRequired =\r\n\t\t\t\tsaveQuoteNotRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (!notRequired) {\r\n\t\t\t\tsaveQuote(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions =\r\n\t\t\t\tpage == \"payment\"\r\n\t\t\t\t\t? quoteOptions.getRequoteOptions(\"caravan.payment\")\r\n\t\t\t\t\t: quoteOptions.getRequoteOptions();\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getQuickQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep(\r\n\t\t\t\t$state.current.name\r\n\t\t\t);\r\n\t\t\tif (quickQuoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\tquickQuoteOptions.permutations,\r\n\t\t\t\t\t\tquickQuoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tbroadcastError(err, \"getQuickQuote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction broadcastError(err, msg) {\r\n\t\t\t$rootScope.$broadcast(\"error\", {\r\n\t\t\t\terrorMessage: msg,\r\n\t\t\t\tresponse: err,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction saveQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\tvar qr = quoteRequestRepository.getSaveQuoteRequest(paymentFrequency);\r\n\t\t\t\t\tif (qr && qr.quoteID && qr.email && $state.$current.name !== \"caravan.done\") {\r\n\t\t\t\t\t\tportalServiceWrapper.triggerGoalSaveQuote();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tif (tokenTimeoutService.isSessionTimedout()) {\r\n\t\t\t\t\t\ttokenTimeoutService.handleTimeout();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$ctrl.goToNextStep = false;\r\n\t\t\t\t\t\tbroadcastError(err, \"Save quote error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction proceedToNextStep(formData) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tsaveQuoteIfRequired(formData);\t\t\t\r\n\t\t\ttestDeclineIfRequired(formData);\r\n\t\t}\r\n\r\n\t\tfunction nextStep() {\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t}\r\n\r\n\t\tfunction triggerGoalCompleteQuoteIfRequired() {\r\n\t\t\tif ($state.$current.name == \"caravan.done\") {\r\n\t\t\t\tvar userInputFromRepo = quoteRequestRepository.getUserInput();\r\n\t\t\t\tif (!userInputFromRepo || !userInputFromRepo.email) {\r\n\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\tquoteRequestRepository.update(formData);\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t\tportalServiceWrapper.triggerGoalCompleteQuote();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"caravanForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar maData = {\r\n\t\t\t\tstate: quoteModel ? quoteModel.state : null,\r\n\t\t\t\tpostCode: quoteModel ? quoteModel.postCode : null,\r\n\t\t\t\tcampaignCode: quoteModel ? quoteModel.campaignCode : null,\r\n\t\t\t\tnoClaimBonus: quoteModel ? quoteModel.noClaimBonus : null,\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult ? quoteResult.getAnnual() : null,\r\n\t\t\t\tmonthlyResult: quoteResult ? quoteResult.getMonthly() : null,\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\r\n\t\t\tif ($state.current.name == \"caravan.done\") {\r\n\t\t\t\tmaData.inceptionDate = moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.address &&\r\n\t\t\t\tquoteModel.address.addressLine1\r\n\t\t\t) {\r\n\t\t\t\tmaData.address =\r\n\t\t\t\t\tquoteModel.address.addressLine1 +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\tquoteModel.address.city;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.mainPolicyHolder &&\r\n\t\t\t\tquoteModel.mainPolicyHolder.primaryPhoneNumber\r\n\t\t\t) {\r\n\t\t\t\tmaData.contactNumber =\r\n\t\t\t\t\tquoteModel.mainPolicyHolder.primaryPhoneNumber;\r\n\t\t\t}\r\n\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\r\n\t\t// Payments\r\n\r\n\t\t/**\r\n\t\t * Scrolls a field into view when an error is clicked\r\n\t\t * @param {Object} error Error object with key `name`\r\n\t\t */\r\n\t\t$ctrl.showInView = function (error) {\r\n\t\t\t//console.log(error);\r\n\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]'));\r\n\t\t};\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * determines if a quote is available to enable save button.\r\n\t\t */\r\n\t\t$ctrl.isSaveButtonEnabled = function () {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\treturn formData.rapidEstimateUrl != null;\r\n\t\t};\r\n\r\n\t\t$ctrl.isQuoteAvailable = function () {\r\n\t\t\treturn quoteOptions.getSelectedQuoteResult() !== null;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\toverwritePromoCodeFromQueryString();\r\n\t\t\tvar currentPageName = $ctrl.state.current.name;\r\n\t\t\t$ctrl.displayBack =\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl != null ||\r\n\t\t\t\tcurrentPageName != \"caravan.caravan\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl &&\r\n\t\t\t\tcurrentPageName == \"caravan.caravan\"\r\n\t\t\t) {\r\n\t\t\t\tinvalidatePreviousQuote();\r\n\t\t\t}\r\n\t\t\ttriggerGoalCompleteQuoteIfRequired();\r\n\t\t\tprepopulateRetrievedQuote();\r\n\t\t\tapplyPromoCodeThroughLink();\r\n\t\t};\r\n\r\n\t\tfunction overwritePromoCodeFromQueryString() {\r\n\t\t\tvar promoCode = util.getQueryStringByName(\r\n\t\t\t\twindow.location,\r\n\t\t\t\t\"promotionalCode\"\r\n\t\t\t);\r\n\t\t\tif (promoCode) {\r\n\t\t\t\t$ctrl.formData.promotionalCode =\r\n\t\t\t\t\t$ctrl.formData.promotionalCode || {};\r\n\t\t\t\t$ctrl.formData.promotionalCode.promotionalCode = promoCode;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.initDriversPage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.caravanForm;\r\n\r\n\t\t\tif (form.sumInsured == null) form.sumInsured = {};\r\n\r\n\t\t\t// Set agreed value default\r\n\t\t\tif (\r\n\t\t\t\tform.sumInsured.agreedValue === undefined &&\r\n\t\t\t\tform.aboutYourContents !== undefined &&\r\n\t\t\t\tform.aboutYourContents.agreedValue !== undefined\r\n\t\t\t)\r\n\t\t\t\tform.sumInsured.agreedValue =\r\n\t\t\t\t\tform.aboutYourContents.agreedValue;\r\n\t\t\telse if (form.caravanDetails)\r\n\t\t\t\tform.sumInsured.agreedValue = form.caravanDetails.purchasePrice;\r\n\r\n\t\t\t// Set annexe value default\r\n\t\t\tif (\r\n\t\t\t\tform.sumInsured.annexeReplacementCost === undefined &&\r\n\t\t\t\tform.aboutYourContents !== undefined &&\r\n\t\t\t\tform.aboutYourContents.annexeReplacementCost !== undefined\r\n\t\t\t)\r\n\t\t\t\tform.sumInsured.annexeReplacementCost =\r\n\t\t\t\t\tform.aboutYourContents.annexeReplacementCost;\r\n\r\n\t\t\t$ctrl.formData.caravanForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initQuotePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\t// var selectedCoverType = quoteOptions.getSelectedCoverType() ;\r\n\t\t\t// var formData = getUserInput(),\r\n\t\t\t// \tform = formData.bikeForm;\r\n\t\t\t//\r\n\t\t\t// // getRequote(formData);\r\n\t\t\t// $scope.$broadcast('requote') ;\r\n\t\t\t//\r\n\t\t\t// if ( ! form.insuredExcessValue )\r\n\t\t\t// \tform.insuredExcessValue = {} ;\r\n\t\t\t//\r\n\t\t\t// form.saveOnPremium = form.saveOnPremium || {} ;\r\n\t\t\t// form.saveOnPremium.saveOnYourPremium = selectedCoverType.subType ;\r\n\t\t\t//\r\n\t\t\t// if ( selectedCoverType.superType == 'third_party')\r\n\t\t\t// \tform.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft = selectedCoverType.subType ;\r\n\t\t\t//\r\n\t\t\t// $ctrl.formData.bikeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initContact = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tsetDefaultContactValues();\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValues() {\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.caravanForm,\r\n\t\t\t\tpostalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\t\tform.tellUsYourRegoNumber = form.tellUsYourRegoNumber || {};\r\n\r\n\t\t\tif ($ctrl.quoteModel.isCaravanRegistered) {\r\n\t\t\t\tform.tellUsYourRegoNumber.regoNumber =\r\n\t\t\t\t\t$ctrl.quoteModel.regoNumber;\r\n\t\t\t}\r\n\r\n\t\t\tform.mainPolicyHolder = form.mainPolicyHolder || {};\r\n\r\n\t\t\tif (form.mainPolicyHolder.isMainDriverMainPolicyHolder !== false) {\r\n\t\t\t\tform.mainPolicyHolder.isMainDriverMainPolicyHolder = true;\r\n\r\n\t\t\t\tform.mainPolicyHolder.title =\r\n\t\t\t\t\tform.mainPolicyHolder.title ||\r\n\t\t\t\t\tform.driver.drivers[0].person.title;\r\n\t\t\t\tform.mainPolicyHolder.firstName =\r\n\t\t\t\t\tform.driver.drivers[0].person.firstName;\r\n\t\t\t\tform.mainPolicyHolder.lastName =\r\n\t\t\t\t\tform.driver.drivers[0].person.lastName;\r\n\t\t\t\tform.mainPolicyHolder.gender =\r\n\t\t\t\t\tform.driver.drivers[0].person.gender;\r\n\t\t\t\tform.mainPolicyHolder.dateOfBirth =\r\n\t\t\t\t\tform.driver.drivers[0].person.dateOfBirth;\r\n\r\n\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffences =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffencesDetails =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\tform.mainPolicyHolder.fourYears_licenceRSDC =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_licenceRSDC;\r\n\t\t\t\tform.mainPolicyHolder.fourYears_licenceRSDCDetails =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_licenceRSDCDetails;\r\n\r\n\t\t\t\tform.mainPolicyHolder.fourYears_vehicleAccidentsClaims =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tform.mainPolicyHolder.fourYears_vehicleAccidentsClaimsDetails =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_vehicleAccidentsClaimsDetails;\r\n\r\n\t\t\t\tform.mainPolicyHolder.tenYears_chargedOrConvictedOffences =\r\n\t\t\t\t\tform.driver.drivers[0].tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tform.mainPolicyHolder.tenYears_chargedOrConvictedOffencesDetails =\r\n\t\t\t\t\tform.driver.drivers[0].tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\tform.mainPolicyHolderContact =\r\n\t\t\t\t\tform.mainPolicyHolderContact || {};\r\n\t\t\t\tform.mainPolicyHolderContact.postalOption = true;\r\n\t\t\t\tform.mainPolicyHolderContact.emailAddress1 = formData.email;\r\n\t\t\t}\r\n\r\n\t\t\tif (form.mainPolicyHolderContact.address == undefined) {\r\n\t\t\t\tform.mainPolicyHolderContact.address =\r\n\t\t\t\t\tform.aboutYourCaravan.address;\r\n\t\t\t}\r\n\r\n\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.address.addressLine1 &&\r\n\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.address.postalCode\r\n\t\t\t\t) {\r\n\t\t\t\t\tform.mainPolicyHolderContact.postalOption = false;\r\n\t\t\t\t\tform.mainPolicyHolderContact.postalAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.caravanForm = form;\r\n\t\t}\r\n\r\n\t\tfunction constructDonePageViewModel() {\r\n\t\t\tvar regoNumber = $ctrl.quoteModel.regoNumber || \"\";\r\n\r\n\t\t\tvar done = {\r\n\t\t\t\tvehicleType: $ctrl.quoteModel.vehicleType,\r\n\t\t\t\tpolicyNumber: $stateParams.policyNumber,\r\n\t\t\t\taccountNumber: $stateParams.accountNumber,\r\n\t\t\t\tisAwaitingProcess: $stateParams.isAwaitingProcess,\r\n\t\t\t\tpolicyType: quoteOptions.getSelectedCoverType().label,\r\n\t\t\t\tpolicyStartDate: $ctrl.quoteModel.policyStartDate,\r\n\t\t\t\tyearMakeModel: $ctrl.quoteModel.yearMakeModel,\r\n\t\t\t\tregoNumber: regoNumber.toUpperCase(),\r\n\t\t\t\tpurchaseDate: moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\tsmartLinkURL: $window.qbe.fieldLabels.smartLink.url,\r\n\t\t\t\thashKey: $window.qbe.fieldLabels.smartLink.hashKey,\r\n\t\t\t\temail: $ctrl.quoteModel.email,\r\n\t\t\t\tdescription: \"Caravan Insurance\",\r\n\t\t\t\tproductRefs: \"Caravan Insurance\",\r\n\t\t\t};\r\n\r\n\t\t\tif ($ctrl.quoteModel.caravanForm.mainPolicyHolder) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.caravanForm.mainPolicyHolder.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.caravanForm.mainPolicyHolder.lastName;\r\n\t\t\t} else if ($ctrl.quoteModel.caravanForm.companyContact) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.caravanForm.companyContact.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.caravanForm.companyContact.lastName;\r\n\t\t\t\tdone.email = $ctrl.quoteModel.caravanForm.companyContact.email;\r\n\t\t\t}\r\n\r\n\t\t\treturn done;\r\n\t\t}\r\n\r\n\t\t$ctrl.initDonePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar done = storage.getItem(\"done\");\r\n\t\t\tif (!done || !done.policyNumber) {\r\n\t\t\t\tdone = constructDonePageViewModel();\r\n\t\t\t\t$ctrl.smartLink = smartLinkService.generateLink(done);\r\n\t\t\t\tgtmService.trackTransaction(\r\n\t\t\t\t\t$state.current,\r\n\t\t\t\t\tdone,\r\n\t\t\t\t\t$ctrl.quoteModel\r\n\t\t\t\t);\r\n\t\t\t\tperformMAServices(\"paid\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.storage.clear();\r\n\t\t\tstorage.setItem(\"done\", done);\r\n\t\t\tvar $columns = $(\".columns\").get(0);\r\n\t\t\t$columns.classList.remove(\"print-ready\");\r\n\t\t\t$ctrl.done = done;\r\n\t\t\t$ctrl.done.campaignSteps = {};\r\n\r\n\t\t\t// check if campaign code is valid\r\n\t\t\tif (\r\n\t\t\t\tquoteModel.quoteResult.response.isCampaignCodeValid ||\r\n\t\t\t\tquoteModel.quoteResult.response.isGiftCardApplied\r\n\t\t\t) {\r\n\t\t\t\t// get campaign next steps\r\n\t\t\t\t$ctrl.done.campaignSteps = campaignService.getCampaignConfig(\r\n\t\t\t\t\tquoteModel.quoteResult.response.campaignCode,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else $ctrl.done.campaignSteps.isCampaignCodeValid = false;\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"submit-feedback\", submitFeedback);\r\n\r\n\t\tfunction submitFeedback() {\r\n\t\t\tif ($ctrl.done.policyNumber != null && $ctrl.smartLink != null) {\r\n\t\t\t\twindow.open($ctrl.smartLink, \"_blank\");\r\n\t\t\t} else {\r\n\t\t\t\tvoid 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// TODO: fix this to not use timeout\r\n\t\tsetTimeout(function () {\r\n\t\t\tQBE.expandCollapse.init();\r\n\t\t}, 1000);\r\n\r\n\t\t$ctrl.clear = function () {\r\n\t\t\t$scope.$broadcast(\"clear\");\r\n\t\t};\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = $scope.caravanForm.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgetUserInput();\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", {\r\n\t\t\t\tmodal: \"saveQuote\",\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.moveToStep = function (step) {\r\n\t\t\t$state.go(dynamicRouter.getState(step));\r\n\t\t};\r\n\t\t$ctrl.moveToPage = function (page) {\r\n\t\t\t$state.go(page);\r\n\t\t};\r\n\t},\r\n]);\r\n\nangular.module('qbePortal.rapidEstimate.caravan')\r\n\t.controller('CaravanRapidEstimateController', [\r\n\t\t'$scope',\r\n\t\t'$state',\r\n\t\t'userInputRepository',\r\n\t\t'labelService',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteOptions',\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'gtmService',\r\n\t\t'$sce',\r\n\t\tfunction($scope, $state, userInputRepository, labelService, portalServiceWrapper, quoteOptions, util, serviceResponseRepository, gtmService, $sce) {\r\n\t\t\tvar vm = this;\r\n\t\t\tvm.formData = {};\r\n\t\t\tvm.elementName = 'Form Controller';\r\n\t\t\tvm.validationErrors = null;\r\n\t\t\tvm.sections = {};\r\n\t\t\tvm.promoCode = util.getQueryStringByName(window.location, 'promotionalCode') ;\r\n\r\n\t\t\tvm.initPage= function() {\r\n\t\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t\tvm.formData = {\r\n\t\t\t\t\tcaravanForm: {\r\n\t\t\t\t\t\taboutYourCaravan: {\r\n\t\t\t\t\t\t\tvehicleType: 'caravan'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttellUsMore: {\r\n\t\t\t\t\t\t\tpromotionalCode: vm.promoCode\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.registerSection = function (name, init, getValueFn) {\r\n\t\t\t\tvm.sections[name] = getValueFn;\r\n\t\t\t}\r\n\r\n\t\t\t// Submit form to get quickQuote\r\n\t\t\tvm.submit = function(event, form) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tgtmService.trackEvent('rapid-estimate-submit') ;\r\n\r\n\t\t\t\tvm.showErrorSummary = false;\r\n\t\t\t\tisInvalid = form.$invalid;\r\n\r\n\t\t\t\tif (isInvalid) {\r\n\t\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t\tvm.showErrorSummary = true;\r\n\t\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\t\tscrollViewTo($('#combinedValidationListing')) ;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$scope.$root.$broadcast('loading-animation-start');\r\n\r\n\t\t\t\t// Populate formData\r\n\t\t\t\tvar formData = {};\r\n\t\t\t\tfor (var key in this.sections) {\r\n\t\t\t\t\tformData[key] = this.sections[key]();\r\n\t\t\t\t}\r\n\t\t\t\tvar now = moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY');\r\n\t\t\t\tformData.caravanForm.getStarted = {\r\n\t\t\t\t\tpolicyStartDate: now\r\n\t\t\t\t};\r\n\t\t\t\tformData.caravanForm.driver.drivers = [];\r\n\t\t\t\tformData.caravanForm.driver.drivers[0] = {\r\n\t\t\t\t\tperson: util.deepClone(formData.caravanForm.driver)\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(formData.caravanForm.tellUsMore) {\r\n\t\t\t\t\tformData.email = formData.caravanForm.tellUsMore.email;\r\n\t\t\t\t\tformData.caravanForm.promotionalCode = {\r\n\t\t\t\t\t\tpromotionalCode: formData.caravanForm.tellUsMore.promotionalCode\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep('rapidEstimate') ;\r\n\r\n\t\t\t\tportalServiceWrapper.getQuickQuote(quickQuoteOptions.permutations, quickQuoteOptions.rules)\r\n\t\t\t\t\t.then(function(resp) {\r\n\t\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t\tvar quoteResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\t\t\t\t\tserviceResponseRepository.update('rapidEstimate' , quoteResults ) ;\r\n\t\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\t\t// resp: resp,\r\n\t\t\t\t\t\t\tformData: formData,\r\n\t\t\t\t\t\t\tresults : quoteResults,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\t\t\terrorMessage: 'getQuickQuote error',\r\n\t\t\t\t\t\t\tresponse: err\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction scrollViewTo($element) {\r\n\t\t\t\tvar offset = $element.offset();\r\n\t\t\t\tif ( offset ) {\r\n\t\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\r\n\t\t\tvm.getSectionDescriptionFor = function (fieldName) {\r\n\t\t\t\treturn $sce.trustAsHtml(labelService.getSectionDescriptionFor(fieldName));\r\n\t\t\t}\r\n\r\n\t\t\t// Scroll to estimates once they're loaded\r\n\t\t\t$scope.$root.$on('show-rapid-estimates', function() {\r\n\t\t\t\tvm.showRapidEstimatesPanel = true;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$root.$on('rapid-estimates-panel-initialised', function() {\r\n\t\t \t\tvar rapidEstimateResults = serviceResponseRepository.getLastResponseFrom('rapidEstimate') ;\r\n\t\t\t\tif ( rapidEstimateResults ) {\r\n\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\tresults: rapidEstimateResults,\r\n\t\t\t\t\t\tformData: userInputRepository.get()\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t]);\r\n\nangular.module('qbePortal').controller('ctpFormController', [\r\n\t'$rootScope',\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'userInputRepository',\r\n\t'dynamicRouter',\r\n\t'labelService',\r\n\t'Util',\r\n\t'$http',\r\n\t'storage',\r\n\t'gtmService',\r\n\t'MODULE_INFO',\r\n\t'vcRecaptchaService',\r\n\tfunction(\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\tuserInputRepository,\r\n\t\tdynamicRouter,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$http,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tMODULE_INFO,\r\n\t\tvcRecaptchaService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem('completed-step', stateName);\r\n\t\t}\r\n\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tnull,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.moduleId = MODULE_INFO.id;\r\n\t\t$ctrl.recaptchaResponse = null;\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\tctpForm: {\r\n\t\t\t\t\tpromotionalCode: {\r\n\t\t\t\t\t\tvalue: $stateParams.promotionalCode\r\n\t\t\t\t\t\t\t? $stateParams.promotionalCode\r\n\t\t\t\t\t\t\t: ''\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttoken: {\r\n\t\t\t\t\t\twidgetId: null,\r\n\t\t\t\t\t\tresponse: ''\r\n\t\t\t\t\t},\r\n\t\t\t\t\tincentiveDetails: {\r\n\t\t\t\t\t\tdirectDebit: true\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function(name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on('error', function(event, error) {\r\n\t\t\t$state.go('error', error);\r\n\t\t});\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\r\n\t\t\tif ($ctrl.response && $ctrl.response !== '') {\r\n\t\t\t\tformData.ctpForm.token.widgetId = $ctrl.widgetId;\r\n\t\t\t\tformData.ctpForm.token.response = $ctrl.response;\r\n\t\t\t}\r\n\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\tvar defaultValues = getDefaultValues();\r\n\t\t\treturn userInputRepository.get(defaultValues);\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction openDialog() {\r\n\t\t\t$rootScope.$broadcast('loading-animation-start');\r\n\r\n\t\t\tgetUserInput();\r\n\r\n\t\t\t$rootScope.$broadcast('open-confirmation-dialog');\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function(e, form) {\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\r\n\t\t\tgtmService.trackCTPEvent(\r\n\t\t\t\t'gaClick',\r\n\t\t\t\t$state.current,\r\n\t\t\t\te.target.textContent\r\n\t\t\t);\r\n\r\n\t\t\tif (form.$invalid) {\r\n\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\tscrollViewTo($('#combinedValidationListing'));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.visible == 'invisible') {\r\n\t\t\t\tvcRecaptchaService.execute($ctrl.widgetId);\r\n\t\t\t} else {\r\n\t\t\t\tif ($ctrl.response !== '') {\r\n\t\t\t\t\topenDialog();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Initialisation method of the payment page\r\n\t\t */\r\n\t\t$ctrl.initPage = function() {\r\n\t\t\tstorage.clear();\r\n\r\n\t\t\t$ctrl.visible = globals.recaptchaConfiguration.options[0].type;\r\n\t\t\t$ctrl.recaptchaKey = globals.recaptchaConfiguration.options[0].key;\r\n\r\n\t\t\tinitialiseRouting();\r\n\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t$ctrl.termsAndConditions = false;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\t$ctrl.formData = formData;\r\n\t\t\tvar defaultValues = getDefaultValues();\t\r\n\t\t\tuserInputRepository.update(defaultValues);\r\n\t\t};\r\n\r\n\t\t$ctrl.setResponse = function(response) {\r\n\t\t\t$ctrl.response = response;\r\n\r\n\t\t\tif ($ctrl.visible === 'invisible' && $ctrl.response !== '') {\r\n\t\t\t\topenDialog();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.setWidgetId = function(widgetId) {\r\n\t\t\t$ctrl.widgetId = widgetId;\r\n\t\t};\r\n\r\n\t\t$ctrl.cbExpiration = function() {\r\n\t\t\tvcRecaptchaService.reload($scope.widgetId);\r\n\r\n\t\t\t$ctrl.response = '';\r\n\t\t};\r\n\r\n\t\t$scope.$on('terms-and-conditions-changed', function(\r\n\t\t\tevent,\r\n\t\t\ttermsAndConditions\r\n\t\t) {\r\n\t\t\t$ctrl.termsAndConditions = termsAndConditions;\r\n\t\t});\r\n\r\n\t\t$scope.$on('reload-recaptcha', $ctrl.cbExpiration);\r\n\t}\r\n]);\r\n\nangular.module('qbePortal').controller('CybersourceCallbackController', [\r\n\t'$scope',\r\n\t'$stateParams',\r\n\t'dynamicRouter',\r\n\t'Util',\r\n\t'paymentLoggerService',\r\n\tfunction($scope, $stateParams, dynamicRouter, Util, paymentLoggerService) {\r\n\t\tvar $ctrl = this;\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\tvar success =\r\n\t\t\t$stateParams.status === 'SUCCESS' ||\r\n\t\t\t$stateParams.status === 'AWAITING_PROCESS';\r\n\r\n\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t'processing Cybersource callback',\r\n\t\t\t'show done page or error page',\r\n\t\t\tnull\r\n\t\t);\r\n\r\n\t\tvoid 0;\r\n\t\t// Access parent window to call the callback function\r\n\t\tif (window.parent && window.parent.$controllerScope) {\r\n\t\t\tparent.$controllerScope.onPaymentCallback(success, $stateParams);\r\n\t\t}\r\n\t}\r\n]);\r\n\nangular.module('qbePortal').controller('CybersourcePaymentFormController', [\r\n\t'$scope',\r\n\t'$state',\r\n\t'$sce',\r\n\t'dynamicRouter',\r\n\t'Util',\r\n\t'paymentLoggerService',\r\n\tfunction($scope, $state, $sce, dynamicRouter, Util, paymentLoggerService) {\r\n\t\tvar $ctrl = this;\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\tif (window.parent && window.parent.$controllerScope) {\r\n\t\t\t$ctrl.creditCardPaymentData =\r\n\t\t\t\twindow.parent.$controllerScope.creditCardPaymentData;\r\n\t\t}\r\n\r\n\t\t$ctrl.cybersourceEndpoint = $sce.trustAsResourceUrl(\r\n\t\t\tendpointUrls.payments.cybersourcePaymentEndpoint\r\n\t\t);\r\n\r\n\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t'submitting payment to Cybersource',\r\n\t\t\t'waiting for Cybersource callback',\r\n\t\t\tnull\r\n\t\t);\r\n\t}\r\n]);\r\n\nangular.module(\"qbePortal\").controller(\"DeclineController\", [\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$sce\",\r\n\t\"$filter\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"storage\",\r\n\t\"MODULE_INFO\",\r\n\tfunction(\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$sce,\r\n\t\t$filter,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\tstorage,\r\n\t\tMODULE_INFO\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\t\t$ctrl.declineMessages = [];\r\n\r\n\t\t$ctrl.initPage = function() {\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\tgetDeclineCodes();\r\n\t\t\tvar declineType = $state.current.name;\r\n\t\t\t$ctrl.title = labelService.getSectionLabelFor(declineType);\r\n\t\t\t$ctrl.descriptionHTML = labelService.getSectionDescriptionFor(\r\n\t\t\t\tdeclineType\r\n\t\t\t);\r\n\t\t\t$ctrl.nextStep = processWildCard(\r\n\t\t\t\tlabelService.getLabelFor(\"nextStep\"),\r\n\t\t\t\tgetStartRoute()\r\n\t\t\t);\r\n\t\t\tstorage.clear();\r\n\t\t};\r\n\r\n\t\t// gdd-3756 - unauthenticated payments decline\r\n\t\t$ctrl.initPayBills = function() {\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\tstorage.clear();\r\n\t\t\tif (qbe.fieldLabels) {\r\n\t\t\t\t$ctrl.headBar = qbe.fieldLabels.headBar;\r\n\t\t\t\t$ctrl.phoneNumber = qbe.fieldLabels.enterPaymentRef.phone;\r\n\t\t\t\t$ctrl.paymentDeclineLabel =\r\n\t\t\t\t\tqbe.fieldLabels.paymentDecline.title;\r\n\t\t\t\t$ctrl.paymentDeclineDescription =\r\n\t\t\t\t\tqbe.fieldLabels.paymentDecline.description;\r\n\t\t\t\t$ctrl.paymentDeclineSubDescription =\r\n\t\t\t\t\tqbe.fieldLabels.paymentDecline.subDescription;\r\n\t\t\t\t$ctrl.chatAgentLabel = qbe.fieldLabels.buttonLabel.chatAgent;\r\n\t\t\t\t$ctrl.callAgentLabel = qbe.fieldLabels.buttonLabel.callAgent;\r\n\t\t\t\t$ctrl.referenceNumber = $stateParams.referenceNumber;\r\n\r\n\t\t\t\tvar footHeight = $(\".footer\").outerHeight(),\r\n\t\t\t\t\twindowHeight = $(window).height(),\r\n\t\t\t\t\tdocumentHeight = $(document).height(),\r\n\t\t\t\t\tminHeight;\r\n\r\n\t\t\t\tif ($(window).outerWidth() >= 768) {\r\n\t\t\t\t\tif (documentHeight > windowHeight) {\r\n\t\t\t\t\t\tminHeight = documentHeight - footHeight - 5;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tminHeight = windowHeight - footHeight - 5;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(\".col1\").css(\"min-height\", minHeight + \"px\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(\".col1\").css(\"min-height\", \"auto\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Get decline codes - typeCodes submitted from product controllers\r\n\t\t * @param {none}\r\n\t\t * @return {none}\r\n\t\t */\r\n\t\tfunction getDeclineCodes() {\r\n\t\t\tvar codes = $stateParams.declineCodes; // get typeCodes from $stateParams\r\n\r\n\t\t\tif ($state.current.name === 'embargo') {\r\n\t\t\t\tvar message = \"Potential or current weather conditions in the area\";\r\n\t\t\t\t$ctrl.declineMessages.push({\r\n\t\t\t\t\tmessage: message\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t// loop through array and lookup labels\r\n\t\t\telse if (!util.isUndefinedOrNull(codes) && codes !== \"null\") {\r\n\t\t\t\tangular.forEach(codes, function(value) {\r\n\t\t\t\t\tvar message = $ctrl.lookupLabel([value]);\r\n\r\n\t\t\t\t\t// get default message in case typeCode is not setup\r\n\t\t\t\t\tif (util.isUndefinedOrNull(message)) {\r\n\t\t\t\t\t\tmessage = $ctrl.lookupLabel(\"default\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (value === \"ccPaymentError\") {\r\n\t\t\t\t\t\tmessage += \" \" + $stateParams.declineType;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$ctrl.declineMessages.push({\r\n\t\t\t\t\t\tmessage: message\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t$ctrl.declineMessages.push({\r\n\t\t\t\t\tmessage: \"the information provided in this quote\"\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvoid 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Start route - create URL for step 1 of all products\r\n\t\t * @param {none}\r\n\t\t * @return {string} - Step 1 URL\r\n\t\t */\r\n\t\tfunction getStartRoute() {\r\n\t\t\tvar routeName = MODULE_INFO.startRouteName.split(\".\");\r\n\t\t\tvar currentURL = window.location.href.split(\"/\");\r\n\r\n\t\t\tcurrentURL[currentURL.length - 1] = routeName[1];\r\n\t\t\tvar newURL =\r\n\t\t\t\t'new quote';\r\n\t\t\tvar homeURL =\r\n\t\t\t\t'QBE Homepage';\r\n\r\n\t\t\treturn [newURL, homeURL];\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Process wildcard - handle multiple wildcards to be replaced\r\n\t\t * @param {string} - target string\r\n\t\t * @param {array} - array of string\r\n\t\t * @return {string} - destination string\r\n\t\t */\r\n\t\tfunction processWildCard(targetString, wildcardValue) {\r\n\t\t\tif (\r\n\t\t\t\ttypeof wildcardValue == \"string\" ||\r\n\t\t\t\ttypeof wildcardValue == \"undefined\"\r\n\t\t\t) {\r\n\t\t\t\ttargetString = util.stringFormat(targetString, wildcardValue);\r\n\t\t\t} else {\r\n\t\t\t\tvar argArr = [];\r\n\t\t\t\targArr.push(targetString);\r\n\t\t\t\targArr = argArr.concat(wildcardValue);\r\n\t\t\t\ttargetString = util.stringFormat.apply(null, argArr);\r\n\t\t\t}\r\n\t\t\treturn targetString;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Label lookup - get labels from global options\r\n\t\t * @param {string} - fieldName\r\n\t\t * @return {string} - labels\r\n\t\t */\r\n\t\t$ctrl.lookupLabel = function(fieldName) {\r\n\t\t\treturn labelService.getGlobalOptionLabel(\r\n\t\t\t\t\"declineConfiguration\",\r\n\t\t\t\tfieldName\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t$ctrl.getProduct = function() {\r\n\t\t\treturn MODULE_INFO.id;\r\n\t\t};\r\n\r\n\t\t$ctrl.getLabelFor = function(fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\t$scope.$root.$broadcast(\"loading-animation-end\");\r\n\t}\r\n]);\r\n\nangular.module('qbePortal').\r\ncontroller('ErrorController', [\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'$sce',\r\n\t'labelService',\r\n\t'Util',\r\n\t'MODULE_INFO',\r\n\tfunction($scope, $state, $stateParams, $sce, labelService, Util, MODULE_INFO) {\r\n\t\tvar $ctrl = this ;\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\t$ctrl.title = 'Error';\r\n\t\t// $scope.$root.$broadcast('page-title-set', $ctrl.title);\r\n\t\tUtil.dispatchCustomEvent('register-labels');\r\n\r\n\t\tif ( $stateParams.errorMessage )\r\n\t\t\tvoid 0;\r\n\r\n\t\t$ctrl.errorMessage = $sce.trustAsHtml(labelService.getLabelFor('defaultErrorMessage'));\r\n\t\t$ctrl.defaultErrorTitle = labelService.getLabelFor('defaultErrorTitle');\r\n\t\t$ctrl.tryAgainLinkMessage = labelService.getLabelFor('tryAgainLinkMessage');\r\n\t\t$ctrl.retry= function() {\r\n\t\t\t$state.go(MODULE_INFO.startRouteName);\r\n\t\t}; \r\n}]);\r\n\nangular.module(\"qbePortal\").controller(\"FormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteOptions\",\r\n\t\"paymentService\",\r\n\t\"quoteModelFactory\",\r\n\t\"dynamicRouter\",\r\n\t\"portalServiceWrapper\",\r\n\t\"MAService\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"$q\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"quoteRequestRepository\",\r\n\t\"tokenTimeoutService\",\r\n\t\"$compile\",\r\n\t\"smartLinkService\",\r\n\t\"campaignService\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteOptions,\r\n\t\tpaymentService,\r\n\t\tquoteModelFactory,\r\n\t\tdynamicRouter,\r\n\t\tportalServiceWrapper,\r\n\t\tMAService,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$q,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository,\r\n\t\ttokenTimeoutService,\r\n\t\t$compile,\r\n\t\tsmartLinkService,\r\n\t\tcampaignService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tstorage.removeItem(\"policy-date-input\");\r\n\r\n\t\t\tvar stepConditions = {\r\n\t\t\t\t\"vehicle.payment\": function () {\r\n\t\t\t\t\treturn $state.$current.name != \"vehicle.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"vehicle.done\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"vehicle.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"vehicle.policy-start-date\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"vehicle.policy-start-date\";\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\r\n\t\t$ctrl.elementName = \"Form Controller\";\r\n\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sideBarEmail = null;\r\n\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t$ctrl.saveOnExit = false;\r\n\t\t$ctrl.smartLink = null;\r\n\t\t$ctrl.goToNextStep = true;\r\n\r\n\t\t$window.onbeforeunload = function (event) {\r\n\t\t\texitSaveQuote();\r\n\t\t\tif ($ctrl.saveOnExit) {\r\n\t\t\t\t$rootScope.$digest();\r\n\t\t\t\treturn \"Are you sure you want to leave?\";\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"session-save-quote\", exitSaveQuote);\r\n\r\n\t\tfunction exitSaveQuote() {\r\n\t\t\tvar emailAddress = angular\r\n\t\t\t\t.element(\"div\")\r\n\t\t\t\t.find(\"[label-key=yourEmailAddress]\")\r\n\t\t\t\t.val();\r\n\r\n\t\t\tif (dynamicRouter.getPageTitle() != \"Payment\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.quoteModel.email != null ||\r\n\t\t\t\t\t$ctrl.sideBarEmail != null ||\r\n\t\t\t\t\temailAddress != \"\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tif ($ctrl.quoteModel && $ctrl.quoteModel.quoteResult) {\r\n\t\t\t\t\t\t$ctrl.saveOnExit = true;\r\n\t\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\t\tvar paymentFrequency = \"everyyear\";\r\n\r\n\t\t\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\t\t\t\t\tquote: \"true\",\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} else $rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t}\r\n\r\n\t\t\t// $ctrl.submit($scope[formName]);\r\n\t\t}\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tvehicleForm: {\r\n\t\t\t\t\tgetStarted: {\r\n\t\t\t\t\t\tpolicyStartDate: moment()\r\n\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\t\t\tpersonOrCompany: \"person\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tinsuredExcessValue: {\r\n\t\t\t\t\t\tthirdPartyOrThirdPartyFireAndTheft: \"standard\",\r\n\t\t\t\t\t\tcomprehensivePref: \"market\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\toptionalBenefits: {\r\n\t\t\t\t\t\tQPMMotVehHireCar: false,\r\n\t\t\t\t\t\tQPMMotVehWindscreen: false,\r\n\t\t\t\t\t\tQPMMotVehNCB: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t};\r\n\r\n\t\t\tvar defaultStateExcess = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\t\t$ctrl.quoteModel.state\r\n\t\t\t);\r\n\t\t\tif (defaultStateExcess != null) {\r\n\t\t\t\tvar tempObj = {\r\n\t\t\t\t\tvehicleForm: {\r\n\t\t\t\t\t\tinsuredExcessValue: {\r\n\t\t\t\t\t\t\tvoluntaryVehicleExcess: defaultStateExcess,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tdefaultValues = Object.extend(defaultValues, tempObj);\r\n\t\t\t}\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalidate-quotes\", invalidatePreviousQuote);\r\n\r\n\t\tfunction invalidatePreviousQuote() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tstorage.removeItem(\"policy-address\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to submit the form\r\n\t\t */\r\n\t\t$scope.$on(\"form-submit\", function (event, formName) {\r\n\t\t\t$ctrl.submit($scope[formName]);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to save the form\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-save-quote\", function (event, data) {\r\n\t\t\t$ctrl.sideBarEmail = data;\r\n\t\t\t$ctrl.save();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to assign the email address\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-assign-mail\", function (event, data) {\r\n\t\t\tif (data != \"\") $ctrl.sideBarEmail = data;\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbFormSection to have a session storage of rego search results.\r\n\t\t */\r\n\t\t$scope.$on(\"get-user-input\", getUserInput);\r\n\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, form) {\r\n\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tgetRequote(formData, null, function (resp) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tfunction prepopulateRetrievedQuote() {\r\n\t\t\tif ($stateParams.quoteNo && $stateParams.email) {\r\n\t\t\t\tgtmService.trackEvent(\"retrieve-quote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.retrieveSavedQuote(\r\n\t\t\t\t\t\t$stateParams.quoteNo,\r\n\t\t\t\t\t\t$stateParams.email\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (transformedQuote) {\r\n\t\t\t\t\t\t$q.all([\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshAddress(\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCar.address\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshVehicleDetails(\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCar.regoSearchResponse.modelYear,\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCar.regoSearchResponse.make,\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCar.regoSearchResponse.model\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t]).then(function (resps) {\r\n\t\t\t\t\t\t\tvar vehicleFormData = ($ctrl.formData.vehicleForm = transformedQuote);\r\n\t\t\t\t\t\t\tvar serviceResponse = storage.getItem(\r\n\t\t\t\t\t\t\t\t\"service-response\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t$ctrl.formData.email = $stateParams.email;\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"policy-address\",\r\n\t\t\t\t\t\t\t\tserviceResponse.quote.policyAddress\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (!vehicleFormData.aboutYourCar)\r\n\t\t\t\t\t\t\t\tvehicleFormData.aboutYourCar = {};\r\n\t\t\t\t\t\t\tvehicleFormData.aboutYourCar.address =\r\n\t\t\t\t\t\t\t\tresps[0].data;\r\n\t\t\t\t\t\t\tuserInputRepository.update($ctrl.formData);\r\n\t\t\t\t\t\t\tstorage.setItem(\"retrieve\", true);\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tmoment()\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\") >\r\n\t\t\t\t\t\t\t\tmoment(serviceResponse.quote.periodStartDate)\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\")\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\t\"policy-date-input\",\r\n\t\t\t\t\t\t\t\t\t$ctrl.formData\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"vehicle.policy-start-date\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"vehicle.vehicle\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tvar expiredQuote = storage.getItem(\"expired-quote\");\r\n\t\t\t\t\t\tif (expiredQuote.displayStatus == \"Expired\") {\r\n\t\t\t\t\t\t\tstorage.removeItem(\"expired-quote\");\r\n\t\t\t\t\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t\t\t\t\twindow.qbe.fieldLabels.expiredQuoteRedirect\r\n\t\t\t\t\t\t\t\t\t.vehicleExpired\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction applyPromoCodeThroughLink() {\r\n\t\t\tif ($stateParams.promotionalCode) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\r\n\t\t\t\tif (formData.vehicleForm) {\r\n\t\t\t\t\tif (!formData.vehicleForm.tellUsABitMore) {\r\n\t\t\t\t\t\tformData.vehicleForm.tellUsABitMore = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tformData.vehicleForm.tellUsABitMore.promotionalCode =\r\n\t\t\t\t\t\t$stateParams.promotionalCode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.sideBarEmail != null) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.vehicleForm.tellUsABitMore &&\r\n\t\t\t\t\tformData.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.vehicleForm.tellUsABitMore.yourEmailAddress =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tformData.vehicleForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.vehicleForm.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t}\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgtmService.trackEvent(\"next\");\r\n\r\n\t\t\tsetDefaultContactValuesIfRequired();\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tvar quickQuote = getQuickQuote(formData, function () {\r\n\t\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t\t\t$rootScope.$broadcast(\"perform-ma-service\", \"next\");\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t});\r\n\r\n\t\t\tif (!quickQuote) {\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValuesIfRequired(formData) {\r\n\t\t\tvar contactValuesRequired = [\"vehicle.contact\"];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tcontactValuesRequired.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\tsetDefaultContactValues();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDeclineIfRequired(formData) {\r\n\t\t\tvar declineTestRequiredFor = [\r\n\t\t\t\t\"vehicle.drivers\",\r\n\t\t\t\t\"vehicle.vehicle\",\r\n\t\t\t\t\"vehicle.quote\",\r\n\t\t\t\t\"vehicle.contact\",\r\n\t\t\t];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tdeclineTestRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\ttestDecline(formData, nextStep);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDecline(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar declineQuoteOptions = quoteOptions.getTestQuoteDeclineOptions(\r\n\t\t\t\t$state.$current.name\r\n\t\t\t);\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.testQuoteDecline(declineQuoteOptions)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tangular.isDefined(\r\n\t\t\t\t\t\t\tresp.data[0].vehicles[0].isEligibleforSDExemption\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\"stamp-duty\",\r\n\t\t\t\t\t\t\tresp.data[0].vehicles[0].isEligibleforSDExemption\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstorage.setItem(\"stamp-duty\", false);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ($ctrl.goToNextStep) callback();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (decline) {\r\n\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\tredirectToDecline(decline, \"Policy Was Declined\");\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction redirectToDecline(decline) {\r\n\t\t\tvar redirectPage = decline.declineType || \"decline\";\r\n\t\t\t$state.go(redirectPage, decline);\r\n\t\t}\r\n\r\n\t\tfunction saveQuoteIfRequired(formData) {\r\n\t\t\tsaveQuoteNotRequiredFor = [\"vehicle.vehicle\", \"vehicle.done\"];\r\n\t\t\tvar notRequired =\r\n\t\t\t\tsaveQuoteNotRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (!notRequired) {\r\n\t\t\t\tsaveQuote(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions =\r\n\t\t\t\tpage == \"payment\"\r\n\t\t\t\t\t? quoteOptions.getRequoteOptions(\"vehicle.payment\")\r\n\t\t\t\t\t: quoteOptions.getRequoteOptions();\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules,\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getQuickQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep(\r\n\t\t\t\t$state.current.name\r\n\t\t\t);\r\n\r\n\t\t\tif (quickQuoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\tquickQuoteOptions.permutations,\r\n\t\t\t\t\t\tquickQuoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tbroadcastError(err, \"getQuickQuote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction broadcastError(err, msg) {\r\n\t\t\t$rootScope.$broadcast(\"error\", {\r\n\t\t\t\terrorMessage: msg,\r\n\t\t\t\tresponse: err,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction saveQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tif (tokenTimeoutService.isSessionTimedout()) {\r\n\t\t\t\t\t\ttokenTimeoutService.handleTimeout();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$ctrl.goToNextStep = false;\r\n\t\t\t\t\t\tbroadcastError(err, \"Save quote error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction proceedToNextStep(formData) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tsaveQuoteIfRequired(formData);\r\n\t\t\ttestDeclineIfRequired(formData);\r\n\t\t}\r\n\r\n\t\tfunction nextStep() {\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t}\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"vehicleForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar maData = {\r\n\t\t\t\tstate: quoteModel ? quoteModel.state : null,\r\n\t\t\t\tpostCode: quoteModel ? quoteModel.postCode : null,\r\n\t\t\t\tcampaignCode: quoteModel ? quoteModel.campaignCode : null,\r\n\t\t\t\tnoClaimBonus: quoteModel ? quoteModel.noClaimBonus : null,\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult ? quoteResult.getAnnual() : null,\r\n\t\t\t\tmonthlyResult: quoteResult ? quoteResult.getMonthly() : null,\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\r\n\t\t\tif ($state.current.name == \"vehicle.done\") {\r\n\t\t\t\tmaData.inceptionDate = moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.address &&\r\n\t\t\t\tquoteModel.address.addressLine1\r\n\t\t\t) {\r\n\t\t\t\tmaData.address =\r\n\t\t\t\t\tquoteModel.address.addressLine1 +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\tquoteModel.address.city;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.gtmPolicyHolder &&\r\n\t\t\t\tquoteModel.gtmPolicyHolder.phoneNumber\r\n\t\t\t) {\r\n\t\t\t\tmaData.contactNumber = quoteModel.gtmPolicyHolder.phoneNumber;\r\n\t\t\t}\r\n\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Scrolls a field into view when an error is clicked\r\n\t\t * @param {Object} error Error object with key `name`\r\n\t\t */\r\n\t\t$ctrl.showInView = function (error) {\r\n\t\t\t//console.log(error);\r\n\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]'));\r\n\t\t};\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * determines if a quote is available to enable save button.\r\n\t\t */\r\n\t\t$ctrl.isSaveButtonEnabled = function () {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\treturn formData.rapidEstimateUrl != null;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\toverwritePromoCodeFromQueryString();\r\n\t\t\tvar currentPageName = $ctrl.state.current.name;\r\n\t\t\t$ctrl.displayBack =\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl != null ||\r\n\t\t\t\tcurrentPageName != \"vehicle.vehicle\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl &&\r\n\t\t\t\tcurrentPageName == \"vehicle.vehicle\"\r\n\t\t\t) {\r\n\t\t\t\tinvalidatePreviousQuote();\r\n\t\t\t}\r\n\r\n\t\t\tprepopulateRetrievedQuote();\r\n\t\t\tapplyPromoCodeThroughLink();\r\n\t\t};\r\n\r\n\t\tfunction overwritePromoCodeFromQueryString() {\r\n\t\t\tvar promoCode = util.getQueryStringByName(\r\n\t\t\t\twindow.location,\r\n\t\t\t\t\"promotionalCode\"\r\n\t\t\t);\r\n\t\t\tif (promoCode) {\r\n\t\t\t\t$ctrl.formData.promotionalCode =\r\n\t\t\t\t\t$ctrl.formData.promotionalCode || {};\r\n\t\t\t\t$ctrl.formData.promotionalCode.promotionalCode = promoCode;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.initQuotePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\t//check for the data from retieved quote\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.vehicleForm.insuredExcessValue &&\r\n\t\t\t\t$ctrl.formData.vehicleForm.insuredExcessValue.coverType\r\n\t\t\t) {\r\n\t\t\t\tquoteOptions.setSelectedCoverType(\r\n\t\t\t\t\t$ctrl.formData.vehicleForm.insuredExcessValue.coverType,\r\n\t\t\t\t\t$ctrl.formData.vehicleForm.insuredExcessValue\r\n\t\t\t\t\t\t.thirdPartyOrThirdPartyFireAndTheft\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tvar selectedCoverType = quoteOptions.getSelectedCoverType();\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.vehicleForm;\r\n\r\n\t\t\t$scope.$broadcast(\"requote\");\r\n\r\n\t\t\tif (!form.insuredExcessValue) form.insuredExcessValue = {};\r\n\r\n\t\t\tform.saveOnPremium = form.saveOnPremium || {};\r\n\t\t\tform.saveOnPremium.saveOnYourPremium = selectedCoverType.subType;\r\n\r\n\t\t\tif (selectedCoverType.superType == \"third_party\")\r\n\t\t\t\tform.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft =\r\n\t\t\t\t\tselectedCoverType.subType;\r\n\r\n\t\t\t$ctrl.formData.vehicleForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initContact = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tsetDefaultContactValues();\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValues() {\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.vehicleForm,\r\n\t\t\t\tpostalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\t\tif (form.getStarted.personOrCompany == \"person\") {\r\n\t\t\t\tform.mainPolicyHolder = form.mainPolicyHolder || {};\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tform.mainPolicyHolder.isMainDriverMainPolicyHolder !== false\r\n\t\t\t\t) {\r\n\t\t\t\t\tform.mainPolicyHolder.isMainDriverMainPolicyHolder = true;\r\n\t\t\t\t\tform.mainPolicyHolder.title =\r\n\t\t\t\t\t\tform.mainPolicyHolder.title ||\r\n\t\t\t\t\t\tform.driver.drivers[0].person.title;\r\n\t\t\t\t\tform.mainPolicyHolder.firstName =\r\n\t\t\t\t\t\tform.driver.drivers[0].person.firstName;\r\n\t\t\t\t\tform.mainPolicyHolder.lastName =\r\n\t\t\t\t\t\tform.driver.drivers[0].person.lastName;\r\n\t\t\t\t\tform.mainPolicyHolder.gender =\r\n\t\t\t\t\t\tform.driver.drivers[0].person.gender;\r\n\t\t\t\t\tform.mainPolicyHolder.dateOfBirth =\r\n\t\t\t\t\t\tform.driver.drivers[0].person.dateOfBirth;\r\n\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffences =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffences;\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffences =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffences;\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffences =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffences;\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_licenceRSDC =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_licenceRSDC;\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_vehicleAccidentsClaims =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_vehicleAccidentsClaims;\r\n\t\t\t\t\tform.mainPolicyHolder.tenYears_chargedOrConvictedOffences =\r\n\t\t\t\t\t\tform.driver.drivers[0].tenYears_chargedOrConvictedOffences;\r\n\r\n\t\t\t\t\tform.mainPolicyHolderContact =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact || {};\r\n\t\t\t\t\tform.mainPolicyHolderContact.postalOption = true;\r\n\t\t\t\t\tform.mainPolicyHolderContact.emailAddress1 = formData.email;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (form.mainPolicyHolderContact.address == undefined) {\r\n\t\t\t\t\tform.mainPolicyHolderContact.address =\r\n\t\t\t\t\t\tform.aboutYourCar.address;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalOption = false;\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (form.getStarted.personOrCompany == \"company\") {\r\n\t\t\t\tform.companyContact = form.companyContact || {};\r\n\r\n\t\t\t\tform.companyContact.postalOption = true;\r\n\r\n\t\t\t\tform.companyContact.title = form.driver.drivers[0].person.title;\r\n\t\t\t\tform.companyContact.firstName =\r\n\t\t\t\t\tform.driver.drivers[0].person.firstName;\r\n\t\t\t\tform.companyContact.lastName =\r\n\t\t\t\t\tform.driver.drivers[0].person.lastName;\r\n\t\t\t\tform.companyContact.gender =\r\n\t\t\t\t\tform.driver.drivers[0].person.gender;\r\n\t\t\t\tform.companyContact.dateOfBirth =\r\n\t\t\t\t\tform.driver.drivers[0].person.dateOfBirth;\r\n\r\n\t\t\t\tif (form.companyContact.address == undefined) {\r\n\t\t\t\t\tform.companyContact.address = form.aboutYourCar.address;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.companyContact.address.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.companyContact.address.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.companyContact.postalOption = false;\r\n\t\t\t\t\t\tform.companyContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tform.companyContact.email = formData.email;\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.vehicleForm = form;\r\n\t\t}\r\n\r\n\t\tfunction constructDonePageViewModel() {\r\n\t\t\tvar done = {\r\n\t\t\t\tpolicyNumber: $stateParams.policyNumber,\r\n\t\t\t\taccountNumber: $stateParams.accountNumber,\r\n\t\t\t\tisAwaitingProcess: $stateParams.isAwaitingProcess,\r\n\t\t\t\tpolicyType: quoteOptions.getSelectedCoverType().label,\r\n\t\t\t\tpolicyStartDate: $ctrl.quoteModel.policyStartDate,\r\n\t\t\t\tshowYearMakeModelInSummary: false,\r\n\t\t\t\tsmartLinkURL: $window.qbe.fieldLabels.smartLink.url,\r\n\t\t\t\thashKey: $window.qbe.fieldLabels.smartLink.hashKey,\r\n\t\t\t\temail: $ctrl.quoteModel.email,\r\n\t\t\t\tdescription: \"Motor Insurance\",\r\n\t\t\t\tproductRefs: \"Motor Insurance\",\r\n\t\t\t};\r\n\r\n\t\t\tvar regoNumber = $ctrl.quoteModel.regoNumber || \"\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.quoteModel.vehicleForm.tellUsYourRegoNumber &&\r\n\t\t\t\t$ctrl.quoteModel.vehicleForm.tellUsYourRegoNumber.regoNumber\r\n\t\t\t) {\r\n\t\t\t\tdone.showYearMakeModelInSummary = true;\r\n\t\t\t}\r\n\t\t\tdone.regoNumber = regoNumber.toUpperCase();\r\n\r\n\t\t\tif ($ctrl.quoteModel.vehicleForm.aboutYourCar.regoSearchResponse) {\r\n\t\t\t\tvar year =\r\n\t\t\t\t\t\t$ctrl.quoteModel.vehicleForm.aboutYourCar\r\n\t\t\t\t\t\t\t.regoSearchResponse.modelYear,\r\n\t\t\t\t\tmake =\r\n\t\t\t\t\t\t$ctrl.quoteModel.vehicleForm.aboutYourCar\r\n\t\t\t\t\t\t\t.regoSearchResponse.make,\r\n\t\t\t\t\tmodel =\r\n\t\t\t\t\t\t$ctrl.quoteModel.vehicleForm.aboutYourCar\r\n\t\t\t\t\t\t\t.regoSearchResponse.model;\r\n\r\n\t\t\t\tdone.yearMakeModel = year + \" \" + make + \" \" + model;\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.quoteModel.vehicleForm.mainPolicyHolder) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.vehicleForm.mainPolicyHolder.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.vehicleForm.mainPolicyHolder.lastName;\r\n\t\t\t} else if ($ctrl.quoteModel.vehicleForm.companyContact) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.vehicleForm.companyContact.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.vehicleForm.companyContact.lastName;\r\n\t\t\t\tdone.email = $ctrl.quoteModel.vehicleForm.companyContact.email;\r\n\t\t\t}\r\n\r\n\t\t\tdone.purchaseDate = moment()\r\n\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\treturn done;\r\n\t\t}\r\n\r\n\t\t$ctrl.initDonePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar done = storage.getItem(\"done\");\r\n\t\t\tif (!done || !done.policyNumber) {\r\n\t\t\t\tdone = constructDonePageViewModel();\r\n\t\t\t\t$ctrl.smartLink = smartLinkService.generateLink(done);\r\n\r\n\t\t\t\t/* tracking payment complete for gtm */\r\n\t\t\t\tvar paymentConfirmationDetails = storage.getItem(\"confirmation-details\");\r\n\t\t\t\tvar receiptNumber = '';\r\n\t\t\t\tvar paymentType = '';\r\n\t\t\t\tvar creditCardConfirmation = storage.getItem(\r\n\t\t\t\t\t\"creditcard-confirm-details\"\r\n\t\t\t\t);\r\n\t\t\t\tvar paypalConfirmationData = storage.getItem(\"paypal-confirm-details\");\r\n\t\t\t\tvar directDebitConfirmationData = storage.getItem(\r\n\t\t\t\t\t\"direct-debit-confirm-details\"\r\n\t\t\t\t);\r\n\t\t\t\tvar creditCardConfirmationData = storage.getItem(\r\n\t\t\t\t\t\"creditcard-confirm-details\"\r\n\t\t\t\t);\r\n\t\t\t\tif (paypalConfirmationData.isSuccess) {\r\n\t\t\t\t\treceiptNumber = paypalConfirmationData.receiptNumber;\r\n\t\t\t\t\tpaymentType = 'payPal';\r\n\t\t\t\t}\r\n\t\t\t\telse if (creditCardConfirmationData.isSuccess) {\r\n\t\t\t\t\treceiptNumber = creditCardConfirmationData.receiptNumber;\r\n\t\t\t\t\tpaymentType= 'creditCard';\r\n\t\t\t\t}\r\n\t\t\t\telse if (directDebitConfirmationData.isSuccess) {\r\n\t\t\t\t\treceiptNumber = directDebitConfirmationData.receiptNumber;\r\n\t\t\t\t\tpaymentType= 'bankAccount';\r\n\t\t\t\t}\t\t\t\t\r\n\r\n\t\t\t\tgtmService.trackTransactionCompleted(\r\n\t\t\t\t\t$state.current,\r\n\t\t\t\t\tdone,\r\n\t\t\t\t\t$ctrl.quoteModel,\r\n\t\t\t\t\tpaymentConfirmationDetails.referenceNumber,\r\n\t\t\t\t\treceiptNumber,\r\n\t\t\t\t\tpaymentType\r\n\t\t\t\t);\r\n\t\t\t\t/* end tracking payment complete for gtm */\r\n\r\n\t\t\t\tperformMAServices(\"paid\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.storage.clear();\r\n\t\t\tstorage.setItem(\"done\", done);\r\n\t\t\tvar $columns = $(\".columns\").get(0);\r\n\t\t\t$columns.classList.remove(\"print-ready\");\r\n\t\t\t$ctrl.done = done;\r\n\t\t\t$ctrl.done.campaignSteps = {};\r\n\r\n\t\t\t// check if campaign code is valid\r\n\t\t\tif (\r\n\t\t\t\tquoteModel.quoteResult.response.isCampaignCodeValid ||\r\n\t\t\t\tquoteModel.quoteResult.response.isGiftCardApplied\r\n\t\t\t) {\r\n\t\t\t\t// get campaign next steps\r\n\t\t\t\t$ctrl.done.campaignSteps = campaignService.getCampaignConfig(\r\n\t\t\t\t\tquoteModel.quoteResult.response.campaignCode,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else $ctrl.done.campaignSteps.isCampaignCodeValid = false;\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"submit-feedback\", submitFeedback);\r\n\r\n\t\tfunction submitFeedback() {\r\n\t\t\tif ($ctrl.done.policyNumber != null && $ctrl.smartLink != null) {\r\n\t\t\t\twindow.open($ctrl.smartLink, \"_blank\");\r\n\t\t\t} else {\r\n\t\t\t\tvoid 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// TODO: fix this to not use timeout\r\n\t\tsetTimeout(function () {\r\n\t\t\tQBE.expandCollapse.init();\r\n\t\t}, 1000);\r\n\r\n\t\t$ctrl.clear = function () {\r\n\t\t\t$scope.$broadcast(\"clear\");\r\n\t\t};\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = $scope.vehicleForm.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgetUserInput();\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", {\r\n\t\t\t\tmodal: \"saveQuote\",\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.moveToStep = function (step) {\r\n\t\t\t$state.go(dynamicRouter.getState(step));\r\n\t\t};\r\n\t},\r\n]);\r\n\nangular.module(\"qbePortal\").controller(\"HomeFormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"dynamicRouter\",\r\n\t\"$state\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"MAService\",\r\n\t\"Util\",\r\n\t\"userInputRepository\",\r\n\t\"portalServiceWrapper\",\r\n\t\"quoteOptions\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteModelFactory\",\r\n\t\"paymentService\",\r\n\t\"$stateParams\",\r\n\t\"quoteRequestRepository\",\r\n\t\"$q\",\r\n\t\"tokenTimeoutService\",\r\n\t\"$compile\",\r\n\t\"$window\",\r\n\t\"smartLinkService\",\r\n\t\"campaignService\",\r\n\t\"embargoTestService\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\tdynamicRouter,\r\n\t\t$state,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tMAService,\r\n\t\tutil,\r\n\t\tuserInputRepository,\r\n\t\tportalServiceWrapper,\r\n\t\tquoteOptions,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteModelFactory,\r\n\t\tpaymentService,\r\n\t\t$stateParams,\r\n\t\tquoteRequestRepository,\r\n\t\t$q,\r\n\t\ttokenTimeoutService,\r\n\t\t$compile,\r\n\t\t$window,\r\n\t\tsmartLinkService,\r\n\t\tcampaignService,\r\n\t\tembargoTestService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\t\tvar MAX_ACCESSORY_VALUE = 5000;\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tstorage.removeItem(\"policy-date-input\");\r\n\r\n\t\t\tvar stepConditions = {\r\n\t\t\t\t\"home.building\": function () {\r\n\t\t\t\t\treturn displayBuildingStep();\r\n\t\t\t\t},\r\n\t\t\t\t\"home.payment\": function () {\r\n\t\t\t\t\treturn $state.$current.name != \"home.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"home.done\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"home.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"home.policy-start-date\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"home.policy-start-date\";\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\tfunction displayBuildingStep() {\r\n\t\t\treturn !!userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.tellUsHowWeCanInsureYou.coverNeeds.building\"\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.isNextDisabled = false;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.formData = {};\r\n\t\t$ctrl.rapidEstimate = {};\r\n\t\t$ctrl.showRapidEstimate = false;\r\n\t\t$ctrl.pageState = {};\r\n\t\t$ctrl.convicitonDataObject = {};\r\n\t\t$ctrl.sideBarEmail = null;\r\n\r\n\t\t$ctrl.commonValues = {};\r\n\r\n\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t$ctrl.saveOnExit = false;\r\n\t\t$ctrl.smartLink = null;\r\n\r\n\t\t$window.onbeforeunload = function (event) {\r\n\t\t\texitSaveQuote();\r\n\t\t\tif ($ctrl.saveOnExit) {\r\n\t\t\t\t$rootScope.$digest();\r\n\t\t\t\treturn \"Are you sure you want to leave?\";\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"session-save-quote\", exitSaveQuote);\r\n\r\n\t\tfunction exitSaveQuote() {\r\n\t\t\tvar emailAddress = angular\r\n\t\t\t\t.element(\"div\")\r\n\t\t\t\t.find(\"[label-key=yourEmailAddress]\")\r\n\t\t\t\t.val();\r\n\r\n\t\t\tif (dynamicRouter.getPageTitle() != \"Payment\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.quoteModel.email != null ||\r\n\t\t\t\t\t$ctrl.sideBarEmail != null ||\r\n\t\t\t\t\temailAddress != \"\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tif ($ctrl.quoteModel && $ctrl.quoteModel.quoteResult) {\r\n\t\t\t\t\t\t$ctrl.saveOnExit = true;\r\n\t\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\t\tvar paymentFrequency = \"everyyear\";\r\n\r\n\t\t\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\t\t\t\t\tquote: \"true\",\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} else $rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Broadcasts\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t$rootScope.$broadcast(\"page-title-set\", $ctrl.title);\r\n\r\n\t\t//Functions\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Function call for Quick Quote\r\n\t\tfunction getQuickQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar quickQuoteOptions = quoteOptions.getOfferingPermutations(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\tgetCoverOptions(formData)\r\n\t\t\t);\r\n\t\t\tif (quickQuoteOptions) {\r\n\t\t\t\tgetQuickQuoteWith(quickQuoteOptions, callback);\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getRapidEstimate(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar rapidEstimateOptions = quoteOptions.getOfferingPermutations(\r\n\t\t\t\t\"rapidEstimate\",\r\n\t\t\t\tgetCoverOptions(formData)\r\n\t\t\t);\r\n\t\t\tgetQuickQuoteWith(rapidEstimateOptions, callback);\r\n\t\t}\r\n\r\n\t\tfunction getQuickQuoteWith(quoteOptions, callback) {\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.getQuickQuote(quoteOptions.permutations, quoteOptions.rules)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tbroadcastError(err, \"getQuickQuote error\");\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions = quoteOptions.getOfferingPermutations(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\tgetCoverOptions(formData)\r\n\t\t\t);\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getCoverOptions(formData) {\r\n\t\t\tif (formData.homeForm && formData.homeForm.tellUsAboutTheProperty) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\thomeOccupancy:\r\n\t\t\t\t\t\tformData.homeForm.tellUsAboutTheProperty\r\n\t\t\t\t\t\t\t.howIsHomeOccupied,\r\n\t\t\t\t\tbuildingType:\r\n\t\t\t\t\t\tformData.homeForm.tellUsAboutTheProperty.typeOfBuilding,\r\n\t\t\t\t\tneeds: formData.homeForm.tellUsHowWeCanInsureYou.coverNeeds,\r\n\t\t\t\t\tneedRapidEstimate: true,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tthrow \"Not able to find the data for calculating permutations\";\r\n\t\t}\r\n\r\n\t\t//Setting up initial values\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\thomeForm: {\r\n\t\t\t\t\tletsGetStarted: {\r\n\t\t\t\t\t\tstartCoverDate: moment()\r\n\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\t\t\tpersonOrCompany: \"person\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\trapidEstimate: {\r\n\t\t\t\t\t\tneedRapidEstimate: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmainPolicyHolderContact: {\r\n\t\t\t\t\t\tprimaryPhone: \"mobile\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tadditionalPolicyHolders: {\r\n\t\t\t\t\t\tprimaryPhone: \"mobile\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcompanyContactContact: {\r\n\t\t\t\t\t\tcompanyContactSamePostalAddress: true,\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttellUsAboutTheBuilding: {\r\n\t\t\t\t\t\thomeLevels: \"1\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmortgageOnProperty: {\r\n\t\t\t\t\t\tpropertyMortgagedWith: [],\r\n\t\t\t\t\t},\r\n\t\t\t\t\t//quote page\r\n\t\t\t\t\t// confirmYourOptionalBenefits:{\r\n\t\t\t\t\t// \taccdLossDmgCoverBuilding: true,\r\n\t\t\t\t\t// \taccdLossDmgCoverContents: true\r\n\t\t\t\t\t// }\r\n\t\t\t\t},\r\n\t\t\t};\r\n\r\n\t\t\tvar defaultStateExcess = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\t\t$ctrl.quoteModel.state\r\n\t\t\t);\r\n\t\t\tif (defaultStateExcess != null) {\r\n\t\t\t\tvar tempObj = {\r\n\t\t\t\t\thomeForm: {\r\n\t\t\t\t\t\tchooseYourExcess: {\r\n\t\t\t\t\t\t\thomeExcess: defaultStateExcess,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tdefaultValues = Object.extend(defaultValues, tempObj);\r\n\t\t\t}\r\n\r\n\t\t\tvar defaultPortableContentStateExcess = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\t\t$ctrl.quoteModel.state,\r\n\t\t\t\t1\r\n\t\t\t);\r\n\t\t\tif (defaultStateExcess != null) {\r\n\t\t\t\tvar tempObj2 = {\r\n\t\t\t\t\thomeForm: {\r\n\t\t\t\t\t\tchooseYourExcess: {\r\n\t\t\t\t\t\t\tportableContentsExcess: defaultPortableContentStateExcess,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tdefaultValues = Object.extend(defaultValues, tempObj2);\r\n\t\t\t}\r\n\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.sideBarEmail != null) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore &&\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore.yourEmailAddress =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.homeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tformData.homeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.homeForm.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t}\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\t// This method does not work for arrays\r\n\t\t$ctrl.getFormItem = function (formNameWithField) {\r\n\t\t\tvar finalValue = getFormInput();\r\n\t\t\tvar items = formNameWithField.split(\".\");\r\n\t\t\titems.forEach(function (value, idx) {\r\n\t\t\t\tfinalValue = finalValue[value];\r\n\t\t\t});\r\n\t\t\treturn finalValue;\r\n\t\t};\r\n\r\n\t\tfunction proceedToNextStep(formData) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tsaveQuoteIfRequired(formData);\r\n\t\t\ttestDeclineIfRequired(formData);\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t}\r\n\r\n\t\tfunction saveQuoteIfRequired(formData) {\r\n\t\t\tsaveQuoteNotRequiredFor = []; // 'home.estimate' , 'home.property' , 'home.building' , 'home.covers', 'home.details', 'home.done'] ;\r\n\t\t\tvar notRequired =\r\n\t\t\t\tsaveQuoteNotRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (!notRequired) {\r\n\t\t\t\tsaveQuote(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction broadcastError(err, msg) {\r\n\t\t\t$rootScope.$broadcast(\"error\", {\r\n\t\t\t\terrorMessage: msg,\r\n\t\t\t\tresponse: err,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction saveQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\tvar testEmbargo = embargoTestService.testEmbargoDecline(\r\n\t\t\t\t\t\tresp\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (testEmbargo != null) {\r\n\t\t\t\t\t\t$state.go(testEmbargo.declineType, testEmbargo);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tif (tokenTimeoutService.isSessionTimedout()) {\r\n\t\t\t\t\t\ttokenTimeoutService.handleTimeout();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbroadcastError(err, \"Save quote error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = $scope.homeForm.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgetUserInput();\r\n\t\t\tsetSelectedCoverType();\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", {\r\n\t\t\t\tmodal: \"saveQuote\",\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$ctrl.getCoverType = function () {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou &&\r\n\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds\r\n\t\t\t) {\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tvar building =\r\n\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds.building;\r\n\t\t\tvar content =\r\n\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds.contents;\r\n\r\n\t\t\tif (building && content) {\r\n\t\t\t\treturn \"building_and_contents\";\r\n\t\t\t} else if (building && !content) {\r\n\t\t\t\treturn \"building_only\";\r\n\t\t\t} else if (!building && content) {\r\n\t\t\t\treturn \"contents_only\";\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction clearPreviousQuotes() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tserviceResponseRepository.update(\"quickQuote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tquoteOptions.clearQuoteResults();\r\n\t\t}\r\n\r\n\t\t$ctrl.submitRapidEstimate = function (form) {\r\n\t\t\tvar isInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgtmService.trackEvent(\"rapid-estimate-submit\");\r\n\r\n\t\t\tclearPreviousQuotes();\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tsetSelectedCoverType();\r\n\t\t\tsetOfferingOrDecline();\r\n\t\t\tgetRapidEstimate(formData, function () {\r\n\t\t\t\tvar quoteResults = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\t\"quickQuote\"\r\n\t\t\t\t);\r\n\t\t\t\t$ctrl.showRapidEstimate = true;\r\n\t\t\t\t$scope.$root.$broadcast(\"process-rapid-estimates\", {\r\n\t\t\t\t\tformData: formData,\r\n\t\t\t\t\tresults: quoteResults,\r\n\t\t\t\t});\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to submit the form\r\n\t\t */\r\n\t\t$scope.$on(\"form-submit\", function (event, formName) {\r\n\t\t\t$ctrl.submit($scope[formName]);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to save the form\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-save-quote\", function (event, data) {\r\n\t\t\t$ctrl.sideBarEmail = data;\r\n\t\t\t$ctrl.save();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to assign the email address\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-assign-mail\", function (event, data) {\r\n\t\t\tif (data != \"\") $ctrl.sideBarEmail = data;\r\n\t\t});\r\n\r\n\t\t/*\r\n\t\t * Emited by rapid estimate panel component\r\n\t\t */\r\n\t\t$scope.$on(\"rapid-estimate-redirect\", function () {\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t});\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\t\t\tvar isInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tgtmService.trackEvent(\"next\");\r\n\t\t\t$scope.$root.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tcheckEstimatedRebuildCost(formData);\r\n\r\n\t\t\tcheckPrerequestDecline(formData);\r\n\r\n\t\t\tsetSelectedCoverType();\r\n\t\t\tif (setOfferingOrDecline($state.$current.name == \"home.estimate\")) {\r\n\t\t\t\tvar quickQuote = getQuickQuote(formData, function () {\r\n\t\t\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t\t\t\t$rootScope.$broadcast(\"perform-ma-service\", \"next\");\r\n\t\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t\t});\r\n\t\t\t\tif (!quickQuote) {\r\n\t\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction checkSpotValue(quoteModel) {\r\n\t\t\tif (util.isUndefinedOrNull(quoteModel.cordelInfo)) {\r\n\t\t\t\t$state.go(\"referral\", declineParams);\r\n\t\t\t}\r\n\r\n\t\t\tvar sumInsured = util.isUndefinedOrNull(\r\n\t\t\t\tquoteModel.cordelInfo.spotValue\r\n\t\t\t)\r\n\t\t\t\t? 0\r\n\t\t\t\t: Math.floor(quoteModel.cordelInfo.spotValue);\r\n\t\t\tvar lowerBand = util.isUndefinedOrNull(\r\n\t\t\t\tquoteModel.cordelInfo.lowerBand\r\n\t\t\t)\r\n\t\t\t\t? 0\r\n\t\t\t\t: Math.floor(quoteModel.cordelInfo.lowerBand);\r\n\t\t\tvar declineParams = {\r\n\t\t\t\tdeclineType: \"\",\r\n\t\t\t\tdeclineCodes: \"\",\r\n\t\t\t};\r\n\t\t\tif (\r\n\t\t\t\tisNaN(sumInsured) ||\r\n\t\t\t\tsumInsured <= 0 ||\r\n\t\t\t\tisNaN(lowerBand) ||\r\n\t\t\t\tlowerBand <= 0\r\n\t\t\t) {\r\n\t\t\t\t$state.go(\"referral\", declineParams);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction checkEstimatedRebuildCost(formData) {\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm.yourBuilding &&\r\n\t\t\t\tformData.homeForm.yourBuilding.isEstimatedRebuildCost == \"yes\"\r\n\t\t\t) {\r\n\t\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\t\tformData.homeForm.yourBuilding.buildingSumInsured = Math.floor(\r\n\t\t\t\t\tquoteModel.cordelInfo.spotValue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm.confirmYourSumsInsured &&\r\n\t\t\t\tformData.homeForm.confirmYourSumsInsured\r\n\t\t\t\t\t.isYourEstimatedRebuildCost == \"yes\"\r\n\t\t\t) {\r\n\t\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\t\tformData.homeForm.confirmYourSumsInsured.yourBuildingSumInsured = Math.floor(\r\n\t\t\t\t\tquoteModel.cordelInfo.spotValue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction setSelectedCoverType() {\r\n\t\t\tquoteOptions.setSelectedCoverType($ctrl.getCoverType(), \"standard\");\r\n\t\t}\r\n\r\n\t\tfunction setOfferingOrDecline(overwrite) {\r\n\t\t\ttry {\r\n\t\t\t\tsetSelectedOffering(overwrite);\r\n\t\t\t\treturn true;\r\n\t\t\t} catch (ex) {\r\n\t\t\t\t/*\r\n\t\t\t\t * this condition happens in case of no offering being available based on\r\n\t\t\t\t * occupancy or other conditions. This is condition happens for 'unoccupied' buildings\r\n\t\t\t\t * at the moment. @see HomeQuoteModel.getOfferings() for more details.\r\n\t\t\t\t */\r\n\t\t\t\tdeclinePolicy({\r\n\t\t\t\t\tdeclineType: \"decline\",\r\n\t\t\t\t});\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//!important - decline check is added in frontend as it is required for\r\n\t\t// release and GW wont be able to do that now\r\n\t\tfunction checkPrerequestDecline(formData) {\r\n\t\t\tvar decline = false;\r\n\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm &&\r\n\t\t\t\tformData.homeForm.tellUsAboutTheProperty &&\r\n\t\t\t\tformData.homeForm.tellUsAboutTheProperty.address &&\r\n\t\t\t\tformData.homeForm.tellUsAboutTheProperty.address.state ==\r\n\t\t\t\t\t\"AU_WA\"\r\n\t\t\t) {\r\n\t\t\t\t//address in WA\r\n\t\t\t\tif (\r\n\t\t\t\t\t[\"duplex\", \"triplex\", \"villa\", \"townhouse\"].indexOf(\r\n\t\t\t\t\t\tformData.homeForm.tellUsAboutTheProperty.typeOfBuilding\r\n\t\t\t\t\t) > -1\r\n\t\t\t\t) {\r\n\t\t\t\t\t// is 'duplex', 'triplex', 'villa', 'townhouse'\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tformData.homeForm.tellUsAboutTheBuilding\r\n\t\t\t\t\t\t\t.isStrataRegdCorp === \"yes\"\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t//managed by professional agent\r\n\t\t\t\t\t\tif (formData.homeForm.tellUsAboutTheBuilding) {\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tformData.homeForm.tellUsAboutTheBuilding\r\n\t\t\t\t\t\t\t\t\t.areUnitAboveBelow === true\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t//decline if units are above or below\r\n\t\t\t\t\t\t\t\tdecline = true;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\tformData.homeForm.tellUsAboutTheBuilding\r\n\t\t\t\t\t\t\t\t\t\t.corpInsureUnit === \"no\"\r\n\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t//decine if body corporate doesnt allows to insure\r\n\t\t\t\t\t\t\t\t\tdecline = true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (decline) {\r\n\t\t\t\tdeclinePolicy({\r\n\t\t\t\t\tdeclineType: \"decline\",\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//sets the selected offering if none is available\r\n\t\t//overwrite - if true the offering is updated even if it is already available\r\n\t\tfunction setSelectedOffering(overwrite) {\r\n\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t\tvar availableOfferings = $ctrl.quoteModel.getOfferings();\r\n\t\t\tif (overwrite) {\r\n\t\t\t\tquoteOptions.setSelectedOffering(availableOfferings[0]);\r\n\t\t\t} else {\r\n\t\t\t\tif (!quoteOptions.getSelectedOffering())\r\n\t\t\t\t\tquoteOptions.setSelectedOffering(availableOfferings[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handler for the home Events\r\n\t\t$scope.$on(\"home-rapid-estimate\", function (event, form) {\r\n\t\t\t$ctrl.submitRapidEstimate(form);\r\n\t\t});\r\n\r\n\t\t$ctrl.isRapidEstimateVisible = function () {\r\n\t\t\tif ($ctrl.commonValues.needRapidEstimate) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.refreshAddress = function () {\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\tvar address = null;\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.homeForm &&\r\n\t\t\t\t$ctrl.formData.homeForm.tellUsAboutTheProperty &&\r\n\t\t\t\t$ctrl.formData.homeForm.tellUsAboutTheProperty.address\r\n\t\t\t) {\r\n\t\t\t\taddress =\r\n\t\t\t\t\t$ctrl.formData.homeForm.tellUsAboutTheProperty.address;\r\n\t\t\t}\r\n\t\t\tportalServiceWrapper.refreshAddress(address).then(\r\n\t\t\t\tfunction (resp) {\r\n\t\t\t\t\tserviceResponseRepository.update(\r\n\t\t\t\t\t\t\"addressSearch\",\r\n\t\t\t\t\t\tresp.data\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$rootScope.$broadcast(\"update-quote-model-reference\");\r\n\t\t\t\t},\r\n\t\t\t\tfunction (error) {\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tfunction testDeclineIfRequired(formData) {\r\n\t\t\tvar declineTestRequiredFor = [\r\n\t\t\t\t\"home.property\",\r\n\t\t\t\t\"home.building\",\r\n\t\t\t\t\"home.covers\",\r\n\t\t\t\t\"home.details\",\r\n\t\t\t\t\"home.quote\",\r\n\t\t\t\t\"home.contact\",\r\n\t\t\t];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tdeclineTestRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\ttestDecline(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDecline(formData) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar declineQuoteOptions = quoteOptions.getTestQuoteDeclineOptions(\r\n\t\t\t\t$state.$current.name\r\n\t\t\t);\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.testQuoteDecline(declineQuoteOptions)\r\n\t\t\t\t.catch(function (decline) {\r\n\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\tdeclinePolicy(decline, \"Policy Was Declined\");\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction declinePolicy(decline) {\r\n\t\t\tvar redirectPage = decline.declineType || \"decline\";\r\n\r\n\t\t\t//Check if needs to be redirected\r\n\t\t\tformData = getUserInput();\r\n\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm &&\r\n\t\t\t\tformData.homeForm.cycleCover &&\r\n\t\t\t\tformData.homeForm.cycleCover.coverItemsList\r\n\t\t\t) {\r\n\t\t\t\tvar shouldRefer =\r\n\t\t\t\t\tgetTotalValue(formData.homeForm.cycleCover.coverItemsList) >\r\n\t\t\t\t\tMAX_ACCESSORY_VALUE;\r\n\t\t\t\tif (shouldRefer) {\r\n\t\t\t\t\tredirectPage = \"referral\";\r\n\t\t\t\t\tdecline.declineType = \"referral\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tstorage.clear();\r\n\t\t\tif (redirectPage == \"referral\") {\r\n\t\t\t\t$state.go(redirectPage, decline);\r\n\t\t\t} else {\r\n\t\t\t\t$state.go(redirectPage, decline);\r\n\t\t\t}\r\n\t\t\t// window.location.href = $ctrl.parentPath + '/home/' + redirectPage;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfunction getTotalValue(list) {\r\n\t\t\tvar totalValue = 0;\r\n\r\n\t\t\tlist.forEach(function (value) {\r\n\t\t\t\ttotalValue += Number(value.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn totalValue;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\t// $ctrl.isNextDisabled = false;\r\n\t\t\t$scope.$on(\"disable-next\", function (event, disable) {\r\n\t\t\t\t$ctrl.isNextDisabled = disable;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$on(\"conviction-check\", function (event, convictionData) {\r\n\t\t\t\t// $ctrl.isNextDisabled = disable;\r\n\t\t\t\tif (convictionData) {\r\n\t\t\t\t\t$ctrl.convicitonDataObject[\r\n\t\t\t\t\t\tconvictionData.conviction\r\n\t\t\t\t\t] = convictionData;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar disabled = false;\r\n\t\t\t\tfor (var item in $ctrl.convicitonDataObject) {\r\n\t\t\t\t\t// console.log($ctrl.convicitonDataObject[item].section[$ctrl.convicitonDataObject[item].conviction].$name)\r\n\t\t\t\t\tif ($ctrl.convicitonDataObject[item].input === \"unknown\") {\r\n\t\t\t\t\t\t//additional check to see if the element exists on screen\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t$(\r\n\t\t\t\t\t\t\t\t'[name=\"' +\r\n\t\t\t\t\t\t\t\t\t$ctrl.convicitonDataObject[item].section[\r\n\t\t\t\t\t\t\t\t\t\t$ctrl.convicitonDataObject[item]\r\n\t\t\t\t\t\t\t\t\t\t\t.conviction\r\n\t\t\t\t\t\t\t\t\t].$name +\r\n\t\t\t\t\t\t\t\t\t'\"]'\r\n\t\t\t\t\t\t\t).length > 0\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tdisabled = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t$ctrl.isNextDisabled = disabled;\r\n\t\t\t});\r\n\r\n\t\t\t// debugger;\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\r\n\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\r\n\t\t\tif ($ctrl.state.current.name == \"home.estimate\") {\r\n\t\t\t\tinvalidatePreviousQuote();\r\n\t\t\t}\r\n\t\t\tprepopulateRetrievedQuote();\r\n\r\n\t\t\t//enrich address\r\n\t\t\t$ctrl.refreshAddress();\r\n\t\t\tapplyPromoCodeThroughLink();\r\n\t\t\tsetWebBotValues();\r\n\t\t};\r\n\r\n\t\tfunction applyPromoCodeThroughLink() {\r\n\t\t\tif ($stateParams.promotionalCode) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\t\t\t\tif (formData.homeForm) {\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore =\r\n\t\t\t\t\t\tformData.homeForm.tellUsABitMore || {};\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore.promotionalCode =\r\n\t\t\t\t\t\t$stateParams.promotionalCode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction setWebBotValues() {\r\n\t\t\tif (\r\n\t\t\t\t$stateParams.isSyntheticTransaction_Ext &&\r\n\t\t\t\t$stateParams.syntheticSource_Ext\r\n\t\t\t) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.homeForm &&\r\n\t\t\t\t\t$stateParams.isSyntheticTransaction_Ext == \"true\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tformData.homeForm.isSyntheticTransaction_Ext =\r\n\t\t\t\t\t\t$stateParams.isSyntheticTransaction_Ext;\r\n\t\t\t\t\tformData.homeForm.syntheticSource_Ext =\r\n\t\t\t\t\t\t$stateParams.syntheticSource_Ext;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction prepopulateRetrievedQuote() {\r\n\t\t\tif ($stateParams.quoteNo && $stateParams.email) {\r\n\t\t\t\tgtmService.trackEvent(\"retrieve-quote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.retrieveSavedQuote(\r\n\t\t\t\t\t\t$stateParams.quoteNo,\r\n\t\t\t\t\t\t$stateParams.email\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (transformedQuote) {\r\n\t\t\t\t\t\t$q.when(\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshAddress(\r\n\t\t\t\t\t\t\t\ttransformedQuote.tellUsAboutTheProperty.address\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t).then(function () {\r\n\t\t\t\t\t\t\t$ctrl.formData.homeForm = transformedQuote;\r\n\t\t\t\t\t\t\tvar serviceResponse = storage.getItem(\r\n\t\t\t\t\t\t\t\t\"service-response\"\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"policy-address\",\r\n\t\t\t\t\t\t\t\tserviceResponse.quote.policyAddress\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tuserInputRepository.update($ctrl.formData);\r\n\t\t\t\t\t\t\tquoteOptions.setSelectedOffering(\r\n\t\t\t\t\t\t\t\ttransformedQuote.info.offering\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tstorage.setItem(\"retrieve\", true);\r\n\r\n\t\t\t\t\t\t\tvar testEmbargo = embargoTestService.testEmbargoDecline(\r\n\t\t\t\t\t\t\t\tserviceResponse\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (testEmbargo != null) {\r\n\t\t\t\t\t\t\t\t$state.go(testEmbargo.declineType, testEmbargo);\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tmoment()\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\") >\r\n\t\t\t\t\t\t\t\tmoment(serviceResponse.quote.periodStartDate)\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\")\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\t\"policy-date-input\",\r\n\t\t\t\t\t\t\t\t\t$ctrl.formData\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"home.policy-start-date\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"home.property\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tvar expiredQuote = storage.getItem(\"expired-quote\");\r\n\t\t\t\t\t\tif (expiredQuote.displayStatus == \"Expired\") {\r\n\t\t\t\t\t\t\tstorage.removeItem(\"expired-quote\");\r\n\t\t\t\t\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t\t\t\t\twindow.qbe.fieldLabels.expiredQuoteRedirect\r\n\t\t\t\t\t\t\t\t\t.homeExpired\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Updated data based on the common value\r\n\t\tfunction updateFormDataBasedOnCommonValues(name) {\r\n\t\t\tif (\r\n\t\t\t\t[\r\n\t\t\t\t\t\"typeOfBuilding\",\r\n\t\t\t\t\t\"wallsMadeOf\",\r\n\t\t\t\t\t\"howIsHomeOccupied\",\r\n\t\t\t\t\t\"propertyProfessionalAgent\",\r\n\t\t\t\t].indexOf(name) > -1\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\t\t\t\t//reset cover needs\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou &&\r\n\t\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds\r\n\t\t\t\t) {\r\n\t\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$ctrl.formData = formData;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.initEstimatePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\t// $ctrl.refreshAddress();\r\n\r\n\t\t\t$scope.$root.$on(\"common-value-update\", function (event, update) {\r\n\t\t\t\t$ctrl.commonValues[update.name] = update.value;\r\n\t\t\t\tupdateFormDataBasedOnCommonValues(update.name);\r\n\t\t\t});\r\n\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\r\n\t\t\tif (form.rapidEstimate) {\r\n\t\t\t\t// form.rapidEstimate.needRapidEstimate = false;\r\n\t\t\t\t// QBE would like to keep this persistent.\r\n\t\t\t}\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initPropertyPage = function () {\r\n\t\t\t// re-trigger pulsating icon to wait for the quote service return\r\n\t\t\tvar triggerPulse = storage.getItem(\"retrieve\");\r\n\t\t\tif (angular.equals(triggerPulse, {})) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\r\n\t\t\tif (quoteModel.address.state === \"AU_WA\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t[\"unit\", \"flat\"].indexOf(\r\n\t\t\t\t\t\tform.tellUsAboutTheProperty.typeOfBuilding\r\n\t\t\t\t\t) != -1 &&\r\n\t\t\t\t\tquoteModel.getHomeNeedType() != \"contents_only\" &&\r\n\t\t\t\t\tquoteModel.isBuildingFloodSafe()\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (!form.tellUsAboutTheBuilding) {\r\n\t\t\t\t\t\tform.tellUsAboutTheBuilding = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tform.tellUsAboutTheBuilding.isUnitAboveGround = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initCoverPage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\r\n\t\t\tif (quoteModel.dwelling.coverType !== \"contents_only\") {\r\n\t\t\t\tcheckSpotValue(quoteModel);\r\n\t\t\t}\r\n\r\n\t\t\tif (form.tellUsHowWeCanInsureYou) {\r\n\t\t\t\tif (!form.portableContents) {\r\n\t\t\t\t\tform.portableContents = {};\r\n\t\t\t\t\tform.portableContents.coverPortableContents =\r\n\t\t\t\t\t\tform.tellUsHowWeCanInsureYou.needCoverOutsideHome ==\r\n\t\t\t\t\t\ttrue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (form.rapidEstimate) {\r\n\t\t\t\t// copy quote/confirmYourSumsInsured to cover/yourBuilding values after requote\r\n\t\t\t\tif (form.confirmYourSumsInsured) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tform.confirmYourSumsInsured.isYourEstimatedRebuildCost\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.yourBuilding.isEstimatedRebuildCost =\r\n\t\t\t\t\t\t\tform.confirmYourSumsInsured.isYourEstimatedRebuildCost;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (form.confirmYourSumsInsured.yourBuildingSumInsured) {\r\n\t\t\t\t\t\tform.yourBuilding.buildingSumInsured =\r\n\t\t\t\t\t\t\tform.confirmYourSumsInsured.yourBuildingSumInsured;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (form.confirmYourSumsInsured.yourContentsSumInsured) {\r\n\t\t\t\t\t\tform.yourContents.contentsSumInsured =\r\n\t\t\t\t\t\t\tform.confirmYourSumsInsured.yourContentsSumInsured;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (!form.yourBuilding) {\r\n\t\t\t\t\t\tform.yourBuilding = {};\r\n\r\n\t\t\t\t\t\tif (form.rapidEstimate.buildingInsureAmount) {\r\n\t\t\t\t\t\t\tform.yourBuilding.buildingSumInsured =\r\n\t\t\t\t\t\t\t\tform.rapidEstimate.buildingInsureAmount;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!form.yourContents) {\r\n\t\t\t\t\t\tform.yourContents = {};\r\n\r\n\t\t\t\t\t\tif (form.rapidEstimate.contentInsureAmount) {\r\n\t\t\t\t\t\t\tform.yourContents.contentsSumInsured =\r\n\t\t\t\t\t\t\t\tform.rapidEstimate.contentInsureAmount;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set rent from rapid estimate if available\r\n\t\t\t\tif (!form.rentDefault) {\r\n\t\t\t\t\tform.rentDefault = {};\r\n\r\n\t\t\t\t\tform.rentDefault.rentDefault = true;\r\n\t\t\t\t\tif (form.rapidEstimate.rentDefaultCoverAmount) {\r\n\t\t\t\t\t\tform.rentDefault.rentCurrentWeekly =\r\n\t\t\t\t\t\t\tform.rapidEstimate.rentDefaultCoverAmount;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (form.rapidEstimate.uptoWeeks) {\r\n\t\t\t\t\t\tform.rentDefault.rentXWeeks =\r\n\t\t\t\t\t\t\tform.rapidEstimate.uptoWeeks;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tform.tellUsHowWeCanInsureYou &&\r\n\t\t\t\tform.tellUsHowWeCanInsureYou.coverNeeds &&\r\n\t\t\t\tform.tellUsHowWeCanInsureYou.coverNeeds.malicious_damage\r\n\t\t\t) {\r\n\t\t\t\tif (!form.theftAndVandalismByTenants) {\r\n\t\t\t\t\tform.theftAndVandalismByTenants = {\r\n\t\t\t\t\t\ttheftCoverContents: true,\r\n\t\t\t\t\t\ttheftCoverBuilding: true,\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initQuotePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\r\n\t\t\tif (!form.confirmYourLevelOfCover) {\r\n\t\t\t\tform.confirmYourLevelOfCover = {};\r\n\t\t\t}\r\n\r\n\t\t\t//sets selected offering\r\n\t\t\tvar offering = quoteOptions.getSelectedOffering();\r\n\t\t\tif (offering.descriptor) {\r\n\t\t\t\tform.confirmYourLevelOfCover.yourChosenCover =\r\n\t\t\t\t\toffering.descriptor;\r\n\t\t\t} else {\r\n\t\t\t\tvoid 0;\r\n\t\t\t}\r\n\r\n\t\t\t//sets the sum insured\r\n\t\t\tif (!form.confirmYourSumsInsured) {\r\n\t\t\t\tform.confirmYourSumsInsured = {};\r\n\t\t\t}\r\n\r\n\t\t\tif (form.yourBuilding && form.yourBuilding.isEstimatedRebuildCost) {\r\n\t\t\t\tform.confirmYourSumsInsured.isYourEstimatedRebuildCost =\r\n\t\t\t\t\tform.yourBuilding.isEstimatedRebuildCost;\r\n\t\t\t}\r\n\r\n\t\t\tif (form.yourBuilding && form.yourBuilding.buildingSumInsured) {\r\n\t\t\t\tform.confirmYourSumsInsured.yourBuildingSumInsured =\r\n\t\t\t\t\tform.yourBuilding.buildingSumInsured;\r\n\t\t\t}\r\n\r\n\t\t\tif (form.yourContents && form.yourContents.contentsSumInsured) {\r\n\t\t\t\tform.confirmYourSumsInsured.yourContentsSumInsured =\r\n\t\t\t\t\tform.yourContents.contentsSumInsured;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tform.portableContents &&\r\n\t\t\t\tform.portableContents.coverPortableContentLimit\r\n\t\t\t) {\r\n\t\t\t\tform.confirmYourSumsInsured.generalPortableContentsLimit =\r\n\t\t\t\t\tform.portableContents.coverPortableContentLimit;\r\n\t\t\t}\r\n\r\n\t\t\t//accidental Damage\r\n\t\t\tif (!form.confirmYourOptionalBenefits) {\r\n\t\t\t\tform.confirmYourOptionalBenefits = {};\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\tform.accidentalLossOrDamage &&\r\n\t\t\t\tform.accidentalLossOrDamage.coverAccDmgBuilding\r\n\t\t\t) {\r\n\t\t\t\t// confirmYourOptionalBenefits\r\n\t\t\t\tform.confirmYourOptionalBenefits.accdLossDmgCoverBuilding =\r\n\t\t\t\t\tform.accidentalLossOrDamage.coverAccDmgBuilding == true;\r\n\t\t\t} else {\r\n\t\t\t\tform.confirmYourOptionalBenefits.accdLossDmgCoverBuilding = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tform.accidentalLossOrDamage &&\r\n\t\t\t\tform.accidentalLossOrDamage.coverAccDmgContents\r\n\t\t\t) {\r\n\t\t\t\tform.confirmYourOptionalBenefits.accdLossDmgCoverContents =\r\n\t\t\t\t\tform.accidentalLossOrDamage.coverAccDmgContents == true;\r\n\t\t\t} else {\r\n\t\t\t\tform.confirmYourOptionalBenefits.accdLossDmgCoverContents = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tform.domesticWorkerCompensation &&\r\n\t\t\t\tform.domesticWorkerCompensation.domesticWorkerCompCover\r\n\t\t\t) {\r\n\t\t\t\tform.confirmYourOptionalBenefits.domesticWrkCompCover =\r\n\t\t\t\t\tform.domesticWorkerCompensation.domesticWorkerCompCover ==\r\n\t\t\t\t\ttrue;\r\n\t\t\t} else {\r\n\t\t\t\tform.confirmYourOptionalBenefits.domesticWrkCompCover = false;\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t\t// getRequote(formData);\r\n\t\t\t// $scope.$broadcast('requote') ;\r\n\t\t\tvoid 0;\r\n\t\t};\r\n\r\n\t\t$ctrl.initContactPage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tsetDefaultContactValues();\r\n\t\t\t// \tvar form \t\t= $ctrl.formData.homeForm;\r\n\t\t\t// \tvar quoteModel \t= $ctrl.quoteModel;\r\n\t\t\t//\r\n\t\t\t// \t// if ( !form.mainPolicyHolderContact ){\r\n\t\t\t// \t// \tform.mainPolicyHolderContact = {};\r\n\t\t\t// \t// \tform.mainPolicyHolderContact.primaryPhone = 'mobile';\r\n\t\t\t// \t// }\r\n\t\t\t//\r\n\t\t\t//\r\n\t\t\t//\r\n\t\t\t// \t$ctrl.formData.homeForm = form;\r\n\t\t\t//\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValues() {\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.homeForm,\r\n\t\t\t\tpostalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\t\tif (form.letsGetStarted.personOrCompany == \"person\") {\r\n\t\t\t\tform.mainPolicyHolder = form.mainPolicyHolder || {};\r\n\r\n\t\t\t\tform.mainPolicyHolderContact.personContactSamePostalAddress = true;\r\n\r\n\t\t\t\tif (form.mainPolicyHolderContact.address == undefined) {\r\n\t\t\t\t\tform.mainPolicyHolderContact.address =\r\n\t\t\t\t\t\tform.tellUsAboutTheProperty.address;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.personContactSamePostalAddress = false;\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.companyContactContact\r\n\t\t\t\t\t\t\t\t.companyContactResidentialAddress\r\n\t\t\t\t\t\t\t\t.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.companyContactContact\r\n\t\t\t\t\t\t\t\t.companyContactResidentialAddress.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.companyContactContact.companyContactSamePostalAddress = false;\r\n\t\t\t\t\t\tform.companyContactContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Initialisation method of the payment page\r\n\t\t */\r\n\t\t$ctrl.initPaymentPage = function () {\r\n\t\t\t// $ctrl.storage.checkValidity();\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\t// $ctrl.termsAndConditions = false;\r\n\t\t\t//\r\n\t\t\t// var formData = getUserInput();\r\n\t\t\t// formData.paymentForm.paymentDetails.termsAndConditions = false ;\r\n\t\t\t// $ctrl.formData = formData ;\r\n\t\t\t//\r\n\t\t\t// getQuickQuote(formData);\r\n\t\t\t$scope.$on(\"payment-method-changed\", function (\r\n\t\t\t\tevent,\r\n\t\t\t\tpaymentMethod\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.paymentMethod = paymentMethod;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$on(\"terms-and-conditions-changed\", function (\r\n\t\t\t\tevent,\r\n\t\t\t\ttermsAndConditions\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.termsAndConditions = termsAndConditions;\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tfunction constructDonePageViewModel() {\r\n\t\t\tvar done = {\r\n\t\t\t\tpolicyNumber: $stateParams.policyNumber,\r\n\t\t\t\taccountNumber: $stateParams.accountNumber,\r\n\t\t\t\tisAwaitingProcess: $stateParams.isAwaitingProcess,\r\n\t\t\t\tpolicyType: $ctrl.quoteModel.getSelectedOffering().label,\r\n\t\t\t\tpolicyStartDate: $ctrl.quoteModel.policyStartDate,\r\n\t\t\t\taddress: $ctrl.quoteModel.address,\r\n\t\t\t\tpurchaseDate: moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\tsmartLinkURL: $window.qbe.fieldLabels.smartLink.url,\r\n\t\t\t\thashKey: $window.qbe.fieldLabels.smartLink.hashKey,\r\n\t\t\t\temail: $ctrl.quoteModel.email,\r\n\t\t\t\tdescription: \"Home Insurance\",\r\n\t\t\t\tproductRefs: \"Home Insurance\",\r\n\t\t\t};\r\n\r\n\t\t\tif ($ctrl.quoteModel.homeForm.mainPolicyHolder) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.homeForm.mainPolicyHolder.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.homeForm.mainPolicyHolder.lastName;\r\n\t\t\t} else if ($ctrl.quoteModel.homeForm.companyContact) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.homeForm.companyContact.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.homeForm.companyContact.lastName;\r\n\t\t\t\tdone.email = $ctrl.quoteModel.homeForm.companyContact.email;\r\n\t\t\t}\r\n\r\n\t\t\treturn done;\r\n\t\t}\r\n\r\n\t\t$ctrl.initDonePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar done = storage.getItem(\"done\");\r\n\t\t\tif (!done || !done.policyNumber) {\r\n\t\t\t\tdone = constructDonePageViewModel();\r\n\t\t\t\t$ctrl.smartLink = smartLinkService.generateLink(done);\r\n\t\t\t\tgtmService.trackTransaction(\r\n\t\t\t\t\t$state.current,\r\n\t\t\t\t\tdone,\r\n\t\t\t\t\t$ctrl.quoteModel\r\n\t\t\t\t);\r\n\t\t\t\tperformMAServices(\"paid\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.storage.clear();\r\n\t\t\tstorage.setItem(\"done\", done);\r\n\t\t\tvar $columns = $(\".columns\").get(0);\r\n\t\t\t$columns.classList.remove(\"print-ready\");\r\n\t\t\t$ctrl.done = done;\r\n\t\t\t$ctrl.done.campaignSteps = {};\r\n\r\n\t\t\t// check if campaign code is valid\r\n\t\t\tif (\r\n\t\t\t\tquoteModel.quoteResult.response.isCampaignCodeValid ||\r\n\t\t\t\tquoteModel.quoteResult.response.isGiftCardApplied\r\n\t\t\t) {\r\n\t\t\t\t// get campaign next steps\r\n\t\t\t\t$ctrl.done.campaignSteps = campaignService.getCampaignConfig(\r\n\t\t\t\t\tquoteModel.quoteResult.response.campaignCode,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else $ctrl.done.campaignSteps.isCampaignCodeValid = false;\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"submit-feedback\", submitFeedback);\r\n\r\n\t\tfunction submitFeedback() {\r\n\t\t\tif ($ctrl.done.policyNumber != null && $ctrl.smartLink != null) {\r\n\t\t\t\twindow.open($ctrl.smartLink, \"_blank\");\r\n\t\t\t} else {\r\n\t\t\t\tvoid 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Events\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Enrich address on address selection\r\n\t\t */\r\n\t\t$scope.$on(\"enrich-address\", function (value) {\r\n\t\t\t$ctrl.refreshAddress();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalidate-quotes\", invalidatePreviousQuote);\r\n\r\n\t\tfunction invalidatePreviousQuote() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tstorage.removeItem(\"policy-address\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, form) {\r\n\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tcheckEstimatedRebuildCost(formData);\r\n\r\n\t\t\tgetRequote(formData, null, function (resp) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbFormSection.directive to move to a page\r\n\t\t */\r\n\t\t$scope.$on(\"moveToPage\", function (event, page) {\r\n\t\t\t$ctrl.moveToPage(page);\r\n\t\t});\r\n\r\n\t\t$ctrl.moveToPage = function (page) {\r\n\t\t\t$state.go(page);\r\n\t\t};\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tif (policyEmail) {\r\n\t\t\t} else {\r\n\t\t\t\tpolicyEmail = userInputRepository.get(\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t\"homeForm.tellUsABitMore.yourEmailAddress\"\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar maData = {\r\n\t\t\t\tstate: quoteModel ? quoteModel.state : null,\r\n\t\t\t\tpostCode: quoteModel ? quoteModel.postCode : null,\r\n\t\t\t\tcampaignCode: quoteModel ? quoteModel.campaignCode : null,\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult ? quoteResult.getAnnual() : null,\r\n\t\t\t\tmonthlyResult: quoteResult ? quoteResult.getMonthly() : null,\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\r\n\t\t\tif ($state.current.name == \"home.done\") {\r\n\t\t\t\tmaData.inceptionDate = moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.address &&\r\n\t\t\t\tquoteModel.address.addressLine1\r\n\t\t\t) {\r\n\t\t\t\tmaData.address =\r\n\t\t\t\t\tquoteModel.address.addressLine1 +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\tquoteModel.address.city;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.homeForm &&\r\n\t\t\t\tquoteModel.homeForm.mainPolicyHolderContact &&\r\n\t\t\t\tquoteModel.homeForm.mainPolicyHolderContact.contactNumber\r\n\t\t\t) {\r\n\t\t\t\tmaData.contactNumber =\r\n\t\t\t\t\tquoteModel.homeForm.mainPolicyHolderContact.contactNumber;\r\n\t\t\t}\r\n\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\t},\r\n]);\r\n\nangular.module(\"qbePortal\").controller(\"PaymentController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteOptions\",\r\n\t\"paymentService\",\r\n\t\"quoteModelFactory\",\r\n\t\"dynamicRouter\",\r\n\t\"portalServiceWrapper\",\r\n\t\"MAService\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"$q\",\r\n\t\"storage\",\r\n\t\"jwtHelper\",\r\n\t\"gtmService\",\r\n\t\"quoteRequestRepository\",\r\n\t\"MODULE_INFO\",\r\n\t\"$compile\",\r\n\t\"$sce\",\r\n\t\"paymentLoggerService\",\r\n\t\"CREDIT_CARD_ATTEMPT\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteOptions,\r\n\t\tpaymentService,\r\n\t\tquoteModelFactory,\r\n\t\tdynamicRouter,\r\n\t\tportalServiceWrapper,\r\n\t\tMAService,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$q,\r\n\t\tstorage,\r\n\t\tjwtHelper,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository,\r\n\t\tMODULE_INFO,\r\n\t\t$compile,\r\n\t\t$sce,\r\n\t\tpaymentLoggerService,\r\n\t\tCREDIT_CARD_ATTEMPT\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\t\t$ctrl.showPaymentProcessError = false;\r\n\t\t$ctrl.paymentAttempCounter = 0;\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t$scope.$on(\"session-save-quote\", function () {\r\n\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t});\r\n\r\n\t\t$ctrl.getLabelFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tswitch ($state.$current.parent.name) {\r\n\t\t\t\tcase \"vehicle\":\r\n\t\t\t\t\tvar stepConditions = {\r\n\t\t\t\t\t\t\"vehicle.policy-start-date\": function () {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t$state.$current.name ==\r\n\t\t\t\t\t\t\t\t\"vehicle.policy-start-date\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"home\":\r\n\t\t\t\t\tvar stepConditions = {\r\n\t\t\t\t\t\t\"home.policy-start-date\": function () {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t$state.$current.name == \"home.policy-start-date\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"caravan\":\r\n\t\t\t\t\tvar stepConditions = {\r\n\t\t\t\t\t\t\"caravan.policy-start-date\": function () {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t$state.$current.name ==\r\n\t\t\t\t\t\t\t\t\"caravan.policy-start-date\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"bike\":\r\n\t\t\t\t\tvar stepConditions = {\r\n\t\t\t\t\t\t\"bike.policy-start-date\": function () {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t$state.$current.name == \"bike.policy-start-date\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t}\r\n\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.moduleId = MODULE_INFO.id;\r\n\r\n\t\t$ctrl.cybersourceiFrameUrl = $state.href(\r\n\t\t\t\"cybersourcePaymentForm\",\r\n\t\t\tnull,\r\n\t\t\t{ absolute: true }\r\n\t\t);\r\n\r\n\t\t// TODO: better iframe solution\r\n\t\t$ctrl.addCybersourceiFrame = $ctrl.addCybersourceRetryAttempt = $ctrl.addCybersourceLastAttempt = false;\r\n\r\n\t\t$ctrl.summaryModel = quoteModelFactory.create();\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\treturn {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tpaymentForm: {\r\n\t\t\t\t\tpaymentDetails: {\r\n\t\t\t\t\t\tpaymentOptions: \"yearly\",\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, page) {\r\n\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tgetRequote(formData, page, function (resp) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions = quoteOptions.getRequoteOptions(\r\n\t\t\t\tMODULE_INFO.paymentPageRouteName\r\n\t\t\t);\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", { modal: \"saveQuote\" });\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\tgtmService.trackEvent(\"click-payment\");\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tif (form.$invalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tprocessPayment(form);\r\n\t\t};\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"caravanForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar maData = {\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult.getAnnual(),\r\n\t\t\t\tmonthlyResult: quoteResult.getMonthly(),\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\r\n\t\tfunction processPayment(form) {\r\n\t\t\tformData = getUserInput();\r\n\r\n\t\t\tvar paymentDetailsForm = form.paymentDetails;\r\n\r\n\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t$ctrl.paymentAttempCounter++; // iterate payment attempt\r\n\t\t\t$ctrl.showPaymentProcessError = false;\r\n\t\t\t$ctrl.paymentMethod =\r\n\t\t\t\tformData.paymentForm.paymentDetails.paymentMethod;\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tswitch (formData.paymentForm.paymentDetails.paymentMethod) {\r\n\t\t\t\tcase \"creditcard\":\r\n\t\t\t\t\tpayByCreditCard(formData, paymentDetailsForm);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"paypal\":\r\n\t\t\t\t\t// handled by qbFormSection.directive.payByPaypal()\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"bankaccount\":\r\n\t\t\t\t\tpayByDirectDebit(formData);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction payByCreditCard(formData, form) {\r\n\t\t\tpaymentService.payByCreditCard(\r\n\t\t\t\t// pass credit card data\r\n\t\t\t\t{\r\n\t\t\t\t\tcardNumber: formData.paymentForm.paymentDetails.cardNumber,\r\n\t\t\t\t\tcardHolderName:\r\n\t\t\t\t\t\tformData.paymentForm.paymentDetails.cardHolderName,\r\n\t\t\t\t\tcvc: formData.paymentForm.paymentDetails.cardCvc,\r\n\t\t\t\t\ttype: form.cardNumber.$ccType,\r\n\t\t\t\t\tcardExpiryDate: form.cardExpiryDate.$viewValue,\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Creditcard Payment service\r\n\t\t\t\tfunction (creditCardPaymentData) {\r\n\t\t\t\t\t// make the scope available globally. This data will be used by the iFrame to construct the form that will post to Cybersource\r\n\t\t\t\t\t$window.$controllerScope = $scope;\r\n\t\t\t\t\t// set the data to send to Cybersource to the scope\r\n\t\t\t\t\t$scope.creditCardPaymentData = creditCardPaymentData;\r\n\t\t\t\t\t// set the URL for the iFrame to the Cybersource Payment Form (which will use the `creditCardPaymentData`) to generate and submit the form\r\n\t\t\t\t\t$ctrl.addCybersourceiFrame = true;\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempCounter == 2) {\r\n\t\t\t\t\t\t$ctrl.addCybersourceRetryAttempt = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempCounter == CREDIT_CARD_ATTEMPT) {\r\n\t\t\t\t\t\t$ctrl.addCybersourceLastAttempt = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"cc payment error\",\r\n\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t);\r\n\t\t\t\t\t//dd-4003-push error to gtm data layer\r\n\t\t\t\t\tgtmService.trackEvent(errorResponse, \"paymentError\");\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t$state.go(\"error\");\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction payByDirectDebit(formData) {\r\n\t\t\tpaymentService.payByDirectDebit(\r\n\t\t\t\t// pass bank account data\r\n\t\t\t\t{\r\n\t\t\t\t\tbsb: formData.paymentForm.paymentDetails.bsb,\r\n\t\t\t\t\taccountNumber:\r\n\t\t\t\t\t\tformData.paymentForm.paymentDetails.accountNumber,\r\n\t\t\t\t\taccountName:\r\n\t\t\t\t\t\tformData.paymentForm.paymentDetails.accountName,\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Direct Debit Payment service\r\n\t\t\t\tfunction (directDebitPaymentData) {\r\n\t\t\t\t\t$scope.onPaymentCallback(true, directDebitPaymentData);\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"bank debit payment error\",\r\n\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t);\r\n\t\t\t\t\t//dd-4003-push error to gtm data layer\r\n\t\t\t\t\tgtmService.trackEvent(errorResponse, \"paymentError\");\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t//yearly bank account will not redirect to oh snap page\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tformData.paymentForm.paymentDetails.paymentOptions ===\r\n\t\t\t\t\t\t\"yearly\"\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t\t$ctrl.showPaymentProcessError = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$state.go(\"error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Initialisation method of the payment page\r\n\t\t */\r\n\t\t$ctrl.initPaymentPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.termsAndConditions = false;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tformData.paymentForm.paymentDetails.termsAndConditions = false;\r\n\t\t\tquoteOptions.setSelectedPaymentFrequency(\r\n\t\t\t\tformData.paymentForm.paymentDetails.paymentOptions\r\n\t\t\t);\r\n\t\t\t$ctrl.formData = formData;\r\n\t\t\tgetRequote(formData);\r\n\t\t\t$scope.$on(\"payment-method-changed\", function (\r\n\t\t\t\tevent,\r\n\t\t\t\tpaymentMethod\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.paymentMethod = paymentMethod;\r\n\t\t\t});\r\n\t\t\t$scope.$on(\"terms-and-conditions-changed\", function (\r\n\t\t\t\tevent,\r\n\t\t\t\ttermsAndConditions\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.termsAndConditions = termsAndConditions;\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * This callback is called from the iFrame when the response is received from the GuideWire payment service\r\n\t\t * @param success\r\n\t\t * @param stateParams\r\n\t\t */\r\n\t\t$scope.onPaymentCallback = function (success, params) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\r\n\t\t\tif (success && params.status !== \"PROCESS_FAIL\") {\r\n\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\tpolicyNumber: params.policyNumber,\r\n\t\t\t\t\taccountNumber: params.accountNumber,\r\n\t\t\t\t\tisAwaitingProcess: params.status === \"AWAITING_PROCESS\",\r\n\t\t\t\t};\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"payment successful\",\r\n\t\t\t\t\t\"show done page\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\t// Go to confirmation\r\n\t\t\t\t$state.go(MODULE_INFO.donePageRouteName, confirmationData);\r\n\t\t\t} else {\r\n\t\t\t\t// payment error - show error page\r\n\t\t\t\t// yearly bank account will not redirect to oh snap page\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.formData.paymentForm.paymentDetails.paymentOptions ===\r\n\t\t\t\t\t\t\"yearly\" &&\r\n\t\t\t\t\t$ctrl.paymentMethod === \"bankaccount\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"payment unsuccessful - bank debit\",\r\n\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$ctrl.showPaymentProcessError = true;\r\n\t\t\t\t\t$ctrl.paymentErrorDescription = $ctrl.getLabelFor(\r\n\t\t\t\t\t\t\"bankAccountError\"\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// credit card payment retry\r\n\t\t\t\t// catch error param from GW\r\n\t\t\t\t// send to referral after max attempts\r\n\t\t\t\tif ($ctrl.paymentMethod === \"creditcard\") {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tangular.isDefined(params.error) &&\r\n\t\t\t\t\t\tparams.error !== \"\"\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t$ctrl.paymentErrorDescription =\r\n\t\t\t\t\t\t\tlabelService.getValidationMessagesFor(\r\n\t\t\t\t\t\t\t\t\"paymentMethod\",\r\n\t\t\t\t\t\t\t\t\"ccError\"\r\n\t\t\t\t\t\t\t) +\r\n\t\t\t\t\t\t\t\" \" +\r\n\t\t\t\t\t\t\tparams.error;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$ctrl.paymentErrorDescription = labelService.getValidationMessagesFor(\r\n\t\t\t\t\t\t\t\"paymentMethod\",\r\n\t\t\t\t\t\t\t\"ccErrorDefault\"\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempCounter === CREDIT_CARD_ATTEMPT) {\r\n\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\"payment unsuccessful - credit card\",\r\n\t\t\t\t\t\t\t\"show referral page\",\r\n\t\t\t\t\t\t\tnull\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\t\t\t\"quote\"\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tvar referralParams = {\r\n\t\t\t\t\t\t\tdeclineType: savedQuote.quoteID,\r\n\t\t\t\t\t\t\tdeclineCodes: [\"ccPaymentError\"],\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\t$state.go(\"referral\", referralParams);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$ctrl.showPaymentProcessError = true;\r\n\r\n\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\"payment unsuccessful - credit card\",\r\n\t\t\t\t\t\t\t\"show payment page\",\r\n\t\t\t\t\t\t\tnull\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t},\r\n]);\r\n\nangular.module(\"qbePortal\").controller(\"paymentsFormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"paymentService\",\r\n\t\"Util\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"paymentLoggerService\",\r\n\t\"CREDIT_CARD_ATTEMPT\",\r\n\tfunction(\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tpaymentService,\r\n\t\tutil,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tpaymentLoggerService,\r\n\t\tCREDIT_CARD_ATTEMPT\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\tif ($window.qbe.fieldLabels.buttonLabel) {\r\n\t\t\t$ctrl.closeWindowLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.closeWindow;\r\n\t\t\t$ctrl.payYourBillNowLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.payYourBillNow;\r\n\t\t\t$ctrl.printLabel = $window.qbe.fieldLabels.buttonLabel.print;\r\n\t\t\t$ctrl.payMoreBillLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.payMoreBill;\r\n\t\t\t$ctrl.chatAgentLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.chatAgent;\r\n\t\t\t$ctrl.callAgentLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.callAgent;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.config) {\r\n\t\t\t$ctrl.returnDeclineURLPath =\r\n\t\t\t\t$window.qbe.fieldLabels.config.DeclinePath;\r\n\t\t\t$ctrl.paymentsPath = $window.qbe.fieldLabels.config.PaymentsPath;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.frequentlyAsked) {\r\n\t\t\t$ctrl.frequentlyAsked =\r\n\t\t\t\t$window.qbe.fieldLabels.frequentlyAsked.list;\r\n\t\t\t$ctrl.frequentlyAskedTitle = qbe.fieldLabels.frequentlyAsked;\r\n\t\t}\r\n\r\n\t\t$ctrl.amountDue = qbe.fieldLabels.amountDue;\r\n\t\t$ctrl.headBar = qbe.fieldLabels.headBar;\r\n\t\t$ctrl.paymentDate = moment().format(\"Do MMM. YYYY\");\r\n\t\t$ctrl.showQbAmountDue = false;\r\n\r\n\t\tif ($ctrl.headBar) {\r\n\t\t\t$ctrl.headBar.click = function() {\r\n\t\t\t\t/* gtm track phone click */\r\n\t\t\t\tgtmService.trackStandardEvent('click button', 'phone', '', false);\r\n\t\t\t\t/* end gtm track phone click */\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (qbe.fieldLabels.otherWaysToPay) {\r\n\t\t\t$ctrl.otherWaysToPay = qbe.fieldLabels.otherWaysToPay.list;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.paymentConfirmation) {\r\n\t\t\t$ctrl.paymentConfirmationLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmation.title;\r\n\t\t\t$ctrl.paymentConfirmationDescription =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmation.description;\r\n\t\t\t$ctrl.paymentConfirmationSubDescription =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmation.subDescription;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.paymentConfirmationSummary) {\r\n\t\t\t$ctrl.paymentConfirmationSummaryLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmationSummary.title;\r\n\t\t\t$ctrl.paymentConfirmationSummaryDetailsLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmationSummary.options;\t\t\t\t\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.enterPaymentRef) {\r\n\t\t\t$ctrl.phoneNumber = $window.qbe.fieldLabels.enterPaymentRef.phone;\r\n\t\t}\r\n\r\n\t\t$ctrl.totalSteps = 2;\r\n\t\t$ctrl.initStep = 1;\r\n\t\t$ctrl.stepNum = null;\r\n\t\t$ctrl.Completed = false;\r\n\t\t$ctrl.ctpCompleted = false;\r\n\t\t$ctrl.showPayButton = true;\r\n\t\t$ctrl.paymentAttempt = 0;\r\n\r\n\t\tfunction ctpStepCounter(step) {\r\n\t\t\tvar currentStep = step;\r\n\r\n\t\t\tfor (var i = 0; i <= currentStep; i++) {\r\n\t\t\t\t$ctrl.stepNum = i;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.trackWindowPrint = function() {\r\n\t\t\tgtmService.trackStandardEvent('click link', 'print', '', false);\r\n\t\t};\r\n\r\n\t\t// This will catch the success callback\r\n\t\tvar paypalConfirmation = storage.getItem(\"paypal-confirm-details\");\r\n\t\tif (paypalConfirmation.isSuccess) {\r\n\t\t\tvar formDetails = storage.getItem(\"confirmation-details\");\r\n\t\t\tvar paymentRef = formDetails.referenceNumber;\r\n\t\t\t(receiptNum = paypalConfirmation.receiptNumber),\r\n\t\t\t\t(amountPay = parseFloat(formDetails.amount.amountPay).toFixed(\r\n\t\t\t\t\t2\r\n\t\t\t\t)),\r\n\t\t\t\t(paymentDate = $ctrl.paymentDate);\r\n\r\n\t\t\t$ctrl.paymentConfirmationSummaryDetailsValue = [\r\n\t\t\t\tpaymentRef,\r\n\t\t\t\treceiptNum,\r\n\t\t\t\t\"$\" + amountPay,\r\n\t\t\t\tpaymentDate\r\n\t\t\t];\r\n\r\n\t\t\tloadAmount(amountPay);\r\n\r\n\t\t\t//dd-6181 - call gtm service on payment complete\r\n\t\t\tgtmService.trackUnauthPayments($state.current, formDetails, 'payPal', receiptNum, paypalConfirmation.policyNumber);\r\n\r\n\t\t\tstorage.removeItem(\"paypal-confirm-details\");\t\t\t\r\n\t\t} else if (paypalConfirmation.isSuccess === false) {\r\n\t\t\tstorage.removeItem(\"paypal-confirm-details\");\r\n\t\t\tstorage.setItem(\"payment-error-details\", {\r\n\t\t\t\tmode: \"paypal\"\r\n\t\t\t});\r\n\t\t\t$state.go(\"payments.payments\");\r\n\t\t}\r\n\r\n\t\tvar creditCardConfirmation = storage.getItem(\r\n\t\t\t\"creditcard-confirm-details\"\r\n\t\t);\r\n\t\tif (creditCardConfirmation.isSuccess) {\r\n\t\t\tvar formDetails = storage.getItem(\"confirmation-details\");\r\n\t\t\tvar paymentRef = formDetails.referenceNumber;\r\n\t\t\t(receiptNum = creditCardConfirmation.receiptNumber),\r\n\t\t\t\t(amountPay = parseFloat(formDetails.amount.amountPay).toFixed(\r\n\t\t\t\t\t2\r\n\t\t\t\t)),\r\n\t\t\t\t(paymentDate = $ctrl.paymentDate);\r\n\r\n\t\t\t$ctrl.paymentConfirmationSummaryDetailsValue = [\r\n\t\t\t\tpaymentRef,\r\n\t\t\t\treceiptNum,\r\n\t\t\t\t\"$\" + amountPay,\r\n\t\t\t\tpaymentDate\r\n\t\t\t];\r\n\t\t\tloadAmount(amountPay);\r\n\t\t\tstorage.removeItem(\"creditcard-confirm-details\");\r\n\r\n\t\t\t//dd-6181 - call gtm service on payment complete\r\n\t\t\tgtmService.trackUnauthPayments($state.current, formDetails, 'creditCard', receiptNum, formDetails.policyNumber);\r\n\t\t} else if (creditCardConfirmation.isSuccess === false) {\r\n\t\t\tstorage.removeItem(\"creditcard-confirm-details\");\r\n\t\t\tstorage.setItem(\"payment-error-details\", {\r\n\t\t\t\tmode: \"cc\"\r\n\t\t\t});\r\n\t\t\t$state.go(\"payments.payments\");\r\n\t\t}\r\n\r\n\t\tvar directDebitConfirmation = storage.getItem(\r\n\t\t\t\"direct-debit-confirm-details\"\r\n\t\t);\r\n\t\tif (directDebitConfirmation.isSuccess) {\r\n\t\t\tvar formDetails = storage.getItem(\"confirmation-details\");\r\n\t\t\tvar paymentRef = formDetails.referenceNumber,\r\n\t\t\t\tamountPay = parseFloat(formDetails.amount.amountPay).toFixed(2),\r\n\t\t\t\tpaymentDate = $ctrl.paymentDate;\r\n\r\n\t\t\t$ctrl.paymentConfirmationSummaryDetailsValue = [\r\n\t\t\t\tpaymentRef,\r\n\t\t\t\tnull,\r\n\t\t\t\t\"$\" + amountPay,\r\n\t\t\t\tpaymentDate\r\n\t\t\t];\r\n\t\t\tloadAmount(amountPay);\r\n\t\t\tstorage.removeItem(\"direct-debit-confirm-details\");\r\n\r\n\t\t\t$ctrl.paymentConfirmationSubDescription =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmation.bankSubDescription;\r\n\r\n\t\t\t//dd-6181 - call gtm service on payment complete\r\n\t\t\tgtmService.trackUnauthPayments($state.current, formDetails, 'bankAccount', directDebitConfirmation.receiptNumber, directDebitConfirmation.policyNumber);\r\n\t\t} else if (directDebitConfirmation.isSuccess === false) {\r\n\t\t\tstorage.removeItem(\"direct-debit-confirm-details\");\r\n\t\t\t$state.go(\"payments.payments\");\r\n\t\t}\r\n\r\n\t\tfunction loadAmount(amountPay) {\r\n\t\t\t$ctrl.amountDue.amountPay = amountPay;\r\n\t\t\tvar cents = amountPay.substring(amountPay.indexOf(\".\"));\r\n\t\t\t$ctrl.amountDue.amountCents = cents;\r\n\r\n\t\t\tvar dollars = amountPay.substring(0, amountPay.indexOf(\".\"));\r\n\t\t\t$ctrl.amountDue.amountDollars = dollars;\r\n\t\t}\r\n\r\n\t\t$ctrl.cybersourceiFrameUrl = $state.href(\r\n\t\t\t\"cybersourcePaymentForm\",\r\n\t\t\tnull,\r\n\t\t\t{\r\n\t\t\t\tabsolute: true\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\t$ctrl.addCybersourceiFrame = false;\r\n\r\n\t\t$ctrl.elementName = \"Form Controller\";\r\n\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.showConfirm = false;\r\n\t\t$ctrl.showThankYou = false;\r\n\t\t$ctrl.showSwitchButton = false;\r\n\t\t$ctrl.isConfirmed = false;\r\n\t\t$ctrl.closeWindow = function() {\r\n\t\t\t/* gtm track close window */\r\n\t\t\tgtmService.trackStandardEvent('click link', 'exit', '', false);\r\n\t\t\t/* end gtm track close window */\r\n\r\n\t\t\t$scope.$destroy();\r\n\t\t\twindow.location.href =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.targetUrl;\t\t\t\t\t\r\n\t\t};\r\n\r\n\t\t$ctrl.goToPayments = function() {\r\n\t\t\twindow.location.href = util.linkBuilder($ctrl.paymentsPath);\r\n\t\t};\t\t\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\treturn {\r\n\t\t\t\tpaybillForm: {\r\n\t\t\t\t\tselectInsuranceType: {\r\n\t\t\t\t\t\tcreditCardForm: {\r\n\t\t\t\t\t\t\tccName: \"\",\r\n\t\t\t\t\t\t\tcvcNum: \"\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function(name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function(event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\t$scope.$on(\"pay-now-button\", function(event, args) {\r\n\t\t\tif (args != \"QBEProducts\") {\r\n\t\t\t\t$ctrl.showPayButton = false;\r\n\t\t\t} else {\r\n\t\t\t\t$ctrl.showPayButton = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"show-form-entry\", function(event, args) {\r\n\t\t\tctpStepCounter($ctrl.initStep);\r\n\t\t\t$ctrl.showConfirm = false;\r\n\t\t\t$ctrl.showThankYou = false;\r\n\t\t\t$ctrl.isConfirmed = false;\r\n\t\t\t$scope.$broadcast(\"show-hint\");\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"confirm-switch\", function(event, args) {\r\n\t\t\t$ctrl.showConfirm = false;\r\n\t\t\t$ctrl.showThankYou = true;\r\n\t\t\t$ctrl.ctpCompleted = true;\r\n\r\n\t\t\t$scope.$broadcast(\"switch-to-QBE\", $ctrl.core.isEligible);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Scrolls a field into view when an error is clicked\r\n\t\t * @param {Object} error Error object with key `name`\r\n\t\t */\r\n\t\t$ctrl.showInView = function(error) {\r\n\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]'));\r\n\t\t};\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// PAYMENTS FORM START\r\n\t\t$scope.$on(\"billUpdate\", function(event, details) {\r\n\t\t\tif (details) {\r\n\t\t\t\t$ctrl.amountDue.amountPay = details.amount;\r\n\t\t\t\tif (details.amount.indexOf(\".\") > 0) {\r\n\t\t\t\t\tvar cents = details.amount.substring(\r\n\t\t\t\t\t\tdetails.amount.indexOf(\".\")\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$ctrl.amountDue.amountCents = cents;\r\n\r\n\t\t\t\t\tvar dollars = details.amount.substring(\r\n\t\t\t\t\t\t0,\r\n\t\t\t\t\t\tdetails.amount.indexOf(\".\")\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$ctrl.amountDue.amountDollars = dollars;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$ctrl.amountDue.amountCents = \"00\";\r\n\t\t\t\t\t$ctrl.amountDue.amountDollars = details.amount;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$ctrl.amountDue.reference_number = details.reference_number;\r\n\t\t\t\t$ctrl.amountDue.referenceId = details.referenceId;\r\n\t\t\t\t$ctrl.amountDue.paymentType = details.paymentType;\r\n\t\t\t} else {\r\n\t\t\t\t$ctrl.amountDue.amountDollars = null;\r\n\t\t\t\t$ctrl.showQbAmountDue = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/* gtm track payment type select in payment details page */\r\n\t\t$scope.$on(\"trackPaymentDetailsPaymentType\", function(event, paymentType) {\r\n\t\t\tif (paymentType) {\r\n\t\t\t\tvar pType = 'bankAccount';\r\n\t\t\t\tif (paymentType == 'credit-card') {\r\n\t\t\t\t\tpType = 'creditCard';\r\n\t\t\t\t}\r\n\t\t\t\telse if (paymentType == 'paypal') {\r\n\t\t\t\t\tpType = 'payPal';\r\n\t\t\t\t}\r\n\t\t\t\tgtmService.trackPayBillVirtualPageDetails($ctrl.amountDue.reference_number, $ctrl.amountDue.referenceId, pType);\r\n\t\t\t}\r\n\t\t});\r\n\t\t/* end gtm track payment type select in payment details page */\r\n\r\n\t\t$scope.$on(\"toggle-amount-due\", function() {\r\n\t\t\t$ctrl.showQbAmountDue = $ctrl.amountDue.amountDollars != null;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"set-micoform-instance\", function(event, instance){\r\n\t\t\t$ctrl.microformInstance = instance;\r\n\t\t});\r\n\r\n\t\tfunction isCrditCardPaymentMethod(howToPay) {\r\n\t\t\treturn howToPay === 'credit-card';\r\n\t\t}\r\n\r\n\t\tfunction validateCybersourceCreditCardField() {\r\n\t\t\tvar cardNumberContainerValidClass = document.getElementsByClassName('flex-microform-valid');\r\n\t\t\treturn (cardNumberContainerValidClass && cardNumberContainerValidClass.length > 0) ? true : false;\r\n\t\t}\r\n\t\t$ctrl.payBillNow = function(form) {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tvar payByCreditCard = isCrditCardPaymentMethod(formData.paybillForm.selectInsuranceType.howToPay);\r\n\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = form.$invalid;\r\n\t\t\t\r\n\t\t\tif (payByCreditCard) {\r\n\t\t\t\t//init refresh cvc validation stataus\r\n\t\t\t\t$scope.$broadcast(\"credit-card-cvc-isvalid\", true);\r\n\r\n\t\t\t\tif (!validateCybersourceCreditCardField()) {\r\n\t\t\t\t\tif (!isInvalid) {\r\n\t\t\t\t\t\tisInvalid = true;\r\n\t\t\t\t\t}\t\t\t\t\r\n\t\t\t\t\t$scope.$broadcast(\"credit-card-number-isvalid\", false);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$scope.$broadcast(\"credit-card-number-isvalid\", true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tif ($(\"#combinedValidationListing\").length) {\r\n\t\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tscrollViewTo($(\"#content\"));\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tif (!formData.paybillForm.selectInsuranceType.howToPay) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tformData.paybillForm.selectInsuranceType.selectInsuranceType ===\r\n\t\t\t\tnull\r\n\t\t\t) {\r\n\t\t\t\treturn false;\r\n\t\t\t} else\r\n\t\t\t\t$ctrl.selectInsuranceType =\r\n\t\t\t\t\tformData.paybillForm.selectInsuranceType.selectInsuranceType;\r\n\r\n\t\t\t// dd-6181 - call gtm service to track payment\r\n\t\t\tgtmService.trackUnauthPayments(\r\n\t\t\t\t$state.current,\r\n\t\t\t\tformData.paybillForm.selectInsuranceType\r\n\t\t\t);\r\n\r\n\t\t\t$ctrl.paymentAttempt++;\r\n\r\n\t\t\tif (formData.paybillForm.selectInsuranceType.howToPay == \"paypal\") {\r\n\t\t\t\tpaymentService.unAuthPaypalPayment(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treferenceNumber: $ctrl.amountDue.referenceId,\r\n\t\t\t\t\t\tpaymentType: $ctrl.amountDue.paymentType,\r\n\t\t\t\t\t\tredirectUrl: \"\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// on successfully calling the Create Paypal Payment service\r\n\t\t\t\t\tfunction(redirectUrl) {\r\n\t\t\t\t\t\tstorage.setItem(\"confirmation-details\", {\r\n\t\t\t\t\t\t\treferenceNumber: $ctrl.amountDue.reference_number,\r\n\t\t\t\t\t\t\tamount: $ctrl.amountDue,\r\n\t\t\t\t\t\t\ttransactionId: $ctrl.selectInsuranceType\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t$window.location.href = redirectUrl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// on error\r\n\t\t\t\t\tfunction(errorResponse) {\r\n\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\"paypal payment error\",\r\n\t\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t} else if (\r\n\t\t\t\tformData.paybillForm.selectInsuranceType.howToPay ==\r\n\t\t\t\t\"bank-account\"\r\n\t\t\t) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\t\tpaymentService.unAuthDirectDebitPayment(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tamountPay: $ctrl.amountDue.amountPay,\r\n\t\t\t\t\t\treferenceNumber: $ctrl.amountDue.referenceId,\r\n\t\t\t\t\t\tpaymentType: $ctrl.amountDue.paymentType,\r\n\t\t\t\t\t\tbsb:\r\n\t\t\t\t\t\t\tformData.paybillForm.selectInsuranceType\r\n\t\t\t\t\t\t\t\t.bankAccountForm.bsb,\r\n\t\t\t\t\t\taccountNumber:\r\n\t\t\t\t\t\t\tformData.paybillForm.selectInsuranceType\r\n\t\t\t\t\t\t\t\t.bankAccountForm.accountNumber,\r\n\t\t\t\t\t\taccountName:\r\n\t\t\t\t\t\t\tformData.paybillForm.selectInsuranceType\r\n\t\t\t\t\t\t\t\t.bankAccountForm.accountName\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// on successfully calling the Payment service\r\n\t\t\t\t\tfunction(response) {\r\n\t\t\t\t\t\tif (response.status === \"SUCCESS\") {\r\n\t\t\t\t\t\t\tstorage.setItem(\"direct-debit-confirm-details\", {\r\n\t\t\t\t\t\t\t\tisSuccess: true\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\"confirmation-details\", {\r\n\t\t\t\t\t\t\t\treferenceNumber:\r\n\t\t\t\t\t\t\t\t\t$ctrl.amountDue.reference_number,\r\n\t\t\t\t\t\t\t\tamount: $ctrl.amountDue,\r\n\t\t\t\t\t\t\t\ttransactionId: $ctrl.selectInsuranceType\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\t\"payment successful\",\r\n\t\t\t\t\t\t\t\t\"show done page\",\r\n\t\t\t\t\t\t\t\tnull\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t$state.go(\"payments.complete\");\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\t\t\t\t\"show error page\",\r\n\t\t\t\t\t\t\t\tnull\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t\t\t$scope.$broadcast(\"direct-debit-payment-error\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// on error\r\n\t\t\t\t\tfunction(errorResponse) {\r\n\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\"bank debit payment error\",\r\n\t\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t\t$scope.$broadcast(\"direct-debit-payment-error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\t// pay by credit card\r\n\t\t\t\ttokeniseAndPayByCreditCard(\r\n\t\t\t\t\tformData.paybillForm.selectInsuranceType.creditCardForm\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"redirect-payment-decline\", function() {\r\n\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t$ctrl.returnDeclineURLPath + \"?return=true\"\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tfunction setPaymentErrorAfterCybersourceTokenization(err) {\r\n\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\"return payment page\",\r\n\t\t\t\terr\r\n\t\t\t);\r\n\t\t\t$rootScope.$broadcast(\r\n\t\t\t\t\"cyber-source-error\",\r\n\t\t\t\t\"Form validation error\"\r\n\t\t\t);\r\n\t\t\tstorage.removeItem(\"creditcard-confirm-details\");\r\n\t\t\tstorage.setItem(\"payment-error-details\", {\r\n\t\t\t\tmode: \"cc\"\r\n\t\t\t});\r\n\t\t\t$state.go(\"payments.payments\");\r\n\r\n\t\t\t$scope.$broadcast(\"credit-card-number-isvalid\", false);\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t}\r\n\t\tfunction setPaymentErrorAfterCybersourceTokenizationCvcInvalid(err) {\r\n\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\"return payment page\",\r\n\t\t\t\terr\r\n\t\t\t);\r\n\t\t\t$rootScope.$broadcast(\r\n\t\t\t\t\"cyber-source-error\",\r\n\t\t\t\t\"Form validation error\"\r\n\t\t\t);\r\n\t\t\tstorage.removeItem(\"creditcard-confirm-details\");\r\n\t\t\tstorage.setItem(\"payment-error-details\", {\r\n\t\t\t\tmode: \"cc\"\r\n\t\t\t});\r\n\t\t\t$state.go(\"payments.payments\");\r\n\r\n\t\t\t$scope.$broadcast(\"credit-card-cvc-isvalid\", false);\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t}\r\n\t\tfunction tokeniseAndPayByCreditCard(creditCardForm) {\t\t\t\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\t// Send in optional parameters from other parts of your payment form\r\n\t\t\tvar options = {\r\n\t\t\t\tcardExpirationMonth: creditCardForm.expiryMonth,\r\n\t\t\t\tcardExpirationYear: new Date().getFullYear().toString().substr(0, 2) + creditCardForm.expiryYear,\r\n\t\t\t\tcardCvc: creditCardForm.cvcNum,\r\n\t\t\t\treferenceNumber: $ctrl.amountDue.referenceId,\r\n\t\t\t\tpaymentType: $ctrl.amountDue.paymentType\r\n\t\t\t};\r\n\r\n\t\t\t$ctrl.microformInstance.createToken(options, function (err, response) {\r\n\t\t\t\tif (err) {\r\n\t\t\t\t\tsetPaymentErrorAfterCybersourceTokenization(err);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\telse if (response) {\t\t\r\n\t\t\t\t\tif (response.cardType != '001' && response.cardType != '002' && response.cardType != '003') {\r\n\t\t\t\t\t\tsetPaymentErrorAfterCybersourceTokenization(err);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (response.cardType === '001' || response.cardType === '002') {\r\n\t\t\t\t\t\t\tif (creditCardForm.cvcNum && creditCardForm.cvcNum.toString().length != 3) {\r\n\t\t\t\t\t\t\t\tsetPaymentErrorAfterCybersourceTokenizationCvcInvalid('Invalid CVC');\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (creditCardForm.cvcNum && creditCardForm.cvcNum.toString().length != 4) {\r\n\t\t\t\t\t\t\tsetPaymentErrorAfterCybersourceTokenizationCvcInvalid('Invalid CVC');\r\n\t\t\t\t\t\t\treturn;\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpayByCreditCard(creditCardForm, response);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction payByCreditCard(creditCardForm, flexiResponse) {\r\n\t\t\t\r\n\t\t\tpaymentService.unAuthCreditCardPayment(\r\n\t\t\t\t// pass credit card data\r\n\t\t\t\t{\r\n\t\t\t\t\tcardToken: flexiResponse.token,\r\n\t\t\t\t\tcardHolderName: creditCardForm.ccName,\r\n\t\t\t\t\tcvc: creditCardForm.cvcNum,\r\n\t\t\t\t\ttype: flexiResponse.cardType,\r\n\t\t\t\t\tcardExpiryDate: creditCardForm.expiryDate,\r\n\t\t\t\t\treferenceNumber: $ctrl.amountDue.referenceId,\r\n\t\t\t\t\tpaymentType: $ctrl.amountDue.paymentType\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Creditcard Payment service\r\n\t\t\t\tfunction(creditCardPaymentData) {\r\n\t\t\t\t\t// make the scope available globally. This data will be used by the iFrame to construct the form that will post to Cybersource\r\n\t\t\t\t\t$window.$controllerScope = $scope;\r\n\r\n\t\t\t\t\t// set the data to send to Cybersource to the scope\r\n\t\t\t\t\t$scope.creditCardPaymentData = creditCardPaymentData;\r\n\t\t\t\t\t// set the URL for the iFrame to the Cybersource Payment Form (which will use the `creditCardPaymentData`) to generate and submit the form\r\n\t\t\t\t\t$ctrl.addCybersourceiFrame = true;\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempt == 2) {\r\n\t\t\t\t\t\t$ctrl.addCybersourceRetryAttempt = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempt == CREDIT_CARD_ATTEMPT) {\r\n\t\t\t\t\t\t$ctrl.addCybersourceLastAttempt = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction(errorResponse) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"cc payment error\",\r\n\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t);\r\n\t\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\t\t\t\t\t// dd-4003-push error to gtm data layer\r\n\t\t\t\t\tgtmService.trackEvent(errorResponse, \"ccPaymentError\");\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t$scope.onPaymentCallback = function(success, params) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\r\n\t\t\tif (success) {\r\n\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\tpolicyNumber: params.policyNumber,\r\n\t\t\t\t\t//accountNumber: params.accountNumber,\r\n\t\t\t\t\treceiptNumber: params.receiptNumber,\r\n\t\t\t\t\tisSuccess: params.status === \"SUCCESS\"\r\n\t\t\t\t};\r\n\r\n\t\t\t\tstorage.setItem(\"creditcard-confirm-details\", confirmationData);\r\n\r\n\t\t\t\tstorage.setItem(\"confirmation-details\", {\r\n\t\t\t\t\treferenceNumber: $ctrl.amountDue.reference_number,\r\n\t\t\t\t\tamount: $ctrl.amountDue,\r\n\t\t\t\t\tpolicyNumber: params.policyNumber,\r\n\t\t\t\t\ttransactionId: $ctrl.selectInsuranceType\r\n\t\t\t\t\t// accountNumber: params.accountNumber\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"payment successful\",\r\n\t\t\t\t\t\"show done page\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\r\n\t\t\t\t// Go to confirmation\r\n\t\t\t\t$state.go(\"payments.complete\", confirmationData);\r\n\t\t\t} else {\r\n\t\t\t\tvar declineParam = {\r\n\t\t\t\t\treferenceNumber: $ctrl.amountDue.reference_number\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif ($ctrl.paymentAttempt === CREDIT_CARD_ATTEMPT) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\t\t\"show referral page\",\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\t\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\t\t\t\t\t$state.go(\"decline\", declineParam);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\t\t\"show decline page\",\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$rootScope.$broadcast(\r\n\t\t\t\t\t\t\"cyber-source-error\",\r\n\t\t\t\t\t\tparams.reasonCode\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function() {\r\n\t\t\tresizePayBills();\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\tctpStepCounter($ctrl.initStep); //Progress Counter\r\n\t\t};\r\n\r\n\t\tfunction resizePayBills() {\r\n\t\t\tvar footHeight = $(\".footer\").outerHeight(),\r\n\t\t\t\twindowHeight = $(window).height(),\r\n\t\t\t\tdocumentHeight = $(document).height(),\r\n\t\t\t\tminHeight;\r\n\r\n\t\t\tif ($(window).outerWidth() >= 768) {\r\n\t\t\t\tif (documentHeight > windowHeight) {\r\n\t\t\t\t\tminHeight = documentHeight - footHeight - 5;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tminHeight = windowHeight - footHeight - 5;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(\".col1, .col2\").css(\"min-height\", minHeight + \"px\");\r\n\t\t\t} else {\r\n\t\t\t\t$(\".col1, .col2\").css(\"min-height\", \"auto\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n]);\r\n\nangular.module('qbePortal').controller('PaypalCallbackController', [\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'dynamicRouter',\r\n\t'paymentService',\r\n\t'storage',\r\n\t'Util',\r\n\t'MODULE_INFO',\r\n\t'paymentLoggerService',\r\n\tfunction(\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\tdynamicRouter,\r\n\t\tpaymentService,\r\n\t\tstorage,\r\n\t\tUtil,\r\n\t\tMODULE_INFO,\r\n\t\tpaymentLoggerService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\tvar success = ($stateParams.success = !!$stateParams.PayerID);\r\n\r\n\t\tif (!success) {\r\n\t\t\t// Go back to payment page if unsuccessful\r\n\t\t\tstorage.setItem('paypal-confirm-details', {\r\n\t\t\t\tisSuccess: false,\r\n\t\t\t\tmode: 'paypal'\r\n\t\t\t});\r\n\t\t\treturn $state.go(MODULE_INFO.paymentPageRouteName);\r\n\t\t}\r\n\r\n\t\tif (MODULE_INFO.id == 'payments') {\r\n\t\t\tpaymentService\r\n\t\t\t\t.unAuthSendPaypalPaymentToGW(\r\n\t\t\t\t\t$stateParams.PayerID,\r\n\t\t\t\t\t$stateParams.sessionId,\r\n\t\t\t\t\t$stateParams.paymentId\r\n\t\t\t\t)\r\n\t\t\t\t.then(function(_guidewirePaypalPaymentResponse) {\r\n\t\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\t\tpolicyNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.policyNumber,\r\n\t\t\t\t\t\taccountNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.accountNumber,\r\n\t\t\t\t\t\treceiptNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.receiptNumber,\r\n\t\t\t\t\t\tisAwaitingProcess:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.status ===\r\n\t\t\t\t\t\t\t'AWAITING_PROCESS',\r\n\t\t\t\t\t\tisSuccess:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.status ===\r\n\t\t\t\t\t\t\t'SUCCESS'\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tstorage.setItem('paypal-confirm-details', confirmationData);\r\n\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t'sending Paypal payment to GW',\r\n\t\t\t\t\t\t'show done page or error page',\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\t$state.go(MODULE_INFO.donePageRouteName, confirmationData);\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tpaymentService\r\n\t\t\t\t.sendPaypalPaymentToGW(\r\n\t\t\t\t\t$stateParams.PayerID,\r\n\t\t\t\t\t$stateParams.sessionId\r\n\t\t\t\t)\r\n\t\t\t\t.then(function(_guidewirePaypalPaymentResponse) {\r\n\t\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\t\tpolicyNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.policyNumber,\r\n\t\t\t\t\t\taccountNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.accountNumber,\r\n\t\t\t\t\t\tisAwaitingProcess:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.status ===\r\n\t\t\t\t\t\t\t'AWAITING_PROCESS'\r\n\t\t\t\t\t};\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t'sending Paypal payment to GW - payment successful',\r\n\t\t\t\t\t\t'show done page or error page',\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$state.go(MODULE_INFO.donePageRouteName, confirmationData);\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n]);\r\n\nangular.module('qbePortal').controller('PlaneController', [\r\n\t'$rootScope',\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'$window',\r\n\t'userInputRepository',\r\n\t'serviceResponseRepository',\r\n\t'quoteOptions',\r\n\t'paymentService',\r\n\t'quoteModelFactory',\r\n\t'dynamicRouter',\r\n\t'portalServiceWrapper',\r\n\t'MAService',\r\n\t'labelService',\r\n\t'Util',\r\n\t'$q',\r\n\t'storage',\r\n\t'jwtHelper',\r\n\t'gtmService',\r\n\t'quoteRequestRepository',\r\n\t'MODULE_INFO',\r\n\tfunction ($rootScope, $scope, $state, $stateParams, $window, userInputRepository, serviceResponseRepository, quoteOptions, paymentService, quoteModelFactory, dynamicRouter, portalServiceWrapper, MAService, labelService, util, $q, storage, jwtHelper, gtmService, quoteRequestRepository, MODULE_INFO) {\r\n\t\tvar $ctrl = this;\r\n\t\t$rootScope.$broadcast('loading-animation-end');\r\n\r\n\t\t/** \r\n\t\t* routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t* testing for allowed routes and redirecting when not allowed\r\n\t\t*/\r\n\t\tfunction markCompletedRouteCallback(stateName){\r\n\t\t\tstorage.setItem('completed-step', stateName);\r\n\t\t}\r\n\r\n\t\tfunction initialiseRouting(){\r\n\t\t\tdynamicRouter.initialise($state.current.name, $state.$current.parent.name, null, markCompletedRouteCallback);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\t\t\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.moduleId = MODULE_INFO.id ;\r\n\r\n\t\t$ctrl.cybersourceiFrameUrl = $state.href('cybersourcePaymentForm', null, {absolute: true});\r\n\t\t$ctrl.addCybersourceiFrame = false ; \r\n\t\t$ctrl.summaryModel = quoteModelFactory.create();\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\treturn {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tpaymentForm: {\r\n\t\t\t\t\tpaymentDetails :{\r\n\t\t\t\t\t\tpaymentOptions: 'yearly'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif ( offset ) {\r\n\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t* QbFormSections register themselves with the form controller.\r\n\t\t* This is done automatically by the form section upon initialisation.\r\n\t\t* @name : name of the form section\r\n\t\t* @init : function callback initialise the section\r\n\t\t* @getValueFn: function callback to get the value of the section.\r\n\t\t*/\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t* Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t* to the main error page.\r\n\t\t*/\r\n\t\t$scope.$on('error', function(event, error) {\r\n\t\t\t$state.go('error', error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t* calls MA Services to add marketing data.\r\n\t\t*/\r\n\t\t$scope.$on('perform-ma-service', function(event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy) ;\r\n\t\t});\r\n\r\n\t\t$scope.$on('back', function () {\r\n\t\t\tgtmService.trackEvent('back') ;\r\n\t\t\t$ctrl.back()\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t* called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t*/\r\n\t\t$scope.$on('requote', function(event, page) {\r\n\t\t\tgtmService.trackEvent('requote') ;\r\n\t\t\t$rootScope.$broadcast('loading-animation-start');\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tgetRequote(formData, page, function(resp) {\r\n\t\t\t\t$rootScope.$broadcast('loading-animation-end');\r\n\t\t\t\t$rootScope.$broadcast('quote-received', resp);\r\n\t\t\t\t$rootScope.$broadcast('selected-quote-changed') ;\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput() ;\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions = quoteOptions.getRequoteOptions(MODULE_INFO.paymentPageRouteName);\r\n\t\t\tif ( requoteOptions ) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(requoteOptions.permutations, requoteOptions.rules).then(function(resp) {\r\n\t\t\t\t\t\tif (callback )\r\n\t\t\t\t\t\t\tcallback(resp) ;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t\tvoid 0 ;\r\n\t\t\t\t\t\tbroadcastError(err, 'Requote error');\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false ;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$rootScope.$broadcast('open-modal', { modal: 'saveQuote' });\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent('back') ;\r\n\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif ( backState )\r\n\t\t\t\t$state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput() ;\r\n\t\t\t\tif ( formData.rapidEstimateUrl )\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl ;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\tgtmService.trackEvent('next') ;\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tif (form.$invalid) {\r\n\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\tscrollViewTo($('#combinedValidationListing')) ;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tprocessPayment(form) ;\r\n\t\t};\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput() ;\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get({}, 'caravanForm.mainPolicyHolder');\r\n\t\t\tvar policyEmail = userInputRepository.get({}, 'email') ;\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom('quote') ;\r\n\t\t\tvar maData = {\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult.getAnnual(),\r\n\t\t\t\tmonthlyResult: quoteResult.getMonthly(),\r\n\t\t\t\tquoteId : savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\t\t\tMAService.mergeContacts(eventName, maData) ;\r\n\t\t}\r\n\r\n\t\tfunction processPayment(form) {\r\n\t\t\tformData = getUserInput();\r\n\r\n\t\t\tvar paymentDetailsForm = form.paymentDetails;\r\n\r\n\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t$rootScope.$broadcast('loading-animation-start');\r\n\t\t\tswitch (formData.paymentForm.paymentDetails.paymentMethod) {\r\n\t\t\t\tcase 'creditcard':\r\n\t\t\t\t\tpayByCreditCard(formData, paymentDetailsForm);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'paypal':\r\n\t\t\t\t\t// handled by qbFormSection.directive.payByPaypal()\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'bankaccount':\r\n\t\t\t\t\tpayByDirectDebit(formData);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction payByCreditCard(formData, form) {\r\n\t\t\tpaymentService.payByCreditCard(\r\n\t\t\t\t// pass credit card data\r\n\t\t\t\t{\r\n\t\t\t\t\tcardNumber: formData.paymentForm.paymentDetails.cardNumber,\r\n\t\t\t\t\tcardHolderName: formData.paymentForm.paymentDetails.cardHolderName,\r\n\t\t\t\t\tcvc: formData.paymentForm.paymentDetails.cardCvc,\r\n\t\t\t\t\ttype: form.cardNumber.$ccType,\r\n\t\t\t\t\tcardExpiryDate: formData.paymentForm.paymentDetails.cardExpiryDate\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Creditcard Payment service\r\n\t\t\t\tfunction (creditCardPaymentData) {\r\n\t\t\t\t\t// make the scope available globally. This data will be used by the iFrame to construct the form that will post to Cybersource\r\n\t\t\t\t\t$window.$controllerScope = $scope;\r\n\t\t\t\t\t// set the data to send to Cybersource to the scope\r\n\t\t\t\t\t$scope.creditCardPaymentData = creditCardPaymentData;\r\n\t\t\t\t\t// set the URL for the iFrame to the Cybersource Payment Form (which will use the `creditCardPaymentData`) to generate and submit the form\r\n\t\t\t\t\t$ctrl.addCybersourceiFrame = true ; \r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t$state.go('error');\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction payByDirectDebit(formData) {\r\n\t\t\tpaymentService.payByDirectDebit(\r\n\t\t\t\t// pass bank account data\r\n\t\t\t\t{\r\n\t\t\t\t\tbsb: formData.paymentForm.paymentDetails.bsb,\r\n\t\t\t\t\taccountNumber: formData.paymentForm.paymentDetails.accountNumber,\r\n\t\t\t\t\taccountName: formData.paymentForm.paymentDetails.accountName\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Direct Debit Payment service\r\n\t\t\t\tfunction (directDebitPaymentData) {\r\n\t\t\t\t\t$scope.onPaymentCallback(true, directDebitPaymentData);\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t$state.go('error');\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\r\n\t\t/**\r\n\t\t * Initialisation method of the payment page\r\n\t\t */\r\n\t\t$ctrl.initPaymentPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\t\r\n\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t$ctrl.termsAndConditions = false;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tformData.paymentForm.paymentDetails.termsAndConditions = false ;\r\n\t\t\tquoteOptions.setSelectedPaymentFrequency(formData.paymentForm.paymentDetails.paymentOptions) ;\r\n\t\t\t$ctrl.formData = formData ;\r\n\t\t\tgetRequote(formData);\r\n\t\t\t$scope.$on('payment-method-changed', function(event, paymentMethod) {\r\n\t\t\t\t$ctrl.paymentMethod = paymentMethod;\r\n\t\t\t});\r\n\t\t\t$scope.$on('terms-and-conditions-changed', function(event, termsAndConditions) {\r\n\t\t\t\t$ctrl.termsAndConditions = termsAndConditions;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/**\r\n\t\t * This callback is called from the iFrame when the response is received from the GuideWire payment service\r\n\t\t * @param success\r\n\t\t * @param stateParams\r\n\t\t */\r\n\t\t$scope.onPaymentCallback = function (success, params) {\r\n\t\t\t$rootScope.$broadcast('loading-animation-end');\r\n\r\n\t\t\tif (success) {\r\n\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\tpolicyNumber: params.policyNumber,\r\n\t\t\t\t\taccountNumber: params.accountNumber,\r\n\t\t\t\t\tisAwaitingProcess: params.status === 'AWAITING_PROCESS'\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Go to confirmation\r\n\t\t\t\t$state.go(MODULE_INFO.donePageRouteName, confirmationData);\r\n\t\t\t\t// console.log('Great success! Payment completed! Move to confirmation page', confirmationData);\r\n\t\t\t}else{\r\n\t\t\t\t//payment error - show error page\r\n\t\t\t\t$state.go('error');\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}]\r\n);\r\n\nangular.module('qbePortal').controller('PolicyStartDateController', [\r\n\t'$rootScope',\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'$window',\r\n\t'userInputRepository',\r\n\t'serviceResponseRepository',\r\n\t'dynamicRouter',\r\n\t'labelService',\r\n\t'Util',\r\n\t'$q',\r\n\t'storage',\r\n\t'gtmService',\r\n\tfunction ($rootScope, $scope, $state, $stateParams, $window, userInputRepository, serviceResponseRepository, dynamicRouter, labelService, util, $q, storage, gtmService) {\r\n\t\tvar $ctrl = this;\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\t\t\r\n\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem('completed-step', stateName);\r\n\t\t}\r\n\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tvar isRetrieve = storage.getItem('policy-date-input');\r\n\t\t\tif (angular.equals(isRetrieve, {})) // check \r\n\t\t\t\tdynamicRouter.initialise($ctrl.state.current.name, $ctrl.state.$current.parent.name, null, markCompletedRouteCallback);\r\n\t\t}\r\n\r\n\t\t$ctrl.initPolicyStartDatePage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\r\n\t\t\t//gtmService.trackEvent('next');\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tif (form.$invalid) {\r\n\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\tscrollViewTo($('#combinedValidationListing'));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\t$ctrl.formData = formData;\r\n\t\t\tvar product = $state.$current.parent.name + 'Form';\r\n\t\t\tvar input = storage.getItem('policy-date-input');\t\r\n\t\t\tif(product !== 'homeForm'){\t\t\r\n\t\t\t\tinput[product].getStarted.policyStartDate = $ctrl.formData.pastPolicyStartDateForm.pastPolicyStartDateDetails.policyStartDate;\t\t\t\t\r\n\t\t\t}\t\t\t\t\r\n\t\t\telse{\r\n\t\t\t\tinput[product].letsGetStarted.startCoverDate = $ctrl.formData.pastPolicyStartDateForm.pastPolicyStartDateDetails.policyStartDate;\t\t\t\t\r\n\t\t\t\tstorage.setItem('completed-step', dynamicRouter.getState(0));\r\n\t\t\t}\t\t\r\n\t\t\tuserInputRepository.update(input);\t\t\t\t\r\n\t\t\tstorage.removeItem('policy-date-input');\t\t\t\t\t\t\r\n\t\t\tmoveToState($state.$current.parent.name);\r\n\t\t}\r\n\r\n\t\tfunction moveToState(stateParent) {\r\n\t\t\tif(stateParent !== 'home')\r\n\t\t\t\t$state.go(dynamicRouter.getState(0));\r\n\t\t\telse {\r\n\t\t\t\t$state.go(dynamicRouter.getState(1));\r\n\t\t\t}\t\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\tpastPolicyStartDateForm: {\r\n\t\t\t\t\tpastPolicyStartDateDetails: {\r\n\t\t\t\t\t\tpolicyStartDate: moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY'),\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif ( offset ) {\r\n\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\r\n\t}\r\n]);\r\n\nangular.module('qbePortal.rapidEstimate.vehicle')\r\n\t.controller('RapidEstimateController', [\r\n\t\t'$scope',\r\n\t\t'$location',\r\n\t\t'userInputRepository',\r\n\t\t'labelService',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteOptions',\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'gtmService',\r\n\t\t'$sce',\r\n\t\tfunction($scope, $location, userInputRepository, labelService, portalServiceWrapper, quoteOptions, util, serviceResponseRepository, gtmService, $sce) {\r\n\t\t\tvar vm = this;\r\n\t\t\tvm.formData = {};\r\n\t\t\tvm.validationErrors = null;\r\n\t\t\tvm.sections = {};\r\n\t\t\tvm.promoCode = util.getQueryStringByName(window.location, 'promotionalCode') ;\r\n\r\n\t\t\tvm.initPage= function() {\r\n\t\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t}\r\n\r\n\t\t\tvm.formData = userInputRepository.get({\r\n\t\t\t\tvehicleForm: {\r\n\t\t\t\t\ttellUsMore: {\r\n\t\t\t\t\t\tpromotionalCode: vm.promoCode\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvm.registerSection = function (name, init, getValueFn) {\r\n\t\t\t\tvm.sections[name] = getValueFn;\r\n\t\t\t}\r\n\r\n\t\t\t// Submit form to get quickQuote\r\n\t\t\tvm.submit = function(event, form) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tgtmService.trackEvent('rapid-estimate-submit') ;\r\n\r\n\t\t\t\tvm.showErrorSummary = false;\r\n\t\t\t\tisInvalid = form.$invalid;\r\n\r\n\t\t\t\tif (isInvalid) {\r\n\t\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t\tvm.showErrorSummary = true;\r\n\t\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\t\tvoid 0;\r\n\t\t\t\t\tscrollViewTo($('#combinedValidationListing')) ;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$scope.$root.$broadcast('loading-animation-start');\r\n\r\n\t\t\t\t// Populate formData\r\n\t\t\t\tvar formData = {};\r\n\t\t\t\tfor (var key in this.sections) {\r\n\t\t\t\t\tformData[key] = this.sections[key]();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t//var formattedDate = moment().tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\r\n\t\t\t\tvar now = moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY');\r\n\t\t\t\tformData.vehicleForm.getStarted = {\r\n\t\t\t\t\tpersonOrCompany: 'person',\r\n\t\t\t\t\tpolicyStartDate: now\r\n\t\t\t\t};\r\n\t\t\t\tformData.vehicleForm.driver.drivers = [];\r\n\t\t\t\tformData.vehicleForm.driver.drivers[0] = {\r\n\t\t\t\t\tperson: util.deepClone(formData.vehicleForm.driver)\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(formData.vehicleForm.tellUsMore) {\r\n\t\t\t\t\tformData.email = formData.vehicleForm.tellUsMore.email;\r\n\t\t\t\t\tformData.vehicleForm.promotionalCode = {\r\n\t\t\t\t\t\tpromotionalCode: formData.vehicleForm.tellUsMore.promotionalCode\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep('rapidEstimate') ;\r\n\r\n\t\t\t\tportalServiceWrapper.getQuickQuote(quickQuoteOptions.permutations, quickQuoteOptions.rules)\r\n\t\t\t\t\t.then(function(resp) {\r\n\t\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t\tvar quoteResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\t\t\t\t\tserviceResponseRepository.update('rapidEstimate' , quoteResults ) ;\r\n\t\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\t\tformData: formData,\r\n\t\t\t\t\t\t\tresults : quoteResults,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\t\t\terrorMessage: 'getQuickQuote error',\r\n\t\t\t\t\t\t\tresponse: err\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvm.getSectionDescriptionFor = function (fieldName) {\r\n\t\t\t\treturn $sce.trustAsHtml(labelService.getSectionDescriptionFor(fieldName));\r\n\t\t\t}\r\n\r\n\t\t\t/**\r\n\t\t\t * Scrolls a field into view when an error is clicked\r\n\t\t\t * @param {Object} error Error object with key `name`\r\n\t\t\t */\r\n\t\t\t$scope.showInView = function (error) {\r\n\t\t\t\t//console.log(error);\r\n\t\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]')) ;\r\n\t\t\t}\r\n\r\n\t\t\tfunction scrollViewTo($element) {\r\n\t\t\t\tvar offset = $element.offset();\r\n\t\t\t\tif ( offset ) {\r\n\t\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Scroll to estimates once they're loaded\r\n\t\t\t$scope.$root.$on('show-rapid-estimates', function() {\r\n\t\t\t\tvm.showRapidEstimatesPanel = true;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$root.$on('rapid-estimates-panel-initialised', function() {\r\n\t\t \t\tvar rapidEstimateResults = serviceResponseRepository.getLastResponseFrom('rapidEstimate') ;\r\n\t\t\t\tif ( rapidEstimateResults ) {\r\n\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\tresults: rapidEstimateResults,\r\n\t\t\t\t\t\tformData: userInputRepository.get()\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t}\r\n\t]);\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('AddressSearchController', AddressSearchController);\r\n\r\n\tAddressSearchController.$inject = ['$state', '$scope', 'serviceResponseRepository', 'quoteModelFactory', '$timeout', '$q', 'guideWireService'];\r\n\r\n\tfunction AddressSearchController($state, $scope, serviceResponseRepository, quoteModelFactory, $timeout, $q, guideWireService) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tif (!vm.name) {\r\n\t\t\t\tvm.name = 'address';\r\n\t\t\t}\r\n\r\n\t\t\tvar name = $state.current.name;\r\n\t\t\tvm.addressResponses = [];\r\n\t\t\tvm.isSearchInProgress = false;\r\n\t\t\tif (name === 'bike.bike') {\r\n\t\t\t\tvm.messageAddressNotFound = 'Can’t find your address? Call us on 1800 24 34 64.';\r\n\t\t\t} else {\r\n\t\t\t\tvm.messageAddressNotFound = 'Can’t find your address? Call us on 133 723.';\r\n\t\t\t}\r\n\r\n\t\t\tvm.addressFound = true;\r\n\r\n\t\t\tif (vm.address !== null) {\r\n\t\t\t\tvm.addressInput = vm.address;\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.addressType) {\r\n\t\t\t\tif (vm.address && !vm.address.addressType) {\r\n\t\t\t\t\tvm.address.addressType = vm.addressType;\r\n\t\t\t\t\tvm.update({\r\n\t\t\t\t\t\tname: 'address',\r\n\t\t\t\t\t\tvalue: vm.address\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$scope.$watch(vm.addressResponse);\r\n\r\n\t\tvm.refreshAddresses = function (viewValue) {\r\n\t\t\tvm.isSearchInProgress = true;\r\n\t\t\treturn guideWireService.addressSearch({\r\n\t\t\t\tsearch: viewValue,\r\n\t\t\t\ttype: 'physical'\r\n\t\t\t}).then(function (resp) {\r\n\t\t\t\tvm.isSearchInProgress = false;\r\n\r\n\t\t\t\tif (!!resp.data && resp.data.length <= 0) {\r\n\t\t\t\t\tvm.addressFound = false;\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.addressFound = true;\r\n\t\t\t\t\treturn resp.data.map(function (item) {\r\n\t\t\t\t\t\tvm.addressResponse = item;\r\n\t\t\t\t\t\treturn item;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}).catch(function (resp) {\r\n\t\t\t\tvm.isSearchInProgress = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// on selection of address\r\n\t\tvm.onSelect = function ($item, $model, $label) {\r\n\t\t\tif (vm.addressType)\r\n\t\t\t\t$model.addressType = vm.addressType;\r\n\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: $model\r\n\t\t\t});\r\n\r\n\t\t\t//called with a timer to delay the validation\r\n\t\t\t$timeout(function () {\r\n\t\t\t\t$scope.$broadcast('type-ahead-value-received');\r\n\t\t\t\tif (vm.enrich == 'true') {\r\n\t\t\t\t\t$scope.$root.$broadcast('enrich-address');\r\n\t\t\t\t}\r\n\t\t\t}, 1000);\r\n\r\n\t\t\tif (vm.serviceName) {\r\n\t\t\t\tserviceResponseRepository.update(vm.serviceName, $model);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.isAddressValid = function () {\r\n\t\t\tif (vm.addressResponse) {\r\n\t\t\t\t//check for the address line 1 in the addressResponse\r\n\t\t\t\tif (!!vm.addressResponse.addressLine1) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t//validates only if the not blank, blank is validated by the required\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({\r\n\t\t\t\tname: name,\r\n\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tangular.module('qbePortal').component('addressSearch', {\r\n\t\ttemplateUrl: '/ngviews/components/qbAddressSearch.html',\r\n\t\tcontroller: AddressSearchController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tfieldKey: '@',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tlabelKey: '@',\r\n\t\t\taddress: ' 0;\r\n\t\t}\r\n\r\n\t\tvm.showInView = function (error) {\r\n\t\t\tvar offset = $('#' + error.id).offset();\r\n\r\n\t\t\t$('html, body').animate({\r\n\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\tscrollLeft: offset.left\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.getErrorsByField = function () {\r\n\r\n\t\t\treturn errorsByField;\r\n\t\t}\r\n\r\n\t\tfunction processWildCard(targetString, wildcardValue) {\r\n\t\t\tif (typeof wildcardValue == 'string' || typeof wildcardValue == 'undefined') {\r\n\t\t\t\ttargetString = util.stringFormat(targetString, wildcardValue);\r\n\t\t\t} else {\r\n\t\t\t\t// Handle multiple wildcard\r\n\t\t\t\tvar argArr = [];\r\n\t\t\t\targArr.push(targetString);\r\n\t\t\t\targArr = argArr.concat(wildcardValue);\r\n\t\t\t\ttargetString = util.stringFormat.apply(null, argArr);\r\n\t\t\t}\r\n\t\t\treturn targetString;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t* dd-4003 - push to gtm data layer on field errors\r\n\t\t* param = errors by field\r\n\t\t*/\r\n\t\tfunction processGTM(errorsByField) {\r\n\t\t\tif (errorsByField.length > 0) {\t\t\t\t\r\n\t\t\t\tangular.forEach(errorsByField, function (errorsByField, index) {\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\tvar errorByFieldLabel = errorsByField.label;\r\n\t\t\t\t\tvar errorEvent = gtmService.createGtmValidationErrorEvent(errorByFieldLabel);\r\n\t\t\t\t\tgtmService.trackEvent(errorEvent, 'formValidationError');\r\n\t\t\t\t});\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCombinedValidation', {\r\n\t\ttemplateUrl: '/ngviews/components/qbCombinedValidation.html',\r\n\t\tcontroller: QBCombinedValidationController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tformSelector: '<',\r\n\t\t\tshow: '<',\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBCrossSell', QBCrossSell);\r\n\r\n\tQBCrossSell.$inject = ['$scope', '$sce'];\r\n\r\n\tfunction QBCrossSell($scope, $sce) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.obj = JSON.parse(vm.content);\r\n\r\n\t\t\tfor (var i = 0; i < vm.obj.length; i++) {\r\n\t\t\t\tif (vm.obj[i].subheading != '' || vm.obj[i].description != '' || vm.obj[i].ctaLabel != '' || vm.obj[i].hyperlinkLabel != '' || vm.obj[i].image != '') {\r\n\t\t\t\t\tvm.hasContent = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.getRichText = function (text) {\r\n\t\t\treturn $sce.trustAsHtml(text);\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCrossSell', {\r\n\t\ttemplateUrl: '../ngviews/components/qbCrossSell.html',\r\n\t\tcontroller: QBCrossSell,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\theading: '@',\r\n\t\t\tcontent: '@'\r\n\t\t}\r\n\t});\r\n\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBCtpValidationController', QBCtpValidationController);\r\n\r\n\tQBCtpValidationController.$inject = ['$scope', 'validationService', 'Util'];\r\n\r\n\tfunction QBCtpValidationController($scope, validationService, util) {\r\n\t\tvar vm = this;\r\n\t\t\tvm.errorField = [];\r\n\r\n\t\tvar errorsByField = [];\r\n\r\n\t\t/*\r\n\t\t* Reset call to validation service\t\t\r\n\t\t*/\r\n\t\t$scope.$on('confirm-form-data', resetFieldErrors);\r\n\t\tfunction resetFieldErrors() {\r\n\t\t\tvalidationService.clearAllErrors();\r\n\t\t\terrorsByField = [];\r\n\t\t\tvm.validationSelector = false;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t* Call validation service to validate fields\r\n\t\t* Param - attribute name of element\r\n\t\t* Output - error object to display in element\r\n\t\t*/\r\n\t\tvm.fetchErrorsByField = function () {\r\n\t\t\tvm.errorField = [];\r\n\t\t\tvar errors = validationService.validateField(vm.messageKey);\r\n\r\n\t\t\tif (!errors) {\r\n\t\t\t\treturn [];\r\n\t\t\t\tvm.validationSelector = false;\r\n\t\t\t}\t\t\r\n\r\n\t\t\tfor (var input in errors) {\r\n\t\t\t\tvar error = errors[input];\r\n\t\t\t\tvar element = error.element;\r\n\t\t\t\tvar fieldLabel = error.label;\r\n\t\t\t\tvar fieldErrors = error.errors;\r\n\t\t\t\tvar ngModel = error.input;\r\n\t\t\t\tfor (var errorType in fieldErrors) {\r\n\t\t\t\t\tvar msg = fieldErrors[errorType];\r\n\r\n\t\t\t\t\tif (error.wildcard) {\r\n\t\t\t\t\t\tvar wildcardValue = error.element.scope().$eval(error.wildcard);\r\n\t\t\t\t\t\tfieldLabel = util.stringFormat(fieldLabel, wildcardValue);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvm.errorField.push({\r\n\t\t\t\t\t\tname: element.attr('name'),\r\n\t\t\t\t\t\tlabel: fieldLabel,\r\n\t\t\t\t\t\tid: element.attr('id'),\r\n\t\t\t\t\t\terrorType: errorType,\r\n\t\t\t\t\t\tviewValue: element.$viewValue,\r\n\t\t\t\t\t\tvalidationMessage: msg,\r\n\t\t\t\t\t\tsection: ngModel.$$parentForm\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.errorField.length > 0) {\r\n\t\t\t\tangular.element('div').find('[data-name='+vm.messageKey+']').removeClass('ng-hide');\r\n\t\t\t}\r\n\r\n\t\t\tvm.validationSelector = true;\r\n\t\t\treturn vm.errorField;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t* Broadcast call if field has errors\r\n\t\t*/\r\n\t\t$scope.$on('broadcast-field-errors', function (event) {\t\r\n\t\t\t//validationService.clearAllErrors();\t\t\r\n\t\t\terrorsByField = vm.fetchErrorsByField();\t\t\t\r\n\t\t});\r\n\r\n\t\tvm.getErrorsByField = function () {\r\n\t\t\treturn errorsByField;\t\t\t\t\t\t\r\n\t\t}\r\n\t\t\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCtpValidation', {\r\n\t\ttemplateUrl: '/ngviews/components/qbCtpValidation.html',\r\n\t\tcontroller: QBCtpValidationController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tvalidationSelector: '<',\r\n\t\t\tmessageKey: '<',\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBCurrency', QBCurrency);\r\n\r\n\tQBCurrency.$inject = ['$scope'];\r\n\r\n\tfunction QBCurrency($scope) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.fieldValue = null;\r\n\t\t//vm.dateOfBirth = new Date(1991, 3, 21); // To be replaced with date from DOB field\r\n\r\n\t\t//console.log(vm.dob);\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({name: vm.name, value: vm.fieldValue});\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCurrency', {\r\n\t\ttemplateUrl: '../ngviews/components/qbCurrency.html',\r\n\t\tcontroller: QBCurrency,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tname: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBCycleCoverSummaryController', QBCycleCoverSummaryController);\r\n\tQBCycleCoverSummaryController.$inject = ['$scope'];\r\n\r\n\r\n\tfunction QBCycleCoverSummaryController($scope) {\r\n\t\tvar vm = this;\r\n\t\tvar tableValues = {\r\n\t\t\tcycleCover: $scope.cycleCover,\r\n\t\t\tgeneralEquipment: $scope.generalEquipment,\r\n\t\t\tspecifiedEquipment: $scope.specifiedEquipment,\r\n\t\t\tincludeCycleRacing: $scope.includeCycleRacing\r\n\t\t};\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCycleCoverSummary', {\r\n\t\ttemplateUrl: '../ngviews/components/qbCycleCoverSummary.html',\r\n\t\tcontroller: QBCycleCoverSummaryController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tcycleCover: '=',\r\n\t\t\tgeneralEquipment: '=',\r\n\t\t\tspecifiedEquipment: '=',\r\n\t\t\tincludeCycleRacing: '='\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\tangular.module('qbePortal')\r\n\t\t.component('qbListAccordion', {\r\n\t\t\ttemplateUrl: '/ngviews/components/qbListAccordion.html',\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\ttransclude: true,\r\n\t\t\tbindings: {\r\n\t\t\t\tincludedList : '<',\r\n\t\t\t\texcludedList : '<',\r\n\t\t\t}\r\n\t\t})\r\n\t\t.directive('onRepeatEnd', [\"$timeout\", function ($timeout) {\r\n\t\t\treturn function (scope, element, attrs) {\r\n\t\t\t\tif (scope.$last) {\r\n\t\t\t\t\t$timeout(function () {\r\n\t\t\t\t\t\tQBE.listAccordion.init();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}]);\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBListAggregatorController', 'quoteModelFactory', QBListAggregatorController);\r\n\tQBListAggregatorController.$inject = ['$scope', 'Util', 'quoteModelFactory'];\r\n\r\n\tfunction QBListAggregatorController($scope, Util, quoteModelFactory) {\r\n\t\tvar vm = this;\r\n\t\tvar _aggregatorPrefix = \"agg_\";\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.items = vm.list || [];\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\r\n\t\t\t/**\r\n\t\t\t * to make this compatible with data coming from rapid-estimate or retrieve quote.\r\n\t\t\t */\r\n\t\t\tvm.items.forEach(function (element, index) {\r\n\t\t\t\tif (!element._aggregator) {\r\n\t\t\t\t\tvar name = (index == 0 && vm.defaultValue) ? vm.defaultValue._aggregator.name : 'additional';\r\n\t\t\t\t\tvar id = _aggregatorPrefix + index;\r\n\t\t\t\t\telement._aggregator = {\r\n\t\t\t\t\t\tid: id,\r\n\t\t\t\t\t\tname: name,\r\n\t\t\t\t\t\ttitle: (index == 0 && vm.defaultValue) ? vm.defaultValue._aggregator.title : 'additional',\r\n\t\t\t\t\t};\r\n\t\t\t\t\telement._HTMLID = name + id;\r\n\t\t\t\t\tsetFullHeadingForItem(element);\r\n\t\t\t\t}\r\n\t\t\t\t$scope.$emit('show-aggregate');\r\n\t\t\t})\r\n\r\n\t\t\tif (vm.items.length == 0 && vm.defaultValue) {\r\n\t\t\t\tvar item = vm.defaultValue;\r\n\t\t\t\titem._HTMLID = item._aggregator.name + item._aggregator.id;\r\n\t\t\t\tsetFullHeadingForItem(item);\r\n\t\t\t\tvm.items.push(item);\r\n\t\t\t\tupdateParentSection();\r\n\t\t\t}\r\n\r\n\t\t\tvm.addItem = function (id, item) {\r\n\t\t\t\tid = id || vm.items.length;\r\n\t\t\t\tid = _aggregatorPrefix + id;\r\n\t\t\t\titem = Util.deepClone(item);\r\n\t\t\t\titem._aggregator.id = id;\r\n\t\t\t\titem._HTMLID = item._aggregator.name + item._aggregator.id;\r\n\r\n\t\t\t\tsetFullHeadingForItem(item);\r\n\r\n\t\t\t\tvm.items.push(item);\r\n\t\t\t\tupdateParentSection();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction setFullHeadingForItem(item) {\r\n\t\t\tif (item._aggregator.id > 0) {\r\n\t\t\t\titem._aggregator.fullHeading = item._aggregator.title + ' ' + vm.typeName + ' ' + item._aggregator.id;\r\n\t\t\t} else {\r\n\t\t\t\titem._aggregator.fullHeading = item._aggregator.title + ' ' + vm.typeName;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction updateParentSection() {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.items\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbListAggregator', {\r\n\t\ttemplateUrl: '../ngviews/components/qbListAggregator.html',\r\n\t\tcontroller: QBListAggregatorController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tlist: '<',\r\n\t\t\tname: '@',\r\n\t\t\titem: '<',\r\n\t\t\tdefaultValue: '<',\r\n\t\t\ttypeName: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tmax: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBListReducerController', 'quoteModelFactory', QBListReducerController);\r\n\tQBListReducerController.$inject = ['$scope', 'aggregatedRemoveService', 'quoteModelFactory'];\r\n\r\n\tfunction QBListReducerController($scope, aggregatedRemoveService, quoteModelFactory) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.items = vm.list;\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\t\t}\r\n\r\n\t\tvm.removeItem = function (item) {\r\n\t\t\tvm.items.splice(vm.items.indexOf(item), 1);\r\n\t\t\taggregatedRemoveService.markForDelete(vm.typeName, item);\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.items\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbListReducer', {\r\n\t\ttemplateUrl: '../ngviews/components/qbListReducer.html',\r\n\t\tcontroller: QBListReducerController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tlist: '<',\r\n\t\t\titem: '<',\r\n\t\t\tname: '@',\r\n\t\t\ttypeName: '@',\r\n\t\t\tupdate: '&',\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t\"use strict\";\r\n\r\n\tangular\r\n\t\t.module(\"qbePortal\")\r\n\t\t.controller(\r\n\t\t\t\"QBLoadingAnimationController\",\r\n\t\t\tQBLoadingAnimationController\r\n\t\t);\r\n\r\n\tQBLoadingAnimationController.$inject = [\"$scope\", \"labelService\"];\r\n\r\n\tfunction QBLoadingAnimationController($scope, labelService) {\r\n\t\tvar vm = this;\r\n\r\n\t\t$scope.$root.$on(\"loading-animation-start\", onLoadAnimationStart);\r\n\t\t$scope.$root.$on(\"loading-animation-end\", onLoadAnimationEnd);\r\n\r\n\t\tfunction onLoadAnimationStart() {\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$(\"body\").addClass(\"no-scroll\");\r\n\t\t\tvm.animationInProgress = true;\r\n\t\t}\r\n\r\n\t\tfunction onLoadAnimationEnd() {\r\n\t\t\t$(\"body\").removeClass(\"no-scroll\");\r\n\t\t\tvm.animationInProgress = false;\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").component(\"qbLoadingAnimation\", {\r\n\t\ttemplateUrl: \"/ngviews/components/qbLoadingAnimation.html\",\r\n\t\tcontroller: QBLoadingAnimationController,\r\n\t\tcontrollerAs: \"vm\",\r\n\t\tbindings: {},\r\n\t});\r\n})();\r\n\n(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBMaxNoClaimBonus', QBMaxNoClaimBonus);\r\n\r\n\tQBMaxNoClaimBonus.$inject = ['$scope'];\r\n\r\n\tfunction QBMaxNoClaimBonus($scope) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.fieldValue = vm.ngModel;\r\n\t\t}\r\n\r\n\t\tfunction calcAge() {\r\n\t\t\treturn (moment(new Date()).diff(moment(vm.dob, 'DD/MM/YYYY'), 'years', true));\r\n\t\t}\r\n\r\n\t\tvm.getFilteredOptions = function () {\r\n\r\n\t\t\tvar fullOptions = vm.options.slice();\r\n\r\n\t\t\t//if yerls help is not greater than 5 the 0 is the only option\r\n\t\t\tif (vm.yearsHeld !== 'greaterThan_5') {\r\n\t\t\t\treturn fullOptions.splice(0, 1);\r\n\t\t\t}\r\n\r\n\t\t\tvar age = calcAge();\r\n\t\t\tif (age == 22) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 1);\r\n\t\t\t} else if (age == 23) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 2);\r\n\t\t\t} else {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 3);\r\n\t\t\t}\r\n\r\n\t\t\treturn fullOptions;\r\n\r\n\t\t}\r\n\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({\r\n\t\t\t\tname: name,\r\n\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.fieldValue\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbMaxNoClaimBonus', {\r\n\t\ttemplateUrl: '../ngviews/components/qbMaxNoClaimBonus.html',\r\n\t\tcontroller: QBMaxNoClaimBonus,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\toptions: '<',\r\n\t\t\tname: '@',\r\n\t\t\tngModel: '<',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tyearsHeld: '<',\r\n\t\t\tdob: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBTable', QBTableController);\r\n\tQBTableController.$inject = ['$scope', '$timeout', 'aggregatedRemoveService'];\r\n\r\n\tfunction QBTableController($scope, $timeout, aggregatedRemoveService) {\r\n\t\tvar vm = this;\r\n\t\t// vm.isEditable = true;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.selectedRows = [];\r\n\t\t\tvm.editingRows = [];\r\n\t\t\tvm.allRowsSelected = false;\r\n\t\t\tvm.newRow = {};\r\n\t\t\tvm.isEditable = (vm.editDisabled != true);\r\n\t\t\tvm.isAddable = (vm.addDisabled != true);\r\n\t\t\tvm.IDPrefix = vm.sectionName + '_' + vm.name;\r\n\r\n\t\t\tvm.isRowInEditMode = function (row) {\r\n\t\t\t\treturn vm.editingRows.indexOf(row) !== -1;\r\n\t\t\t}\r\n\r\n\t\t\tvm.onEditRow = function (row) {\r\n\t\t\t\tif (vm.editingRows.indexOf(row) == -1)\r\n\t\t\t\t\tvm.editingRows.push(row);\r\n\t\t\t}\r\n\r\n\t\t\tvm.isAddRequired = function () {\r\n\t\t\t\treturn vm.rows.length == 0;\r\n\t\t\t}\r\n\r\n\t\t\tvm.onEditDone = function (row) {\r\n\t\t\t\tvar rowIndex = vm.editingRows.indexOf(row);\r\n\t\t\t\tif (rowIndex != -1) {\r\n\t\t\t\t\tvm.editingRows.splice(rowIndex, 1);\r\n\t\t\t\t\tupdateParentSection();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.isAddEnabled = function () {\r\n\t\t\t\tif (Object.keys(vm.newRow).length < vm.columns.length)\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tfor (var col in vm.newRow) {\r\n\t\t\t\t\tif (vm.newRow[col] === null || vm.newRow[col] == '') {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tvm.onAdd = function () {\r\n\t\t\t\tif (vm.isAddEnabled()) {\r\n\t\t\t\t\tvm.rows.push(vm.newRow);\r\n\t\t\t\t\tupdateParentSection();\r\n\t\t\t\t\tvm.newRow = {};\r\n\t\t\t\t\t$timeout(function () {\r\n\t\t\t\t\t\tif (vm.rows.length > 0) {\r\n\t\t\t\t\t\t\t$(document).trigger('enhance.tablesaw');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}.bind(vm), 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.onSelectAllChanged = function () {\r\n\t\t\t\tif (vm.allRowsSelected) {\r\n\t\t\t\t\tvm.selectedRows = vm.rows.map(function () {\r\n\t\t\t\t\t\treturn true\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.selectedRows = vm.rows.map(function () {\r\n\t\t\t\t\t\treturn false\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.onRemoveSelection = function () {\r\n\t\t\t\tangular.forEach(vm.selectedRows, function (row, index) {\r\n\t\t\t\t\tif (row)\r\n\t\t\t\t\t\taggregatedRemoveService.markForDelete(vm.name, vm.rows[index]);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvar rows = vm.rows.filter(function (row, index) {\r\n\t\t\t\t\treturn vm.selectedRows[index] != true;\r\n\t\t\t\t})\r\n\r\n\t\t\t\tvm.selectedRows = [];\r\n\t\t\t\tvm.rows = rows;\r\n\t\t\t\tupdateParentSection();\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\t\tvm.setHierarchy({\r\n\t\t\t\t\tname: name,\r\n\t\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// trigger table saw after binding complete.\r\n\t\t$timeout(function () {\r\n\t\t\tif (vm.rows.length > 0) {\r\n\t\t\t\t$(document).trigger('enhance.tablesaw');\r\n\t\t\t}\r\n\t\t}.bind(vm), 0);\r\n\r\n\t\tfunction updateParentSection() {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.rows\r\n\t\t\t});\r\n\t\t\t// $scope.$broadcast('table-number-of-rows-changed') ;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbTable', {\r\n\t\ttemplateUrl: '../ngviews/components/qbMultiEntryTable.html',\r\n\t\tcontroller: QBTableController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tupdate: '&',\r\n\t\t\tname: '@',\r\n\t\t\tsectionName: '<',\r\n\t\t\tvalueAggregator: '<',\r\n\t\t\trows: '=',\r\n\t\t\tcolumns: '=',\r\n\t\t\teditDisabled: '<',\r\n\t\t\taddDisabled: '<',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('MultiselectDropdown', MultiselectDropdown);\r\n\r\n\tMultiselectDropdown.$inject = ['$scope', 'serviceResponseRepository', 'quoteModelFactory', 'labelService'];\r\n\r\n\tfunction MultiselectDropdown($scope, serviceResponseRepository, quoteModelFactory, labelService) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.ls = labelService;\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function (event) {\r\n\r\n\t\t\tif (!!vm.fieldValue) {\r\n\t\t\t\tif (vm.selectedOptions.indexOf(vm.fieldValue) == -1) {\r\n\t\t\t\t\tvm.selectedOptions.push(vm.fieldValue);\r\n\t\t\t\t}\r\n\t\t\t\tvm.fieldValue = '';\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvm.getLabelFor = function (value) {\r\n\t\t\tvar label = '';\r\n\r\n\t\t\tfor (var item in vm.options) {\r\n\t\t\t\tif (vm.options[item].value == value) {\r\n\t\t\t\t\tlabel = vm.options[item].label;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn label;\r\n\t\t}\r\n\r\n\t\tvm.removeItem = function (item) {\r\n\t\t\tif (vm.selectedOptions.length <= 1) {\r\n\t\t\t\tvm.selectedOptions = [];\r\n\t\t\t} else {\r\n\t\t\t\tvar index = vm.selectedOptions.indexOf(item);\r\n\t\t\t\tvm.selectedOptions.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvm.getOptions = function () {\r\n\t\t\treturn vm.options;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('multiselectDropdown', {\r\n\t\ttemplateUrl: '../ngviews/components/qbMultiselectDropdown.html',\r\n\t\tcontroller: MultiselectDropdown,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tname: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t\tfieldValue: '<',\r\n\t\t\toptions: '<',\r\n\t\t\tselectedOptions: '=',\r\n\t\t\tlabelWildcard: '<',\r\n\t\t\tselectionLimit: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBNoClaimBonus', QBNoClaimBonus);\r\n\r\n\tQBNoClaimBonus.$inject = ['$scope', '$state'];\r\n\r\n\tfunction QBNoClaimBonus($scope, $state) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.fieldValue = vm.ngModel;\r\n\t\t}\r\n\r\n\t\tvm.stateName = $state.$current.name;\r\n\r\n\t\tfunction calcAge() {\r\n\t\t\treturn (moment(new Date()).diff(moment(vm.dob, 'DD/MM/YYYY'), 'years', true));\r\n\t\t}\r\n\r\n\t\tvm.getFilteredOptions = function () {\r\n\r\n\t\t\tvar fullOptions = vm.options.slice();\r\n\t\t\tvar age = Math.round(calcAge());\r\n\t\t\tvar product = vm.stateName.split(\".\");\r\n\t\t\t//removed age check and added check based on years held\r\n\t\t\tfullOptions.reverse();\r\n\t\t\t//additional check if age is below 17 or dob is undefined\r\n\t\t\tif ((age < 17) || (!vm.dob)) {\r\n\t\t\t\treturn fullOptions.splice(0, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif (product[0] != 'bike') {\r\n\t\t\t\tif (vm.yearsHeld == 'lessThan_1') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 1);\r\n\t\t\t\t} else if (vm.yearsHeld == '1') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 2);\r\n\t\t\t\t} else if (vm.yearsHeld == '2') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 3);\r\n\t\t\t\t} else if (vm.yearsHeld == '3') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 4);\r\n\t\t\t\t} else if (vm.yearsHeld == '4') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 5);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (age == 17) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 1);\r\n\t\t\t\t} else if (age == 18) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 2);\r\n\t\t\t\t} else if (age == 19) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 3);\r\n\t\t\t\t} else if (age == 20) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 4);\r\n\t\t\t\t} else if (age == 21) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 5);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn fullOptions;\r\n\r\n\t\t}\r\n\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({\r\n\t\t\t\tname: name,\r\n\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.fieldValue\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbNoClaimBonus', {\r\n\t\ttemplateUrl: '/ngviews/components/qbNoClaimBonus.html',\r\n\t\tcontroller: QBNoClaimBonus,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\toptions: '<',\r\n\t\t\tname: '@',\r\n\t\t\tngModel: '<',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tdob: '<',\r\n\t\t\tyearsHeld: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t\t.module('qbePortal')\r\n\t\t.controller('paymentRefNumController', paymentRefNumController);\r\n\r\n\tpaymentRefNumController.$inject = [\r\n\t\t'$rootScope',\r\n\t\t'$scope',\r\n\t\t'$q',\r\n\t\t'$sce',\r\n\t\t'$window',\r\n\t\t'$http',\r\n\t\t'guideWireService',\r\n\t\t'labelService',\r\n\t\t'storage',\r\n\t\t'Util',\r\n\t\t'gtmService',\r\n\t];\r\n\tfunction paymentRefNumController(\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$q,\r\n\t\t$sce,\r\n\t\t$window,\r\n\t\t$http,\r\n\t\tguideWireService,\r\n\t\tlabelService,\r\n\t\tstorage,\r\n\t\tutil,\r\n\t\tgtmService\r\n\t) {\r\n\t\tvar vm = this;\r\n\t\tvm.findYourBill = findYourBill;\r\n\t\tvm.imageTooltipPath = labelService.getObjectValue(\r\n\t\t\t'enterPaymentRef',\r\n\t\t\t'img'\r\n\t\t);\r\n\t\tactivate();\r\n\r\n\t\tfunction activate() {\r\n\t\t\tvar autoTrigger = storage.getItem('auto-find-bill');\r\n\t\t\tif (autoTrigger && autoTrigger.trigger) {\r\n\t\t\t\tsearchForRefNum();\r\n\t\t\t\tstorage.removeItem('auto-find-bill');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$scope.$on('reset-defaults', function(event) {\r\n\t\t\tvm.showPaymentSection = false;\r\n\t\t});\r\n\r\n\t\tvm.getObjectValue = function(fieldName, fieldLabel) {\r\n\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\tlabelService.getObjectValue(fieldName, fieldLabel)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getImagePath = function(fieldName, fieldLabel) {\r\n\t\t\tvar path = labelService.getObjectValue(fieldName, fieldLabel);\r\n\t\t\treturn path;\r\n\t\t};\r\n\r\n\t\tfunction isUndefinedOrNull(arg) {\r\n\t\t\tif (angular.isUndefined(arg) || arg == null) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfunction findYourBill() {\r\n\t\t\tvm.validRef = true;\r\n\t\t\tvm.paymentFlag = true;\r\n\r\n\t\t\tvalidatePaymentRefNum();\r\n\t\t\tif (\r\n\t\t\t\tcheckProductIfInGuidewire() &&\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$valid\r\n\t\t\t) {\r\n\t\t\t\tsearchForRefNum();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction validatePaymentRefNum() {\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$$rawModelValue\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\t//clear errors and hide validation message\r\n\t\t\t\t//$rootScope.$broadcast('broadcast-no-field-errors');\r\n\t\t\t\tif (!isUndefinedOrNull(vm.validationSelector)) {\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t\t'minlength',\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar referenceNo =\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$$rawModelValue;\r\n\t\t\t\tvar refLength = referenceNo.length;\r\n\t\t\t\tvar refLengthIsValid = refLength <= 14 && refLength >= 8;\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tvm.postBillPay != 1 &&\r\n\t\t\t\t\treferenceNo.startsWith('1000') &&\r\n\t\t\t\t\trefLength >= 14\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!referenceNo.startsWith('1000') && refLength == 14) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!refLengthIsValid) {\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t\t'minlength',\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t'required',\r\n\t\t\t\t\tfalse\r\n\t\t\t\t);\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t'minlength',\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t'wrongref',\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (!vm.validationSelector.enterPaymentRef.$valid)\r\n\t\t\t\t$rootScope.$broadcast('broadcast-field-errors');\r\n\t\t}\r\n\r\n\t\tfunction checkProductIfInGuidewire() {\r\n\t\t\tvar prodRefNum = vm.fieldValues.enterPaymentRef;\r\n\r\n\t\t\tif (!isUndefinedOrNull(prodRefNum)) {\r\n\t\t\t\tvar min = prodRefNum.substr(1, 2);\r\n\r\n\t\t\t\t//Turn Off Claims Payment and redirect to Billpay site\r\n\t\t\t\tif (\r\n\t\t\t\t\tvm.postBillPay != 1 &&\r\n\t\t\t\t\tprodRefNum.startsWith('1000') &&\r\n\t\t\t\t\tprodRefNum.length == 14\r\n\t\t\t\t) {\r\n\t\t\t\t\t$window.open('http://billpay.qbe.com.au', '_blank');\r\n\t\t\t\t\twindow.location.href = 'https://qbe.com.au';\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (\r\n\t\t\t\t\t!prodRefNum.startsWith('1000') &&\r\n\t\t\t\t\tprodRefNum.length == 14\r\n\t\t\t\t) {\r\n\t\t\t\t\t// Anubis\r\n\t\t\t\t\t// && min <= 26\r\n\t\t\t\t\t$window.open('http://billpay.qbe.com.au', '_blank');\r\n\t\t\t\t\twindow.location.href = 'https://qbe.com.au';\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (prodRefNum.length < 8) {\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t\t'wrongref',\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tprodRefNum.startsWith('1000') ||\r\n\t\t\t\t\tprodRefNum.startsWith('5000')\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (prodRefNum.startsWith('1000')) {\r\n\t\t\t\t\t\tvm.policyCategory = 'claim';\r\n\t\t\t\t\t} else if (prodRefNum.startsWith('5000')) {\r\n\t\t\t\t\t\tvm.policyCategory = 'policy';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction searchForRefNum() {\r\n\t\t\tvar info = guideWireService.getPaymentInfo(\r\n\t\t\t\tvm.fieldValues.enterPaymentRef\r\n\t\t\t);\r\n\r\n\t\t\tinfo.then(function(resp) {\r\n\t\t\t\tsearchForRefNumberSuccess(resp);\r\n\t\t\t}).catch(function(err) {\t\t\t\t\r\n\t\t\t\tif (err && err.status) {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tgtmService.trackApiError(err.status, 'invalid payment reference number');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t'wrongref',\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t\t$rootScope.$broadcast('invalid-payment-reference-number');\r\n\t\t\t\treturn;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction searchForRefNumberSuccess(resp) {\r\n\t\t\tif (resp.data.status == 'E') {\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tgtmService.trackApiError(resp.data.status, 'payment error due to status E');\r\n\r\n\t\t\t\t$rootScope.$broadcast('payment-error');\t\t\t\t\r\n\t\t\t\treturn;\r\n\t\t\t} else if (resp.data.status == 'P') {\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tgtmService.trackApiError(resp.data.status, 'payment already made');\r\n\r\n\t\t\t\t$rootScope.$broadcast('payment-already-made');\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\t$rootScope.$broadcast('broadcast-no-field-errors');\r\n\t\t\t}\r\n\r\n\t\t\tvm.policyNumber = resp.data.policyNumber;\r\n\t\t\tvm.paymentType = resp.data.paymentType;\r\n\t\t\tvm.amount = resp.data.amount.toFixed(2);\r\n\t\t\tvm.showPaymentSection = true;\r\n\t\t\tvar details = {\r\n\t\t\t\tamount: vm.amount,\r\n\t\t\t\treference_number: vm.fieldValues.enterPaymentRef,\r\n\t\t\t\tinsuranceType: vm.insuranceType,\r\n\t\t\t\tpaymentType: vm.paymentType,\r\n\t\t\t\treferenceId: resp.data.referenceId\r\n\t\t\t};\r\n\r\n\t\t\tstorage.setItem(\r\n\t\t\t\t'unauth-reference',\r\n\t\t\t\tutil.b64EncodeUnicode(vm.fieldValues.enterPaymentRef)\r\n\t\t\t);\r\n\r\n\t\t\t/* track search ref sucess after button click */\r\n\t\t\tgtmService.trackPayBillVirtualBillFound(details.reference_number, details.referenceId);\r\n\t\t\t/* end track search ref sucess after button click */\r\n\r\n\t\t\t$rootScope.$broadcast('billUpdate', details);\r\n\t\t\t$rootScope.$broadcast('toggle-amount-due');\r\n\t\t}\r\n\r\n\t\t$scope.validNumber = function(event) {\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key === 8) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.closeImageRefForPayment = function() {\r\n\t\t\tangular.element('#pay-img-ref').toggleClass('ng-hide');\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('paymentRefNum', {\r\n\t\ttemplateUrl: '/ngviews/components/qbPaymentRefNum.html',\r\n\t\tcontroller: paymentRefNumController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tfieldKey: '@',\r\n\t\t\tvalidationSelector: '=',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tlabelKey: '@',\r\n\t\t\tinsuranceType: '@',\r\n\t\t\tngModel: '=',\r\n\t\t\tpolicyCategory: '=',\r\n\t\t\tpostBillPay: '=',\r\n\t\t\tvalidRef: '=',\r\n\t\t\tshowPaymentSection: '=',\r\n\t\t\tpaymentRefError: '=',\r\n\t\t\tfieldValues: '='\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n qbPremiumBreakdownController.$inject = ['$scope', '$window', '$rootScope', '$filter', 'labelService'];\r\n \r\n function qbPremiumBreakdownController($scope, $window, $rootScope, $filter, labelService) {\r\n var vm = this;\r\n\r\n vm.lookupLabel = function (fieldName) {\r\n return labelService.getGlobalOptionLabel('paymentSummary', fieldName);\r\n };\r\n }\r\n\r\n angular.module('qbePortal').component('qbPremiumBreakdown', {\r\n templateUrl: '/ngviews/components/qbPremiumBreakdown.html',\r\n controller: qbPremiumBreakdownController,\r\n controllerAs: 'vm',\r\n bindings: {\r\n paymentFrequency: '@',\r\n quoteResults: '=',\r\n monthlyResults: '='\r\n },\r\n });\r\n\r\n})();\n(function () {\r\n\t\"use strict\";\r\n\r\n\tangular\r\n\t\t.module(\"qbePortal\")\r\n\t\t.controller(\"QBProgressBarController\", QBProgressBarController);\r\n\tQBProgressBarController.$inject = [\r\n\t\t\"$scope\",\r\n\t\t\"$state\",\r\n\t\t\"dynamicRouter\",\r\n\t\t\"MODULE_INFO\",\r\n\t\t\"labelService\",\r\n\t\t\"Util\",\r\n\t];\r\n\r\n\tfunction QBProgressBarController(\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\tdynamicRouter,\r\n\t\tMODULE_INFO,\r\n\t\tlabelService,\r\n\t\tUtil\r\n\t) {\r\n\t\tvar vm = this;\r\n\t\tvm.selectedStep = null;\r\n\t\tvm.lastSelectedStep = null;\r\n\t\tvm.state = $state;\r\n\r\n\t\t$scope.$on(\"$stateChangeSuccess\", function (\r\n\t\t\tevent,\r\n\t\t\ttoState,\r\n\t\t\ttoParams,\r\n\t\t\tfromState,\r\n\t\t\tfromParams\r\n\t\t) {\r\n\t\t\tif (toState) {\r\n\t\t\t\tvm.selectedStep = toState.name;\r\n\r\n\t\t\t\t// hack to stop vm.selectedStep to nullifying\r\n\t\t\t\tif (vm.selectedStep !== vm.lastSelectedStep) {\r\n\t\t\t\t\tvm.lastSelectedStep = vm.selectedStep;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// display top banner\r\n\t\t\t\tdisplayTopBanner();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"selected-quote-changed\", function () {\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\tdisplayTopBanner();\r\n\t\t});\r\n\r\n\t\tvm.getPage = function () {\r\n\t\t\tvar page = vm.state.current.name.split(\".\")[1];\r\n\r\n\t\t\tif (page === \"policy-start-date\" || page === \"ctp\") {\r\n\t\t\t\treturn false;\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction getStateByNumber(stepNumber) {\r\n\t\t\tvar steps = dynamicRouter.getSteps();\r\n\t\t\tif (steps) return steps[stepNumber].stateName;\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfunction displayTopBanner() {\r\n\t\t\tvar getPages = labelService.getObjectValue(\"topBanner\", \"pages\");\r\n\t\t\tvar bannerText = labelService.getObjectValue(\r\n\t\t\t\t\"topBanner\",\r\n\t\t\t\t\"bannerText\"\r\n\t\t\t);\r\n\r\n\t\t\tif (\r\n\t\t\t\t!Util.isUndefinedOrNull(getPages) &&\r\n\t\t\t\t!Util.isUndefinedOrNull(bannerText) &&\r\n\t\t\t\tbannerText != \"\"\r\n\t\t\t) {\r\n\t\t\t\tvar pagesArray = getPages.split(\",\");\r\n\t\t\t\tvar displayTopBanner = false;\r\n\t\t\t\tvar declinePages = [\"decline\", \"embargo\", \"referral\", \"error\"];\r\n\t\t\t\tvar currentPage = dynamicRouter\r\n\t\t\t\t\t.getCurrentState()\r\n\t\t\t\t\t.name.split(\".\");\r\n\t\t\t\tcurrentPage = currentPage[currentPage.length - 1];\r\n\r\n\t\t\t\tif (getPages.length > 0) {\r\n\t\t\t\t\tfor (var i = 0; i < pagesArray.length; i++) {\r\n\t\t\t\t\t\tif (currentPage == pagesArray[i]) {\r\n\t\t\t\t\t\t\tdisplayTopBanner = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var d = 0; d < declinePages.length; d++) {\r\n\t\t\t\t\t\tif (currentPage == declinePages[d]) {\r\n\t\t\t\t\t\t\tdisplayTopBanner = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (displayTopBanner) {\r\n\t\t\t\t\t$scope.$root.$broadcast(\"show-top-banner\", bannerText);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.getSteps = function () {\r\n\t\t\treturn dynamicRouter.getSteps();\r\n\t\t};\r\n\r\n\t\tvm.isCurrent = function (stepNumber) {\r\n\t\t\treturn (\r\n\t\t\t\tgetStateByNumber(stepNumber) ==\r\n\t\t\t\tdynamicRouter.getCurrentState().name\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.canMoveToStep = function (stepNumber) {\r\n\t\t\treturn stepNumber < dynamicRouter.getCurrentState().number;\r\n\t\t};\r\n\r\n\t\tvm.moveToStep = function (stepNumber) {\r\n\t\t\tif (vm.canMoveToStep(stepNumber)) {\r\n\t\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t\t$state.go(getStateByNumber(stepNumber));\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.moveToSelectedStep = function () {\r\n\t\t\tif (!!vm.selectedStep) {\r\n\t\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t\t$state.go(vm.selectedStep);\r\n\t\t\t} else {\r\n\t\t\t\t// hack to stop vm.selectedStep to nullifying\r\n\t\t\t\tvm.selectedStep = vm.lastSelectedStep;\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").component(\"qbProgressBar\", {\r\n\t\ttemplateUrl: \"../ngviews/components/qbProgressBar.html\",\r\n\t\tcontroller: QBProgressBarController,\r\n\t\tcontrollerAs: \"vm\",\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('qbRangeBar', qbRangeBar);\r\n\r\n\tqbRangeBar.$inject = ['$scope', 'labelService', '$timeout'];\r\n\r\n\tfunction qbRangeBar($scope, labelService, $timeout) {\r\n\t\tvar vm = this;\r\n\t\tvoid 0;\r\n\r\n\t\tvm.getAverageWidth = function () {\r\n\t\t\tvar averageWidth = {'width': '10%'};\r\n\r\n\t\t\tif (!!vm.minimum && !!vm.maximum && !!vm.average) {\r\n\r\n\t\t\t\tvm.total = (vm.maximum - vm.minimum);\r\n\t\t\t\tvm.averageWidth = (vm.average - vm.minimum) / vm.total * 100;\r\n\t\t\t\taverageWidth = {'width': vm.averageWidth + '%'};\r\n\t\t\t}\r\n\r\n\t\t\treturn averageWidth;\r\n\t\t};\r\n\r\n\t\tvm.getCirclePos = function () {\r\n\t\t\tif (!!vm.value) {\r\n\t\t\t\tif (vm.value >= vm.minimum && vm.value <= vm.maximum) {\r\n\t\t\t\t\tvar pos = (vm.value - vm.minimum) / vm.total * 100;\r\n\t\t\t\t\treturn {'left': pos + '%'};\r\n\t\t\t\t}\r\n\t\t\t\telse if (vm.value > vm.maximum) {\r\n\t\t\t\t\tvm.value = vm.maximum;\r\n\t\t\t\t\treturn {'left': '100%'};\r\n\t\t\t\t}\r\n\t\t\t\telse if (vm.value < vm.minimum) {\r\n\t\t\t\t\tvm.value = vm.minimum;\r\n\t\t\t\t\treturn {'left': '0%'};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn {'left': '0%'};\r\n\t\t\t}\r\n\t\t};\r\n\t\tvm.getAveragePos = function () {\r\n\t\t\tif (!!vm.averageWidth) {\r\n\t\t\t\tvar pos = (vm.averageWidth - 17) * -1;\r\n\t\t\t\treturn {'left': pos + '%'};\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbRangeBar', {\r\n\t\ttemplateUrl: '/ngviews/components/qbRangeBar.html',\r\n\t\tcontroller: qbRangeBar,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tvalue: '@',\r\n\t\t\tminimum: '<',\r\n\t\t\tmaximum: '<',\r\n\t\t\taverage: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBRapidEstimateQuotesPanel', QBRapidEstimateQuotesPanel);\r\n\tQBRapidEstimateQuotesPanel.$inject = ['$scope', '$state', 'quoteModelFactory', 'labelService', 'portalServiceWrapper', 'userInputRepository', 'serviceResponseRepository', 'MAService', '$timeout', 'quoteOptions', 'gtmService', 'coverTypeResolver', 'quoteResultFilter' , 'storage'];\r\n\r\n\tfunction QBRapidEstimateQuotesPanel($scope, $state, quoteModelFactory, labelService, portalServiceWrapper, userInputRepository, serviceResponseRepository, MAService, $timeout, quoteOptions, gtmService, coverTypeResolver, quoteResultFilter, storage) {\r\n\t\tvar vm = this,\r\n\t\t\tquoteHasCoverType = false;\r\n\r\n\t\tvm.formData = {};\r\n\r\n\t\tvar quoteModel = quoteModelFactory.create();\r\n\r\n\t\tif (quoteModel.coverType) {\r\n\t\t\tquoteHasCoverType = true;\r\n\t\t}\r\n\r\n\t\tif (quoteHasCoverType) {\r\n\t\t\tvm.quoteModel = quoteModel.coverType[0];\r\n\t\t}\r\n\r\n\t\t$scope.$root.$on('process-rapid-estimates', displayRapidEstimateResults);\r\n\r\n\t\tfunction displayRapidEstimateResults(event, args) {\r\n\t\t\tvar quotesTemp = [];\r\n\t\t\tvm.formData = args.formData;\r\n\t\t\tvm.scrollCTA = labelService.getGlobalOptionLabel('rapidEstimate', 'scrollCTA');\r\n\t\t\tvm.productType = labelService.getGlobalOptionLabel('rapidEstimate', 'productType');\r\n\t\t\tquoteOptions.clearQuoteResults();\r\n\t\t\tvar mergedQuotes = quoteOptions.getMergedQuoteResults(args.results);\r\n\t\t\tangular.forEach(mergedQuotes, function (mergedQuote, index) {\r\n\t\t\t\tvar quote = mergedQuote.getAnnual(),\r\n\t\t\t\t\tmonthlyQuote = mergedQuote.getMonthly();\r\n\r\n\t\t\t\tif (!quote.quoteResult.errors) {\r\n\t\t\t\t\tvar offering = quote.offering;\r\n\t\t\t\t\tvar coverType = quote.coverType;\r\n\t\t\t\t\tvar coverIndicator = offering ? offering : coverType;\r\n\t\t\t\t\tvar coverDetails = labelService.getGlobalOption('coverTypes', coverIndicator) ;\r\n\t\t\t\t\tcoverDetails.yearlyPayment = quote.quoteResult.totalPremium;\r\n\t\t\t\t\tcoverDetails.monthlyPayment = monthlyQuote.paymentPlan.installment;\r\n\t\t\t\t\tcoverDetails.totalPremium = quote.quoteResult.totalPremium;\r\n\t\t\t\t\tcoverDetails.offering = offering;\r\n\t\t\t\t\tcoverDetails.coverType = coverType;\r\n\t\t\t\t\tcoverDetails.coverTypeSubClass = coverDetails.coverTypeSubClass || 'standard' ;\r\n\t\t\t\t\tquotesTemp.push(\r\n\t\t\t\t\t\tcoverDetails\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tquotesTemp = quoteResultFilter.filter(window.qbe.rapidEstimateFilter, quotesTemp);\r\n\t\t\tvm.quotes = quotesTemp;\r\n\t\t\t$scope.$root.$broadcast('show-rapid-estimates');\r\n\t\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\t\t\tanimateToResults();\r\n\t\t}\r\n\r\n\t\tfunction animateToResults() {\r\n\t\t\t$timeout(function () {\r\n\t\t\t\tvar scrollAnchor = $('qb-rapid-estimate-quotes-panel');\r\n\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\tscrollTop: scrollAnchor.offset().top\r\n\t\t\t\t}, 'slow');\r\n\t\t\t}, 100);\r\n\t\t}\r\n\r\n\t\tvm.apply = function (quote, paymentFrequency, applyFormPath) {\r\n\t\t\t$scope.$root.$broadcast('loading-animation-start');\r\n\t\t\tgtmService.trackEvent('rapid-estimate-apply');\r\n\t\t\tif (quote.offering)\r\n\t\t\t\tquoteOptions.setSelectedOffering(quote.offering);\r\n\t\t\telse {\r\n\t\t\t\tquoteOptions.setSelectedCoverType(quote.coverTypeClass, quote.coverTypeSubClass);\r\n\t\t\t}\r\n\r\n\t\t\tvm.formData.rapidEstimateUrl = window.location.href;\r\n\t\t\tuserInputRepository.update(vm.formData);\r\n\t\t\tportalServiceWrapper.updateQuote(vm.formData);\r\n\t\t\tportalServiceWrapper.saveQuote('everyyear').then(function (resp) {\r\n\t\t\t\tperformMAServices('apply-now');\r\n\t\t\t\tif (!applyFormPath){\r\n\t\t\t\t\t$scope.$emit('rapid-estimate-redirect') ;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstorage.setItem('ignoreRapidEstimateRoute' , vm.productType );\r\n\t\t\t\t\twindow.location = applyFormPath;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch(function (err) {\r\n\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\terrorMessage: 'Save quote error',\r\n\t\t\t\t\tresponse: err\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tvar form;\r\n\t\t\tswitch (vm.productType) {\r\n\t\t\t\tcase 'Car':\r\n\t\t\t\t\tform = vm.formData.vehicleForm;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Motorcycle':\r\n\t\t\t\t\tform = vm.formData.bikeForm;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Caravan':\r\n\t\t\t\t\tform = vm.formData.caravanForm;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Home':\r\n\t\t\t\t\tform = vm.formData.homeForm;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tvar policyEmail = form.tellUsMore ? form.tellUsMore.email : null;\r\n\t\t\tvar campaignCode = form.tellUsMore ? form.tellUsMore.promotionalCode : null;\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom('quote');\r\n\t\t\tvar maData = {\r\n\t\t\t\tpageName: 'rapid-estimate',\r\n\t\t\t\tcampaignCode: campaignCode,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult.getAnnual(),\r\n\t\t\t\tmonthlyResult: quoteResult.getMonthly(),\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\t\t\tvoid 0;\r\n\t\t\tMAService.mergeContacts(eventName, maData)\r\n\t\t}\r\n\r\n\t\t$scope.$root.$broadcast('rapid-estimates-panel-initialised');\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbRapidEstimateQuotesPanel', {\r\n\t\ttemplateUrl: '/ngviews/components/qbRapidEstimateQuotesPanel.html',\r\n\t\tcontroller: QBRapidEstimateQuotesPanel,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tapplyFormPath: '@'\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('RegoSearchController', RegoSearchController);\r\n\r\n\tRegoSearchController.$inject = ['$scope', 'STATES', 'regoSearchService', 'serviceResponseRepository', 'quoteModelFactory', 'labelService'];\r\n\r\n\tfunction RegoSearchController($scope, STATES, regoSearchService, serviceResponseRepository, quoteModelFactory, labelService) {\r\n\t\tvar vm = this,\r\n\t\t\tsearchType;\r\n\r\n\t\tvm.rego = '';\r\n\t\tvm.yearInput = null;\r\n\t\tvm.makeInput = '';\r\n\t\tvm.modelInput = '';\r\n\t\tvm.carOption = '';\r\n\t\tvm.states = STATES;\r\n\t\tvm.modelResponse = null;\r\n\t\tvm.makeResponse = null;\r\n\r\n\t\tvm.isMakeSearchInProgress = false;\r\n\t\tvm.isModelSearchInProgress = false;\r\n\r\n\t\tvm.isRegoSearchError = false;\r\n\r\n\t\tvm.bodyStyles = [];\r\n\t\tvm.engineSizes = [],\r\n\t\t\tvm.selectedBodyStyle = 'Hatchback';\r\n\r\n\t\tvm.resetSearchLabel = labelService.getLabelFor('resetSearch');\r\n\r\n\t\tvm.carOptions = '';\r\n\t\t//vm.chosenResult = '';\r\n\t\tvar quoteModel = quoteModelFactory.create();\r\n\t\tquoteModel.regoDetails ? vm.chosenResult = quoteModel.regoDetails : vm.chosenResult = '';\r\n\t\tsearchType = '';\r\n\r\n\t\tfunction existsInArray(array, searchTerm, property) {\r\n\t\t\tfor (var i = 0, len = array.length; i < len; i++) {\r\n\t\t\t\tif (array[i][property] === searchTerm) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\r\n\t\tfunction getPastYears() {\r\n\t\t\tvar years = [];\r\n\t\t\tvar prevYear = '';\r\n\r\n\t\t\tfor (var i = 0; i < 100; i++) {\r\n\t\t\t\tprevYear = moment().subtract(i, 'year').format('Y');\r\n\t\t\t\tyears.push({label: prevYear, value: prevYear});\r\n\t\t\t}\r\n\r\n\t\t\treturn years;\r\n\t\t}\r\n\r\n\t\tfunction buildArray(data, array, property) {\r\n\r\n\t\t\tif (data.length >= 5) {\r\n\t\t\t\tdata.forEach(function (object) {\r\n\t\t\t\t\tvar item = object[property];\r\n\r\n\t\t\t\t\tif (!existsInArray(array, item, 'value')) {\r\n\t\t\t\t\t\tarray.push({\r\n\t\t\t\t\t\t\tvalue: item,\r\n\t\t\t\t\t\t\tlabel: item\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar yearsObject = getPastYears();\r\n\r\n\t\tvm.searchBy = function (type) {\r\n\t\t\treturn searchType == type;\r\n\t\t}\r\n\r\n\t\tvm.showSearch = function (type) {\r\n\t\t\tvm.chosenResult = '';\r\n\t\t\tsearchType = type;\r\n\t\t}\r\n\r\n\t\tvm.getYears = function () {\r\n\t\t\treturn yearsObject;\r\n\t\t}\r\n\r\n\t\tvm.searchRegoNo = function (regoForm) {\r\n\t\t\tvar isValid = regoForm.carRegoNumber.$valid\r\n\t\t\t\t&& regoForm.carRegoNumberState.$valid;\r\n\t\t\tvm.isRegoSearchError = false;\r\n\t\t\tif (isValid) {\r\n\t\t\t\tvm.update({\r\n\t\t\t\t\tname: 'regoDetails', value: {\r\n\t\t\t\t\t\tregoNumber: vm.rego,\r\n\t\t\t\t\t\tstate: vm.selectedState,\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\r\n\t\t\t\tregoSearchService.search({\r\n\t\t\t\t\trego: vm.rego,\r\n\t\t\t\t\tstate: vm.selectedState,\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tvm.chosenResult = resp;\r\n\t\t\t\t\tvm.update({name: 'regoSearchResponse', value: resp});\r\n\t\t\t\t\tserviceResponseRepository.update('regoSearch', resp);\r\n\t\t\t\t}, function (error) {\r\n\t\t\t\t\tvm.isRegoSearchError = true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// On change of Year dropdown, trigger a search for the Make.\r\n\t\tvm.searchMake = function (yearInput) {\r\n\t\t\tvm.yearInput = yearInput;\r\n\r\n\t\t\tvar tempYear = null;\r\n\r\n\t\t\tif (tempYear !== vm.yearInput.value) {\r\n\t\t\t\tvm.makeInput = undefined;\r\n\t\t\t\tvm.modelInput = undefined;\r\n\t\t\t\tvm.carOptions = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.yearInput.value !== '') {\r\n\t\t\t\tvm.isMakeSearchInProgress = true;\r\n\t\t\t\ttempYear = vm.yearInput.value;\r\n\r\n\t\t\t\tregoSearchService.searchMake({\r\n\t\t\t\t\tyear: vm.yearInput.value\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tvm.makeResponse = resp;\r\n\t\t\t\t\tvm.isMakeSearchInProgress = false;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// On change of the Make dropdown, trigger a search for Model\r\n\t\tvm.searchModel = function (makeInput) {\r\n\t\t\tvm.makeInput = makeInput;\r\n\r\n\t\t\t// console.info(makeInput);\r\n\r\n\t\t\tvar tempMake = null;\r\n\r\n\t\t\tif (tempMake !== vm.makeInput.value) {\r\n\t\t\t\tvm.modelInput = undefined;\r\n\t\t\t\tvm.carOptions = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.makeInput !== '') {\r\n\t\t\t\tvm.isModelSearchInProgress = true;\r\n\r\n\t\t\t\tregoSearchService.searchModel({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\tmake: vm.makeInput.code\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tvm.isModelSearchInProgress = false;\r\n\t\t\t\t\tvm.modelResponse = resp;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Update the current car options based on engine/body filters\r\n\t\tvm.filterCarOptions = function (type) {\r\n\r\n\t\t\tif (type == 'bodyStyle') {\r\n\t\t\t\tvm.engineSizes = [];\r\n\t\t\t\tvm.selectedEngineSize = undefined;\r\n\t\t\t}\r\n\r\n\t\t\t// If only the body style is selected\r\n\t\t\tif (vm.selectedBodyStyle !== undefined && vm.selectedEngineSize == undefined) {\r\n\t\t\t\tvm.filteredCarOptions = vm.carOptions.filter(filterArrayByBody);\r\n\t\t\t}\r\n\r\n\t\t\t// If only the engine size is selected\r\n\t\t\tif (vm.selectedEngineSize !== undefined && vm.selectedBodyStyle == undefined) {\r\n\t\t\t\tvm.filteredCarOptions = vm.carOptions.filter(filterArrayByEngine);\r\n\t\t\t}\r\n\r\n\t\t\t// If both are selected\r\n\t\t\tif (vm.selectedEngineSize !== undefined && vm.selectedBodyStyle !== undefined) {\r\n\t\t\t\tvm.filteredCarOptions = vm.carOptions.filter(filterArrayByBodyAndEngine);\r\n\t\t\t}\r\n\r\n\t\t\t// Rebuild the engine size array\r\n\r\n\r\n\t\t\tbuildArray(vm.filteredCarOptions, vm.engineSizes, 'engineSize');\r\n\r\n\t\t}\r\n\r\n\t\t// On change of the Model dropdown, trigger a final search for the car details\r\n\t\tvm.getCarDetails = function (modelInput) {\r\n\t\t\tvm.carOptions = '';\r\n\t\t\tvm.bodyStyles = [];\r\n\t\t\tvm.engineSizes = [];\r\n\t\t\tvm.selectedBodyStyle = undefined;\r\n\t\t\tvm.selectedEngineSize = undefined;\r\n\r\n\t\t\tvm.modelInput = modelInput;\r\n\r\n\t\t\tif (vm.modelInput !== undefined) {\r\n\t\t\t\tregoSearchService.searchCar({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\tmake: vm.makeInput.code,\r\n\t\t\t\t\tmodel: vm.modelInput.code\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tbuildArray(resp, vm.bodyStyles, 'bodyStyle');\r\n\t\t\t\t\tbuildArray(resp, vm.engineSizes, 'engineSize');\r\n\t\t\t\t\tvm.carOptions = resp;\r\n\t\t\t\t\tvm.filteredCarOptions = resp;\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tvm.carOptions = '';\r\n\t\t\t\tvm.chosenResult = '';\r\n\t\t\t\tvm.carOption = '';\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByBodyAndEngine(item) {\r\n\t\t\treturn item.bodyStyle == vm.selectedBodyStyle.value && item.engineSize == vm.selectedEngineSize.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByBody(item) {\r\n\t\t\treturn item.bodyStyle == vm.selectedBodyStyle.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByEngine(item) {\r\n\t\t\treturn item.engineSize == vm.selectedEngineSize.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tvm.showChosenCar = function (key) {\r\n\t\t\tvm.chosenResult = vm.filteredCarOptions[key];\r\n\t\t\tvm.update({name: 'regoSearchResponse', value: vm.chosenResult});\r\n\t\t\tserviceResponseRepository.update('regoSearch', vm.chosenResult);\r\n\t\t}\r\n\r\n\t\tvm.isCarSelected = function () {\r\n\t\t\treturn vm.chosenResult !== '';\r\n\t\t}\r\n\r\n\t\tvm.resetSearch = function () {\r\n\t\t\tvm.chosenResult = '';\r\n\t\t\tserviceResponseRepository.update('regoSearch', null);\r\n\t\t}\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('regoSearch', {\r\n\t\ttemplateUrl: '/ngviews/components/qbRegoSearch.html',\r\n\t\tcontroller: RegoSearchController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBSaveQuote', QBSaveQuote);\r\n\r\n\tQBSaveQuote.$inject = [\r\n\t\t'$scope',\r\n\t\t'quoteModelFactory',\r\n\t\t'portalServiceWrapper',\r\n\t\t'userInputRepository',\r\n\t\t'quoteOptions',\r\n\t\t'labelService',\r\n\t\t'ipCookie',\r\n\t\t'gtmService',\r\n\t\t'quoteRequestRepository',\r\n\t];\r\n\r\n\tfunction QBSaveQuote(\r\n\t\t$scope,\r\n\t\tquoteModelFactory,\r\n\t\tportalServiceWrapper,\r\n\t\tuserInputRepository,\r\n\t\tquoteOptions,\r\n\t\tlabelService,\r\n\t\tipCookie,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository\r\n\t) {\r\n\t\t$scope.$root.$on('open-modal', openModal);\r\n\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.opened = false;\r\n\t\tvm.isError = false;\r\n\r\n\t\tfunction openModal() {\r\n\t\t\tvm.label = labelService.getLabelFor('saveQuoteEmail');\r\n\t\t\tvar quoteModel = quoteModelFactory.create();\r\n\r\n\t\t\tvm.email = quoteModel.email;\r\n\t\t\tvm.quoteNo = quoteModel.quoteId;\r\n\t\t\tvm.opened = true;\r\n\r\n\t\t\tif (vm.email !== undefined && vm.email !== null) {\r\n\t\t\t\tvm.showForm = false;\r\n\t\t\t\tsaveQuote();\r\n\t\t\t} else {\r\n\t\t\t\tvm.showForm = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction saveQuote() {\r\n\t\t\t// Call MA service here to send email\r\n\t\t\tportalServiceWrapper.updateQuote(userInputRepository.get());\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function(resp) {\r\n\t\t\t\t\t$scope.$root.$broadcast('perform-ma-service', 'save');\r\n\t\t\t\t\tvar quoteModel = quoteModelFactory.create();\r\n\t\t\t\t\tvm.email = quoteModel.email;\r\n\t\t\t\t\tvm.quoteNo = quoteModel.quoteId;\r\n\r\n\t\t\t\t\tipCookie('QBE_portal_vehicle_quote_id', vm.quoteNo, {\r\n\t\t\t\t\t\tpath: '/'\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Show mini spinner\r\n\t\t\t\t\tvm.showForm = false;\r\n\r\n\t\t\t\t\t// If quoteId found and email found, triggerGoal service quote\r\n\t\t\t\t\tvar qr = quoteRequestRepository.getSaveQuoteRequest(paymentFrequency);\r\n\t\t\t\t\tif (qr && qr.quoteID && vm.email) {\r\n\t\t\t\t\t\tportalServiceWrapper.triggerGoalSaveQuote();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$scope.$root.$broadcast('save-quote-success');\r\n\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\t\terrorMessage: 'Save quote error',\r\n\t\t\t\t\t\tresponse: err\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.saveForm = function(form) {\r\n\t\t\tif (form.$valid) {\r\n\t\t\t\tgtmService.trackEvent('save');\r\n\t\t\t\tuserInputRepository.update({ email: vm.email });\r\n\t\t\t\tsaveQuote();\r\n\t\t\t} else {\r\n\t\t\t\t// console.info('Please enter an email');\r\n\t\t\t\tvm.isError = true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.closeModal = function() {\r\n\t\t\tvm.opened = false;\r\n\t\t\tvm.email = null; // clear email field\r\n\t\t\t$scope.$root.$broadcast('close-modal', { modal: 'saveQuote' });\r\n\t\t};\r\n\r\n\t\tvm.getSectionLabelFor = function(fieldName) {\r\n\t\t\treturn labelService.getSectionLabelFor(fieldName);\r\n\t\t};\r\n\r\n\t\tvm.getSectionDescriptionFor = function(fieldName) {\r\n\t\t\treturn labelService.getSectionDescriptionFor(fieldName);\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbSaveQuote', {\r\n\t\ttemplateUrl: '../ngviews/components/qbSaveQuote.html',\r\n\t\tcontroller: QBSaveQuote,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\temail: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t\"use strict\";\r\n\r\n\tangular\r\n\t\t.module(\"qbePortal\")\r\n\t\t.controller(\"QBTopBannerController\", QBTopBannerController);\r\n\r\n\tQBTopBannerController.$inject = [\"$scope\", \"labelService\", \"$window\"];\r\n\r\n\tfunction QBTopBannerController($scope, labelService, $window) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.showTopBanner = false;\r\n\t\t//vm.bannerText = $window.qbe.fieldLabels.topBanner.bannerText;\r\n\r\n\t\tvm.closeTopBanner = function () {\r\n\t\t\tvm.showTopBanner = false;\r\n\t\t};\r\n\r\n\t\t$scope.$root.$on(\"show-top-banner\", function (event, bannerText) {\r\n\t\t\tvm.bannerText = bannerText;\r\n\t\t\tvm.showTopBanner = true;\r\n\t\t});\r\n\r\n\t\t$scope.$root.$on(\"hide-top-banner\", function () {\r\n\t\t\tvm.showTopBanner = false;\r\n\t\t});\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").component(\"qbTopBanner\", {\r\n\t\ttemplateUrl: \"/ngviews/components/qbTopBanner.html\",\r\n\t\tcontroller: QBTopBannerController,\r\n\t\tcontrollerAs: \"vm\",\r\n\t\tbindings: {},\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBValidationController', QBValidationController);\r\n\r\n\tQBValidationController.$inject = ['$scope', 'validationService'];\r\n\r\n\tfunction QBValidationController($scope, validationService) {\r\n\t\tvar vm = this, scope = $scope, validationMessages = {};\r\n\r\n\t\tvar hasErrors = false, errors = {};\r\n\r\n\t\tvar validationResult = null;\r\n\r\n\t\t// $scope.$on('field-error', onError);\r\n\t\t$scope.validationSelector = vm.validationSelector;\r\n\t\t// function onError (event, error) {\r\n\t\t// \tvar currentFieldSelector = error.section + '.' + error.inputName ;\r\n\t\t// \t//console.log(vm.validationSelector + ' | ' + currentFieldSelector);\r\n\t\t// \tif (vm.validationSelector == currentFieldSelector ) {\r\n\t\t// \t\thasErrors = true ;\r\n\t\t// \t\terrors[error.type] = error ;\r\n\t\t// \t\tconsole.log('field has error') ;\r\n\t\t// \t\t$scope.$emit('enable-field-error-class') ;\r\n\t\t// \t}\r\n\t\t// }\r\n\r\n\t\tvm.validationMessageFor = function (rule) {\r\n\t\t\t// if ( ! validationResult )\r\n\t\t\tvalidationResult = validationService.getFieldErrors(vm.validationSelector);\r\n\t\t\treturn validationResult ? validationResult.errors[rule] : null;\r\n\t\t}\r\n\r\n\t\tvm.isInvalid = function (rule) {\r\n\t\t\treturn validationService.isFieldInvalid(vm.validationSelector, rule); //, vm.messageKey) ;\r\n\t\t\t// return validationResult[rule] ;\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbValidation', {\r\n\t\ttemplateUrl: '/ngviews/components/qbValidation.html',\r\n\t\tcontroller: QBValidationController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tvalidationSelector: '<',\r\n\t\t\tmessageKey: '<',\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('VehicleSubTypeSelector', VehicleSubTypeSelector);\r\n\r\n\tVehicleSubTypeSelector.$inject = ['$scope', 'serviceResponseRepository', 'quoteModelFactory', 'labelService'];\r\n\r\n\tfunction VehicleSubTypeSelector($scope, serviceResponseRepository, quoteModelFactory, labelService) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({name: vm.name, value: vm.fieldValue});\r\n\t\t}\r\n\r\n\t\tvm.getOptions = function () {\r\n\t\t\tvar options;\r\n\r\n\t\t\tswitch (vm.vehicleType) {\r\n\t\t\t\tcase 'caravan':\r\n\t\t\t\t\toptions = labelService.getOptionsFor('caravanSubTypes');\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'campertrailer':\r\n\t\t\t\t\toptions = labelService.getOptionsFor('camperTrailerSubTypes');\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'goodscarryingtrailer':\r\n\t\t\t\t\toptions = labelService.getOptionsFor('goodsCarryingTrailerSubTypes');\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn options;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('vehicleSubTypeSelector', {\r\n\t\ttemplateUrl: '../ngviews/components/qbVehicleSubTypeSelector.html',\r\n\t\tcontroller: VehicleSubTypeSelector,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tname: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t\tfieldValue: '<',\r\n\t\t\tvehicleType: '<',\r\n\t\t\tlabelWildcard: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('YearMakeModelSearchController', YearMakeModelSearchController);\r\n\r\n\tYearMakeModelSearchController.$inject = [\r\n '$rootScope',\r\n\t\t'$scope', \r\n\t\t'regoSearchService', \r\n\t\t'serviceResponseRepository', \r\n\t\t'quoteModelFactory', \r\n\t\t'labelService', \r\n\t\t'storage'\r\n\t];\r\n\r\n\tfunction YearMakeModelSearchController(\r\n $rootScope,\r\n\t\t$scope, \r\n\t\tregoSearchService, \r\n\t\tserviceResponseRepository, \r\n\t\tquoteModelFactory, \r\n\t\tlabelService, \r\n\t\tstorage) {\r\n\t\tvar vm = this,\r\n\t\t\tsearchType;\r\n\r\n\t\tvm.yearInput = null;\r\n\t\tvm.makeInput = '';\r\n\t\tvm.modelInput = '';\r\n\t\tvm.yearMakeModelResult = '';\r\n\t\tvm.modelResponse = null;\r\n\t\tvm.makeResponse = null;\r\n\r\n\t\tvm.bodyStyles = [];\r\n\t\tvm.engineSizes = [],\r\n\t\t\tvm.selectedBodyStyle = '';\r\n\r\n\t\tvm.resetSearchLabel = labelService.getLabelFor('resetSearch');\r\n\r\n\t\tvm.isMakeSearchInProgress= false ;\r\n\t\tvm.isModelSearchInProgress= false ;\r\n\r\n\t\tvm.yearMakeModelResults = '';\r\n\r\n\t\tvar quoteModel = quoteModelFactory.create();\r\n\t\tvm.chosenResult = quoteModel.regoDetails ? quoteModel.regoDetails : null ;\r\n\r\n\t\t$scope.$on(\"recall-get-details\", recallGetDetails);\r\n\r\n\t\tfunction recallGetDetails() {\r\n\t\t\tif (vm.modelInput){\r\n\t\t\t\tvm.getDetails(vm.modelInput);\r\n\t\t\t}\r\n \t\t}\r\n\r\n\t\tfunction existsInArray(array, searchTerm, property) {\r\n\t\t\tfor (var i = 0, len = array.length; i < len; i++) {\r\n\t\t\t\tif (array[i][property] === searchTerm) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfunction getPastYears() {\r\n\t\t\tvar years = [];\r\n\t\t\tvar prevYear = '';\r\n\r\n\t\t\tfor (var i = 0; i < 100; i++) {\r\n\t\t\t\tprevYear = moment().subtract(i, 'year').format('Y');\r\n\t\t\t\tyears.push({label: prevYear, value: prevYear});\r\n\t\t\t}\r\n\r\n\t\t\treturn years;\r\n\t\t}\r\n\r\n\t\tfunction buildArray(data, array, property) {\r\n\r\n\t\t\tif (data.length >= 5) {\r\n\t\t\t\tdata.forEach(function (object) {\r\n\t\t\t\t\tvar item = object[property];\r\n\r\n\t\t\t\t\tif (!existsInArray(array, item, 'value')) {\r\n\t\t\t\t\t\tarray.push({\r\n\t\t\t\t\t\t\tvalue: item,\r\n\t\t\t\t\t\t\tlabel: item\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar yearsObject = getPastYears();\r\n\r\n\t\tvm.searchBy = function (type) {\r\n\t\t\treturn searchType == type;\r\n\t\t}\r\n\r\n\t\tvm.showSearch = function (type) {\r\n\t\t\tvm.chosenResult = null ;\r\n\t\t\tsearchType = type;\r\n\t\t}\r\n\r\n\t\tvm.getYears = function () {\r\n\t\t\treturn yearsObject;\r\n\t\t}\r\n\r\n\t\tvm.getPolicyStartDate = function() {\r\n\t\t\treturn storage.getItem('policy-start-date');\r\n\t\t}\r\n\r\n\t\t// On change of Year dropdown, trigger a search for the Make.\r\n\t\tvm.searchMake = function (yearInput) {\r\n\t\t\tvm.yearInput = yearInput;\r\n\r\n\t\t\tvar tempYear = null;\r\n\r\n\t\t\tif (tempYear !== vm.yearInput.value) {\r\n\t\t\t\tvm.makeInput = undefined;\r\n\t\t\t\tvm.modelInput = undefined;\r\n\t\t\t\tvm.yearMakeModelResults = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.yearInput.value !== '') {\r\n\t\t\t\tvm.isMakeSearchInProgress = true;\r\n\t\t\t\tvm.makeResponse = null;\r\n\t\t\t\tvm.modelResponse = null;\r\n\t\t\t\ttempYear = vm.yearInput.value;\r\n\r\n\t\t\t\tregoSearchService.searchMake({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\teffectiveDate: vm.getPolicyStartDate(),\r\n\t\t\t\t}\r\n\t\t\t\t,function (resp) {\r\n\t\t\t\t\tvm.isMakeSearchInProgress = false\r\n\t\t\t\t\tvm.makeResponse = resp;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// On change of the Make dropdown, trigger a search for Model\r\n\t\tvm.searchModel = function (makeInput) {\r\n\t\t\tvm.makeInput = makeInput;\r\n\r\n\t\t\tvar tempMake = null;\r\n\r\n\t\t\tif (tempMake !== vm.makeInput.value) {\r\n\t\t\t\tvm.modelInput = undefined;\r\n\t\t\t\tvm.yearMakeModelResults = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.makeInput !== '') {\r\n\t\t\t\tvm.isModelSearchInProgress = true;\r\n\t\t\t\tvm.modelResponse = null;\r\n\r\n\t\t\t\tregoSearchService.searchModel({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\tmake: vm.makeInput.code,\r\n\t\t\t\t\teffectiveDate: vm.getPolicyStartDate(),\r\n\t\t\t\t},function (resp) {\r\n\t\t\t\t\tvm.isModelSearchInProgress = false;\r\n\t\t\t\t\tvm.modelResponse = resp;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Update the current car options based on engine/body filters\r\n\t\tvm.filterOptions = function (type) {\r\n\r\n\t\t\tif (type == 'bodyStyle') {\r\n\t\t\t\tvm.engineSizes = [];\r\n\t\t\t\tvm.selectedEngineSize = undefined;\r\n\t\t\t}\r\n\r\n\t\t\t// If only the body style is selected\r\n\t\t\tif (vm.selectedBodyStyle !== undefined && vm.selectedEngineSize == undefined) {\r\n\t\t\t\tvm.filteredOptions = vm.yearMakeModelResults.filter(filterArrayByBody);\r\n\t\t\t}\r\n\r\n\t\t\t// If only the engine size is selected\r\n\t\t\tif (vm.selectedEngineSize !== undefined && vm.selectedBodyStyle == undefined) {\r\n\t\t\t\tvm.filteredOptions = vm.yearMakeModelResults.filter(filterArrayByEngine);\r\n\t\t\t}\r\n\r\n\t\t\t// If both are selected\r\n\t\t\tif (vm.selectedEngineSize !== undefined && vm.selectedBodyStyle !== undefined) {\r\n\t\t\t\tvm.filteredOptions = vm.yearMakeModelResults.filter(filterArrayByBodyAndEngine);\r\n\t\t\t}\r\n\r\n\t\t\t// Rebuild the engine size array\r\n\r\n\r\n\t\t\tbuildArray(vm.filteredOptions, vm.engineSizes, 'engineSize');\r\n\r\n\t\t}\r\n\r\n\t\t// On change of the Model dropdown, trigger a final search for the car details\r\n\t\tvm.getDetails = function (modelInput) {\r\n\t\t\tvm.yearMakeModelResults = '';\r\n\t\t\tvm.bodyStyles = [];\r\n\t\t\tvm.engineSizes = [];\r\n\t\t\tvm.selectedBodyStyle = undefined;\r\n\t\t\tvm.selectedEngineSize = undefined;\r\n\r\n\t\t\tvm.modelInput = modelInput;\r\n\r\n\t\t\tif (vm.modelInput !== undefined) {\r\n\t\t\t\tregoSearchService.searchCar({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\tmake: vm.makeInput.code,\r\n\t\t\t\t\tmodel: vm.modelInput.code,\r\n\t\t\t\t\teffectiveDate: vm.getPolicyStartDate(),\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tbuildArray(resp, vm.bodyStyles, 'bodyStyle');\r\n\t\t\t\t\tbuildArray(resp, vm.engineSizes, 'engineSize');\r\n\t\t\t\t\tvm.yearMakeModelResults = resp;\r\n\t\t\t\t\tvm.filteredOptions = resp;\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tvm.yearMakeModelResults = '';\r\n\t\t\t\tvm.chosenResult = '';\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByBodyAndEngine(item) {\r\n\t\t\treturn item.bodyStyle == vm.selectedBodyStyle.value && item.engineSize == vm.selectedEngineSize.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByBody(item) {\r\n\t\t\treturn item.bodyStyle == vm.selectedBodyStyle.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByEngine(item) {\r\n\t\t\treturn item.engineSize == vm.selectedEngineSize.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction updateRepository() {\r\n\t\t\tvm.update({name: 'regoDetails', value: vm.chosenResult});\r\n\t\t\tserviceResponseRepository.update('regoSearch', vm.chosenResult);\r\n\t\t}\r\n\r\n\t\tvm.selectOption = function () {\r\n\t\t\tvm.chosenResult = vm.yearMakeModelResults[vm.yearMakeModelOption];\r\n\t\t\tupdateRepository();\r\n\r\n\t\t\t$rootScope.$broadcast(\"bike-selected\");\r\n\t\t}\r\n\r\n\t\tvm.isResultSelected = function () {\r\n\t\t\treturn !!vm.chosenResult; // !== undefined && vm.chosenResult !== '';\r\n\t\t}\r\n\r\n\t\tvm.resetSearch = function () {\r\n\t\t\tvm.yearMakeModelOption = '';\r\n\t\t\tvm.chosenResult = null;\r\n\t\t\tvm.update({name: 'regoDetails', value: null});\r\n\t\t\tserviceResponseRepository.update('regoSearch', null);\r\n\t\t}\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('yearMakeModelSearch', {\r\n\t\ttemplateUrl: '/ngviews/components/qbYearMakeModelSearch.html',\r\n\t\tcontroller: YearMakeModelSearchController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t\thideSubFilters: '<',\r\n\t\t\tlabelWildcard: '<',\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBYearsHeld', QBYearsHeld);\r\n\r\n\tQBYearsHeld.$inject = ['$scope', 'MODULE_INFO'];\r\n\r\n\tfunction QBYearsHeld($scope, MODULE_INFO) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.fieldValue = vm.ngModel;\r\n\t\t}\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({\r\n\t\t\t\tname: name,\r\n\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.fieldValue\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Calculate age using DoB.\r\n\t\tfunction calcAge() {\r\n\r\n\t\t\treturn (moment(new Date()).diff(moment(vm.dob, 'DD/MM/YYYY'), 'years', true));\r\n\r\n\t\t}\r\n\r\n\t\t// Refine select options depending on age\r\n\t\tvm.getFilteredOptions = function () {\r\n\r\n\t\t\tvar fullOptions = vm.options.slice();\r\n\t\t\tvar age = calcAge();\r\n\r\n\t\t\tif (age > 17 && age <= 18) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 2);\r\n\t\t\t} else if (age > 18 && age <= 19) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 3);\r\n\t\t\t} else if (age > 19 && age <= 20) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 4);\r\n\t\t\t} else if (age > 20 && age <= 21) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 5);\r\n\t\t\t} else if (age > 21 && age <= 22) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 6);\r\n\t\t\t}\r\n\r\n\t\t\treturn fullOptions;\r\n\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbYearsHeld', {\r\n\t\ttemplateUrl: '../ngviews/components/qbYearsHeld.html',\r\n\t\tcontroller: QBYearsHeld,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\toptions: '<',\r\n\t\t\tname: '@',\r\n\t\t\tngModel: '<',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tdob: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n\n(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBYesNoController', QBYesNoController);\r\n\tQBYesNoController.$inject = ['$scope' /*, '$state' */ ];\r\n\r\n\tfunction QBYesNoController($scope) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.id = vm.id || vm.name;\r\n\t\t\tvm.inputName = (vm.sectionName ? (vm.sectionName + '_') : '') + vm.id;\r\n\t\t\tvm.yesFieldId = vm.inputName + '_yes';\r\n\t\t\tvm.noFieldId = vm.inputName + '_no';\r\n\r\n\t\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\t\tvm.setHierarchy({\r\n\t\t\t\t\tname: name,\r\n\t\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tvm.onValueChanged = function () {\r\n\t\t\t\tvm.update({\r\n\t\t\t\t\tname: vm.name,\r\n\t\t\t\t\tvalue: vm.fieldValue\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvm.valueChange();\r\n\t\t\t\tif (vm.commonValue !== undefined) {\r\n\t\t\t\t\t$scope.$emit('common-value-update', {\r\n\t\t\t\t\t\tname: vm.commonValue,\r\n\t\t\t\t\t\tvalue: (vm.fieldValue)\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (vm.requote !== undefined) {\r\n\t\t\t\t\t$scope.$root.$broadcast('requote', vm.requote);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.isRequired = function (condition) {\r\n\t\t\t\tif (condition) {\r\n\r\n\t\t\t\t\t// Unselect radios when no longer mandatory\r\n\t\t\t\t\tif (condition === 'false') {\r\n\t\t\t\t\t\t$('#' + vm.yesFieldId).attr('checked', false);\r\n\t\t\t\t\t\t$('#' + vm.noFieldId).attr('checked', false);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn condition === 'true';\r\n\r\n\t\t\t\t\t// Defaults to `true` if `required` attribute is not set\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbYesNo', {\r\n\t\ttemplateUrl: '/ngviews/components/qbYesNo.html',\r\n\t\tcontroller: QBYesNoController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tname: '@',\r\n\t\t\tariaLabel: '@',\r\n\t\t\trequired: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tid: '@?',\r\n\t\t\tsectionName: '<',\r\n\t\t\tfieldValue: '<',\r\n\t\t\tcommonValue: '@?',\r\n\t\t\trequote: '@?',\r\n\t\t\tvalueChange: '&',\r\n\t\t\ttableData: '<', // data in the associated table.\r\n\t\t}\r\n\t});\r\n})();\r\n\nangular.module('qbePortal.routes').provider('dynamicRouter',['$stateProvider', dynamicRouterProvider]);\r\n\r\nangular.module('qbePortal.routes')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n\r\n $urlRouterProvider.otherwise(\"/404\");\r\n\r\n $locationProvider.html5Mode({\r\n enabled: true,\r\n });\r\n}]);\r\n\r\nangular.module('qbePortal.routes.vehicle')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['vehicle']) ;\r\n}]);\r\n\r\nangular.module('qbePortal.routes.bike')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['bike']) ;\r\n}]);\r\n\r\nangular.module('qbePortal.routes.caravan')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['caravan']) ;\r\n}]);\r\n\r\nangular.module('qbePortal.routes.home')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['home']) ;\r\n}]);\r\n\r\nangular.module('qbePortal.routes.ctp')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['ctp']) ;\r\n}]);\r\n \r\nangular.module('qbePortal.routes.payments')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['payments']) ;\r\n}]);\n(function (app) {\r\n\tvar routes = app.routes = {};\r\n\r\n\troutes.common = {\r\n\t\terror: {\r\n\t\t\tname: 'error',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'ErrorController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tdecline: {\r\n\t\t\tname: 'decline',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'DeclineController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\treferral: {\r\n\t\t\tname: 'referral',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'DeclineController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tembargo: {\r\n\t\t\tname: 'embargo',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'DeclineController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tcybersourcePaymentForm: {\r\n\t\t\tname: 'cybersourcePaymentForm',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'CybersourcePaymentFormController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tcybersourceCallback: {\r\n\t\t\tname: 'cybersourceCallback',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'CybersourceCallbackController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tpaypalCallback: {\r\n\t\t\tname: 'paypalCallback',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'PaypalCallbackController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tpolicyStartDate: {\r\n\t\t\tname: 'policyStartDate',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\troutes.vehicle = {\r\n\t\thome: {\r\n\t\t\tname: 'vehicle',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'vehicle.vehicle',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.drivers',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.quote',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.contact',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.payment',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PaymentController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.done',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.policy-start-date',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\troutes.ctp = {\r\n\t\thome: {\r\n\t\t\tname: 'ctp',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\tname: 'ctp.ctp',\r\n\t\t\tconfig: {\r\n\t\t\t\tviews: {\r\n\t\t\t\t\t'@': {\r\n\t\t\t\t\t\tcontroller: 'ctpFormController',\r\n\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}]\r\n\t};\r\n\r\n\troutes.bike = {\r\n\t\thome: {\r\n\t\t\tname: 'bike',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'bike.bike',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.riders',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.quote',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.contact',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.payment',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PaymentController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.done',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.policy-start-date',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\troutes.home = {\r\n\t\thome: {\r\n\t\t\tname: 'home',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'home.estimate',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.property',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.building',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcondition: function () {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.covers',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.details',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.quote',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.contact',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.payment',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PaymentController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.done',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.policy-start-date',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\r\n\troutes.caravan = {\r\n\t\thome: {\r\n\t\t\tname: 'caravan',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'caravan.caravan',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.drivers',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.quote',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.contact',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.payment',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PaymentController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.done',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.policy-start-date',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\troutes.payments = {\r\n\t\thome: {\r\n\t\t\tname: 'payments',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'payments.payments',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'paymentsFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'payments.complete',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'paymentsFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n})(window);\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('SummarySection', SummarySection);\r\n\r\n\tSummarySection.$inject = ['$scope', '$state', 'dynamicRouter', '$window','$filter'\r\n\t\t, 'quoteModelFactory' // labelService is not directly referenced but is required before initialisation\r\n\t\t, 'userInputRepository'\r\n\t\t, 'serviceResponseRepository'\r\n\t\t, 'Util'\r\n\t\t, 'labelService'\r\n\t];\r\n\r\n\tfunction SummarySection($scope, $state, dynamicRouter, window,$filter, quoteModelFactory, userInputRepository, serviceResponseRepository, Util, labelService) {\r\n\t\tvar vm = this;\r\n\t\tvar children = {}, sectionData = {};\r\n\r\n\t\t//dispatch label event as this summary view is outside the form controller\r\n\t\tUtil.dispatchCustomEvent('register-labels');\r\n\t\tvm.labelService = labelService;\r\n\r\n\t\tvm.quoteModel = quoteModelFactory.create();\r\n\r\n\t\t$scope.$root.$on('selected-quote-changed', function () {\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\t\t});\r\n\r\n\t\t$scope.HTML_ID = $scope.name;\r\n\t\t$scope.hierarchyList = [$scope.name];\r\n\r\n\t\tvm.sectionName = $scope.name;\r\n\r\n\t\tvm.summary = $scope.summaryModel\r\n\t\tconsole.log('summary');\r\n\t\tconsole.log(vm.summary);\r\n\t\tvm.getLabel = function (labelKey) {\r\n\t\t\tvar excessLabel = vm.labelService.getLabelForRemoteOption('driverExcess', labelKey);\r\n\t\t\treturn (excessLabel) ? excessLabel.label : '';\r\n\t\t};\r\n\r\n\t\tvm.getRiderExcessLabel = function (labelKey) {\r\n\t\t\tvar excessLabel = vm.labelService.getLabelForRemoteOption('riderExcess', labelKey);\r\n\t\t\treturn (excessLabel) ? excessLabel.label : '';\r\n\t\t};\r\n\r\n\t\tvm.getWallConstructionLabel = function (labelKey) {\r\n\t\t\tvar wallConstruction = this.getGlobalOptionLabel('wallsMadeOf', labelKey);\r\n\t\t\treturn (wallConstruction) ? wallConstruction : '';\r\n\t\t};\r\n\r\n\t\tvm.getLabelForRemoteOption = function (labelSet, labelKey) {\r\n\t\t\tvar label = vm.labelService.getLabelForRemoteOption(labelSet, labelKey);\r\n\t\t\treturn (label) ? label.label : '';\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOptionsFor = function (optionType) {\r\n\t\t\treturn labelService.getGlobalOptionsFor(optionType);\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOptionLabel = function (optionType, optionValue) {\r\n\t\t\tvar optionKeyValues = this.getGlobalOptionsFor(optionType);\r\n\t\t\tconsole.log(optionValue);\r\n\t\t\tvar label = null;\r\n\t\t\tvar values=$filter('filter')(optionKeyValues, {value:optionValue}); \r\n\t\t\tconsole.log(values);\r\n\t\t\tif (values && values.length>0) {\r\n\t\t\t\tlabel=values[0].label;\t\t\t\t\r\n\t\t\t}\r\n\t\t\treturn label;\r\n\t\t};\r\n\r\n\t\tvm.getGlobalOption = function (key, option) {\r\n\t\t\toption = option.trim();\r\n\t\t\treturn labelService.getGlobalOption(key, option);\r\n\t\t};\r\n\r\n\t\tvm.getLiability = function () {\r\n\t\t\tvar liability = vm.getGlobalOption('content', 'legal_liability');\r\n\t\t\treturn (liability) ? liability.content : '';\r\n\t\t};\r\n\r\n\t\tvm.moveToState = function (step) {\r\n\t\t\tconsole.log('go', step);\r\n\t\t\t$state.go(dynamicRouter.getState(step));\r\n\t\t};\r\n\r\n\t\tvm.moveToHomeState = function (step) {\r\n\t\t\tconsole.log('go', step);\r\n\t\t\tif(vm.summary.annualCoverType.coverType==='contents_only' && step>2)\r\n\t\t\t\tstep--;\r\n\t\t\tvm.moveToState(step);\r\n\t\t};\r\n\r\n\t\tvm.getStateName = function(address){\r\n\t\t\treturn address!=null && address.state && address.state!=null ?address.state.replace(/AU_/,''):'';\r\n\t\t}\r\n\r\n\t\tvm.generateAddressText = function(address){\r\n\t\t\t\r\n\t\t\tvar addressText='';\r\n\t\t\taddressText = address.addressLine1 + \" \" +address.city+\", \"+ vm.getStateName(address)+\", \"\r\n\t\t\t\t+address.postalCode;\r\n\t\t\treturn addressText;\r\n\t\t}\r\n\r\n\t\tvm.liability = vm.getLiability();\r\n\r\n\t\tvm.getYearHomeBuilt = function(yearValue){\r\n\t\t\tvar yearHomeBuiltOptions = this.getOptionsForBuildingYearBuilt('yearHomeBuilt');\r\n\t\t\tif(yearHomeBuiltOptions!=null && vm.summary.homeForm && vm.summary.homeForm.tellUsAboutTheBuilding.yearHomeBuilt\r\n\t\t\t\t&& vm.summary.homeForm.tellUsAboutTheBuilding.yearHomeBuilt){\r\n\t\t\t\tvar filteredResult = $filter('filter')(yearHomeBuiltOptions,{value:vm.summary.homeForm.tellUsAboutTheBuilding.yearHomeBuilt});\r\n\t\t\t\tif(filteredResult.length>0){\r\n\t\t\t\t\treturn filteredResult[0].label;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvm.getOptionsForBuildingYearBuilt = function (fieldName) {\r\n\t\t\tvar options = vm.getGlobalOptionsFor(fieldName);\r\n\t\t\tfor (var i = 2000; i <= (new Date()).getFullYear(); i++) {\r\n\t\t\t\toptions.unshift({\r\n\t\t\t\t\tlabel: String(i),\r\n\t\t\t\t\tvalue: String(i)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn options;\t\t\r\n\t\t}\r\n\r\n\t\tvm.includeFloodCover = function(){\t\t\t\r\n\t\t\tvar quickQuoteResponse = serviceResponseRepository.getLastResponseFrom('quote');\r\n\t\t\tif(quickQuoteResponse && quickQuoteResponse!=null){\r\n\r\n\t\t\t\treturn quickQuoteResponse.includeFloodCover!=undefined && quickQuoteResponse.includeFloodCover==true;\r\n\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').directive('qbSummarySection', [function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'EA',\r\n\t\t\tcontroller: SummarySection,\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\ttransclude: true,\r\n\t\t\tscope: {\r\n\t\t\t\tinit: '&',\r\n\t\t\t\tsummaryModel: '='\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs, ctrl, transclude) {\r\n\t\t\t\tif (scope.setHierarchy !== undefined)\r\n\t\t\t\t\thierarchyDecorator.attach(scope, {element: element, name: scope.name});\r\n\r\n\t\t\t\ttransclude(scope, function (clone) {\r\n\t\t\t\t\telement.append(clone);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\tangular.module('qbePortal').directive('qbTabs',\r\n\t\tfunction (quoteOptions, userInputRepository) {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbTabs.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\ttransclude: true,\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tselectedTab: '<',\r\n\t\t\t\t\tsetSelectedTab: '&',\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs) {\r\n\t\t\t\t\tscope.vm = {};\r\n\r\n\t\t\t\t\t$(element).on('changeTab.tabs', function (event, $activeTabId) {\r\n\t\t\t\t\t\tvar $tab = $($activeTabId);\r\n\t\t\t\t\t\tvar tabId = $tab.attr('tab-id');\r\n\t\t\t\t\t\tscope.setSelectedTab({\r\n\t\t\t\t\t\t\t'tabId': tabId\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tfunction initTabs(selectedTab) {\r\n\t\t\t\t\t\t$(element).find('[tab-id=' + selectedTab + ']').addClass('is-active');\r\n\t\t\t\t\t\tQBE.tabs.init();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinitTabs(scope.selectedTab);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t);\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbThankYou',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\ttemplateUrl: '../ngviews/directives/qbThankYou.html',\r\n\t\t\t\trestrict: 'E',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\tthankYou: \"=\",\r\n\t\t\t\t\tisEligible: \"=\",\r\n\t\t\t\t\tisConfirmed: '=',\r\n\t\t\t\t\tcoreData: '=',\r\n\t\t\t\t\tshowThankYou: '=',\r\n\t\t\t\t\tpromoData: '=',\r\n\t\t \t\ttextDisplay:'=',\r\n\t\t \t\tctpStepTotal:'=',\r\n\t\t \t\tctpStepNum:'=',\r\n\t\t \t\tctpCompleted:'='\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t},\r\n\t\t\t transclude: true,\t\t\t\t\t\t\t\r\n\t\t\t\tlink: function (scope, element, attrs) {\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbTooltip',\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tscope: {\r\n\t\t\t\t\ttooltip: '@'\r\n\t\t\t\t},\r\n\t\t\t\tlink: function (scope, element, attrs) {\r\n\t\t\t\t\telement.attr('title', scope.tooltip);\r\n\t\t\t\t\t$('.js-tooltip').ddTooltip();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t});\r\n\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbValidBsb', ['guideWireService', function (guideWireService) {\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: function (scope, element, attrs, ngModel) {\r\n\t\t\t\tngModel.gwService = guideWireService;\r\n\r\n\t\t\t\tngModel.$setValidity('qbValidBsb', true);\r\n\r\n\t\t\t\telement.bind('keyup', function (e) {\r\n\t\t\t\t\tif (!ngModel || typeof(element.val()) != 'string') return;\r\n\r\n\t\t\t\t\t// var keyProperty = scope.$eval(attrs.wcUnique);\r\n\t\t\t\t\tvar currentValue = element.val();\r\n\t\t\t\t\tif (currentValue && currentValue != ''\r\n\t\t\t\t\t\t&& currentValue.length >= 6\r\n\t\t\t\t\t\t&& Number.isNumeric(currentValue)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tngModel.gwService.isBSBValid(currentValue)\r\n\t\t\t\t\t\t\t.then(function (bsbResult) {\r\n\t\t\t\t\t\t\t\tvar valid = bsbResult.data ?\r\n\t\t\t\t\t\t\t\t\t( bsbResult.data.bankName != undefined\r\n\t\t\t\t\t\t\t\t\t&& bsbResult.data.bankName != 'Unknown' )\r\n\t\t\t\t\t\t\t\t\t: false;\r\n\t\t\t\t\t\t\t\tngModel.$setValidity('qbValidBsb', valid);\r\n\t\t\t\t\t\t\t}).catch(function () {\r\n\t\t\t\t\t\t\tngModel.$setValidity('qbValidBsb', false);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tngModel.$setValidity('qbValidBsb', true);\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t};\r\n\t}]);\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('qbValidExpiryDate', function () {\r\n\t\tvar EXPIRY_DATE_REGEXP = /^([0-9]{2})\\/([0-9]{2})$/;\r\n\r\n\t\treturn {\r\n\t\t\trequire: 'ngModel',\r\n\t\t\trestrict: '',\r\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\r\n\t\t\t\t// only apply the validator if ngModel is present and Angular has added the email validator\r\n\t\t\t\tif (ctrl) {\r\n\r\n\t\t\t\t\t// this will overwrite the default Angular email validator\r\n\t\t\t\t\tctrl.$validators.invalidDate = function (modelValue) {\r\n\t\t\t\t\t\treturn ctrl.$isEmpty(modelValue)\r\n\t\t\t\t\t\t\t|| (EXPIRY_DATE_REGEXP.test(ctrl.$viewValue) && validDate(ctrl.$viewValue));\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction validDate(modelValue) {\r\n\t\t\t\t\tvar monthValue = parseInt(modelValue.match(EXPIRY_DATE_REGEXP)[1]),\r\n\t\t\t\t\t\tyearValue = parseInt(modelValue.match(EXPIRY_DATE_REGEXP)[2]);\r\n\r\n\t\t\t\t\treturn monthValue > 0 && monthValue <= 12 && validYearAndMonth(monthValue, yearValue);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction validYearAndMonth(monthValue, yearValue) {\r\n\t\t\t\t\tvar yearMonthConcat = yearValue * 100 + monthValue;\r\n\t\t\t\t\treturn parseInt(moment().format('YYMM')) <= yearMonthConcat;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n})();\r\n","/*\r\n * angular-ui-bootstrap\r\n * http://angular-ui.github.io/bootstrap/\r\n\r\n * Version: 1.3.3 - 2016-05-22\r\n * License: MIT\r\n */\r\nangular.module(\"ui.bootstrap\", [\"ui.bootstrap.typeahead\", \"ui.bootstrap.debounce\", \"ui.bootstrap.position\"]);\r\nangular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap.position'])\r\n\r\n/**\r\n * A helper service that can parse typeahead's syntax (string provided by users)\r\n * Extracted to a separate service for ease of unit testing\r\n */\r\n\t.factory('uibTypeaheadParser', ['$parse', function ($parse) {\r\n\t\t// 00000111000000000000022200000000000000003333333333333330000000000044000\r\n\t\tvar TYPEAHEAD_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+([\\s\\S]+?)$/;\r\n\t\treturn {\r\n\t\t\tparse: function (input) {\r\n\t\t\t\tvar match = input.match(TYPEAHEAD_REGEXP);\r\n\t\t\t\tif (!match) {\r\n\t\t\t\t\tthrow new Error(\r\n\t\t\t\t\t\t'Expected typeahead specification in form of \"_modelValue_ (as _label_)? for _item_ in _collection_\"' +\r\n\t\t\t\t\t\t' but got \"' + input + '\".');\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\titemName: match[3],\r\n\t\t\t\t\tsource: $parse(match[4]),\r\n\t\t\t\t\tviewMapper: $parse(match[2] || match[1]),\r\n\t\t\t\t\tmodelMapper: $parse(match[1])\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\r\n\t.controller('UibTypeaheadController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$q', '$timeout', '$document', '$window', '$rootScope', '$$debounce', '$uibPosition', 'uibTypeaheadParser',\r\n\t\tfunction (originalScope, element, attrs, $compile, $parse, $q, $timeout, $document, $window, $rootScope, $$debounce, $position, typeaheadParser) {\r\n\t\t\tvar HOT_KEYS = [9, 13, 27, 38, 40];\r\n\t\t\tvar eventDebounceTime = 200;\r\n\t\t\tvar modelCtrl, ngModelOptions;\r\n\t\t\t//SUPPORTED ATTRIBUTES (OPTIONS)\r\n\r\n\t\t\t//minimal no of characters that needs to be entered before typeahead kicks-in\r\n\t\t\tvar minLength = originalScope.$eval(attrs.typeaheadMinLength);\r\n\t\t\tif (!minLength && minLength !== 0) {\r\n\t\t\t\tminLength = 1;\r\n\t\t\t}\r\n\r\n\t\t\toriginalScope.$watch(attrs.typeaheadMinLength, function (newVal) {\r\n\t\t\t\tminLength = !newVal && newVal !== 0 ? 1 : newVal;\r\n\t\t\t});\r\n\r\n\t\t\t//minimal wait time after last character typed before typeahead kicks-in\r\n\t\t\tvar waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;\r\n\r\n\t\t\t//should it restrict model values to the ones selected from the popup only?\r\n\t\t\tvar isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;\r\n\t\t\toriginalScope.$watch(attrs.typeaheadEditable, function (newVal) {\r\n\t\t\t\tisEditable = newVal !== false;\r\n\t\t\t});\r\n\r\n\t\t\t//binding to a variable that indicates if matches are being retrieved asynchronously\r\n\t\t\tvar isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;\r\n\r\n\t\t\t//a function to determine if an event should cause selection\r\n\t\t\tvar isSelectEvent = attrs.typeaheadShouldSelect ? $parse(attrs.typeaheadShouldSelect) : function (scope, vals) {\r\n\t\t\t\tvar evt = vals.$event;\r\n\t\t\t\treturn evt.which === 13 || evt.which === 9;\r\n\t\t\t};\r\n\r\n\t\t\t//a callback executed when a match is selected\r\n\t\t\tvar onSelectCallback = $parse(attrs.typeaheadOnSelect);\r\n\r\n\t\t\t//should it select highlighted popup value when losing focus?\r\n\t\t\tvar isSelectOnBlur = angular.isDefined(attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false;\r\n\r\n\t\t\t//binding to a variable that indicates if there were no results after the query is completed\r\n\t\t\tvar isNoResultsSetter = $parse(attrs.typeaheadNoResults).assign || angular.noop;\r\n\r\n\t\t\tvar inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;\r\n\r\n\t\t\tvar appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;\r\n\r\n\t\t\tvar appendTo = attrs.typeaheadAppendTo ?\r\n\t\t\t\toriginalScope.$eval(attrs.typeaheadAppendTo) : null;\r\n\r\n\t\t\tvar focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;\r\n\r\n\t\t\t//If input matches an item of the list exactly, select it automatically\r\n\t\t\tvar selectOnExact = attrs.typeaheadSelectOnExact ? originalScope.$eval(attrs.typeaheadSelectOnExact) : false;\r\n\r\n\t\t\t//binding to a variable that indicates if dropdown is open\r\n\t\t\tvar isOpenSetter = $parse(attrs.typeaheadIsOpen).assign || angular.noop;\r\n\r\n\t\t\tvar showHint = originalScope.$eval(attrs.typeaheadShowHint) || false;\r\n\r\n\t\t\t//INTERNAL VARIABLES\r\n\r\n\t\t\t//model setter executed upon match selection\r\n\t\t\tvar parsedModel = $parse(attrs.ngModel);\r\n\t\t\tvar invokeModelSetter = $parse(attrs.ngModel + '($$$p)');\r\n\t\t\tvar $setModelValue = function (scope, newValue) {\r\n\t\t\t\tif (angular.isFunction(parsedModel(originalScope)) &&\r\n\t\t\t\t\tngModelOptions && ngModelOptions.$options && ngModelOptions.$options.getterSetter) {\r\n\t\t\t\t\treturn invokeModelSetter(scope, {$$$p: newValue});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn parsedModel.assign(scope, newValue);\r\n\t\t\t};\r\n\r\n\t\t\t//expressions used by typeahead\r\n\t\t\tvar parserResult = typeaheadParser.parse(attrs.uibTypeahead);\r\n\r\n\t\t\tvar hasFocus;\r\n\r\n\t\t\t//Used to avoid bug in iOS webview where iOS keyboard does not fire\r\n\t\t\t//mousedown & mouseup events\r\n\t\t\t//Issue #3699\r\n\t\t\tvar selected;\r\n\r\n\t\t\t//create a child scope for the typeahead directive so we are not polluting original scope\r\n\t\t\t//with typeahead-specific data (matches, query etc.)\r\n\t\t\tvar scope = originalScope.$new();\r\n\t\t\tvar offDestroy = originalScope.$on('$destroy', function () {\r\n\t\t\t\tscope.$destroy();\r\n\t\t\t});\r\n\t\t\tscope.$on('$destroy', offDestroy);\r\n\r\n\t\t\t// WAI-ARIA\r\n\t\t\tvar popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\r\n\t\t\telement.attr({\r\n\t\t\t\t'aria-autocomplete': 'list',\r\n\t\t\t\t'aria-expanded': false,\r\n\t\t\t\t'aria-owns': popupId\r\n\t\t\t});\r\n\r\n\t\t\tvar inputsContainer, hintInputElem;\r\n\t\t\t//add read-only input to show hint\r\n\t\t\tif (showHint) {\r\n\t\t\t\tinputsContainer = angular.element('
');\r\n\t\t\t\tinputsContainer.css('position', 'relative');\r\n\t\t\t\telement.after(inputsContainer);\r\n\t\t\t\thintInputElem = element.clone();\r\n\t\t\t\thintInputElem.attr('placeholder', '');\r\n\t\t\t\thintInputElem.attr('tabindex', '-1');\r\n\t\t\t\thintInputElem.val('');\r\n\t\t\t\thintInputElem.css({\r\n\t\t\t\t\t'position': 'absolute',\r\n\t\t\t\t\t'top': '0px',\r\n\t\t\t\t\t'left': '0px',\r\n\t\t\t\t\t'border-color': 'transparent',\r\n\t\t\t\t\t'box-shadow': 'none',\r\n\t\t\t\t\t'opacity': 1,\r\n\t\t\t\t\t'background': 'none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255)',\r\n\t\t\t\t\t'color': '#999'\r\n\t\t\t\t});\r\n\t\t\t\telement.css({\r\n\t\t\t\t\t'position': 'relative',\r\n\t\t\t\t\t'vertical-align': 'top',\r\n\t\t\t\t\t'background-color': 'transparent'\r\n\t\t\t\t});\r\n\t\t\t\tinputsContainer.append(hintInputElem);\r\n\t\t\t\thintInputElem.after(element);\r\n\t\t\t}\r\n\r\n\t\t\t//pop-up element used to display matches\r\n\t\t\tvar popUpEl = angular.element('
');\r\n\t\t\tpopUpEl.attr({\r\n\t\t\t\tid: popupId,\r\n\t\t\t\tmatches: 'matches',\r\n\t\t\t\tactive: 'activeIdx',\r\n\t\t\t\tselect: 'select(activeIdx, evt)',\r\n\t\t\t\t'move-in-progress': 'moveInProgress',\r\n\t\t\t\tquery: 'query',\r\n\t\t\t\tposition: 'position',\r\n\t\t\t\t'assign-is-open': 'assignIsOpen(isOpen)',\r\n\t\t\t\tdebounce: 'debounceUpdate'\r\n\t\t\t});\r\n\t\t\t//custom item template\r\n\t\t\tif (angular.isDefined(attrs.typeaheadTemplateUrl)) {\r\n\t\t\t\tpopUpEl.attr('template-url', attrs.typeaheadTemplateUrl);\r\n\t\t\t}\r\n\r\n\t\t\tif (angular.isDefined(attrs.typeaheadPopupTemplateUrl)) {\r\n\t\t\t\tpopUpEl.attr('popup-template-url', attrs.typeaheadPopupTemplateUrl);\r\n\t\t\t}\r\n\r\n\t\t\tvar resetHint = function () {\r\n\t\t\t\tif (showHint) {\r\n\t\t\t\t\thintInputElem.val('');\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tvar resetMatches = function () {\r\n\t\t\t\tscope.matches = [];\r\n\t\t\t\tscope.activeIdx = -1;\r\n\t\t\t\telement.attr('aria-expanded', false);\r\n\t\t\t\tresetHint();\r\n\t\t\t};\r\n\r\n\t\t\tvar getMatchId = function (index) {\r\n\t\t\t\treturn popupId + '-option-' + index;\r\n\t\t\t};\r\n\r\n\t\t\t// Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.\r\n\t\t\t// This attribute is added or removed automatically when the `activeIdx` changes.\r\n\t\t\tscope.$watch('activeIdx', function (index) {\r\n\t\t\t\tif (index < 0) {\r\n\t\t\t\t\telement.removeAttr('aria-activedescendant');\r\n\t\t\t\t} else {\r\n\t\t\t\t\telement.attr('aria-activedescendant', getMatchId(index));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvar inputIsExactMatch = function (inputValue, index) {\r\n\t\t\t\tif (scope.matches.length > index && inputValue) {\r\n\t\t\t\t\treturn inputValue.toUpperCase() === scope.matches[index].label.toUpperCase();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\r\n\t\t\tvar getMatchesAsync = function (inputValue, evt) {\r\n\t\t\t\tvar locals = {$viewValue: inputValue};\r\n\t\t\t\tisLoadingSetter(originalScope, true);\r\n\t\t\t\tisNoResultsSetter(originalScope, false);\r\n\t\t\t\t$q.when(parserResult.source(originalScope, locals)).then(function (matches) {\r\n\t\t\t\t\t//it might happen that several async queries were in progress if a user were typing fast\r\n\t\t\t\t\t//but we are interested only in responses that correspond to the current view value\r\n\t\t\t\t\tvar onCurrentRequest = inputValue === modelCtrl.$viewValue;\r\n\t\t\t\t\tif (onCurrentRequest && hasFocus) {\r\n\t\t\t\t\t\tif (matches && matches.length > 0) {\r\n\t\t\t\t\t\t\tscope.activeIdx = focusFirst ? 0 : -1;\r\n\t\t\t\t\t\t\tisNoResultsSetter(originalScope, false);\r\n\t\t\t\t\t\t\tscope.matches.length = 0;\r\n\r\n\t\t\t\t\t\t\t//transform labels\r\n\t\t\t\t\t\t\tfor (var i = 0; i < matches.length; i++) {\r\n\t\t\t\t\t\t\t\tlocals[parserResult.itemName] = matches[i];\r\n\t\t\t\t\t\t\t\tscope.matches.push({\r\n\t\t\t\t\t\t\t\t\tid: getMatchId(i),\r\n\t\t\t\t\t\t\t\t\tlabel: parserResult.viewMapper(scope, locals),\r\n\t\t\t\t\t\t\t\t\tmodel: matches[i]\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tscope.query = inputValue;\r\n\t\t\t\t\t\t\t//position pop-up with matches - we need to re-calculate its position each time we are opening a window\r\n\t\t\t\t\t\t\t//with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page\r\n\t\t\t\t\t\t\t//due to other elements being rendered\r\n\t\t\t\t\t\t\trecalculatePosition();\r\n\r\n\t\t\t\t\t\t\telement.attr('aria-expanded', true);\r\n\r\n\t\t\t\t\t\t\t//Select the single remaining option if user input matches\r\n\t\t\t\t\t\t\tif (selectOnExact && scope.matches.length === 1 && inputIsExactMatch(inputValue, 0)) {\r\n\t\t\t\t\t\t\t\tif (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\r\n\t\t\t\t\t\t\t\t\t$$debounce(function () {\r\n\t\t\t\t\t\t\t\t\t\tscope.select(0, evt);\r\n\t\t\t\t\t\t\t\t\t}, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tscope.select(0, evt);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (showHint) {\r\n\t\t\t\t\t\t\t\tvar firstLabel = scope.matches[0].label;\r\n\t\t\t\t\t\t\t\tif (angular.isString(inputValue) &&\r\n\t\t\t\t\t\t\t\t\tinputValue.length > 0 &&\r\n\t\t\t\t\t\t\t\t\tfirstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\thintInputElem.val(inputValue + firstLabel.slice(inputValue.length));\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\thintInputElem.val('');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tresetMatches();\r\n\t\t\t\t\t\t\tisNoResultsSetter(originalScope, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (onCurrentRequest) {\r\n\t\t\t\t\t\tisLoadingSetter(originalScope, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, function () {\r\n\t\t\t\t\tresetMatches();\r\n\t\t\t\t\tisLoadingSetter(originalScope, false);\r\n\t\t\t\t\tisNoResultsSetter(originalScope, true);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\t// bind events only if appendToBody params exist - performance feature\r\n\t\t\tif (appendToBody) {\r\n\t\t\t\tangular.element($window).on('resize', fireRecalculating);\r\n\t\t\t\t$document.find('body').on('scroll', fireRecalculating);\r\n\t\t\t}\r\n\r\n\t\t\t// Declare the debounced function outside recalculating for\r\n\t\t\t// proper debouncing\r\n\t\t\tvar debouncedRecalculate = $$debounce(function () {\r\n\t\t\t\t// if popup is visible\r\n\t\t\t\tif (scope.matches.length) {\r\n\t\t\t\t\trecalculatePosition();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tscope.moveInProgress = false;\r\n\t\t\t}, eventDebounceTime);\r\n\r\n\t\t\t// Default progress type\r\n\t\t\tscope.moveInProgress = false;\r\n\r\n\t\t\tfunction fireRecalculating() {\r\n\t\t\t\tif (!scope.moveInProgress) {\r\n\t\t\t\t\tscope.moveInProgress = true;\r\n\t\t\t\t\tscope.$digest();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdebouncedRecalculate();\r\n\t\t\t}\r\n\r\n\t\t\t// recalculate actual position and set new values to scope\r\n\t\t\t// after digest loop is popup in right position\r\n\t\t\tfunction recalculatePosition() {\r\n\t\t\t\tscope.position = appendToBody ? $position.offset(element) : $position.position(element);\r\n\t\t\t\tscope.position.top += element.prop('offsetHeight');\r\n\t\t\t}\r\n\r\n\t\t\t//we need to propagate user's query so we can higlight matches\r\n\t\t\tscope.query = undefined;\r\n\r\n\t\t\t//Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later\r\n\t\t\tvar timeoutPromise;\r\n\r\n\t\t\tvar scheduleSearchWithTimeout = function (inputValue) {\r\n\t\t\t\ttimeoutPromise = $timeout(function () {\r\n\t\t\t\t\tgetMatchesAsync(inputValue);\r\n\t\t\t\t}, waitTime);\r\n\t\t\t};\r\n\r\n\t\t\tvar cancelPreviousTimeout = function () {\r\n\t\t\t\tif (timeoutPromise) {\r\n\t\t\t\t\t$timeout.cancel(timeoutPromise);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tresetMatches();\r\n\r\n\t\t\tscope.assignIsOpen = function (isOpen) {\r\n\t\t\t\tisOpenSetter(originalScope, isOpen);\r\n\t\t\t};\r\n\r\n\t\t\tscope.select = function (activeIdx, evt) {\r\n\t\t\t\t//called from within the $digest() cycle\r\n\t\t\t\tvar locals = {};\r\n\t\t\t\tvar model, item;\r\n\r\n\t\t\t\tselected = true;\r\n\t\t\t\tlocals[parserResult.itemName] = item = scope.matches[activeIdx].model;\r\n\t\t\t\tmodel = parserResult.modelMapper(originalScope, locals);\r\n\t\t\t\t$setModelValue(originalScope, model);\r\n\t\t\t\tmodelCtrl.$setValidity('editable', true);\r\n\t\t\t\tmodelCtrl.$setValidity('parse', true);\r\n\r\n\t\t\t\tonSelectCallback(originalScope, {\r\n\t\t\t\t\t$item: item,\r\n\t\t\t\t\t$model: model,\r\n\t\t\t\t\t$label: parserResult.viewMapper(originalScope, locals),\r\n\t\t\t\t\t$event: evt\r\n\t\t\t\t});\r\n\r\n\t\t\t\tresetMatches();\r\n\r\n\t\t\t\t//return focus to the input element if a match was selected via a mouse click event\r\n\t\t\t\t// use timeout to avoid $rootScope:inprog error\r\n\t\t\t\tif (scope.$eval(attrs.typeaheadFocusOnSelect) !== false) {\r\n\t\t\t\t\t$timeout(function () {\r\n\t\t\t\t\t\telement[0].focus();\r\n\t\t\t\t\t}, 0, false);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t//bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)\r\n\t\t\telement.on('keydown', function (evt) {\r\n\t\t\t\t//typeahead is open and an \"interesting\" key was pressed\r\n\t\t\t\tif (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar shouldSelect = isSelectEvent(originalScope, {$event: evt});\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * if there's nothing selected (i.e. focusFirst) and enter or tab is hit\r\n\t\t\t\t * or\r\n\t\t\t\t * shift + tab is pressed to bring focus to the previous element\r\n\t\t\t\t * then clear the results\r\n\t\t\t\t */\r\n\t\t\t\tif (scope.activeIdx === -1 && shouldSelect || evt.which === 9 && !!evt.shiftKey) {\r\n\t\t\t\t\tresetMatches();\r\n\t\t\t\t\tscope.$digest();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tvar target;\r\n\t\t\t\tswitch (evt.which) {\r\n\t\t\t\t\tcase 27: // escape\r\n\t\t\t\t\t\tevt.stopPropagation();\r\n\r\n\t\t\t\t\t\tresetMatches();\r\n\t\t\t\t\t\toriginalScope.$digest();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 38: // up arrow\r\n\t\t\t\t\t\tscope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;\r\n\t\t\t\t\t\tscope.$digest();\r\n\t\t\t\t\t\ttarget = popUpEl.find('li')[scope.activeIdx];\r\n\t\t\t\t\t\ttarget.parentNode.scrollTop = target.offsetTop;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 40: // down arrow\r\n\t\t\t\t\t\tscope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;\r\n\t\t\t\t\t\tscope.$digest();\r\n\t\t\t\t\t\ttarget = popUpEl.find('li')[scope.activeIdx];\r\n\t\t\t\t\t\ttarget.parentNode.scrollTop = target.offsetTop;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif (shouldSelect) {\r\n\t\t\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\t\t\tif (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\r\n\t\t\t\t\t\t\t\t\t$$debounce(function () {\r\n\t\t\t\t\t\t\t\t\t\tscope.select(scope.activeIdx, evt);\r\n\t\t\t\t\t\t\t\t\t}, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tscope.select(scope.activeIdx, evt);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.bind('focus', function (evt) {\r\n\t\t\t\thasFocus = true;\r\n\t\t\t\tif (minLength === 0 && !modelCtrl.$viewValue) {\r\n\t\t\t\t\t$timeout(function () {\r\n\t\t\t\t\t\tgetMatchesAsync(modelCtrl.$viewValue, evt);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.bind('blur', function (evt) {\r\n\t\t\t\tif (isSelectOnBlur && scope.matches.length && scope.activeIdx !== -1 && !selected) {\r\n\t\t\t\t\tselected = true;\r\n\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\tif (angular.isObject(scope.debounceUpdate) && angular.isNumber(scope.debounceUpdate.blur)) {\r\n\t\t\t\t\t\t\t$$debounce(function () {\r\n\t\t\t\t\t\t\t\tscope.select(scope.activeIdx, evt);\r\n\t\t\t\t\t\t\t}, scope.debounceUpdate.blur);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tscope.select(scope.activeIdx, evt);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (!isEditable && modelCtrl.$error.editable) {\r\n\t\t\t\t\tmodelCtrl.$setViewValue();\r\n\t\t\t\t\t// Reset validity as we are clearing\r\n\t\t\t\t\tmodelCtrl.$setValidity('editable', true);\r\n\t\t\t\t\tmodelCtrl.$setValidity('parse', true);\r\n\t\t\t\t\telement.val('');\r\n\t\t\t\t}\r\n\t\t\t\thasFocus = false;\r\n\t\t\t\tselected = false;\r\n\t\t\t});\r\n\r\n\t\t\t// Keep reference to click handler to unbind it.\r\n\t\t\tvar dismissClickHandler = function (evt) {\r\n\t\t\t\t// Issue #3973\r\n\t\t\t\t// Firefox treats right click as a click on document\r\n\t\t\t\tif (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {\r\n\t\t\t\t\tresetMatches();\r\n\t\t\t\t\tif (!$rootScope.$$phase) {\r\n\t\t\t\t\t\toriginalScope.$digest();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t$document.on('click', dismissClickHandler);\r\n\r\n\t\t\toriginalScope.$on('$destroy', function () {\r\n\t\t\t\t$document.off('click', dismissClickHandler);\r\n\t\t\t\tif (appendToBody || appendTo) {\r\n\t\t\t\t\t$popup.remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (appendToBody) {\r\n\t\t\t\t\tangular.element($window).off('resize', fireRecalculating);\r\n\t\t\t\t\t$document.find('body').off('scroll', fireRecalculating);\r\n\t\t\t\t}\r\n\t\t\t\t// Prevent jQuery cache memory leak\r\n\t\t\t\tpopUpEl.remove();\r\n\r\n\t\t\t\tif (showHint) {\r\n\t\t\t\t\tinputsContainer.remove();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvar $popup = $compile(popUpEl)(scope);\r\n\r\n\t\t\tif (appendToBody) {\r\n\t\t\t\t$document.find('body').append($popup);\r\n\t\t\t} else if (appendTo) {\r\n\t\t\t\tangular.element(appendTo).eq(0).append($popup);\r\n\t\t\t} else {\r\n\t\t\t\telement.after($popup);\r\n\t\t\t}\r\n\r\n\t\t\tthis.init = function (_modelCtrl, _ngModelOptions) {\r\n\t\t\t\tmodelCtrl = _modelCtrl;\r\n\t\t\t\tngModelOptions = _ngModelOptions;\r\n\r\n\t\t\t\tscope.debounceUpdate = modelCtrl.$options && $parse(modelCtrl.$options.debounce)(originalScope);\r\n\r\n\t\t\t\t//plug into $parsers pipeline to open a typeahead on view changes initiated from DOM\r\n\t\t\t\t//$parsers kick-in on all the changes coming from the view as well as manually triggered by $setViewValue\r\n\t\t\t\tmodelCtrl.$parsers.unshift(function (inputValue) {\r\n\t\t\t\t\thasFocus = true;\r\n\r\n\t\t\t\t\tif (minLength === 0 || inputValue && inputValue.length >= minLength) {\r\n\t\t\t\t\t\tif (waitTime > 0) {\r\n\t\t\t\t\t\t\tcancelPreviousTimeout();\r\n\t\t\t\t\t\t\tscheduleSearchWithTimeout(inputValue);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tgetMatchesAsync(inputValue);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tisLoadingSetter(originalScope, false);\r\n\t\t\t\t\t\tcancelPreviousTimeout();\r\n\t\t\t\t\t\tresetMatches();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (isEditable) {\r\n\t\t\t\t\t\treturn inputValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!inputValue) {\r\n\t\t\t\t\t\t// Reset in case user had typed something previously.\r\n\t\t\t\t\t\tmodelCtrl.$setValidity('editable', true);\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmodelCtrl.$setValidity('editable', false);\r\n\t\t\t\t\treturn undefined;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tmodelCtrl.$formatters.push(function (modelValue) {\r\n\t\t\t\t\tvar candidateViewValue, emptyViewValue;\r\n\t\t\t\t\tvar locals = {};\r\n\r\n\t\t\t\t\t// The validity may be set to false via $parsers (see above) if\r\n\t\t\t\t\t// the model is restricted to selected values. If the model\r\n\t\t\t\t\t// is set manually it is considered to be valid.\r\n\t\t\t\t\tif (!isEditable) {\r\n\t\t\t\t\t\tmodelCtrl.$setValidity('editable', true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (inputFormatter) {\r\n\t\t\t\t\t\tlocals.$model = modelValue;\r\n\t\t\t\t\t\treturn inputFormatter(originalScope, locals);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//it might happen that we don't have enough info to properly render input value\r\n\t\t\t\t\t//we need to check for this situation and simply return model value if we can't apply custom formatting\r\n\t\t\t\t\tlocals[parserResult.itemName] = modelValue;\r\n\t\t\t\t\tcandidateViewValue = parserResult.viewMapper(originalScope, locals);\r\n\t\t\t\t\tlocals[parserResult.itemName] = undefined;\r\n\t\t\t\t\temptyViewValue = parserResult.viewMapper(originalScope, locals);\r\n\r\n\t\t\t\t\treturn candidateViewValue !== emptyViewValue ? candidateViewValue : modelValue;\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t}])\r\n\r\n\t.directive('uibTypeahead', function () {\r\n\t\treturn {\r\n\t\t\tcontroller: 'UibTypeaheadController',\r\n\t\t\trequire: ['ngModel', '^?ngModelOptions', 'uibTypeahead'],\r\n\t\t\tlink: function (originalScope, element, attrs, ctrls) {\r\n\t\t\t\tctrls[2].init(ctrls[0], ctrls[1]);\r\n\t\t\t}\r\n\t\t};\r\n\t})\r\n\r\n\t.directive('uibTypeaheadPopup', ['$$debounce', function ($$debounce) {\r\n\t\treturn {\r\n\t\t\tscope: {\r\n\t\t\t\tmatches: '=',\r\n\t\t\t\tquery: '=',\r\n\t\t\t\tactive: '=',\r\n\t\t\t\tposition: '&',\r\n\t\t\t\tmoveInProgress: '=',\r\n\t\t\t\tselect: '&',\r\n\t\t\t\tassignIsOpen: '&',\r\n\t\t\t\tdebounce: '&'\r\n\t\t\t},\r\n\t\t\treplace: true,\r\n\t\t\ttemplateUrl: function (element, attrs) {\r\n\t\t\t\treturn attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs) {\r\n\t\t\t\tscope.templateUrl = attrs.templateUrl;\r\n\r\n\t\t\t\tscope.isOpen = function () {\r\n\t\t\t\t\tvar isDropdownOpen = scope.matches.length > 0;\r\n\t\t\t\t\tscope.assignIsOpen({isOpen: isDropdownOpen});\r\n\t\t\t\t\treturn isDropdownOpen;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscope.isActive = function (matchIdx) {\r\n\t\t\t\t\treturn scope.active === matchIdx;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscope.selectActive = function (matchIdx) {\r\n\t\t\t\t\tscope.active = matchIdx;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscope.selectMatch = function (activeIdx, evt) {\r\n\t\t\t\t\tvar debounce = scope.debounce();\r\n\t\t\t\t\tif (angular.isNumber(debounce) || angular.isObject(debounce)) {\r\n\t\t\t\t\t\t$$debounce(function () {\r\n\t\t\t\t\t\t\tscope.select({activeIdx: activeIdx, evt: evt});\r\n\t\t\t\t\t\t}, angular.isNumber(debounce) ? debounce : debounce['default']);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tscope.select({activeIdx: activeIdx, evt: evt});\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\r\n\t.directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function ($templateRequest, $compile, $parse) {\r\n\t\treturn {\r\n\t\t\tscope: {\r\n\t\t\t\tindex: '=',\r\n\t\t\t\tmatch: '=',\r\n\t\t\t\tquery: '='\r\n\t\t\t},\r\n\t\t\tlink: function (scope, element, attrs) {\r\n\t\t\t\tvar tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'uib/template/typeahead/typeahead-match.html';\r\n\t\t\t\t$templateRequest(tplUrl).then(function (tplContent) {\r\n\t\t\t\t\tvar tplEl = angular.element(tplContent.trim());\r\n\t\t\t\t\telement.replaceWith(tplEl);\r\n\t\t\t\t\t$compile(tplEl)(scope);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\r\n\t.filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function ($sce, $injector, $log) {\r\n\t\tvar isSanitizePresent;\r\n\t\tisSanitizePresent = $injector.has('$sanitize');\r\n\r\n\t\tfunction escapeRegexp(queryToEscape) {\r\n\t\t\t// Regex: capture the whole query string and replace it with the string that will be used to match\r\n\t\t\t// the results, for example if the capture is \"a\" the result will be \\a\r\n\t\t\treturn queryToEscape.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\r\n\t\t}\r\n\r\n\t\tfunction containsHtml(matchItem) {\r\n\t\t\treturn /<.*>/g.test(matchItem);\r\n\t\t}\r\n\r\n\t\treturn function (matchItem, query) {\r\n\t\t\tif (!isSanitizePresent && containsHtml(matchItem)) {\r\n\t\t\t\t$log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger\r\n\t\t\t}\r\n\t\t\tmatchItem = query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem; // Replaces the capture string with a the same string inside of a \"strong\" tag\r\n\t\t\tif (!isSanitizePresent) {\r\n\t\t\t\tmatchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive\r\n\t\t\t}\r\n\t\t\treturn matchItem;\r\n\t\t};\r\n\t}]);\r\n\r\nangular.module('ui.bootstrap.debounce', [])\r\n/**\r\n * A helper, internal service that debounces a function\r\n */\r\n\t.factory('$$debounce', ['$timeout', function ($timeout) {\r\n\t\treturn function (callback, debounceTime) {\r\n\t\t\tvar timeoutPromise;\r\n\r\n\t\t\treturn function () {\r\n\t\t\t\tvar self = this;\r\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\t\t\tif (timeoutPromise) {\r\n\t\t\t\t\t$timeout.cancel(timeoutPromise);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttimeoutPromise = $timeout(function () {\r\n\t\t\t\t\tcallback.apply(self, args);\r\n\t\t\t\t}, debounceTime);\r\n\t\t\t};\r\n\t\t};\r\n\t}]);\r\n\r\nangular.module('ui.bootstrap.position', [])\r\n\r\n/**\r\n * A set of utility methods for working with the DOM.\r\n * It is meant to be used where we need to absolute-position elements in\r\n * relation to another element (this is the case for tooltips, popovers,\r\n * typeahead suggestions etc.).\r\n */\r\n\t.factory('$uibPosition', ['$document', '$window', function ($document, $window) {\r\n\t\t/**\r\n\t\t * Used by scrollbarWidth() function to cache scrollbar's width.\r\n\t\t * Do not access this variable directly, use scrollbarWidth() instead.\r\n\t\t */\r\n\t\tvar SCROLLBAR_WIDTH;\r\n\t\t/**\r\n\t\t * scrollbar on body and html element in IE and Edge overlay\r\n\t\t * content and should be considered 0 width.\r\n\t\t */\r\n\t\tvar BODY_SCROLLBAR_WIDTH;\r\n\t\tvar OVERFLOW_REGEX = {\r\n\t\t\tnormal: /(auto|scroll)/,\r\n\t\t\thidden: /(auto|scroll|hidden)/\r\n\t\t};\r\n\t\tvar PLACEMENT_REGEX = {\r\n\t\t\tauto: /\\s?auto?\\s?/i,\r\n\t\t\tprimary: /^(top|bottom|left|right)$/,\r\n\t\t\tsecondary: /^(top|bottom|left|right|center)$/,\r\n\t\t\tvertical: /^(top|bottom)$/\r\n\t\t};\r\n\t\tvar BODY_REGEX = /(HTML|BODY)/;\r\n\r\n\t\treturn {\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides a raw DOM element from a jQuery/jQLite element.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to convert.\r\n\t\t\t *\r\n\t\t\t * @returns {element} A HTML element.\r\n\t\t\t */\r\n\t\t\tgetRawNode: function (elem) {\r\n\t\t\t\treturn elem.nodeName ? elem : elem[0] || elem;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides a parsed number for a style property. Strips\r\n\t\t\t * units and casts invalid numbers to 0.\r\n\t\t\t *\r\n\t\t\t * @param {string} value - The style value to parse.\r\n\t\t\t *\r\n\t\t\t * @returns {number} A valid number.\r\n\t\t\t */\r\n\t\t\tparseStyle: function (value) {\r\n\t\t\t\tvalue = parseFloat(value);\r\n\t\t\t\treturn isFinite(value) ? value : 0;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides the closest positioned ancestor.\r\n\t\t\t *\r\n\t\t\t * @param {element} element - The element to get the offest parent for.\r\n\t\t\t *\r\n\t\t\t * @returns {element} The closest positioned ancestor.\r\n\t\t\t */\r\n\t\t\toffsetParent: function (elem) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar offsetParent = elem.offsetParent || $document[0].documentElement;\r\n\r\n\t\t\t\tfunction isStaticPositioned(el) {\r\n\t\t\t\t\treturn ($window.getComputedStyle(el).position || 'static') === 'static';\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {\r\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn offsetParent || $document[0].documentElement;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides the scrollbar width, concept from TWBS measureScrollbar()\r\n\t\t\t * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js\r\n\t\t\t * In IE and Edge, scollbar on body and html element overlay and should\r\n\t\t\t * return a width of 0.\r\n\t\t\t *\r\n\t\t\t * @returns {number} The width of the browser scollbar.\r\n\t\t\t */\r\n\t\t\tscrollbarWidth: function (isBody) {\r\n\t\t\t\tif (isBody) {\r\n\t\t\t\t\tif (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {\r\n\t\t\t\t\t\tvar bodyElem = $document.find('body');\r\n\t\t\t\t\t\tbodyElem.addClass('uib-position-body-scrollbar-measure');\r\n\t\t\t\t\t\tBODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;\r\n\t\t\t\t\t\tBODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;\r\n\t\t\t\t\t\tbodyElem.removeClass('uib-position-body-scrollbar-measure');\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn BODY_SCROLLBAR_WIDTH;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (angular.isUndefined(SCROLLBAR_WIDTH)) {\r\n\t\t\t\t\tvar scrollElem = angular.element('
');\r\n\t\t\t\t\t$document.find('body').append(scrollElem);\r\n\t\t\t\t\tSCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;\r\n\t\t\t\t\tSCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;\r\n\t\t\t\t\tscrollElem.remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn SCROLLBAR_WIDTH;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides the padding required on an element to replace the scrollbar.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **scrollbarWidth**: the width of the scrollbar
  • \r\n\t\t\t *
  • **widthOverflow**: whether the the width is overflowing
  • \r\n\t\t\t *
  • **right**: the amount of right padding on the element needed to replace the scrollbar
  • \r\n\t\t\t *
  • **rightOriginal**: the amount of right padding currently on the element
  • \r\n\t\t\t *
  • **heightOverflow**: whether the the height is overflowing
  • \r\n\t\t\t *
  • **bottom**: the amount of bottom padding on the element needed to replace the scrollbar
  • \r\n\t\t\t *
  • **bottomOriginal**: the amount of bottom padding currently on the element
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tscrollbarPadding: function (elem) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar elemStyle = $window.getComputedStyle(elem);\r\n\t\t\t\tvar paddingRight = this.parseStyle(elemStyle.paddingRight);\r\n\t\t\t\tvar paddingBottom = this.parseStyle(elemStyle.paddingBottom);\r\n\t\t\t\tvar scrollParent = this.scrollParent(elem, false, true);\r\n\t\t\t\tvar scrollbarWidth = this.scrollbarWidth(scrollParent, BODY_REGEX.test(scrollParent.tagName));\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tscrollbarWidth: scrollbarWidth,\r\n\t\t\t\t\twidthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,\r\n\t\t\t\t\tright: paddingRight + scrollbarWidth,\r\n\t\t\t\t\toriginalRight: paddingRight,\r\n\t\t\t\t\theightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,\r\n\t\t\t\t\tbottom: paddingBottom + scrollbarWidth,\r\n\t\t\t\t\toriginalBottom: paddingBottom\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Checks to see if the element is scrollable.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to check.\r\n\t\t\t * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\r\n\t\t\t * default is false.\r\n\t\t\t *\r\n\t\t\t * @returns {boolean} Whether the element is scrollable.\r\n\t\t\t */\r\n\t\t\tisScrollable: function (elem, includeHidden) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\r\n\t\t\t\tvar elemStyle = $window.getComputedStyle(elem);\r\n\t\t\t\treturn overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides the closest scrollable ancestor.\r\n\t\t\t * A port of the jQuery UI scrollParent method:\r\n\t\t\t * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to find the scroll parent of.\r\n\t\t\t * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\r\n\t\t\t * default is false.\r\n\t\t\t * @param {boolean=} [includeSelf=false] - Should the element being passed be\r\n\t\t\t * included in the scrollable llokup.\r\n\t\t\t *\r\n\t\t\t * @returns {element} A HTML element.\r\n\t\t\t */\r\n\t\t\tscrollParent: function (elem, includeHidden, includeSelf) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\r\n\t\t\t\tvar documentEl = $document[0].documentElement;\r\n\t\t\t\tvar elemStyle = $window.getComputedStyle(elem);\r\n\t\t\t\tif (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {\r\n\t\t\t\t\treturn elem;\r\n\t\t\t\t}\r\n\t\t\t\tvar excludeStatic = elemStyle.position === 'absolute';\r\n\t\t\t\tvar scrollParent = elem.parentElement || documentEl;\r\n\r\n\t\t\t\tif (scrollParent === documentEl || elemStyle.position === 'fixed') {\r\n\t\t\t\t\treturn documentEl;\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (scrollParent.parentElement && scrollParent !== documentEl) {\r\n\t\t\t\t\tvar spStyle = $window.getComputedStyle(scrollParent);\r\n\t\t\t\t\tif (excludeStatic && spStyle.position !== 'static') {\r\n\t\t\t\t\t\texcludeStatic = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tscrollParent = scrollParent.parentElement;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn scrollParent;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides read-only equivalent of jQuery's position function:\r\n\t\t\t * http://api.jquery.com/position/ - distance to closest positioned\r\n\t\t\t * ancestor. Does not account for margins by default like jQuery position.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to caclulate the position on.\r\n\t\t\t * @param {boolean=} [includeMargins=false] - Should margins be accounted\r\n\t\t\t * for, default is false.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **width**: the width of the element
  • \r\n\t\t\t *
  • **height**: the height of the element
  • \r\n\t\t\t *
  • **top**: distance to top edge of offset parent
  • \r\n\t\t\t *
  • **left**: distance to left edge of offset parent
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tposition: function (elem, includeMagins) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar elemOffset = this.offset(elem);\r\n\t\t\t\tif (includeMagins) {\r\n\t\t\t\t\tvar elemStyle = $window.getComputedStyle(elem);\r\n\t\t\t\t\telemOffset.top -= this.parseStyle(elemStyle.marginTop);\r\n\t\t\t\t\telemOffset.left -= this.parseStyle(elemStyle.marginLeft);\r\n\t\t\t\t}\r\n\t\t\t\tvar parent = this.offsetParent(elem);\r\n\t\t\t\tvar parentOffset = {top: 0, left: 0};\r\n\r\n\t\t\t\tif (parent !== $document[0].documentElement) {\r\n\t\t\t\t\tparentOffset = this.offset(parent);\r\n\t\t\t\t\tparentOffset.top += parent.clientTop - parent.scrollTop;\r\n\t\t\t\t\tparentOffset.left += parent.clientLeft - parent.scrollLeft;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\twidth: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),\r\n\t\t\t\t\theight: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),\r\n\t\t\t\t\ttop: Math.round(elemOffset.top - parentOffset.top),\r\n\t\t\t\t\tleft: Math.round(elemOffset.left - parentOffset.left)\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides read-only equivalent of jQuery's offset function:\r\n\t\t\t * http://api.jquery.com/offset/ - distance to viewport. Does\r\n\t\t\t * not account for borders, margins, or padding on the body\r\n\t\t\t * element.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to calculate the offset on.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **width**: the width of the element
  • \r\n\t\t\t *
  • **height**: the height of the element
  • \r\n\t\t\t *
  • **top**: distance to top edge of viewport
  • \r\n\t\t\t *
  • **right**: distance to bottom edge of viewport
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\toffset: function (elem) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar elemBCR = elem.getBoundingClientRect();\r\n\t\t\t\treturn {\r\n\t\t\t\t\twidth: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),\r\n\t\t\t\t\theight: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),\r\n\t\t\t\t\ttop: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),\r\n\t\t\t\t\tleft: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides offset distance to the closest scrollable ancestor\r\n\t\t\t * or viewport. Accounts for border and scrollbar width.\r\n\t\t\t *\r\n\t\t\t * Right and bottom dimensions represent the distance to the\r\n\t\t\t * respective edge of the viewport element. If the element\r\n\t\t\t * edge extends beyond the viewport, a negative value will be\r\n\t\t\t * reported.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The element to get the viewport offset for.\r\n\t\t\t * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead\r\n\t\t\t * of the first scrollable element, default is false.\r\n\t\t\t * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element\r\n\t\t\t * be accounted for, default is true.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **top**: distance to the top content edge of viewport element
  • \r\n\t\t\t *
  • **bottom**: distance to the bottom content edge of viewport element
  • \r\n\t\t\t *
  • **left**: distance to the left content edge of viewport element
  • \r\n\t\t\t *
  • **right**: distance to the right content edge of viewport element
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tviewportOffset: function (elem, useDocument, includePadding) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\t\t\t\tincludePadding = includePadding !== false ? true : false;\r\n\r\n\t\t\t\tvar elemBCR = elem.getBoundingClientRect();\r\n\t\t\t\tvar offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};\r\n\r\n\t\t\t\tvar offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);\r\n\t\t\t\tvar offsetParentBCR = offsetParent.getBoundingClientRect();\r\n\r\n\t\t\t\toffsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;\r\n\t\t\t\toffsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;\r\n\t\t\t\tif (offsetParent === $document[0].documentElement) {\r\n\t\t\t\t\toffsetBCR.top += $window.pageYOffset;\r\n\t\t\t\t\toffsetBCR.left += $window.pageXOffset;\r\n\t\t\t\t}\r\n\t\t\t\toffsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;\r\n\t\t\t\toffsetBCR.right = offsetBCR.left + offsetParent.clientWidth;\r\n\r\n\t\t\t\tif (includePadding) {\r\n\t\t\t\t\tvar offsetParentStyle = $window.getComputedStyle(offsetParent);\r\n\t\t\t\t\toffsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);\r\n\t\t\t\t\toffsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);\r\n\t\t\t\t\toffsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);\r\n\t\t\t\t\toffsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttop: Math.round(elemBCR.top - offsetBCR.top),\r\n\t\t\t\t\tbottom: Math.round(offsetBCR.bottom - elemBCR.bottom),\r\n\t\t\t\t\tleft: Math.round(elemBCR.left - offsetBCR.left),\r\n\t\t\t\t\tright: Math.round(offsetBCR.right - elemBCR.right)\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides an array of placement values parsed from a placement string.\r\n\t\t\t * Along with the 'auto' indicator, supported placement strings are:\r\n\t\t\t *
    \r\n\t\t\t *
  • top: element on top, horizontally centered on host element.
  • \r\n\t\t\t *
  • top-left: element on top, left edge aligned with host element left edge.
  • \r\n\t\t\t *
  • top-right: element on top, lerightft edge aligned with host element right edge.
  • \r\n\t\t\t *
  • bottom: element on bottom, horizontally centered on host element.
  • \r\n\t\t\t *
  • bottom-left: element on bottom, left edge aligned with host element left edge.
  • \r\n\t\t\t *
  • bottom-right: element on bottom, right edge aligned with host element right edge.
  • \r\n\t\t\t *
  • left: element on left, vertically centered on host element.
  • \r\n\t\t\t *
  • left-top: element on left, top edge aligned with host element top edge.
  • \r\n\t\t\t *
  • left-bottom: element on left, bottom edge aligned with host element bottom edge.
  • \r\n\t\t\t *
  • right: element on right, vertically centered on host element.
  • \r\n\t\t\t *
  • right-top: element on right, top edge aligned with host element top edge.
  • \r\n\t\t\t *
  • right-bottom: element on right, bottom edge aligned with host element bottom edge.
  • \r\n\t\t\t *
\r\n\t\t\t * A placement string with an 'auto' indicator is expected to be\r\n\t\t\t * space separated from the placement, i.e: 'auto bottom-left' If\r\n\t\t\t * the primary and secondary placement values do not match 'top,\r\n\t\t\t * bottom, left, right' then 'top' will be the primary placement and\r\n\t\t\t * 'center' will be the secondary placement. If 'auto' is passed, true\r\n\t\t\t * will be returned as the 3rd value of the array.\r\n\t\t\t *\r\n\t\t\t * @param {string} placement - The placement string to parse.\r\n\t\t\t *\r\n\t\t\t * @returns {array} An array with the following values\r\n\t\t\t *
    \r\n\t\t\t *
  • **[0]**: The primary placement.
  • \r\n\t\t\t *
  • **[1]**: The secondary placement.
  • \r\n\t\t\t *
  • **[2]**: If auto is passed: true, else undefined.
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tparsePlacement: function (placement) {\r\n\t\t\t\tvar autoPlace = PLACEMENT_REGEX.auto.test(placement);\r\n\t\t\t\tif (autoPlace) {\r\n\t\t\t\t\tplacement = placement.replace(PLACEMENT_REGEX.auto, '');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tplacement = placement.split('-');\r\n\r\n\t\t\t\tplacement[0] = placement[0] || 'top';\r\n\t\t\t\tif (!PLACEMENT_REGEX.primary.test(placement[0])) {\r\n\t\t\t\t\tplacement[0] = 'top';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tplacement[1] = placement[1] || 'center';\r\n\t\t\t\tif (!PLACEMENT_REGEX.secondary.test(placement[1])) {\r\n\t\t\t\t\tplacement[1] = 'center';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (autoPlace) {\r\n\t\t\t\t\tplacement[2] = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tplacement[2] = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn placement;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides coordinates for an element to be positioned relative to\r\n\t\t\t * another element. Passing 'auto' as part of the placement parameter\r\n\t\t\t * will enable smart placement - where the element fits. i.e:\r\n\t\t\t * 'auto left-top' will check to see if there is enough space to the left\r\n\t\t\t * of the hostElem to fit the targetElem, if not place right (same for secondary\r\n\t\t\t * top placement). Available space is calculated using the viewportOffset\r\n\t\t\t * function.\r\n\t\t\t *\r\n\t\t\t * @param {element} hostElem - The element to position against.\r\n\t\t\t * @param {element} targetElem - The element to position.\r\n\t\t\t * @param {string=} [placement=top] - The placement for the targetElem,\r\n\t\t\t * default is 'top'. 'center' is assumed as secondary placement for\r\n\t\t\t * 'top', 'left', 'right', and 'bottom' placements. Available placements are:\r\n\t\t\t *
    \r\n\t\t\t *
  • top
  • \r\n\t\t\t *
  • top-right
  • \r\n\t\t\t *
  • top-left
  • \r\n\t\t\t *
  • bottom
  • \r\n\t\t\t *
  • bottom-left
  • \r\n\t\t\t *
  • bottom-right
  • \r\n\t\t\t *
  • left
  • \r\n\t\t\t *
  • left-top
  • \r\n\t\t\t *
  • left-bottom
  • \r\n\t\t\t *
  • right
  • \r\n\t\t\t *
  • right-top
  • \r\n\t\t\t *
  • right-bottom
  • \r\n\t\t\t *
\r\n\t\t\t * @param {boolean=} [appendToBody=false] - Should the top and left values returned\r\n\t\t\t * be calculated from the body element, default is false.\r\n\t\t\t *\r\n\t\t\t * @returns {object} An object with the following properties:\r\n\t\t\t *
    \r\n\t\t\t *
  • **top**: Value for targetElem top.
  • \r\n\t\t\t *
  • **left**: Value for targetElem left.
  • \r\n\t\t\t *
  • **placement**: The resolved placement.
  • \r\n\t\t\t *
\r\n\t\t\t */\r\n\t\t\tpositionElements: function (hostElem, targetElem, placement, appendToBody) {\r\n\t\t\t\thostElem = this.getRawNode(hostElem);\r\n\t\t\t\ttargetElem = this.getRawNode(targetElem);\r\n\r\n\t\t\t\t// need to read from prop to support tests.\r\n\t\t\t\tvar targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');\r\n\t\t\t\tvar targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');\r\n\r\n\t\t\t\tplacement = this.parsePlacement(placement);\r\n\r\n\t\t\t\tvar hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);\r\n\t\t\t\tvar targetElemPos = {top: 0, left: 0, placement: ''};\r\n\r\n\t\t\t\tif (placement[2]) {\r\n\t\t\t\t\tvar viewportOffset = this.viewportOffset(hostElem, appendToBody);\r\n\r\n\t\t\t\t\tvar targetElemStyle = $window.getComputedStyle(targetElem);\r\n\t\t\t\t\tvar adjustedSize = {\r\n\t\t\t\t\t\twidth: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),\r\n\t\t\t\t\t\theight: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tplacement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :\r\n\t\t\t\t\t\tplacement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :\r\n\t\t\t\t\t\t\tplacement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :\r\n\t\t\t\t\t\t\t\tplacement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :\r\n\t\t\t\t\t\t\t\t\tplacement[0];\r\n\r\n\t\t\t\t\tplacement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :\r\n\t\t\t\t\t\tplacement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :\r\n\t\t\t\t\t\t\tplacement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :\r\n\t\t\t\t\t\t\t\tplacement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :\r\n\t\t\t\t\t\t\t\t\tplacement[1];\r\n\r\n\t\t\t\t\tif (placement[1] === 'center') {\r\n\t\t\t\t\t\tif (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n\t\t\t\t\t\t\tvar xOverflow = hostElemPos.width / 2 - targetWidth / 2;\r\n\t\t\t\t\t\t\tif (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {\r\n\t\t\t\t\t\t\t\tplacement[1] = 'left';\r\n\t\t\t\t\t\t\t} else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {\r\n\t\t\t\t\t\t\t\tplacement[1] = 'right';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;\r\n\t\t\t\t\t\t\tif (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {\r\n\t\t\t\t\t\t\t\tplacement[1] = 'top';\r\n\t\t\t\t\t\t\t} else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {\r\n\t\t\t\t\t\t\t\tplacement[1] = 'bottom';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tswitch (placement[0]) {\r\n\t\t\t\t\tcase 'top':\r\n\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top - targetHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top + hostElemPos.height;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left - targetWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left + hostElemPos.width;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tswitch (placement[1]) {\r\n\t\t\t\t\tcase 'top':\r\n\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'center':\r\n\t\t\t\t\t\tif (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n\t\t\t\t\t\t\ttargetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttargetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttargetElemPos.top = Math.round(targetElemPos.top);\r\n\t\t\t\ttargetElemPos.left = Math.round(targetElemPos.left);\r\n\t\t\t\ttargetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];\r\n\r\n\t\t\t\treturn targetElemPos;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Provides a way for positioning tooltip & dropdown\r\n\t\t\t * arrows when using placement options beyond the standard\r\n\t\t\t * left, right, top, or bottom.\r\n\t\t\t *\r\n\t\t\t * @param {element} elem - The tooltip/dropdown element.\r\n\t\t\t * @param {string} placement - The placement for the elem.\r\n\t\t\t */\r\n\t\t\tpositionArrow: function (elem, placement) {\r\n\t\t\t\telem = this.getRawNode(elem);\r\n\r\n\t\t\t\tvar innerElem = elem.querySelector('.tooltip-inner, .popover-inner');\r\n\t\t\t\tif (!innerElem) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar isTooltip = angular.element(innerElem).hasClass('tooltip-inner');\r\n\r\n\t\t\t\tvar arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');\r\n\t\t\t\tif (!arrowElem) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar arrowCss = {\r\n\t\t\t\t\ttop: '',\r\n\t\t\t\t\tbottom: '',\r\n\t\t\t\t\tleft: '',\r\n\t\t\t\t\tright: ''\r\n\t\t\t\t};\r\n\r\n\t\t\t\tplacement = this.parsePlacement(placement);\r\n\t\t\t\tif (placement[1] === 'center') {\r\n\t\t\t\t\t// no adjustment necessary - just reset styles\r\n\t\t\t\t\tangular.element(arrowElem).css(arrowCss);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar borderProp = 'border-' + placement[0] + '-width';\r\n\t\t\t\tvar borderWidth = $window.getComputedStyle(arrowElem)[borderProp];\r\n\r\n\t\t\t\tvar borderRadiusProp = 'border-';\r\n\t\t\t\tif (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n\t\t\t\t\tborderRadiusProp += placement[0] + '-' + placement[1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tborderRadiusProp += placement[1] + '-' + placement[0];\r\n\t\t\t\t}\r\n\t\t\t\tborderRadiusProp += '-radius';\r\n\t\t\t\tvar borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];\r\n\r\n\t\t\t\tswitch (placement[0]) {\r\n\t\t\t\t\tcase 'top':\r\n\t\t\t\t\t\tarrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t\tarrowCss.top = isTooltip ? '0' : '-' + borderWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\tarrowCss.right = isTooltip ? '0' : '-' + borderWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\tarrowCss.left = isTooltip ? '0' : '-' + borderWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tarrowCss[placement[1]] = borderRadius;\r\n\r\n\t\t\t\tangular.element(arrowElem).css(arrowCss);\r\n\t\t\t}\r\n\t\t};\r\n\t}]);\r\nangular.module('ui.bootstrap.typeahead').run(function () {\r\n\t!angular.$$csp().noInlineStyle && !angular.$$uibTypeaheadCss && angular.element(document).find('head').prepend('');\r\n\tangular.$$uibTypeaheadCss = true;\r\n});\r\nangular.module('ui.bootstrap.position').run(function () {\r\n\t!angular.$$csp().noInlineStyle && !angular.$$uibPositionCss && angular.element(document).find('head').prepend('');\r\n\tangular.$$uibPositionCss = true;\r\n});\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').directive('uiSelectRequired', ['validationService',\r\n\t\tfunction (validationService) {\r\n\r\n\t\t\treturn {\r\n\t\t\t\trequire: 'ngModel',\r\n\t\t\t\tlink: function (scope, element, attrs, ctrl) {\r\n\r\n\t\t\t\t\tvar formIsSubmitted = false;\r\n\r\n\t\t\t\t\tscope.$on('broadcast-field-errors', function () {\r\n\t\t\t\t\t\tformIsSubmitted = true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tscope.$on('reset-field-errors', function () {\r\n\t\t\t\t\t\tformIsSubmitted = true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tctrl.$validators.uiSelectRequired = function (modelValue, viewValue) {\r\n\t\t\t\t\t\tif (!modelValue || !modelValue.$select)\r\n\t\t\t\t\t\t\treturn true;\r\n\r\n\t\t\t\t\t\tvar value = ( modelValue.$select ) ? modelValue.$select.selected : null;\r\n\t\t\t\t\t\tvar valid = value !== undefined;\r\n\t\t\t\t\t\tvalidationService.validateInput(element, ctrl, attrs.labelKey);\r\n\r\n\t\t\t\t\t\tif (valid) {\r\n\t\t\t\t\t\t\tif (ctrl.$error.required)\r\n\t\t\t\t\t\t\t\tdelete ctrl.$error.required;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tctrl.$error.required = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (ctrl.$error.uiSelectRequired)\r\n\t\t\t\t\t\t\tdelete ctrl.$error.uiSelectRequired;\r\n\r\n\t\t\t\t\t\tvar parent = element.parents('div.ctrl-holder');\r\n\t\t\t\t\t\tif (!parent || !parent[0]) return;\r\n\t\t\t\t\t\tparent = $(parent).first();\r\n\r\n\t\t\t\t\t\tif (valid) {\r\n\t\t\t\t\t\t\tparent.removeClass('is-error');\r\n\t\t\t\t\t\t} else if (ctrl.$dirty || formIsSubmitted) {\r\n\t\t\t\t\t\t\tparent.addClass('is-error');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn valid;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tscope.$watch(ctrl.$validators.uiSelectRequired);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}])\r\n})();\r\n","angular.module(\"qbePortal\").controller(\"BikeFormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteOptions\",\r\n\t\"paymentService\",\r\n\t\"quoteModelFactory\",\r\n\t\"dynamicRouter\",\r\n\t\"portalServiceWrapper\",\r\n\t\"MAService\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"$q\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"quoteRequestRepository\",\r\n\t\"tokenTimeoutService\",\r\n\t\"$compile\",\r\n\t\"smartLinkService\",\r\n\t\"campaignService\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteOptions,\r\n\t\tpaymentService,\r\n\t\tquoteModelFactory,\r\n\t\tdynamicRouter,\r\n\t\tportalServiceWrapper,\r\n\t\tMAService,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$q,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository,\r\n\t\ttokenTimeoutService,\r\n\t\t$compile,\r\n\t\tsmartLinkService,\r\n\t\tcampaignService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tstorage.removeItem(\"policy-date-input\");\r\n\r\n\t\t\tvar stepConditions = {\r\n\t\t\t\t\"bike.payment\": function () {\r\n\t\t\t\t\treturn $state.$current.name != \"bike.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"bike.done\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"bike.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"bike.policy-start-date\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"bike.policy-start-date\";\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t$ctrl.elementName = \"Form Controller\";\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sideBarEmail = null;\r\n\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t$ctrl.saveOnExit = false;\r\n\t\t$ctrl.smartLink = null;\r\n\r\n\t\t$window.onbeforeunload = function (event) {\r\n\t\t\texitSaveQuote();\r\n\t\t\tif ($ctrl.saveOnExit) {\r\n\t\t\t\t$rootScope.$digest();\r\n\t\t\t\treturn \"Are you sure you want to leave?\";\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"session-save-quote\", exitSaveQuote);\r\n\r\n\t\tfunction exitSaveQuote() {\r\n\t\t\tvar emailAddress = angular\r\n\t\t\t\t.element(\"div\")\r\n\t\t\t\t.find(\"[label-key=yourEmailAddress]\")\r\n\t\t\t\t.val();\r\n\r\n\t\t\tif (dynamicRouter.getPageTitle() != \"Payment\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.quoteModel.email != null ||\r\n\t\t\t\t\t$ctrl.sideBarEmail != null ||\r\n\t\t\t\t\temailAddress != \"\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tif ($ctrl.quoteModel && $ctrl.quoteModel.quoteResult) {\r\n\t\t\t\t\t\t$ctrl.saveOnExit = true;\r\n\t\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\t\tvar paymentFrequency = \"everyyear\";\r\n\r\n\t\t\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\t\t\t\t\tquote: \"true\",\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} else $rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\treturn {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tbikeForm: {\r\n\t\t\t\t\tgetStarted: {\r\n\t\t\t\t\t\tpolicyStartDate: moment()\r\n\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\t\t\tpersonOrCompany: \"person\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tinsuredExcessValue: {\r\n\t\t\t\t\t\tthirdPartyOrThirdPartyFireAndTheft: \"standard\",\r\n\t\t\t\t\t\tcomprehensivePref: \"market\",\r\n\t\t\t\t\t\tvoluntaryMotorcycleExcess: 0,\r\n\t\t\t\t\t\texcess: 0,\r\n\t\t\t\t\t\tflexiExcess: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\tpaymentForm: {\r\n\t\t\t\t\tpaymentDetails: {\r\n\t\t\t\t\t\tpaymentOptions: \"yearly\",\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalidate-quotes\", invalidatePreviousQuote);\r\n\r\n\t\tfunction invalidatePreviousQuote() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tstorage.removeItem(\"policy-address\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to submit the form\r\n\t\t */\r\n\t\t//hadles form submit from child elements\r\n\t\t$scope.$on(\"form-submit\", function (event, formName) {\r\n\t\t\t$ctrl.submit($scope[formName]);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to save the form\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-save-quote\", function (event, data) {\r\n\t\t\t$ctrl.sideBarEmail = data;\r\n\t\t\t$ctrl.save();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to assign the email address\r\n\t\t */\r\n\t\t $scope.$on(\"sidebar-assign-mail\", function (event, data) {\r\n\t\t\tif (data != \"\") $ctrl.sideBarEmail = data;\r\n\t\t});\r\n\r\n\t\tfunction requote(form) {\r\n\t\t\tvar isValid = !form || form.$valid;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\t\r\n\t\t\tif (isValid) {\t\t\t\t\t\t\t\t\r\n\t\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tgetRequote(formData, null, function (resp) {\r\n\t\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tdisplayFormErrors();\r\n\t\t\t}\r\n\t\t}\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, form) {\t\t\t\r\n\t\t\trequote(form);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbFormSection.directive to move to a page\r\n\t\t */\r\n\t\t$scope.$on(\"moveToPage\", function (event, page) {\r\n\t\t\t$ctrl.moveToPage(page);\r\n\t\t});\r\n\r\n\t\tfunction prepopulateRetrievedQuote() {\r\n\t\t\tif ($stateParams.quoteNo && $stateParams.email) {\r\n\t\t\t\tgtmService.trackEvent(\"retrieve-quote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.retrieveSavedQuote(\r\n\t\t\t\t\t\t$stateParams.quoteNo,\r\n\t\t\t\t\t\t$stateParams.email\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (transformedQuote) {\r\n\t\t\t\t\t\t$q.all([\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshAddress(\r\n\t\t\t\t\t\t\t\ttransformedQuote.address\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshVehicleDetails(\r\n\t\t\t\t\t\t\t\ttransformedQuote.motorcycleInfo.vgiId,\r\n\t\t\t\t\t\t\t\tstorage.getItem('policy-start-date'))\r\n\t\t\t\t\t\t]).then(function (resps) {\r\n\t\t\t\t\t\t\tvar bikeFormData = ($ctrl.formData.bikeForm = transformedQuote);\r\n\t\t\t\t\t\t\tvar serviceResponse = storage.getItem(\r\n\t\t\t\t\t\t\t\t\"service-response\"\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"policy-address\",\r\n\t\t\t\t\t\t\t\tserviceResponse.quote.policyAddress\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (!bikeFormData.aboutYourBike)\r\n\t\t\t\t\t\t\t\tbikeFormData.aboutYourBike = {};\r\n\t\t\t\t\t\t\tbikeFormData.aboutYourBike.address = resps[0].data;\r\n\t\t\t\t\t\t\tuserInputRepository.update($ctrl.formData);\r\n\t\t\t\t\t\t\tstorage.setItem(\"retrieve\", true);\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tmoment()\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\") >\r\n\t\t\t\t\t\t\t\tmoment(serviceResponse.quote.periodStartDate)\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\")\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\t\"policy-date-input\",\r\n\t\t\t\t\t\t\t\t\t$ctrl.formData\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"bike.policy-start-date\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"bike.bike\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tvar expiredQuote = storage.getItem(\"expired-quote\");\r\n\t\t\t\t\t\tif (expiredQuote.displayStatus == \"Expired\") {\r\n\t\t\t\t\t\t\tstorage.removeItem(\"expired-quote\");\r\n\t\t\t\t\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t\t\t\t\twindow.qbe.fieldLabels.expiredQuoteRedirect\r\n\t\t\t\t\t\t\t\t\t.bikeExpired\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction applyPromoCodeThroughLink() {\r\n\t\t\tif ($stateParams.promotionalCode) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\t\t\t\tif (formData.bikeForm) {\r\n\t\t\t\t\tif (!formData.bikeForm.tellUsABitMore) {\r\n\t\t\t\t\t\tformData.bikeForm.tellUsABitMore = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tformData.bikeForm.tellUsABitMore.promotionalCode =\r\n\t\t\t\t\t\t$stateParams.promotionalCode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tif (formData.bikeForm && formData.bikeForm.insuredExcessValue) {\r\n\t\t\t\tif (formData.bikeForm.insuredExcessValue.excess > 0) {\r\n\t\t\t\t\tformData.bikeForm.insuredExcessValue.flexiExcess = \r\n\t\t\t\t\tformData.bikeForm.insuredExcessValue.excess - $ctrl.quoteModel.excess.standardExcess;\r\n\t\t\t\t}\t\t\t\t\t\r\n\t\t\t}\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.sideBarEmail != null) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.bikeForm.tellUsABitMore &&\r\n\t\t\t\t\tformData.bikeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.bikeForm.tellUsABitMore.yourEmailAddress =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.bikeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tformData.bikeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.bikeForm.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t}\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction displayFormErrors() {\r\n\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\tdisplayFormErrors();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgtmService.trackEvent(\"next\");\r\n\r\n\t\t\tsetDefaultContactValuesIfRequired();\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\t\r\n\t\t\t//send quote to decline when isRegistered is NO\r\n\t\t\tif (formData.bikeForm.aboutYourBike.isRegistered === false) {\r\n\t\t\t\t//decline quote\r\n\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\tstorage.clear();\r\n\t\t\t\tredirectToDecline(\"decline\", \"Policy Was Declined\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar quickQuote = getQuickQuote(formData, function (resp) {\r\n\t\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\t\t\t\t\r\n\t\t\t\tvar regoSearchDetails = serviceResponseRepository.getLastResponseFrom('regoSearch');\r\n\t\t\t\tif (regoSearchDetails && regoSearchDetails.goodRetailPrice === '0') {\r\n\t\t\t\t\tvar quickQuoteResultList = resp.data;\r\n\t\t\t\t\tif (quickQuoteResultList && quickQuoteResultList.length > 0) {\r\n\t\t\t\t\t\tvar quickQuoteResult = quickQuoteResultList[0];\r\n\t\t\t\t\t\tvar motorcycles = quickQuoteResult.motorcycles;\t\t\t\t\t\r\n\t\t\t\t\t\tif (motorcycles && motorcycles.length > 0) {\r\n\t\t\t\t\t\t\t//update goodRetailPrice when quickquote provided sumInsuredAmount\r\n\t\t\t\t\t\t\tregoSearchDetails.goodRetailPrice = motorcycles[0].sumInsuredAmount;\r\n\t\t\t\t\t\t\tserviceResponseRepository.update('regoSearch', regoSearchDetails);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t$rootScope.$broadcast(\"perform-ma-service\", \"next\");\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t});\r\n\r\n\t\t\tif (!quickQuote) {\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValuesIfRequired(formData) {\r\n\t\t\tvar contactValuesRequired = [\"bike.contact\"];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tcontactValuesRequired.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\tsetDefaultContactValues();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDeclineIfRequired(formData) {\r\n\t\t\tvar declineTestRequiredFor = [\r\n\t\t\t\t\"bike.riders\",\r\n\t\t\t\t\"bike.bike\",\r\n\t\t\t\t\"bike.quote\",\r\n\t\t\t];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tdeclineTestRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\ttestDecline(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDecline(formData) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar declineQuoteOptions = quoteOptions.getTestQuoteDeclineOptions(\r\n\t\t\t\t$state.$current.name\r\n\t\t\t);\r\n\t\t\t//test quote decline and then check embargo\r\n\t\t\tvar postcode = formData.bikeForm.aboutYourBike.address.postalCode;\r\n\t\t\tportalServiceWrapper.checkEmbargo(postcode, 'Bike')\r\n\t\t\t.then(function(resp) {\r\n\t\t\t\tif (resp) {\r\n\t\t\t\t\t//it is embargo\r\n\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\tstorage.clear();\t\r\n\t\t\t\t\tvar declineObj = {declineType: 'embargo'};\r\n\t\t\t\t\tredirectToDecline(declineObj, \"Policy Was Declined\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.testQuoteDecline(declineQuoteOptions)\r\n\t\t\t\t\t.catch(function (decline) {\r\n\t\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\t\tredirectToDecline(decline, \"Policy Was Declined\");\r\n\t\t\t\t\t});\t\r\n\t\t\t\t}\r\n\t\t\t});\t\t\t\t\t\t\t\t\r\n\t\t}\r\n\r\n\t\tfunction redirectToDecline(decline) {\r\n\t\t\tvar redirectPage = decline.declineType || \"decline\";\r\n\t\t\t$state.go(redirectPage, decline);\r\n\t\t}\r\n\r\n\t\tfunction saveQuoteIfRequired(formData) {\r\n\t\t\tsaveQuoteNotRequiredFor = [\"bike.bike\", \"bike.done\"];\r\n\t\t\tvar notRequired =\r\n\t\t\t\tsaveQuoteNotRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (!notRequired) {\r\n\t\t\t\tsaveQuote(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction triggerGoalCompleteQuoteIfRequired() {\r\n\t\t\tif ($state.$current.name == \"bike.done\") {\r\n\t\t\t\tvar userInputFromRepo = quoteRequestRepository.getUserInput();\r\n\t\t\t\tif (!userInputFromRepo || !userInputFromRepo.email) {\r\n\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\tquoteRequestRepository.update(formData);\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t\tportalServiceWrapper.triggerGoalCompleteQuote();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions =\r\n\t\t\t\tpage == \"payment\"\r\n\t\t\t\t\t? quoteOptions.getRequoteOptions(\"bike.payment\")\r\n\t\t\t\t\t: quoteOptions.getRequoteOptions();\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tconsole.log(err);\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getQuickQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep(\r\n\t\t\t\t$state.current.name\r\n\t\t\t);\r\n\t\t\tif (quickQuoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\tquickQuoteOptions.permutations,\r\n\t\t\t\t\t\tquickQuoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tbroadcastError(err, \"getQuickQuote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction broadcastError(err, msg) {\r\n\t\t\t$rootScope.$broadcast(\"error\", {\r\n\t\t\t\terrorMessage: msg,\r\n\t\t\t\tresponse: err,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction saveQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t// If quoteId found and email found, triggerGoal service quote\r\n\t\t\t\t\tvar qr = quoteRequestRepository.getSaveQuoteRequest(paymentFrequency);\r\n\t\t\t\t\tconsole.log('bikeForm.Control_saveQuote qr', qr);\r\n\t\t\t\t\tif (qr && qr.quoteID && qr.email) {\r\n\t\t\t\t\t\tportalServiceWrapper.triggerGoalSaveQuote();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tif (tokenTimeoutService.isSessionTimedout()) {\r\n\t\t\t\t\t\ttokenTimeoutService.handleTimeout();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbroadcastError(err, \"Save quote error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction proceedToNextStep(formData) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tsaveQuoteIfRequired(formData);\r\n\t\t\ttestDeclineIfRequired(formData);\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t}\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"bikeForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar maData = {\r\n\t\t\t\tstate: quoteModel ? quoteModel.state : null,\r\n\t\t\t\tpostCode: quoteModel ? quoteModel.postCode : null,\r\n\t\t\t\tcampaignCode: quoteModel ? quoteModel.campaignCode : null,\r\n\t\t\t\tnoClaimBonus: quoteModel ? quoteModel.noClaimBonus : null,\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult ? quoteResult.getAnnual() : null,\r\n\t\t\t\tmonthlyResult: quoteResult ? quoteResult.getMonthly() : null,\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\r\n\t\t\tif ($state.current.name == \"bike.done\") {\r\n\t\t\t\tmaData.inceptionDate = moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.address &&\r\n\t\t\t\tquoteModel.address.addressLine1\r\n\t\t\t) {\r\n\t\t\t\tmaData.address =\r\n\t\t\t\t\tquoteModel.address.addressLine1 +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\tquoteModel.address.city;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.gtmPolicyHolder &&\r\n\t\t\t\tquoteModel.gtmPolicyHolder.phoneNumber\r\n\t\t\t) {\r\n\t\t\t\tmaData.contactNumber = quoteModel.gtmPolicyHolder.phoneNumber;\r\n\t\t\t}\r\n\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\r\n\t\t// Payments\r\n\r\n\t\t/**\r\n\t\t * Scrolls a field into view when an error is clicked\r\n\t\t * @param {Object} error Error object with key `name`\r\n\t\t */\r\n\t\t$ctrl.showInView = function (error) {\r\n\t\t\t//console.log(error);\r\n\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]'));\r\n\t\t};\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * determines if a quote is available to enable save button.\r\n\t\t */\r\n\t\t$ctrl.isSaveButtonEnabled = function () {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\treturn formData.rapidEstimateUrl != null;\r\n\t\t};\r\n\r\n\t\t$ctrl.isQuoteAvailable = function () {\r\n\t\t\treturn quoteOptions.getSelectedQuoteResult() !== null;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\toverwritePromoCodeFromQueryString();\r\n\t\t\tvar currentPageName = $ctrl.state.current.name;\r\n\t\t\t$ctrl.displayBack =\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl != null ||\r\n\t\t\t\tcurrentPageName != \"bike.bike\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl &&\r\n\t\t\t\tcurrentPageName === \"bike.bike\"\r\n\t\t\t) {\r\n\t\t\t\tinvalidatePreviousQuote();\r\n\t\t\t}\r\n\t\t\ttriggerGoalCompleteQuoteIfRequired();\r\n\t\t\tprepopulateRetrievedQuote();\r\n\t\t\tapplyPromoCodeThroughLink();\r\n\t\t};\r\n\r\n\t\tfunction overwritePromoCodeFromQueryString() {\r\n\t\t\tvar promoCode = util.getQueryStringByName(\r\n\t\t\t\twindow.location,\r\n\t\t\t\t\"promotionalCode\"\r\n\t\t\t);\r\n\t\t\tif (promoCode) {\r\n\t\t\t\t$ctrl.formData.promotionalCode =\r\n\t\t\t\t\t$ctrl.formData.promotionalCode || {};\r\n\t\t\t\t$ctrl.formData.promotionalCode.promotionalCode = promoCode;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.initQuotePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tvar selectedCoverType = quoteOptions.getSelectedCoverType();\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.bikeForm;\r\n\r\n\t\t\t// getRequote(formData);\r\n\t\t\t$scope.$broadcast(\"requote\");\r\n\r\n\t\t\tif (!form.insuredExcessValue) form.insuredExcessValue = {};\r\n\r\n\t\t\tform.saveOnPremium = form.saveOnPremium || {};\r\n\t\t\tform.saveOnPremium.saveOnYourPremium = selectedCoverType.subType;\r\n\r\n\t\t\tif (selectedCoverType.superType == \"third_party\")\r\n\t\t\t\tform.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft =\r\n\t\t\t\t\tselectedCoverType.subType;\r\n\r\n\t\t\t$ctrl.formData.bikeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initContact = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tsetDefaultContactValues();\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValues() {\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.bikeForm,\r\n\t\t\t\tpostalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\t\tif (form.getStarted.personOrCompany === \"person\") {\r\n\t\t\t\tform.mainPolicyHolder = form.mainPolicyHolder || {};\r\n\t\t\t\tif (\r\n\t\t\t\t\tform.mainPolicyHolder.isMainRiderMainPolicyHolder !== false\r\n\t\t\t\t) {\r\n\t\t\t\t\tform.mainPolicyHolder.isMainRiderMainPolicyHolder = true;\r\n\t\t\t\t\tform.mainPolicyHolder.title =\r\n\t\t\t\t\t\tform.mainPolicyHolder.title ||\r\n\t\t\t\t\t\tform.rider.riders[0].person.title;\r\n\t\t\t\t\tform.mainPolicyHolder.firstName =\r\n\t\t\t\t\t\tform.rider.riders[0].person.firstName;\r\n\t\t\t\t\tform.mainPolicyHolder.lastName =\r\n\t\t\t\t\t\tform.rider.riders[0].person.lastName;\r\n\t\t\t\t\tform.mainPolicyHolder.gender =\r\n\t\t\t\t\t\tform.rider.riders[0].person.gender;\r\n\t\t\t\t\tform.mainPolicyHolder.dateOfBirth =\r\n\t\t\t\t\t\tform.rider.riders[0].person.dateOfBirth;\r\n\r\n\t\t\t\t\tform.mainPolicyHolder.threeYears_restrictedSuspendedDisqualifiedCancelled =\r\n\t\t\t\t\t\tform.rider.riders[0].threeYears_restrictedSuspendedDisqualifiedCancelled;\r\n\t\t\t\t\tform.mainPolicyHolder.threeYears_restrictedSuspendedDisqualifiedCancelledDetails =\r\n\t\t\t\t\t\tform.rider.riders[0].threeYears_restrictedSuspendedDisqualifiedCancelledDetails;\r\n\r\n\t\t\t\t\tform.mainPolicyHolder.threeYears_accidentsClaims =\r\n\t\t\t\t\t\tform.rider.riders[0].threeYears_accidentsClaims;\r\n\t\t\t\t\tform.mainPolicyHolder.threeYears_accidentsClaimsDetails =\r\n\t\t\t\t\t\tform.rider.riders[0].threeYears_accidentsClaimsDetails;\r\n\r\n\t\t\t\t\tform.mainPolicyHolder.fiveYears_chargedOrConvicted =\r\n\t\t\t\t\t\tform.rider.riders[0].fiveYears_chargedOrConvicted;\r\n\t\t\t\t\tform.mainPolicyHolder.fiveYears_chargedOrConvictedDetails =\r\n\t\t\t\t\t\tform.rider.riders[0].fiveYears_chargedOrConvictedDetails;\r\n\r\n\t\t\t\t\tform.mainPolicyHolderContact =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact || {};\r\n\t\t\t\t\tform.mainPolicyHolderContact.postalOption =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalOption || true;\r\n\t\t\t\t\tform.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.emailAddress1 ||\r\n\t\t\t\t\t\tformData.email;\r\n\t\t\t\t\tform.mainPolicyHolderContact.primaryPhone =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.primaryPhone || \"mobile\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\t!!form.mainPolicyHolderContact &&\r\n\t\t\t\t\t!form.mainPolicyHolderContact.address\r\n\t\t\t\t) {\r\n\t\t\t\t\tform.mainPolicyHolderContact.address =\r\n\t\t\t\t\t\tform.aboutYourBike.address;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalOption = false;\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (form.getStarted.personOrCompany === \"company\") {\r\n\t\t\t\tform.aboutCompany = form.aboutCompany || {};\r\n\t\t\t\tform.aboutCompany.name = form.aboutCompany.name || \"\";\r\n\t\t\t\tform.aboutCompany.abn = form.aboutCompany.abn || \"\";\r\n\t\t\t\tform.aboutCompany.email = form.aboutCompany.email || \"\";\r\n\t\t\t\tform.aboutCompany.officePhone =\r\n\t\t\t\t\tform.aboutCompany.officePhone || \"\";\r\n\t\t\t\tform.aboutCompany.companyAddress =\r\n\t\t\t\t\tform.aboutCompany.companyAddress || undefined;\r\n\r\n\t\t\t\tform.companyContact = form.companyContact || {};\r\n\t\t\t\tform.companyContact.postalOption =\r\n\t\t\t\t\tform.companyContact.companyContactDetailsPostalOption ||\r\n\t\t\t\t\ttrue;\r\n\t\t\t\tform.companyContact.companyContactTitle =\r\n\t\t\t\t\tutil.capitalize(form.companyContact.companyContactTitle) ||\r\n\t\t\t\t\tform.rider.riders[0].person.title;\r\n\t\t\t\tform.companyContact.companyContactFirstName =\r\n\t\t\t\t\tform.companyContact.companyContactFirstName ||\r\n\t\t\t\t\tform.rider.riders[0].person.firstName;\r\n\t\t\t\tform.companyContact.companyContactLastName =\r\n\t\t\t\t\tform.companyContact.companyContactLastName ||\r\n\t\t\t\t\tform.rider.riders[0].person.lastName;\r\n\t\t\t\tform.companyContact.companyContactGender =\r\n\t\t\t\t\tparseGender(form.companyContact.companyContactGender) ||\r\n\t\t\t\t\tform.rider.riders[0].person.gender;\r\n\t\t\t\tform.companyContact.companyContactDateOfBirth =\r\n\t\t\t\t\tform.companyContact.companyContactDateOfBirth ||\r\n\t\t\t\t\tform.rider.riders[0].person.dateOfBirth;\r\n\t\t\t\tform.companyContact.companyContactDetailsAddress =\r\n\t\t\t\t\tform.companyContact.companyContactDetailsAddress ||\r\n\t\t\t\t\tform.aboutYourBike.address;\r\n\t\t\t\tform.companyContact.companyContactDetailsEmail =\r\n\t\t\t\t\tform.companyContact.companyContactDetailsEmail ||\r\n\t\t\t\t\tformData.email;\r\n\t\t\t\tform.companyContact.companyContactDetailsPostalAddress =\r\n\t\t\t\t\tform.companyContact.companyContactDetailsPostalAddress ||\r\n\t\t\t\t\tundefined;\r\n\t\t\t\tform.companyContact.primaryPhone =\r\n\t\t\t\t\tform.companyContact.primaryPhone || \"mobile\";\r\n\t\t\t\tform.companyContact.preferredNumber =\r\n\t\t\t\t\tform.companyContact.preferredNumber || \"\";\r\n\t\t\t\tform.companyContact.passwordQuestion = !!form.companyContact\r\n\t\t\t\t\t.enterAQuestion\r\n\t\t\t\t\t? \"customerCreatedQuestion\"\r\n\t\t\t\t\t: \"\" || \"\";\r\n\t\t\t\tform.companyContact.enterAQuestion =\r\n\t\t\t\t\tform.companyContact.enterAQuestion || \"\";\r\n\t\t\t\tform.companyContact.passwordAnswer =\r\n\t\t\t\t\tform.companyContact.passwordAnswer || \"\";\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.companyContact.companyContactDetailsAddress\r\n\t\t\t\t\t\t\t\t.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.companyContact.companyContactDetailsAddress\r\n\t\t\t\t\t\t\t\t.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.companyContact.postalOption = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.bikeForm = form;\r\n\t\t}\r\n\r\n\t\tfunction parseGender(gender) {\r\n\t\t\tif (gender === \"F\") {\r\n\t\t\t\treturn \"female\";\r\n\t\t\t} else if (gender === \"I\") {\r\n\t\t\t\treturn \"intersex\";\r\n\t\t\t} else return \"male\";\r\n\t\t}\r\n\r\n\t\tfunction constructDonePageViewModel() {\r\n\t\t\tvar done = {\r\n\t\t\t\tpolicyNumber: $stateParams.policyNumber,\r\n\t\t\t\taccountNumber: $stateParams.accountNumber,\r\n\t\t\t\tisAwaitingProcess: $stateParams.isAwaitingProcess,\r\n\t\t\t\tpolicyType: quoteOptions.getSelectedCoverType().label,\r\n\t\t\t\tpolicyStartDate: $ctrl.quoteModel.policyStartDate,\r\n\t\t\t\tshowYearMakeModelInSummary: false,\r\n\t\t\t\tsmartLinkURL: $window.qbe.fieldLabels.smartLink.url,\r\n\t\t\t\thashKey: $window.qbe.fieldLabels.smartLink.hashKey,\r\n\t\t\t\temail: $ctrl.quoteModel.email,\r\n\t\t\t\tdescription: \"Motorcycle Insurance\",\r\n\t\t\t\tproductRefs: \"Motorcycle Insurance\",\r\n\t\t\t};\r\n\r\n\t\t\tvar regoNumber = $ctrl.quoteModel.regoNumber || \"\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.quoteModel.bikeForm.tellUsYourRegoNumber &&\r\n\t\t\t\t$ctrl.quoteModel.bikeForm.tellUsYourRegoNumber.regoNumber\r\n\t\t\t) {\r\n\t\t\t\tdone.showYearMakeModelInSummary = true;\r\n\t\t\t}\r\n\r\n\t\t\tdone.regoNumber = regoNumber.toUpperCase();\r\n\r\n\t\t\tif ($ctrl.quoteModel.bikeForm.aboutYourBike.regoDetails) {\r\n\t\t\t\tvar year =\r\n\t\t\t\t\t\t$ctrl.quoteModel.bikeForm.aboutYourBike.regoDetails\r\n\t\t\t\t\t\t\t.modelYear,\r\n\t\t\t\t\tmake =\r\n\t\t\t\t\t\t$ctrl.quoteModel.bikeForm.aboutYourBike.regoDetails\r\n\t\t\t\t\t\t\t.make,\r\n\t\t\t\t\tmodel =\r\n\t\t\t\t\t\t$ctrl.quoteModel.bikeForm.aboutYourBike.regoDetails\r\n\t\t\t\t\t\t\t.model;\r\n\r\n\t\t\t\tdone.yearMakeModel = year + \" \" + make + \" \" + model;\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.quoteModel.bikeForm.mainPolicyHolder) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.bikeForm.mainPolicyHolder.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.bikeForm.mainPolicyHolder.lastName;\r\n\t\t\t} else if ($ctrl.quoteModel.bikeForm.companyContact) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.bikeForm.companyContact.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.bikeForm.companyContact.lastName;\r\n\t\t\t\tdone.email = $ctrl.quoteModel.bikeForm.companyContact.email;\r\n\t\t\t}\r\n\r\n\t\t\tdone.purchaseDate = moment()\r\n\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\treturn done;\r\n\t\t}\r\n\r\n\t\t$ctrl.initDonePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar done = storage.getItem(\"done\");\r\n\t\t\tif (!done || !done.policyNumber) {\r\n\t\t\t\tdone = constructDonePageViewModel();\r\n\t\t\t\t$ctrl.smartLink = smartLinkService.generateLink(done);\r\n\t\t\t\tgtmService.trackTransaction(\r\n\t\t\t\t\t$state.current,\r\n\t\t\t\t\tdone,\r\n\t\t\t\t\t$ctrl.quoteModel\r\n\t\t\t\t);\r\n\t\t\t\tperformMAServices(\"paid\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.storage.clear();\r\n\t\t\tstorage.setItem(\"done\", done);\r\n\t\t\tvar $columns = $(\".columns\").get(0);\r\n\t\t\t$columns.classList.remove(\"print-ready\");\r\n\t\t\t$ctrl.done = done;\r\n\t\t\t$ctrl.done.campaignSteps = {};\r\n\r\n\t\t\t// check if campaign code is valid\r\n\t\t\tif (\r\n\t\t\t\tquoteModel.quoteResult.response.isCampaignCodeValid ||\r\n\t\t\t\tquoteModel.quoteResult.response.isGiftCardApplied\r\n\t\t\t) {\r\n\t\t\t\t// get campaign next steps\r\n\t\t\t\t$ctrl.done.campaignSteps = campaignService.getCampaignConfig(\r\n\t\t\t\t\tquoteModel.quoteResult.response.campaignCode,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else $ctrl.done.campaignSteps.isCampaignCodeValid = false;\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"submit-feedback\", submitFeedback);\r\n\r\n\t\tfunction submitFeedback() {\r\n\t\t\tif ($ctrl.done.policyNumber != null && $ctrl.smartLink != null) {\r\n\t\t\t\twindow.open($ctrl.smartLink, \"_blank\");\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log(\"No Smartlink generated!\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// TODO: fix this to not use timeout\r\n\t\tsetTimeout(function () {\r\n\t\t\tQBE.expandCollapse.init();\r\n\t\t}, 1000);\r\n\r\n\t\t$ctrl.clear = function () {\r\n\t\t\t$scope.$broadcast(\"clear\");\r\n\t\t};\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = $scope.bikeForm.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgetUserInput();\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", {\r\n\t\t\t\tmodal: \"saveQuote\",\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.moveToStep = function (step) {\r\n\t\t\t$state.go(dynamicRouter.getState(step));\r\n\t\t};\r\n\t\t$ctrl.moveToPage = function (page) {\r\n\t\t\t$state.go(page);\r\n\t\t};\r\n\t},\r\n]);\r\n","angular.module('qbePortal.rapidEstimate.bike')\r\n\t.controller('BikeRapidEstimateController', [\r\n\t\t'$scope',\r\n\t\t'$state',\r\n\t\t'userInputRepository',\r\n\t\t'labelService',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteOptions',\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'gtmService',\r\n\t\t'$sce',\r\n\t\tfunction($scope, $state, userInputRepository, labelService, portalServiceWrapper, quoteOptions, util, serviceResponseRepository, gtmService, $sce) {\r\n\t\t\tvar vm = this;\r\n\t\t\tvm.formData = {};\r\n\t\t\tvm.promoCode = util.getQueryStringByName(window.location, 'promotionalCode') ;\r\n\t\t\tconsole.log( vm.promoCode ) ; \r\n\t\t\tvm.elementName = 'Form Controller';\r\n\t\t\tvm.validationErrors = null;\r\n\t\t\tvm.sections = {};\r\n\r\n\t\t\tvm.initPage= function() {\r\n\t\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t\tvm.formData = userInputRepository.get({\r\n\t\t\t\t\tbikeForm: {\r\n\t\t\t\t\t\ttellUsMore: {\r\n\t\t\t\t\t\t\tpromotionalCode: vm.promoCode\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t\r\n\r\n\t\t\tvm.registerSection = function (name, init, getValueFn) {\r\n\t\t\t\tvm.sections[name] = getValueFn;\r\n\t\t\t}\r\n\r\n\t\t\t// Submit form to get quickQuote\r\n\t\t\tvm.submit = function(event, form) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tgtmService.trackEvent('rapid-estimate-submit') ;\r\n\r\n\t\t\t\tvm.showErrorSummary = false;\r\n\t\t\t\tisInvalid = form.$invalid;\r\n\r\n\t\t\t\tif (isInvalid) {\r\n\t\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t\tvm.showErrorSummary = true;\r\n\t\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\t\tscrollViewTo($('#combinedValidationListing')) ;\r\n\t\t\t\t\tconsole.info(' Form is not valid');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$scope.$root.$broadcast('loading-animation-start');\r\n\r\n\t\t\t\t// Populate formData\r\n\t\t\t\tvar formData = {};\r\n\t\t\t\tfor (var key in this.sections) {\r\n\t\t\t\t\tformData[key] = this.sections[key]();\r\n\t\t\t\t}\r\n\t\t\t\tvar now = moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY');\r\n\t\t\t\tformData.bikeForm.getStarted = {\r\n\t\t\t\t\tpersonOrCompany: 'person',\r\n\t\t\t\t\tpolicyStartDate: now\r\n\t\t\t\t};\r\n\t\t\t\tformData.bikeForm.rider.riders = [];\r\n\t\t\t\tformData.bikeForm.rider.riders[0] = {\r\n\t\t\t\t\tperson: util.deepClone(formData.bikeForm.rider)\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(formData.bikeForm.tellUsMore) {\r\n\t\t\t\t\tformData.email = formData.bikeForm.tellUsMore.email;\r\n\t\t\t\t\tformData.bikeForm.promotionalCode = {\r\n\t\t\t\t\t\tpromotionalCode: formData.bikeForm.tellUsMore.promotionalCode\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep('rapidEstimate') ;\r\n\r\n\t\t\t\tportalServiceWrapper.getQuickQuote(quickQuoteOptions.permutations, quickQuoteOptions.rules)\r\n\t\t\t\t\t.then(function(resp) {\r\n\t\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t\tvar quoteResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\t\t\t\t\tserviceResponseRepository.update('rapidEstimate' , quoteResults ) ;\r\n\t\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\t\tformData: formData,\r\n\t\t\t\t\t\t\tresults : quoteResults,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\t\t\terrorMessage: 'getQuickQuote error',\r\n\t\t\t\t\t\t\tresponse: err\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t};\r\n\r\n\t\t\t/**\r\n\t\t\t * Scrolls a field into view when an error is clicked\r\n\t\t\t * @param {Object} error Error object with key `name`\r\n\t\t\t */\r\n\t\t\tvm.showInView = function (error) {\r\n\t\t\t\t//console.log(error);\r\n\t\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]')) ;\r\n\t\t\t}\r\n\r\n\t\t\tfunction scrollViewTo($element) {\r\n\t\t\t\tvar offset = $element.offset();\r\n\t\t\t\tif ( offset ) {\r\n\t\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.getSectionDescriptionFor = function (fieldName) {\r\n\t\t\t\treturn $sce.trustAsHtml(labelService.getSectionDescriptionFor(fieldName));\r\n\t\t\t}\r\n\r\n\t\t\t// Scroll to estimates once they're loaded\r\n\t\t\t$scope.$root.$on('show-rapid-estimates', function() {\r\n\t\t\t\tvm.showRapidEstimatesPanel = true;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$root.$on('rapid-estimates-panel-initialised', function() {\r\n\t\t \t\tvar rapidEstimateResults = serviceResponseRepository.getLastResponseFrom('rapidEstimate') ;\r\n\t\t\t\tif ( rapidEstimateResults ) {\r\n\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\tresults: rapidEstimateResults,\r\n\t\t\t\t\t\tformData: userInputRepository.get()\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t]);\r\n","angular.module(\"qbePortal\").controller(\"CaravanFormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteOptions\",\r\n\t\"paymentService\",\r\n\t\"quoteModelFactory\",\r\n\t\"dynamicRouter\",\r\n\t\"portalServiceWrapper\",\r\n\t\"MAService\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"$q\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"quoteRequestRepository\",\r\n\t\"tokenTimeoutService\",\r\n\t\"$compile\",\r\n\t\"smartLinkService\",\r\n\t\"campaignService\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteOptions,\r\n\t\tpaymentService,\r\n\t\tquoteModelFactory,\r\n\t\tdynamicRouter,\r\n\t\tportalServiceWrapper,\r\n\t\tMAService,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$q,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository,\r\n\t\ttokenTimeoutService,\r\n\t\t$compile,\r\n\t\tsmartLinkService,\r\n\t\tcampaignService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tstorage.removeItem(\"policy-date-input\");\r\n\r\n\t\t\tvar stepConditions = {\r\n\t\t\t\t\"caravan.payment\": function () {\r\n\t\t\t\t\treturn $state.$current.name != \"caravan.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"caravan.done\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"caravan.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"caravan.policy-start-date\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"caravan.policy-start-date\";\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t$ctrl.elementName = \"Form Controller\";\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sideBarEmail = null;\r\n\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t$ctrl.saveOnExit = false;\r\n\t\t$ctrl.smartLink = null;\r\n\t\t$ctrl.goToNextStep = true;\r\n\r\n\t\t$window.onbeforeunload = function (event) {\r\n\t\t\texitSaveQuote();\r\n\t\t\tif ($ctrl.saveOnExit) {\r\n\t\t\t\t$rootScope.$digest();\r\n\t\t\t\treturn \"Are you sure you want to leave?\";\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"session-save-quote\", exitSaveQuote);\r\n\r\n\t\tfunction exitSaveQuote() {\r\n\t\t\tvar emailAddress = angular\r\n\t\t\t\t.element(\"div\")\r\n\t\t\t\t.find(\"[label-key=yourEmailAddress]\")\r\n\t\t\t\t.val();\r\n\r\n\t\t\tif (dynamicRouter.getPageTitle() != \"Payment\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.quoteModel.email != null ||\r\n\t\t\t\t\t$ctrl.sideBarEmail != null ||\r\n\t\t\t\t\temailAddress != \"\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tif ($ctrl.quoteModel && $ctrl.quoteModel.quoteResult) {\r\n\t\t\t\t\t\t$ctrl.saveOnExit = true;\r\n\t\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\t\tvar paymentFrequency = \"everyyear\";\r\n\r\n\t\t\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\t\t\t\t\tquote: \"true\",\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} else $rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tcaravanForm: {\r\n\t\t\t\t\tgetStarted: {\r\n\t\t\t\t\t\tpolicyStartDate: moment()\r\n\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\t\t},\r\n\t\t\t\t\taboutYourCaravan: {\r\n\t\t\t\t\t\tvehicleType: \"caravan\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdiscountOptions: {\r\n\t\t\t\t\t\tdiscountLayup: false,\r\n\t\t\t\t\t\tonSiteDiscount: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsaveOnPremium: {\r\n\t\t\t\t\t\tsaveOnYourPremium: \"standard\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmainPolicyHolderContact: {\r\n\t\t\t\t\t\tprimaryPhone: \"mobile\",\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t};\r\n\r\n\t\t\tvar defaultStateExcess = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\t\t$ctrl.quoteModel.state\r\n\t\t\t);\r\n\t\t\tif (defaultStateExcess != null) {\r\n\t\t\t\tvar tempObj = {\r\n\t\t\t\t\tcaravanForm: {\r\n\t\t\t\t\t\texcess: {\r\n\t\t\t\t\t\t\tvoluntaryVehicleExcess: defaultStateExcess,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tdefaultValues = Object.extend(defaultValues, tempObj);\r\n\t\t\t}\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalidate-quotes\", invalidatePreviousQuote);\r\n\r\n\t\tfunction invalidatePreviousQuote() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tstorage.removeItem(\"policy-address\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to submit the form\r\n\t\t */\r\n\t\t//hadles form submit from child elements\r\n\t\t$scope.$on(\"form-submit\", function (event, formName) {\r\n\t\t\t$ctrl.submit($scope[formName]);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to save the form\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-save-quote\", function (event, data) {\r\n\t\t\t$ctrl.sideBarEmail = data;\r\n\t\t\t$ctrl.save();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to assign the email address\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-assign-mail\", function (event, data) {\r\n\t\t\tif (data != \"\") $ctrl.sideBarEmail = data;\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, form) {\r\n\t\t\tvar isValid = !form || form.$valid;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tif (isValid) {\r\n\t\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tgetRequote(formData, null, function (resp) {\r\n\t\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tdisplayFormErrors();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbFormSection.directive to move to a page\r\n\t\t */\r\n\t\t$scope.$on(\"moveToPage\", function (event, page) {\r\n\t\t\t$ctrl.moveToPage(page);\r\n\t\t});\r\n\r\n\t\tfunction prepopulateRetrievedQuote() {\r\n\t\t\tif ($stateParams.quoteNo && $stateParams.email) {\r\n\t\t\t\tgtmService.trackEvent(\"retrieve-quote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.retrieveSavedQuote(\r\n\t\t\t\t\t\t$stateParams.quoteNo,\r\n\t\t\t\t\t\t$stateParams.email\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (transformedQuote) {\r\n\t\t\t\t\t\tconsole.info(transformedQuote);\r\n\t\t\t\t\t\t$q.all([\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshAddress(\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCaravan.address\r\n\t\t\t\t\t\t\t),\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshCaravanDetails(\r\n\t\t\t\t\t\t\t\ttransformedQuote.caravanInfo.vgiId,\r\n\t\t\t\t\t\t\t\tstorage.getItem('policy-start-date'))\r\n\t\t\t\t\t\t]).then(function (resps) {\r\n\t\t\t\t\t\t\tvar caravanFormData = ($ctrl.formData.caravanForm = transformedQuote);\r\n\t\t\t\t\t\t\tvar serviceResponse = storage.getItem(\r\n\t\t\t\t\t\t\t\t\"service-response\"\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t$ctrl.formData.email = $stateParams.email;\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"policy-address\",\r\n\t\t\t\t\t\t\t\tserviceResponse.quote.policyAddress\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (!caravanFormData.aboutYourCaravan)\r\n\t\t\t\t\t\t\t\tcaravanFormData.aboutYourCaravan = {};\r\n\t\t\t\t\t\t\tcaravanFormData.aboutYourCaravan.address =\r\n\t\t\t\t\t\t\t\tresps[0].data;\r\n\t\t\t\t\t\t\tuserInputRepository.update($ctrl.formData);\r\n\t\t\t\t\t\t\tstorage.setItem(\"retrieve\", true);\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tmoment()\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\") >\r\n\t\t\t\t\t\t\t\tmoment(serviceResponse.quote.periodStartDate)\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\")\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\t\"policy-date-input\",\r\n\t\t\t\t\t\t\t\t\t$ctrl.formData\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"caravan.policy-start-date\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"caravan.caravan\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tvar expiredQuote = storage.getItem(\"expired-quote\");\r\n\t\t\t\t\t\tif (expiredQuote.displayStatus == \"Expired\") {\r\n\t\t\t\t\t\t\tstorage.removeItem(\"expired-quote\");\r\n\t\t\t\t\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t\t\t\t\twindow.qbe.fieldLabels.expiredQuoteRedirect\r\n\t\t\t\t\t\t\t\t\t.caravanExpired\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction applyPromoCodeThroughLink() {\r\n\t\t\tif ($stateParams.promotionalCode) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\t\t\t\tif (formData.caravanForm) {\r\n\t\t\t\t\tif (!formData.caravanForm.tellUsABitMore) {\r\n\t\t\t\t\t\tformData.caravanForm.tellUsABitMore = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tformData.caravanForm.tellUsABitMore.promotionalCode =\r\n\t\t\t\t\t\t$stateParams.promotionalCode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.sideBarEmail != null) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.caravanForm.tellUsABitMore &&\r\n\t\t\t\t\tformData.caravanForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.caravanForm.tellUsABitMore.yourEmailAddress =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.caravanForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tformData.caravanForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.caravanForm.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t}\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction displayFormErrors() {\r\n\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\tdisplayFormErrors();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgtmService.trackEvent(\"next\");\r\n\r\n\t\t\tsetDefaultContactValuesIfRequired();\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tvar quickQuote = getQuickQuote(formData, function () {\r\n\t\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t\t\t$rootScope.$broadcast(\"perform-ma-service\", \"next\");\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t});\r\n\r\n\t\t\tif (!quickQuote) {\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValuesIfRequired(formData) {\r\n\t\t\tvar contactValuesRequired = [\"caravan.contact\"];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tcontactValuesRequired.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\tsetDefaultContactValues();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDeclineIfRequired(formData) {\r\n\t\t\tvar declineTestRequiredFor = [\r\n\t\t\t\t\"caravan.drivers\",\r\n\t\t\t\t\"caravan.caravan\",\r\n\t\t\t\t\"caravan.quote\",\r\n\t\t\t\t\"caravan.contact\",\r\n\t\t\t];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tdeclineTestRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\ttestDecline(formData, nextStep);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDecline(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\t\t\t\t\t\r\n\t\t\t\r\n\t\t\tvar declineQuoteOptions = quoteOptions.getTestQuoteDeclineOptions(\r\n\t\t\t\t$state.$current.name\r\n\t\t\t);\r\n\t\t\tvar postcode = formData.caravanForm.aboutYourCaravan.address.postalCode;\r\n\t\t\tportalServiceWrapper.checkEmbargo(postcode, 'Caravan')\r\n\t\t\t.then(function(resp) {\r\n\t\t\t\tif (resp) {\r\n\t\t\t\t\t//it is embargo\r\n\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\tvar declineObj = {declineType: 'embargo'};\r\n\t\t\t\t\tredirectToDecline(declineObj, \"Policy Was Declined\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.testQuoteDecline(declineQuoteOptions)\r\n\t\t\t\t\t.then(function (resp) {\t\t\t\t\t\t\r\n\t\t\t\t\t\t// post testQuoteDecline\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tangular.isDefined(\r\n\t\t\t\t\t\t\t\tresp.data[0].caravans[0].isEligibleforSDExemption\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"stamp-duty\",\r\n\t\t\t\t\t\t\t\tresp.data[0].caravans[0].isEligibleforSDExemption\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstorage.setItem(\"stamp-duty\", false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ($ctrl.goToNextStep) callback();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (decline) {\r\n\t\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\t\tredirectToDecline(decline, \"Policy Was Declined\");\r\n\t\t\t\t\t});\t\t\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\t\t\t\t\r\n\t\t}\r\n\r\n\t\tfunction redirectToDecline(decline) {\r\n\t\t\tvar redirectPage = decline.declineType || \"decline\";\r\n\t\t\t$state.go(redirectPage, decline);\r\n\t\t}\r\n\r\n\t\tfunction saveQuoteIfRequired(formData) {\r\n\t\t\tsaveQuoteNotRequiredFor = [\"caravan.caravan\", \"caravan.done\"];\r\n\t\t\tvar notRequired =\r\n\t\t\t\tsaveQuoteNotRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (!notRequired) {\r\n\t\t\t\tsaveQuote(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions =\r\n\t\t\t\tpage == \"payment\"\r\n\t\t\t\t\t? quoteOptions.getRequoteOptions(\"caravan.payment\")\r\n\t\t\t\t\t: quoteOptions.getRequoteOptions();\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tconsole.log(err);\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getQuickQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep(\r\n\t\t\t\t$state.current.name\r\n\t\t\t);\r\n\t\t\tif (quickQuoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\tquickQuoteOptions.permutations,\r\n\t\t\t\t\t\tquickQuoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tbroadcastError(err, \"getQuickQuote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction broadcastError(err, msg) {\r\n\t\t\t$rootScope.$broadcast(\"error\", {\r\n\t\t\t\terrorMessage: msg,\r\n\t\t\t\tresponse: err,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction saveQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\tvar qr = quoteRequestRepository.getSaveQuoteRequest(paymentFrequency);\r\n\t\t\t\t\tif (qr && qr.quoteID && qr.email && $state.$current.name !== \"caravan.done\") {\r\n\t\t\t\t\t\tportalServiceWrapper.triggerGoalSaveQuote();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tif (tokenTimeoutService.isSessionTimedout()) {\r\n\t\t\t\t\t\ttokenTimeoutService.handleTimeout();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$ctrl.goToNextStep = false;\r\n\t\t\t\t\t\tbroadcastError(err, \"Save quote error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction proceedToNextStep(formData) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tsaveQuoteIfRequired(formData);\t\t\t\r\n\t\t\ttestDeclineIfRequired(formData);\r\n\t\t}\r\n\r\n\t\tfunction nextStep() {\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t}\r\n\r\n\t\tfunction triggerGoalCompleteQuoteIfRequired() {\r\n\t\t\tif ($state.$current.name == \"caravan.done\") {\r\n\t\t\t\tvar userInputFromRepo = quoteRequestRepository.getUserInput();\r\n\t\t\t\tif (!userInputFromRepo || !userInputFromRepo.email) {\r\n\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\tquoteRequestRepository.update(formData);\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t\tportalServiceWrapper.triggerGoalCompleteQuote();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"caravanForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar maData = {\r\n\t\t\t\tstate: quoteModel ? quoteModel.state : null,\r\n\t\t\t\tpostCode: quoteModel ? quoteModel.postCode : null,\r\n\t\t\t\tcampaignCode: quoteModel ? quoteModel.campaignCode : null,\r\n\t\t\t\tnoClaimBonus: quoteModel ? quoteModel.noClaimBonus : null,\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult ? quoteResult.getAnnual() : null,\r\n\t\t\t\tmonthlyResult: quoteResult ? quoteResult.getMonthly() : null,\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\r\n\t\t\tif ($state.current.name == \"caravan.done\") {\r\n\t\t\t\tmaData.inceptionDate = moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.address &&\r\n\t\t\t\tquoteModel.address.addressLine1\r\n\t\t\t) {\r\n\t\t\t\tmaData.address =\r\n\t\t\t\t\tquoteModel.address.addressLine1 +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\tquoteModel.address.city;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.mainPolicyHolder &&\r\n\t\t\t\tquoteModel.mainPolicyHolder.primaryPhoneNumber\r\n\t\t\t) {\r\n\t\t\t\tmaData.contactNumber =\r\n\t\t\t\t\tquoteModel.mainPolicyHolder.primaryPhoneNumber;\r\n\t\t\t}\r\n\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\r\n\t\t// Payments\r\n\r\n\t\t/**\r\n\t\t * Scrolls a field into view when an error is clicked\r\n\t\t * @param {Object} error Error object with key `name`\r\n\t\t */\r\n\t\t$ctrl.showInView = function (error) {\r\n\t\t\t//console.log(error);\r\n\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]'));\r\n\t\t};\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * determines if a quote is available to enable save button.\r\n\t\t */\r\n\t\t$ctrl.isSaveButtonEnabled = function () {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\treturn formData.rapidEstimateUrl != null;\r\n\t\t};\r\n\r\n\t\t$ctrl.isQuoteAvailable = function () {\r\n\t\t\treturn quoteOptions.getSelectedQuoteResult() !== null;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\toverwritePromoCodeFromQueryString();\r\n\t\t\tvar currentPageName = $ctrl.state.current.name;\r\n\t\t\t$ctrl.displayBack =\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl != null ||\r\n\t\t\t\tcurrentPageName != \"caravan.caravan\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl &&\r\n\t\t\t\tcurrentPageName == \"caravan.caravan\"\r\n\t\t\t) {\r\n\t\t\t\tinvalidatePreviousQuote();\r\n\t\t\t}\r\n\t\t\ttriggerGoalCompleteQuoteIfRequired();\r\n\t\t\tprepopulateRetrievedQuote();\r\n\t\t\tapplyPromoCodeThroughLink();\r\n\t\t};\r\n\r\n\t\tfunction overwritePromoCodeFromQueryString() {\r\n\t\t\tvar promoCode = util.getQueryStringByName(\r\n\t\t\t\twindow.location,\r\n\t\t\t\t\"promotionalCode\"\r\n\t\t\t);\r\n\t\t\tif (promoCode) {\r\n\t\t\t\t$ctrl.formData.promotionalCode =\r\n\t\t\t\t\t$ctrl.formData.promotionalCode || {};\r\n\t\t\t\t$ctrl.formData.promotionalCode.promotionalCode = promoCode;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.initDriversPage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.caravanForm;\r\n\r\n\t\t\tif (form.sumInsured == null) form.sumInsured = {};\r\n\r\n\t\t\t// Set agreed value default\r\n\t\t\tif (\r\n\t\t\t\tform.sumInsured.agreedValue === undefined &&\r\n\t\t\t\tform.aboutYourContents !== undefined &&\r\n\t\t\t\tform.aboutYourContents.agreedValue !== undefined\r\n\t\t\t)\r\n\t\t\t\tform.sumInsured.agreedValue =\r\n\t\t\t\t\tform.aboutYourContents.agreedValue;\r\n\t\t\telse if (form.caravanDetails)\r\n\t\t\t\tform.sumInsured.agreedValue = form.caravanDetails.purchasePrice;\r\n\r\n\t\t\t// Set annexe value default\r\n\t\t\tif (\r\n\t\t\t\tform.sumInsured.annexeReplacementCost === undefined &&\r\n\t\t\t\tform.aboutYourContents !== undefined &&\r\n\t\t\t\tform.aboutYourContents.annexeReplacementCost !== undefined\r\n\t\t\t)\r\n\t\t\t\tform.sumInsured.annexeReplacementCost =\r\n\t\t\t\t\tform.aboutYourContents.annexeReplacementCost;\r\n\r\n\t\t\t$ctrl.formData.caravanForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initQuotePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\t// var selectedCoverType = quoteOptions.getSelectedCoverType() ;\r\n\t\t\t// var formData = getUserInput(),\r\n\t\t\t// \tform = formData.bikeForm;\r\n\t\t\t//\r\n\t\t\t// // getRequote(formData);\r\n\t\t\t// $scope.$broadcast('requote') ;\r\n\t\t\t//\r\n\t\t\t// if ( ! form.insuredExcessValue )\r\n\t\t\t// \tform.insuredExcessValue = {} ;\r\n\t\t\t//\r\n\t\t\t// form.saveOnPremium = form.saveOnPremium || {} ;\r\n\t\t\t// form.saveOnPremium.saveOnYourPremium = selectedCoverType.subType ;\r\n\t\t\t//\r\n\t\t\t// if ( selectedCoverType.superType == 'third_party')\r\n\t\t\t// \tform.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft = selectedCoverType.subType ;\r\n\t\t\t//\r\n\t\t\t// $ctrl.formData.bikeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initContact = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tsetDefaultContactValues();\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValues() {\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.caravanForm,\r\n\t\t\t\tpostalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\t\tform.tellUsYourRegoNumber = form.tellUsYourRegoNumber || {};\r\n\r\n\t\t\tif ($ctrl.quoteModel.isCaravanRegistered) {\r\n\t\t\t\tform.tellUsYourRegoNumber.regoNumber =\r\n\t\t\t\t\t$ctrl.quoteModel.regoNumber;\r\n\t\t\t}\r\n\r\n\t\t\tform.mainPolicyHolder = form.mainPolicyHolder || {};\r\n\r\n\t\t\tif (form.mainPolicyHolder.isMainDriverMainPolicyHolder !== false) {\r\n\t\t\t\tform.mainPolicyHolder.isMainDriverMainPolicyHolder = true;\r\n\r\n\t\t\t\tform.mainPolicyHolder.title =\r\n\t\t\t\t\tform.mainPolicyHolder.title ||\r\n\t\t\t\t\tform.driver.drivers[0].person.title;\r\n\t\t\t\tform.mainPolicyHolder.firstName =\r\n\t\t\t\t\tform.driver.drivers[0].person.firstName;\r\n\t\t\t\tform.mainPolicyHolder.lastName =\r\n\t\t\t\t\tform.driver.drivers[0].person.lastName;\r\n\t\t\t\tform.mainPolicyHolder.gender =\r\n\t\t\t\t\tform.driver.drivers[0].person.gender;\r\n\t\t\t\tform.mainPolicyHolder.dateOfBirth =\r\n\t\t\t\t\tform.driver.drivers[0].person.dateOfBirth;\r\n\r\n\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffences =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffences;\r\n\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffencesDetails =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\tform.mainPolicyHolder.fourYears_licenceRSDC =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_licenceRSDC;\r\n\t\t\t\tform.mainPolicyHolder.fourYears_licenceRSDCDetails =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_licenceRSDCDetails;\r\n\r\n\t\t\t\tform.mainPolicyHolder.fourYears_vehicleAccidentsClaims =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_vehicleAccidentsClaims;\r\n\t\t\t\tform.mainPolicyHolder.fourYears_vehicleAccidentsClaimsDetails =\r\n\t\t\t\t\tform.driver.drivers[0].fourYears_vehicleAccidentsClaimsDetails;\r\n\r\n\t\t\t\tform.mainPolicyHolder.tenYears_chargedOrConvictedOffences =\r\n\t\t\t\t\tform.driver.drivers[0].tenYears_chargedOrConvictedOffences;\r\n\t\t\t\tform.mainPolicyHolder.tenYears_chargedOrConvictedOffencesDetails =\r\n\t\t\t\t\tform.driver.drivers[0].tenYears_chargedOrConvictedOffencesDetails;\r\n\r\n\t\t\t\tform.mainPolicyHolderContact =\r\n\t\t\t\t\tform.mainPolicyHolderContact || {};\r\n\t\t\t\tform.mainPolicyHolderContact.postalOption = true;\r\n\t\t\t\tform.mainPolicyHolderContact.emailAddress1 = formData.email;\r\n\t\t\t}\r\n\r\n\t\t\tif (form.mainPolicyHolderContact.address == undefined) {\r\n\t\t\t\tform.mainPolicyHolderContact.address =\r\n\t\t\t\t\tform.aboutYourCaravan.address;\r\n\t\t\t}\r\n\r\n\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.address.addressLine1 &&\r\n\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.address.postalCode\r\n\t\t\t\t) {\r\n\t\t\t\t\tform.mainPolicyHolderContact.postalOption = false;\r\n\t\t\t\t\tform.mainPolicyHolderContact.postalAddress = postalAddress;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.caravanForm = form;\r\n\t\t}\r\n\r\n\t\tfunction constructDonePageViewModel() {\r\n\t\t\tvar regoNumber = $ctrl.quoteModel.regoNumber || \"\";\r\n\r\n\t\t\tvar done = {\r\n\t\t\t\tvehicleType: $ctrl.quoteModel.vehicleType,\r\n\t\t\t\tpolicyNumber: $stateParams.policyNumber,\r\n\t\t\t\taccountNumber: $stateParams.accountNumber,\r\n\t\t\t\tisAwaitingProcess: $stateParams.isAwaitingProcess,\r\n\t\t\t\tpolicyType: quoteOptions.getSelectedCoverType().label,\r\n\t\t\t\tpolicyStartDate: $ctrl.quoteModel.policyStartDate,\r\n\t\t\t\tyearMakeModel: $ctrl.quoteModel.yearMakeModel,\r\n\t\t\t\tregoNumber: regoNumber.toUpperCase(),\r\n\t\t\t\tpurchaseDate: moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\tsmartLinkURL: $window.qbe.fieldLabels.smartLink.url,\r\n\t\t\t\thashKey: $window.qbe.fieldLabels.smartLink.hashKey,\r\n\t\t\t\temail: $ctrl.quoteModel.email,\r\n\t\t\t\tdescription: \"Caravan Insurance\",\r\n\t\t\t\tproductRefs: \"Caravan Insurance\",\r\n\t\t\t};\r\n\r\n\t\t\tif ($ctrl.quoteModel.caravanForm.mainPolicyHolder) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.caravanForm.mainPolicyHolder.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.caravanForm.mainPolicyHolder.lastName;\r\n\t\t\t} else if ($ctrl.quoteModel.caravanForm.companyContact) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.caravanForm.companyContact.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.caravanForm.companyContact.lastName;\r\n\t\t\t\tdone.email = $ctrl.quoteModel.caravanForm.companyContact.email;\r\n\t\t\t}\r\n\r\n\t\t\treturn done;\r\n\t\t}\r\n\r\n\t\t$ctrl.initDonePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar done = storage.getItem(\"done\");\r\n\t\t\tif (!done || !done.policyNumber) {\r\n\t\t\t\tdone = constructDonePageViewModel();\r\n\t\t\t\t$ctrl.smartLink = smartLinkService.generateLink(done);\r\n\t\t\t\tgtmService.trackTransaction(\r\n\t\t\t\t\t$state.current,\r\n\t\t\t\t\tdone,\r\n\t\t\t\t\t$ctrl.quoteModel\r\n\t\t\t\t);\r\n\t\t\t\tperformMAServices(\"paid\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.storage.clear();\r\n\t\t\tstorage.setItem(\"done\", done);\r\n\t\t\tvar $columns = $(\".columns\").get(0);\r\n\t\t\t$columns.classList.remove(\"print-ready\");\r\n\t\t\t$ctrl.done = done;\r\n\t\t\t$ctrl.done.campaignSteps = {};\r\n\r\n\t\t\t// check if campaign code is valid\r\n\t\t\tif (\r\n\t\t\t\tquoteModel.quoteResult.response.isCampaignCodeValid ||\r\n\t\t\t\tquoteModel.quoteResult.response.isGiftCardApplied\r\n\t\t\t) {\r\n\t\t\t\t// get campaign next steps\r\n\t\t\t\t$ctrl.done.campaignSteps = campaignService.getCampaignConfig(\r\n\t\t\t\t\tquoteModel.quoteResult.response.campaignCode,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else $ctrl.done.campaignSteps.isCampaignCodeValid = false;\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"submit-feedback\", submitFeedback);\r\n\r\n\t\tfunction submitFeedback() {\r\n\t\t\tif ($ctrl.done.policyNumber != null && $ctrl.smartLink != null) {\r\n\t\t\t\twindow.open($ctrl.smartLink, \"_blank\");\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log(\"No Smartlink generated!\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// TODO: fix this to not use timeout\r\n\t\tsetTimeout(function () {\r\n\t\t\tQBE.expandCollapse.init();\r\n\t\t}, 1000);\r\n\r\n\t\t$ctrl.clear = function () {\r\n\t\t\t$scope.$broadcast(\"clear\");\r\n\t\t};\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = $scope.caravanForm.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgetUserInput();\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", {\r\n\t\t\t\tmodal: \"saveQuote\",\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.moveToStep = function (step) {\r\n\t\t\t$state.go(dynamicRouter.getState(step));\r\n\t\t};\r\n\t\t$ctrl.moveToPage = function (page) {\r\n\t\t\t$state.go(page);\r\n\t\t};\r\n\t},\r\n]);\r\n","angular.module('qbePortal.rapidEstimate.caravan')\r\n\t.controller('CaravanRapidEstimateController', [\r\n\t\t'$scope',\r\n\t\t'$state',\r\n\t\t'userInputRepository',\r\n\t\t'labelService',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteOptions',\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'gtmService',\r\n\t\t'$sce',\r\n\t\tfunction($scope, $state, userInputRepository, labelService, portalServiceWrapper, quoteOptions, util, serviceResponseRepository, gtmService, $sce) {\r\n\t\t\tvar vm = this;\r\n\t\t\tvm.formData = {};\r\n\t\t\tvm.elementName = 'Form Controller';\r\n\t\t\tvm.validationErrors = null;\r\n\t\t\tvm.sections = {};\r\n\t\t\tvm.promoCode = util.getQueryStringByName(window.location, 'promotionalCode') ;\r\n\r\n\t\t\tvm.initPage= function() {\r\n\t\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t\tvm.formData = {\r\n\t\t\t\t\tcaravanForm: {\r\n\t\t\t\t\t\taboutYourCaravan: {\r\n\t\t\t\t\t\t\tvehicleType: 'caravan'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttellUsMore: {\r\n\t\t\t\t\t\t\tpromotionalCode: vm.promoCode\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.registerSection = function (name, init, getValueFn) {\r\n\t\t\t\tvm.sections[name] = getValueFn;\r\n\t\t\t}\r\n\r\n\t\t\t// Submit form to get quickQuote\r\n\t\t\tvm.submit = function(event, form) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tgtmService.trackEvent('rapid-estimate-submit') ;\r\n\r\n\t\t\t\tvm.showErrorSummary = false;\r\n\t\t\t\tisInvalid = form.$invalid;\r\n\r\n\t\t\t\tif (isInvalid) {\r\n\t\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t\tvm.showErrorSummary = true;\r\n\t\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\t\tscrollViewTo($('#combinedValidationListing')) ;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$scope.$root.$broadcast('loading-animation-start');\r\n\r\n\t\t\t\t// Populate formData\r\n\t\t\t\tvar formData = {};\r\n\t\t\t\tfor (var key in this.sections) {\r\n\t\t\t\t\tformData[key] = this.sections[key]();\r\n\t\t\t\t}\r\n\t\t\t\tvar now = moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY');\r\n\t\t\t\tformData.caravanForm.getStarted = {\r\n\t\t\t\t\tpolicyStartDate: now\r\n\t\t\t\t};\r\n\t\t\t\tformData.caravanForm.driver.drivers = [];\r\n\t\t\t\tformData.caravanForm.driver.drivers[0] = {\r\n\t\t\t\t\tperson: util.deepClone(formData.caravanForm.driver)\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(formData.caravanForm.tellUsMore) {\r\n\t\t\t\t\tformData.email = formData.caravanForm.tellUsMore.email;\r\n\t\t\t\t\tformData.caravanForm.promotionalCode = {\r\n\t\t\t\t\t\tpromotionalCode: formData.caravanForm.tellUsMore.promotionalCode\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep('rapidEstimate') ;\r\n\r\n\t\t\t\tportalServiceWrapper.getQuickQuote(quickQuoteOptions.permutations, quickQuoteOptions.rules)\r\n\t\t\t\t\t.then(function(resp) {\r\n\t\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t\tvar quoteResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\t\t\t\t\tserviceResponseRepository.update('rapidEstimate' , quoteResults ) ;\r\n\t\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\t\t// resp: resp,\r\n\t\t\t\t\t\t\tformData: formData,\r\n\t\t\t\t\t\t\tresults : quoteResults,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\t\t\terrorMessage: 'getQuickQuote error',\r\n\t\t\t\t\t\t\tresponse: err\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction scrollViewTo($element) {\r\n\t\t\t\tvar offset = $element.offset();\r\n\t\t\t\tif ( offset ) {\r\n\t\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\r\n\t\t\tvm.getSectionDescriptionFor = function (fieldName) {\r\n\t\t\t\treturn $sce.trustAsHtml(labelService.getSectionDescriptionFor(fieldName));\r\n\t\t\t}\r\n\r\n\t\t\t// Scroll to estimates once they're loaded\r\n\t\t\t$scope.$root.$on('show-rapid-estimates', function() {\r\n\t\t\t\tvm.showRapidEstimatesPanel = true;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$root.$on('rapid-estimates-panel-initialised', function() {\r\n\t\t \t\tvar rapidEstimateResults = serviceResponseRepository.getLastResponseFrom('rapidEstimate') ;\r\n\t\t\t\tif ( rapidEstimateResults ) {\r\n\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\tresults: rapidEstimateResults,\r\n\t\t\t\t\t\tformData: userInputRepository.get()\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t]);\r\n","angular.module('qbePortal').controller('ctpFormController', [\r\n\t'$rootScope',\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'userInputRepository',\r\n\t'dynamicRouter',\r\n\t'labelService',\r\n\t'Util',\r\n\t'$http',\r\n\t'storage',\r\n\t'gtmService',\r\n\t'MODULE_INFO',\r\n\t'vcRecaptchaService',\r\n\tfunction(\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\tuserInputRepository,\r\n\t\tdynamicRouter,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$http,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tMODULE_INFO,\r\n\t\tvcRecaptchaService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem('completed-step', stateName);\r\n\t\t}\r\n\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tnull,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.moduleId = MODULE_INFO.id;\r\n\t\t$ctrl.recaptchaResponse = null;\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\tctpForm: {\r\n\t\t\t\t\tpromotionalCode: {\r\n\t\t\t\t\t\tvalue: $stateParams.promotionalCode\r\n\t\t\t\t\t\t\t? $stateParams.promotionalCode\r\n\t\t\t\t\t\t\t: ''\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttoken: {\r\n\t\t\t\t\t\twidgetId: null,\r\n\t\t\t\t\t\tresponse: ''\r\n\t\t\t\t\t},\r\n\t\t\t\t\tincentiveDetails: {\r\n\t\t\t\t\t\tdirectDebit: true\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function(name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on('error', function(event, error) {\r\n\t\t\t$state.go('error', error);\r\n\t\t});\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\r\n\t\t\tif ($ctrl.response && $ctrl.response !== '') {\r\n\t\t\t\tformData.ctpForm.token.widgetId = $ctrl.widgetId;\r\n\t\t\t\tformData.ctpForm.token.response = $ctrl.response;\r\n\t\t\t}\r\n\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\tvar defaultValues = getDefaultValues();\r\n\t\t\treturn userInputRepository.get(defaultValues);\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction openDialog() {\r\n\t\t\t$rootScope.$broadcast('loading-animation-start');\r\n\r\n\t\t\tgetUserInput();\r\n\r\n\t\t\t$rootScope.$broadcast('open-confirmation-dialog');\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function(e, form) {\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\r\n\t\t\tgtmService.trackCTPEvent(\r\n\t\t\t\t'gaClick',\r\n\t\t\t\t$state.current,\r\n\t\t\t\te.target.textContent\r\n\t\t\t);\r\n\r\n\t\t\tif (form.$invalid) {\r\n\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\tscrollViewTo($('#combinedValidationListing'));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.visible == 'invisible') {\r\n\t\t\t\tvcRecaptchaService.execute($ctrl.widgetId);\r\n\t\t\t} else {\r\n\t\t\t\tif ($ctrl.response !== '') {\r\n\t\t\t\t\topenDialog();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Initialisation method of the payment page\r\n\t\t */\r\n\t\t$ctrl.initPage = function() {\r\n\t\t\tstorage.clear();\r\n\r\n\t\t\t$ctrl.visible = globals.recaptchaConfiguration.options[0].type;\r\n\t\t\t$ctrl.recaptchaKey = globals.recaptchaConfiguration.options[0].key;\r\n\r\n\t\t\tinitialiseRouting();\r\n\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t$ctrl.termsAndConditions = false;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\t$ctrl.formData = formData;\r\n\t\t\tvar defaultValues = getDefaultValues();\t\r\n\t\t\tuserInputRepository.update(defaultValues);\r\n\t\t};\r\n\r\n\t\t$ctrl.setResponse = function(response) {\r\n\t\t\t$ctrl.response = response;\r\n\r\n\t\t\tif ($ctrl.visible === 'invisible' && $ctrl.response !== '') {\r\n\t\t\t\topenDialog();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.setWidgetId = function(widgetId) {\r\n\t\t\t$ctrl.widgetId = widgetId;\r\n\t\t};\r\n\r\n\t\t$ctrl.cbExpiration = function() {\r\n\t\t\tvcRecaptchaService.reload($scope.widgetId);\r\n\r\n\t\t\t$ctrl.response = '';\r\n\t\t};\r\n\r\n\t\t$scope.$on('terms-and-conditions-changed', function(\r\n\t\t\tevent,\r\n\t\t\ttermsAndConditions\r\n\t\t) {\r\n\t\t\t$ctrl.termsAndConditions = termsAndConditions;\r\n\t\t});\r\n\r\n\t\t$scope.$on('reload-recaptcha', $ctrl.cbExpiration);\r\n\t}\r\n]);\r\n","angular.module('qbePortal').controller('CybersourceCallbackController', [\r\n\t'$scope',\r\n\t'$stateParams',\r\n\t'dynamicRouter',\r\n\t'Util',\r\n\t'paymentLoggerService',\r\n\tfunction($scope, $stateParams, dynamicRouter, Util, paymentLoggerService) {\r\n\t\tvar $ctrl = this;\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\tvar success =\r\n\t\t\t$stateParams.status === 'SUCCESS' ||\r\n\t\t\t$stateParams.status === 'AWAITING_PROCESS';\r\n\r\n\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t'processing Cybersource callback',\r\n\t\t\t'show done page or error page',\r\n\t\t\tnull\r\n\t\t);\r\n\r\n\t\tconsole.log(\r\n\t\t\t'window.parent.$controllerScope',\r\n\t\t\twindow.parent.$controllerScope\r\n\t\t);\r\n\t\t// Access parent window to call the callback function\r\n\t\tif (window.parent && window.parent.$controllerScope) {\r\n\t\t\tparent.$controllerScope.onPaymentCallback(success, $stateParams);\r\n\t\t}\r\n\t}\r\n]);\r\n","angular.module('qbePortal').controller('CybersourcePaymentFormController', [\r\n\t'$scope',\r\n\t'$state',\r\n\t'$sce',\r\n\t'dynamicRouter',\r\n\t'Util',\r\n\t'paymentLoggerService',\r\n\tfunction($scope, $state, $sce, dynamicRouter, Util, paymentLoggerService) {\r\n\t\tvar $ctrl = this;\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\tif (window.parent && window.parent.$controllerScope) {\r\n\t\t\t$ctrl.creditCardPaymentData =\r\n\t\t\t\twindow.parent.$controllerScope.creditCardPaymentData;\r\n\t\t}\r\n\r\n\t\t$ctrl.cybersourceEndpoint = $sce.trustAsResourceUrl(\r\n\t\t\tendpointUrls.payments.cybersourcePaymentEndpoint\r\n\t\t);\r\n\r\n\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t'submitting payment to Cybersource',\r\n\t\t\t'waiting for Cybersource callback',\r\n\t\t\tnull\r\n\t\t);\r\n\t}\r\n]);\r\n","angular.module(\"qbePortal\").controller(\"DeclineController\", [\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$sce\",\r\n\t\"$filter\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"storage\",\r\n\t\"MODULE_INFO\",\r\n\tfunction(\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$sce,\r\n\t\t$filter,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\tstorage,\r\n\t\tMODULE_INFO\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\t\t$ctrl.declineMessages = [];\r\n\r\n\t\t$ctrl.initPage = function() {\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\tgetDeclineCodes();\r\n\t\t\tvar declineType = $state.current.name;\r\n\t\t\t$ctrl.title = labelService.getSectionLabelFor(declineType);\r\n\t\t\t$ctrl.descriptionHTML = labelService.getSectionDescriptionFor(\r\n\t\t\t\tdeclineType\r\n\t\t\t);\r\n\t\t\t$ctrl.nextStep = processWildCard(\r\n\t\t\t\tlabelService.getLabelFor(\"nextStep\"),\r\n\t\t\t\tgetStartRoute()\r\n\t\t\t);\r\n\t\t\tstorage.clear();\r\n\t\t};\r\n\r\n\t\t// gdd-3756 - unauthenticated payments decline\r\n\t\t$ctrl.initPayBills = function() {\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\tstorage.clear();\r\n\t\t\tif (qbe.fieldLabels) {\r\n\t\t\t\t$ctrl.headBar = qbe.fieldLabels.headBar;\r\n\t\t\t\t$ctrl.phoneNumber = qbe.fieldLabels.enterPaymentRef.phone;\r\n\t\t\t\t$ctrl.paymentDeclineLabel =\r\n\t\t\t\t\tqbe.fieldLabels.paymentDecline.title;\r\n\t\t\t\t$ctrl.paymentDeclineDescription =\r\n\t\t\t\t\tqbe.fieldLabels.paymentDecline.description;\r\n\t\t\t\t$ctrl.paymentDeclineSubDescription =\r\n\t\t\t\t\tqbe.fieldLabels.paymentDecline.subDescription;\r\n\t\t\t\t$ctrl.chatAgentLabel = qbe.fieldLabels.buttonLabel.chatAgent;\r\n\t\t\t\t$ctrl.callAgentLabel = qbe.fieldLabels.buttonLabel.callAgent;\r\n\t\t\t\t$ctrl.referenceNumber = $stateParams.referenceNumber;\r\n\r\n\t\t\t\tvar footHeight = $(\".footer\").outerHeight(),\r\n\t\t\t\t\twindowHeight = $(window).height(),\r\n\t\t\t\t\tdocumentHeight = $(document).height(),\r\n\t\t\t\t\tminHeight;\r\n\r\n\t\t\t\tif ($(window).outerWidth() >= 768) {\r\n\t\t\t\t\tif (documentHeight > windowHeight) {\r\n\t\t\t\t\t\tminHeight = documentHeight - footHeight - 5;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tminHeight = windowHeight - footHeight - 5;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(\".col1\").css(\"min-height\", minHeight + \"px\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(\".col1\").css(\"min-height\", \"auto\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Get decline codes - typeCodes submitted from product controllers\r\n\t\t * @param {none}\r\n\t\t * @return {none}\r\n\t\t */\r\n\t\tfunction getDeclineCodes() {\r\n\t\t\tvar codes = $stateParams.declineCodes; // get typeCodes from $stateParams\r\n\r\n\t\t\tif ($state.current.name === 'embargo') {\r\n\t\t\t\tvar message = \"Potential or current weather conditions in the area\";\r\n\t\t\t\t$ctrl.declineMessages.push({\r\n\t\t\t\t\tmessage: message\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t// loop through array and lookup labels\r\n\t\t\telse if (!util.isUndefinedOrNull(codes) && codes !== \"null\") {\r\n\t\t\t\tangular.forEach(codes, function(value) {\r\n\t\t\t\t\tvar message = $ctrl.lookupLabel([value]);\r\n\r\n\t\t\t\t\t// get default message in case typeCode is not setup\r\n\t\t\t\t\tif (util.isUndefinedOrNull(message)) {\r\n\t\t\t\t\t\tmessage = $ctrl.lookupLabel(\"default\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (value === \"ccPaymentError\") {\r\n\t\t\t\t\t\tmessage += \" \" + $stateParams.declineType;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$ctrl.declineMessages.push({\r\n\t\t\t\t\t\tmessage: message\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t$ctrl.declineMessages.push({\r\n\t\t\t\t\tmessage: \"the information provided in this quote\"\r\n\t\t\t\t});\r\n\r\n\t\t\t\tconsole.log($ctrl.declineMessages);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Start route - create URL for step 1 of all products\r\n\t\t * @param {none}\r\n\t\t * @return {string} - Step 1 URL\r\n\t\t */\r\n\t\tfunction getStartRoute() {\r\n\t\t\tvar routeName = MODULE_INFO.startRouteName.split(\".\");\r\n\t\t\tvar currentURL = window.location.href.split(\"/\");\r\n\r\n\t\t\tcurrentURL[currentURL.length - 1] = routeName[1];\r\n\t\t\tvar newURL =\r\n\t\t\t\t'new quote';\r\n\t\t\tvar homeURL =\r\n\t\t\t\t'QBE Homepage';\r\n\r\n\t\t\treturn [newURL, homeURL];\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Process wildcard - handle multiple wildcards to be replaced\r\n\t\t * @param {string} - target string\r\n\t\t * @param {array} - array of string\r\n\t\t * @return {string} - destination string\r\n\t\t */\r\n\t\tfunction processWildCard(targetString, wildcardValue) {\r\n\t\t\tif (\r\n\t\t\t\ttypeof wildcardValue == \"string\" ||\r\n\t\t\t\ttypeof wildcardValue == \"undefined\"\r\n\t\t\t) {\r\n\t\t\t\ttargetString = util.stringFormat(targetString, wildcardValue);\r\n\t\t\t} else {\r\n\t\t\t\tvar argArr = [];\r\n\t\t\t\targArr.push(targetString);\r\n\t\t\t\targArr = argArr.concat(wildcardValue);\r\n\t\t\t\ttargetString = util.stringFormat.apply(null, argArr);\r\n\t\t\t}\r\n\t\t\treturn targetString;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Label lookup - get labels from global options\r\n\t\t * @param {string} - fieldName\r\n\t\t * @return {string} - labels\r\n\t\t */\r\n\t\t$ctrl.lookupLabel = function(fieldName) {\r\n\t\t\treturn labelService.getGlobalOptionLabel(\r\n\t\t\t\t\"declineConfiguration\",\r\n\t\t\t\tfieldName\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t$ctrl.getProduct = function() {\r\n\t\t\treturn MODULE_INFO.id;\r\n\t\t};\r\n\r\n\t\t$ctrl.getLabelFor = function(fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\t$scope.$root.$broadcast(\"loading-animation-end\");\r\n\t}\r\n]);\r\n","angular.module('qbePortal').\r\ncontroller('ErrorController', [\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'$sce',\r\n\t'labelService',\r\n\t'Util',\r\n\t'MODULE_INFO',\r\n\tfunction($scope, $state, $stateParams, $sce, labelService, Util, MODULE_INFO) {\r\n\t\tvar $ctrl = this ;\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\t$ctrl.title = 'Error';\r\n\t\t// $scope.$root.$broadcast('page-title-set', $ctrl.title);\r\n\t\tUtil.dispatchCustomEvent('register-labels');\r\n\r\n\t\tif ( $stateParams.errorMessage )\r\n\t\t\tconsole.error($stateParams.errorMessage, $stateParams.response);\r\n\r\n\t\t$ctrl.errorMessage = $sce.trustAsHtml(labelService.getLabelFor('defaultErrorMessage'));\r\n\t\t$ctrl.defaultErrorTitle = labelService.getLabelFor('defaultErrorTitle');\r\n\t\t$ctrl.tryAgainLinkMessage = labelService.getLabelFor('tryAgainLinkMessage');\r\n\t\t$ctrl.retry= function() {\r\n\t\t\t$state.go(MODULE_INFO.startRouteName);\r\n\t\t}; \r\n}]);\r\n","angular.module(\"qbePortal\").controller(\"FormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteOptions\",\r\n\t\"paymentService\",\r\n\t\"quoteModelFactory\",\r\n\t\"dynamicRouter\",\r\n\t\"portalServiceWrapper\",\r\n\t\"MAService\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"$q\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"quoteRequestRepository\",\r\n\t\"tokenTimeoutService\",\r\n\t\"$compile\",\r\n\t\"smartLinkService\",\r\n\t\"campaignService\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteOptions,\r\n\t\tpaymentService,\r\n\t\tquoteModelFactory,\r\n\t\tdynamicRouter,\r\n\t\tportalServiceWrapper,\r\n\t\tMAService,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$q,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository,\r\n\t\ttokenTimeoutService,\r\n\t\t$compile,\r\n\t\tsmartLinkService,\r\n\t\tcampaignService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tstorage.removeItem(\"policy-date-input\");\r\n\r\n\t\t\tvar stepConditions = {\r\n\t\t\t\t\"vehicle.payment\": function () {\r\n\t\t\t\t\treturn $state.$current.name != \"vehicle.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"vehicle.done\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"vehicle.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"vehicle.policy-start-date\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"vehicle.policy-start-date\";\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\r\n\t\t$ctrl.elementName = \"Form Controller\";\r\n\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sideBarEmail = null;\r\n\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t$ctrl.saveOnExit = false;\r\n\t\t$ctrl.smartLink = null;\r\n\t\t$ctrl.goToNextStep = true;\r\n\r\n\t\t$window.onbeforeunload = function (event) {\r\n\t\t\texitSaveQuote();\r\n\t\t\tif ($ctrl.saveOnExit) {\r\n\t\t\t\t$rootScope.$digest();\r\n\t\t\t\treturn \"Are you sure you want to leave?\";\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"session-save-quote\", exitSaveQuote);\r\n\r\n\t\tfunction exitSaveQuote() {\r\n\t\t\tvar emailAddress = angular\r\n\t\t\t\t.element(\"div\")\r\n\t\t\t\t.find(\"[label-key=yourEmailAddress]\")\r\n\t\t\t\t.val();\r\n\r\n\t\t\tif (dynamicRouter.getPageTitle() != \"Payment\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.quoteModel.email != null ||\r\n\t\t\t\t\t$ctrl.sideBarEmail != null ||\r\n\t\t\t\t\temailAddress != \"\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tif ($ctrl.quoteModel && $ctrl.quoteModel.quoteResult) {\r\n\t\t\t\t\t\t$ctrl.saveOnExit = true;\r\n\t\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\t\tvar paymentFrequency = \"everyyear\";\r\n\r\n\t\t\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\t\t\t\t\tquote: \"true\",\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} else $rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t}\r\n\r\n\t\t\t// $ctrl.submit($scope[formName]);\r\n\t\t}\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tvehicleForm: {\r\n\t\t\t\t\tgetStarted: {\r\n\t\t\t\t\t\tpolicyStartDate: moment()\r\n\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\t\t\tpersonOrCompany: \"person\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tinsuredExcessValue: {\r\n\t\t\t\t\t\tthirdPartyOrThirdPartyFireAndTheft: \"standard\",\r\n\t\t\t\t\t\tcomprehensivePref: \"market\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\toptionalBenefits: {\r\n\t\t\t\t\t\tQPMMotVehHireCar: false,\r\n\t\t\t\t\t\tQPMMotVehWindscreen: false,\r\n\t\t\t\t\t\tQPMMotVehNCB: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t};\r\n\r\n\t\t\tvar defaultStateExcess = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\t\t$ctrl.quoteModel.state\r\n\t\t\t);\r\n\t\t\tif (defaultStateExcess != null) {\r\n\t\t\t\tvar tempObj = {\r\n\t\t\t\t\tvehicleForm: {\r\n\t\t\t\t\t\tinsuredExcessValue: {\r\n\t\t\t\t\t\t\tvoluntaryVehicleExcess: defaultStateExcess,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tdefaultValues = Object.extend(defaultValues, tempObj);\r\n\t\t\t}\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalidate-quotes\", invalidatePreviousQuote);\r\n\r\n\t\tfunction invalidatePreviousQuote() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tstorage.removeItem(\"policy-address\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to submit the form\r\n\t\t */\r\n\t\t$scope.$on(\"form-submit\", function (event, formName) {\r\n\t\t\t$ctrl.submit($scope[formName]);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to save the form\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-save-quote\", function (event, data) {\r\n\t\t\t$ctrl.sideBarEmail = data;\r\n\t\t\t$ctrl.save();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to assign the email address\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-assign-mail\", function (event, data) {\r\n\t\t\tif (data != \"\") $ctrl.sideBarEmail = data;\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbFormSection to have a session storage of rego search results.\r\n\t\t */\r\n\t\t$scope.$on(\"get-user-input\", getUserInput);\r\n\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, form) {\r\n\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tgetRequote(formData, null, function (resp) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tfunction prepopulateRetrievedQuote() {\r\n\t\t\tif ($stateParams.quoteNo && $stateParams.email) {\r\n\t\t\t\tgtmService.trackEvent(\"retrieve-quote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.retrieveSavedQuote(\r\n\t\t\t\t\t\t$stateParams.quoteNo,\r\n\t\t\t\t\t\t$stateParams.email\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (transformedQuote) {\r\n\t\t\t\t\t\t$q.all([\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshAddress(\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCar.address\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshVehicleDetails(\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCar.regoSearchResponse.modelYear,\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCar.regoSearchResponse.make,\r\n\t\t\t\t\t\t\t\ttransformedQuote.aboutYourCar.regoSearchResponse.model\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t]).then(function (resps) {\r\n\t\t\t\t\t\t\tvar vehicleFormData = ($ctrl.formData.vehicleForm = transformedQuote);\r\n\t\t\t\t\t\t\tvar serviceResponse = storage.getItem(\r\n\t\t\t\t\t\t\t\t\"service-response\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t$ctrl.formData.email = $stateParams.email;\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"policy-address\",\r\n\t\t\t\t\t\t\t\tserviceResponse.quote.policyAddress\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (!vehicleFormData.aboutYourCar)\r\n\t\t\t\t\t\t\t\tvehicleFormData.aboutYourCar = {};\r\n\t\t\t\t\t\t\tvehicleFormData.aboutYourCar.address =\r\n\t\t\t\t\t\t\t\tresps[0].data;\r\n\t\t\t\t\t\t\tuserInputRepository.update($ctrl.formData);\r\n\t\t\t\t\t\t\tstorage.setItem(\"retrieve\", true);\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tmoment()\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\") >\r\n\t\t\t\t\t\t\t\tmoment(serviceResponse.quote.periodStartDate)\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\")\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\t\"policy-date-input\",\r\n\t\t\t\t\t\t\t\t\t$ctrl.formData\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"vehicle.policy-start-date\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"vehicle.vehicle\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tvar expiredQuote = storage.getItem(\"expired-quote\");\r\n\t\t\t\t\t\tif (expiredQuote.displayStatus == \"Expired\") {\r\n\t\t\t\t\t\t\tstorage.removeItem(\"expired-quote\");\r\n\t\t\t\t\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t\t\t\t\twindow.qbe.fieldLabels.expiredQuoteRedirect\r\n\t\t\t\t\t\t\t\t\t.vehicleExpired\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction applyPromoCodeThroughLink() {\r\n\t\t\tif ($stateParams.promotionalCode) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\r\n\t\t\t\tif (formData.vehicleForm) {\r\n\t\t\t\t\tif (!formData.vehicleForm.tellUsABitMore) {\r\n\t\t\t\t\t\tformData.vehicleForm.tellUsABitMore = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tformData.vehicleForm.tellUsABitMore.promotionalCode =\r\n\t\t\t\t\t\t$stateParams.promotionalCode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.sideBarEmail != null) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.vehicleForm.tellUsABitMore &&\r\n\t\t\t\t\tformData.vehicleForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.vehicleForm.tellUsABitMore.yourEmailAddress =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.vehicleForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tformData.vehicleForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.vehicleForm.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t}\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgtmService.trackEvent(\"next\");\r\n\r\n\t\t\tsetDefaultContactValuesIfRequired();\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tvar quickQuote = getQuickQuote(formData, function () {\r\n\t\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t\t\t$rootScope.$broadcast(\"perform-ma-service\", \"next\");\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t});\r\n\r\n\t\t\tif (!quickQuote) {\r\n\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValuesIfRequired(formData) {\r\n\t\t\tvar contactValuesRequired = [\"vehicle.contact\"];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tcontactValuesRequired.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\tsetDefaultContactValues();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDeclineIfRequired(formData) {\r\n\t\t\tvar declineTestRequiredFor = [\r\n\t\t\t\t\"vehicle.drivers\",\r\n\t\t\t\t\"vehicle.vehicle\",\r\n\t\t\t\t\"vehicle.quote\",\r\n\t\t\t\t\"vehicle.contact\",\r\n\t\t\t];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tdeclineTestRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\ttestDecline(formData, nextStep);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDecline(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar declineQuoteOptions = quoteOptions.getTestQuoteDeclineOptions(\r\n\t\t\t\t$state.$current.name\r\n\t\t\t);\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.testQuoteDecline(declineQuoteOptions)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tangular.isDefined(\r\n\t\t\t\t\t\t\tresp.data[0].vehicles[0].isEligibleforSDExemption\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\"stamp-duty\",\r\n\t\t\t\t\t\t\tresp.data[0].vehicles[0].isEligibleforSDExemption\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstorage.setItem(\"stamp-duty\", false);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ($ctrl.goToNextStep) callback();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (decline) {\r\n\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\tstorage.clear();\r\n\t\t\t\t\tredirectToDecline(decline, \"Policy Was Declined\");\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction redirectToDecline(decline) {\r\n\t\t\tvar redirectPage = decline.declineType || \"decline\";\r\n\t\t\t$state.go(redirectPage, decline);\r\n\t\t}\r\n\r\n\t\tfunction saveQuoteIfRequired(formData) {\r\n\t\t\tsaveQuoteNotRequiredFor = [\"vehicle.vehicle\", \"vehicle.done\"];\r\n\t\t\tvar notRequired =\r\n\t\t\t\tsaveQuoteNotRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (!notRequired) {\r\n\t\t\t\tsaveQuote(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions =\r\n\t\t\t\tpage == \"payment\"\r\n\t\t\t\t\t? quoteOptions.getRequoteOptions(\"vehicle.payment\")\r\n\t\t\t\t\t: quoteOptions.getRequoteOptions();\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules,\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tconsole.log(err);\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getQuickQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep(\r\n\t\t\t\t$state.current.name\r\n\t\t\t);\r\n\r\n\t\t\tif (quickQuoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\tquickQuoteOptions.permutations,\r\n\t\t\t\t\t\tquickQuoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tbroadcastError(err, \"getQuickQuote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction broadcastError(err, msg) {\r\n\t\t\t$rootScope.$broadcast(\"error\", {\r\n\t\t\t\terrorMessage: msg,\r\n\t\t\t\tresponse: err,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction saveQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tif (tokenTimeoutService.isSessionTimedout()) {\r\n\t\t\t\t\t\ttokenTimeoutService.handleTimeout();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$ctrl.goToNextStep = false;\r\n\t\t\t\t\t\tbroadcastError(err, \"Save quote error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction proceedToNextStep(formData) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tsaveQuoteIfRequired(formData);\r\n\t\t\ttestDeclineIfRequired(formData);\r\n\t\t}\r\n\r\n\t\tfunction nextStep() {\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t}\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"vehicleForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar maData = {\r\n\t\t\t\tstate: quoteModel ? quoteModel.state : null,\r\n\t\t\t\tpostCode: quoteModel ? quoteModel.postCode : null,\r\n\t\t\t\tcampaignCode: quoteModel ? quoteModel.campaignCode : null,\r\n\t\t\t\tnoClaimBonus: quoteModel ? quoteModel.noClaimBonus : null,\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult ? quoteResult.getAnnual() : null,\r\n\t\t\t\tmonthlyResult: quoteResult ? quoteResult.getMonthly() : null,\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\r\n\t\t\tif ($state.current.name == \"vehicle.done\") {\r\n\t\t\t\tmaData.inceptionDate = moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.address &&\r\n\t\t\t\tquoteModel.address.addressLine1\r\n\t\t\t) {\r\n\t\t\t\tmaData.address =\r\n\t\t\t\t\tquoteModel.address.addressLine1 +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\tquoteModel.address.city;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.gtmPolicyHolder &&\r\n\t\t\t\tquoteModel.gtmPolicyHolder.phoneNumber\r\n\t\t\t) {\r\n\t\t\t\tmaData.contactNumber = quoteModel.gtmPolicyHolder.phoneNumber;\r\n\t\t\t}\r\n\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Scrolls a field into view when an error is clicked\r\n\t\t * @param {Object} error Error object with key `name`\r\n\t\t */\r\n\t\t$ctrl.showInView = function (error) {\r\n\t\t\t//console.log(error);\r\n\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]'));\r\n\t\t};\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * determines if a quote is available to enable save button.\r\n\t\t */\r\n\t\t$ctrl.isSaveButtonEnabled = function () {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\treturn formData.rapidEstimateUrl != null;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\toverwritePromoCodeFromQueryString();\r\n\t\t\tvar currentPageName = $ctrl.state.current.name;\r\n\t\t\t$ctrl.displayBack =\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl != null ||\r\n\t\t\t\tcurrentPageName != \"vehicle.vehicle\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.rapidEstimateUrl &&\r\n\t\t\t\tcurrentPageName == \"vehicle.vehicle\"\r\n\t\t\t) {\r\n\t\t\t\tinvalidatePreviousQuote();\r\n\t\t\t}\r\n\r\n\t\t\tprepopulateRetrievedQuote();\r\n\t\t\tapplyPromoCodeThroughLink();\r\n\t\t};\r\n\r\n\t\tfunction overwritePromoCodeFromQueryString() {\r\n\t\t\tvar promoCode = util.getQueryStringByName(\r\n\t\t\t\twindow.location,\r\n\t\t\t\t\"promotionalCode\"\r\n\t\t\t);\r\n\t\t\tif (promoCode) {\r\n\t\t\t\t$ctrl.formData.promotionalCode =\r\n\t\t\t\t\t$ctrl.formData.promotionalCode || {};\r\n\t\t\t\t$ctrl.formData.promotionalCode.promotionalCode = promoCode;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.initQuotePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\t//check for the data from retieved quote\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.vehicleForm.insuredExcessValue &&\r\n\t\t\t\t$ctrl.formData.vehicleForm.insuredExcessValue.coverType\r\n\t\t\t) {\r\n\t\t\t\tquoteOptions.setSelectedCoverType(\r\n\t\t\t\t\t$ctrl.formData.vehicleForm.insuredExcessValue.coverType,\r\n\t\t\t\t\t$ctrl.formData.vehicleForm.insuredExcessValue\r\n\t\t\t\t\t\t.thirdPartyOrThirdPartyFireAndTheft\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tvar selectedCoverType = quoteOptions.getSelectedCoverType();\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.vehicleForm;\r\n\r\n\t\t\t$scope.$broadcast(\"requote\");\r\n\r\n\t\t\tif (!form.insuredExcessValue) form.insuredExcessValue = {};\r\n\r\n\t\t\tform.saveOnPremium = form.saveOnPremium || {};\r\n\t\t\tform.saveOnPremium.saveOnYourPremium = selectedCoverType.subType;\r\n\r\n\t\t\tif (selectedCoverType.superType == \"third_party\")\r\n\t\t\t\tform.insuredExcessValue.thirdPartyOrThirdPartyFireAndTheft =\r\n\t\t\t\t\tselectedCoverType.subType;\r\n\r\n\t\t\t$ctrl.formData.vehicleForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initContact = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tsetDefaultContactValues();\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValues() {\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.vehicleForm,\r\n\t\t\t\tpostalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\t\tif (form.getStarted.personOrCompany == \"person\") {\r\n\t\t\t\tform.mainPolicyHolder = form.mainPolicyHolder || {};\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tform.mainPolicyHolder.isMainDriverMainPolicyHolder !== false\r\n\t\t\t\t) {\r\n\t\t\t\t\tform.mainPolicyHolder.isMainDriverMainPolicyHolder = true;\r\n\t\t\t\t\tform.mainPolicyHolder.title =\r\n\t\t\t\t\t\tform.mainPolicyHolder.title ||\r\n\t\t\t\t\t\tform.driver.drivers[0].person.title;\r\n\t\t\t\t\tform.mainPolicyHolder.firstName =\r\n\t\t\t\t\t\tform.driver.drivers[0].person.firstName;\r\n\t\t\t\t\tform.mainPolicyHolder.lastName =\r\n\t\t\t\t\t\tform.driver.drivers[0].person.lastName;\r\n\t\t\t\t\tform.mainPolicyHolder.gender =\r\n\t\t\t\t\t\tform.driver.drivers[0].person.gender;\r\n\t\t\t\t\tform.mainPolicyHolder.dateOfBirth =\r\n\t\t\t\t\t\tform.driver.drivers[0].person.dateOfBirth;\r\n\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffences =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffences;\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffences =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffences;\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_chargedOrConvictedOffences =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_chargedOrConvictedOffences;\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_licenceRSDC =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_licenceRSDC;\r\n\t\t\t\t\tform.mainPolicyHolder.fourYears_vehicleAccidentsClaims =\r\n\t\t\t\t\t\tform.driver.drivers[0].fourYears_vehicleAccidentsClaims;\r\n\t\t\t\t\tform.mainPolicyHolder.tenYears_chargedOrConvictedOffences =\r\n\t\t\t\t\t\tform.driver.drivers[0].tenYears_chargedOrConvictedOffences;\r\n\r\n\t\t\t\t\tform.mainPolicyHolderContact =\r\n\t\t\t\t\t\tform.mainPolicyHolderContact || {};\r\n\t\t\t\t\tform.mainPolicyHolderContact.postalOption = true;\r\n\t\t\t\t\tform.mainPolicyHolderContact.emailAddress1 = formData.email;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (form.mainPolicyHolderContact.address == undefined) {\r\n\t\t\t\t\tform.mainPolicyHolderContact.address =\r\n\t\t\t\t\t\tform.aboutYourCar.address;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalOption = false;\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (form.getStarted.personOrCompany == \"company\") {\r\n\t\t\t\tform.companyContact = form.companyContact || {};\r\n\r\n\t\t\t\tform.companyContact.postalOption = true;\r\n\r\n\t\t\t\tform.companyContact.title = form.driver.drivers[0].person.title;\r\n\t\t\t\tform.companyContact.firstName =\r\n\t\t\t\t\tform.driver.drivers[0].person.firstName;\r\n\t\t\t\tform.companyContact.lastName =\r\n\t\t\t\t\tform.driver.drivers[0].person.lastName;\r\n\t\t\t\tform.companyContact.gender =\r\n\t\t\t\t\tform.driver.drivers[0].person.gender;\r\n\t\t\t\tform.companyContact.dateOfBirth =\r\n\t\t\t\t\tform.driver.drivers[0].person.dateOfBirth;\r\n\r\n\t\t\t\tif (form.companyContact.address == undefined) {\r\n\t\t\t\t\tform.companyContact.address = form.aboutYourCar.address;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.companyContact.address.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.companyContact.address.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.companyContact.postalOption = false;\r\n\t\t\t\t\t\tform.companyContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tform.companyContact.email = formData.email;\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.vehicleForm = form;\r\n\t\t}\r\n\r\n\t\tfunction constructDonePageViewModel() {\r\n\t\t\tvar done = {\r\n\t\t\t\tpolicyNumber: $stateParams.policyNumber,\r\n\t\t\t\taccountNumber: $stateParams.accountNumber,\r\n\t\t\t\tisAwaitingProcess: $stateParams.isAwaitingProcess,\r\n\t\t\t\tpolicyType: quoteOptions.getSelectedCoverType().label,\r\n\t\t\t\tpolicyStartDate: $ctrl.quoteModel.policyStartDate,\r\n\t\t\t\tshowYearMakeModelInSummary: false,\r\n\t\t\t\tsmartLinkURL: $window.qbe.fieldLabels.smartLink.url,\r\n\t\t\t\thashKey: $window.qbe.fieldLabels.smartLink.hashKey,\r\n\t\t\t\temail: $ctrl.quoteModel.email,\r\n\t\t\t\tdescription: \"Motor Insurance\",\r\n\t\t\t\tproductRefs: \"Motor Insurance\",\r\n\t\t\t};\r\n\r\n\t\t\tvar regoNumber = $ctrl.quoteModel.regoNumber || \"\";\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.quoteModel.vehicleForm.tellUsYourRegoNumber &&\r\n\t\t\t\t$ctrl.quoteModel.vehicleForm.tellUsYourRegoNumber.regoNumber\r\n\t\t\t) {\r\n\t\t\t\tdone.showYearMakeModelInSummary = true;\r\n\t\t\t}\r\n\t\t\tdone.regoNumber = regoNumber.toUpperCase();\r\n\r\n\t\t\tif ($ctrl.quoteModel.vehicleForm.aboutYourCar.regoSearchResponse) {\r\n\t\t\t\tvar year =\r\n\t\t\t\t\t\t$ctrl.quoteModel.vehicleForm.aboutYourCar\r\n\t\t\t\t\t\t\t.regoSearchResponse.modelYear,\r\n\t\t\t\t\tmake =\r\n\t\t\t\t\t\t$ctrl.quoteModel.vehicleForm.aboutYourCar\r\n\t\t\t\t\t\t\t.regoSearchResponse.make,\r\n\t\t\t\t\tmodel =\r\n\t\t\t\t\t\t$ctrl.quoteModel.vehicleForm.aboutYourCar\r\n\t\t\t\t\t\t\t.regoSearchResponse.model;\r\n\r\n\t\t\t\tdone.yearMakeModel = year + \" \" + make + \" \" + model;\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.quoteModel.vehicleForm.mainPolicyHolder) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.vehicleForm.mainPolicyHolder.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.vehicleForm.mainPolicyHolder.lastName;\r\n\t\t\t} else if ($ctrl.quoteModel.vehicleForm.companyContact) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.vehicleForm.companyContact.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.vehicleForm.companyContact.lastName;\r\n\t\t\t\tdone.email = $ctrl.quoteModel.vehicleForm.companyContact.email;\r\n\t\t\t}\r\n\r\n\t\t\tdone.purchaseDate = moment()\r\n\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\treturn done;\r\n\t\t}\r\n\r\n\t\t$ctrl.initDonePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar done = storage.getItem(\"done\");\r\n\t\t\tif (!done || !done.policyNumber) {\r\n\t\t\t\tdone = constructDonePageViewModel();\r\n\t\t\t\t$ctrl.smartLink = smartLinkService.generateLink(done);\r\n\r\n\t\t\t\t/* tracking payment complete for gtm */\r\n\t\t\t\tvar paymentConfirmationDetails = storage.getItem(\"confirmation-details\");\r\n\t\t\t\tvar receiptNumber = '';\r\n\t\t\t\tvar paymentType = '';\r\n\t\t\t\tvar creditCardConfirmation = storage.getItem(\r\n\t\t\t\t\t\"creditcard-confirm-details\"\r\n\t\t\t\t);\r\n\t\t\t\tvar paypalConfirmationData = storage.getItem(\"paypal-confirm-details\");\r\n\t\t\t\tvar directDebitConfirmationData = storage.getItem(\r\n\t\t\t\t\t\"direct-debit-confirm-details\"\r\n\t\t\t\t);\r\n\t\t\t\tvar creditCardConfirmationData = storage.getItem(\r\n\t\t\t\t\t\"creditcard-confirm-details\"\r\n\t\t\t\t);\r\n\t\t\t\tif (paypalConfirmationData.isSuccess) {\r\n\t\t\t\t\treceiptNumber = paypalConfirmationData.receiptNumber;\r\n\t\t\t\t\tpaymentType = 'payPal';\r\n\t\t\t\t}\r\n\t\t\t\telse if (creditCardConfirmationData.isSuccess) {\r\n\t\t\t\t\treceiptNumber = creditCardConfirmationData.receiptNumber;\r\n\t\t\t\t\tpaymentType= 'creditCard';\r\n\t\t\t\t}\r\n\t\t\t\telse if (directDebitConfirmationData.isSuccess) {\r\n\t\t\t\t\treceiptNumber = directDebitConfirmationData.receiptNumber;\r\n\t\t\t\t\tpaymentType= 'bankAccount';\r\n\t\t\t\t}\t\t\t\t\r\n\r\n\t\t\t\tgtmService.trackTransactionCompleted(\r\n\t\t\t\t\t$state.current,\r\n\t\t\t\t\tdone,\r\n\t\t\t\t\t$ctrl.quoteModel,\r\n\t\t\t\t\tpaymentConfirmationDetails.referenceNumber,\r\n\t\t\t\t\treceiptNumber,\r\n\t\t\t\t\tpaymentType\r\n\t\t\t\t);\r\n\t\t\t\t/* end tracking payment complete for gtm */\r\n\r\n\t\t\t\tperformMAServices(\"paid\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.storage.clear();\r\n\t\t\tstorage.setItem(\"done\", done);\r\n\t\t\tvar $columns = $(\".columns\").get(0);\r\n\t\t\t$columns.classList.remove(\"print-ready\");\r\n\t\t\t$ctrl.done = done;\r\n\t\t\t$ctrl.done.campaignSteps = {};\r\n\r\n\t\t\t// check if campaign code is valid\r\n\t\t\tif (\r\n\t\t\t\tquoteModel.quoteResult.response.isCampaignCodeValid ||\r\n\t\t\t\tquoteModel.quoteResult.response.isGiftCardApplied\r\n\t\t\t) {\r\n\t\t\t\t// get campaign next steps\r\n\t\t\t\t$ctrl.done.campaignSteps = campaignService.getCampaignConfig(\r\n\t\t\t\t\tquoteModel.quoteResult.response.campaignCode,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else $ctrl.done.campaignSteps.isCampaignCodeValid = false;\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"submit-feedback\", submitFeedback);\r\n\r\n\t\tfunction submitFeedback() {\r\n\t\t\tif ($ctrl.done.policyNumber != null && $ctrl.smartLink != null) {\r\n\t\t\t\twindow.open($ctrl.smartLink, \"_blank\");\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log(\"No Smartlink generated!\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// TODO: fix this to not use timeout\r\n\t\tsetTimeout(function () {\r\n\t\t\tQBE.expandCollapse.init();\r\n\t\t}, 1000);\r\n\r\n\t\t$ctrl.clear = function () {\r\n\t\t\t$scope.$broadcast(\"clear\");\r\n\t\t};\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = $scope.vehicleForm.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgetUserInput();\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", {\r\n\t\t\t\tmodal: \"saveQuote\",\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.moveToStep = function (step) {\r\n\t\t\t$state.go(dynamicRouter.getState(step));\r\n\t\t};\r\n\t},\r\n]);\r\n","angular.module(\"qbePortal\").controller(\"HomeFormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"dynamicRouter\",\r\n\t\"$state\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"MAService\",\r\n\t\"Util\",\r\n\t\"userInputRepository\",\r\n\t\"portalServiceWrapper\",\r\n\t\"quoteOptions\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteModelFactory\",\r\n\t\"paymentService\",\r\n\t\"$stateParams\",\r\n\t\"quoteRequestRepository\",\r\n\t\"$q\",\r\n\t\"tokenTimeoutService\",\r\n\t\"$compile\",\r\n\t\"$window\",\r\n\t\"smartLinkService\",\r\n\t\"campaignService\",\r\n\t\"embargoTestService\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\tdynamicRouter,\r\n\t\t$state,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tMAService,\r\n\t\tutil,\r\n\t\tuserInputRepository,\r\n\t\tportalServiceWrapper,\r\n\t\tquoteOptions,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteModelFactory,\r\n\t\tpaymentService,\r\n\t\t$stateParams,\r\n\t\tquoteRequestRepository,\r\n\t\t$q,\r\n\t\ttokenTimeoutService,\r\n\t\t$compile,\r\n\t\t$window,\r\n\t\tsmartLinkService,\r\n\t\tcampaignService,\r\n\t\tembargoTestService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\t\tvar MAX_ACCESSORY_VALUE = 5000;\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tstorage.removeItem(\"policy-date-input\");\r\n\r\n\t\t\tvar stepConditions = {\r\n\t\t\t\t\"home.building\": function () {\r\n\t\t\t\t\treturn displayBuildingStep();\r\n\t\t\t\t},\r\n\t\t\t\t\"home.payment\": function () {\r\n\t\t\t\t\treturn $state.$current.name != \"home.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"home.done\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"home.done\";\r\n\t\t\t\t},\r\n\t\t\t\t\"home.policy-start-date\": function () {\r\n\t\t\t\t\treturn $state.$current.name == \"home.policy-start-date\";\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\tfunction displayBuildingStep() {\r\n\t\t\treturn !!userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.tellUsHowWeCanInsureYou.coverNeeds.building\"\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.isNextDisabled = false;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.formData = {};\r\n\t\t$ctrl.rapidEstimate = {};\r\n\t\t$ctrl.showRapidEstimate = false;\r\n\t\t$ctrl.pageState = {};\r\n\t\t$ctrl.convicitonDataObject = {};\r\n\t\t$ctrl.sideBarEmail = null;\r\n\r\n\t\t$ctrl.commonValues = {};\r\n\r\n\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t$ctrl.saveOnExit = false;\r\n\t\t$ctrl.smartLink = null;\r\n\r\n\t\t$window.onbeforeunload = function (event) {\r\n\t\t\texitSaveQuote();\r\n\t\t\tif ($ctrl.saveOnExit) {\r\n\t\t\t\t$rootScope.$digest();\r\n\t\t\t\treturn \"Are you sure you want to leave?\";\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"session-save-quote\", exitSaveQuote);\r\n\r\n\t\tfunction exitSaveQuote() {\r\n\t\t\tvar emailAddress = angular\r\n\t\t\t\t.element(\"div\")\r\n\t\t\t\t.find(\"[label-key=yourEmailAddress]\")\r\n\t\t\t\t.val();\r\n\r\n\t\t\tif (dynamicRouter.getPageTitle() != \"Payment\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.quoteModel.email != null ||\r\n\t\t\t\t\t$ctrl.sideBarEmail != null ||\r\n\t\t\t\t\temailAddress != \"\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tif ($ctrl.quoteModel && $ctrl.quoteModel.quoteResult) {\r\n\t\t\t\t\t\t$ctrl.saveOnExit = true;\r\n\t\t\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\t\t\tvar paymentFrequency = \"everyyear\";\r\n\r\n\t\t\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t\t\t.saveQuote(paymentFrequency, {\r\n\t\t\t\t\t\t\t\tquote: \"true\",\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} else $rootScope.$broadcast(\"session-redirect\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Broadcasts\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t$rootScope.$broadcast(\"page-title-set\", $ctrl.title);\r\n\r\n\t\t//Functions\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Function call for Quick Quote\r\n\t\tfunction getQuickQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar quickQuoteOptions = quoteOptions.getOfferingPermutations(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\tgetCoverOptions(formData)\r\n\t\t\t);\r\n\t\t\tif (quickQuoteOptions) {\r\n\t\t\t\tgetQuickQuoteWith(quickQuoteOptions, callback);\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getRapidEstimate(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar rapidEstimateOptions = quoteOptions.getOfferingPermutations(\r\n\t\t\t\t\"rapidEstimate\",\r\n\t\t\t\tgetCoverOptions(formData)\r\n\t\t\t);\r\n\t\t\tgetQuickQuoteWith(rapidEstimateOptions, callback);\r\n\t\t}\r\n\r\n\t\tfunction getQuickQuoteWith(quoteOptions, callback) {\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.getQuickQuote(quoteOptions.permutations, quoteOptions.rules)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tbroadcastError(err, \"getQuickQuote error\");\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions = quoteOptions.getOfferingPermutations(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\tgetCoverOptions(formData)\r\n\t\t\t);\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tconsole.log(err);\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction getCoverOptions(formData) {\r\n\t\t\tif (formData.homeForm && formData.homeForm.tellUsAboutTheProperty) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\thomeOccupancy:\r\n\t\t\t\t\t\tformData.homeForm.tellUsAboutTheProperty\r\n\t\t\t\t\t\t\t.howIsHomeOccupied,\r\n\t\t\t\t\tbuildingType:\r\n\t\t\t\t\t\tformData.homeForm.tellUsAboutTheProperty.typeOfBuilding,\r\n\t\t\t\t\tneeds: formData.homeForm.tellUsHowWeCanInsureYou.coverNeeds,\r\n\t\t\t\t\tneedRapidEstimate: true,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tthrow \"Not able to find the data for calculating permutations\";\r\n\t\t}\r\n\r\n\t\t//Setting up initial values\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\thomeForm: {\r\n\t\t\t\t\tletsGetStarted: {\r\n\t\t\t\t\t\tstartCoverDate: moment()\r\n\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\t\t\tpersonOrCompany: \"person\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\trapidEstimate: {\r\n\t\t\t\t\t\tneedRapidEstimate: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmainPolicyHolderContact: {\r\n\t\t\t\t\t\tprimaryPhone: \"mobile\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tadditionalPolicyHolders: {\r\n\t\t\t\t\t\tprimaryPhone: \"mobile\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcompanyContactContact: {\r\n\t\t\t\t\t\tcompanyContactSamePostalAddress: true,\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttellUsAboutTheBuilding: {\r\n\t\t\t\t\t\thomeLevels: \"1\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmortgageOnProperty: {\r\n\t\t\t\t\t\tpropertyMortgagedWith: [],\r\n\t\t\t\t\t},\r\n\t\t\t\t\t//quote page\r\n\t\t\t\t\t// confirmYourOptionalBenefits:{\r\n\t\t\t\t\t// \taccdLossDmgCoverBuilding: true,\r\n\t\t\t\t\t// \taccdLossDmgCoverContents: true\r\n\t\t\t\t\t// }\r\n\t\t\t\t},\r\n\t\t\t};\r\n\r\n\t\t\tvar defaultStateExcess = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\t\t$ctrl.quoteModel.state\r\n\t\t\t);\r\n\t\t\tif (defaultStateExcess != null) {\r\n\t\t\t\tvar tempObj = {\r\n\t\t\t\t\thomeForm: {\r\n\t\t\t\t\t\tchooseYourExcess: {\r\n\t\t\t\t\t\t\thomeExcess: defaultStateExcess,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tdefaultValues = Object.extend(defaultValues, tempObj);\r\n\t\t\t}\r\n\r\n\t\t\tvar defaultPortableContentStateExcess = quoteOptions.getStateDefaultVoluntaryExcess(\r\n\t\t\t\t$ctrl.quoteModel.state,\r\n\t\t\t\t1\r\n\t\t\t);\r\n\t\t\tif (defaultStateExcess != null) {\r\n\t\t\t\tvar tempObj2 = {\r\n\t\t\t\t\thomeForm: {\r\n\t\t\t\t\t\tchooseYourExcess: {\r\n\t\t\t\t\t\t\tportableContentsExcess: defaultPortableContentStateExcess,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tdefaultValues = Object.extend(defaultValues, tempObj2);\r\n\t\t\t}\r\n\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\r\n\t\t\tif ($ctrl.sideBarEmail != null) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore &&\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore.yourEmailAddress\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore.yourEmailAddress =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.homeForm.mainPolicyHolderContact &&\r\n\t\t\t\t\tformData.homeForm.mainPolicyHolderContact.emailAddress1\r\n\t\t\t\t)\r\n\t\t\t\t\tformData.homeForm.mainPolicyHolderContact.emailAddress1 =\r\n\t\t\t\t\t\t$ctrl.sideBarEmail;\r\n\t\t\t}\r\n\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\t// This method does not work for arrays\r\n\t\t$ctrl.getFormItem = function (formNameWithField) {\r\n\t\t\tvar finalValue = getFormInput();\r\n\t\t\tvar items = formNameWithField.split(\".\");\r\n\t\t\titems.forEach(function (value, idx) {\r\n\t\t\t\tfinalValue = finalValue[value];\r\n\t\t\t});\r\n\t\t\treturn finalValue;\r\n\t\t};\r\n\r\n\t\tfunction proceedToNextStep(formData) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tsaveQuoteIfRequired(formData);\r\n\t\t\ttestDeclineIfRequired(formData);\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t}\r\n\r\n\t\tfunction saveQuoteIfRequired(formData) {\r\n\t\t\tsaveQuoteNotRequiredFor = []; // 'home.estimate' , 'home.property' , 'home.building' , 'home.covers', 'home.details', 'home.done'] ;\r\n\t\t\tvar notRequired =\r\n\t\t\t\tsaveQuoteNotRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (!notRequired) {\r\n\t\t\t\tsaveQuote(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction broadcastError(err, msg) {\r\n\t\t\t$rootScope.$broadcast(\"error\", {\r\n\t\t\t\terrorMessage: msg,\r\n\t\t\t\tresponse: err,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction saveQuote(formData, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\tvar testEmbargo = embargoTestService.testEmbargoDecline(\r\n\t\t\t\t\t\tresp\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (testEmbargo != null) {\r\n\t\t\t\t\t\t$state.go(testEmbargo.declineType, testEmbargo);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tif (tokenTimeoutService.isSessionTimedout()) {\r\n\t\t\t\t\t\ttokenTimeoutService.handleTimeout();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbroadcastError(err, \"Save quote error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = $scope.homeForm.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgetUserInput();\r\n\t\t\tsetSelectedCoverType();\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", {\r\n\t\t\t\tmodal: \"saveQuote\",\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$ctrl.getCoverType = function () {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou &&\r\n\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds\r\n\t\t\t) {\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tvar building =\r\n\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds.building;\r\n\t\t\tvar content =\r\n\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds.contents;\r\n\r\n\t\t\tif (building && content) {\r\n\t\t\t\treturn \"building_and_contents\";\r\n\t\t\t} else if (building && !content) {\r\n\t\t\t\treturn \"building_only\";\r\n\t\t\t} else if (!building && content) {\r\n\t\t\t\treturn \"contents_only\";\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction clearPreviousQuotes() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tserviceResponseRepository.update(\"quickQuote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tquoteOptions.clearQuoteResults();\r\n\t\t}\r\n\r\n\t\t$ctrl.submitRapidEstimate = function (form) {\r\n\t\t\tvar isInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgtmService.trackEvent(\"rapid-estimate-submit\");\r\n\r\n\t\t\tclearPreviousQuotes();\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tsetSelectedCoverType();\r\n\t\t\tsetOfferingOrDecline();\r\n\t\t\tgetRapidEstimate(formData, function () {\r\n\t\t\t\tvar quoteResults = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\t\"quickQuote\"\r\n\t\t\t\t);\r\n\t\t\t\t$ctrl.showRapidEstimate = true;\r\n\t\t\t\t$scope.$root.$broadcast(\"process-rapid-estimates\", {\r\n\t\t\t\t\tformData: formData,\r\n\t\t\t\t\tresults: quoteResults,\r\n\t\t\t\t});\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to submit the form\r\n\t\t */\r\n\t\t$scope.$on(\"form-submit\", function (event, formName) {\r\n\t\t\t$ctrl.submit($scope[formName]);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to save the form\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-save-quote\", function (event, data) {\r\n\t\t\t$ctrl.sideBarEmail = data;\r\n\t\t\t$ctrl.save();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbPaymentSummary to assign the email address\r\n\t\t */\r\n\t\t$scope.$on(\"sidebar-assign-mail\", function (event, data) {\r\n\t\t\tif (data != \"\") $ctrl.sideBarEmail = data;\r\n\t\t});\r\n\r\n\t\t/*\r\n\t\t * Emited by rapid estimate panel component\r\n\t\t */\r\n\t\t$scope.$on(\"rapid-estimate-redirect\", function () {\r\n\t\t\t$state.go(dynamicRouter.next(markCompletedRouteCallback));\r\n\t\t});\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\t\t\tvar isInvalid = form.$invalid;\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tgtmService.trackEvent(\"next\");\r\n\t\t\t$scope.$root.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tcheckEstimatedRebuildCost(formData);\r\n\r\n\t\t\tcheckPrerequestDecline(formData);\r\n\r\n\t\t\tsetSelectedCoverType();\r\n\t\t\tif (setOfferingOrDecline($state.$current.name == \"home.estimate\")) {\r\n\t\t\t\tvar quickQuote = getQuickQuote(formData, function () {\r\n\t\t\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t\t\t\t$rootScope.$broadcast(\"perform-ma-service\", \"next\");\r\n\t\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t\t});\r\n\t\t\t\tif (!quickQuote) {\r\n\t\t\t\t\tproceedToNextStep(formData);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction checkSpotValue(quoteModel) {\r\n\t\t\tif (util.isUndefinedOrNull(quoteModel.cordelInfo)) {\r\n\t\t\t\t$state.go(\"referral\", declineParams);\r\n\t\t\t}\r\n\r\n\t\t\tvar sumInsured = util.isUndefinedOrNull(\r\n\t\t\t\tquoteModel.cordelInfo.spotValue\r\n\t\t\t)\r\n\t\t\t\t? 0\r\n\t\t\t\t: Math.floor(quoteModel.cordelInfo.spotValue);\r\n\t\t\tvar lowerBand = util.isUndefinedOrNull(\r\n\t\t\t\tquoteModel.cordelInfo.lowerBand\r\n\t\t\t)\r\n\t\t\t\t? 0\r\n\t\t\t\t: Math.floor(quoteModel.cordelInfo.lowerBand);\r\n\t\t\tvar declineParams = {\r\n\t\t\t\tdeclineType: \"\",\r\n\t\t\t\tdeclineCodes: \"\",\r\n\t\t\t};\r\n\t\t\tif (\r\n\t\t\t\tisNaN(sumInsured) ||\r\n\t\t\t\tsumInsured <= 0 ||\r\n\t\t\t\tisNaN(lowerBand) ||\r\n\t\t\t\tlowerBand <= 0\r\n\t\t\t) {\r\n\t\t\t\t$state.go(\"referral\", declineParams);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction checkEstimatedRebuildCost(formData) {\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm.yourBuilding &&\r\n\t\t\t\tformData.homeForm.yourBuilding.isEstimatedRebuildCost == \"yes\"\r\n\t\t\t) {\r\n\t\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\t\tformData.homeForm.yourBuilding.buildingSumInsured = Math.floor(\r\n\t\t\t\t\tquoteModel.cordelInfo.spotValue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm.confirmYourSumsInsured &&\r\n\t\t\t\tformData.homeForm.confirmYourSumsInsured\r\n\t\t\t\t\t.isYourEstimatedRebuildCost == \"yes\"\r\n\t\t\t) {\r\n\t\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\t\tformData.homeForm.confirmYourSumsInsured.yourBuildingSumInsured = Math.floor(\r\n\t\t\t\t\tquoteModel.cordelInfo.spotValue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction setSelectedCoverType() {\r\n\t\t\tquoteOptions.setSelectedCoverType($ctrl.getCoverType(), \"standard\");\r\n\t\t}\r\n\r\n\t\tfunction setOfferingOrDecline(overwrite) {\r\n\t\t\ttry {\r\n\t\t\t\tsetSelectedOffering(overwrite);\r\n\t\t\t\treturn true;\r\n\t\t\t} catch (ex) {\r\n\t\t\t\t/*\r\n\t\t\t\t * this condition happens in case of no offering being available based on\r\n\t\t\t\t * occupancy or other conditions. This is condition happens for 'unoccupied' buildings\r\n\t\t\t\t * at the moment. @see HomeQuoteModel.getOfferings() for more details.\r\n\t\t\t\t */\r\n\t\t\t\tdeclinePolicy({\r\n\t\t\t\t\tdeclineType: \"decline\",\r\n\t\t\t\t});\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//!important - decline check is added in frontend as it is required for\r\n\t\t// release and GW wont be able to do that now\r\n\t\tfunction checkPrerequestDecline(formData) {\r\n\t\t\tvar decline = false;\r\n\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm &&\r\n\t\t\t\tformData.homeForm.tellUsAboutTheProperty &&\r\n\t\t\t\tformData.homeForm.tellUsAboutTheProperty.address &&\r\n\t\t\t\tformData.homeForm.tellUsAboutTheProperty.address.state ==\r\n\t\t\t\t\t\"AU_WA\"\r\n\t\t\t) {\r\n\t\t\t\t//address in WA\r\n\t\t\t\tif (\r\n\t\t\t\t\t[\"duplex\", \"triplex\", \"villa\", \"townhouse\"].indexOf(\r\n\t\t\t\t\t\tformData.homeForm.tellUsAboutTheProperty.typeOfBuilding\r\n\t\t\t\t\t) > -1\r\n\t\t\t\t) {\r\n\t\t\t\t\t// is 'duplex', 'triplex', 'villa', 'townhouse'\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tformData.homeForm.tellUsAboutTheBuilding\r\n\t\t\t\t\t\t\t.isStrataRegdCorp === \"yes\"\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t//managed by professional agent\r\n\t\t\t\t\t\tif (formData.homeForm.tellUsAboutTheBuilding) {\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tformData.homeForm.tellUsAboutTheBuilding\r\n\t\t\t\t\t\t\t\t\t.areUnitAboveBelow === true\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t//decline if units are above or below\r\n\t\t\t\t\t\t\t\tdecline = true;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\tformData.homeForm.tellUsAboutTheBuilding\r\n\t\t\t\t\t\t\t\t\t\t.corpInsureUnit === \"no\"\r\n\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t//decine if body corporate doesnt allows to insure\r\n\t\t\t\t\t\t\t\t\tdecline = true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (decline) {\r\n\t\t\t\tdeclinePolicy({\r\n\t\t\t\t\tdeclineType: \"decline\",\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//sets the selected offering if none is available\r\n\t\t//overwrite - if true the offering is updated even if it is already available\r\n\t\tfunction setSelectedOffering(overwrite) {\r\n\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\t\t\tvar availableOfferings = $ctrl.quoteModel.getOfferings();\r\n\t\t\tif (overwrite) {\r\n\t\t\t\tquoteOptions.setSelectedOffering(availableOfferings[0]);\r\n\t\t\t} else {\r\n\t\t\t\tif (!quoteOptions.getSelectedOffering())\r\n\t\t\t\t\tquoteOptions.setSelectedOffering(availableOfferings[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handler for the home Events\r\n\t\t$scope.$on(\"home-rapid-estimate\", function (event, form) {\r\n\t\t\t$ctrl.submitRapidEstimate(form);\r\n\t\t});\r\n\r\n\t\t$ctrl.isRapidEstimateVisible = function () {\r\n\t\t\tif ($ctrl.commonValues.needRapidEstimate) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.refreshAddress = function () {\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\tvar address = null;\r\n\t\t\tif (\r\n\t\t\t\t$ctrl.formData.homeForm &&\r\n\t\t\t\t$ctrl.formData.homeForm.tellUsAboutTheProperty &&\r\n\t\t\t\t$ctrl.formData.homeForm.tellUsAboutTheProperty.address\r\n\t\t\t) {\r\n\t\t\t\taddress =\r\n\t\t\t\t\t$ctrl.formData.homeForm.tellUsAboutTheProperty.address;\r\n\t\t\t}\r\n\t\t\tportalServiceWrapper.refreshAddress(address).then(\r\n\t\t\t\tfunction (resp) {\r\n\t\t\t\t\tserviceResponseRepository.update(\r\n\t\t\t\t\t\t\"addressSearch\",\r\n\t\t\t\t\t\tresp.data\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$rootScope.$broadcast(\"update-quote-model-reference\");\r\n\t\t\t\t},\r\n\t\t\t\tfunction (error) {\r\n\t\t\t\t\tconsole.log(\"No response from enrichment\");\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tfunction testDeclineIfRequired(formData) {\r\n\t\t\tvar declineTestRequiredFor = [\r\n\t\t\t\t\"home.property\",\r\n\t\t\t\t\"home.building\",\r\n\t\t\t\t\"home.covers\",\r\n\t\t\t\t\"home.details\",\r\n\t\t\t\t\"home.quote\",\r\n\t\t\t\t\"home.contact\",\r\n\t\t\t];\r\n\t\t\tvar testRequired =\r\n\t\t\t\tdeclineTestRequiredFor.indexOf($state.$current.name) >= 0;\r\n\t\t\tif (testRequired) {\r\n\t\t\t\ttestDecline(formData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction testDecline(formData) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar declineQuoteOptions = quoteOptions.getTestQuoteDeclineOptions(\r\n\t\t\t\t$state.$current.name\r\n\t\t\t);\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.testQuoteDecline(declineQuoteOptions)\r\n\t\t\t\t.catch(function (decline) {\r\n\t\t\t\t\tperformMAServices(\"declined\");\r\n\t\t\t\t\tdeclinePolicy(decline, \"Policy Was Declined\");\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction declinePolicy(decline) {\r\n\t\t\tvar redirectPage = decline.declineType || \"decline\";\r\n\r\n\t\t\t//Check if needs to be redirected\r\n\t\t\tformData = getUserInput();\r\n\r\n\t\t\tif (\r\n\t\t\t\tformData.homeForm &&\r\n\t\t\t\tformData.homeForm.cycleCover &&\r\n\t\t\t\tformData.homeForm.cycleCover.coverItemsList\r\n\t\t\t) {\r\n\t\t\t\tvar shouldRefer =\r\n\t\t\t\t\tgetTotalValue(formData.homeForm.cycleCover.coverItemsList) >\r\n\t\t\t\t\tMAX_ACCESSORY_VALUE;\r\n\t\t\t\tif (shouldRefer) {\r\n\t\t\t\t\tredirectPage = \"referral\";\r\n\t\t\t\t\tdecline.declineType = \"referral\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tstorage.clear();\r\n\t\t\tif (redirectPage == \"referral\") {\r\n\t\t\t\t$state.go(redirectPage, decline);\r\n\t\t\t} else {\r\n\t\t\t\t$state.go(redirectPage, decline);\r\n\t\t\t}\r\n\t\t\t// window.location.href = $ctrl.parentPath + '/home/' + redirectPage;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfunction getTotalValue(list) {\r\n\t\t\tvar totalValue = 0;\r\n\r\n\t\t\tlist.forEach(function (value) {\r\n\t\t\t\ttotalValue += Number(value.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn totalValue;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\t// $ctrl.isNextDisabled = false;\r\n\t\t\t$scope.$on(\"disable-next\", function (event, disable) {\r\n\t\t\t\t$ctrl.isNextDisabled = disable;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$on(\"conviction-check\", function (event, convictionData) {\r\n\t\t\t\t// $ctrl.isNextDisabled = disable;\r\n\t\t\t\tif (convictionData) {\r\n\t\t\t\t\t$ctrl.convicitonDataObject[\r\n\t\t\t\t\t\tconvictionData.conviction\r\n\t\t\t\t\t] = convictionData;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar disabled = false;\r\n\t\t\t\tfor (var item in $ctrl.convicitonDataObject) {\r\n\t\t\t\t\t// console.log($ctrl.convicitonDataObject[item].section[$ctrl.convicitonDataObject[item].conviction].$name)\r\n\t\t\t\t\tif ($ctrl.convicitonDataObject[item].input === \"unknown\") {\r\n\t\t\t\t\t\t//additional check to see if the element exists on screen\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t$(\r\n\t\t\t\t\t\t\t\t'[name=\"' +\r\n\t\t\t\t\t\t\t\t\t$ctrl.convicitonDataObject[item].section[\r\n\t\t\t\t\t\t\t\t\t\t$ctrl.convicitonDataObject[item]\r\n\t\t\t\t\t\t\t\t\t\t\t.conviction\r\n\t\t\t\t\t\t\t\t\t].$name +\r\n\t\t\t\t\t\t\t\t\t'\"]'\r\n\t\t\t\t\t\t\t).length > 0\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tdisabled = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t$ctrl.isNextDisabled = disabled;\r\n\t\t\t});\r\n\r\n\t\t\t// debugger;\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\r\n\t\t\t$ctrl.quoteModel = quoteModelFactory.create();\r\n\r\n\t\t\tif ($ctrl.state.current.name == \"home.estimate\") {\r\n\t\t\t\tinvalidatePreviousQuote();\r\n\t\t\t}\r\n\t\t\tprepopulateRetrievedQuote();\r\n\r\n\t\t\t//enrich address\r\n\t\t\t$ctrl.refreshAddress();\r\n\t\t\tapplyPromoCodeThroughLink();\r\n\t\t\tsetWebBotValues();\r\n\t\t};\r\n\r\n\t\tfunction applyPromoCodeThroughLink() {\r\n\t\t\tif ($stateParams.promotionalCode) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\t\t\t\tif (formData.homeForm) {\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore =\r\n\t\t\t\t\t\tformData.homeForm.tellUsABitMore || {};\r\n\t\t\t\t\tformData.homeForm.tellUsABitMore.promotionalCode =\r\n\t\t\t\t\t\t$stateParams.promotionalCode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction setWebBotValues() {\r\n\t\t\tif (\r\n\t\t\t\t$stateParams.isSyntheticTransaction_Ext &&\r\n\t\t\t\t$stateParams.syntheticSource_Ext\r\n\t\t\t) {\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.homeForm &&\r\n\t\t\t\t\t$stateParams.isSyntheticTransaction_Ext == \"true\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tformData.homeForm.isSyntheticTransaction_Ext =\r\n\t\t\t\t\t\t$stateParams.isSyntheticTransaction_Ext;\r\n\t\t\t\t\tformData.homeForm.syntheticSource_Ext =\r\n\t\t\t\t\t\t$stateParams.syntheticSource_Ext;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction prepopulateRetrievedQuote() {\r\n\t\t\tif ($stateParams.quoteNo && $stateParams.email) {\r\n\t\t\t\tgtmService.trackEvent(\"retrieve-quote\");\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.retrieveSavedQuote(\r\n\t\t\t\t\t\t$stateParams.quoteNo,\r\n\t\t\t\t\t\t$stateParams.email\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (transformedQuote) {\r\n\t\t\t\t\t\t$q.when(\r\n\t\t\t\t\t\t\tportalServiceWrapper.refreshAddress(\r\n\t\t\t\t\t\t\t\ttransformedQuote.tellUsAboutTheProperty.address\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t).then(function () {\r\n\t\t\t\t\t\t\t$ctrl.formData.homeForm = transformedQuote;\r\n\t\t\t\t\t\t\tvar serviceResponse = storage.getItem(\r\n\t\t\t\t\t\t\t\t\"service-response\"\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\"policy-address\",\r\n\t\t\t\t\t\t\t\tserviceResponse.quote.policyAddress\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tuserInputRepository.update($ctrl.formData);\r\n\t\t\t\t\t\t\tquoteOptions.setSelectedOffering(\r\n\t\t\t\t\t\t\t\ttransformedQuote.info.offering\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tstorage.setItem(\"retrieve\", true);\r\n\r\n\t\t\t\t\t\t\tvar testEmbargo = embargoTestService.testEmbargoDecline(\r\n\t\t\t\t\t\t\t\tserviceResponse\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (testEmbargo != null) {\r\n\t\t\t\t\t\t\t\t$state.go(testEmbargo.declineType, testEmbargo);\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tmoment()\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\") >\r\n\t\t\t\t\t\t\t\tmoment(serviceResponse.quote.periodStartDate)\r\n\t\t\t\t\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t\t\t\t\t.format(\"YYYY/MM/DD\")\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\tstorage.setItem(\r\n\t\t\t\t\t\t\t\t\t\"policy-date-input\",\r\n\t\t\t\t\t\t\t\t\t$ctrl.formData\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"home.policy-start-date\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$state.go(\r\n\t\t\t\t\t\t\t\t\t\"home.property\",\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tquoteNo: \"\",\r\n\t\t\t\t\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tlocation: true,\r\n\t\t\t\t\t\t\t\t\t\treload: true,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tvar expiredQuote = storage.getItem(\"expired-quote\");\r\n\t\t\t\t\t\tif (expiredQuote.displayStatus == \"Expired\") {\r\n\t\t\t\t\t\t\tstorage.removeItem(\"expired-quote\");\r\n\t\t\t\t\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t\t\t\t\twindow.qbe.fieldLabels.expiredQuoteRedirect\r\n\t\t\t\t\t\t\t\t\t.homeExpired\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Updated data based on the common value\r\n\t\tfunction updateFormDataBasedOnCommonValues(name) {\r\n\t\t\tif (\r\n\t\t\t\t[\r\n\t\t\t\t\t\"typeOfBuilding\",\r\n\t\t\t\t\t\"wallsMadeOf\",\r\n\t\t\t\t\t\"howIsHomeOccupied\",\r\n\t\t\t\t\t\"propertyProfessionalAgent\",\r\n\t\t\t\t].indexOf(name) > -1\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.formData = getUserInput();\r\n\t\t\t\tvar formData = $ctrl.formData;\r\n\t\t\t\t//reset cover needs\r\n\t\t\t\tif (\r\n\t\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou &&\r\n\t\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds\r\n\t\t\t\t) {\r\n\t\t\t\t\tformData.homeForm.tellUsHowWeCanInsureYou.coverNeeds = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$ctrl.formData = formData;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.initEstimatePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\t// $ctrl.refreshAddress();\r\n\r\n\t\t\t$scope.$root.$on(\"common-value-update\", function (event, update) {\r\n\t\t\t\t$ctrl.commonValues[update.name] = update.value;\r\n\t\t\t\tupdateFormDataBasedOnCommonValues(update.name);\r\n\t\t\t});\r\n\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\r\n\t\t\tif (form.rapidEstimate) {\r\n\t\t\t\t// form.rapidEstimate.needRapidEstimate = false;\r\n\t\t\t\t// QBE would like to keep this persistent.\r\n\t\t\t}\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initPropertyPage = function () {\r\n\t\t\t// re-trigger pulsating icon to wait for the quote service return\r\n\t\t\tvar triggerPulse = storage.getItem(\"retrieve\");\r\n\t\t\tif (angular.equals(triggerPulse, {})) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\r\n\t\t\tif (quoteModel.address.state === \"AU_WA\") {\r\n\t\t\t\tif (\r\n\t\t\t\t\t[\"unit\", \"flat\"].indexOf(\r\n\t\t\t\t\t\tform.tellUsAboutTheProperty.typeOfBuilding\r\n\t\t\t\t\t) != -1 &&\r\n\t\t\t\t\tquoteModel.getHomeNeedType() != \"contents_only\" &&\r\n\t\t\t\t\tquoteModel.isBuildingFloodSafe()\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (!form.tellUsAboutTheBuilding) {\r\n\t\t\t\t\t\tform.tellUsAboutTheBuilding = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tform.tellUsAboutTheBuilding.isUnitAboveGround = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initCoverPage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\r\n\t\t\tif (quoteModel.dwelling.coverType !== \"contents_only\") {\r\n\t\t\t\tcheckSpotValue(quoteModel);\r\n\t\t\t}\r\n\r\n\t\t\tif (form.tellUsHowWeCanInsureYou) {\r\n\t\t\t\tif (!form.portableContents) {\r\n\t\t\t\t\tform.portableContents = {};\r\n\t\t\t\t\tform.portableContents.coverPortableContents =\r\n\t\t\t\t\t\tform.tellUsHowWeCanInsureYou.needCoverOutsideHome ==\r\n\t\t\t\t\t\ttrue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (form.rapidEstimate) {\r\n\t\t\t\t// copy quote/confirmYourSumsInsured to cover/yourBuilding values after requote\r\n\t\t\t\tif (form.confirmYourSumsInsured) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tform.confirmYourSumsInsured.isYourEstimatedRebuildCost\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.yourBuilding.isEstimatedRebuildCost =\r\n\t\t\t\t\t\t\tform.confirmYourSumsInsured.isYourEstimatedRebuildCost;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (form.confirmYourSumsInsured.yourBuildingSumInsured) {\r\n\t\t\t\t\t\tform.yourBuilding.buildingSumInsured =\r\n\t\t\t\t\t\t\tform.confirmYourSumsInsured.yourBuildingSumInsured;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (form.confirmYourSumsInsured.yourContentsSumInsured) {\r\n\t\t\t\t\t\tform.yourContents.contentsSumInsured =\r\n\t\t\t\t\t\t\tform.confirmYourSumsInsured.yourContentsSumInsured;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (!form.yourBuilding) {\r\n\t\t\t\t\t\tform.yourBuilding = {};\r\n\r\n\t\t\t\t\t\tif (form.rapidEstimate.buildingInsureAmount) {\r\n\t\t\t\t\t\t\tform.yourBuilding.buildingSumInsured =\r\n\t\t\t\t\t\t\t\tform.rapidEstimate.buildingInsureAmount;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!form.yourContents) {\r\n\t\t\t\t\t\tform.yourContents = {};\r\n\r\n\t\t\t\t\t\tif (form.rapidEstimate.contentInsureAmount) {\r\n\t\t\t\t\t\t\tform.yourContents.contentsSumInsured =\r\n\t\t\t\t\t\t\t\tform.rapidEstimate.contentInsureAmount;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set rent from rapid estimate if available\r\n\t\t\t\tif (!form.rentDefault) {\r\n\t\t\t\t\tform.rentDefault = {};\r\n\r\n\t\t\t\t\tform.rentDefault.rentDefault = true;\r\n\t\t\t\t\tif (form.rapidEstimate.rentDefaultCoverAmount) {\r\n\t\t\t\t\t\tform.rentDefault.rentCurrentWeekly =\r\n\t\t\t\t\t\t\tform.rapidEstimate.rentDefaultCoverAmount;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (form.rapidEstimate.uptoWeeks) {\r\n\t\t\t\t\t\tform.rentDefault.rentXWeeks =\r\n\t\t\t\t\t\t\tform.rapidEstimate.uptoWeeks;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tform.tellUsHowWeCanInsureYou &&\r\n\t\t\t\tform.tellUsHowWeCanInsureYou.coverNeeds &&\r\n\t\t\t\tform.tellUsHowWeCanInsureYou.coverNeeds.malicious_damage\r\n\t\t\t) {\r\n\t\t\t\tif (!form.theftAndVandalismByTenants) {\r\n\t\t\t\t\tform.theftAndVandalismByTenants = {\r\n\t\t\t\t\t\ttheftCoverContents: true,\r\n\t\t\t\t\t\ttheftCoverBuilding: true,\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t};\r\n\r\n\t\t$ctrl.initQuotePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\r\n\t\t\tif (!form.confirmYourLevelOfCover) {\r\n\t\t\t\tform.confirmYourLevelOfCover = {};\r\n\t\t\t}\r\n\r\n\t\t\t//sets selected offering\r\n\t\t\tvar offering = quoteOptions.getSelectedOffering();\r\n\t\t\tif (offering.descriptor) {\r\n\t\t\t\tform.confirmYourLevelOfCover.yourChosenCover =\r\n\t\t\t\t\toffering.descriptor;\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log(\"no offering selected\");\r\n\t\t\t}\r\n\r\n\t\t\t//sets the sum insured\r\n\t\t\tif (!form.confirmYourSumsInsured) {\r\n\t\t\t\tform.confirmYourSumsInsured = {};\r\n\t\t\t}\r\n\r\n\t\t\tif (form.yourBuilding && form.yourBuilding.isEstimatedRebuildCost) {\r\n\t\t\t\tform.confirmYourSumsInsured.isYourEstimatedRebuildCost =\r\n\t\t\t\t\tform.yourBuilding.isEstimatedRebuildCost;\r\n\t\t\t}\r\n\r\n\t\t\tif (form.yourBuilding && form.yourBuilding.buildingSumInsured) {\r\n\t\t\t\tform.confirmYourSumsInsured.yourBuildingSumInsured =\r\n\t\t\t\t\tform.yourBuilding.buildingSumInsured;\r\n\t\t\t}\r\n\r\n\t\t\tif (form.yourContents && form.yourContents.contentsSumInsured) {\r\n\t\t\t\tform.confirmYourSumsInsured.yourContentsSumInsured =\r\n\t\t\t\t\tform.yourContents.contentsSumInsured;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tform.portableContents &&\r\n\t\t\t\tform.portableContents.coverPortableContentLimit\r\n\t\t\t) {\r\n\t\t\t\tform.confirmYourSumsInsured.generalPortableContentsLimit =\r\n\t\t\t\t\tform.portableContents.coverPortableContentLimit;\r\n\t\t\t}\r\n\r\n\t\t\t//accidental Damage\r\n\t\t\tif (!form.confirmYourOptionalBenefits) {\r\n\t\t\t\tform.confirmYourOptionalBenefits = {};\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\tform.accidentalLossOrDamage &&\r\n\t\t\t\tform.accidentalLossOrDamage.coverAccDmgBuilding\r\n\t\t\t) {\r\n\t\t\t\t// confirmYourOptionalBenefits\r\n\t\t\t\tform.confirmYourOptionalBenefits.accdLossDmgCoverBuilding =\r\n\t\t\t\t\tform.accidentalLossOrDamage.coverAccDmgBuilding == true;\r\n\t\t\t} else {\r\n\t\t\t\tform.confirmYourOptionalBenefits.accdLossDmgCoverBuilding = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tform.accidentalLossOrDamage &&\r\n\t\t\t\tform.accidentalLossOrDamage.coverAccDmgContents\r\n\t\t\t) {\r\n\t\t\t\tform.confirmYourOptionalBenefits.accdLossDmgCoverContents =\r\n\t\t\t\t\tform.accidentalLossOrDamage.coverAccDmgContents == true;\r\n\t\t\t} else {\r\n\t\t\t\tform.confirmYourOptionalBenefits.accdLossDmgCoverContents = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tform.domesticWorkerCompensation &&\r\n\t\t\t\tform.domesticWorkerCompensation.domesticWorkerCompCover\r\n\t\t\t) {\r\n\t\t\t\tform.confirmYourOptionalBenefits.domesticWrkCompCover =\r\n\t\t\t\t\tform.domesticWorkerCompensation.domesticWorkerCompCover ==\r\n\t\t\t\t\ttrue;\r\n\t\t\t} else {\r\n\t\t\t\tform.confirmYourOptionalBenefits.domesticWrkCompCover = false;\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t\t// getRequote(formData);\r\n\t\t\t// $scope.$broadcast('requote') ;\r\n\t\t\tconsole.log(\"Quote page init\");\r\n\t\t};\r\n\r\n\t\t$ctrl.initContactPage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\t\t\tsetDefaultContactValues();\r\n\t\t\t// \tvar form \t\t= $ctrl.formData.homeForm;\r\n\t\t\t// \tvar quoteModel \t= $ctrl.quoteModel;\r\n\t\t\t//\r\n\t\t\t// \t// if ( !form.mainPolicyHolderContact ){\r\n\t\t\t// \t// \tform.mainPolicyHolderContact = {};\r\n\t\t\t// \t// \tform.mainPolicyHolderContact.primaryPhone = 'mobile';\r\n\t\t\t// \t// }\r\n\t\t\t//\r\n\t\t\t//\r\n\t\t\t//\r\n\t\t\t// \t$ctrl.formData.homeForm = form;\r\n\t\t\t//\r\n\t\t};\r\n\r\n\t\tfunction setDefaultContactValues() {\r\n\t\t\tvar formData = getUserInput(),\r\n\t\t\t\tform = formData.homeForm,\r\n\t\t\t\tpostalAddress = storage.getItem(\"policy-address\");\r\n\r\n\t\t\tif (form.letsGetStarted.personOrCompany == \"person\") {\r\n\t\t\t\tform.mainPolicyHolder = form.mainPolicyHolder || {};\r\n\r\n\t\t\t\tform.mainPolicyHolderContact.personContactSamePostalAddress = true;\r\n\r\n\t\t\t\tif (form.mainPolicyHolderContact.address == undefined) {\r\n\t\t\t\t\tform.mainPolicyHolderContact.address =\r\n\t\t\t\t\t\tform.tellUsAboutTheProperty.address;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.mainPolicyHolderContact.address.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.personContactSamePostalAddress = false;\r\n\t\t\t\t\t\tform.mainPolicyHolderContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (Object.keys(postalAddress).length > 0) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tpostalAddress.addressLine1 !==\r\n\t\t\t\t\t\t\tform.companyContactContact\r\n\t\t\t\t\t\t\t\t.companyContactResidentialAddress\r\n\t\t\t\t\t\t\t\t.addressLine1 &&\r\n\t\t\t\t\t\tpostalAddress.postalCode !==\r\n\t\t\t\t\t\t\tform.companyContactContact\r\n\t\t\t\t\t\t\t\t.companyContactResidentialAddress.postalCode\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tform.companyContactContact.companyContactSamePostalAddress = false;\r\n\t\t\t\t\t\tform.companyContactContact.postalAddress = postalAddress;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t$ctrl.formData.homeForm = form;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Initialisation method of the payment page\r\n\t\t */\r\n\t\t$ctrl.initPaymentPage = function () {\r\n\t\t\t// $ctrl.storage.checkValidity();\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar form = $ctrl.formData.homeForm;\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\t// $ctrl.termsAndConditions = false;\r\n\t\t\t//\r\n\t\t\t// var formData = getUserInput();\r\n\t\t\t// formData.paymentForm.paymentDetails.termsAndConditions = false ;\r\n\t\t\t// $ctrl.formData = formData ;\r\n\t\t\t//\r\n\t\t\t// getQuickQuote(formData);\r\n\t\t\t$scope.$on(\"payment-method-changed\", function (\r\n\t\t\t\tevent,\r\n\t\t\t\tpaymentMethod\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.paymentMethod = paymentMethod;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$on(\"terms-and-conditions-changed\", function (\r\n\t\t\t\tevent,\r\n\t\t\t\ttermsAndConditions\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.termsAndConditions = termsAndConditions;\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tfunction constructDonePageViewModel() {\r\n\t\t\tvar done = {\r\n\t\t\t\tpolicyNumber: $stateParams.policyNumber,\r\n\t\t\t\taccountNumber: $stateParams.accountNumber,\r\n\t\t\t\tisAwaitingProcess: $stateParams.isAwaitingProcess,\r\n\t\t\t\tpolicyType: $ctrl.quoteModel.getSelectedOffering().label,\r\n\t\t\t\tpolicyStartDate: $ctrl.quoteModel.policyStartDate,\r\n\t\t\t\taddress: $ctrl.quoteModel.address,\r\n\t\t\t\tpurchaseDate: moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\"),\r\n\t\t\t\tsmartLinkURL: $window.qbe.fieldLabels.smartLink.url,\r\n\t\t\t\thashKey: $window.qbe.fieldLabels.smartLink.hashKey,\r\n\t\t\t\temail: $ctrl.quoteModel.email,\r\n\t\t\t\tdescription: \"Home Insurance\",\r\n\t\t\t\tproductRefs: \"Home Insurance\",\r\n\t\t\t};\r\n\r\n\t\t\tif ($ctrl.quoteModel.homeForm.mainPolicyHolder) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.homeForm.mainPolicyHolder.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.homeForm.mainPolicyHolder.lastName;\r\n\t\t\t} else if ($ctrl.quoteModel.homeForm.companyContact) {\r\n\t\t\t\tdone.policyHolderName =\r\n\t\t\t\t\t$ctrl.quoteModel.homeForm.companyContact.firstName +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\t$ctrl.quoteModel.homeForm.companyContact.lastName;\r\n\t\t\t\tdone.email = $ctrl.quoteModel.homeForm.companyContact.email;\r\n\t\t\t}\r\n\r\n\t\t\treturn done;\r\n\t\t}\r\n\r\n\t\t$ctrl.initDonePage = function () {\r\n\t\t\t$ctrl.initPage();\r\n\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar done = storage.getItem(\"done\");\r\n\t\t\tif (!done || !done.policyNumber) {\r\n\t\t\t\tdone = constructDonePageViewModel();\r\n\t\t\t\t$ctrl.smartLink = smartLinkService.generateLink(done);\r\n\t\t\t\tgtmService.trackTransaction(\r\n\t\t\t\t\t$state.current,\r\n\t\t\t\t\tdone,\r\n\t\t\t\t\t$ctrl.quoteModel\r\n\t\t\t\t);\r\n\t\t\t\tperformMAServices(\"paid\");\r\n\t\t\t}\r\n\r\n\t\t\t$ctrl.storage.clear();\r\n\t\t\tstorage.setItem(\"done\", done);\r\n\t\t\tvar $columns = $(\".columns\").get(0);\r\n\t\t\t$columns.classList.remove(\"print-ready\");\r\n\t\t\t$ctrl.done = done;\r\n\t\t\t$ctrl.done.campaignSteps = {};\r\n\r\n\t\t\t// check if campaign code is valid\r\n\t\t\tif (\r\n\t\t\t\tquoteModel.quoteResult.response.isCampaignCodeValid ||\r\n\t\t\t\tquoteModel.quoteResult.response.isGiftCardApplied\r\n\t\t\t) {\r\n\t\t\t\t// get campaign next steps\r\n\t\t\t\t$ctrl.done.campaignSteps = campaignService.getCampaignConfig(\r\n\t\t\t\t\tquoteModel.quoteResult.response.campaignCode,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else $ctrl.done.campaignSteps.isCampaignCodeValid = false;\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"submit-feedback\", submitFeedback);\r\n\r\n\t\tfunction submitFeedback() {\r\n\t\t\tif ($ctrl.done.policyNumber != null && $ctrl.smartLink != null) {\r\n\t\t\t\twindow.open($ctrl.smartLink, \"_blank\");\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log(\"No Smartlink generated!\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//Events\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Enrich address on address selection\r\n\t\t */\r\n\t\t$scope.$on(\"enrich-address\", function (value) {\r\n\t\t\t$ctrl.refreshAddress();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"invalidate-quotes\", invalidatePreviousQuote);\r\n\r\n\t\tfunction invalidatePreviousQuote() {\r\n\t\t\tserviceResponseRepository.update(\"quote\", null);\r\n\t\t\tquoteRequestRepository.clearQuoteCredentials();\r\n\t\t\tstorage.removeItem(\"policy-address\");\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, form) {\r\n\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\r\n\t\t\tcheckEstimatedRebuildCost(formData);\r\n\r\n\t\t\tgetRequote(formData, null, function (resp) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * message broadcasted by qbFormSection.directive to move to a page\r\n\t\t */\r\n\t\t$scope.$on(\"moveToPage\", function (event, page) {\r\n\t\t\t$ctrl.moveToPage(page);\r\n\t\t});\r\n\r\n\t\t$ctrl.moveToPage = function (page) {\r\n\t\t\t$state.go(page);\r\n\t\t};\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"homeForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tif (policyEmail) {\r\n\t\t\t} else {\r\n\t\t\t\tpolicyEmail = userInputRepository.get(\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t\"homeForm.tellUsABitMore.yourEmailAddress\"\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar quoteModel = $ctrl.quoteModel;\r\n\t\t\tvar maData = {\r\n\t\t\t\tstate: quoteModel ? quoteModel.state : null,\r\n\t\t\t\tpostCode: quoteModel ? quoteModel.postCode : null,\r\n\t\t\t\tcampaignCode: quoteModel ? quoteModel.campaignCode : null,\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult ? quoteResult.getAnnual() : null,\r\n\t\t\t\tmonthlyResult: quoteResult ? quoteResult.getMonthly() : null,\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\r\n\t\t\tif ($state.current.name == \"home.done\") {\r\n\t\t\t\tmaData.inceptionDate = moment()\r\n\t\t\t\t\t.tz(\"Australia/Sydney\")\r\n\t\t\t\t\t.format(\"DD/MM/YYYY\");\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.address &&\r\n\t\t\t\tquoteModel.address.addressLine1\r\n\t\t\t) {\r\n\t\t\t\tmaData.address =\r\n\t\t\t\t\tquoteModel.address.addressLine1 +\r\n\t\t\t\t\t\" \" +\r\n\t\t\t\t\tquoteModel.address.city;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tquoteModel &&\r\n\t\t\t\tquoteModel.homeForm &&\r\n\t\t\t\tquoteModel.homeForm.mainPolicyHolderContact &&\r\n\t\t\t\tquoteModel.homeForm.mainPolicyHolderContact.contactNumber\r\n\t\t\t) {\r\n\t\t\t\tmaData.contactNumber =\r\n\t\t\t\t\tquoteModel.homeForm.mainPolicyHolderContact.contactNumber;\r\n\t\t\t}\r\n\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\t},\r\n]);\r\n","angular.module(\"qbePortal\").controller(\"PaymentController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$stateParams\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"serviceResponseRepository\",\r\n\t\"quoteOptions\",\r\n\t\"paymentService\",\r\n\t\"quoteModelFactory\",\r\n\t\"dynamicRouter\",\r\n\t\"portalServiceWrapper\",\r\n\t\"MAService\",\r\n\t\"labelService\",\r\n\t\"Util\",\r\n\t\"$q\",\r\n\t\"storage\",\r\n\t\"jwtHelper\",\r\n\t\"gtmService\",\r\n\t\"quoteRequestRepository\",\r\n\t\"MODULE_INFO\",\r\n\t\"$compile\",\r\n\t\"$sce\",\r\n\t\"paymentLoggerService\",\r\n\t\"CREDIT_CARD_ATTEMPT\",\r\n\tfunction (\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tserviceResponseRepository,\r\n\t\tquoteOptions,\r\n\t\tpaymentService,\r\n\t\tquoteModelFactory,\r\n\t\tdynamicRouter,\r\n\t\tportalServiceWrapper,\r\n\t\tMAService,\r\n\t\tlabelService,\r\n\t\tutil,\r\n\t\t$q,\r\n\t\tstorage,\r\n\t\tjwtHelper,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository,\r\n\t\tMODULE_INFO,\r\n\t\t$compile,\r\n\t\t$sce,\r\n\t\tpaymentLoggerService,\r\n\t\tCREDIT_CARD_ATTEMPT\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\t\t$ctrl.showPaymentProcessError = false;\r\n\t\t$ctrl.paymentAttempCounter = 0;\r\n\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\r\n\t\t//check if session function is embedded and append directive\r\n\t\tif ($window.qbe.fieldLabels != undefined) {\r\n\t\t\tif (angular.isObject($window.qbe.fieldLabels.sessionFunction))\r\n\t\t\t\tangular\r\n\t\t\t\t\t.element(\"div#phglobaloptions_0_divOptionsComponents\")\r\n\t\t\t\t\t.after($compile(\"
\")($scope));\r\n\t\t}\r\n\r\n\t\t$scope.$on(\"session-save-quote\", function () {\r\n\t\t\t$rootScope.$broadcast(\"session-redirect\");\r\n\t\t});\r\n\r\n\t\t$ctrl.getLabelFor = function (fieldName) {\r\n\t\t\treturn $sce.trustAsHtml(labelService.getLabelFor(fieldName));\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t * testing for allowed routes and redirecting when not allowed\r\n\t\t */\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem(\"completed-step\", stateName);\r\n\t\t}\r\n\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tswitch ($state.$current.parent.name) {\r\n\t\t\t\tcase \"vehicle\":\r\n\t\t\t\t\tvar stepConditions = {\r\n\t\t\t\t\t\t\"vehicle.policy-start-date\": function () {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t$state.$current.name ==\r\n\t\t\t\t\t\t\t\t\"vehicle.policy-start-date\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"home\":\r\n\t\t\t\t\tvar stepConditions = {\r\n\t\t\t\t\t\t\"home.policy-start-date\": function () {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t$state.$current.name == \"home.policy-start-date\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"caravan\":\r\n\t\t\t\t\tvar stepConditions = {\r\n\t\t\t\t\t\t\"caravan.policy-start-date\": function () {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t$state.$current.name ==\r\n\t\t\t\t\t\t\t\t\"caravan.policy-start-date\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"bike\":\r\n\t\t\t\t\tvar stepConditions = {\r\n\t\t\t\t\t\t\"bike.policy-start-date\": function () {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t$state.$current.name == \"bike.policy-start-date\"\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t}\r\n\r\n\t\t\tdynamicRouter.initialise(\r\n\t\t\t\t$state.current.name,\r\n\t\t\t\t$state.$current.parent.name,\r\n\t\t\t\tstepConditions,\r\n\t\t\t\tmarkCompletedRouteCallback\r\n\t\t\t);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.moduleId = MODULE_INFO.id;\r\n\r\n\t\t$ctrl.cybersourceiFrameUrl = $state.href(\r\n\t\t\t\"cybersourcePaymentForm\",\r\n\t\t\tnull,\r\n\t\t\t{ absolute: true }\r\n\t\t);\r\n\r\n\t\t// TODO: better iframe solution\r\n\t\t$ctrl.addCybersourceiFrame = $ctrl.addCybersourceRetryAttempt = $ctrl.addCybersourceLastAttempt = false;\r\n\r\n\t\t$ctrl.summaryModel = quoteModelFactory.create();\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\treturn {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tpaymentForm: {\r\n\t\t\t\t\tpaymentDetails: {\r\n\t\t\t\t\t\tpaymentOptions: \"yearly\",\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn,\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function (event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * calls MA Services to add marketing data.\r\n\t\t */\r\n\t\t$scope.$on(\"perform-ma-service\", function (event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy);\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"back\", function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$ctrl.back();\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t */\r\n\t\t$scope.$on(\"requote\", function (event, page) {\r\n\t\t\tgtmService.trackEvent(\"requote\");\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tgetRequote(formData, page, function (resp) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t$rootScope.$broadcast(\"quote-received\", resp);\r\n\t\t\t\t$rootScope.$broadcast(\"selected-quote-changed\");\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions = quoteOptions.getRequoteOptions(\r\n\t\t\t\tMODULE_INFO.paymentPageRouteName\r\n\t\t\t);\r\n\t\t\tif (requoteOptions) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(\r\n\t\t\t\t\t\trequoteOptions.permutations,\r\n\t\t\t\t\t\trequoteOptions.rules\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.then(function (resp) {\r\n\t\t\t\t\t\tif (callback) callback(resp);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\t\tconsole.log(err);\r\n\t\t\t\t\t\tbroadcastError(err, \"Requote error\");\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$rootScope.$broadcast(\"open-modal\", { modal: \"saveQuote\" });\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent(\"back\");\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif (backState) $state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput();\r\n\t\t\t\tif (formData.rapidEstimateUrl)\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\tgtmService.trackEvent(\"click-payment\");\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tif (form.$invalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tprocessPayment(form);\r\n\t\t};\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput();\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get(\r\n\t\t\t\t{},\r\n\t\t\t\t\"caravanForm.mainPolicyHolder\"\r\n\t\t\t);\r\n\t\t\tvar policyEmail = userInputRepository.get({}, \"email\");\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\"quote\"\r\n\t\t\t);\r\n\t\t\tvar maData = {\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult.getAnnual(),\r\n\t\t\t\tmonthlyResult: quoteResult.getMonthly(),\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\t\t\tMAService.mergeContacts(eventName, maData);\r\n\t\t}\r\n\r\n\t\tfunction processPayment(form) {\r\n\t\t\tformData = getUserInput();\r\n\r\n\t\t\tvar paymentDetailsForm = form.paymentDetails;\r\n\r\n\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t$ctrl.paymentAttempCounter++; // iterate payment attempt\r\n\t\t\t$ctrl.showPaymentProcessError = false;\r\n\t\t\t$ctrl.paymentMethod =\r\n\t\t\t\tformData.paymentForm.paymentDetails.paymentMethod;\r\n\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\t\t\tswitch (formData.paymentForm.paymentDetails.paymentMethod) {\r\n\t\t\t\tcase \"creditcard\":\r\n\t\t\t\t\tpayByCreditCard(formData, paymentDetailsForm);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"paypal\":\r\n\t\t\t\t\t// handled by qbFormSection.directive.payByPaypal()\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"bankaccount\":\r\n\t\t\t\t\tpayByDirectDebit(formData);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction payByCreditCard(formData, form) {\r\n\t\t\tpaymentService.payByCreditCard(\r\n\t\t\t\t// pass credit card data\r\n\t\t\t\t{\r\n\t\t\t\t\tcardNumber: formData.paymentForm.paymentDetails.cardNumber,\r\n\t\t\t\t\tcardHolderName:\r\n\t\t\t\t\t\tformData.paymentForm.paymentDetails.cardHolderName,\r\n\t\t\t\t\tcvc: formData.paymentForm.paymentDetails.cardCvc,\r\n\t\t\t\t\ttype: form.cardNumber.$ccType,\r\n\t\t\t\t\tcardExpiryDate: form.cardExpiryDate.$viewValue,\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Creditcard Payment service\r\n\t\t\t\tfunction (creditCardPaymentData) {\r\n\t\t\t\t\t// make the scope available globally. This data will be used by the iFrame to construct the form that will post to Cybersource\r\n\t\t\t\t\t$window.$controllerScope = $scope;\r\n\t\t\t\t\t// set the data to send to Cybersource to the scope\r\n\t\t\t\t\t$scope.creditCardPaymentData = creditCardPaymentData;\r\n\t\t\t\t\t// set the URL for the iFrame to the Cybersource Payment Form (which will use the `creditCardPaymentData`) to generate and submit the form\r\n\t\t\t\t\t$ctrl.addCybersourceiFrame = true;\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempCounter == 2) {\r\n\t\t\t\t\t\t$ctrl.addCybersourceRetryAttempt = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempCounter == CREDIT_CARD_ATTEMPT) {\r\n\t\t\t\t\t\t$ctrl.addCybersourceLastAttempt = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"cc payment error\",\r\n\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t);\r\n\t\t\t\t\t//dd-4003-push error to gtm data layer\r\n\t\t\t\t\tgtmService.trackEvent(errorResponse, \"paymentError\");\r\n\t\t\t\t\tconsole.error(errorResponse);\r\n\t\t\t\t\t$state.go(\"error\");\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction payByDirectDebit(formData) {\r\n\t\t\tpaymentService.payByDirectDebit(\r\n\t\t\t\t// pass bank account data\r\n\t\t\t\t{\r\n\t\t\t\t\tbsb: formData.paymentForm.paymentDetails.bsb,\r\n\t\t\t\t\taccountNumber:\r\n\t\t\t\t\t\tformData.paymentForm.paymentDetails.accountNumber,\r\n\t\t\t\t\taccountName:\r\n\t\t\t\t\t\tformData.paymentForm.paymentDetails.accountName,\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Direct Debit Payment service\r\n\t\t\t\tfunction (directDebitPaymentData) {\r\n\t\t\t\t\t$scope.onPaymentCallback(true, directDebitPaymentData);\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"bank debit payment error\",\r\n\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t);\r\n\t\t\t\t\t//dd-4003-push error to gtm data layer\r\n\t\t\t\t\tgtmService.trackEvent(errorResponse, \"paymentError\");\r\n\t\t\t\t\tconsole.error(errorResponse);\r\n\t\t\t\t\t//yearly bank account will not redirect to oh snap page\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tformData.paymentForm.paymentDetails.paymentOptions ===\r\n\t\t\t\t\t\t\"yearly\"\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t\t$ctrl.showPaymentProcessError = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$state.go(\"error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Initialisation method of the payment page\r\n\t\t */\r\n\t\t$ctrl.initPaymentPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\t$ctrl.termsAndConditions = false;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tformData.paymentForm.paymentDetails.termsAndConditions = false;\r\n\t\t\tquoteOptions.setSelectedPaymentFrequency(\r\n\t\t\t\tformData.paymentForm.paymentDetails.paymentOptions\r\n\t\t\t);\r\n\t\t\t$ctrl.formData = formData;\r\n\t\t\tgetRequote(formData);\r\n\t\t\t$scope.$on(\"payment-method-changed\", function (\r\n\t\t\t\tevent,\r\n\t\t\t\tpaymentMethod\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.paymentMethod = paymentMethod;\r\n\t\t\t});\r\n\t\t\t$scope.$on(\"terms-and-conditions-changed\", function (\r\n\t\t\t\tevent,\r\n\t\t\t\ttermsAndConditions\r\n\t\t\t) {\r\n\t\t\t\t$ctrl.termsAndConditions = termsAndConditions;\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * This callback is called from the iFrame when the response is received from the GuideWire payment service\r\n\t\t * @param success\r\n\t\t * @param stateParams\r\n\t\t */\r\n\t\t$scope.onPaymentCallback = function (success, params) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\r\n\t\t\tif (success && params.status !== \"PROCESS_FAIL\") {\r\n\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\tpolicyNumber: params.policyNumber,\r\n\t\t\t\t\taccountNumber: params.accountNumber,\r\n\t\t\t\t\tisAwaitingProcess: params.status === \"AWAITING_PROCESS\",\r\n\t\t\t\t};\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"payment successful\",\r\n\t\t\t\t\t\"show done page\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\t// Go to confirmation\r\n\t\t\t\t$state.go(MODULE_INFO.donePageRouteName, confirmationData);\r\n\t\t\t} else {\r\n\t\t\t\t// payment error - show error page\r\n\t\t\t\t// yearly bank account will not redirect to oh snap page\r\n\t\t\t\tif (\r\n\t\t\t\t\t$ctrl.formData.paymentForm.paymentDetails.paymentOptions ===\r\n\t\t\t\t\t\t\"yearly\" &&\r\n\t\t\t\t\t$ctrl.paymentMethod === \"bankaccount\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"payment unsuccessful - bank debit\",\r\n\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$ctrl.showPaymentProcessError = true;\r\n\t\t\t\t\t$ctrl.paymentErrorDescription = $ctrl.getLabelFor(\r\n\t\t\t\t\t\t\"bankAccountError\"\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// credit card payment retry\r\n\t\t\t\t// catch error param from GW\r\n\t\t\t\t// send to referral after max attempts\r\n\t\t\t\tif ($ctrl.paymentMethod === \"creditcard\") {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tangular.isDefined(params.error) &&\r\n\t\t\t\t\t\tparams.error !== \"\"\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t$ctrl.paymentErrorDescription =\r\n\t\t\t\t\t\t\tlabelService.getValidationMessagesFor(\r\n\t\t\t\t\t\t\t\t\"paymentMethod\",\r\n\t\t\t\t\t\t\t\t\"ccError\"\r\n\t\t\t\t\t\t\t) +\r\n\t\t\t\t\t\t\t\" \" +\r\n\t\t\t\t\t\t\tparams.error;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$ctrl.paymentErrorDescription = labelService.getValidationMessagesFor(\r\n\t\t\t\t\t\t\t\"paymentMethod\",\r\n\t\t\t\t\t\t\t\"ccErrorDefault\"\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempCounter === CREDIT_CARD_ATTEMPT) {\r\n\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\"payment unsuccessful - credit card\",\r\n\t\t\t\t\t\t\t\"show referral page\",\r\n\t\t\t\t\t\t\tnull\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom(\r\n\t\t\t\t\t\t\t\"quote\"\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tvar referralParams = {\r\n\t\t\t\t\t\t\tdeclineType: savedQuote.quoteID,\r\n\t\t\t\t\t\t\tdeclineCodes: [\"ccPaymentError\"],\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\t$state.go(\"referral\", referralParams);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$ctrl.showPaymentProcessError = true;\r\n\r\n\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\"payment unsuccessful - credit card\",\r\n\t\t\t\t\t\t\t\"show payment page\",\r\n\t\t\t\t\t\t\tnull\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t},\r\n]);\r\n","angular.module(\"qbePortal\").controller(\"paymentsFormController\", [\r\n\t\"$rootScope\",\r\n\t\"$scope\",\r\n\t\"$state\",\r\n\t\"$window\",\r\n\t\"userInputRepository\",\r\n\t\"paymentService\",\r\n\t\"Util\",\r\n\t\"storage\",\r\n\t\"gtmService\",\r\n\t\"paymentLoggerService\",\r\n\t\"CREDIT_CARD_ATTEMPT\",\r\n\tfunction(\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$window,\r\n\t\tuserInputRepository,\r\n\t\tpaymentService,\r\n\t\tutil,\r\n\t\tstorage,\r\n\t\tgtmService,\r\n\t\tpaymentLoggerService,\r\n\t\tCREDIT_CARD_ATTEMPT\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\r\n\t\tif ($window.qbe.fieldLabels.buttonLabel) {\r\n\t\t\t$ctrl.closeWindowLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.closeWindow;\r\n\t\t\t$ctrl.payYourBillNowLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.payYourBillNow;\r\n\t\t\t$ctrl.printLabel = $window.qbe.fieldLabels.buttonLabel.print;\r\n\t\t\t$ctrl.payMoreBillLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.payMoreBill;\r\n\t\t\t$ctrl.chatAgentLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.chatAgent;\r\n\t\t\t$ctrl.callAgentLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.callAgent;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.config) {\r\n\t\t\t$ctrl.returnDeclineURLPath =\r\n\t\t\t\t$window.qbe.fieldLabels.config.DeclinePath;\r\n\t\t\t$ctrl.paymentsPath = $window.qbe.fieldLabels.config.PaymentsPath;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.frequentlyAsked) {\r\n\t\t\t$ctrl.frequentlyAsked =\r\n\t\t\t\t$window.qbe.fieldLabels.frequentlyAsked.list;\r\n\t\t\t$ctrl.frequentlyAskedTitle = qbe.fieldLabels.frequentlyAsked;\r\n\t\t}\r\n\r\n\t\t$ctrl.amountDue = qbe.fieldLabels.amountDue;\r\n\t\t$ctrl.headBar = qbe.fieldLabels.headBar;\r\n\t\t$ctrl.paymentDate = moment().format(\"Do MMM. YYYY\");\r\n\t\t$ctrl.showQbAmountDue = false;\r\n\r\n\t\tif ($ctrl.headBar) {\r\n\t\t\t$ctrl.headBar.click = function() {\r\n\t\t\t\t/* gtm track phone click */\r\n\t\t\t\tgtmService.trackStandardEvent('click button', 'phone', '', false);\r\n\t\t\t\t/* end gtm track phone click */\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (qbe.fieldLabels.otherWaysToPay) {\r\n\t\t\t$ctrl.otherWaysToPay = qbe.fieldLabels.otherWaysToPay.list;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.paymentConfirmation) {\r\n\t\t\t$ctrl.paymentConfirmationLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmation.title;\r\n\t\t\t$ctrl.paymentConfirmationDescription =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmation.description;\r\n\t\t\t$ctrl.paymentConfirmationSubDescription =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmation.subDescription;\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.paymentConfirmationSummary) {\r\n\t\t\t$ctrl.paymentConfirmationSummaryLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmationSummary.title;\r\n\t\t\t$ctrl.paymentConfirmationSummaryDetailsLabel =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmationSummary.options;\t\t\t\t\r\n\t\t}\r\n\r\n\t\tif ($window.qbe.fieldLabels.enterPaymentRef) {\r\n\t\t\t$ctrl.phoneNumber = $window.qbe.fieldLabels.enterPaymentRef.phone;\r\n\t\t}\r\n\r\n\t\t$ctrl.totalSteps = 2;\r\n\t\t$ctrl.initStep = 1;\r\n\t\t$ctrl.stepNum = null;\r\n\t\t$ctrl.Completed = false;\r\n\t\t$ctrl.ctpCompleted = false;\r\n\t\t$ctrl.showPayButton = true;\r\n\t\t$ctrl.paymentAttempt = 0;\r\n\r\n\t\tfunction ctpStepCounter(step) {\r\n\t\t\tvar currentStep = step;\r\n\r\n\t\t\tfor (var i = 0; i <= currentStep; i++) {\r\n\t\t\t\t$ctrl.stepNum = i;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$ctrl.trackWindowPrint = function() {\r\n\t\t\tgtmService.trackStandardEvent('click link', 'print', '', false);\r\n\t\t};\r\n\r\n\t\t// This will catch the success callback\r\n\t\tvar paypalConfirmation = storage.getItem(\"paypal-confirm-details\");\r\n\t\tif (paypalConfirmation.isSuccess) {\r\n\t\t\tvar formDetails = storage.getItem(\"confirmation-details\");\r\n\t\t\tvar paymentRef = formDetails.referenceNumber;\r\n\t\t\t(receiptNum = paypalConfirmation.receiptNumber),\r\n\t\t\t\t(amountPay = parseFloat(formDetails.amount.amountPay).toFixed(\r\n\t\t\t\t\t2\r\n\t\t\t\t)),\r\n\t\t\t\t(paymentDate = $ctrl.paymentDate);\r\n\r\n\t\t\t$ctrl.paymentConfirmationSummaryDetailsValue = [\r\n\t\t\t\tpaymentRef,\r\n\t\t\t\treceiptNum,\r\n\t\t\t\t\"$\" + amountPay,\r\n\t\t\t\tpaymentDate\r\n\t\t\t];\r\n\r\n\t\t\tloadAmount(amountPay);\r\n\r\n\t\t\t//dd-6181 - call gtm service on payment complete\r\n\t\t\tgtmService.trackUnauthPayments($state.current, formDetails, 'payPal', receiptNum, paypalConfirmation.policyNumber);\r\n\r\n\t\t\tstorage.removeItem(\"paypal-confirm-details\");\t\t\t\r\n\t\t} else if (paypalConfirmation.isSuccess === false) {\r\n\t\t\tstorage.removeItem(\"paypal-confirm-details\");\r\n\t\t\tstorage.setItem(\"payment-error-details\", {\r\n\t\t\t\tmode: \"paypal\"\r\n\t\t\t});\r\n\t\t\t$state.go(\"payments.payments\");\r\n\t\t}\r\n\r\n\t\tvar creditCardConfirmation = storage.getItem(\r\n\t\t\t\"creditcard-confirm-details\"\r\n\t\t);\r\n\t\tif (creditCardConfirmation.isSuccess) {\r\n\t\t\tvar formDetails = storage.getItem(\"confirmation-details\");\r\n\t\t\tvar paymentRef = formDetails.referenceNumber;\r\n\t\t\t(receiptNum = creditCardConfirmation.receiptNumber),\r\n\t\t\t\t(amountPay = parseFloat(formDetails.amount.amountPay).toFixed(\r\n\t\t\t\t\t2\r\n\t\t\t\t)),\r\n\t\t\t\t(paymentDate = $ctrl.paymentDate);\r\n\r\n\t\t\t$ctrl.paymentConfirmationSummaryDetailsValue = [\r\n\t\t\t\tpaymentRef,\r\n\t\t\t\treceiptNum,\r\n\t\t\t\t\"$\" + amountPay,\r\n\t\t\t\tpaymentDate\r\n\t\t\t];\r\n\t\t\tloadAmount(amountPay);\r\n\t\t\tstorage.removeItem(\"creditcard-confirm-details\");\r\n\r\n\t\t\t//dd-6181 - call gtm service on payment complete\r\n\t\t\tgtmService.trackUnauthPayments($state.current, formDetails, 'creditCard', receiptNum, formDetails.policyNumber);\r\n\t\t} else if (creditCardConfirmation.isSuccess === false) {\r\n\t\t\tstorage.removeItem(\"creditcard-confirm-details\");\r\n\t\t\tstorage.setItem(\"payment-error-details\", {\r\n\t\t\t\tmode: \"cc\"\r\n\t\t\t});\r\n\t\t\t$state.go(\"payments.payments\");\r\n\t\t}\r\n\r\n\t\tvar directDebitConfirmation = storage.getItem(\r\n\t\t\t\"direct-debit-confirm-details\"\r\n\t\t);\r\n\t\tif (directDebitConfirmation.isSuccess) {\r\n\t\t\tvar formDetails = storage.getItem(\"confirmation-details\");\r\n\t\t\tvar paymentRef = formDetails.referenceNumber,\r\n\t\t\t\tamountPay = parseFloat(formDetails.amount.amountPay).toFixed(2),\r\n\t\t\t\tpaymentDate = $ctrl.paymentDate;\r\n\r\n\t\t\t$ctrl.paymentConfirmationSummaryDetailsValue = [\r\n\t\t\t\tpaymentRef,\r\n\t\t\t\tnull,\r\n\t\t\t\t\"$\" + amountPay,\r\n\t\t\t\tpaymentDate\r\n\t\t\t];\r\n\t\t\tloadAmount(amountPay);\r\n\t\t\tstorage.removeItem(\"direct-debit-confirm-details\");\r\n\r\n\t\t\t$ctrl.paymentConfirmationSubDescription =\r\n\t\t\t\t$window.qbe.fieldLabels.paymentConfirmation.bankSubDescription;\r\n\r\n\t\t\t//dd-6181 - call gtm service on payment complete\r\n\t\t\tgtmService.trackUnauthPayments($state.current, formDetails, 'bankAccount', directDebitConfirmation.receiptNumber, directDebitConfirmation.policyNumber);\r\n\t\t} else if (directDebitConfirmation.isSuccess === false) {\r\n\t\t\tstorage.removeItem(\"direct-debit-confirm-details\");\r\n\t\t\t$state.go(\"payments.payments\");\r\n\t\t}\r\n\r\n\t\tfunction loadAmount(amountPay) {\r\n\t\t\t$ctrl.amountDue.amountPay = amountPay;\r\n\t\t\tvar cents = amountPay.substring(amountPay.indexOf(\".\"));\r\n\t\t\t$ctrl.amountDue.amountCents = cents;\r\n\r\n\t\t\tvar dollars = amountPay.substring(0, amountPay.indexOf(\".\"));\r\n\t\t\t$ctrl.amountDue.amountDollars = dollars;\r\n\t\t}\r\n\r\n\t\t$ctrl.cybersourceiFrameUrl = $state.href(\r\n\t\t\t\"cybersourcePaymentForm\",\r\n\t\t\tnull,\r\n\t\t\t{\r\n\t\t\t\tabsolute: true\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\t$ctrl.addCybersourceiFrame = false;\r\n\r\n\t\t$ctrl.elementName = \"Form Controller\";\r\n\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.showConfirm = false;\r\n\t\t$ctrl.showThankYou = false;\r\n\t\t$ctrl.showSwitchButton = false;\r\n\t\t$ctrl.isConfirmed = false;\r\n\t\t$ctrl.closeWindow = function() {\r\n\t\t\t/* gtm track close window */\r\n\t\t\tgtmService.trackStandardEvent('click link', 'exit', '', false);\r\n\t\t\t/* end gtm track close window */\r\n\r\n\t\t\t$scope.$destroy();\r\n\t\t\twindow.location.href =\r\n\t\t\t\t$window.qbe.fieldLabels.buttonLabel.targetUrl;\t\t\t\t\t\r\n\t\t};\r\n\r\n\t\t$ctrl.goToPayments = function() {\r\n\t\t\twindow.location.href = util.linkBuilder($ctrl.paymentsPath);\r\n\t\t};\t\t\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\treturn {\r\n\t\t\t\tpaybillForm: {\r\n\t\t\t\t\tselectInsuranceType: {\r\n\t\t\t\t\t\tcreditCardForm: {\r\n\t\t\t\t\t\t\tccName: \"\",\r\n\t\t\t\t\t\t\tcvcNum: \"\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * QbFormSections register themselves with the form controller.\r\n\t\t * This is done automatically by the form section upon initialisation.\r\n\t\t * @name : name of the form section\r\n\t\t * @init : function callback initialise the section\r\n\t\t * @getValueFn: function callback to get the value of the section.\r\n\t\t */\r\n\t\t$ctrl.registerSection = function(name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t * to the main error page.\r\n\t\t */\r\n\t\t$scope.$on(\"error\", function(event, error) {\r\n\t\t\t$state.go(\"error\", error);\r\n\t\t});\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\t$scope.$on(\"pay-now-button\", function(event, args) {\r\n\t\t\tif (args != \"QBEProducts\") {\r\n\t\t\t\t$ctrl.showPayButton = false;\r\n\t\t\t} else {\r\n\t\t\t\t$ctrl.showPayButton = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"show-form-entry\", function(event, args) {\r\n\t\t\tctpStepCounter($ctrl.initStep);\r\n\t\t\t$ctrl.showConfirm = false;\r\n\t\t\t$ctrl.showThankYou = false;\r\n\t\t\t$ctrl.isConfirmed = false;\r\n\t\t\t$scope.$broadcast(\"show-hint\");\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"confirm-switch\", function(event, args) {\r\n\t\t\t$ctrl.showConfirm = false;\r\n\t\t\t$ctrl.showThankYou = true;\r\n\t\t\t$ctrl.ctpCompleted = true;\r\n\r\n\t\t\t$scope.$broadcast(\"switch-to-QBE\", $ctrl.core.isEligible);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Scrolls a field into view when an error is clicked\r\n\t\t * @param {Object} error Error object with key `name`\r\n\t\t */\r\n\t\t$ctrl.showInView = function(error) {\r\n\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]'));\r\n\t\t};\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif (offset) {\r\n\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\tscrollTop: offset.top - 50,\r\n\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// PAYMENTS FORM START\r\n\t\t$scope.$on(\"billUpdate\", function(event, details) {\r\n\t\t\tif (details) {\r\n\t\t\t\t$ctrl.amountDue.amountPay = details.amount;\r\n\t\t\t\tif (details.amount.indexOf(\".\") > 0) {\r\n\t\t\t\t\tvar cents = details.amount.substring(\r\n\t\t\t\t\t\tdetails.amount.indexOf(\".\")\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$ctrl.amountDue.amountCents = cents;\r\n\r\n\t\t\t\t\tvar dollars = details.amount.substring(\r\n\t\t\t\t\t\t0,\r\n\t\t\t\t\t\tdetails.amount.indexOf(\".\")\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$ctrl.amountDue.amountDollars = dollars;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$ctrl.amountDue.amountCents = \"00\";\r\n\t\t\t\t\t$ctrl.amountDue.amountDollars = details.amount;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$ctrl.amountDue.reference_number = details.reference_number;\r\n\t\t\t\t$ctrl.amountDue.referenceId = details.referenceId;\r\n\t\t\t\t$ctrl.amountDue.paymentType = details.paymentType;\r\n\t\t\t} else {\r\n\t\t\t\t$ctrl.amountDue.amountDollars = null;\r\n\t\t\t\t$ctrl.showQbAmountDue = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/* gtm track payment type select in payment details page */\r\n\t\t$scope.$on(\"trackPaymentDetailsPaymentType\", function(event, paymentType) {\r\n\t\t\tif (paymentType) {\r\n\t\t\t\tvar pType = 'bankAccount';\r\n\t\t\t\tif (paymentType == 'credit-card') {\r\n\t\t\t\t\tpType = 'creditCard';\r\n\t\t\t\t}\r\n\t\t\t\telse if (paymentType == 'paypal') {\r\n\t\t\t\t\tpType = 'payPal';\r\n\t\t\t\t}\r\n\t\t\t\tgtmService.trackPayBillVirtualPageDetails($ctrl.amountDue.reference_number, $ctrl.amountDue.referenceId, pType);\r\n\t\t\t}\r\n\t\t});\r\n\t\t/* end gtm track payment type select in payment details page */\r\n\r\n\t\t$scope.$on(\"toggle-amount-due\", function() {\r\n\t\t\t$ctrl.showQbAmountDue = $ctrl.amountDue.amountDollars != null;\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"set-micoform-instance\", function(event, instance){\r\n\t\t\t$ctrl.microformInstance = instance;\r\n\t\t});\r\n\r\n\t\tfunction isCrditCardPaymentMethod(howToPay) {\r\n\t\t\treturn howToPay === 'credit-card';\r\n\t\t}\r\n\r\n\t\tfunction validateCybersourceCreditCardField() {\r\n\t\t\tvar cardNumberContainerValidClass = document.getElementsByClassName('flex-microform-valid');\r\n\t\t\treturn (cardNumberContainerValidClass && cardNumberContainerValidClass.length > 0) ? true : false;\r\n\t\t}\r\n\t\t$ctrl.payBillNow = function(form) {\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tvar payByCreditCard = isCrditCardPaymentMethod(formData.paybillForm.selectInsuranceType.howToPay);\r\n\r\n\t\t\t$scope.$broadcast(\"form-submitted\");\r\n\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tisInvalid = form.$invalid;\r\n\t\t\t\r\n\t\t\tif (payByCreditCard) {\r\n\t\t\t\t//init refresh cvc validation stataus\r\n\t\t\t\t$scope.$broadcast(\"credit-card-cvc-isvalid\", true);\r\n\r\n\t\t\t\tif (!validateCybersourceCreditCardField()) {\r\n\t\t\t\t\tif (!isInvalid) {\r\n\t\t\t\t\t\tisInvalid = true;\r\n\t\t\t\t\t}\t\t\t\t\r\n\t\t\t\t\t$scope.$broadcast(\"credit-card-number-isvalid\", false);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$scope.$broadcast(\"credit-card-number-isvalid\", true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (isInvalid) {\r\n\t\t\t\t$scope.$broadcast(\"broadcast-field-errors\");\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast(\"reset-field-errors\");\r\n\t\t\t\tif ($(\"#combinedValidationListing\").length) {\r\n\t\t\t\t\tscrollViewTo($(\"#combinedValidationListing\"));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tscrollViewTo($(\"#content\"));\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tif (!formData.paybillForm.selectInsuranceType.howToPay) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tformData.paybillForm.selectInsuranceType.selectInsuranceType ===\r\n\t\t\t\tnull\r\n\t\t\t) {\r\n\t\t\t\treturn false;\r\n\t\t\t} else\r\n\t\t\t\t$ctrl.selectInsuranceType =\r\n\t\t\t\t\tformData.paybillForm.selectInsuranceType.selectInsuranceType;\r\n\r\n\t\t\t// dd-6181 - call gtm service to track payment\r\n\t\t\tgtmService.trackUnauthPayments(\r\n\t\t\t\t$state.current,\r\n\t\t\t\tformData.paybillForm.selectInsuranceType\r\n\t\t\t);\r\n\r\n\t\t\t$ctrl.paymentAttempt++;\r\n\r\n\t\t\tif (formData.paybillForm.selectInsuranceType.howToPay == \"paypal\") {\r\n\t\t\t\tpaymentService.unAuthPaypalPayment(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treferenceNumber: $ctrl.amountDue.referenceId,\r\n\t\t\t\t\t\tpaymentType: $ctrl.amountDue.paymentType,\r\n\t\t\t\t\t\tredirectUrl: \"\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// on successfully calling the Create Paypal Payment service\r\n\t\t\t\t\tfunction(redirectUrl) {\r\n\t\t\t\t\t\tstorage.setItem(\"confirmation-details\", {\r\n\t\t\t\t\t\t\treferenceNumber: $ctrl.amountDue.reference_number,\r\n\t\t\t\t\t\t\tamount: $ctrl.amountDue,\r\n\t\t\t\t\t\t\ttransactionId: $ctrl.selectInsuranceType\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t$window.location.href = redirectUrl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// on error\r\n\t\t\t\t\tfunction(errorResponse) {\r\n\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\"paypal payment error\",\r\n\t\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\t\t\t\t\t\tconsole.error(errorResponse);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t} else if (\r\n\t\t\t\tformData.paybillForm.selectInsuranceType.howToPay ==\r\n\t\t\t\t\"bank-account\"\r\n\t\t\t) {\r\n\t\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\t\tpaymentService.unAuthDirectDebitPayment(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tamountPay: $ctrl.amountDue.amountPay,\r\n\t\t\t\t\t\treferenceNumber: $ctrl.amountDue.referenceId,\r\n\t\t\t\t\t\tpaymentType: $ctrl.amountDue.paymentType,\r\n\t\t\t\t\t\tbsb:\r\n\t\t\t\t\t\t\tformData.paybillForm.selectInsuranceType\r\n\t\t\t\t\t\t\t\t.bankAccountForm.bsb,\r\n\t\t\t\t\t\taccountNumber:\r\n\t\t\t\t\t\t\tformData.paybillForm.selectInsuranceType\r\n\t\t\t\t\t\t\t\t.bankAccountForm.accountNumber,\r\n\t\t\t\t\t\taccountName:\r\n\t\t\t\t\t\t\tformData.paybillForm.selectInsuranceType\r\n\t\t\t\t\t\t\t\t.bankAccountForm.accountName\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// on successfully calling the Payment service\r\n\t\t\t\t\tfunction(response) {\r\n\t\t\t\t\t\tif (response.status === \"SUCCESS\") {\r\n\t\t\t\t\t\t\tstorage.setItem(\"direct-debit-confirm-details\", {\r\n\t\t\t\t\t\t\t\tisSuccess: true\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tstorage.setItem(\"confirmation-details\", {\r\n\t\t\t\t\t\t\t\treferenceNumber:\r\n\t\t\t\t\t\t\t\t\t$ctrl.amountDue.reference_number,\r\n\t\t\t\t\t\t\t\tamount: $ctrl.amountDue,\r\n\t\t\t\t\t\t\t\ttransactionId: $ctrl.selectInsuranceType\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\t\"payment successful\",\r\n\t\t\t\t\t\t\t\t\"show done page\",\r\n\t\t\t\t\t\t\t\tnull\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t$state.go(\"payments.complete\");\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\t\t\t\t\"show error page\",\r\n\t\t\t\t\t\t\t\tnull\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t\t\t$scope.$broadcast(\"direct-debit-payment-error\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// on error\r\n\t\t\t\t\tfunction(errorResponse) {\r\n\t\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\t\"bank debit payment error\",\r\n\t\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\t\t\t\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t\t\t\t\t$scope.$broadcast(\"direct-debit-payment-error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\t// pay by credit card\r\n\t\t\t\ttokeniseAndPayByCreditCard(\r\n\t\t\t\t\tformData.paybillForm.selectInsuranceType.creditCardForm\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$scope.$on(\"redirect-payment-decline\", function() {\r\n\t\t\twindow.location.href = util.linkBuilder(\r\n\t\t\t\t$ctrl.returnDeclineURLPath + \"?return=true\"\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tfunction setPaymentErrorAfterCybersourceTokenization(err) {\r\n\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\"return payment page\",\r\n\t\t\t\terr\r\n\t\t\t);\r\n\t\t\t$rootScope.$broadcast(\r\n\t\t\t\t\"cyber-source-error\",\r\n\t\t\t\t\"Form validation error\"\r\n\t\t\t);\r\n\t\t\tstorage.removeItem(\"creditcard-confirm-details\");\r\n\t\t\tstorage.setItem(\"payment-error-details\", {\r\n\t\t\t\tmode: \"cc\"\r\n\t\t\t});\r\n\t\t\t$state.go(\"payments.payments\");\r\n\r\n\t\t\t$scope.$broadcast(\"credit-card-number-isvalid\", false);\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t}\r\n\t\tfunction setPaymentErrorAfterCybersourceTokenizationCvcInvalid(err) {\r\n\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\"return payment page\",\r\n\t\t\t\terr\r\n\t\t\t);\r\n\t\t\t$rootScope.$broadcast(\r\n\t\t\t\t\"cyber-source-error\",\r\n\t\t\t\t\"Form validation error\"\r\n\t\t\t);\r\n\t\t\tstorage.removeItem(\"creditcard-confirm-details\");\r\n\t\t\tstorage.setItem(\"payment-error-details\", {\r\n\t\t\t\tmode: \"cc\"\r\n\t\t\t});\r\n\t\t\t$state.go(\"payments.payments\");\r\n\r\n\t\t\t$scope.$broadcast(\"credit-card-cvc-isvalid\", false);\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\t\t}\r\n\t\tfunction tokeniseAndPayByCreditCard(creditCardForm) {\t\t\t\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-start\");\r\n\r\n\t\t\t// Send in optional parameters from other parts of your payment form\r\n\t\t\tvar options = {\r\n\t\t\t\tcardExpirationMonth: creditCardForm.expiryMonth,\r\n\t\t\t\tcardExpirationYear: new Date().getFullYear().toString().substr(0, 2) + creditCardForm.expiryYear,\r\n\t\t\t\tcardCvc: creditCardForm.cvcNum,\r\n\t\t\t\treferenceNumber: $ctrl.amountDue.referenceId,\r\n\t\t\t\tpaymentType: $ctrl.amountDue.paymentType\r\n\t\t\t};\r\n\r\n\t\t\t$ctrl.microformInstance.createToken(options, function (err, response) {\r\n\t\t\t\tif (err) {\r\n\t\t\t\t\tsetPaymentErrorAfterCybersourceTokenization(err);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\telse if (response) {\t\t\r\n\t\t\t\t\tif (response.cardType != '001' && response.cardType != '002' && response.cardType != '003') {\r\n\t\t\t\t\t\tsetPaymentErrorAfterCybersourceTokenization(err);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (response.cardType === '001' || response.cardType === '002') {\r\n\t\t\t\t\t\t\tif (creditCardForm.cvcNum && creditCardForm.cvcNum.toString().length != 3) {\r\n\t\t\t\t\t\t\t\tsetPaymentErrorAfterCybersourceTokenizationCvcInvalid('Invalid CVC');\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (creditCardForm.cvcNum && creditCardForm.cvcNum.toString().length != 4) {\r\n\t\t\t\t\t\t\tsetPaymentErrorAfterCybersourceTokenizationCvcInvalid('Invalid CVC');\r\n\t\t\t\t\t\t\treturn;\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\r\n\t\t\t\t\t}\t\t\t\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpayByCreditCard(creditCardForm, response);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction payByCreditCard(creditCardForm, flexiResponse) {\r\n\t\t\t\r\n\t\t\tpaymentService.unAuthCreditCardPayment(\r\n\t\t\t\t// pass credit card data\r\n\t\t\t\t{\r\n\t\t\t\t\tcardToken: flexiResponse.token,\r\n\t\t\t\t\tcardHolderName: creditCardForm.ccName,\r\n\t\t\t\t\tcvc: creditCardForm.cvcNum,\r\n\t\t\t\t\ttype: flexiResponse.cardType,\r\n\t\t\t\t\tcardExpiryDate: creditCardForm.expiryDate,\r\n\t\t\t\t\treferenceNumber: $ctrl.amountDue.referenceId,\r\n\t\t\t\t\tpaymentType: $ctrl.amountDue.paymentType\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Creditcard Payment service\r\n\t\t\t\tfunction(creditCardPaymentData) {\r\n\t\t\t\t\t// make the scope available globally. This data will be used by the iFrame to construct the form that will post to Cybersource\r\n\t\t\t\t\t$window.$controllerScope = $scope;\r\n\r\n\t\t\t\t\t// set the data to send to Cybersource to the scope\r\n\t\t\t\t\t$scope.creditCardPaymentData = creditCardPaymentData;\r\n\t\t\t\t\t// set the URL for the iFrame to the Cybersource Payment Form (which will use the `creditCardPaymentData`) to generate and submit the form\r\n\t\t\t\t\t$ctrl.addCybersourceiFrame = true;\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempt == 2) {\r\n\t\t\t\t\t\t$ctrl.addCybersourceRetryAttempt = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ($ctrl.paymentAttempt == CREDIT_CARD_ATTEMPT) {\r\n\t\t\t\t\t\t$ctrl.addCybersourceLastAttempt = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction(errorResponse) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"cc payment error\",\r\n\t\t\t\t\t\t\"show oh snap page\",\r\n\t\t\t\t\t\terrorResponse\r\n\t\t\t\t\t);\r\n\t\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\t\t\t\t\t// dd-4003-push error to gtm data layer\r\n\t\t\t\t\tgtmService.trackEvent(errorResponse, \"ccPaymentError\");\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t$scope.onPaymentCallback = function(success, params) {\r\n\t\t\t$rootScope.$broadcast(\"loading-animation-end\");\r\n\r\n\t\t\tif (success) {\r\n\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\tpolicyNumber: params.policyNumber,\r\n\t\t\t\t\t//accountNumber: params.accountNumber,\r\n\t\t\t\t\treceiptNumber: params.receiptNumber,\r\n\t\t\t\t\tisSuccess: params.status === \"SUCCESS\"\r\n\t\t\t\t};\r\n\r\n\t\t\t\tstorage.setItem(\"creditcard-confirm-details\", confirmationData);\r\n\r\n\t\t\t\tstorage.setItem(\"confirmation-details\", {\r\n\t\t\t\t\treferenceNumber: $ctrl.amountDue.reference_number,\r\n\t\t\t\t\tamount: $ctrl.amountDue,\r\n\t\t\t\t\tpolicyNumber: params.policyNumber,\r\n\t\t\t\t\ttransactionId: $ctrl.selectInsuranceType\r\n\t\t\t\t\t// accountNumber: params.accountNumber\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\"payment successful\",\r\n\t\t\t\t\t\"show done page\",\r\n\t\t\t\t\tnull\r\n\t\t\t\t);\r\n\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\r\n\t\t\t\t// Go to confirmation\r\n\t\t\t\t$state.go(\"payments.complete\", confirmationData);\r\n\t\t\t} else {\r\n\t\t\t\tvar declineParam = {\r\n\t\t\t\t\treferenceNumber: $ctrl.amountDue.reference_number\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif ($ctrl.paymentAttempt === CREDIT_CARD_ATTEMPT) {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\t\t\"show referral page\",\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\t\t\t\t\tstorage.removeItem(\"unauth-reference\");\r\n\t\t\t\t\t$state.go(\"decline\", declineParam);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t\"payment unsuccessful\",\r\n\t\t\t\t\t\t\"show decline page\",\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$rootScope.$broadcast(\r\n\t\t\t\t\t\t\"cyber-source-error\",\r\n\t\t\t\t\t\tparams.reasonCode\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Takes care of\r\n\t\t * - registering the labels generated by sitecore\r\n\t\t * - setting default values\r\n\t\t * - prepopulating retrieve quote if required.\r\n\t\t */\r\n\t\t$ctrl.initPage = function() {\r\n\t\t\tresizePayBills();\r\n\t\t\tutil.dispatchCustomEvent(\"register-labels\");\r\n\t\t\tctpStepCounter($ctrl.initStep); //Progress Counter\r\n\t\t};\r\n\r\n\t\tfunction resizePayBills() {\r\n\t\t\tvar footHeight = $(\".footer\").outerHeight(),\r\n\t\t\t\twindowHeight = $(window).height(),\r\n\t\t\t\tdocumentHeight = $(document).height(),\r\n\t\t\t\tminHeight;\r\n\r\n\t\t\tif ($(window).outerWidth() >= 768) {\r\n\t\t\t\tif (documentHeight > windowHeight) {\r\n\t\t\t\t\tminHeight = documentHeight - footHeight - 5;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tminHeight = windowHeight - footHeight - 5;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(\".col1, .col2\").css(\"min-height\", minHeight + \"px\");\r\n\t\t\t} else {\r\n\t\t\t\t$(\".col1, .col2\").css(\"min-height\", \"auto\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n]);\r\n","angular.module('qbePortal').controller('PaypalCallbackController', [\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'dynamicRouter',\r\n\t'paymentService',\r\n\t'storage',\r\n\t'Util',\r\n\t'MODULE_INFO',\r\n\t'paymentLoggerService',\r\n\tfunction(\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\t$stateParams,\r\n\t\tdynamicRouter,\r\n\t\tpaymentService,\r\n\t\tstorage,\r\n\t\tUtil,\r\n\t\tMODULE_INFO,\r\n\t\tpaymentLoggerService\r\n\t) {\r\n\t\tvar $ctrl = this;\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\tvar success = ($stateParams.success = !!$stateParams.PayerID);\r\n\r\n\t\tif (!success) {\r\n\t\t\t// Go back to payment page if unsuccessful\r\n\t\t\tstorage.setItem('paypal-confirm-details', {\r\n\t\t\t\tisSuccess: false,\r\n\t\t\t\tmode: 'paypal'\r\n\t\t\t});\r\n\t\t\treturn $state.go(MODULE_INFO.paymentPageRouteName);\r\n\t\t}\r\n\r\n\t\tif (MODULE_INFO.id == 'payments') {\r\n\t\t\tpaymentService\r\n\t\t\t\t.unAuthSendPaypalPaymentToGW(\r\n\t\t\t\t\t$stateParams.PayerID,\r\n\t\t\t\t\t$stateParams.sessionId,\r\n\t\t\t\t\t$stateParams.paymentId\r\n\t\t\t\t)\r\n\t\t\t\t.then(function(_guidewirePaypalPaymentResponse) {\r\n\t\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\t\tpolicyNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.policyNumber,\r\n\t\t\t\t\t\taccountNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.accountNumber,\r\n\t\t\t\t\t\treceiptNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.receiptNumber,\r\n\t\t\t\t\t\tisAwaitingProcess:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.status ===\r\n\t\t\t\t\t\t\t'AWAITING_PROCESS',\r\n\t\t\t\t\t\tisSuccess:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.status ===\r\n\t\t\t\t\t\t\t'SUCCESS'\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tstorage.setItem('paypal-confirm-details', confirmationData);\r\n\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t'sending Paypal payment to GW',\r\n\t\t\t\t\t\t'show done page or error page',\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\t$state.go(MODULE_INFO.donePageRouteName, confirmationData);\r\n\t\t\t\t\tconsole.log(\r\n\t\t\t\t\t\t'Great success! PayPal payment done! Go to confirmation page with data ',\r\n\t\t\t\t\t\tconfirmationData\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tpaymentService\r\n\t\t\t\t.sendPaypalPaymentToGW(\r\n\t\t\t\t\t$stateParams.PayerID,\r\n\t\t\t\t\t$stateParams.sessionId\r\n\t\t\t\t)\r\n\t\t\t\t.then(function(_guidewirePaypalPaymentResponse) {\r\n\t\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\t\tpolicyNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.policyNumber,\r\n\t\t\t\t\t\taccountNumber:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.accountNumber,\r\n\t\t\t\t\t\tisAwaitingProcess:\r\n\t\t\t\t\t\t\t_guidewirePaypalPaymentResponse.data.status ===\r\n\t\t\t\t\t\t\t'AWAITING_PROCESS'\r\n\t\t\t\t\t};\r\n\t\t\t\t\tpaymentLoggerService.trackQuoteStatus(\r\n\t\t\t\t\t\t'sending Paypal payment to GW - payment successful',\r\n\t\t\t\t\t\t'show done page or error page',\r\n\t\t\t\t\t\tnull\r\n\t\t\t\t\t);\r\n\t\t\t\t\t$state.go(MODULE_INFO.donePageRouteName, confirmationData);\r\n\t\t\t\t\tconsole.log(\r\n\t\t\t\t\t\t'Great success! PayPal payment done! Go to confirmation page with data ',\r\n\t\t\t\t\t\tconfirmationData\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n]);\r\n","angular.module('qbePortal').controller('PlaneController', [\r\n\t'$rootScope',\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'$window',\r\n\t'userInputRepository',\r\n\t'serviceResponseRepository',\r\n\t'quoteOptions',\r\n\t'paymentService',\r\n\t'quoteModelFactory',\r\n\t'dynamicRouter',\r\n\t'portalServiceWrapper',\r\n\t'MAService',\r\n\t'labelService',\r\n\t'Util',\r\n\t'$q',\r\n\t'storage',\r\n\t'jwtHelper',\r\n\t'gtmService',\r\n\t'quoteRequestRepository',\r\n\t'MODULE_INFO',\r\n\tfunction ($rootScope, $scope, $state, $stateParams, $window, userInputRepository, serviceResponseRepository, quoteOptions, paymentService, quoteModelFactory, dynamicRouter, portalServiceWrapper, MAService, labelService, util, $q, storage, jwtHelper, gtmService, quoteRequestRepository, MODULE_INFO) {\r\n\t\tvar $ctrl = this;\r\n\t\t$rootScope.$broadcast('loading-animation-end');\r\n\r\n\t\t/** \r\n\t\t* routing initialisation, enabling/disabling (hiding/showing) available routes\r\n\t\t* testing for allowed routes and redirecting when not allowed\r\n\t\t*/\r\n\t\tfunction markCompletedRouteCallback(stateName){\r\n\t\t\tstorage.setItem('completed-step', stateName);\r\n\t\t}\r\n\r\n\t\tfunction initialiseRouting(){\r\n\t\t\tdynamicRouter.initialise($state.current.name, $state.$current.parent.name, null, markCompletedRouteCallback);\r\n\t\t\t$ctrl.title = dynamicRouter.getPageTitle();\r\n\t\t\t$ctrl.steps = dynamicRouter.getSteps();\r\n\t\t}\r\n\t\t/** End of routing logic */\r\n\t\t\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.moduleId = MODULE_INFO.id ;\r\n\r\n\t\t$ctrl.cybersourceiFrameUrl = $state.href('cybersourcePaymentForm', null, {absolute: true});\r\n\t\t$ctrl.addCybersourceiFrame = false ; \r\n\t\t$ctrl.summaryModel = quoteModelFactory.create();\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\treturn {\r\n\t\t\t\tfromFullQuote: true,\r\n\t\t\t\tpaymentForm: {\r\n\t\t\t\t\tpaymentDetails :{\r\n\t\t\t\t\t\tpaymentOptions: 'yearly'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif ( offset ) {\r\n\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t* QbFormSections register themselves with the form controller.\r\n\t\t* This is done automatically by the form section upon initialisation.\r\n\t\t* @name : name of the form section\r\n\t\t* @init : function callback initialise the section\r\n\t\t* @getValueFn: function callback to get the value of the section.\r\n\t\t*/\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t* Any generic breaking errors should broadcast 'error' to the rootScope. This will cause redirection\r\n\t\t* to the main error page.\r\n\t\t*/\r\n\t\t$scope.$on('error', function(event, error) {\r\n\t\t\t$state.go('error', error);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t* calls MA Services to add marketing data.\r\n\t\t*/\r\n\t\t$scope.$on('perform-ma-service', function(event, triggeredBy) {\r\n\t\t\tperformMAServices(triggeredBy) ;\r\n\t\t});\r\n\r\n\t\t$scope.$on('back', function () {\r\n\t\t\tgtmService.trackEvent('back') ;\r\n\t\t\t$ctrl.back()\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t* called from qbFormSection and any other panel that requires a requote based on new values.\r\n\t\t*/\r\n\t\t$scope.$on('requote', function(event, page) {\r\n\t\t\tgtmService.trackEvent('requote') ;\r\n\t\t\t$rootScope.$broadcast('loading-animation-start');\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tgetRequote(formData, page, function(resp) {\r\n\t\t\t\t$rootScope.$broadcast('loading-animation-end');\r\n\t\t\t\t$rootScope.$broadcast('quote-received', resp);\r\n\t\t\t\t$rootScope.$broadcast('selected-quote-changed') ;\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput() ;\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction getRequote(formData, page, callback) {\r\n\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\t\t\tvar requoteOptions = quoteOptions.getRequoteOptions(MODULE_INFO.paymentPageRouteName);\r\n\t\t\tif ( requoteOptions ) {\r\n\t\t\t\tportalServiceWrapper\r\n\t\t\t\t\t.getQuickQuote(requoteOptions.permutations, requoteOptions.rules).then(function(resp) {\r\n\t\t\t\t\t\tif (callback )\r\n\t\t\t\t\t\t\tcallback(resp) ;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t\tconsole.log(err) ;\r\n\t\t\t\t\t\tbroadcastError(err, 'Requote error');\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\treturn false ;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t$ctrl.save = function () {\r\n\t\t\t$rootScope.$broadcast('open-modal', { modal: 'saveQuote' });\r\n\t\t};\r\n\r\n\t\t$ctrl.back = function () {\r\n\t\t\tgtmService.trackEvent('back') ;\r\n\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\tvar backState = dynamicRouter.back();\r\n\t\t\tif ( backState )\r\n\t\t\t\t$state.go(backState);\r\n\t\t\telse {\r\n\t\t\t\tvar formData = getUserInput() ;\r\n\t\t\t\tif ( formData.rapidEstimateUrl )\r\n\t\t\t\t\twindow.location.href = formData.rapidEstimateUrl ;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\t\t\tgtmService.trackEvent('next') ;\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tif (form.$invalid) {\r\n\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\tscrollViewTo($('#combinedValidationListing')) ;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tprocessPayment(form) ;\r\n\t\t};\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tgetUserInput() ;\r\n\t\t\tvar mainPolicyHolder = userInputRepository.get({}, 'caravanForm.mainPolicyHolder');\r\n\t\t\tvar policyEmail = userInputRepository.get({}, 'email') ;\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom('quote') ;\r\n\t\t\tvar maData = {\r\n\t\t\t\tpageName: $state.current.name,\r\n\t\t\t\tmainPolicyHolder: mainPolicyHolder,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult.getAnnual(),\r\n\t\t\t\tmonthlyResult: quoteResult.getMonthly(),\r\n\t\t\t\tquoteId : savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\t\t\tMAService.mergeContacts(eventName, maData) ;\r\n\t\t}\r\n\r\n\t\tfunction processPayment(form) {\r\n\t\t\tformData = getUserInput();\r\n\r\n\t\t\tvar paymentDetailsForm = form.paymentDetails;\r\n\r\n\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t$rootScope.$broadcast('loading-animation-start');\r\n\t\t\tswitch (formData.paymentForm.paymentDetails.paymentMethod) {\r\n\t\t\t\tcase 'creditcard':\r\n\t\t\t\t\tpayByCreditCard(formData, paymentDetailsForm);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'paypal':\r\n\t\t\t\t\t// handled by qbFormSection.directive.payByPaypal()\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'bankaccount':\r\n\t\t\t\t\tpayByDirectDebit(formData);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction payByCreditCard(formData, form) {\r\n\t\t\tpaymentService.payByCreditCard(\r\n\t\t\t\t// pass credit card data\r\n\t\t\t\t{\r\n\t\t\t\t\tcardNumber: formData.paymentForm.paymentDetails.cardNumber,\r\n\t\t\t\t\tcardHolderName: formData.paymentForm.paymentDetails.cardHolderName,\r\n\t\t\t\t\tcvc: formData.paymentForm.paymentDetails.cardCvc,\r\n\t\t\t\t\ttype: form.cardNumber.$ccType,\r\n\t\t\t\t\tcardExpiryDate: formData.paymentForm.paymentDetails.cardExpiryDate\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Creditcard Payment service\r\n\t\t\t\tfunction (creditCardPaymentData) {\r\n\t\t\t\t\t// make the scope available globally. This data will be used by the iFrame to construct the form that will post to Cybersource\r\n\t\t\t\t\t$window.$controllerScope = $scope;\r\n\t\t\t\t\t// set the data to send to Cybersource to the scope\r\n\t\t\t\t\t$scope.creditCardPaymentData = creditCardPaymentData;\r\n\t\t\t\t\t// set the URL for the iFrame to the Cybersource Payment Form (which will use the `creditCardPaymentData`) to generate and submit the form\r\n\t\t\t\t\t$ctrl.addCybersourceiFrame = true ; \r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tconsole.error(errorResponse);\r\n\t\t\t\t\t$state.go('error');\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction payByDirectDebit(formData) {\r\n\t\t\tpaymentService.payByDirectDebit(\r\n\t\t\t\t// pass bank account data\r\n\t\t\t\t{\r\n\t\t\t\t\tbsb: formData.paymentForm.paymentDetails.bsb,\r\n\t\t\t\t\taccountNumber: formData.paymentForm.paymentDetails.accountNumber,\r\n\t\t\t\t\taccountName: formData.paymentForm.paymentDetails.accountName\r\n\t\t\t\t},\r\n\t\t\t\t// on successfully calling the Create Direct Debit Payment service\r\n\t\t\t\tfunction (directDebitPaymentData) {\r\n\t\t\t\t\t$scope.onPaymentCallback(true, directDebitPaymentData);\r\n\t\t\t\t},\r\n\t\t\t\t// on error\r\n\t\t\t\tfunction (errorResponse) {\r\n\t\t\t\t\tconsole.error(errorResponse);\r\n\t\t\t\t\t$state.go('error');\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\r\n\t\t/**\r\n\t\t * Initialisation method of the payment page\r\n\t\t */\r\n\t\t$ctrl.initPaymentPage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\t\r\n\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t$ctrl.termsAndConditions = false;\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\tformData.paymentForm.paymentDetails.termsAndConditions = false ;\r\n\t\t\tquoteOptions.setSelectedPaymentFrequency(formData.paymentForm.paymentDetails.paymentOptions) ;\r\n\t\t\t$ctrl.formData = formData ;\r\n\t\t\tgetRequote(formData);\r\n\t\t\t$scope.$on('payment-method-changed', function(event, paymentMethod) {\r\n\t\t\t\t$ctrl.paymentMethod = paymentMethod;\r\n\t\t\t});\r\n\t\t\t$scope.$on('terms-and-conditions-changed', function(event, termsAndConditions) {\r\n\t\t\t\t$ctrl.termsAndConditions = termsAndConditions;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/**\r\n\t\t * This callback is called from the iFrame when the response is received from the GuideWire payment service\r\n\t\t * @param success\r\n\t\t * @param stateParams\r\n\t\t */\r\n\t\t$scope.onPaymentCallback = function (success, params) {\r\n\t\t\t$rootScope.$broadcast('loading-animation-end');\r\n\r\n\t\t\tif (success) {\r\n\t\t\t\tvar confirmationData = {\r\n\t\t\t\t\tpolicyNumber: params.policyNumber,\r\n\t\t\t\t\taccountNumber: params.accountNumber,\r\n\t\t\t\t\tisAwaitingProcess: params.status === 'AWAITING_PROCESS'\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Go to confirmation\r\n\t\t\t\t$state.go(MODULE_INFO.donePageRouteName, confirmationData);\r\n\t\t\t\t// console.log('Great success! Payment completed! Move to confirmation page', confirmationData);\r\n\t\t\t}else{\r\n\t\t\t\t//payment error - show error page\r\n\t\t\t\t$state.go('error');\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}]\r\n);\r\n","angular.module('qbePortal').controller('PolicyStartDateController', [\r\n\t'$rootScope',\r\n\t'$scope',\r\n\t'$state',\r\n\t'$stateParams',\r\n\t'$window',\r\n\t'userInputRepository',\r\n\t'serviceResponseRepository',\r\n\t'dynamicRouter',\r\n\t'labelService',\r\n\t'Util',\r\n\t'$q',\r\n\t'storage',\r\n\t'gtmService',\r\n\tfunction ($rootScope, $scope, $state, $stateParams, $window, userInputRepository, serviceResponseRepository, dynamicRouter, labelService, util, $q, storage, gtmService) {\r\n\t\tvar $ctrl = this;\r\n\t\t$ctrl.validationErrors = null;\r\n\t\t$ctrl.sections = {};\r\n\t\t$ctrl.state = $state;\r\n\t\t$ctrl.storage = storage;\t\t\r\n\r\n\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\r\n\t\t$ctrl.registerSection = function (name, init, getValueFn) {\r\n\t\t\t$ctrl.sections[name] = {\r\n\t\t\t\tinitValue: init,\r\n\t\t\t\tgetValue: getValueFn\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tfunction markCompletedRouteCallback(stateName) {\r\n\t\t\tstorage.setItem('completed-step', stateName);\r\n\t\t}\r\n\r\n\t\tfunction initialiseRouting() {\r\n\t\t\tvar isRetrieve = storage.getItem('policy-date-input');\r\n\t\t\tif (angular.equals(isRetrieve, {})) // check \r\n\t\t\t\tdynamicRouter.initialise($ctrl.state.current.name, $ctrl.state.$current.parent.name, null, markCompletedRouteCallback);\r\n\t\t}\r\n\r\n\t\t$ctrl.initPolicyStartDatePage = function () {\r\n\t\t\tinitialiseRouting();\r\n\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t$ctrl.formData = getUserInput();\r\n\t\t}\r\n\r\n\t\t$ctrl.submit = function (form) {\r\n\r\n\t\t\t//gtmService.trackEvent('next');\r\n\t\t\t$ctrl.showErrorSummary = false;\r\n\t\t\tif (form.$invalid) {\r\n\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t$ctrl.showErrorSummary = true;\r\n\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\tscrollViewTo($('#combinedValidationListing'));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar formData = getUserInput();\r\n\t\t\t$ctrl.formData = formData;\r\n\t\t\tvar product = $state.$current.parent.name + 'Form';\r\n\t\t\tvar input = storage.getItem('policy-date-input');\t\r\n\t\t\tif(product !== 'homeForm'){\t\t\r\n\t\t\t\tinput[product].getStarted.policyStartDate = $ctrl.formData.pastPolicyStartDateForm.pastPolicyStartDateDetails.policyStartDate;\t\t\t\t\r\n\t\t\t}\t\t\t\t\r\n\t\t\telse{\r\n\t\t\t\tinput[product].letsGetStarted.startCoverDate = $ctrl.formData.pastPolicyStartDateForm.pastPolicyStartDateDetails.policyStartDate;\t\t\t\t\r\n\t\t\t\tstorage.setItem('completed-step', dynamicRouter.getState(0));\r\n\t\t\t}\t\t\r\n\t\t\tuserInputRepository.update(input);\t\t\t\t\r\n\t\t\tstorage.removeItem('policy-date-input');\t\t\t\t\t\t\r\n\t\t\tmoveToState($state.$current.parent.name);\r\n\t\t}\r\n\r\n\t\tfunction moveToState(stateParent) {\r\n\t\t\tif(stateParent !== 'home')\r\n\t\t\t\t$state.go(dynamicRouter.getState(0));\r\n\t\t\telse {\r\n\t\t\t\t$state.go(dynamicRouter.getState(1));\r\n\t\t\t}\t\r\n\t\t}\r\n\r\n\t\tfunction getUserInput() {\r\n\t\t\tvar formData = getFormInput();\r\n\t\t\tuserInputRepository.update(formData);\r\n\t\t\treturn userInputRepository.get(getDefaultValues());\r\n\t\t}\r\n\r\n\t\tfunction getFormInput() {\r\n\t\t\tvar formData = {};\r\n\t\t\tfor (var key in $ctrl.sections) {\r\n\t\t\t\tformData[key] = $ctrl.sections[key].getValue();\r\n\t\t\t}\r\n\t\t\treturn formData;\r\n\t\t}\r\n\r\n\t\tfunction getDefaultValues() {\r\n\t\t\tvar defaultValues = {\r\n\t\t\t\tpastPolicyStartDateForm: {\r\n\t\t\t\t\tpastPolicyStartDateDetails: {\r\n\t\t\t\t\t\tpolicyStartDate: moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY'),\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\treturn defaultValues;\r\n\t\t}\r\n\r\n\t\tfunction scrollViewTo($element) {\r\n\t\t\tvar offset = $element.offset();\r\n\t\t\tif ( offset ) {\r\n\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\r\n\t}\r\n]);\r\n","angular.module('qbePortal.rapidEstimate.vehicle')\r\n\t.controller('RapidEstimateController', [\r\n\t\t'$scope',\r\n\t\t'$location',\r\n\t\t'userInputRepository',\r\n\t\t'labelService',\r\n\t\t'portalServiceWrapper',\r\n\t\t'quoteOptions',\r\n\t\t'Util',\r\n\t\t'serviceResponseRepository',\r\n\t\t'gtmService',\r\n\t\t'$sce',\r\n\t\tfunction($scope, $location, userInputRepository, labelService, portalServiceWrapper, quoteOptions, util, serviceResponseRepository, gtmService, $sce) {\r\n\t\t\tvar vm = this;\r\n\t\t\tvm.formData = {};\r\n\t\t\tvm.validationErrors = null;\r\n\t\t\tvm.sections = {};\r\n\t\t\tvm.promoCode = util.getQueryStringByName(window.location, 'promotionalCode') ;\r\n\r\n\t\t\tvm.initPage= function() {\r\n\t\t\t\tutil.dispatchCustomEvent('register-labels');\r\n\t\t\t}\r\n\r\n\t\t\tvm.formData = userInputRepository.get({\r\n\t\t\t\tvehicleForm: {\r\n\t\t\t\t\ttellUsMore: {\r\n\t\t\t\t\t\tpromotionalCode: vm.promoCode\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvm.registerSection = function (name, init, getValueFn) {\r\n\t\t\t\tvm.sections[name] = getValueFn;\r\n\t\t\t}\r\n\r\n\t\t\t// Submit form to get quickQuote\r\n\t\t\tvm.submit = function(event, form) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tgtmService.trackEvent('rapid-estimate-submit') ;\r\n\r\n\t\t\t\tvm.showErrorSummary = false;\r\n\t\t\t\tisInvalid = form.$invalid;\r\n\r\n\t\t\t\tif (isInvalid) {\r\n\t\t\t\t\t$scope.$broadcast('broadcast-field-errors');\r\n\t\t\t\t\tvm.showErrorSummary = true;\r\n\t\t\t\t\t$scope.$broadcast('reset-field-errors');\r\n\t\t\t\t\tconsole.info(' Form is not valid');\r\n\t\t\t\t\tscrollViewTo($('#combinedValidationListing')) ;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$scope.$root.$broadcast('loading-animation-start');\r\n\r\n\t\t\t\t// Populate formData\r\n\t\t\t\tvar formData = {};\r\n\t\t\t\tfor (var key in this.sections) {\r\n\t\t\t\t\tformData[key] = this.sections[key]();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t//var formattedDate = moment().tz(\"Australia/Sydney\").format('YYYY-MM-DD') ;\r\n\r\n\t\t\t\tvar now = moment().tz(\"Australia/Sydney\").format('DD/MM/YYYY');\r\n\t\t\t\tformData.vehicleForm.getStarted = {\r\n\t\t\t\t\tpersonOrCompany: 'person',\r\n\t\t\t\t\tpolicyStartDate: now\r\n\t\t\t\t};\r\n\t\t\t\tformData.vehicleForm.driver.drivers = [];\r\n\t\t\t\tformData.vehicleForm.driver.drivers[0] = {\r\n\t\t\t\t\tperson: util.deepClone(formData.vehicleForm.driver)\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(formData.vehicleForm.tellUsMore) {\r\n\t\t\t\t\tformData.email = formData.vehicleForm.tellUsMore.email;\r\n\t\t\t\t\tformData.vehicleForm.promotionalCode = {\r\n\t\t\t\t\t\tpromotionalCode: formData.vehicleForm.tellUsMore.promotionalCode\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tuserInputRepository.update(formData);\r\n\r\n\t\t\t\tportalServiceWrapper.updateQuote(formData);\r\n\r\n\t\t\t\tvar quickQuoteOptions = quoteOptions.getQuickQuoteOptionsForStep('rapidEstimate') ;\r\n\r\n\t\t\t\tportalServiceWrapper.getQuickQuote(quickQuoteOptions.permutations, quickQuoteOptions.rules)\r\n\t\t\t\t\t.then(function(resp) {\r\n\t\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t\tvar quoteResults = serviceResponseRepository.getLastResponseFrom('quickQuote') ;\r\n\t\t\t\t\t\tserviceResponseRepository.update('rapidEstimate' , quoteResults ) ;\r\n\t\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\t\tformData: formData,\r\n\t\t\t\t\t\t\tresults : quoteResults,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\t\t\terrorMessage: 'getQuickQuote error',\r\n\t\t\t\t\t\t\tresponse: err\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvm.getSectionDescriptionFor = function (fieldName) {\r\n\t\t\t\treturn $sce.trustAsHtml(labelService.getSectionDescriptionFor(fieldName));\r\n\t\t\t}\r\n\r\n\t\t\t/**\r\n\t\t\t * Scrolls a field into view when an error is clicked\r\n\t\t\t * @param {Object} error Error object with key `name`\r\n\t\t\t */\r\n\t\t\t$scope.showInView = function (error) {\r\n\t\t\t\t//console.log(error);\r\n\t\t\t\tscrollViewTo($('[name=\"' + error.name + '\"]')) ;\r\n\t\t\t}\r\n\r\n\t\t\tfunction scrollViewTo($element) {\r\n\t\t\t\tvar offset = $element.offset();\r\n\t\t\t\tif ( offset ) {\r\n\t\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\t\t\tscrollLeft: offset.left\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Scroll to estimates once they're loaded\r\n\t\t\t$scope.$root.$on('show-rapid-estimates', function() {\r\n\t\t\t\tvm.showRapidEstimatesPanel = true;\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$root.$on('rapid-estimates-panel-initialised', function() {\r\n\t\t \t\tvar rapidEstimateResults = serviceResponseRepository.getLastResponseFrom('rapidEstimate') ;\r\n\t\t\t\tif ( rapidEstimateResults ) {\r\n\t\t\t\t\tvm.applyFormPath = this.endpointUrls.estimateRedirect;\r\n\t\t\t\t\t$scope.$root.$broadcast('process-rapid-estimates', {\r\n\t\t\t\t\t\tresults: rapidEstimateResults,\r\n\t\t\t\t\t\tformData: userInputRepository.get()\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t}\r\n\t]);\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('AddressSearchController', AddressSearchController);\r\n\r\n\tAddressSearchController.$inject = ['$state', '$scope', 'serviceResponseRepository', 'quoteModelFactory', '$timeout', '$q', 'guideWireService'];\r\n\r\n\tfunction AddressSearchController($state, $scope, serviceResponseRepository, quoteModelFactory, $timeout, $q, guideWireService) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tif (!vm.name) {\r\n\t\t\t\tvm.name = 'address';\r\n\t\t\t}\r\n\r\n\t\t\tvar name = $state.current.name;\r\n\t\t\tvm.addressResponses = [];\r\n\t\t\tvm.isSearchInProgress = false;\r\n\t\t\tif (name === 'bike.bike') {\r\n\t\t\t\tvm.messageAddressNotFound = 'Can’t find your address? Call us on 1800 24 34 64.';\r\n\t\t\t} else {\r\n\t\t\t\tvm.messageAddressNotFound = 'Can’t find your address? Call us on 133 723.';\r\n\t\t\t}\r\n\r\n\t\t\tvm.addressFound = true;\r\n\r\n\t\t\tif (vm.address !== null) {\r\n\t\t\t\tvm.addressInput = vm.address;\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.addressType) {\r\n\t\t\t\tif (vm.address && !vm.address.addressType) {\r\n\t\t\t\t\tvm.address.addressType = vm.addressType;\r\n\t\t\t\t\tvm.update({\r\n\t\t\t\t\t\tname: 'address',\r\n\t\t\t\t\t\tvalue: vm.address\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$scope.$watch(vm.addressResponse);\r\n\r\n\t\tvm.refreshAddresses = function (viewValue) {\r\n\t\t\tvm.isSearchInProgress = true;\r\n\t\t\treturn guideWireService.addressSearch({\r\n\t\t\t\tsearch: viewValue,\r\n\t\t\t\ttype: 'physical'\r\n\t\t\t}).then(function (resp) {\r\n\t\t\t\tvm.isSearchInProgress = false;\r\n\r\n\t\t\t\tif (!!resp.data && resp.data.length <= 0) {\r\n\t\t\t\t\tvm.addressFound = false;\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.addressFound = true;\r\n\t\t\t\t\treturn resp.data.map(function (item) {\r\n\t\t\t\t\t\tvm.addressResponse = item;\r\n\t\t\t\t\t\treturn item;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}).catch(function (resp) {\r\n\t\t\t\tvm.isSearchInProgress = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// on selection of address\r\n\t\tvm.onSelect = function ($item, $model, $label) {\r\n\t\t\tif (vm.addressType)\r\n\t\t\t\t$model.addressType = vm.addressType;\r\n\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: $model\r\n\t\t\t});\r\n\r\n\t\t\t//called with a timer to delay the validation\r\n\t\t\t$timeout(function () {\r\n\t\t\t\t$scope.$broadcast('type-ahead-value-received');\r\n\t\t\t\tif (vm.enrich == 'true') {\r\n\t\t\t\t\t$scope.$root.$broadcast('enrich-address');\r\n\t\t\t\t}\r\n\t\t\t}, 1000);\r\n\r\n\t\t\tif (vm.serviceName) {\r\n\t\t\t\tserviceResponseRepository.update(vm.serviceName, $model);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.isAddressValid = function () {\r\n\t\t\tif (vm.addressResponse) {\r\n\t\t\t\t//check for the address line 1 in the addressResponse\r\n\t\t\t\tif (!!vm.addressResponse.addressLine1) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t//validates only if the not blank, blank is validated by the required\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({\r\n\t\t\t\tname: name,\r\n\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tangular.module('qbePortal').component('addressSearch', {\r\n\t\ttemplateUrl: '/ngviews/components/qbAddressSearch.html',\r\n\t\tcontroller: AddressSearchController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tfieldKey: '@',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tlabelKey: '@',\r\n\t\t\taddress: ' 0;\r\n\t\t}\r\n\r\n\t\tvm.showInView = function (error) {\r\n\t\t\tvar offset = $('#' + error.id).offset();\r\n\r\n\t\t\t$('html, body').animate({\r\n\t\t\t\tscrollTop: (offset.top - 50),\r\n\t\t\t\tscrollLeft: offset.left\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.getErrorsByField = function () {\r\n\r\n\t\t\treturn errorsByField;\r\n\t\t}\r\n\r\n\t\tfunction processWildCard(targetString, wildcardValue) {\r\n\t\t\tif (typeof wildcardValue == 'string' || typeof wildcardValue == 'undefined') {\r\n\t\t\t\ttargetString = util.stringFormat(targetString, wildcardValue);\r\n\t\t\t} else {\r\n\t\t\t\t// Handle multiple wildcard\r\n\t\t\t\tvar argArr = [];\r\n\t\t\t\targArr.push(targetString);\r\n\t\t\t\targArr = argArr.concat(wildcardValue);\r\n\t\t\t\ttargetString = util.stringFormat.apply(null, argArr);\r\n\t\t\t}\r\n\t\t\treturn targetString;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t* dd-4003 - push to gtm data layer on field errors\r\n\t\t* param = errors by field\r\n\t\t*/\r\n\t\tfunction processGTM(errorsByField) {\r\n\t\t\tif (errorsByField.length > 0) {\t\t\t\t\r\n\t\t\t\tangular.forEach(errorsByField, function (errorsByField, index) {\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\tvar errorByFieldLabel = errorsByField.label;\r\n\t\t\t\t\tvar errorEvent = gtmService.createGtmValidationErrorEvent(errorByFieldLabel);\r\n\t\t\t\t\tgtmService.trackEvent(errorEvent, 'formValidationError');\r\n\t\t\t\t});\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCombinedValidation', {\r\n\t\ttemplateUrl: '/ngviews/components/qbCombinedValidation.html',\r\n\t\tcontroller: QBCombinedValidationController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tformSelector: '<',\r\n\t\t\tshow: '<',\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBCrossSell', QBCrossSell);\r\n\r\n\tQBCrossSell.$inject = ['$scope', '$sce'];\r\n\r\n\tfunction QBCrossSell($scope, $sce) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.obj = JSON.parse(vm.content);\r\n\r\n\t\t\tfor (var i = 0; i < vm.obj.length; i++) {\r\n\t\t\t\tif (vm.obj[i].subheading != '' || vm.obj[i].description != '' || vm.obj[i].ctaLabel != '' || vm.obj[i].hyperlinkLabel != '' || vm.obj[i].image != '') {\r\n\t\t\t\t\tvm.hasContent = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.getRichText = function (text) {\r\n\t\t\treturn $sce.trustAsHtml(text);\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCrossSell', {\r\n\t\ttemplateUrl: '../ngviews/components/qbCrossSell.html',\r\n\t\tcontroller: QBCrossSell,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\theading: '@',\r\n\t\t\tcontent: '@'\r\n\t\t}\r\n\t});\r\n\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBCtpValidationController', QBCtpValidationController);\r\n\r\n\tQBCtpValidationController.$inject = ['$scope', 'validationService', 'Util'];\r\n\r\n\tfunction QBCtpValidationController($scope, validationService, util) {\r\n\t\tvar vm = this;\r\n\t\t\tvm.errorField = [];\r\n\r\n\t\tvar errorsByField = [];\r\n\r\n\t\t/*\r\n\t\t* Reset call to validation service\t\t\r\n\t\t*/\r\n\t\t$scope.$on('confirm-form-data', resetFieldErrors);\r\n\t\tfunction resetFieldErrors() {\r\n\t\t\tvalidationService.clearAllErrors();\r\n\t\t\terrorsByField = [];\r\n\t\t\tvm.validationSelector = false;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t* Call validation service to validate fields\r\n\t\t* Param - attribute name of element\r\n\t\t* Output - error object to display in element\r\n\t\t*/\r\n\t\tvm.fetchErrorsByField = function () {\r\n\t\t\tvm.errorField = [];\r\n\t\t\tvar errors = validationService.validateField(vm.messageKey);\r\n\r\n\t\t\tif (!errors) {\r\n\t\t\t\treturn [];\r\n\t\t\t\tvm.validationSelector = false;\r\n\t\t\t}\t\t\r\n\r\n\t\t\tfor (var input in errors) {\r\n\t\t\t\tvar error = errors[input];\r\n\t\t\t\tvar element = error.element;\r\n\t\t\t\tvar fieldLabel = error.label;\r\n\t\t\t\tvar fieldErrors = error.errors;\r\n\t\t\t\tvar ngModel = error.input;\r\n\t\t\t\tfor (var errorType in fieldErrors) {\r\n\t\t\t\t\tvar msg = fieldErrors[errorType];\r\n\r\n\t\t\t\t\tif (error.wildcard) {\r\n\t\t\t\t\t\tvar wildcardValue = error.element.scope().$eval(error.wildcard);\r\n\t\t\t\t\t\tfieldLabel = util.stringFormat(fieldLabel, wildcardValue);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvm.errorField.push({\r\n\t\t\t\t\t\tname: element.attr('name'),\r\n\t\t\t\t\t\tlabel: fieldLabel,\r\n\t\t\t\t\t\tid: element.attr('id'),\r\n\t\t\t\t\t\terrorType: errorType,\r\n\t\t\t\t\t\tviewValue: element.$viewValue,\r\n\t\t\t\t\t\tvalidationMessage: msg,\r\n\t\t\t\t\t\tsection: ngModel.$$parentForm\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.errorField.length > 0) {\r\n\t\t\t\tangular.element('div').find('[data-name='+vm.messageKey+']').removeClass('ng-hide');\r\n\t\t\t}\r\n\r\n\t\t\tvm.validationSelector = true;\r\n\t\t\treturn vm.errorField;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t* Broadcast call if field has errors\r\n\t\t*/\r\n\t\t$scope.$on('broadcast-field-errors', function (event) {\t\r\n\t\t\t//validationService.clearAllErrors();\t\t\r\n\t\t\terrorsByField = vm.fetchErrorsByField();\t\t\t\r\n\t\t});\r\n\r\n\t\tvm.getErrorsByField = function () {\r\n\t\t\treturn errorsByField;\t\t\t\t\t\t\r\n\t\t}\r\n\t\t\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCtpValidation', {\r\n\t\ttemplateUrl: '/ngviews/components/qbCtpValidation.html',\r\n\t\tcontroller: QBCtpValidationController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tvalidationSelector: '<',\r\n\t\t\tmessageKey: '<',\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBCurrency', QBCurrency);\r\n\r\n\tQBCurrency.$inject = ['$scope'];\r\n\r\n\tfunction QBCurrency($scope) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.fieldValue = null;\r\n\t\t//vm.dateOfBirth = new Date(1991, 3, 21); // To be replaced with date from DOB field\r\n\r\n\t\t//console.log(vm.dob);\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({name: vm.name, value: vm.fieldValue});\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCurrency', {\r\n\t\ttemplateUrl: '../ngviews/components/qbCurrency.html',\r\n\t\tcontroller: QBCurrency,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tname: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBCycleCoverSummaryController', QBCycleCoverSummaryController);\r\n\tQBCycleCoverSummaryController.$inject = ['$scope'];\r\n\r\n\r\n\tfunction QBCycleCoverSummaryController($scope) {\r\n\t\tvar vm = this;\r\n\t\tvar tableValues = {\r\n\t\t\tcycleCover: $scope.cycleCover,\r\n\t\t\tgeneralEquipment: $scope.generalEquipment,\r\n\t\t\tspecifiedEquipment: $scope.specifiedEquipment,\r\n\t\t\tincludeCycleRacing: $scope.includeCycleRacing\r\n\t\t};\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbCycleCoverSummary', {\r\n\t\ttemplateUrl: '../ngviews/components/qbCycleCoverSummary.html',\r\n\t\tcontroller: QBCycleCoverSummaryController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tcycleCover: '=',\r\n\t\t\tgeneralEquipment: '=',\r\n\t\t\tspecifiedEquipment: '=',\r\n\t\t\tincludeCycleRacing: '='\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\tangular.module('qbePortal')\r\n\t\t.component('qbListAccordion', {\r\n\t\t\ttemplateUrl: '/ngviews/components/qbListAccordion.html',\r\n\t\t\tcontrollerAs: 'vm',\r\n\t\t\ttransclude: true,\r\n\t\t\tbindings: {\r\n\t\t\t\tincludedList : '<',\r\n\t\t\t\texcludedList : '<',\r\n\t\t\t}\r\n\t\t})\r\n\t\t.directive('onRepeatEnd', function ($timeout) {\r\n\t\t\treturn function (scope, element, attrs) {\r\n\t\t\t\tif (scope.$last) {\r\n\t\t\t\t\t$timeout(function () {\r\n\t\t\t\t\t\tQBE.listAccordion.init();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBListAggregatorController', 'quoteModelFactory', QBListAggregatorController);\r\n\tQBListAggregatorController.$inject = ['$scope', 'Util', 'quoteModelFactory'];\r\n\r\n\tfunction QBListAggregatorController($scope, Util, quoteModelFactory) {\r\n\t\tvar vm = this;\r\n\t\tvar _aggregatorPrefix = \"agg_\";\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.items = vm.list || [];\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\r\n\t\t\t/**\r\n\t\t\t * to make this compatible with data coming from rapid-estimate or retrieve quote.\r\n\t\t\t */\r\n\t\t\tvm.items.forEach(function (element, index) {\r\n\t\t\t\tif (!element._aggregator) {\r\n\t\t\t\t\tvar name = (index == 0 && vm.defaultValue) ? vm.defaultValue._aggregator.name : 'additional';\r\n\t\t\t\t\tvar id = _aggregatorPrefix + index;\r\n\t\t\t\t\telement._aggregator = {\r\n\t\t\t\t\t\tid: id,\r\n\t\t\t\t\t\tname: name,\r\n\t\t\t\t\t\ttitle: (index == 0 && vm.defaultValue) ? vm.defaultValue._aggregator.title : 'additional',\r\n\t\t\t\t\t};\r\n\t\t\t\t\telement._HTMLID = name + id;\r\n\t\t\t\t\tsetFullHeadingForItem(element);\r\n\t\t\t\t}\r\n\t\t\t\t$scope.$emit('show-aggregate');\r\n\t\t\t})\r\n\r\n\t\t\tif (vm.items.length == 0 && vm.defaultValue) {\r\n\t\t\t\tvar item = vm.defaultValue;\r\n\t\t\t\titem._HTMLID = item._aggregator.name + item._aggregator.id;\r\n\t\t\t\tsetFullHeadingForItem(item);\r\n\t\t\t\tvm.items.push(item);\r\n\t\t\t\tupdateParentSection();\r\n\t\t\t}\r\n\r\n\t\t\tvm.addItem = function (id, item) {\r\n\t\t\t\tid = id || vm.items.length;\r\n\t\t\t\tid = _aggregatorPrefix + id;\r\n\t\t\t\titem = Util.deepClone(item);\r\n\t\t\t\titem._aggregator.id = id;\r\n\t\t\t\titem._HTMLID = item._aggregator.name + item._aggregator.id;\r\n\r\n\t\t\t\tsetFullHeadingForItem(item);\r\n\r\n\t\t\t\tvm.items.push(item);\r\n\t\t\t\tupdateParentSection();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction setFullHeadingForItem(item) {\r\n\t\t\tif (item._aggregator.id > 0) {\r\n\t\t\t\titem._aggregator.fullHeading = item._aggregator.title + ' ' + vm.typeName + ' ' + item._aggregator.id;\r\n\t\t\t} else {\r\n\t\t\t\titem._aggregator.fullHeading = item._aggregator.title + ' ' + vm.typeName;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction updateParentSection() {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.items\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbListAggregator', {\r\n\t\ttemplateUrl: '../ngviews/components/qbListAggregator.html',\r\n\t\tcontroller: QBListAggregatorController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tlist: '<',\r\n\t\t\tname: '@',\r\n\t\t\titem: '<',\r\n\t\t\tdefaultValue: '<',\r\n\t\t\ttypeName: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tmax: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBListReducerController', 'quoteModelFactory', QBListReducerController);\r\n\tQBListReducerController.$inject = ['$scope', 'aggregatedRemoveService', 'quoteModelFactory'];\r\n\r\n\tfunction QBListReducerController($scope, aggregatedRemoveService, quoteModelFactory) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.items = vm.list;\r\n\t\t\tvm.quoteModel = quoteModelFactory.create();\r\n\t\t}\r\n\r\n\t\tvm.removeItem = function (item) {\r\n\t\t\tvm.items.splice(vm.items.indexOf(item), 1);\r\n\t\t\taggregatedRemoveService.markForDelete(vm.typeName, item);\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.items\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbListReducer', {\r\n\t\ttemplateUrl: '../ngviews/components/qbListReducer.html',\r\n\t\tcontroller: QBListReducerController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tlist: '<',\r\n\t\t\titem: '<',\r\n\t\t\tname: '@',\r\n\t\t\ttypeName: '@',\r\n\t\t\tupdate: '&',\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t\"use strict\";\r\n\r\n\tangular\r\n\t\t.module(\"qbePortal\")\r\n\t\t.controller(\r\n\t\t\t\"QBLoadingAnimationController\",\r\n\t\t\tQBLoadingAnimationController\r\n\t\t);\r\n\r\n\tQBLoadingAnimationController.$inject = [\"$scope\", \"labelService\"];\r\n\r\n\tfunction QBLoadingAnimationController($scope, labelService) {\r\n\t\tvar vm = this;\r\n\r\n\t\t$scope.$root.$on(\"loading-animation-start\", onLoadAnimationStart);\r\n\t\t$scope.$root.$on(\"loading-animation-end\", onLoadAnimationEnd);\r\n\r\n\t\tfunction onLoadAnimationStart() {\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t$(\"body\").addClass(\"no-scroll\");\r\n\t\t\tvm.animationInProgress = true;\r\n\t\t}\r\n\r\n\t\tfunction onLoadAnimationEnd() {\r\n\t\t\t$(\"body\").removeClass(\"no-scroll\");\r\n\t\t\tvm.animationInProgress = false;\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").component(\"qbLoadingAnimation\", {\r\n\t\ttemplateUrl: \"/ngviews/components/qbLoadingAnimation.html\",\r\n\t\tcontroller: QBLoadingAnimationController,\r\n\t\tcontrollerAs: \"vm\",\r\n\t\tbindings: {},\r\n\t});\r\n})();\r\n","(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBMaxNoClaimBonus', QBMaxNoClaimBonus);\r\n\r\n\tQBMaxNoClaimBonus.$inject = ['$scope'];\r\n\r\n\tfunction QBMaxNoClaimBonus($scope) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.fieldValue = vm.ngModel;\r\n\t\t}\r\n\r\n\t\tfunction calcAge() {\r\n\t\t\treturn (moment(new Date()).diff(moment(vm.dob, 'DD/MM/YYYY'), 'years', true));\r\n\t\t}\r\n\r\n\t\tvm.getFilteredOptions = function () {\r\n\r\n\t\t\tvar fullOptions = vm.options.slice();\r\n\r\n\t\t\t//if yerls help is not greater than 5 the 0 is the only option\r\n\t\t\tif (vm.yearsHeld !== 'greaterThan_5') {\r\n\t\t\t\treturn fullOptions.splice(0, 1);\r\n\t\t\t}\r\n\r\n\t\t\tvar age = calcAge();\r\n\t\t\tif (age == 22) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 1);\r\n\t\t\t} else if (age == 23) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 2);\r\n\t\t\t} else {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 3);\r\n\t\t\t}\r\n\r\n\t\t\treturn fullOptions;\r\n\r\n\t\t}\r\n\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({\r\n\t\t\t\tname: name,\r\n\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.fieldValue\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbMaxNoClaimBonus', {\r\n\t\ttemplateUrl: '../ngviews/components/qbMaxNoClaimBonus.html',\r\n\t\tcontroller: QBMaxNoClaimBonus,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\toptions: '<',\r\n\t\t\tname: '@',\r\n\t\t\tngModel: '<',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tyearsHeld: '<',\r\n\t\t\tdob: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBTable', QBTableController);\r\n\tQBTableController.$inject = ['$scope', '$timeout', 'aggregatedRemoveService'];\r\n\r\n\tfunction QBTableController($scope, $timeout, aggregatedRemoveService) {\r\n\t\tvar vm = this;\r\n\t\t// vm.isEditable = true;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.selectedRows = [];\r\n\t\t\tvm.editingRows = [];\r\n\t\t\tvm.allRowsSelected = false;\r\n\t\t\tvm.newRow = {};\r\n\t\t\tvm.isEditable = (vm.editDisabled != true);\r\n\t\t\tvm.isAddable = (vm.addDisabled != true);\r\n\t\t\tvm.IDPrefix = vm.sectionName + '_' + vm.name;\r\n\r\n\t\t\tvm.isRowInEditMode = function (row) {\r\n\t\t\t\treturn vm.editingRows.indexOf(row) !== -1;\r\n\t\t\t}\r\n\r\n\t\t\tvm.onEditRow = function (row) {\r\n\t\t\t\tif (vm.editingRows.indexOf(row) == -1)\r\n\t\t\t\t\tvm.editingRows.push(row);\r\n\t\t\t}\r\n\r\n\t\t\tvm.isAddRequired = function () {\r\n\t\t\t\treturn vm.rows.length == 0;\r\n\t\t\t}\r\n\r\n\t\t\tvm.onEditDone = function (row) {\r\n\t\t\t\tvar rowIndex = vm.editingRows.indexOf(row);\r\n\t\t\t\tif (rowIndex != -1) {\r\n\t\t\t\t\tvm.editingRows.splice(rowIndex, 1);\r\n\t\t\t\t\tupdateParentSection();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.isAddEnabled = function () {\r\n\t\t\t\tif (Object.keys(vm.newRow).length < vm.columns.length)\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tfor (var col in vm.newRow) {\r\n\t\t\t\t\tif (vm.newRow[col] === null || vm.newRow[col] == '') {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tvm.onAdd = function () {\r\n\t\t\t\tif (vm.isAddEnabled()) {\r\n\t\t\t\t\tvm.rows.push(vm.newRow);\r\n\t\t\t\t\tupdateParentSection();\r\n\t\t\t\t\tvm.newRow = {};\r\n\t\t\t\t\t$timeout(function () {\r\n\t\t\t\t\t\tif (vm.rows.length > 0) {\r\n\t\t\t\t\t\t\t$(document).trigger('enhance.tablesaw');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}.bind(vm), 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.onSelectAllChanged = function () {\r\n\t\t\t\tif (vm.allRowsSelected) {\r\n\t\t\t\t\tvm.selectedRows = vm.rows.map(function () {\r\n\t\t\t\t\t\treturn true\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvm.selectedRows = vm.rows.map(function () {\r\n\t\t\t\t\t\treturn false\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.onRemoveSelection = function () {\r\n\t\t\t\tangular.forEach(vm.selectedRows, function (row, index) {\r\n\t\t\t\t\tif (row)\r\n\t\t\t\t\t\taggregatedRemoveService.markForDelete(vm.name, vm.rows[index]);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvar rows = vm.rows.filter(function (row, index) {\r\n\t\t\t\t\treturn vm.selectedRows[index] != true;\r\n\t\t\t\t})\r\n\r\n\t\t\t\tvm.selectedRows = [];\r\n\t\t\t\tvm.rows = rows;\r\n\t\t\t\tupdateParentSection();\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\t\tvm.setHierarchy({\r\n\t\t\t\t\tname: name,\r\n\t\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// trigger table saw after binding complete.\r\n\t\t$timeout(function () {\r\n\t\t\tif (vm.rows.length > 0) {\r\n\t\t\t\t$(document).trigger('enhance.tablesaw');\r\n\t\t\t}\r\n\t\t}.bind(vm), 0);\r\n\r\n\t\tfunction updateParentSection() {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.rows\r\n\t\t\t});\r\n\t\t\t// $scope.$broadcast('table-number-of-rows-changed') ;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbTable', {\r\n\t\ttemplateUrl: '../ngviews/components/qbMultiEntryTable.html',\r\n\t\tcontroller: QBTableController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tupdate: '&',\r\n\t\t\tname: '@',\r\n\t\t\tsectionName: '<',\r\n\t\t\tvalueAggregator: '<',\r\n\t\t\trows: '=',\r\n\t\t\tcolumns: '=',\r\n\t\t\teditDisabled: '<',\r\n\t\t\taddDisabled: '<',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('MultiselectDropdown', MultiselectDropdown);\r\n\r\n\tMultiselectDropdown.$inject = ['$scope', 'serviceResponseRepository', 'quoteModelFactory', 'labelService'];\r\n\r\n\tfunction MultiselectDropdown($scope, serviceResponseRepository, quoteModelFactory, labelService) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.ls = labelService;\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function (event) {\r\n\r\n\t\t\tif (!!vm.fieldValue) {\r\n\t\t\t\tif (vm.selectedOptions.indexOf(vm.fieldValue) == -1) {\r\n\t\t\t\t\tvm.selectedOptions.push(vm.fieldValue);\r\n\t\t\t\t}\r\n\t\t\t\tvm.fieldValue = '';\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvm.getLabelFor = function (value) {\r\n\t\t\tvar label = '';\r\n\r\n\t\t\tfor (var item in vm.options) {\r\n\t\t\t\tif (vm.options[item].value == value) {\r\n\t\t\t\t\tlabel = vm.options[item].label;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn label;\r\n\t\t}\r\n\r\n\t\tvm.removeItem = function (item) {\r\n\t\t\tif (vm.selectedOptions.length <= 1) {\r\n\t\t\t\tvm.selectedOptions = [];\r\n\t\t\t} else {\r\n\t\t\t\tvar index = vm.selectedOptions.indexOf(item);\r\n\t\t\t\tvm.selectedOptions.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvm.getOptions = function () {\r\n\t\t\treturn vm.options;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('multiselectDropdown', {\r\n\t\ttemplateUrl: '../ngviews/components/qbMultiselectDropdown.html',\r\n\t\tcontroller: MultiselectDropdown,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tname: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t\tfieldValue: '<',\r\n\t\t\toptions: '<',\r\n\t\t\tselectedOptions: '=',\r\n\t\t\tlabelWildcard: '<',\r\n\t\t\tselectionLimit: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBNoClaimBonus', QBNoClaimBonus);\r\n\r\n\tQBNoClaimBonus.$inject = ['$scope', '$state'];\r\n\r\n\tfunction QBNoClaimBonus($scope, $state) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.fieldValue = vm.ngModel;\r\n\t\t}\r\n\r\n\t\tvm.stateName = $state.$current.name;\r\n\r\n\t\tfunction calcAge() {\r\n\t\t\treturn (moment(new Date()).diff(moment(vm.dob, 'DD/MM/YYYY'), 'years', true));\r\n\t\t}\r\n\r\n\t\tvm.getFilteredOptions = function () {\r\n\r\n\t\t\tvar fullOptions = vm.options.slice();\r\n\t\t\tvar age = Math.round(calcAge());\r\n\t\t\tvar product = vm.stateName.split(\".\");\r\n\t\t\t//removed age check and added check based on years held\r\n\t\t\tfullOptions.reverse();\r\n\t\t\t//additional check if age is below 17 or dob is undefined\r\n\t\t\tif ((age < 17) || (!vm.dob)) {\r\n\t\t\t\treturn fullOptions.splice(0, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif (product[0] != 'bike') {\r\n\t\t\t\tif (vm.yearsHeld == 'lessThan_1') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 1);\r\n\t\t\t\t} else if (vm.yearsHeld == '1') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 2);\r\n\t\t\t\t} else if (vm.yearsHeld == '2') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 3);\r\n\t\t\t\t} else if (vm.yearsHeld == '3') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 4);\r\n\t\t\t\t} else if (vm.yearsHeld == '4') {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 5);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (age == 17) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 1);\r\n\t\t\t\t} else if (age == 18) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 2);\r\n\t\t\t\t} else if (age == 19) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 3);\r\n\t\t\t\t} else if (age == 20) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 4);\r\n\t\t\t\t} else if (age == 21) {\r\n\t\t\t\t\tfullOptions = fullOptions.splice(0, 5);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn fullOptions;\r\n\r\n\t\t}\r\n\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({\r\n\t\t\t\tname: name,\r\n\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.fieldValue\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbNoClaimBonus', {\r\n\t\ttemplateUrl: '/ngviews/components/qbNoClaimBonus.html',\r\n\t\tcontroller: QBNoClaimBonus,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\toptions: '<',\r\n\t\t\tname: '@',\r\n\t\t\tngModel: '<',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tdob: '<',\r\n\t\t\tyearsHeld: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n","(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t\t.module('qbePortal')\r\n\t\t.controller('paymentRefNumController', paymentRefNumController);\r\n\r\n\tpaymentRefNumController.$inject = [\r\n\t\t'$rootScope',\r\n\t\t'$scope',\r\n\t\t'$q',\r\n\t\t'$sce',\r\n\t\t'$window',\r\n\t\t'$http',\r\n\t\t'guideWireService',\r\n\t\t'labelService',\r\n\t\t'storage',\r\n\t\t'Util',\r\n\t\t'gtmService',\r\n\t];\r\n\tfunction paymentRefNumController(\r\n\t\t$rootScope,\r\n\t\t$scope,\r\n\t\t$q,\r\n\t\t$sce,\r\n\t\t$window,\r\n\t\t$http,\r\n\t\tguideWireService,\r\n\t\tlabelService,\r\n\t\tstorage,\r\n\t\tutil,\r\n\t\tgtmService\r\n\t) {\r\n\t\tvar vm = this;\r\n\t\tvm.findYourBill = findYourBill;\r\n\t\tvm.imageTooltipPath = labelService.getObjectValue(\r\n\t\t\t'enterPaymentRef',\r\n\t\t\t'img'\r\n\t\t);\r\n\t\tactivate();\r\n\r\n\t\tfunction activate() {\r\n\t\t\tvar autoTrigger = storage.getItem('auto-find-bill');\r\n\t\t\tif (autoTrigger && autoTrigger.trigger) {\r\n\t\t\t\tsearchForRefNum();\r\n\t\t\t\tstorage.removeItem('auto-find-bill');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$scope.$on('reset-defaults', function(event) {\r\n\t\t\tvm.showPaymentSection = false;\r\n\t\t});\r\n\r\n\t\tvm.getObjectValue = function(fieldName, fieldLabel) {\r\n\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\tlabelService.getObjectValue(fieldName, fieldLabel)\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.getImagePath = function(fieldName, fieldLabel) {\r\n\t\t\tvar path = labelService.getObjectValue(fieldName, fieldLabel);\r\n\t\t\treturn path;\r\n\t\t};\r\n\r\n\t\tfunction isUndefinedOrNull(arg) {\r\n\t\t\tif (angular.isUndefined(arg) || arg == null) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfunction findYourBill() {\r\n\t\t\tvm.validRef = true;\r\n\t\t\tvm.paymentFlag = true;\r\n\r\n\t\t\tvalidatePaymentRefNum();\r\n\t\t\tif (\r\n\t\t\t\tcheckProductIfInGuidewire() &&\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$valid\r\n\t\t\t) {\r\n\t\t\t\tsearchForRefNum();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction validatePaymentRefNum() {\r\n\t\t\tif (\r\n\t\t\t\t!isUndefinedOrNull(\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$$rawModelValue\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\t//clear errors and hide validation message\r\n\t\t\t\t//$rootScope.$broadcast('broadcast-no-field-errors');\r\n\t\t\t\tif (!isUndefinedOrNull(vm.validationSelector)) {\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t\t'minlength',\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar referenceNo =\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$$rawModelValue;\r\n\t\t\t\tvar refLength = referenceNo.length;\r\n\t\t\t\tvar refLengthIsValid = refLength <= 14 && refLength >= 8;\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tvm.postBillPay != 1 &&\r\n\t\t\t\t\treferenceNo.startsWith('1000') &&\r\n\t\t\t\t\trefLength >= 14\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!referenceNo.startsWith('1000') && refLength == 14) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!refLengthIsValid) {\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t\t'minlength',\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t'required',\r\n\t\t\t\t\tfalse\r\n\t\t\t\t);\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t'minlength',\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t'wrongref',\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (!vm.validationSelector.enterPaymentRef.$valid)\r\n\t\t\t\t$rootScope.$broadcast('broadcast-field-errors');\r\n\t\t}\r\n\r\n\t\tfunction checkProductIfInGuidewire() {\r\n\t\t\tvar prodRefNum = vm.fieldValues.enterPaymentRef;\r\n\r\n\t\t\tif (!isUndefinedOrNull(prodRefNum)) {\r\n\t\t\t\tvar min = prodRefNum.substr(1, 2);\r\n\r\n\t\t\t\t//Turn Off Claims Payment and redirect to Billpay site\r\n\t\t\t\tif (\r\n\t\t\t\t\tvm.postBillPay != 1 &&\r\n\t\t\t\t\tprodRefNum.startsWith('1000') &&\r\n\t\t\t\t\tprodRefNum.length == 14\r\n\t\t\t\t) {\r\n\t\t\t\t\t$window.open('http://billpay.qbe.com.au', '_blank');\r\n\t\t\t\t\twindow.location.href = 'https://qbe.com.au';\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (\r\n\t\t\t\t\t!prodRefNum.startsWith('1000') &&\r\n\t\t\t\t\tprodRefNum.length == 14\r\n\t\t\t\t) {\r\n\t\t\t\t\t// Anubis\r\n\t\t\t\t\t// && min <= 26\r\n\t\t\t\t\t$window.open('http://billpay.qbe.com.au', '_blank');\r\n\t\t\t\t\twindow.location.href = 'https://qbe.com.au';\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (prodRefNum.length < 8) {\r\n\t\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t\t'wrongref',\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tprodRefNum.startsWith('1000') ||\r\n\t\t\t\t\tprodRefNum.startsWith('5000')\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (prodRefNum.startsWith('1000')) {\r\n\t\t\t\t\t\tvm.policyCategory = 'claim';\r\n\t\t\t\t\t} else if (prodRefNum.startsWith('5000')) {\r\n\t\t\t\t\t\tvm.policyCategory = 'policy';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction searchForRefNum() {\r\n\t\t\tvar info = guideWireService.getPaymentInfo(\r\n\t\t\t\tvm.fieldValues.enterPaymentRef\r\n\t\t\t);\r\n\r\n\t\t\tinfo.then(function(resp) {\r\n\t\t\t\tsearchForRefNumberSuccess(resp);\r\n\t\t\t}).catch(function(err) {\t\t\t\t\r\n\t\t\t\tif (err && err.status) {\r\n\t\t\t\t\t/* gtm track api error */\r\n\t\t\t\t\tgtmService.trackApiError(err.status, 'invalid payment reference number');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvm.validationSelector.enterPaymentRef.$setValidity(\r\n\t\t\t\t\t'wrongref',\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t\t$rootScope.$broadcast('invalid-payment-reference-number');\r\n\t\t\t\treturn;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction searchForRefNumberSuccess(resp) {\r\n\t\t\tif (resp.data.status == 'E') {\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tgtmService.trackApiError(resp.data.status, 'payment error due to status E');\r\n\r\n\t\t\t\t$rootScope.$broadcast('payment-error');\t\t\t\t\r\n\t\t\t\treturn;\r\n\t\t\t} else if (resp.data.status == 'P') {\r\n\t\t\t\t/* gtm track api error */\r\n\t\t\t\tgtmService.trackApiError(resp.data.status, 'payment already made');\r\n\r\n\t\t\t\t$rootScope.$broadcast('payment-already-made');\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\t$rootScope.$broadcast('broadcast-no-field-errors');\r\n\t\t\t}\r\n\r\n\t\t\tvm.policyNumber = resp.data.policyNumber;\r\n\t\t\tvm.paymentType = resp.data.paymentType;\r\n\t\t\tvm.amount = resp.data.amount.toFixed(2);\r\n\t\t\tvm.showPaymentSection = true;\r\n\t\t\tvar details = {\r\n\t\t\t\tamount: vm.amount,\r\n\t\t\t\treference_number: vm.fieldValues.enterPaymentRef,\r\n\t\t\t\tinsuranceType: vm.insuranceType,\r\n\t\t\t\tpaymentType: vm.paymentType,\r\n\t\t\t\treferenceId: resp.data.referenceId\r\n\t\t\t};\r\n\r\n\t\t\tstorage.setItem(\r\n\t\t\t\t'unauth-reference',\r\n\t\t\t\tutil.b64EncodeUnicode(vm.fieldValues.enterPaymentRef)\r\n\t\t\t);\r\n\r\n\t\t\t/* track search ref sucess after button click */\r\n\t\t\tgtmService.trackPayBillVirtualBillFound(details.reference_number, details.referenceId);\r\n\t\t\t/* end track search ref sucess after button click */\r\n\r\n\t\t\t$rootScope.$broadcast('billUpdate', details);\r\n\t\t\t$rootScope.$broadcast('toggle-amount-due');\r\n\t\t}\r\n\r\n\t\t$scope.validNumber = function(event) {\r\n\t\t\tvar key = $window.event ? event.keyCode : event.which;\r\n\t\t\tif (key === 8) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else if (key < 48 || key > 57) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.closeImageRefForPayment = function() {\r\n\t\t\tangular.element('#pay-img-ref').toggleClass('ng-hide');\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('paymentRefNum', {\r\n\t\ttemplateUrl: '/ngviews/components/qbPaymentRefNum.html',\r\n\t\tcontroller: paymentRefNumController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tfieldKey: '@',\r\n\t\t\tvalidationSelector: '=',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tlabelKey: '@',\r\n\t\t\tinsuranceType: '@',\r\n\t\t\tngModel: '=',\r\n\t\t\tpolicyCategory: '=',\r\n\t\t\tpostBillPay: '=',\r\n\t\t\tvalidRef: '=',\r\n\t\t\tshowPaymentSection: '=',\r\n\t\t\tpaymentRefError: '=',\r\n\t\t\tfieldValues: '='\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n qbPremiumBreakdownController.$inject = ['$scope', '$window', '$rootScope', '$filter', 'labelService'];\r\n \r\n function qbPremiumBreakdownController($scope, $window, $rootScope, $filter, labelService) {\r\n var vm = this;\r\n\r\n vm.lookupLabel = function (fieldName) {\r\n return labelService.getGlobalOptionLabel('paymentSummary', fieldName);\r\n };\r\n }\r\n\r\n angular.module('qbePortal').component('qbPremiumBreakdown', {\r\n templateUrl: '/ngviews/components/qbPremiumBreakdown.html',\r\n controller: qbPremiumBreakdownController,\r\n controllerAs: 'vm',\r\n bindings: {\r\n paymentFrequency: '@',\r\n quoteResults: '=',\r\n monthlyResults: '='\r\n },\r\n });\r\n\r\n})();","(function () {\r\n\t\"use strict\";\r\n\r\n\tangular\r\n\t\t.module(\"qbePortal\")\r\n\t\t.controller(\"QBProgressBarController\", QBProgressBarController);\r\n\tQBProgressBarController.$inject = [\r\n\t\t\"$scope\",\r\n\t\t\"$state\",\r\n\t\t\"dynamicRouter\",\r\n\t\t\"MODULE_INFO\",\r\n\t\t\"labelService\",\r\n\t\t\"Util\",\r\n\t];\r\n\r\n\tfunction QBProgressBarController(\r\n\t\t$scope,\r\n\t\t$state,\r\n\t\tdynamicRouter,\r\n\t\tMODULE_INFO,\r\n\t\tlabelService,\r\n\t\tUtil\r\n\t) {\r\n\t\tvar vm = this;\r\n\t\tvm.selectedStep = null;\r\n\t\tvm.lastSelectedStep = null;\r\n\t\tvm.state = $state;\r\n\r\n\t\t$scope.$on(\"$stateChangeSuccess\", function (\r\n\t\t\tevent,\r\n\t\t\ttoState,\r\n\t\t\ttoParams,\r\n\t\t\tfromState,\r\n\t\t\tfromParams\r\n\t\t) {\r\n\t\t\tif (toState) {\r\n\t\t\t\tvm.selectedStep = toState.name;\r\n\r\n\t\t\t\t// hack to stop vm.selectedStep to nullifying\r\n\t\t\t\tif (vm.selectedStep !== vm.lastSelectedStep) {\r\n\t\t\t\t\tvm.lastSelectedStep = vm.selectedStep;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// display top banner\r\n\t\t\t\tdisplayTopBanner();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$on(\"selected-quote-changed\", function () {\r\n\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\tdisplayTopBanner();\r\n\t\t});\r\n\r\n\t\tvm.getPage = function () {\r\n\t\t\tvar page = vm.state.current.name.split(\".\")[1];\r\n\r\n\t\t\tif (page === \"policy-start-date\" || page === \"ctp\") {\r\n\t\t\t\treturn false;\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfunction getStateByNumber(stepNumber) {\r\n\t\t\tvar steps = dynamicRouter.getSteps();\r\n\t\t\tif (steps) return steps[stepNumber].stateName;\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfunction displayTopBanner() {\r\n\t\t\tvar getPages = labelService.getObjectValue(\"topBanner\", \"pages\");\r\n\t\t\tvar bannerText = labelService.getObjectValue(\r\n\t\t\t\t\"topBanner\",\r\n\t\t\t\t\"bannerText\"\r\n\t\t\t);\r\n\r\n\t\t\tif (\r\n\t\t\t\t!Util.isUndefinedOrNull(getPages) &&\r\n\t\t\t\t!Util.isUndefinedOrNull(bannerText) &&\r\n\t\t\t\tbannerText != \"\"\r\n\t\t\t) {\r\n\t\t\t\tvar pagesArray = getPages.split(\",\");\r\n\t\t\t\tvar displayTopBanner = false;\r\n\t\t\t\tvar declinePages = [\"decline\", \"embargo\", \"referral\", \"error\"];\r\n\t\t\t\tvar currentPage = dynamicRouter\r\n\t\t\t\t\t.getCurrentState()\r\n\t\t\t\t\t.name.split(\".\");\r\n\t\t\t\tcurrentPage = currentPage[currentPage.length - 1];\r\n\r\n\t\t\t\tif (getPages.length > 0) {\r\n\t\t\t\t\tfor (var i = 0; i < pagesArray.length; i++) {\r\n\t\t\t\t\t\tif (currentPage == pagesArray[i]) {\r\n\t\t\t\t\t\t\tdisplayTopBanner = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var d = 0; d < declinePages.length; d++) {\r\n\t\t\t\t\t\tif (currentPage == declinePages[d]) {\r\n\t\t\t\t\t\t\tdisplayTopBanner = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (displayTopBanner) {\r\n\t\t\t\t\t$scope.$root.$broadcast(\"show-top-banner\", bannerText);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvm.getSteps = function () {\r\n\t\t\treturn dynamicRouter.getSteps();\r\n\t\t};\r\n\r\n\t\tvm.isCurrent = function (stepNumber) {\r\n\t\t\treturn (\r\n\t\t\t\tgetStateByNumber(stepNumber) ==\r\n\t\t\t\tdynamicRouter.getCurrentState().name\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tvm.canMoveToStep = function (stepNumber) {\r\n\t\t\treturn stepNumber < dynamicRouter.getCurrentState().number;\r\n\t\t};\r\n\r\n\t\tvm.moveToStep = function (stepNumber) {\r\n\t\t\tif (vm.canMoveToStep(stepNumber)) {\r\n\t\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t\t$state.go(getStateByNumber(stepNumber));\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.moveToSelectedStep = function () {\r\n\t\t\tif (!!vm.selectedStep) {\r\n\t\t\t\t$scope.$root.$broadcast(\"hide-top-banner\");\r\n\t\t\t\t$state.go(vm.selectedStep);\r\n\t\t\t} else {\r\n\t\t\t\t// hack to stop vm.selectedStep to nullifying\r\n\t\t\t\tvm.selectedStep = vm.lastSelectedStep;\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").component(\"qbProgressBar\", {\r\n\t\ttemplateUrl: \"../ngviews/components/qbProgressBar.html\",\r\n\t\tcontroller: QBProgressBarController,\r\n\t\tcontrollerAs: \"vm\",\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('qbRangeBar', qbRangeBar);\r\n\r\n\tqbRangeBar.$inject = ['$scope', 'labelService', '$timeout'];\r\n\r\n\tfunction qbRangeBar($scope, labelService, $timeout) {\r\n\t\tvar vm = this;\r\n\t\tconsole.info(vm.value);\r\n\r\n\t\tvm.getAverageWidth = function () {\r\n\t\t\tvar averageWidth = {'width': '10%'};\r\n\r\n\t\t\tif (!!vm.minimum && !!vm.maximum && !!vm.average) {\r\n\r\n\t\t\t\tvm.total = (vm.maximum - vm.minimum);\r\n\t\t\t\tvm.averageWidth = (vm.average - vm.minimum) / vm.total * 100;\r\n\t\t\t\taverageWidth = {'width': vm.averageWidth + '%'};\r\n\t\t\t}\r\n\r\n\t\t\treturn averageWidth;\r\n\t\t};\r\n\r\n\t\tvm.getCirclePos = function () {\r\n\t\t\tif (!!vm.value) {\r\n\t\t\t\tif (vm.value >= vm.minimum && vm.value <= vm.maximum) {\r\n\t\t\t\t\tvar pos = (vm.value - vm.minimum) / vm.total * 100;\r\n\t\t\t\t\treturn {'left': pos + '%'};\r\n\t\t\t\t}\r\n\t\t\t\telse if (vm.value > vm.maximum) {\r\n\t\t\t\t\tvm.value = vm.maximum;\r\n\t\t\t\t\treturn {'left': '100%'};\r\n\t\t\t\t}\r\n\t\t\t\telse if (vm.value < vm.minimum) {\r\n\t\t\t\t\tvm.value = vm.minimum;\r\n\t\t\t\t\treturn {'left': '0%'};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn {'left': '0%'};\r\n\t\t\t}\r\n\t\t};\r\n\t\tvm.getAveragePos = function () {\r\n\t\t\tif (!!vm.averageWidth) {\r\n\t\t\t\tvar pos = (vm.averageWidth - 17) * -1;\r\n\t\t\t\treturn {'left': pos + '%'};\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbRangeBar', {\r\n\t\ttemplateUrl: '/ngviews/components/qbRangeBar.html',\r\n\t\tcontroller: qbRangeBar,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tvalue: '@',\r\n\t\t\tminimum: '<',\r\n\t\t\tmaximum: '<',\r\n\t\t\taverage: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBRapidEstimateQuotesPanel', QBRapidEstimateQuotesPanel);\r\n\tQBRapidEstimateQuotesPanel.$inject = ['$scope', '$state', 'quoteModelFactory', 'labelService', 'portalServiceWrapper', 'userInputRepository', 'serviceResponseRepository', 'MAService', '$timeout', 'quoteOptions', 'gtmService', 'coverTypeResolver', 'quoteResultFilter' , 'storage'];\r\n\r\n\tfunction QBRapidEstimateQuotesPanel($scope, $state, quoteModelFactory, labelService, portalServiceWrapper, userInputRepository, serviceResponseRepository, MAService, $timeout, quoteOptions, gtmService, coverTypeResolver, quoteResultFilter, storage) {\r\n\t\tvar vm = this,\r\n\t\t\tquoteHasCoverType = false;\r\n\r\n\t\tvm.formData = {};\r\n\r\n\t\tvar quoteModel = quoteModelFactory.create();\r\n\r\n\t\tif (quoteModel.coverType) {\r\n\t\t\tquoteHasCoverType = true;\r\n\t\t}\r\n\r\n\t\tif (quoteHasCoverType) {\r\n\t\t\tvm.quoteModel = quoteModel.coverType[0];\r\n\t\t}\r\n\r\n\t\t$scope.$root.$on('process-rapid-estimates', displayRapidEstimateResults);\r\n\r\n\t\tfunction displayRapidEstimateResults(event, args) {\r\n\t\t\tvar quotesTemp = [];\r\n\t\t\tvm.formData = args.formData;\r\n\t\t\tvm.scrollCTA = labelService.getGlobalOptionLabel('rapidEstimate', 'scrollCTA');\r\n\t\t\tvm.productType = labelService.getGlobalOptionLabel('rapidEstimate', 'productType');\r\n\t\t\tquoteOptions.clearQuoteResults();\r\n\t\t\tvar mergedQuotes = quoteOptions.getMergedQuoteResults(args.results);\r\n\t\t\tangular.forEach(mergedQuotes, function (mergedQuote, index) {\r\n\t\t\t\tvar quote = mergedQuote.getAnnual(),\r\n\t\t\t\t\tmonthlyQuote = mergedQuote.getMonthly();\r\n\r\n\t\t\t\tif (!quote.quoteResult.errors) {\r\n\t\t\t\t\tvar offering = quote.offering;\r\n\t\t\t\t\tvar coverType = quote.coverType;\r\n\t\t\t\t\tvar coverIndicator = offering ? offering : coverType;\r\n\t\t\t\t\tvar coverDetails = labelService.getGlobalOption('coverTypes', coverIndicator) ;\r\n\t\t\t\t\tcoverDetails.yearlyPayment = quote.quoteResult.totalPremium;\r\n\t\t\t\t\tcoverDetails.monthlyPayment = monthlyQuote.paymentPlan.installment;\r\n\t\t\t\t\tcoverDetails.totalPremium = quote.quoteResult.totalPremium;\r\n\t\t\t\t\tcoverDetails.offering = offering;\r\n\t\t\t\t\tcoverDetails.coverType = coverType;\r\n\t\t\t\t\tcoverDetails.coverTypeSubClass = coverDetails.coverTypeSubClass || 'standard' ;\r\n\t\t\t\t\tquotesTemp.push(\r\n\t\t\t\t\t\tcoverDetails\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tquotesTemp = quoteResultFilter.filter(window.qbe.rapidEstimateFilter, quotesTemp);\r\n\t\t\tvm.quotes = quotesTemp;\r\n\t\t\t$scope.$root.$broadcast('show-rapid-estimates');\r\n\t\t\t$scope.$root.$broadcast('loading-animation-end');\r\n\t\t\tanimateToResults();\r\n\t\t}\r\n\r\n\t\tfunction animateToResults() {\r\n\t\t\t$timeout(function () {\r\n\t\t\t\tvar scrollAnchor = $('qb-rapid-estimate-quotes-panel');\r\n\t\t\t\t$('html, body').animate({\r\n\t\t\t\t\tscrollTop: scrollAnchor.offset().top\r\n\t\t\t\t}, 'slow');\r\n\t\t\t}, 100);\r\n\t\t}\r\n\r\n\t\tvm.apply = function (quote, paymentFrequency, applyFormPath) {\r\n\t\t\t$scope.$root.$broadcast('loading-animation-start');\r\n\t\t\tgtmService.trackEvent('rapid-estimate-apply');\r\n\t\t\tif (quote.offering)\r\n\t\t\t\tquoteOptions.setSelectedOffering(quote.offering);\r\n\t\t\telse {\r\n\t\t\t\tquoteOptions.setSelectedCoverType(quote.coverTypeClass, quote.coverTypeSubClass);\r\n\t\t\t}\r\n\r\n\t\t\tvm.formData.rapidEstimateUrl = window.location.href;\r\n\t\t\tuserInputRepository.update(vm.formData);\r\n\t\t\tportalServiceWrapper.updateQuote(vm.formData);\r\n\t\t\tportalServiceWrapper.saveQuote('everyyear').then(function (resp) {\r\n\t\t\t\tperformMAServices('apply-now');\r\n\t\t\t\tif (!applyFormPath){\r\n\t\t\t\t\t$scope.$emit('rapid-estimate-redirect') ;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstorage.setItem('ignoreRapidEstimateRoute' , vm.productType );\r\n\t\t\t\t\twindow.location = applyFormPath;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch(function (err) {\r\n\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\terrorMessage: 'Save quote error',\r\n\t\t\t\t\tresponse: err\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction performMAServices(eventName) {\r\n\t\t\tvar form;\r\n\t\t\tswitch (vm.productType) {\r\n\t\t\t\tcase 'Car':\r\n\t\t\t\t\tform = vm.formData.vehicleForm;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Motorcycle':\r\n\t\t\t\t\tform = vm.formData.bikeForm;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Caravan':\r\n\t\t\t\t\tform = vm.formData.caravanForm;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Home':\r\n\t\t\t\t\tform = vm.formData.homeForm;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tvar policyEmail = form.tellUsMore ? form.tellUsMore.email : null;\r\n\t\t\tvar campaignCode = form.tellUsMore ? form.tellUsMore.promotionalCode : null;\r\n\t\t\tvar quoteResult = quoteOptions.getSelectedQuoteResult();\r\n\t\t\tvar savedQuote = serviceResponseRepository.getLastResponseFrom('quote');\r\n\t\t\tvar maData = {\r\n\t\t\t\tpageName: 'rapid-estimate',\r\n\t\t\t\tcampaignCode: campaignCode,\r\n\t\t\t\tpolicyEmail: policyEmail,\r\n\t\t\t\tannualResult: quoteResult.getAnnual(),\r\n\t\t\t\tmonthlyResult: quoteResult.getMonthly(),\r\n\t\t\t\tquoteId: savedQuote ? savedQuote.quoteID : null,\r\n\t\t\t};\r\n\t\t\tconsole.log('MA Services called from ' + eventName, maData);\r\n\t\t\tMAService.mergeContacts(eventName, maData)\r\n\t\t}\r\n\r\n\t\t$scope.$root.$broadcast('rapid-estimates-panel-initialised');\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbRapidEstimateQuotesPanel', {\r\n\t\ttemplateUrl: '/ngviews/components/qbRapidEstimateQuotesPanel.html',\r\n\t\tcontroller: QBRapidEstimateQuotesPanel,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tapplyFormPath: '@'\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('RegoSearchController', RegoSearchController);\r\n\r\n\tRegoSearchController.$inject = ['$scope', 'STATES', 'regoSearchService', 'serviceResponseRepository', 'quoteModelFactory', 'labelService'];\r\n\r\n\tfunction RegoSearchController($scope, STATES, regoSearchService, serviceResponseRepository, quoteModelFactory, labelService) {\r\n\t\tvar vm = this,\r\n\t\t\tsearchType;\r\n\r\n\t\tvm.rego = '';\r\n\t\tvm.yearInput = null;\r\n\t\tvm.makeInput = '';\r\n\t\tvm.modelInput = '';\r\n\t\tvm.carOption = '';\r\n\t\tvm.states = STATES;\r\n\t\tvm.modelResponse = null;\r\n\t\tvm.makeResponse = null;\r\n\r\n\t\tvm.isMakeSearchInProgress = false;\r\n\t\tvm.isModelSearchInProgress = false;\r\n\r\n\t\tvm.isRegoSearchError = false;\r\n\r\n\t\tvm.bodyStyles = [];\r\n\t\tvm.engineSizes = [],\r\n\t\t\tvm.selectedBodyStyle = 'Hatchback';\r\n\r\n\t\tvm.resetSearchLabel = labelService.getLabelFor('resetSearch');\r\n\r\n\t\tvm.carOptions = '';\r\n\t\t//vm.chosenResult = '';\r\n\t\tvar quoteModel = quoteModelFactory.create();\r\n\t\tquoteModel.regoDetails ? vm.chosenResult = quoteModel.regoDetails : vm.chosenResult = '';\r\n\t\tsearchType = '';\r\n\r\n\t\tfunction existsInArray(array, searchTerm, property) {\r\n\t\t\tfor (var i = 0, len = array.length; i < len; i++) {\r\n\t\t\t\tif (array[i][property] === searchTerm) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\r\n\t\tfunction getPastYears() {\r\n\t\t\tvar years = [];\r\n\t\t\tvar prevYear = '';\r\n\r\n\t\t\tfor (var i = 0; i < 100; i++) {\r\n\t\t\t\tprevYear = moment().subtract(i, 'year').format('Y');\r\n\t\t\t\tyears.push({label: prevYear, value: prevYear});\r\n\t\t\t}\r\n\r\n\t\t\treturn years;\r\n\t\t}\r\n\r\n\t\tfunction buildArray(data, array, property) {\r\n\r\n\t\t\tif (data.length >= 5) {\r\n\t\t\t\tdata.forEach(function (object) {\r\n\t\t\t\t\tvar item = object[property];\r\n\r\n\t\t\t\t\tif (!existsInArray(array, item, 'value')) {\r\n\t\t\t\t\t\tarray.push({\r\n\t\t\t\t\t\t\tvalue: item,\r\n\t\t\t\t\t\t\tlabel: item\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar yearsObject = getPastYears();\r\n\r\n\t\tvm.searchBy = function (type) {\r\n\t\t\treturn searchType == type;\r\n\t\t}\r\n\r\n\t\tvm.showSearch = function (type) {\r\n\t\t\tvm.chosenResult = '';\r\n\t\t\tsearchType = type;\r\n\t\t}\r\n\r\n\t\tvm.getYears = function () {\r\n\t\t\treturn yearsObject;\r\n\t\t}\r\n\r\n\t\tvm.searchRegoNo = function (regoForm) {\r\n\t\t\tvar isValid = regoForm.carRegoNumber.$valid\r\n\t\t\t\t&& regoForm.carRegoNumberState.$valid;\r\n\t\t\tvm.isRegoSearchError = false;\r\n\t\t\tif (isValid) {\r\n\t\t\t\tvm.update({\r\n\t\t\t\t\tname: 'regoDetails', value: {\r\n\t\t\t\t\t\tregoNumber: vm.rego,\r\n\t\t\t\t\t\tstate: vm.selectedState,\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\r\n\t\t\t\tregoSearchService.search({\r\n\t\t\t\t\trego: vm.rego,\r\n\t\t\t\t\tstate: vm.selectedState,\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tvm.chosenResult = resp;\r\n\t\t\t\t\tvm.update({name: 'regoSearchResponse', value: resp});\r\n\t\t\t\t\tserviceResponseRepository.update('regoSearch', resp);\r\n\t\t\t\t}, function (error) {\r\n\t\t\t\t\tvm.isRegoSearchError = true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// On change of Year dropdown, trigger a search for the Make.\r\n\t\tvm.searchMake = function (yearInput) {\r\n\t\t\tvm.yearInput = yearInput;\r\n\r\n\t\t\tvar tempYear = null;\r\n\r\n\t\t\tif (tempYear !== vm.yearInput.value) {\r\n\t\t\t\tvm.makeInput = undefined;\r\n\t\t\t\tvm.modelInput = undefined;\r\n\t\t\t\tvm.carOptions = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.yearInput.value !== '') {\r\n\t\t\t\tvm.isMakeSearchInProgress = true;\r\n\t\t\t\ttempYear = vm.yearInput.value;\r\n\r\n\t\t\t\tregoSearchService.searchMake({\r\n\t\t\t\t\tyear: vm.yearInput.value\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tvm.makeResponse = resp;\r\n\t\t\t\t\tvm.isMakeSearchInProgress = false;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// On change of the Make dropdown, trigger a search for Model\r\n\t\tvm.searchModel = function (makeInput) {\r\n\t\t\tvm.makeInput = makeInput;\r\n\r\n\t\t\t// console.info(makeInput);\r\n\r\n\t\t\tvar tempMake = null;\r\n\r\n\t\t\tif (tempMake !== vm.makeInput.value) {\r\n\t\t\t\tvm.modelInput = undefined;\r\n\t\t\t\tvm.carOptions = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.makeInput !== '') {\r\n\t\t\t\tvm.isModelSearchInProgress = true;\r\n\r\n\t\t\t\tregoSearchService.searchModel({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\tmake: vm.makeInput.code\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tvm.isModelSearchInProgress = false;\r\n\t\t\t\t\tvm.modelResponse = resp;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Update the current car options based on engine/body filters\r\n\t\tvm.filterCarOptions = function (type) {\r\n\r\n\t\t\tif (type == 'bodyStyle') {\r\n\t\t\t\tvm.engineSizes = [];\r\n\t\t\t\tvm.selectedEngineSize = undefined;\r\n\t\t\t}\r\n\r\n\t\t\t// If only the body style is selected\r\n\t\t\tif (vm.selectedBodyStyle !== undefined && vm.selectedEngineSize == undefined) {\r\n\t\t\t\tvm.filteredCarOptions = vm.carOptions.filter(filterArrayByBody);\r\n\t\t\t}\r\n\r\n\t\t\t// If only the engine size is selected\r\n\t\t\tif (vm.selectedEngineSize !== undefined && vm.selectedBodyStyle == undefined) {\r\n\t\t\t\tvm.filteredCarOptions = vm.carOptions.filter(filterArrayByEngine);\r\n\t\t\t}\r\n\r\n\t\t\t// If both are selected\r\n\t\t\tif (vm.selectedEngineSize !== undefined && vm.selectedBodyStyle !== undefined) {\r\n\t\t\t\tvm.filteredCarOptions = vm.carOptions.filter(filterArrayByBodyAndEngine);\r\n\t\t\t}\r\n\r\n\t\t\t// Rebuild the engine size array\r\n\r\n\r\n\t\t\tbuildArray(vm.filteredCarOptions, vm.engineSizes, 'engineSize');\r\n\r\n\t\t}\r\n\r\n\t\t// On change of the Model dropdown, trigger a final search for the car details\r\n\t\tvm.getCarDetails = function (modelInput) {\r\n\t\t\tvm.carOptions = '';\r\n\t\t\tvm.bodyStyles = [];\r\n\t\t\tvm.engineSizes = [];\r\n\t\t\tvm.selectedBodyStyle = undefined;\r\n\t\t\tvm.selectedEngineSize = undefined;\r\n\r\n\t\t\tvm.modelInput = modelInput;\r\n\r\n\t\t\tif (vm.modelInput !== undefined) {\r\n\t\t\t\tregoSearchService.searchCar({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\tmake: vm.makeInput.code,\r\n\t\t\t\t\tmodel: vm.modelInput.code\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tbuildArray(resp, vm.bodyStyles, 'bodyStyle');\r\n\t\t\t\t\tbuildArray(resp, vm.engineSizes, 'engineSize');\r\n\t\t\t\t\tvm.carOptions = resp;\r\n\t\t\t\t\tvm.filteredCarOptions = resp;\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tvm.carOptions = '';\r\n\t\t\t\tvm.chosenResult = '';\r\n\t\t\t\tvm.carOption = '';\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByBodyAndEngine(item) {\r\n\t\t\treturn item.bodyStyle == vm.selectedBodyStyle.value && item.engineSize == vm.selectedEngineSize.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByBody(item) {\r\n\t\t\treturn item.bodyStyle == vm.selectedBodyStyle.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByEngine(item) {\r\n\t\t\treturn item.engineSize == vm.selectedEngineSize.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tvm.showChosenCar = function (key) {\r\n\t\t\tvm.chosenResult = vm.filteredCarOptions[key];\r\n\t\t\tvm.update({name: 'regoSearchResponse', value: vm.chosenResult});\r\n\t\t\tserviceResponseRepository.update('regoSearch', vm.chosenResult);\r\n\t\t}\r\n\r\n\t\tvm.isCarSelected = function () {\r\n\t\t\treturn vm.chosenResult !== '';\r\n\t\t}\r\n\r\n\t\tvm.resetSearch = function () {\r\n\t\t\tvm.chosenResult = '';\r\n\t\t\tserviceResponseRepository.update('regoSearch', null);\r\n\t\t}\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('regoSearch', {\r\n\t\ttemplateUrl: '/ngviews/components/qbRegoSearch.html',\r\n\t\tcontroller: RegoSearchController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t}\r\n\t});\r\n})();\r\n","(function() {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBSaveQuote', QBSaveQuote);\r\n\r\n\tQBSaveQuote.$inject = [\r\n\t\t'$scope',\r\n\t\t'quoteModelFactory',\r\n\t\t'portalServiceWrapper',\r\n\t\t'userInputRepository',\r\n\t\t'quoteOptions',\r\n\t\t'labelService',\r\n\t\t'ipCookie',\r\n\t\t'gtmService',\r\n\t\t'quoteRequestRepository',\r\n\t];\r\n\r\n\tfunction QBSaveQuote(\r\n\t\t$scope,\r\n\t\tquoteModelFactory,\r\n\t\tportalServiceWrapper,\r\n\t\tuserInputRepository,\r\n\t\tquoteOptions,\r\n\t\tlabelService,\r\n\t\tipCookie,\r\n\t\tgtmService,\r\n\t\tquoteRequestRepository\r\n\t) {\r\n\t\t$scope.$root.$on('open-modal', openModal);\r\n\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.opened = false;\r\n\t\tvm.isError = false;\r\n\r\n\t\tfunction openModal() {\r\n\t\t\tvm.label = labelService.getLabelFor('saveQuoteEmail');\r\n\t\t\tvar quoteModel = quoteModelFactory.create();\r\n\r\n\t\t\tvm.email = quoteModel.email;\r\n\t\t\tvm.quoteNo = quoteModel.quoteId;\r\n\t\t\tvm.opened = true;\r\n\r\n\t\t\tif (vm.email !== undefined && vm.email !== null) {\r\n\t\t\t\tvm.showForm = false;\r\n\t\t\t\tsaveQuote();\r\n\t\t\t} else {\r\n\t\t\t\tvm.showForm = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction saveQuote() {\r\n\t\t\t// Call MA service here to send email\r\n\t\t\tportalServiceWrapper.updateQuote(userInputRepository.get());\r\n\r\n\t\t\tvar paymentFrequency = quoteOptions.getSelectedPaymentFrequencyForService();\r\n\r\n\t\t\tportalServiceWrapper\r\n\t\t\t\t.saveQuote(paymentFrequency)\r\n\t\t\t\t.then(function(resp) {\r\n\t\t\t\t\t$scope.$root.$broadcast('perform-ma-service', 'save');\r\n\t\t\t\t\tvar quoteModel = quoteModelFactory.create();\r\n\t\t\t\t\tvm.email = quoteModel.email;\r\n\t\t\t\t\tvm.quoteNo = quoteModel.quoteId;\r\n\r\n\t\t\t\t\tipCookie('QBE_portal_vehicle_quote_id', vm.quoteNo, {\r\n\t\t\t\t\t\tpath: '/'\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Show mini spinner\r\n\t\t\t\t\tvm.showForm = false;\r\n\r\n\t\t\t\t\t// If quoteId found and email found, triggerGoal service quote\r\n\t\t\t\t\tvar qr = quoteRequestRepository.getSaveQuoteRequest(paymentFrequency);\r\n\t\t\t\t\tif (qr && qr.quoteID && vm.email) {\r\n\t\t\t\t\t\tportalServiceWrapper.triggerGoalSaveQuote();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$scope.$root.$broadcast('save-quote-success');\r\n\r\n\t\t\t\t\treturn resp;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function(err) {\r\n\t\t\t\t\t$scope.$root.$broadcast('error', {\r\n\t\t\t\t\t\terrorMessage: 'Save quote error',\r\n\t\t\t\t\t\tresponse: err\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn err;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.saveForm = function(form) {\r\n\t\t\tif (form.$valid) {\r\n\t\t\t\tgtmService.trackEvent('save');\r\n\t\t\t\tuserInputRepository.update({ email: vm.email });\r\n\t\t\t\tsaveQuote();\r\n\t\t\t} else {\r\n\t\t\t\t// console.info('Please enter an email');\r\n\t\t\t\tvm.isError = true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvm.closeModal = function() {\r\n\t\t\tvm.opened = false;\r\n\t\t\tvm.email = null; // clear email field\r\n\t\t\t$scope.$root.$broadcast('close-modal', { modal: 'saveQuote' });\r\n\t\t};\r\n\r\n\t\tvm.getSectionLabelFor = function(fieldName) {\r\n\t\t\treturn labelService.getSectionLabelFor(fieldName);\r\n\t\t};\r\n\r\n\t\tvm.getSectionDescriptionFor = function(fieldName) {\r\n\t\t\treturn labelService.getSectionDescriptionFor(fieldName);\r\n\t\t};\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbSaveQuote', {\r\n\t\ttemplateUrl: '../ngviews/components/qbSaveQuote.html',\r\n\t\tcontroller: QBSaveQuote,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\temail: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t\"use strict\";\r\n\r\n\tangular\r\n\t\t.module(\"qbePortal\")\r\n\t\t.controller(\"QBTopBannerController\", QBTopBannerController);\r\n\r\n\tQBTopBannerController.$inject = [\"$scope\", \"labelService\", \"$window\"];\r\n\r\n\tfunction QBTopBannerController($scope, labelService, $window) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.showTopBanner = false;\r\n\t\t//vm.bannerText = $window.qbe.fieldLabels.topBanner.bannerText;\r\n\r\n\t\tvm.closeTopBanner = function () {\r\n\t\t\tvm.showTopBanner = false;\r\n\t\t};\r\n\r\n\t\t$scope.$root.$on(\"show-top-banner\", function (event, bannerText) {\r\n\t\t\tvm.bannerText = bannerText;\r\n\t\t\tvm.showTopBanner = true;\r\n\t\t});\r\n\r\n\t\t$scope.$root.$on(\"hide-top-banner\", function () {\r\n\t\t\tvm.showTopBanner = false;\r\n\t\t});\r\n\t}\r\n\r\n\tangular.module(\"qbePortal\").component(\"qbTopBanner\", {\r\n\t\ttemplateUrl: \"/ngviews/components/qbTopBanner.html\",\r\n\t\tcontroller: QBTopBannerController,\r\n\t\tcontrollerAs: \"vm\",\r\n\t\tbindings: {},\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBValidationController', QBValidationController);\r\n\r\n\tQBValidationController.$inject = ['$scope', 'validationService'];\r\n\r\n\tfunction QBValidationController($scope, validationService) {\r\n\t\tvar vm = this, scope = $scope, validationMessages = {};\r\n\r\n\t\tvar hasErrors = false, errors = {};\r\n\r\n\t\tvar validationResult = null;\r\n\r\n\t\t// $scope.$on('field-error', onError);\r\n\t\t$scope.validationSelector = vm.validationSelector;\r\n\t\t// function onError (event, error) {\r\n\t\t// \tvar currentFieldSelector = error.section + '.' + error.inputName ;\r\n\t\t// \t//console.log(vm.validationSelector + ' | ' + currentFieldSelector);\r\n\t\t// \tif (vm.validationSelector == currentFieldSelector ) {\r\n\t\t// \t\thasErrors = true ;\r\n\t\t// \t\terrors[error.type] = error ;\r\n\t\t// \t\tconsole.log('field has error') ;\r\n\t\t// \t\t$scope.$emit('enable-field-error-class') ;\r\n\t\t// \t}\r\n\t\t// }\r\n\r\n\t\tvm.validationMessageFor = function (rule) {\r\n\t\t\t// if ( ! validationResult )\r\n\t\t\tvalidationResult = validationService.getFieldErrors(vm.validationSelector);\r\n\t\t\treturn validationResult ? validationResult.errors[rule] : null;\r\n\t\t}\r\n\r\n\t\tvm.isInvalid = function (rule) {\r\n\t\t\treturn validationService.isFieldInvalid(vm.validationSelector, rule); //, vm.messageKey) ;\r\n\t\t\t// return validationResult[rule] ;\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbValidation', {\r\n\t\ttemplateUrl: '/ngviews/components/qbValidation.html',\r\n\t\tcontroller: QBValidationController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tvalidationSelector: '<',\r\n\t\t\tmessageKey: '<',\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('VehicleSubTypeSelector', VehicleSubTypeSelector);\r\n\r\n\tVehicleSubTypeSelector.$inject = ['$scope', 'serviceResponseRepository', 'quoteModelFactory', 'labelService'];\r\n\r\n\tfunction VehicleSubTypeSelector($scope, serviceResponseRepository, quoteModelFactory, labelService) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({name: vm.name, value: vm.fieldValue});\r\n\t\t}\r\n\r\n\t\tvm.getOptions = function () {\r\n\t\t\tvar options;\r\n\r\n\t\t\tswitch (vm.vehicleType) {\r\n\t\t\t\tcase 'caravan':\r\n\t\t\t\t\toptions = labelService.getOptionsFor('caravanSubTypes');\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'campertrailer':\r\n\t\t\t\t\toptions = labelService.getOptionsFor('camperTrailerSubTypes');\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'goodscarryingtrailer':\r\n\t\t\t\t\toptions = labelService.getOptionsFor('goodsCarryingTrailerSubTypes');\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn options;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('vehicleSubTypeSelector', {\r\n\t\ttemplateUrl: '../ngviews/components/qbVehicleSubTypeSelector.html',\r\n\t\tcontroller: VehicleSubTypeSelector,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tname: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t\tfieldValue: '<',\r\n\t\t\tvehicleType: '<',\r\n\t\t\tlabelWildcard: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('YearMakeModelSearchController', YearMakeModelSearchController);\r\n\r\n\tYearMakeModelSearchController.$inject = [\r\n '$rootScope',\r\n\t\t'$scope', \r\n\t\t'regoSearchService', \r\n\t\t'serviceResponseRepository', \r\n\t\t'quoteModelFactory', \r\n\t\t'labelService', \r\n\t\t'storage'\r\n\t];\r\n\r\n\tfunction YearMakeModelSearchController(\r\n $rootScope,\r\n\t\t$scope, \r\n\t\tregoSearchService, \r\n\t\tserviceResponseRepository, \r\n\t\tquoteModelFactory, \r\n\t\tlabelService, \r\n\t\tstorage) {\r\n\t\tvar vm = this,\r\n\t\t\tsearchType;\r\n\r\n\t\tvm.yearInput = null;\r\n\t\tvm.makeInput = '';\r\n\t\tvm.modelInput = '';\r\n\t\tvm.yearMakeModelResult = '';\r\n\t\tvm.modelResponse = null;\r\n\t\tvm.makeResponse = null;\r\n\r\n\t\tvm.bodyStyles = [];\r\n\t\tvm.engineSizes = [],\r\n\t\t\tvm.selectedBodyStyle = '';\r\n\r\n\t\tvm.resetSearchLabel = labelService.getLabelFor('resetSearch');\r\n\r\n\t\tvm.isMakeSearchInProgress= false ;\r\n\t\tvm.isModelSearchInProgress= false ;\r\n\r\n\t\tvm.yearMakeModelResults = '';\r\n\r\n\t\tvar quoteModel = quoteModelFactory.create();\r\n\t\tvm.chosenResult = quoteModel.regoDetails ? quoteModel.regoDetails : null ;\r\n\r\n\t\t$scope.$on(\"recall-get-details\", recallGetDetails);\r\n\r\n\t\tfunction recallGetDetails() {\r\n\t\t\tif (vm.modelInput){\r\n\t\t\t\tvm.getDetails(vm.modelInput);\r\n\t\t\t}\r\n \t\t}\r\n\r\n\t\tfunction existsInArray(array, searchTerm, property) {\r\n\t\t\tfor (var i = 0, len = array.length; i < len; i++) {\r\n\t\t\t\tif (array[i][property] === searchTerm) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfunction getPastYears() {\r\n\t\t\tvar years = [];\r\n\t\t\tvar prevYear = '';\r\n\r\n\t\t\tfor (var i = 0; i < 100; i++) {\r\n\t\t\t\tprevYear = moment().subtract(i, 'year').format('Y');\r\n\t\t\t\tyears.push({label: prevYear, value: prevYear});\r\n\t\t\t}\r\n\r\n\t\t\treturn years;\r\n\t\t}\r\n\r\n\t\tfunction buildArray(data, array, property) {\r\n\r\n\t\t\tif (data.length >= 5) {\r\n\t\t\t\tdata.forEach(function (object) {\r\n\t\t\t\t\tvar item = object[property];\r\n\r\n\t\t\t\t\tif (!existsInArray(array, item, 'value')) {\r\n\t\t\t\t\t\tarray.push({\r\n\t\t\t\t\t\t\tvalue: item,\r\n\t\t\t\t\t\t\tlabel: item\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar yearsObject = getPastYears();\r\n\r\n\t\tvm.searchBy = function (type) {\r\n\t\t\treturn searchType == type;\r\n\t\t}\r\n\r\n\t\tvm.showSearch = function (type) {\r\n\t\t\tvm.chosenResult = null ;\r\n\t\t\tsearchType = type;\r\n\t\t}\r\n\r\n\t\tvm.getYears = function () {\r\n\t\t\treturn yearsObject;\r\n\t\t}\r\n\r\n\t\tvm.getPolicyStartDate = function() {\r\n\t\t\treturn storage.getItem('policy-start-date');\r\n\t\t}\r\n\r\n\t\t// On change of Year dropdown, trigger a search for the Make.\r\n\t\tvm.searchMake = function (yearInput) {\r\n\t\t\tvm.yearInput = yearInput;\r\n\r\n\t\t\tvar tempYear = null;\r\n\r\n\t\t\tif (tempYear !== vm.yearInput.value) {\r\n\t\t\t\tvm.makeInput = undefined;\r\n\t\t\t\tvm.modelInput = undefined;\r\n\t\t\t\tvm.yearMakeModelResults = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.yearInput.value !== '') {\r\n\t\t\t\tvm.isMakeSearchInProgress = true;\r\n\t\t\t\tvm.makeResponse = null;\r\n\t\t\t\tvm.modelResponse = null;\r\n\t\t\t\ttempYear = vm.yearInput.value;\r\n\r\n\t\t\t\tregoSearchService.searchMake({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\teffectiveDate: vm.getPolicyStartDate(),\r\n\t\t\t\t}\r\n\t\t\t\t,function (resp) {\r\n\t\t\t\t\tvm.isMakeSearchInProgress = false\r\n\t\t\t\t\tvm.makeResponse = resp;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// On change of the Make dropdown, trigger a search for Model\r\n\t\tvm.searchModel = function (makeInput) {\r\n\t\t\tvm.makeInput = makeInput;\r\n\r\n\t\t\tvar tempMake = null;\r\n\r\n\t\t\tif (tempMake !== vm.makeInput.value) {\r\n\t\t\t\tvm.modelInput = undefined;\r\n\t\t\t\tvm.yearMakeModelResults = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (vm.makeInput !== '') {\r\n\t\t\t\tvm.isModelSearchInProgress = true;\r\n\t\t\t\tvm.modelResponse = null;\r\n\r\n\t\t\t\tregoSearchService.searchModel({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\tmake: vm.makeInput.code,\r\n\t\t\t\t\teffectiveDate: vm.getPolicyStartDate(),\r\n\t\t\t\t},function (resp) {\r\n\t\t\t\t\tvm.isModelSearchInProgress = false;\r\n\t\t\t\t\tvm.modelResponse = resp;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Update the current car options based on engine/body filters\r\n\t\tvm.filterOptions = function (type) {\r\n\r\n\t\t\tif (type == 'bodyStyle') {\r\n\t\t\t\tvm.engineSizes = [];\r\n\t\t\t\tvm.selectedEngineSize = undefined;\r\n\t\t\t}\r\n\r\n\t\t\t// If only the body style is selected\r\n\t\t\tif (vm.selectedBodyStyle !== undefined && vm.selectedEngineSize == undefined) {\r\n\t\t\t\tvm.filteredOptions = vm.yearMakeModelResults.filter(filterArrayByBody);\r\n\t\t\t}\r\n\r\n\t\t\t// If only the engine size is selected\r\n\t\t\tif (vm.selectedEngineSize !== undefined && vm.selectedBodyStyle == undefined) {\r\n\t\t\t\tvm.filteredOptions = vm.yearMakeModelResults.filter(filterArrayByEngine);\r\n\t\t\t}\r\n\r\n\t\t\t// If both are selected\r\n\t\t\tif (vm.selectedEngineSize !== undefined && vm.selectedBodyStyle !== undefined) {\r\n\t\t\t\tvm.filteredOptions = vm.yearMakeModelResults.filter(filterArrayByBodyAndEngine);\r\n\t\t\t}\r\n\r\n\t\t\t// Rebuild the engine size array\r\n\r\n\r\n\t\t\tbuildArray(vm.filteredOptions, vm.engineSizes, 'engineSize');\r\n\r\n\t\t}\r\n\r\n\t\t// On change of the Model dropdown, trigger a final search for the car details\r\n\t\tvm.getDetails = function (modelInput) {\r\n\t\t\tvm.yearMakeModelResults = '';\r\n\t\t\tvm.bodyStyles = [];\r\n\t\t\tvm.engineSizes = [];\r\n\t\t\tvm.selectedBodyStyle = undefined;\r\n\t\t\tvm.selectedEngineSize = undefined;\r\n\r\n\t\t\tvm.modelInput = modelInput;\r\n\r\n\t\t\tif (vm.modelInput !== undefined) {\r\n\t\t\t\tregoSearchService.searchCar({\r\n\t\t\t\t\tyear: vm.yearInput.value,\r\n\t\t\t\t\tmake: vm.makeInput.code,\r\n\t\t\t\t\tmodel: vm.modelInput.code,\r\n\t\t\t\t\teffectiveDate: vm.getPolicyStartDate(),\r\n\t\t\t\t}, function (resp) {\r\n\t\t\t\t\tbuildArray(resp, vm.bodyStyles, 'bodyStyle');\r\n\t\t\t\t\tbuildArray(resp, vm.engineSizes, 'engineSize');\r\n\t\t\t\t\tvm.yearMakeModelResults = resp;\r\n\t\t\t\t\tvm.filteredOptions = resp;\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tvm.yearMakeModelResults = '';\r\n\t\t\t\tvm.chosenResult = '';\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByBodyAndEngine(item) {\r\n\t\t\treturn item.bodyStyle == vm.selectedBodyStyle.value && item.engineSize == vm.selectedEngineSize.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByBody(item) {\r\n\t\t\treturn item.bodyStyle == vm.selectedBodyStyle.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction filterArrayByEngine(item) {\r\n\t\t\treturn item.engineSize == vm.selectedEngineSize.value ? 1 : 0;\r\n\t\t}\r\n\r\n\t\tfunction updateRepository() {\r\n\t\t\tvm.update({name: 'regoDetails', value: vm.chosenResult});\r\n\t\t\tserviceResponseRepository.update('regoSearch', vm.chosenResult);\r\n\t\t}\r\n\r\n\t\tvm.selectOption = function () {\r\n\t\t\tvm.chosenResult = vm.yearMakeModelResults[vm.yearMakeModelOption];\r\n\t\t\tupdateRepository();\r\n\r\n\t\t\t$rootScope.$broadcast(\"bike-selected\");\r\n\t\t}\r\n\r\n\t\tvm.isResultSelected = function () {\r\n\t\t\treturn !!vm.chosenResult; // !== undefined && vm.chosenResult !== '';\r\n\t\t}\r\n\r\n\t\tvm.resetSearch = function () {\r\n\t\t\tvm.yearMakeModelOption = '';\r\n\t\t\tvm.chosenResult = null;\r\n\t\t\tvm.update({name: 'regoDetails', value: null});\r\n\t\t\tserviceResponseRepository.update('regoSearch', null);\r\n\t\t}\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({name: name, setHierarchyFn: setHierarchyFn});\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('yearMakeModelSearch', {\r\n\t\ttemplateUrl: '/ngviews/components/qbYearMakeModelSearch.html',\r\n\t\tcontroller: YearMakeModelSearchController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tvalidationSelector: '@',\r\n\t\t\thideSubFilters: '<',\r\n\t\t\tlabelWildcard: '<',\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\r\n\tangular.module('qbePortal').controller('QBYearsHeld', QBYearsHeld);\r\n\r\n\tQBYearsHeld.$inject = ['$scope', 'MODULE_INFO'];\r\n\r\n\tfunction QBYearsHeld($scope, MODULE_INFO) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.fieldValue = vm.ngModel;\r\n\t\t}\r\n\r\n\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\tvm.setHierarchy({\r\n\t\t\t\tname: name,\r\n\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvm.onValueChanged = function () {\r\n\t\t\tvm.update({\r\n\t\t\t\tname: vm.name,\r\n\t\t\t\tvalue: vm.fieldValue\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Calculate age using DoB.\r\n\t\tfunction calcAge() {\r\n\r\n\t\t\treturn (moment(new Date()).diff(moment(vm.dob, 'DD/MM/YYYY'), 'years', true));\r\n\r\n\t\t}\r\n\r\n\t\t// Refine select options depending on age\r\n\t\tvm.getFilteredOptions = function () {\r\n\r\n\t\t\tvar fullOptions = vm.options.slice();\r\n\t\t\tvar age = calcAge();\r\n\r\n\t\t\tif (age > 17 && age <= 18) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 2);\r\n\t\t\t} else if (age > 18 && age <= 19) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 3);\r\n\t\t\t} else if (age > 19 && age <= 20) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 4);\r\n\t\t\t} else if (age > 20 && age <= 21) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 5);\r\n\t\t\t} else if (age > 21 && age <= 22) {\r\n\t\t\t\tfullOptions = fullOptions.splice(0, 6);\r\n\t\t\t}\r\n\r\n\t\t\treturn fullOptions;\r\n\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbYearsHeld', {\r\n\t\ttemplateUrl: '../ngviews/components/qbYearsHeld.html',\r\n\t\tcontroller: QBYearsHeld,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\toptions: '<',\r\n\t\t\tname: '@',\r\n\t\t\tngModel: '<',\r\n\t\t\tupdate: '&',\r\n\t\t\tsetHierarchy: '&',\r\n\t\t\tdob: '<'\r\n\t\t}\r\n\t});\r\n})();\r\n","(function () {\r\n\t'use strict';\r\n\r\n\tangular.module('qbePortal').controller('QBYesNoController', QBYesNoController);\r\n\tQBYesNoController.$inject = ['$scope' /*, '$state' */ ];\r\n\r\n\tfunction QBYesNoController($scope) {\r\n\t\tvar vm = this;\r\n\r\n\t\tvm.$onInit = function () {\r\n\t\t\tvm.id = vm.id || vm.name;\r\n\t\t\tvm.inputName = (vm.sectionName ? (vm.sectionName + '_') : '') + vm.id;\r\n\t\t\tvm.yesFieldId = vm.inputName + '_yes';\r\n\t\t\tvm.noFieldId = vm.inputName + '_no';\r\n\r\n\t\t\tvm.registerHierarchy = function (name, setHierarchyFn) {\r\n\t\t\t\tvm.setHierarchy({\r\n\t\t\t\t\tname: name,\r\n\t\t\t\t\tsetHierarchyFn: setHierarchyFn\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tvm.onValueChanged = function () {\r\n\t\t\t\tvm.update({\r\n\t\t\t\t\tname: vm.name,\r\n\t\t\t\t\tvalue: vm.fieldValue\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvm.valueChange();\r\n\t\t\t\tif (vm.commonValue !== undefined) {\r\n\t\t\t\t\t$scope.$emit('common-value-update', {\r\n\t\t\t\t\t\tname: vm.commonValue,\r\n\t\t\t\t\t\tvalue: (vm.fieldValue)\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (vm.requote !== undefined) {\r\n\t\t\t\t\t$scope.$root.$broadcast('requote', vm.requote);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvm.isRequired = function (condition) {\r\n\t\t\t\tif (condition) {\r\n\r\n\t\t\t\t\t// Unselect radios when no longer mandatory\r\n\t\t\t\t\tif (condition === 'false') {\r\n\t\t\t\t\t\t$('#' + vm.yesFieldId).attr('checked', false);\r\n\t\t\t\t\t\t$('#' + vm.noFieldId).attr('checked', false);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn condition === 'true';\r\n\r\n\t\t\t\t\t// Defaults to `true` if `required` attribute is not set\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tangular.module('qbePortal').component('qbYesNo', {\r\n\t\ttemplateUrl: '/ngviews/components/qbYesNo.html',\r\n\t\tcontroller: QBYesNoController,\r\n\t\tcontrollerAs: 'vm',\r\n\t\tbindings: {\r\n\t\t\tname: '@',\r\n\t\t\tariaLabel: '@',\r\n\t\t\trequired: '@',\r\n\t\t\tupdate: '&',\r\n\t\t\tid: '@?',\r\n\t\t\tsectionName: '<',\r\n\t\t\tfieldValue: '<',\r\n\t\t\tcommonValue: '@?',\r\n\t\t\trequote: '@?',\r\n\t\t\tvalueChange: '&',\r\n\t\t\ttableData: '<', // data in the associated table.\r\n\t\t}\r\n\t});\r\n})();\r\n","angular.module('qbePortal.routes').provider('dynamicRouter',['$stateProvider', dynamicRouterProvider]);\r\n\r\nangular.module('qbePortal.routes')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n\r\n $urlRouterProvider.otherwise(\"/404\");\r\n\r\n $locationProvider.html5Mode({\r\n enabled: true,\r\n });\r\n}]);\r\n\r\nangular.module('qbePortal.routes.vehicle')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['vehicle']) ;\r\n}]);\r\n\r\nangular.module('qbePortal.routes.bike')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['bike']) ;\r\n}]);\r\n\r\nangular.module('qbePortal.routes.caravan')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['caravan']) ;\r\n}]);\r\n\r\nangular.module('qbePortal.routes.home')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['home']) ;\r\n}]);\r\n\r\nangular.module('qbePortal.routes.ctp')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['ctp']) ;\r\n}]);\r\n \r\nangular.module('qbePortal.routes.payments')\r\n .config(['$locationProvider', 'dynamicRouterProvider', '$urlRouterProvider', function($locationProvider, dynamicRouterProvider, $urlRouterProvider) {\r\n dynamicRouterProvider.init(window.routes, ['payments']) ;\r\n}]);","(function (app) {\r\n\tvar routes = app.routes = {};\r\n\r\n\troutes.common = {\r\n\t\terror: {\r\n\t\t\tname: 'error',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'ErrorController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tdecline: {\r\n\t\t\tname: 'decline',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'DeclineController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\treferral: {\r\n\t\t\tname: 'referral',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'DeclineController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tembargo: {\r\n\t\t\tname: 'embargo',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'DeclineController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tcybersourcePaymentForm: {\r\n\t\t\tname: 'cybersourcePaymentForm',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'CybersourcePaymentFormController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tcybersourceCallback: {\r\n\t\t\tname: 'cybersourceCallback',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'CybersourceCallbackController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tpaypalCallback: {\r\n\t\t\tname: 'paypalCallback',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'PaypalCallbackController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t},\r\n\t\tpolicyStartDate: {\r\n\t\t\tname: 'policyStartDate',\r\n\t\t\tconfig: {\r\n\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\tcontrollerAs: '$ctrl'\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\troutes.vehicle = {\r\n\t\thome: {\r\n\t\t\tname: 'vehicle',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'vehicle.vehicle',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.drivers',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.quote',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.contact',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.payment',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PaymentController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.done',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'FormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'vehicle.policy-start-date',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\troutes.ctp = {\r\n\t\thome: {\r\n\t\t\tname: 'ctp',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\tname: 'ctp.ctp',\r\n\t\t\tconfig: {\r\n\t\t\t\tviews: {\r\n\t\t\t\t\t'@': {\r\n\t\t\t\t\t\tcontroller: 'ctpFormController',\r\n\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}]\r\n\t};\r\n\r\n\troutes.bike = {\r\n\t\thome: {\r\n\t\t\tname: 'bike',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'bike.bike',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.riders',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.quote',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.contact',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.payment',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PaymentController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.done',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'BikeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'bike.policy-start-date',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\troutes.home = {\r\n\t\thome: {\r\n\t\t\tname: 'home',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'home.estimate',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.property',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.building',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcondition: function () {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.covers',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.details',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.quote',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.contact',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.payment',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PaymentController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.done',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'HomeFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'home.policy-start-date',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\r\n\troutes.caravan = {\r\n\t\thome: {\r\n\t\t\tname: 'caravan',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'caravan.caravan',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.drivers',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.quote',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.contact',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.payment',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PaymentController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.done',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'CaravanFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {},\r\n\t\t\t\t\t\t'progressbar@': {},\r\n\t\t\t\t\t\t'headbar@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'caravan.policy-start-date',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'PolicyStartDateController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\troutes.payments = {\r\n\t\thome: {\r\n\t\t\tname: 'payments',\r\n\t\t\tconfig: {\r\n\t\t\t\tabstract: true,\r\n\t\t\t\ttemplate: '
'\r\n\t\t\t}\r\n\t\t},\r\n\t\tsteps: [{\r\n\t\t\t\tname: 'payments.payments',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'paymentsFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'payments.complete',\r\n\t\t\t\tconfig: {\r\n\t\t\t\t\tviews: {\r\n\t\t\t\t\t\t'@': {\r\n\t\t\t\t\t\t\tcontroller: 'paymentsFormController',\r\n\t\t\t\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'sidebar@': {},\r\n\t\t\t\t\t\t'header@': {},\r\n\t\t\t\t\t\t'meta@': {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n})(window);\r\n"]}