{"version":3,"sources":["root/app/app.js","root/app/controllers/main.js","root/app/controllers/birthdayMonth.js","root/app/controllers/birthdayDay.js","root/app/controllers/birthdayYear.js","root/app/controllers/applicantName.js","root/app/controllers/applicantContact.js","root/app/controllers/reviewTerms.js","root/app/controllers/applicantAddress.js","root/app/controllers/applicantIncome.js","root/app/controllers/applicantMortgage.js","root/app/controllers/downPayment.js","root/app/controllers/tradein.js","root/app/controllers/tradeinDetails.js","root/app/controllers/tradeinEstimate.js","root/app/controllers/tradeinHelp.js","root/app/controllers/tradeinPayments.js","root/app/controllers/results.js","root/app/controllers/welcome.js","root/app/controllers/error.js","root/app/controllers/maintenance.js","root/app/ga.js","root/app/services/loader.js","root/app/services/googleInitializer.js","root/app/factories/data.js","root/app/factories/error.js","root/app/factories/httpRequestInterceptor.js","root/app/factories/image.js","root/app/factories/localization.js","root/app/factories/scroll.js","root/app/factories/session.js","root/app/factories/submit.js","root/app/factories/vehicle.js","root/app/factories/validation.js","root/app/directives/click-outside.js","root/app/directives/container-expand.js","root/app/directives/equal-height-labels.js","root/app/directives/google-places.js","root/app/directives/currency-formatter.js","root/app/directives/modal.js","root/app/directives/modal-trigger.js","root/app/directives/err-msg.js","root/app/directives/ng-enter.js","root/app/directives/set-focus.js","root/app/directives/phone-formatter.js","root/app/directives/progress-bar.js","root/app/directives/tooltip.js","root/app/directives/validate-on-click.js","root/app/directives/validate-on-enter.js"],"names":["mainCtrl","$scope","$rootScope","ScrollFactory","$timeout","$window","isLoaded","focusTop","progressCurrent","$","focus","gotoCurrentSection","currentStep","position","offset","top","find","first","scrollTop","gotoPrevSection","stepName","goToStep","getPrevStep","getLastStep","on","_","debounce","innerWidth","cancel","theTimeout","each","i","raw","element","fullyInView","getBoundingClientRect","headerHeight","height","pageTop","window","pageBottom","elementTop","elementBottom","isVisible","css","attr","scrolling","leading","trailing","birthdayMonthCtrl","DataFactory","progressMobCurrent","localContent","appData","content","data","applicant","apBirthDateMM","selectedMonth","continueDisabled","$watch","newValue","oldValue","newVal","months","monthsFull","monthsArray","Object","keys","map","key","value","push","nextStep","month","appState","birthdayMonth","setData","showStep","birthdayMonthNextStep","prevStep","birthdayDayCtrl","birthday","apBirthDateDD","selectedDay","birthMonth","month_list_full","oldVal","match","daysLength","day","birthdayDay","birthdayDayNextStep","birthdayYearCtrl","birthMM","birthDay","selectedYear","apBirthDateYYYY","apBirthDate","slice","age","calculateAge","apProvince","checkAgeOfMajority","yearPrefix","dec","parseInt","charAt","currentDecadeIndex","Date","ageDifMs","now","getTime","ageDate","Math","abs","getUTCFullYear","p","length","majorityError","BirthdayYear","$setValidity","ga","errors","ageOfMajority","year","birthdayYear","birthdayYearNextStep","prevYearEnabled","minDecade","getFullYear","toString","substr","prevYear","nextYearEnabled","today","maxDOBYear","m","getMonth","getDate","nextYear","isYearVisible","minDOBYear","applicantNameCtrl","SessionFactory","formatFirstName","Name","apFirstName","$valid","name","RegExp","test","toUpperCase","toLowerCase","formatLastName","apLastName","applicantName","lastName","applicantNameNextStep","continueNextStep","sessionId","forcedLoader","unwatch","angular","forEach","$error","field","errorField","index","$setTouched","errorNumber","applicantContactCtrl","applicantContact","apPhone","replace","applicantContactNextStep","Contact","apPhoneFormatted","reviewTermsCtrl","$http","LocalizationFactory","ErrorFactory","reviewTerms","forceFRTerms","showOOWModal","showNoMatchModal","firstOOWQuestion","temp","selectedOpt","secondSelectedOpt","newData","oldData","apAddress","score","termRead","termsAccepted","secondOOWQuestion","secondQuestion","attempts","primaryConsentID","lastVisibleStep","reviewTermsNextStep","retrieveCurrentSession","then","sid","getCurrentSession","consentObj","JSON","stringify","id","firstName","mapFrChar","streetAddress","apt","apApt","city","apCity","province","postalCode","apPostalCode","DOB","emailAddress","apEmail","phoneNumber","applicantType","consentVersionNumber","method","url","baseUrl","response","parse","e","initialOOWObj","street","apStreetNum","apStreetName","prov","phone","language","lang","OOWResponse","ExamDetails","ApplicationId","QueueName","CurrentQueue","question","QuestionsList","Question","Text","choices","Answer","gaPageView","oow","splitCode","split","Number","oowErrors","idNotFound","errorPage","glContent","attempt_err_msg","idNotFound2","auth_err_msg","int_err_msg","tuServerfail","httpError","status","generic_connection_error","swapForFRTerms","swapForENTerms","tryAgain","OOWAnswer","answer","IsSelected","firstOOWObj","SessionId","decision","too_many_tries","second_question","second_choices","gaCustEvent","oowQFreezeFailure","OOWSecondAnswer","secondOOWObj","result_content","Decision","applicantAddressCtrl","$filter","addressModalDone","refocus","submittedModal","addressModalForm","showAddressModal","address","POBox","form","addressType","addressModalFocus","checkPOBox","checkProvince","$viewValue","openAddressModal","jQuery","remove","width","addressPlaceholder","address_placeholder","$apply","provinceArray","applicantAddressNextStep","Address","applicantAddress","applicantIncomeCtrl","applicantIncome","checkIncome","apIncome","minimumIncome","Income","applicantIncomeNextStep","annualIncome","applicantMortgageCtrl","applicantMortgage","applicantMortgageNextStep","Mortgage","downPaymentCtrl","$state","SubmitFactory","downPayment","downPaymentNextStep","DownPayment","gaClientId","getAll","trackers","tracker","get","env","attachGAClientId","apDownPayment","result","submit","profileUpdated","go","hasTradein","tradeinCtrl","tradein","yesSelected","noSelected","hideStep","apTradeinValue","apBalance","apMakingPayments","apTradeinDetails","apTradeinKms","tradein_avg","tradein_clean","tradein_rough","uvc","tradeinDetailsCtrl","VehicleFactory","tradeinDetails","updateDropdown","debounceDropdown","showDropdown","document","activeElement","Details","vehicleList","displayList","updateVehicle","vehicle","description","checkHideDropdown","num","details","VehicleYear","Make","Model","Trim","BodyStyle","join","autoComplete","result_code","tradeinDetailsNextStep","KM","getVehicle","tradeinEstimateCtrl","setVehicleRange","tradeinHigh","tradeinAvg","tradeinLow","checkMaxValue","Estimate","apTradeinEstimate","tradeinEstimate","tradeinEstimateNextStep","tradeinHelpCtrl","tradeinHelp","TradeinValue","tradeinPaymentsCtrl","sendGAEvent","option_1_val","makingPaymentsYes","option_2_val","makingPaymentsUnsure","option_3_val","makingPaymentsNo","tradeinPayments","tradeinPaymentsNextStep","TradeinPayments","validationErr","$name","resultsCtrl","dataLayerPushloanAmount","dataLayer","event","category","action","calcdata","loanAmount","label","hash","recalculate","lt","mp","intRate","interestRate","pow","minLoanError","calculatePurchasePrice","purchasePrice","netTradeinValue","formatSliderCurrency","input","$on","next","current","indexOf","preventDefault","restart","text","incoming_lang","interestRateElement","val","formatRate","change","loanTerm","showOptionsModal","showPPModal","approved","prequalResult","results","openSliderModal","innerHeight","tooltip_content","copy","monthlyPayment","floor","updateInterestRate","ir","isNaN","ResultOptions","ResultOptionsMob","ir_slider_instance","update","from","irmob_slider_instance","updateInterestRateA11y","updateLoanTerm","updateMonthlyPayment","MIN_MONTHLY_PAYMENT","closestVal","mpValues","round","mp_slider_instance","mpmob_slider_instance","updateMonthlyPaymentA11y","updateDownPayment","dp","MAX_DOWN_PAYMENT","dp_slider_instance","dpmob_slider_instance","updateDownPaymentA11y","adjustLoanTerm","expandSliders","rVal","getMonthlyPaymentValues","ir_slider","$ir_minLabel","closest","$ir_maxLabel","ionRangeSlider","type","skin","min","max","postfix","percentage","step","hide_min_max","grid_snap","onStart","res","onUpdate","onFinish","updateIRSlider","onChange","irmob_slider","$ir_minLabelMob","$ir_maxLabelMob","lt_slider","$lt_minLabel","$lt_maxLabel","updateLTSlider","ltmob_slider_instance","updateLoanTermA11y","ltmob_slider","$lt_minLabelMob","$lt_maxLabelMob","lt_slider_instance","mp_slider","$mp_minLabel","$mp_maxLabel","values","prettify_enabled","prettify","at","updateMPSlider","mpmob_slider","$mp_minLabelMob","$mp_maxLabelMob","dp_slider","$dp_minLabel","$dp_maxLabel","updateDPSlider","dpmob_slider","$dp_minLabelMob","$dp_maxLabelMob","ir_slider_a11y","siblings","irmob_slider_a11y","lt_slider_a11y","ltmob_slider_a11y","mp_slider_a11y","mpmob_slider_a11y","dp_slider_a11y","dpmob_slider_a11y","welcomeCtrl","state","startTime","welcome","search","location","href","otherLangUrl","origin","pathname","toggle","click","sup","this","unwatchSession","isLoadingSession","errorCtrl","deleteCurrentSession","error","code","title","msg","removeClass","addClass","attention","custom","desc","generic_msg","timeout","unlisten","goBack","maintenanceCtrl","maintenance","mtnc_on","module","config","$urlRouterProvider","$stateProvider","$httpProvider","$sceDelegateProvider","$ariaProvider","resourceUrlWhitelist","olb_domain","interceptors","otherwise","ariaHidden","ariaChecked","ariaReadonly","ariaDisabled","ariaRequired","ariaInvalid","ariaValue","tabindex","bindKeydown","bindRoleForClick","params","dynamic","templateUrl","controller","controllerAs","titleFr","$transitions","$q","ImageFactory","updateSnapIndexFromHash","stepNameToNo","isNumber","snapIndex","checkActive","currentTarget","className","eval","validateAllSteps","validatingAllSteps","r","steps","display","apTaxProvince","apTaxCountries","errorToScroll","parents","velocity","container","duration","easing","complete","el","trigger","cancelApplication","autohub_url","signOut","sessionStorage","setItem","sign_out_link","drawAddrName","drawAddrImages","loading","keepScrolling","sideMenuOpen","stepNoToName","pubDomain","pub_domain","olbDomain","snapscrollEnabled","mobileOperatingSystem","transition","onSuccess","to","deferred","defer","resolve","promise","titleParam","stepsMap","titleEN","newStep","oldStep","run","$location","$sce","$interval","userAgent","navigator","vendor","opera","MSStream","reload","getItem","removeItem","progressStepsDefault","progressSteps","progressMobSteps","date","currentYear","restoreAppState","mapKeys","v","k","getContent","app_error","Promise","reject","createSession","catch","ready","filter","trustAs","toLocaleString","style","currency","minimumFractionDigits","maximumFractionDigits","formatted","country","substring","area","front","end","boxRegex","boxRegex2","invalidRegex","string","dob","getUTCDate","getUTCMonth","month_list","start","direction","String","prototype","startsWith","searchString","regex","isValid","noDecimalCheck","undefined","getUrlParameter","sParam","sParameterName","sURLVariables","decodeURIComponent","gaEvent","submitSuccess","errorCode","serviceErr","errCode","submitError","tuError","blackbookError","descisionError","sessionError","tuEndresultSuccess","tuEndresultFreezeSuccess","gaEventPush","data-dig-id","vpvPageName","vpvUrl","pageView","vpvName","vpvURL","pageType","$transition","$to","service","$log","xhrCreations","xhrResolutions","isLoading","updateStatus","showLoader","request","requestError","rejection","responseError","getReadyPromise","google","maps","googleMapsInitialized","glConfig","locale","script","createElement","src","urlBase","body","appendChild","dataFactory","extend","updateCurrentSession","application","factory","$inject","custom_msg","_req_verf_token","headers","canvasWrapper","cw","clientWidth","ch","clientHeight","widthFactor","canvas","getElementById","relativeFontSize","x","y","nameLen","ctx","getContext","clearRect","font","fillStyle","textAlign","textBaseline","fillText","str","appContent","scroll_hint","cssClass","overflowing","removedSteps","obj","removedStepNameToNo","stepNo","wait","setClass","removeStep","stepToRemove","unshift","splice","readdStep","afterStep","stepToReadd","setActive","currentNum","hideOtherSteps","stepNameToShow","session","$injector","sessionFactory","model","reqDataString","session_id","sessionData","appCompleted","QFreeze","poboxError","fieldName","poboxErrorNum","poboxErrorName","directive","$parse","link","scope","clickOutside","ignore","ignoreIf","nakedEl","fn","handler","target","contains","addEventListener","removeEventListener","restrict","containerExpand","attrs","header","isContentVisible","slideDown","hide","show","slideUp","$eval","onExpand","mousedown","blur","toggleClass","ngModel","resizeLabels","maxH","labels","bind","GoogleInitializer","componentForm","street_number","route","locality","administrative_area_level_1","postal_code","mapping","require","$root","options","types","googlePlace","componentRestrictions","addressApplied","gPlace","places","Autocomplete","keyCode","$parent","apStreetNameFull","addListener","place","getPlace","geometry","latitude","lat","longitude","lng","address_components","formatted_address","placeId","place_id","$setViewValue","html","isFr","formatCurrency","$render","$commitViewValue","convertToEn","clean","convertToFr","$parsers","$formatters","modal","modalWindowQ","firstToFocus","firstToFocusMobile","modalClose","modalCloseMain","modalAll","closeDisabled","hasClass","modalTrigger","modalOpen","which","shiftKey","is","$compile","append","children","inputElement","prevAll","a11yString","classes","classList","offscreen","add","error_required","error_invalid","innerHTML","insertBefore","childNodes","setAttribute","removeAttribute","ngEnter","ngClick","$event","setFocus","assign","formatPhone","modelValue","mobsteps","mobcurrent","elem","mobposition","a11y","iden","setStyle","containerWidth","tooltipOffsetLeft","left","tooltipStyle","margin-left","max-width","expand","showTooltip"],"mappings":"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","file":"app.min.js","sourcesContent":["'use strict';\n\nangular\n .module('AutoPrequal', [\n 'snapscroll',\n 'ngAnimate',\n 'ui.router',\n 'ngAria',\n 'customHeaders'\n ])\n .config(['$urlRouterProvider', '$stateProvider', '$httpProvider', '$sceDelegateProvider', '$ariaProvider', function ($urlRouterProvider, $stateProvider, $httpProvider, $sceDelegateProvider, $ariaProvider) {\n $sceDelegateProvider.resourceUrlWhitelist([\n // Allow same origin resource loads.\n 'self',\n // Allow loading from our assets domain. Notice the difference between * and **.\n olb_domain + '**'\n ]);\n\n $httpProvider.interceptors.push('LoadingInterceptor', 'httpRequestInterceptor');\n\n $urlRouterProvider.otherwise('/main/welcome');\n\n $ariaProvider.config({\n ariaHidden: true,\n ariaChecked: false,\n ariaReadonly: false,\n ariaDisabled: true,\n ariaRequired: true,\n ariaInvalid: false,\n ariaValue: false,\n tabindex: false,\n bindKeydown: true,\n bindRoleForClick: false\n });\n\n $stateProvider\n .state('main', {\n url: '/main/:hash',\n params: { hash: { dynamic: true } },\n templateUrl: baseUrl + 'root/app/views/main.html',\n controller: 'mainCtrl',\n controllerAs: 'main',\n })\n .state('results', {\n url: '/results',\n templateUrl: baseUrl + 'root/app/views/results.html',\n controller: 'resultsCtrl',\n controllerAs: 'results',\n title: 'Results',\n titleFr: 'Résultat',\n })\n .state('error', {\n url: '/error',\n templateUrl: baseUrl + 'root/app/views/error.html',\n controller: 'errorCtrl',\n controllerAs: 'error',\n title: 'Error',\n titleFr: 'Erreur',\n })\n .state('maintenance', {\n url: '/maintenance',\n templateUrl: baseUrl + 'root/app/views/maintenance.html',\n controller: 'maintenanceCtrl',\n controllerAs: 'maintenance',\n title: 'Maintenance',\n titleFr: 'Maintenance'\n });\n\n }])\n .controller('AutoPrequalCtrl', ['$scope', '$rootScope', '$transitions', '$window', '$timeout', '$q', 'SessionFactory', 'ScrollFactory', 'DataFactory', 'ImageFactory', function ($scope, $rootScope, $transitions, $window, $timeout, $q, SessionFactory, ScrollFactory, DataFactory, ImageFactory) {\n $rootScope.loading = true;\n $rootScope.isLoaded = false;\n $rootScope.snapIndex = 0;\n $rootScope.termsAccepted = false;\n $rootScope.keepScrolling = false;\n\t\t$rootScope.tradeinHelp = false;\n\t\t$rootScope.sideMenuOpen = false;\n $rootScope.currentStep = ScrollFactory.stepNoToName($rootScope.snapIndex);\n $rootScope.pubDomain = pub_domain;\n $rootScope.baseUrl = baseUrl;\n $rootScope.olbDomain = olb_domain;\n\t\t$rootScope.validateAllSteps = validateAllSteps;\n $scope.steps = ScrollFactory.steps;\n $scope.checkActive = checkActive;\n $scope.snapscrollEnabled = $window.innerWidth > 680;\n $scope.nextStep = nextStep;\n\t\t$scope.cancelApplication = cancelApplication;\n\n function updateSnapIndexFromHash() {\n var index = parseInt(ScrollFactory.stepNameToNo($window.location.hash.slice(2)), 10);\n if (isNaN(index) || !angular.isNumber(index)) {\n return;\n }\n $rootScope.snapIndex = index;\n }\n\n function checkActive(event) {\n if (event.currentTarget.className.indexOf('active') === -1) {\n $('section').removeClass('active');\n $(event.currentTarget).addClass('active');\n }\n }\n\n function nextStep() {\n DataFactory.appData.applicant.appState[$rootScope.currentStep] = true;\n eval('$rootScope.' + $rootScope.currentStep + 'NextStep()');\n }\n\n function validateAllSteps() {\n $rootScope.validatingAllSteps = true;\n var goToStep = ScrollFactory.goToStep;\n var showStep = ScrollFactory.showStep;\n var setData = DataFactory.setData;\n ScrollFactory.goToStep = function () { };\n ScrollFactory.showStep = function () { };\n DataFactory.setData = function () { };\n var r = true;\n for (var i = 0; i < ScrollFactory.steps.length; i++) {\n if (ScrollFactory.steps[i].display) {\n if (typeof eval('$rootScope.' + ScrollFactory.steps[i].name + 'NextStep') === \"function\") {\n if (!eval('$rootScope.' + ScrollFactory.steps[i].name + 'NextStep()')) {\n r = false;\n }\n }\n }\n }\n //explicit case to check if no for both tax questions since that is not a form\n if (!DataFactory.appData.applicant.apTaxProvince && ((DataFactory.appData.applicant.apTaxCountries && DataFactory.appData.applicant.apTaxCountries.length === 0) || !DataFactory.appData.applicant.apTaxCountries))\n r = false;\n $timeout(function () {\n if (!r && $('.error:visible').first().length) {\n var errorToScroll = $('.error:visible').first();\n $rootScope.currentStep = errorToScroll.parents('ng-include').attr('name')\n $rootScope.scrolling = true;\n errorToScroll.parents('section').velocity(\"stop\", true).velocity(\"scroll\", {\n container: $('.container-right'),\n duration: 500,\n easing: \"easeOutQuad\",\n complete: function (el) {\n errorToScroll.focus();\n $(window).trigger('resize');\n $rootScope.scrolling = false;\n }\n });\n }\n })\n ScrollFactory.goToStep = goToStep;\n ScrollFactory.showStep = showStep;\n DataFactory.setData = setData;\n $rootScope.validatingAllSteps = false;\n return r;\n }\n\n function cancelApplication() {\n SessionFactory.deleteCurrentSession();\n window.location.href = DataFactory.appData.content.glContent.autohub_url;\n }\n\n function signOut() {\n //'signOutClickedApp' is used to reload the app if the user clicks back after signing out. See config for relavent code\n sessionStorage.setItem('signOutClickedApp', true);\n SessionFactory.deleteCurrentSession();\n window.location = olb_domain + $rootScope.glContent.sign_out_link;\n }\n $rootScope.signOut = signOut;\n\n //watchers\n $scope.$watch(function () {\n return ScrollFactory.steps;\n }, function (newValue, oldValue) {\n $scope.steps = ScrollFactory.steps;\n });\n\n //scroll section into view on url change\n\t\t$rootScope.$on('$locationChangeSuccess', function (e) {\n\t\t\tif ($(window).width() <= 768) {\n\t\t\t\tif ($rootScope.mobileOperatingSystem === \"iPhone\" || $rootScope.mobileOperatingSystem === \"iPad\") $('body').scrollTop(0);\n\t\t\t\telse $(window).scrollTop(0);\n\t\t\t}\n\t\t\tif ($('section.' + $rootScope.currentStep).find('h1').first()[0]) {\n\t\t\t\t$timeout(function () { $('section.' + $rootScope.currentStep).find('h1').first()[0].focus(); })\n }\n })\n\n //disable state changes from maintenance page\n $transitions.onStart({}, function (transition) {\n $('section.' + $rootScope.currentStep).removeClass('inactive')\n if (transition.from().name === \"maintenance\") {\n return false;\n }\n });\n\n $transitions.onSuccess({}, function (transition) {\n if (transition.from().name === \"review\" && transition.to().name === \"main\") {\n if (!$rootScope.scrolling && $(window).width() > 680) {\n $timeout(function () {\n $rootScope.scrolling = true;\n $('section.' + $rootScope.currentStep).velocity(\"stop\", true).velocity(\"scroll\", {\n container: $('.container-right'),\n duration: 50,\n complete: function (el) {\n $rootScope.scrolling = false;\n }\n });\n })\n }\n }\n })\n\n $transitions.onStart({}, function (transition) {\n var deferred = $q.defer();\n var unwatch = $rootScope.$watch('glContent', function () {\n if ($rootScope.glContent) {\n unwatch();\n deferred.resolve();\n }\n })\n return deferred.promise;\n })\n\n //set page title and cancel ga id\n $transitions.onStart({}, function (transition) {\n var titleParam = $rootScope.lang === 'fr' ? 'titleFr' : 'title';\n if (transition.to().name === 'main') {\n $rootScope.title = $rootScope.stepsMap[transition.params().hash][titleParam];\n $rootScope.titleEN = $rootScope.stepsMap[transition.params().hash]['title'];\n } else {\n $rootScope.title = transition.to()[titleParam];\n $rootScope.titleEN = transition.to()['title'];\n }\n })\n\n $rootScope.$watch('currentStep', function (newStep, oldStep) {\n\t\t\tif (newStep === 'applicantAddress') {\n $rootScope.drawAddrName();\n }\n })\n\n updateSnapIndexFromHash();\n\n //function to write name onto left side image \n $rootScope.drawAddrName = drawAddrName;\n\n function drawAddrName() {\n $timeout(function () {\n ImageFactory.drawAddrImages();\n });\n }\n }])\n .run(['$rootScope', '$state', '$q', '$http', '$location', '$window', '$sce', '$timeout', '$interval', 'LocalizationFactory', 'DataFactory', 'ErrorFactory', 'SessionFactory', 'ScrollFactory', '$filter', function ($rootScope, $state, $q, $http, $location, $window, $sce, $timeout, $interval, LocalizationFactory, DataFactory, ErrorFactory, SessionFactory, ScrollFactory, $filter) {\n $rootScope.loading = true;\n $rootScope.lang = incoming_lang || \"en\";\n\n //device\n function getMobileOperatingSystem() {\n var userAgent = navigator.userAgent || navigator.vendor || window.opera;\n if (/windows phone/i.test(userAgent)) {\n return \"Windows\";\n }\n if (/android/i.test(userAgent)) {\n return \"android\";\n }\n if (/iPhone|iPod/.test(userAgent) && !window.MSStream) {\n return \"iPhone\";\n }\n if (/iPad/.test(userAgent) && !window.MSStream) {\n return \"iPad\";\n }\n return \"unknown\";\n }\n $rootScope.mobileOperatingSystem = getMobileOperatingSystem();\n\n $rootScope.restart = function () {\n $rootScope.forcedLoader = true;\n SessionFactory.deleteCurrentSession();\n window.location.reload();\n }\n\n if (sessionStorage.getItem('signOutClickedApp')) {\n sessionStorage.removeItem('signOutClickedApp');\n $rootScope.restart();\n\t\t}\n\n\t\t$rootScope.progressStepsDefault = 16; //constant\n\n $rootScope.progressSteps = $rootScope.progressStepsDefault; //adjust this to adjust progress bar\n $rootScope.progressMobSteps = $rootScope.progressStepsDefault;\n\n var date = new Date();\n $rootScope.currentYear = date.getFullYear();\n $rootScope.restoreAppState = restoreAppState;\n $rootScope.stepsMap = _.mapKeys(ScrollFactory.steps, function (v, k) { return v.name });\n\n function restoreAppState() {\n $.each(DataFactory.appData.applicant.appState, function (index, value) {\n if (value) ScrollFactory.showStep(index)\n })\n $timeout(function () {\n ScrollFactory.goToStep(ScrollFactory.getLastStep())\n }, 100);\n }\n\n function initApp() {\n SessionFactory.getCurrentSession();\n LocalizationFactory.getContent($rootScope.lang).then(function (response) {\n DataFactory.appData.content = response;\n $rootScope.glContent = response.glContent;\n if (app_error) {\n $rootScope.isLoaded = true;\n ErrorFactory.errorPage(app_error, \"en\", \"Initialization failed\", \"Initialization failed\");\n return Promise.reject();\n }\n if (mtnc_on === \"true\") {\n $state.go(\"maintenance\");\n return Promise.reject();\n }\n if (SessionFactory.sessionId) {\n //retrieve current session\n $rootScope.isLoadingSession = true;\n return SessionFactory.retrieveCurrentSession(SessionFactory.sessionId);\n } else {\n //create new session\n SessionFactory.deleteCurrentSession();\n var data = {};\n return SessionFactory.createSession(data);\n }\n }, function (e) {\n $rootScope.isLoaded = true;\n ErrorFactory.errorPage(\"LS\", $rootScope.lang, \"Initialization error\", e);\n }).then(function (response) {\n $rootScope.isLoadingSession = false;\n $rootScope.restoreAppState();\n }, function (e) {\n //if (e.message !== \"app_error\") ErrorFactory.errorPage(\"SR\", $rootScope.lang, \"\");\n }).catch(function (e) {\n $rootScope.isLoaded = true;\n ErrorFactory.errorPage(\"GSU\", $rootScope.lang, \"Initialization error\", e);\n });\n }\n initApp();\n\n $(document).ready(function () {\n if (\"ontouchstart\" in window || \"ontouch\" in window) { $('body').addClass('touch'); }\n else { $('body').addClass('no-touch'); }\n });\n\n $(window).on('resize', function () {\n\n if ($rootScope.currentStep.indexOf('applicantAddress') > -1 && $rootScope.name) {\n $rootScope.drawAddrName();\n }\n\n if (!$rootScope.scrolling && $(window).width() > 680) {\n $rootScope.scrolling = true;\n $('section.' + $rootScope.currentStep).velocity(\"stop\", true).velocity(\"scroll\", {\n container: $('.container-right'),\n duration: 10,\n easing: \"easeOutQuad\",\n complete: function (el) {\n $rootScope.scrolling = false;\n }\n });\n }\n\n })\n\n }])\n .filter('trusted', ['$sce', function ($sce) {\n return function (value, type) {\n // Defaults to treating trusted text as `html`\n return $sce.trustAs(type || 'html', value);\n }\n }])\n .filter('currency', [\"$rootScope\", function ($rootScope) {\n return filter;\n\n function filter(input, lang) {\n if (!lang) lang = $rootScope.lang || 'en';\n if (input !== null && input !== undefined) {\n if (lang === 'fr') return Number(input).toLocaleString(\"fr-CA\", { style: \"currency\", currency: \"CAD\", minimumFractionDigits: 0, maximumFractionDigits: 0 }).replace(\"CA\", \"\");\n\t\t\t\telse return Number(input).toLocaleString(\"en-CA\", { style: \"currency\", currency: \"CAD\", minimumFractionDigits: 0, maximumFractionDigits: 0 }).replace(\"CA\", \"\");\n }\n }\n }])\n .filter('phoneno', [\"$rootScope\", function ($rootScope) {\n return function (input, lang) {\n if (input !== null && input !== undefined) {\n if (!lang) lang = $rootScope.lang || 'en';\n var formatted = \"\";\n input = input.replace(/[^\\/\\d]/g, '');\n if (input.length === 11) {\n var country = input.substring(0, 1);\n var area = input.substring(1, 4);\n var front = input.substring(4, 7);\n var end = input.substring(7, 11);\n if (lang == \"en\") {\n formatted = country + \"-\" + area + \"-\" + front + \"-\" + end;\n }\n else formatted = country + \" \" + area + \" \" + front + \"-\" + end;\n }\n else if (input.length === 10) {\n var area = input.substring(0, 3);\n var front = input.substring(3, 6);\n var end = input.substring(6, 10);\n if (lang == \"en\") {\n formatted = area + \"-\" + front + \"-\" + end;\n }\n else formatted = area + \" \" + front + \"-\" + end;\n }\n else formatted = input;\n return formatted;\n }\n }\n }])\n .filter('checkPOBox', function () {\n //return if it's a po box or not\n var boxRegex = /^.*\\s*box\\s+\\d+.*$/i;\n var boxRegex2 = /^.*\\s*p\\.?o\\.?\\s*box.*$/i;\n\n var invalidValues = [\n \"PO\\\\s+Box\", \"P\\\\s+O\\\\s+Box\", \"P\\\\.O\\\\.\\\\s+Box\", \"PO\\\\.\\\\s+Box\", \"P\\\\.O\\\\s+Box\", \"Post\\\\s+Office\\\\s+Box\", \"RPO\", \"General\\\\s+Delivery\", \"Gen\\\\s+Delivery\", \"GD\", \"STN\\\\s+Main\", \"Station\\\\s+Main\", \"STN\\\\s+DEL\\\\s+Centre\", //en\n \"Case\\\\s+Postale\", \"CP\", \"C\\\\.P\\\\.\", \"C\\\\.P\", \"CP\\\\.\", \"Poste\\\\s+Restante\" //fr\n ]\n var invalidRegex = new RegExp(['(.*?(\\\\b', invalidValues.join('\\\\b|\\\\b'), '\\\\b)[^$]*)$'].join(''), 'i');\n return function (input) {\n if (!input) return input;\n\n if (boxRegex.test(input) || boxRegex2.test(input)) {\n return true;\n }\n //additional validation for pjNum 02033\n if (invalidRegex.test(input)) {\n return true;\n }\n return false;\n }\n })\n .filter(\"postalCode\", function () {\n return function (string) {\n if (!string) return string;\n if (string.length < 6) return string;\n return string.substring(0, 3) + \"\\u00A0\" + string.substring(3);\n }\n })\n .filter(\"readableDOB\", ['DataFactory', function (DataFactory) {\n return function (dob) {\n if (!dob || !DataFactory || !DataFactory.appData || !DataFactory.appData.content) return dob;\n var pattern = /(\\d{4})-(\\d{2})-(\\d{2})/;\n dob = new Date(dob.replace(pattern, '$1-$2-$3'));\n var date = dob.getUTCDate();\n date = date < 10 ? '0' + date : date;\n var month = dob.getUTCMonth() + 1;\n month = month < 10 ? '0' + month : month;\n var year = dob.getUTCFullYear();\n return DataFactory.appData.content.month_list[month] + ' ' + date + ' ' + year;\n }\n }])\n .filter(\"range\", function () {\n return function (input, start, end) {\n if (!start || !end) return [];\n var direction;\n start = parseInt(start);\n end = parseInt(end);\n if (start === end) { return [start]; }\n direction = (start <= end) ? 1 : -1;\n while (start != end) {\n input.push(start);\n if (direction < 0 && start === end + 1) {\n input.push(end);\n }\n if (direction > 0 && start === end - 1) {\n input.push(end);\n }\n start += direction;\n }\n return input;\n }\n })\n .filter(\"checkPostalCode\", function () {\n if (!String.prototype.startsWith) {\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.indexOf(searchString, position) === position;\n };\n }\n //test pattern\n var regex = /^[A-Za-z]\\d[A-Za-z][ ]?\\d[A-Za-z]\\d$/;\n return function (postalCode, province) {\n var isValid = false;\n if (!province || !postalCode) return false;\n if (province) {\n\n switch (province) {\n case \"AB\":\n if (postalCode.toUpperCase().startsWith(\"T\")) isValid = true;\n break;\n case \"BC\":\n if (postalCode.toUpperCase().startsWith(\"V\")) isValid = true;\n break;\n case \"MB\":\n if (postalCode.toUpperCase().startsWith(\"R\")) isValid = true;\n break;\n case \"NB\":\n if (postalCode.toUpperCase().startsWith(\"E\")) isValid = true;\n break;\n case \"NL\":\n if (postalCode.toUpperCase().startsWith(\"A\")) isValid = true;\n break;\n case \"NS\":\n if (postalCode.toUpperCase().startsWith(\"B\")) isValid = true;\n break;\n case \"NT\":\n if (postalCode.toUpperCase().startsWith(\"X\")) isValid = true;\n break;\n case \"NU\":\n if (postalCode.toUpperCase().startsWith(\"X\")) isValid = true;\n break;\n case \"ON\":\n if (postalCode.toUpperCase().startsWith(\"K\") ||\n postalCode.toUpperCase().startsWith(\"L\") ||\n postalCode.toUpperCase().startsWith(\"M\") ||\n postalCode.toUpperCase().startsWith(\"N\") ||\n postalCode.toUpperCase().startsWith(\"P\")) isValid = true;\n break;\n case \"PE\":\n if (postalCode.toUpperCase().startsWith(\"C\")) isValid = true;\n break;\n case \"QC\":\n if (postalCode.toUpperCase().startsWith(\"G\") ||\n postalCode.toUpperCase().startsWith(\"H\") ||\n postalCode.toUpperCase().startsWith(\"J\")) isValid = true;\n break;\n case \"SK\":\n if (postalCode.toUpperCase().startsWith(\"S\")) isValid = true;\n break;\n case \"YT\":\n if (postalCode.toUpperCase().startsWith(\"Y\")) isValid = true;\n break;\n default:\n break;\n }\n }\n\n if (!postalCode.match(regex)) isValid = false;\n return isValid;\n }\n\t}).filter('currencyFormat', [\"$rootScope\", function ($rootScope) {\n\t\t//currency format to allow for dynamic decimal places\n\t\treturn function (input, lang, noDecimalCheck) {\n\t\t\t//noDecimalCheck only when the user is entering currency into an input box, we don't want to add trailing zeros etc when they're typing. this is set to false in currency-formatter directive\n\t\t\tif (!lang) lang = $rootScope.lang || 'en';\n\t\t\tif (input !== null && input !== \"\" && input !== undefined && !isNaN(input) && input !== \"NaN\") {\n\t\t\t\tif (lang === 'fr') {\n\t\t\t\t\t//if it's a decimal we need to ensure it has no more or no less than 2 precision points\n\t\t\t\t\tif (((String(input).indexOf(\".\") > -1 || String(input).indexOf(\",\") > -1)) && !noDecimalCheck) {\n\t\t\t\t\t\treturn Number(input).toLocaleString(\"fr-CA\", { style: \"currency\", currency: \"CAD\", minimumFractionDigits: 0, maximumFractionDigits: 0 });\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn Number(input).toLocaleString(\"fr-CA\", { style: \"currency\", currency: \"CAD\", minimumFractionDigits: 0, maximumFractionDigits: 0 });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (((String(input).indexOf(\".\") > -1 || String(input).indexOf(\",\") > -1)) && !noDecimalCheck) {\n\t\t\t\t\t\treturn Number(input).toLocaleString(\"en-CA\", { style: \"currency\", currency: \"CAD\", minimumFractionDigits: 0, maximumFractionDigits: 0 });\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn Number(input).toLocaleString(\"en-CA\", { style: \"currency\", currency: \"CAD\", minimumFractionDigits: 0, maximumFractionDigits: 0 });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}]);","angular\n\t.module('AutoPrequal')\n\t.controller('mainCtrl', mainCtrl);\n\nmainCtrl.$inject = ['$scope', '$rootScope', 'ScrollFactory', '$timeout', '$window'];\n\n/**\n * Due to the 1 page design, tab and alt-tab is not great for accessbility and the following troubles has been noted as follows\n * 1. If user returns to the first section (welcome), user has to tab through the entire app again to return the the last section git#364\n * Soln; A helper link has been added to the bottom of each section that allows user to skip last section. \n * Button is styled akin to the 'Skip to main content' button in the header. (they only show up when focused on)\n * 2. The user cannot easly access the header/footer of the app. They must alt-tab/tab through the entire app before they can reach these sections. git#365\n * Soln; Alt tab no longer lets the user return to the previous section. Instead it will jump directly to the header. Similarly, tabbing out of the header\n * will jump directly back to the current section the user is on. To let the user return to the previous section, a helper link has been added \n * to the top of each section that allows user to return to the previous section. Button is styled akin to the 'Skip to main content' button in the header.\n */\nfunction mainCtrl($scope, $rootScope, ScrollFactory, $timeout, $window) {\n\t$rootScope.isLoaded = true;\n\n\t$scope.focusTop = function () {\n\t\tif ($rootScope.progressCurrent) {\n\t\t\t$('#progressLabel').focus();\n\t\t} else {\n\t\t\t$('#skipToContent').focus();\n\t\t}\n\t}\n\n\t$scope.gotoCurrentSection = function () {\n\t\tif ($rootScope.currentStep != 'welcome') {\n\t\t\tvar position = $('section.' + $rootScope.currentStep).offset().top - 70;\n\t\t\t$('section.' + $rootScope.currentStep).find('h1').first()[0].focus();\n\t\t\t$('.container-right').scrollTop(position);\n\t\t}\n\t}\n\n\t$scope.gotoPrevSection = function (stepName) {\n\t\tScrollFactory.goToStep(ScrollFactory.getPrevStep(stepName));\n\t}\n\n\t$scope.getLastStep = ScrollFactory.getLastStep;\n\n\tvar container = $('.container-right');\n\tcontainer.on('scroll', _.debounce(function () {\n\t\tif ($window.innerWidth > 640) {\n\t\t\t$timeout.cancel(theTimeout)\n\t\t\tvar theTimeout = $timeout(function () {\n\t\t\t\t$('ng-include').each(function (i, raw) {\n\t\t\t\t\tif (isVisible(raw, false)) {\n\t\t\t\t\t\t$(raw).css(\"opacity\", 1);\n\t\t\t\t\t\tif ($rootScope.currentStep !== $(raw).attr('name') && !$rootScope.scrolling) {\n\t\t\t\t\t\t\t//debounce will cause this to sometimes fire after a state change, causing currentStep to incorrectly be the previous step. Need to check that currentStep isn't a state value first\n\t\t\t\t\t\t\tif ($rootScope.currentStep !== \"error\" && $rootScope.currentStep !== \"maintenance\")\n\t\t\t\t\t\t\t\t$rootScope.currentStep = $(raw).attr('name');\n\t\t\t\t\t\t\tScrollFactory.goToStep($(raw).attr('name'), 500)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t$(raw).css(\"opacity\", 0.2);\n\t\t\t\t\t}\n\n\t\t\t\t})\n\t\t\t}, 100)\n\n\t\t}\n\t}, 100, { 'leading': false, 'trailing': true }));\n\n\tfunction isVisible(element, fullyInView) {\n\t\tvar rect = element.getBoundingClientRect();\n\t\tvar headerHeight = $('header').height();\n\t\tvar pageTop = $(window).scrollTop() + headerHeight;\n\t\tvar pageBottom = pageTop + $('.container-right').height();\n\n\t\tvar containerHeight = $('.container-right').height();\n\t\tvar elementTop = $(element).offset().top;\n\t\tvar elementBottom = elementTop + $(element).height();\n\t\tif (fullyInView === true) {\n\t\t\treturn ((elementTop <= pageBottom) && (elementBottom >= pageTop));\n\t\t} else {\n\t\t\treturn ((elementTop <= pageBottom) && (elementBottom >= pageTop));\n\t\t}\n\t}\n}\n","angular\n .module('AutoPrequal')\n .controller('birthdayMonthCtrl', birthdayMonthCtrl);\n\nbirthdayMonthCtrl.$inject = ['$scope', '$rootScope', 'DataFactory', 'ScrollFactory'];\n\nfunction birthdayMonthCtrl($scope, $rootScope, DataFactory, ScrollFactory) {\n\n $rootScope.progressCurrent = 4;\n $rootScope.progressMobCurrent = 4;\n\n $scope.localContent = DataFactory.appData.content['birthday'];\n $scope.content = DataFactory.appData.content;\n $scope.data = DataFactory.appData.applicant;\n\n if (DataFactory.appData.applicant.apBirthDateMM) {\n $scope.selectedMonth = DataFactory.appData.applicant.apBirthDateMM;\n }\n else {\n $scope.selectedMonth = \"\";\n }\n DataFactory.appData.applicant.apBirthDateMM = $scope.selectedMonth;\n $rootScope.continueDisabled = $scope.selectedMonth === \"\" ? true : false;\n $scope.$watch(function () {\n return DataFactory.appData.applicant.apBirthDateMM\n }, function (newValue, oldValue) {\n if (newValue) {\n $scope.selectedMonth = newValue;\n }\n })\n $rootScope.$watch('currentStep', function (newVal) {\n if (newVal && newVal === \"birthdayMonth\" && $scope.selectedMonth) {\n $rootScope.continueDisabled = false;\n }\n })\n\n $scope.months = DataFactory.appData.content[\"month_list\"];\n $scope.monthsFull = DataFactory.appData.content[\"month_list_full\"];\n $scope.monthsArray = [];\n Object.keys($scope.months).map(function (key) {\n var value = $scope.months[key];\n $scope.monthsArray.push({ key: key, value: value });\n });\n\n $scope.nextStep = function (month) {\n DataFactory.appData.applicant.appState.birthdayMonth = true;\n if (month) {\n\t\t\t$scope.data.apBirthDateMM = month;\n\t\t\tDataFactory.setData($scope.data);\n }\n ScrollFactory.showStep(\"birthdayDay\");\n ScrollFactory.goToStep(\"birthdayDay\");\n }\n\n $rootScope.birthdayMonthNextStep = function () {\n\t\tif ($scope.selectedMonth) {\n\t\t\t$scope.data.apBirthDateMM = $scope.selectedMonth;\n\t\t\tDataFactory.setData($scope.data);\n }\n ScrollFactory.showStep(\"birthdayDay\");\n ScrollFactory.goToStep(\"birthdayDay\");\n return true;\n }\n\n $scope.prevStep = function () {\n ScrollFactory.showStep(\"applicantAddress\");\n ScrollFactory.goToStep(\"applicantAddress\");\n }\n\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('birthdayDayCtrl', birthdayDayCtrl);\n\nbirthdayDayCtrl.$inject = ['$scope', '$rootScope', 'DataFactory', 'ScrollFactory'];\n\nfunction birthdayDayCtrl($scope, $rootScope, DataFactory, ScrollFactory) {\n\n\t$rootScope.progressCurrent = 5;\n\t$rootScope.progressMobCurrent = 5;\n\t$scope.data = DataFactory.appData.applicant;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.birthday;\n\t$scope.goToStep = ScrollFactory.goToStep;\n\n\tif (DataFactory.appData.applicant.apBirthDateDD) {\n\t\t$scope.selectedDay = DataFactory.appData.applicant.apBirthDateDD;\n\t}\n\telse {\n\t\t$scope.selectedDay = \"\";\n\t}\n\n\tDataFactory.appData.applicant.apBirthDateDD = $scope.selectedDay;\n\t$rootScope.continueDisabled = $scope.selectedDay === \"\" ? true : false;\n\t$scope.$watch(function () {\n\t\treturn DataFactory.appData.applicant.apBirthDateDD\n\t}, function (newValue, oldValue) {\n\t\tif (newValue) {\n\t\t\t$scope.selectedDay = newValue;\n\t\t}\n\t});\n\n\t$rootScope.$watch('currentStep', function (newVal) {\n\t\tif (newVal && newVal === \"birthdayDay\" && $scope.selectedDay) {\n\t\t\t$rootScope.continueDisabled = false;\n\t\t}\n\t})\n\n\t$scope.birthMonth = $scope.content.month_list_full[DataFactory.appData.applicant.apBirthDateMM];\n\t$scope.$watch(function () {\n\t\treturn DataFactory.appData.applicant.apBirthDateMM;\n\t}, function (newValue, oldValue) {\n\t\tif (newValue) $scope.birthMonth = $scope.content.month_list_full[DataFactory.appData.applicant.apBirthDateMM];\n\t})\n\n\t$scope.$watch(function () {\n\t\treturn DataFactory.appData.applicant.apBirthDateMM\n\t}, function (newVal, oldVal) {\n\t\tif (newVal && newVal.match(\"01|03|05|07|08|10|12\")) {\n\t\t\t$scope.daysLength = 31;\n\t\t}\n\t\telse if (newVal.match(\"02\")) {\n\t\t\t$scope.daysLength = 29;\n\t\t}\n\t\telse $scope.daysLength = 30;\n\t})\n\n\n\t$scope.nextStep = function (day) {\n\t\tDataFactory.appData.applicant.appState.birthdayDay = true;\n\t\tif (day) {\n\t\t\t$scope.data.apBirthDateDD = day;\n\t\t\tDataFactory.setData($scope.data);\n\t\t}\n\t\tScrollFactory.showStep(\"birthdayYear\");\n\t\tScrollFactory.goToStep(\"birthdayYear\");\n\t}\n\n\t$rootScope.birthdayDayNextStep = function () {\n\t\tif ($scope.selectedDay) {\n\t\t\t$scope.data.apBirthDateDD = $scope.selectedDay;\n\t\t\tDataFactory.setData($scope.data);\n\t\t}\n\t\tScrollFactory.showStep(\"birthdayYear\");\n\t\tScrollFactory.goToStep(\"birthdayYear\");\n\t\treturn true;\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"birthdayMonth\");\n\t\tScrollFactory.goToStep(\"birthdayMonth\");\n\t}\n}\n","angular\n .module('AutoPrequal')\n .controller('birthdayYearCtrl', birthdayYearCtrl);\n\nbirthdayYearCtrl.$inject = ['$scope', '$rootScope', '$timeout', 'DataFactory', 'ScrollFactory'];\n\nfunction birthdayYearCtrl($scope, $rootScope, $timeout, DataFactory, ScrollFactory) {\n\n $rootScope.progressCurrent = 6;\n $rootScope.progressMobCurrent = 6;\n\n $scope.content = DataFactory.appData.content;\n $scope.localContent = DataFactory.appData.content.birthday;\n $scope.data = DataFactory.appData.applicant;\n $scope.goToStep = ScrollFactory.goToStep;\n\n $scope.birthMM = DataFactory.appData.applicant.apBirthDateMM;\n $scope.birthMonth = $scope.content.month_list_full[$scope.birthMM];\n $scope.birthDay = DataFactory.appData.applicant.apBirthDateDD;\n\n $scope.selectedYear = DataFactory.appData.applicant.apBirthDateYYYY || \"\";\n DataFactory.appData.applicant.apBirthDateYYYY = $scope.selectedYear;\n $rootScope.continueDisabled = $scope.selectedYear === \"\" ? true : false;\n\n $scope.$watch(function () {\n return DataFactory.appData.applicant.apBirthDateYYYY\n }, function (newValue, oldValue) {\n if (newValue) $scope.selectedYear = newValue;\n })\n\n $scope.$watch(function () {\n return DataFactory.appData.applicant.apBirthDateMM\n }, function (newVal) {\n if (newVal) {\n $scope.birthMM = newVal;\n\t\t\t$scope.birthMonth = $scope.content.month_list_full[newVal];\n $scope.data.apBirthDate = DataFactory.appData.applicant.apBirthDateYYYY + '-' + (\"00\" + DataFactory.appData.applicant.apBirthDateMM).slice(-2) + '-' + (\"00\" + DataFactory.appData.applicant.apBirthDateDD).slice(-2);\n\t\t\t$rootScope.age = calculateAge($scope.data.apBirthDate);\n\t\t}\n });\n\n $scope.$watch(function () {\n return DataFactory.appData.applicant.apBirthDateDD\n }, function (newVal) {\n if (newVal) {\n\t\t\t$scope.birthDay = newVal;\n $scope.data.apBirthDate = DataFactory.appData.applicant.apBirthDateYYYY + '-' + (\"00\" + DataFactory.appData.applicant.apBirthDateMM).slice(-2) + '-' + (\"00\" + DataFactory.appData.applicant.apBirthDateDD).slice(-2);\n\t\t\t$rootScope.age = calculateAge($scope.data.apBirthDate);\n\t\t}\n\t});\n\n\t$scope.$watch(function () {\n\t\treturn DataFactory.appData.applicant.apProvince\n\t}, function (newVal, oldVal) {\n\t\tif (newVal !== oldVal) checkAgeOfMajority();\n\t});\n\n\t$rootScope.$watch('age', function (newVal, oldVal) {\n\t\tif (newVal !== oldVal) checkAgeOfMajority();\n\t})\n\n $rootScope.$watch('currentStep', function (newVal) {\n\t\tif (newVal && newVal === \"birthdayYear\" && $scope.selectedYear) {\n\t\t\t$rootScope.continueDisabled = false;\n\t\t}\n })\n\n $scope.yearPrefix = [\"190\", \"191\", \"192\", \"193\", \"194\", \"195\", \"196\", \"197\", \"198\", \"199\", \"200\", \"201\"];\n\n\n //show decade by user selection\n if ($scope.selectedYear && $scope.selectedYear != \"\") {\n var dec = parseInt(($scope.selectedYear + \"\").charAt(2));\n if (dec == 0) $scope.currentDecadeIndex = 10;\n else $scope.currentDecadeIndex = dec;\n }\n else {\n $scope.currentDecadeIndex = 8;\n }\n\n $scope.nextStep = function (year) {\n\t\tif (year) $scope.data.apBirthDateYYYY = year;\n\t\t$scope.data.apBirthDate = $scope.data.apBirthDateYYYY + '-' + (\"00\" + DataFactory.appData.applicant.apBirthDateMM).slice(-2) + '-' + (\"00\" + DataFactory.appData.applicant.apBirthDateDD).slice(-2);\n\t\t$rootScope.age = calculateAge($scope.data.apBirthDate);\n\t\tif (checkAgeOfMajority()) {\n\t\t\tDataFactory.appData.applicant.appState.birthdayYear = true;\n\t\t\tDataFactory.setData($scope.data);\n\t\t\tScrollFactory.showStep(\"applicantIncome\");\n\t\t\tScrollFactory.goToStep(\"applicantIncome\");\n\t\t}\n }\n\n $rootScope.birthdayYearNextStep = function () {\n $scope.data.apBirthDateYYYY = $scope.selectedYear;\n\t\t$scope.data.apBirthDate = $scope.data.apBirthDateYYYY + '-' + (\"00\" + DataFactory.appData.applicant.apBirthDateMM).slice(-2) + '-' + (\"00\" + DataFactory.appData.applicant.apBirthDateDD).slice(-2);\n\t\t$rootScope.age = calculateAge($scope.data.apBirthDate);\n\t\tif (checkAgeOfMajority()) {\n\t\t\tDataFactory.setData($scope.data);\n\t\t\tScrollFactory.showStep(\"applicantIncome\");\n\t\t\tScrollFactory.goToStep(\"applicantIncome\");\n\t\t\treturn true;\n\t\t}\n }\n\n $scope.prevStep = function () {\n ScrollFactory.showStep(\"birthdayDay\");\n ScrollFactory.goToStep(\"birthdayDay\");\n }\n\n $scope.prevYearEnabled = function () {\n var minDecade = (new Date().getFullYear() - 100).toString().substr(2, 1);\n return $scope.currentDecadeIndex > minDecade;\n }\n\n $scope.prevYear = function () {\n if ($scope.prevYearEnabled()) {\n $scope.currentDecadeIndex--;\n }\n }\n\n\n $scope.nextYearEnabled = function () {\n var maxDecade = 10;\n\n var today = new Date();\n var maxDOBYear = today.getFullYear() - 18;\n var m = (today.getMonth() + 1) - $scope.birthMM;\n if ((parseInt($scope.yearPrefix[$scope.currentDecadeIndex + 1] + \"0\") >= maxDOBYear) && (m < 0 || (m === 0 && $scope.birthDay > today.getDate()))) {\n return false;\n }\n if ($scope.currentDecadeIndex < maxDecade) {\n return true;\n }\n }\n\n\n $scope.nextYear = function () {\n if ($scope.nextYearEnabled()) {\n $scope.currentDecadeIndex++;\n }\n }\n\n function calculateAge(birthday) {\n birthday = new Date(birthday);\n var ageDifMs = Date.now() - birthday.getTime();\n var ageDate = new Date(ageDifMs); // miliseconds from epoch\n return Math.abs(ageDate.getUTCFullYear() - 1970);\n }\n\n\n $scope.isYearVisible = function (year) {\n var today = new Date();\n var maxDOBYear = today.getFullYear() - 18;\n var minDOBYear = today.getFullYear() - 100;\n var year = parseInt(year);\n var m = (today.getMonth() + 1) - $scope.birthMM;\n\n\n if (((year > minDOBYear) || (year == minDOBYear && (m < 0 || (m === 0 && today.getDate() < $scope.birthDay)))) &&\n ((year < maxDOBYear) || (year == maxDOBYear && (m > 0 || (m === 0 && today.getDate() >= $scope.birthDay))))) {\n if ($scope.birthMM == \"02\" && $scope.birthDay == \"29\") {\n return leapYear(year);\n }\n else return true;\n\t\t}\n return false;\n }\n\n function leapYear(year) {\n year = parseInt(year);\n return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);\n\t}\n\n\tfunction checkAgeOfMajority() {\n\t\tvar p = $scope.data.apProvince;\n\t\tif ($scope.data.apBirthDate.length > 9 && $rootScope.age) {\n\t\t\tif (((p == \"BC\" || p == \"NB\" || p == \"NL\" || p == \"NS\" || p == \"NT\" || p == \"NU\" || p == \"YT\") && $rootScope.age < 19) || ((p == \"AB\" || p == \"MB\" || p == \"ON\" || p == \"PE\" || p == \"QC\" || p == \"SK\") && $rootScope.age < 18)) {\n\t\t\t\t$scope.majorityError = true;\n\t\t\t\t$timeout(function () {\n\t\t\t\t\t$scope.BirthdayYear.$setValidity('majority', false);\n\t\t\t\t});\n\t\t\t\t$rootScope.ga.errors.ageOfMajority();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$scope.majorityError = false;\n\t\t\t\t$timeout(function () {\n\t\t\t\t\t$scope.BirthdayYear.$setValidity('majority', true);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('applicantNameCtrl', applicantNameCtrl);\n\napplicantNameCtrl.$inject = ['$scope', '$rootScope', 'ScrollFactory', 'DataFactory', 'SessionFactory'];\n\nfunction applicantNameCtrl($scope, $rootScope, ScrollFactory, DataFactory, SessionFactory) {\n\n\t$rootScope.progressCurrent = 1;\n\t$rootScope.progressMobCurrent = 1;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.applicantName;\n\n\t$scope.data = DataFactory.appData.applicant;\n\t$scope.formatFirstName = formatFirstName;\n\t$scope.formatLastName = formatLastName;\n\n\t$rootScope.name = $scope.data.apFirstName;\n\t$rootScope.lastName = $scope.data.apLastName;\n\n\n\t$rootScope.applicantNameNextStep = function () {\n\t\tif ($scope.Name.$valid) {\n\t\t\tformatFirstName();\n\t\t\tformatLastName();\n\t\t\t$rootScope.name = $scope.data.apFirstName;\n\t\t\t$rootScope.lastName = $scope.data.apLastName;\n\n\t\t\t//wait until Session has successfully been created before continuing\n\t\t\tvar continueNextStep = function () {\n\t\t\t\tDataFactory.appData.applicant.appState.applicantName = true;\n\n\t\t\t\tDataFactory.setData($scope.data);\n\n\t\t\t\tScrollFactory.showStep(\"applicantContact\");\n\t\t\t\tScrollFactory.goToStep(\"applicantContact\");\n\t\t\t}\n\t\t\tif (SessionFactory.sessionId) {\n\t\t\t\tcontinueNextStep();\n\t\t\t} else {\n\t\t\t\t$rootScope.forcedLoader = true;\n\t\t\t\tvar unwatch = $scope.$watch(function () { return SessionFactory.sessionId }, function (sessionId) {\n\t\t\t\t\tif (sessionId) {\n\t\t\t\t\t\tunwatch();\n\t\t\t\t\t\t$rootScope.forcedLoader = false;\n\t\t\t\t\t\tcontinueNextStep();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\telse {\n\t\t\tangular.forEach($scope.Name.$error, function (field) {\n\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"welcome\");\n\t\tScrollFactory.goToStep(\"welcome\");\n\t}\n\n\tfunction formatFirstName() {\n\t\tif ($scope.Name.apFirstName.$valid) {\n\t\t\tvar name = $scope.data.apFirstName;\n\t\t\tvar nameRegex = new RegExp(/^([A-Za-z]{1}\\.?){2}$/);\n\t\t\tif (nameRegex.test(name)) name = name.toUpperCase();\n\t\t\telse {\n\t\t\t\tname = name.toLowerCase();\n\t\t\t\tname = name.charAt(0).toUpperCase() + name.slice(1);\n\t\t\t}\n\t\t\t$scope.data.apFirstName = name;\n\t\t}\n\t}\n\n\tfunction formatLastName() {\n\t\tif ($scope.Name.apLastName.$valid) {\n\t\t\tvar name = $scope.data.apLastName;\n\t\t\tvar nameRegex = new RegExp(/^([A-Za-z]{1}\\.?){2}$/);\n\t\t\tif (nameRegex.test(name)) name = name.toUpperCase();\n\t\t\telse {\n\t\t\t\tname = name.toLowerCase();\n\t\t\t\tname = name.charAt(0).toUpperCase() + name.slice(1);\n\t\t\t}\n\t\t\t$scope.data.apLastName = name;\n\t\t}\n\t}\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('applicantContactCtrl', applicantContactCtrl);\n\napplicantContactCtrl.$inject = ['$scope', '$rootScope', 'ScrollFactory', 'DataFactory'];\n\nfunction applicantContactCtrl($scope, $rootScope, ScrollFactory, DataFactory) {\n\n\t$rootScope.progressCurrent = 2;\n\t$rootScope.progressMobCurrent = 2;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.applicantContact;\n\n\t$scope.data = DataFactory.appData.applicant;\n\n\t$scope.$watch('data.apPhoneFormatted', function (newVal, oldVal) {\n\t\tif (newVal && newVal !== oldVal) {\n\t\t\t$scope.data.apPhone = newVal.replace(/-/g, \"\").replace(/ /g, \"\");\n\t\t}\n\t});\n\n\t$rootScope.applicantContactNextStep = function () {\n\t\tif ($scope.Contact.$valid) {\n\n\t\t\tDataFactory.appData.applicant.appState.applicantContact = true;\n\n\t\t\t$scope.data.apPhone = $scope.data.apPhoneFormatted.replace(/-/g, \"\").replace(/ /g, \"\");\n\n DataFactory.setData($scope.data);\n\n ScrollFactory.showStep(\"applicantAddress\");\n\t\t\tScrollFactory.goToStep(\"applicantAddress\");\n\t\t\treturn true;\n\t\t}\n\t\telse {\n\t\t\tangular.forEach($scope.Contact.$error, function (field) {\n\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"applicantName\");\n ScrollFactory.goToStep(\"applicantName\");\n\t}\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('reviewTermsCtrl', reviewTermsCtrl);\n\nreviewTermsCtrl.$inject = ['$http', '$scope', '$rootScope', '$timeout', 'ScrollFactory', 'DataFactory', 'SessionFactory', 'LocalizationFactory', 'ErrorFactory'];\n\nfunction reviewTermsCtrl($http, $scope, $rootScope, $timeout, ScrollFactory, DataFactory, SessionFactory, LocalizationFactory, ErrorFactory) {\n\n\t$rootScope.progressCurrent = 9;\n\t$rootScope.progressMobCurrent = 9;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.reviewTerms;\n\t$scope.forceFRTerms = false;\n\t$scope.showOOWModal = false;\n\t$scope.showNoMatchModal = false;\n\t$scope.firstOOWQuestion = true;\n\t$scope.temp = {\n\t\t'selectedOpt': \"\",\n\t\t'secondSelectedOpt': \"\"\n\t}\n\n\t$scope.data = DataFactory.appData.applicant;\n\n\t$scope.$watch('data', function (newData, oldData) {\n\t\tif ((newData.apFirstName !== oldData.apFirstName\n\t\t\t|| newData.apLastName !== oldData.apLastName\n\t\t\t|| newData.apPhone !== oldData.apPhone\n\t\t\t|| newData.apAddress !== oldData.apAddress\n\t\t\t|| newData.apBirthDate !== oldData.apBirthDate)\n\t\t\t&& newData.score) {\n\t\t\t$scope.termRead = false;\n\t\t\t$scope.data.termRead = false;\n\t\t\t$rootScope.termsAccepted = false;\n\t\t\t$scope.temp = {\n\t\t\t\t'selectedOpt': \"\",\n\t\t\t\t'secondSelectedOpt': \"\"\n\t\t\t}\n\t\t\t$scope.firstOOWQuestion = true;\n\t\t\t$scope.secondOOWQuestion = false;\n\t\t\t$scope.data.secondQuestion = false;\n\t\t\t$scope.data.attempts = 0;\n\t\t\t$scope.data.score = \"\";\n\t\t\t$scope.data.primaryConsentID = \"\";\n\t\t\tScrollFactory.lastVisibleStep(\"reviewTerms\");\n\t\t}\n\t}, true);\n\n\t$rootScope.reviewTermsNextStep = function () {\n\t\tDataFactory.appData.applicant.appState.reviewTerms = true;\n\n\t\t$scope.data.termRead = true;\n\n\t\t$rootScope.termsAccepted = true;\n\n\t\tif (!$scope.data.primaryConsentID || !$scope.data.score) {\n\n\t\t\tvar sid = SessionFactory.getCurrentSession();\n\n\t\t\tif (!sid) return;\n\n\t\t\tvar consentObj = JSON.stringify({\n\t\t\t\t'id': sid,\n\t\t\t\t'firstName': LocalizationFactory.mapFrChar($scope.data.apFirstName),\n\t\t\t\t'lastName': LocalizationFactory.mapFrChar($scope.data.apLastName),\n\t\t\t\t'streetAddress': LocalizationFactory.mapFrChar($scope.data.apAddress),\n\t\t\t\t'apt': $scope.data.apApt,\n\t\t\t\t'city': LocalizationFactory.mapFrChar($scope.data.apCity),\n\t\t\t\t'province': $scope.data.apProvince,\n\t\t\t\t'postalCode': $scope.data.apPostalCode.replace(/\\s/g, \"\").toUpperCase(),\n\t\t\t\t'DOB': $scope.data.apBirthDate,\n\t\t\t\t'emailAddress': $scope.data.apEmail,\n\t\t\t\t'phoneNumber': $scope.data.apPhone.replace(/-/g, \"\"),\n\t\t\t\t'applicantType': 'primary',\n\t\t\t\t'consentVersionNumber': '1.0'\n\t\t\t});\n\n\t\t\t$rootScope.forcedLoader = true;\n\t\t\t$http({\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: baseUrl + \"api/consent/post\",\n\t\t\t\tdata: consentObj\n\t\t\t}).then(function (response) {\n\t\t\t\tvar data;\n\t\t\t\ttry { data = JSON.parse(response.data); }\n\t\t\t\tcatch (e) { data = response.data };\n\t\t\t\tif (data['result_code'] === \"0\") {\n\t\t\t\t\t$scope.data.primaryConsentID = data[\"result_content\"];\n\t\t\t\t\tDataFactory.setData($scope.data).then(function () {\n\t\t\t\t\t\thandleOOW();\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$rootScope.forcedLoader = false;\n\t\t\t\t\tErrorFactory.errorPage(data['result_code'], $rootScope.lang, \"Consent Result code invalid\", data[\"result_content\"]);\n\t\t\t\t}\n\t\t\t}, function (httpError) {\n\t\t\t\t$rootScope.forcedLoader = false;\n\t\t\t\tif (httpError.status) {\n\t\t\t\t\tErrorFactory.errorPage(\"CSE-\" + httpError.status, \"en\", \"Consent failed with http status\", $rootScope.glContent.errors.generic_connection_error);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tErrorFactory.errorPage(\"CSU\", \"en\", \"Consent failed with unknown error\", $rootScope.glContent.errors.generic_connection_error);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t\telse if ($scope.data.primaryConsentID && $scope.data.score) {\n\t\t\tSessionFactory.retrieveCurrentSession(SessionFactory.sessionId).then(function () {\n\t\t\t\tDataFactory.setData($scope.data);\n\t\t\t\tScrollFactory.showStep(\"tradein\");\n\t\t\t\tScrollFactory.goToStep(\"tradein\");\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"applicantMortgage\");\n\t\tScrollFactory.goToStep(\"applicantMortgage\");\n\t}\n\n\t$scope.swapForFRTerms = function () {\n\t\t$scope.forceFRTerms = true;\n\t}\n\t$scope.swapForENTerms = function () {\n\t\t$scope.forceFRTerms = false;\n\t}\n\n\tfunction handleOOW() {\n\t\tvar initialOOWObj = JSON.stringify({\n\t\t\t'firstName': LocalizationFactory.mapFrChar($scope.data.apFirstName),\n\t\t\t'lastName': LocalizationFactory.mapFrChar($scope.data.apLastName),\n\t\t\t'street': $scope.data.apStreetNum + ' ' + LocalizationFactory.mapFrChar($scope.data.apStreetName),\n\t\t\t'city': LocalizationFactory.mapFrChar($scope.data.apCity),\n\t\t\t'prov': $scope.data.apProvince,\n\t\t\t'postalCode': $scope.data.apPostalCode.replace(/\\s/g, \"\").toUpperCase(),\n\t\t\t'DOB': $scope.data.apBirthDate,\n\t\t\t'phone': $scope.data.apPhone.replace(/-/g, \"\"),\n\t\t\t'language': $rootScope.lang\n\t\t});\n\t\t$http({\n\t\t\tmethod: 'POST',\n\t\t\turl: baseUrl + \"api/OOW/question\",\n\t\t\tdata: initialOOWObj\n\t\t}).then(function (response) {\n\t\t\tvar data;\n\t\t\ttry {\n\t\t\t\tdata = JSON.parse(response.data);\n\t\t\t} catch (e) {\n\t\t\t\tdata = response.data\n\t\t\t};\n\t\t\tvar OOWResponse = data['result_content'];\n\t\t\tif (data['result_code'] === \"0\") {\n\t\t\t\t$scope.ExamDetails = OOWResponse.ExamDetails;\n\t\t\t\t$scope.ApplicationId = OOWResponse.ApplicationId;\n\t\t\t\t$scope.QueueName = OOWResponse.CurrentQueue;\n\t\t\t\t$scope.question = OOWResponse.ExamDetails.QuestionsList.Question.Text;\n\t\t\t\t$scope.choices = [\n\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[0].Text,\n\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[1].Text,\n\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[2].Text,\n\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[3].Text,\n\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[4].Text\n\t\t\t\t];\n\t\t\t\t$scope.showOOWModal = true;\n\t\t\t\t$rootScope.gaPageView.oow();\n\t\t\t} else {\n\n\t\t\t\tvar splitCode = data['result_code'].split(\"-\");\n\t\t\t\tif (splitCode[0] == \"OOWQN99\") {\n\t\t\t\t\tif (splitCode[1] === \"01\") {\n\t\t\t\t\t\tif (!$scope.data.attempts) $scope.data.attempts = 0;\n\t\t\t\t\t\t$scope.data.attempts += 1;\n\t\t\t\t\t\tDataFactory.setData($scope.data);\n\t\t\t\t\t\tif (Number($scope.data.attempts) >= 2) {\n\t\t\t\t\t\t\t//auth error error-identity-not-found-2nd-attempt-fail\n\t\t\t\t\t\t\t//no edit\n\t\t\t\t\t\t\t$rootScope.ga.oowErrors.idNotFound();\n\t\t\t\t\t\t\tErrorFactory.errorPage(\"OOWQ2T\", $rootScope.lang, $rootScope.glContent.errors.attempt_err_msg, \"No match after 2 tries\", true);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//user error error-identity-not-found-1st-attempt-fail\n\t\t\t\t\t\t\t//editable\n\t\t\t\t\t\t\t$scope.showNoMatchModal = true;\n\t\t\t\t\t\t\t$rootScope.ga.oowErrors.idNotFound2();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (splitCode[1] === \"02\") {\n\t\t\t\t\t\t\t//auth error error-identity-TU-thinfile\n\t\t\t\t\t\t\tErrorFactory.errorPage(\"OOWQTF\", $rootScope.lang, $rootScope.glContent.errors.auth_err_msg, data['result_content'], true);\n\t\t\t\t\t\t} else if (splitCode[1] === \"03\") {\n\t\t\t\t\t\t\t//repeat error error-identity-repeat-attempt\n\t\t\t\t\t\t\t$rootScope.ga.oowErrors.idNotFound();\n\t\t\t\t\t\t\tErrorFactory.errorPage(\"OOWQRA\", $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//server error error-identity-TU-serverfail\n\t\t\t\t\t\t\t$rootScope.ga.oowErrors.tuServerfail();\n\t\t\t\t\t\t\tErrorFactory.errorPage(\"OOWQTU-\" + data['result_code'], $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//server error error-identity-TU-serverfail\n\t\t\t\t\t$rootScope.ga.oowErrors.tuServerfail();\n\t\t\t\t\tErrorFactory.errorPage(\"OOWQTU-\" + data['result_code'], $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$rootScope.forcedLoader = false;\n\t\t}, function (httpError) {\n\t\t\t$rootScope.forcedLoader = false;\n\t\t\tif (httpError.status) {\n\t\t\t\tErrorFactory.errorPage(\"OOWQE-\" + httpError.status, \"en\", $rootScope.glContent.errors.generic_connection_error, \"Question Retrieve failed with http status\");\n\t\t\t} else {\n\t\t\t\tErrorFactory.errorPage(\"OOWQU\", \"en\", $rootScope.glContent.errors.generic_connection_error, \"Question failed with unknown error\");\n\t\t\t}\n\t\t});\n\t}\n\t$scope.tryAgain = function tryAgain() {\n\t\t$scope.showNoMatchModal = false;\n\t\t$scope.termRead = false;\n\t\t$scope.data.termRead = false;\n\t\t$scope.data.primaryConsentID = '';\n\t\t$rootScope.termsAccepted = false;\n\t\t$scope.temp = {\n\t\t\t'selectedOpt': \"\",\n\t\t\t'secondSelectedOpt': \"\"\n\t\t}\n\t\tScrollFactory.goToStep('applicantName');\n\t}\n\t$scope.OOWAnswer = function OOWAnswer(answer) {\n\t\t$scope.ExamDetails.QuestionsList.Question.Answer[Number(answer)].IsSelected = \"true\";\n\t\tvar firstOOWObj = JSON.stringify({\n\t\t\t'SessionId': SessionFactory.sessionId,\n\t\t\t'ApplicationId': $scope.ApplicationId,\n\t\t\t'ExamDetails': $scope.ExamDetails,\n\t\t\t'QueueName': $scope.QueueName\n\t\t});\n\t\t$http({\n\t\t\tmethod: 'POST',\n\t\t\turl: baseUrl + \"api/OOW/answer\",\n\t\t\tdata: firstOOWObj\n\t\t}).then(function (response) {\n\t\t\tvar data;\n\t\t\ttry {\n\t\t\t\tdata = JSON.parse(response.data);\n\t\t\t} catch (e) {\n\t\t\t\tdata = response.data\n\t\t\t};\n\t\t\tvar OOWResponse = data['result_content'];\n\t\t\tif (data['result_code'] === \"0\") {\n\t\t\t\tvar decision = OOWResponse['Decision'] ? OOWResponse['Decision'].toLowerCase() : \"\";\n\t\t\t\tvar qfreeze = OOWResponse['QFreeze'];\n\n\n\t\t\t\tif (decision == 'fail') {\n\t\t\t\t\tif ($scope.data.secondQuestion) {\n\t\t\t\t\t\t//game over\n\t\t\t\t\t\tErrorFactory.errorPage(\"A2T\", $rootScope.lang, $rootScope.glContent.errors.too_many_tries, \"Second OOW Answer Wrong\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (!OOWResponse['Decision'] && OOWResponse['ExamDetails']) {\n\t\t\t\t\t$scope.ExamDetails = OOWResponse.ExamDetails;\n\t\t\t\t\t$scope.ApplicationId = OOWResponse.ApplicationId;\n\t\t\t\t\t$scope.QueueName = OOWResponse.CurrentQueue;\n\t\t\t\t\t$scope.second_question = OOWResponse.ExamDetails.QuestionsList.Question.Text;\n\t\t\t\t\t$scope.second_choices = [\n\t\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[0].Text,\n\t\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[1].Text,\n\t\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[2].Text,\n\t\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[3].Text,\n\t\t\t\t\t\tOOWResponse.ExamDetails.QuestionsList.Question.Answer[4].Text\n\t\t\t\t\t];\n\t\t\t\t\t$scope.firstOOWQuestion = false;\n\t\t\t\t\t$scope.secondOOWQuestion = true;\n\t\t\t\t\t$scope.data.secondQuestion = true;\n\t\t\t\t\tDataFactory.setData($scope.data);\n\t\t\t\t}\n\t\t\t\telse if (decision == 'pass') {\n\t\t\t\t\t//winner\n\t\t\t\t\t$scope.data.score = OOWResponse['Decision'];\n\t\t\t\t\t$scope.showOOWModal = false;\n\t\t\t\t\t$rootScope.reviewTermsNextStep();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar splitCode = data['result_code'].split(\"-\");\n\t\t\t\tif (splitCode[0] == \"OOWQN99\") {\n\t\t\t\t\tif (splitCode[1] === \"02\") {\n\t\t\t\t\t\t//auth error error-identity-TU-thinfile\n\t\t\t\t\t\tErrorFactory.errorPage(\"OOWATF\", $rootScope.lang, $rootScope.glContent.errors.auth_err_msg, data['result_content'], true);\n\t\t\t\t\t} else if (splitCode[1] === \"03\") {\n\t\t\t\t\t\t//repeat error error-identity-repeat-attempt\n\t\t\t\t\t\t$rootScope.ga.oowErrors.idNotFound();\n\t\t\t\t\t\tErrorFactory.errorPage(\"OOWARA\", $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t//server error error-identity-TU-serverfail\n\t\t\t\t\t\t$rootScope.ga.oowErrors.tuServerfail();\n\t\t\t\t\t\tErrorFactory.errorPage(\"OOWATU-\" + data['result_code'], $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t\t}\n\t\t\t\t} else if (splitCode[0] == \"OOWAN119\") {\n\n\t\t\t\t\t$rootScope.gaCustEvent.oowQFreezeFailure();// qfreeze\n\t\t\t\t\tErrorFactory.errorPage(\"OOWATU-\" + data['result_code'], $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t//server error error-identity-TU-serverfail\n\t\t\t\t\t$rootScope.ga.oowErrors.tuServerfail();\n\t\t\t\t\tErrorFactory.errorPage(\"OOWATU-\" + data['result_code'], $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t}\n\t\t\t}\n\t\t}, function (httpError) {\n\t\t\tif (httpError.status) {\n\t\t\t\tErrorFactory.errorPage(\"OOWAE-\" + httpError.status, \"en\", $rootScope.glContent.errors.generic_connection_error, \"First answer failed with http status\");\n\t\t\t} else {\n\t\t\t\tErrorFactory.errorPage(\"OOWAU\", \"en\", $rootScope.glContent.errors.generic_connection_error, \"First answer failed with unknown error\");\n\t\t\t}\n\t\t});\n\t}\n\t$scope.OOWSecondAnswer = function OOWSecondAnswer(answer) {\n\t\t$scope.ExamDetails.QuestionsList.Question.Answer[Number(answer)].IsSelected = \"true\";\n\t\tvar secondOOWObj = JSON.stringify({\n\t\t\t'SessionId': SessionFactory.sessionId,\n\t\t\t'ApplicationId': $scope.ApplicationId,\n\t\t\t'ExamDetails': $scope.ExamDetails,\n\t\t\t'QueueName': $scope.QueueName\n\t\t});\n\t\t$http({\n\t\t\tmethod: 'POST',\n\t\t\turl: baseUrl + \"api/OOW/answer\",\n\t\t\tdata: secondOOWObj\n\t\t}).then(function (response) {\n\t\t\tvar data;\n\t\t\ttry {\n\t\t\t\tdata = JSON.parse(response.data);\n\t\t\t} catch (e) {\n\t\t\t\tdata = response.data;\n\t\t\t};\n\n\t\t\tif (data['result_code'] === \"0\") {\n\t\t\t\tvar decision = data.result_content.Decision ? data.result_content.Decision.toLowerCase() : \"\";\n\t\t\t\tif (decision == 'fail') {\n\t\t\t\t\t//game over\n\t\t\t\t\tErrorFactory.errorPage(\"A2T\", $rootScope.lang, $rootScope.glContent.errors.too_many_tries, \"Second OOW Answer Wrong\", true);\n\t\t\t\t} else if (decision == 'pass') {\n\t\t\t\t\t//winner\n\t\t\t\t\t$scope.data.score = decision;\n\t\t\t\t\t$scope.showOOWModal = false;\n\t\t\t\t\t$rootScope.reviewTermsNextStep();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar splitCode = data['result_code'].split(\"-\");\n\t\t\t\tif (splitCode[0] == \"OOWQN99\") {\n\t\t\t\t\tif (splitCode[1] === \"02\") {\n\t\t\t\t\t\t//auth error error-identity-TU-thinfile\n\t\t\t\t\t\tErrorFactory.errorPage(\"OOWATF2\", $rootScope.lang, $rootScope.glContent.errors.auth_err_msg, data['result_content'], true);\n\t\t\t\t\t} else if (splitCode[1] === \"03\") {\n\t\t\t\t\t\t//repeat error error-identity-repeat-attempt\n\t\t\t\t\t\t$rootScope.ga.oowErrors.idNotFound();\n\t\t\t\t\t\tErrorFactory.errorPage(\"OOWARA2\", $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//server error error-identity-TU-\n\t\t\t\t\t\t$rootScope.ga.oowErrors.tuServerfail();\n\t\t\t\t\t\tErrorFactory.errorPage(\"OOWATU2-\" + data['result_code'], $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//server error error-identity-TU-serverfail\n\t\t\t\t\t$rootScope.ga.oowErrors.tuServerfail();\n\t\t\t\t\tErrorFactory.errorPage(\"OOWATU2-\" + data['result_code'], $rootScope.lang, $rootScope.glContent.errors.int_err_msg, data['result_content'], true);\n\t\t\t\t}\n\t\t\t}\n\t\t}, function (httpError) {\n\t\t\tif (httpError.status) {\n\t\t\t\tErrorFactory.errorPage(\"OOWAE2-\" + httpError.status, \"en\", $rootScope.glContent.errors.generic_connection_error, \"Second answer failed with http status\");\n\t\t\t} else {\n\t\t\t\tErrorFactory.errorPage(\"OOWAU2\", \"en\", $rootScope.glContent.errors.generic_connection_error, \"Second answer failed with unknown error\");\n\t\t\t}\n\t\t});\n\t}\n}\n","angular\n .module('AutoPrequal')\n .controller('applicantAddressCtrl', applicantAddressCtrl);\n\napplicantAddressCtrl.$inject = ['$scope', '$rootScope', 'ScrollFactory', 'DataFactory', '$timeout', '$filter'];\n\nfunction applicantAddressCtrl($scope, $rootScope, ScrollFactory, DataFactory, $timeout, $filter) {\n\n\t$rootScope.progressCurrent = 3;\n\t$rootScope.progressMobCurrent = 3;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.address;\n\t$scope.POBox = false;\n\n\t$scope.data = DataFactory.appData.applicant;\n\n\tif ($scope.data.POBox === \"Yes\") {\n\t\t$scope.POBox = true;\n\t}\n\n\t$scope.$watch('addressModalForm', function (form) {\n\t\tif (form && DataFactory.appData.applicant.apStreetName) addressModalDone();\n\t});\n\n\t$scope.addressType = \"residential\";\n\t$scope.showAddressModal = false;\n\t$scope.addressModalFocus = false;\n\t$scope.submittedModal = false;\n\t$scope.addressModalDone = addressModalDone;\n\t$scope.checkPOBox = checkPOBox;\n\t$scope.checkProvince = checkProvince;\n\t$scope.openAddressModal = openAddressModal;\n\n\t$timeout(function () {\n\t\tjQuery(\"#btnAddressManual .offscreen\").remove();\n\t}, 1000);\n\t\n if ($(window).width() <= 768) {\n $scope.addressPlaceholder = \"\";\n } else {\n $scope.addressPlaceholder = $scope.localContent.address_placeholder;\n }\n $(window).on('resize', function () {\n if ($(window).width() <= 768) {\n $scope.addressPlaceholder = \"\";\n $scope.$apply();\n } else {\n $scope.addressPlaceholder = $scope.localContent.address_placeholder;\n $scope.$apply();\n }\n })\n\n $scope.provinceArray = Object.keys($scope.content.province).map(function (key) {\n return { key: key, value: $scope.content.province[key] };\n })\n\n\tfunction openAddressModal() {\n\t\t$scope.showAddressModal = true;\n\t\t$scope.addressModalFocus = true;\n\t}\n\n function addressModalDone(refocus) {\n $scope.submittedModal = true;\n if ($scope.addressModalForm.$valid) {\n $scope.showAddressModal = false;\n if ($scope.data.apStreetNum) {\n $scope.apAddress = $scope.data.apStreetNum + \" \" +\n $scope.data.apStreetName + \", \" +\n $scope.data.apCity + \", \" +\n $scope.data.apProvince + \", Canada\";\n $scope.data.apAddress = $scope.apAddress;\n } else {\n $scope.apAddress = $scope.data.apStreetName + \", \" + $scope.data.apCity + \", \" + $scope.data.apProvince + \", Canada\";\n $scope.data.apAddress = $scope.apAddress;\n }\n } else if (refocus) {\n $timeout(function () {\n var list = $('form[name=\"addressModalForm\"] .error:visible');\n list[0].focus();\n })\n }\n }\n\n function checkPOBox(value) {\n $scope.POBox = $filter(\"checkPOBox\")(value);\n if ($scope.POBox) {\n $scope.data.apStreetName = value;\n }\n }\n\n function checkProvince() {\n var value = $scope.data.apPostalCode;\n var province = $scope.addressModalForm.apProvince.$viewValue;\n var field = $scope.addressModalForm.apPostalCode;\n\n var isValid = $filter(\"checkPostalCode\")(value, province);\n\n isValid ? field.$setValidity('', true) : field.$setValidity('', false);\n }\n\n $rootScope.applicantAddressNextStep = function () {\n if ($scope.Address.$valid && $scope.addressModalForm.$valid) {\n\n if ($scope.data.apStreetNum) {\n $scope.apAddress = $scope.data.apStreetNum + \" \" +\n $scope.data.apStreetName + \", \" +\n $scope.data.apCity + \", \" +\n $scope.data.apProvince + \", Canada\";\n $scope.data.apAddress = $scope.apAddress;\n }\n else {\n $scope.apAddress = $scope.data.apStreetName + \", \" + $scope.data.apCity + \", \" + $scope.data.apProvince + \", Canada\";\n $scope.data.apAddress = $scope.apAddress;\n }\n\n $scope.data.apPostalCode = $scope.data.apPostalCode.toUpperCase().replace(/ /g, \"\");\n\n $scope.data.POBox = $scope.POBox ? \"Yes\" : \"No\";\n\n DataFactory.setData($scope.data);\n\n DataFactory.appData.applicant.appState.applicantAddress = true;\n\n ScrollFactory.showStep(\"birthdayMonth\");\n\t\t\tScrollFactory.goToStep(\"birthdayMonth\");\n return true;\n }\n else {\n if (!$scope.addressModalForm.$valid)\n $scope.showAddressModal = true;\n\t\t\t\t$scope.submittedModal = true;\n\t\t\t\tangular.forEach($scope.Address.$error, function (field) {\n\t\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t\tangular.forEach($scope.addressModalForm.$error, function (field) {\n\t\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t\t})\n\t\t\t\t});\n }\n }\n\n $scope.prevStep = function () {\n ScrollFactory.showStep(\"applicantContact\");\n\t\tScrollFactory.goToStep(\"applicantContact\");\n }\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('applicantIncomeCtrl', applicantIncomeCtrl);\n\napplicantIncomeCtrl.$inject = ['$scope', '$rootScope', 'ScrollFactory', 'DataFactory'];\n\nfunction applicantIncomeCtrl($scope, $rootScope, ScrollFactory, DataFactory) {\n\n\t$rootScope.progressCurrent = 7;\n\t$rootScope.progressMobCurrent = 7;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.applicantIncome;\n\n\t$scope.data = DataFactory.appData.applicant;\n\t$scope.checkIncome = checkIncome;\n\t$scope.minimumIncome = false;\n\n\t$rootScope.applicantIncomeNextStep = function () {\n\t\tif ($scope.Income.$valid) {\n\n\t\t\tif ($scope.data.apIncome < 10000) {\n\t\t\t\t$scope.minimumIncome = true;\n\t\t\t\t$scope.Income.$setValidity('minimum', false);\n\t\t\t\t$rootScope.ga.errors.annualIncome();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$scope.minimumIncome = false;\n\t\t\t\t$scope.Income.$setValidity('minimum', true);\n\t\t\t\tDataFactory.appData.applicant.appState.applicantIncome = true;\n\t\t\t\tDataFactory.setData($scope.data);\n\t\t\t\tScrollFactory.showStep(\"applicantMortgage\");\n\t\t\t\tScrollFactory.goToStep(\"applicantMortgage\");\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tangular.forEach($scope.Income.$error, function (field) {\n\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"birthdayYear\");\n\t\tScrollFactory.goToStep(\"birthdayYear\");\n\t}\n\n\tfunction checkIncome() {\n\t\tif ($scope.data.apIncome >= 10000) {\n\t\t\t$scope.minimumIncome = false;\n\t\t\t$scope.Income.$setValidity('minimum', true);\n\t\t}\n\t}\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('applicantMortgageCtrl', applicantMortgageCtrl);\n\napplicantMortgageCtrl.$inject = ['$scope', '$rootScope', 'ScrollFactory', 'DataFactory'];\n\nfunction applicantMortgageCtrl($scope, $rootScope, ScrollFactory, DataFactory) {\n\n\t$rootScope.progressCurrent = 8;\n\t$rootScope.progressMobCurrent = 8;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.applicantMortgage;\n\n\t$scope.data = DataFactory.appData.applicant;\n\n\t$rootScope.applicantMortgageNextStep = function () {\n\t\tif ($scope.Mortgage.$valid) {\n\n\t\t\tDataFactory.appData.applicant.appState.applicantMortgage = true;\n\n\t\t\tDataFactory.setData($scope.data);\n\n\t\t\tScrollFactory.showStep(\"reviewTerms\");\n\t\t\tScrollFactory.goToStep(\"reviewTerms\");\n\t\t\treturn true;\n\t\t}\n\t\telse {\n\t\t\tangular.forEach($scope.Mortgage.$error, function (field) {\n\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"applicantIncome\");\n\t\tScrollFactory.goToStep(\"applicantIncome\");\n\t}\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('downPaymentCtrl', downPaymentCtrl);\n\ndownPaymentCtrl.$inject = ['$scope', '$rootScope', '$state', 'ScrollFactory', 'SubmitFactory', 'DataFactory'];\n\nfunction downPaymentCtrl($scope, $rootScope, $state, ScrollFactory, SubmitFactory, DataFactory) {\n\n\t$rootScope.progressCurrent = 15;\n\t$rootScope.progressMobCurrent = 15;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.downPayment;\n\n\t$scope.data = DataFactory.appData.applicant;\n\n\t$rootScope.downPaymentNextStep = function () {\n\t\tif ($scope.DownPayment.$valid) {\n\n\t\t\tattachGAClientId();\n\n\t\t\tDataFactory.appData.applicant.appState.downPayment = true;\n\n\t\t\t$scope.data.apDownPayment = $scope.data.apDownPayment ? $scope.data.apDownPayment : 0;\n\n\t\t\tDataFactory.setData($scope.data).then(function (result) {\n\t\t\t\tSubmitFactory.submit($scope.data.sessionId).then(function (response) {\n\t\t\t\t\tDataFactory.appData.submit = response.result_content;\n\t\t\t\t\tif ($scope.data.profileUpdated) {\n\t\t\t\t\t\tDataFactory.appData.submit.profileUpdated = true;\n\t\t\t\t\t}\n\t\t\t\t\t$state.go('results');\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tangular.forEach($scope.DownPayment.$error, function (field) {\n\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tif ($scope.data.hasTradein === \"Yes\") {\n\t\t\tScrollFactory.showStep(\"tradeinPayments\");\n\t\t\tScrollFactory.goToStep(\"tradeinPayments\");\n\t\t}\n\t\telse {\n\t\t\tScrollFactory.showStep(\"tradein\");\n\t\t\tScrollFactory.goToStep(\"tradein\");\n\t\t}\n\t}\n\n\tfunction attachGAClientId() {\n var gaClientId = '';\n if (typeof ga !== \"undefined\" && ga && ga.getAll) {\n var trackers = ga.getAll();\n for (var i = 0; i < trackers.length; i++) {\n var tracker = trackers[i];\n gaClientId = tracker.get('clientId');\n }\n } else if (env == 'DEV') {\n gaClientId = '123.123';\n }\n $scope.data.gaClientId = gaClientId;\n }\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('tradeinCtrl', tradeinCtrl);\n\ntradeinCtrl.$inject = ['$scope', '$rootScope', '$timeout', 'ScrollFactory', 'DataFactory'];\n\nfunction tradeinCtrl($scope, $rootScope, $timeout, ScrollFactory, DataFactory) {\n\n\t$rootScope.progressCurrent = 10;\n\t$rootScope.progressMobCurrent = 10;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.tradein;\n\n\t$scope.data = DataFactory.appData.applicant;\n\n\t$scope.nextStep = function (value) {\n\t\tif (!value) value = $scope.yesSelected ? \"Y\" : \"N\";\n\t\tDataFactory.appData.applicant.appState.tradein = true;\n\n\t\tif (value === \"Y\") {\n\t\t\t$scope.data.hasTradein = \"Yes\";\n\t\t\tDataFactory.setData($scope.data);\n\t\t\t$scope.yesSelected = true;\n\t\t\t$scope.noSelected = false;\n\t\t\tScrollFactory.hideStep(\"downPayment\");\n\t\t\tScrollFactory.showStep(\"tradeinHelp\");\n\t\t\tScrollFactory.goToStep(\"tradeinHelp\");\n\t\t}\n\t\telse {\n\t\t\tremoveTradeinData();\n\t\t\t$scope.data.hasTradein = \"No\";\n\t\t\tDataFactory.setData($scope.data);\n\t\t\t$scope.yesSelected = false;\n\t\t\t$scope.noSelected = true;\n\t\t\tScrollFactory.hideStep(\"tradeinHelp\");\n\t\t\tScrollFactory.hideStep(\"tradeinDetails\");\n\t\t\tScrollFactory.hideStep(\"tradeinEstimate\");\n\t\t\tScrollFactory.hideStep(\"tradeinPayments\");\n\t\t\t$timeout(function () {\n\t\t\t\tScrollFactory.showStep(\"downPayment\");\n\t\t\t\tScrollFactory.goToStep(\"downPayment\");\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"reviewTerms\");\n\t\tScrollFactory.goToStep(\"reviewTerms\");\n\t}\n\n\tfunction removeTradeinData() {\n\t\t$scope.data.apTradeinValue = \"\";\n\t\t$scope.data.apBalance = \"\";\n\t\t$scope.data.apMakingPayments = \"\";\n\t\t$scope.data.apTradeinDetails = \"\";\n\t\t$scope.data.apTradeinKms = \"\";\n\t\t$scope.data.tradein_avg = \"\";\n\t\t$scope.data.tradein_clean = \"\";\n\t\t$scope.data.tradein_rough = \"\";\n\t\t$scope.data.uvc = \"\";\n\t}\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('tradeinDetailsCtrl', tradeinDetailsCtrl);\n\ntradeinDetailsCtrl.$inject = ['$scope', '$rootScope', 'ScrollFactory', 'DataFactory', 'VehicleFactory'];\n\nfunction tradeinDetailsCtrl($scope, $rootScope, ScrollFactory, DataFactory, VehicleFactory) {\n\n\t$rootScope.progressCurrent = 12;\n\t$rootScope.progressMobCurrent = 12;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.tradeinDetails;\n\n\t$scope.data = DataFactory.appData.applicant;\n\t$scope.updateDropdown = updateDropdown;\n\t$scope.showDropdown = showDropdown;\n\t$scope.updateVehicle = updateVehicle;\n\t$scope.checkHideDropdown = checkHideDropdown;\n\t$scope.displayList = false;\n\t$scope.vehicle = {};\n\t$scope.vehicleList = [];\n\n\tfunction updateDropdown() { debounceDropdown(); } \n\t\n\tvar debounceDropdown = _.debounce(function () {\n\t\tvar value = $scope.Details.apTradeinDetails.$viewValue;\n\t\tvar field = $scope.Details.apTradeinDetails;\n\t\tvar details = value.split(\" \");\n\t\t//check that at least a year and make are available\n\t\tif (details.length > 1) {\n\t\t\tvar yearRegex = new RegExp(/^\\d{4}$/g);\n\t\t\tif (yearRegex.test(details[0])) {\n\t\t\t\tvar data = {};\n\t\t\t\tdata.VehicleYear = details[0];\n\t\t\t\tdata.Make = details[1];\n\t\t\t\tif (details.length > 2) data.Model = details[2];\n\t\t\t\tif (details.length > 3) data.Trim = details[3];\n\t\t\t\tif (details.length > 4) data.BodyStyle = details.slice(4).join(\" \");\n\t\t\t\tVehicleFactory.autoComplete(data).then(function (response) {\n\t\t\t\t\tif (response.result_code === \"0\" && response.result_content.length) {\n\t\t\t\t\t\tfield.$setValidity('', true);\n\t\t\t\t\t\t$scope.displayList = true;\n\t\t\t\t\t\t$scope.vehicleList = response.result_content;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfield.$setValidity('', false);\n\t\t\t\t\t\t$scope.displayList = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfield.$setValidity('', false);\n\t\t\t\t$scope.displayList = false;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t$scope.displayList = false;\n\t\t\tfield.$setValidity('', true);\n\t\t}\n\t}, 500, { 'leading': false, 'trailing': true });\n\n\tfunction showDropdown() {\n\t\tif (document.activeElement.id === \"apTradeinDetails\" && $scope.Details.apTradeinDetails.$valid && $scope.vehicleList.length)\n\t\t{\n\t\t\t$scope.displayList = true;\n\t\t}\n\t\telse $scope.displayList = false;\n\t}\n\n\tfunction updateVehicle(vehicle) {\n\t\t$scope.data.apTradeinDetails = vehicle.description;\n\t\t$scope.data.uvc = vehicle.uvc;\n\t\t$scope.vehicle = vehicle;\n\t\t$scope.displayList = false;\n\t\t$scope.Details.apTradeinDetails.$setValidity('', true);\n\t\tScrollFactory.lastVisibleStep(\"tradeinDetails\");\n\t}\n\n\tfunction checkHideDropdown(num) {\n\t\tif (num == $scope.vehicleList.length - 1) $scope.displayList = false;\n\t}\n\n\t$rootScope.tradeinDetailsNextStep = function () {\n\t\tif ($scope.Details.$valid) {\n\t\t\tvar data = {};\n\t\t\tdata.KM = $scope.data.apTradeinKms;\n\t\t\tdata.uvc = $scope.data.uvc;\n\t\t\tdata.province = $scope.data.apProvince;\n\t\t\tVehicleFactory.getVehicle(data).then(function (response) {\n\t\t\t\tif (response.result_code === \"0\") {\n\t\t\t\t\t$scope.data.tradein_avg = response.result_content.tradein_avg;\n\t\t\t\t\t$scope.data.tradein_clean = response.result_content.tradein_clean;\n\t\t\t\t\t$scope.data.tradein_rough = response.result_content.tradein_rough;\n\t\t\t\t\tDataFactory.setData($scope.data);\n\t\t\t\t\tDataFactory.appData.applicant.appState.tradeinDetails = true;\n\t\t\t\t\tScrollFactory.showStep(\"tradeinEstimate\");\n\t\t\t\t\tScrollFactory.goToStep(\"tradeinEstimate\");\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tangular.forEach($scope.Details.$error, function (field) {\n\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"tradeinHelp\");\n\t\tScrollFactory.goToStep(\"tradeinHelp\");\n\t}\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('tradeinEstimateCtrl', tradeinEstimateCtrl);\n\ntradeinEstimateCtrl.$inject = ['$scope', '$rootScope', 'ScrollFactory', 'DataFactory'];\n\nfunction tradeinEstimateCtrl($scope, $rootScope, ScrollFactory, DataFactory) {\n\n\t$rootScope.progressCurrent = 13;\n\t$rootScope.progressMobCurrent = 13;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.tradeinEstimate;\n\n\t$scope.data = DataFactory.appData.applicant;\n\t$scope.checkMaxValue = checkMaxValue;\n\n\t$scope.tradeinLow = $scope.data.tradein_rough;\n\t$scope.tradeinHigh = $scope.data.tradein_clean;\n\t$scope.tradeinAvg = $scope.data.tradein_avg;\n\tsetVehicleRange();\n\n\t$scope.$watch(function () {\n\t\treturn DataFactory.appData.applicant.tradein_rough\n\t}, function (newVal, oldVal) {\n\t\tif (newVal) {\n\t\t\t$scope.tradeinLow = newVal;\n\t\t\t$scope.tradeinHigh = DataFactory.appData.applicant.tradein_clean;\n\t\t\t$scope.tradeinAvg = DataFactory.appData.applicant.tradein_avg;\n\t\t\tsetVehicleRange();\n\t\t}\n\t});\n\n\t$scope.$watch(function () {\n\t\treturn DataFactory.appData.applicant.tradein_avg\n\t}, function (newVal, oldVal) {\n\t\tif (newVal) {\n\t\t\t$scope.tradeinAvg = newVal;\n\t\t\t$scope.tradeinHigh = DataFactory.appData.applicant.tradein_clean;\n\t\t\t$scope.tradeinLow = DataFactory.appData.applicant.tradein_rough;\n\t\t\tsetVehicleRange();\n\t\t}\n\t});\n\n\t$scope.$watch(function () {\n\t\treturn DataFactory.appData.applicant.tradein_clean\n\t}, function (newVal, oldVal) {\n\t\tif (newVal) {\n\t\t\t$scope.tradeinHigh = newVal;\n\t\t\t$scope.tradeinAvg = DataFactory.appData.applicant.tradein_avg;\n\t\t\t$scope.tradeinLow = DataFactory.appData.applicant.tradein_rough;\n\t\t\tsetVehicleRange();\n\t\t\tcheckMaxValue();\n\t\t} \n\t});\n\n\n\tfunction setVehicleRange() {\n\t\tif ($scope.tradeinHigh == 0) {\n\t\t\tif ($scope.tradeinAvg == 0) {\n\t\t\t\t$scope.tradeinHigh = $scope.tradeinLow;\n\t\t\t}\n\t\t\telse $scope.tradeinHigh = $scope.tradeinAvg;\n\t\t}\n\t\tif ($scope.tradeinLow > $scope.tradeinHigh) $scope.tradeinHigh = $scope.tradeinLow;\n\t}\n\n\tfunction checkMaxValue() {\n\t\tvar value = $scope.Estimate.apTradeinEstimate.$viewValue;\n\t\tif (value) {\n\t\t\tvalue = value.replace(/,|\\s/g, \"\");\n\t\t\tvar field = $scope.Estimate.apTradeinEstimate;\n\t\t\tif (Number(value) > Number($scope.tradeinHigh)) {\n\t\t\t\tfield.$setValidity('', false);\n\t\t\t\tfield.$setTouched();\n\t\t\t}\n\t\t\telse field.$setValidity('', true);\n\t\t}\n\t}\n\n\t$rootScope.tradeinEstimateNextStep = function () {\n\t\tif ($scope.Estimate.$valid) {\n\n\t\t\tDataFactory.appData.applicant.appState.tradeinEstimate = true;\n\n\t\t\tDataFactory.setData($scope.data);\n\n\t\t\tScrollFactory.showStep(\"tradeinPayments\");\n\t\t\tScrollFactory.goToStep(\"tradeinPayments\");\n\t\t\treturn true;\n\t\t}\n\t\telse {\n\t\t\tangular.forEach($scope.Estimate.$error, function (field) {\n\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"tradeinDetails\");\n\t\tScrollFactory.goToStep(\"tradeinDetails\");\n\t}\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('tradeinHelpCtrl', tradeinHelpCtrl);\n\ntradeinHelpCtrl.$inject = ['$scope', '$rootScope', '$timeout', 'ScrollFactory', 'DataFactory'];\n\nfunction tradeinHelpCtrl($scope, $rootScope, $timeout, ScrollFactory, DataFactory) {\n\n\t$rootScope.progressCurrent = 11;\n\t$rootScope.progressMobCurrent = 11;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.tradeinHelp;\n\n\t$scope.data = DataFactory.appData.applicant;\n\n\t$scope.nextStep = function (value) {\n\t\tif (!value) value = $scope.yesSelected ? \"Y\" : \"N\";\n\n\t\tif (value === \"Y\") {\n\t\t\t$scope.yesSelected = true;\n\t\t\t$scope.noSelected = false;\n\t\t\tDataFactory.appData.applicant.appState.tradeinHelp = true;\n\t\t\t$rootScope.tradeinHelp = true;\n\t\t\tScrollFactory.showStep(\"tradeinDetails\");\n\t\t\tScrollFactory.goToStep(\"tradeinDetails\");\n\t\t}\n\t\telse {\n\t\t\t$scope.yesSelected = false;\n\t\t\tremoveTradeinHelpData();\n\t\t\tif ($scope.TradeinValue.$valid) {\n\n\t\t\t\tDataFactory.appData.applicant.appState.tradeinHelp = true;\n\t\t\t\t$rootScope.tradeinHelp = false;\n\n\t\t\t\tDataFactory.setData($scope.data);\n\n\t\t\t\tScrollFactory.hideStep(\"tradeinDetails\");\n\t\t\t\tScrollFactory.hideStep(\"tradeinEstimate\");\n\n\t\t\t\t$timeout(function () {\n\t\t\t\t\tScrollFactory.showStep(\"tradeinPayments\");\n\t\t\t\t\tScrollFactory.goToStep(\"tradeinPayments\");\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tangular.forEach($scope.TradeinValue.$error, function (field) {\n\t\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tScrollFactory.showStep(\"tradein\");\n\t\tScrollFactory.goToStep(\"tradein\");\n\t}\n\n\tfunction removeTradeinHelpData() {\n\t\t$scope.data.apTradeinDetails = \"\";\n\t\t$scope.data.apTradeinKms = \"\";\n\t\t$scope.data.tradein_avg = \"\";\n\t\t$scope.data.tradein_clean = \"\";\n\t\t$scope.data.tradein_rough = \"\";\n\t\t$scope.data.uvc = \"\";\n\t}\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('tradeinPaymentsCtrl', tradeinPaymentsCtrl);\n\ntradeinPaymentsCtrl.$inject = ['$scope', '$rootScope', 'ScrollFactory', 'DataFactory'];\n\nfunction tradeinPaymentsCtrl($scope, $rootScope, ScrollFactory, DataFactory) {\n\n\t$rootScope.progressCurrent = 14;\n\t$rootScope.progressMobCurrent = 14;\n\n\t$scope.content = DataFactory.appData.content;\n\t$scope.localContent = DataFactory.appData.content.tradeinPayments;\n\n\t$scope.data = DataFactory.appData.applicant;\n\t$scope.sendGAEvent = sendGAEvent;\n\n\t$rootScope.tradeinPaymentsNextStep = function () {\n\t\tif ($scope.TradeinPayments.$valid) {\n\n\t\t\tif ($scope.data.apMakingPayments === $scope.localContent.option_2_val) {\n\t\t\t\t$scope.data.apBalance = 0;\n\t\t\t\t$scope.data.apTradeinValue = 0;\n\t\t\t}\n\t\t\telse if ($scope.data.apMakingPayments === $scope.localContent.option_3_val) {\n\t\t\t\t$scope.data.apBalance = 0;\n\t\t\t}\n\n\t\t\tsendGAEvent();\n\n\t\t\tDataFactory.appData.applicant.appState.tradeinPayments = true;\n\n\t\t\tDataFactory.setData($scope.data);\n\n\t\t\tScrollFactory.showStep(\"downPayment\");\n\t\t\tScrollFactory.goToStep(\"downPayment\");\n\t\t\treturn true;\n\t\t}\n\t\telse {\n\t\t\tangular.forEach($scope.TradeinPayments.$error, function (field) {\n\t\t\t\tangular.forEach(field, function (errorField, index) {\n\t\t\t\t\terrorField.$setTouched();\n\t\t\t\t\t$rootScope.ga.validationErr(errorField.$name);\n\t\t\t\t\t$rootScope.errorNumber = index + 1;\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}\n\n\t$scope.prevStep = function () {\n\t\tif ($rootScope.tradeinHelp) {\n\t\t\tScrollFactory.showStep(\"tradeinEstimate\");\n\t\t\tScrollFactory.goToStep(\"tradeinEstimate\");\n\t\t}\n\t\telse {\n\t\t\tScrollFactory.showStep(\"tradeinHelp\");\n\t\t\tScrollFactory.goToStep(\"tradeinHelp\");\n\t\t}\n\t}\n\n\tfunction sendGAEvent() {\n\t\tswitch ($scope.data.apMakingPayments) {\n\t\t\tcase $scope.localContent.option_1_val:\n\t\t\t\t$rootScope.ga.makingPaymentsYes();\n\t\t\t\tbreak;\n\t\t\tcase $scope.localContent.option_2_val:\n\t\t\t\t$rootScope.ga.makingPaymentsUnsure();\n\t\t\t\tbreak;\n\t\t\tcase $scope.localContent.option_3_val:\n\t\t\t\t$rootScope.ga.makingPaymentsNo();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n}\n","angular\r\n .module('AutoPrequal')\r\n .controller('resultsCtrl', resultsCtrl);\r\n\r\nresultsCtrl.$inject = ['$scope', '$rootScope', 'DataFactory', '$filter', '$state', '$timeout'];\r\n\r\nfunction resultsCtrl($scope, $rootScope, DataFactory, $filter, $state, $timeout) {\r\n\r\n\tfunction dataLayerPushloanAmount() {\r\n\t\tdataLayer.push({\r\n\t\t\t\"event\": \"loanAmount\",\r\n\t\t\t\"category\": \"Auto Finance - Prequal\",\r\n\t\t\t\"action\": $scope.calcdata.loanAmount,\r\n\t\t\t\"label\": $scope.calcdata.loanAmount\r\n\t\t})\r\n }\r\n\r\n if (!$rootScope.isLoaded) {\r\n $rootScope.currentStep = \"welcome\";\r\n $state.go('main', { 'hash': 'welcome' });\r\n return;\r\n }\r\n $scope.$on('$locationChangeStart', function (event, next, current) {\r\n if (next.indexOf('results') === -1) {\r\n $rootScope.forcedLoader = true;\r\n event.preventDefault();\r\n $rootScope.restart();\r\n }\r\n });\r\n\t\r\n\r\n\r\n\t\r\n\r\n\t$timeout(function () {\r\n\t\t\r\n\t\t$(\".interestRate\").text(incoming_lang == \"fr\" ? interestRate.toString().replace('.', ',') : interestRate);\r\n\t\tvar interestRateElement = $(\"#interest-rate\");\r\n\t\tif (interestRateElement.val() < 0.01) {\r\n\t\t\tvar formatRate = interestRateElement.val() * 1200;\r\n\t\t\tinterestRateElement.val(formatRate).change();\r\n\t\t}\r\n\t\t$('.loanTerm').text($scope.calcdata.loanTerm);\r\n\t}, 500);\r\n\r\n\t$timeout(function () {\r\n\t\t$('main').scrollTop(0);\r\n\t\t$rootScope.forcedLoader = false;\r\n\t});\r\n\r\n\r\n $rootScope.currentStep = \"results\";\r\n $rootScope.progressCurrent = 0;\r\n $rootScope.progressMobCurrent = 0;\r\n\r\n\t$scope.showOptionsModal = false;\r\n\t$scope.showPPModal = false;\r\n $scope.status = {};\r\n $scope.data = DataFactory.appData.applicant;\r\n\t$scope.result = DataFactory.appData.submit;\r\n\t$scope.approved = $scope.result.prequalResult === \"Success\";\r\n $scope.localContent = DataFactory.appData.content.results;\r\n\t$scope.openSliderModal = openSliderModal;\r\n\t$scope.tooltip_content = \"\";\r\n\r\n\t$scope.calcdata = angular.copy($scope.result);\r\n\t$scope.calcdata.downPayment = $scope.data.apDownPayment;\r\n\t$scope.calcdata.monthlyPayment = Math.floor($scope.calcdata.monthlyPayment);\r\n\r\n\tdataLayerPushloanAmount()\r\n\t\r\n\r\n\t$scope.updateInterestRate = updateInterestRate;\r\n\t$scope.updateLoanTerm = updateLoanTerm;\r\n\t$scope.updateMonthlyPayment = updateMonthlyPayment;\r\n\t$scope.updateDownPayment = updateDownPayment;\r\n\t$scope.adjustLoanTerm = adjustLoanTerm;\r\n\t$scope.expandSliders = false;\r\n\t$scope.minLoanError = false;\r\n\t$scope.termRead = false;\r\n\r\n\t\r\n\r\n\t$scope.$watch('showPPModal', function (newVal, oldVal) {\r\n\t\tif (newVal !== oldVal && !newVal) $timeout(function () { jQuery('#pp-modal-btn').focus(); });\r\n\t});\r\n\r\n\t$scope.$watch('expandSliders', function (newVal, oldVal) {\r\n\t\tif (newVal !== oldVal && newVal) $timeout(function () { jQuery('#tipLoanTerm').focus(); });\r\n\t});\r\n\r\n\t$scope.$watch('showOptionsModal', function (newVal, oldVal) {\r\n\t\tif (newVal !== oldVal && !newVal) $timeout(function () { jQuery('#open-slider-modal-btn').focus(); });\r\n\t});\r\n\r\n\tfunction recalculate(lt, mp) {\r\n\t\tvar intRate = ($scope.calcdata.interestRate === 0 ? 0.001 : $scope.calcdata.interestRate) / 1200 ;\r\n\t\tvar loanAmount = mp / ((intRate * Math.pow(1 + +intRate, lt)) / (Math.pow(1 + +intRate, lt) - 1));\r\n\t\tif (loanAmount < 7500) {\r\n\t\t\t$scope.minLoanError = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$scope.minLoanError = false;\r\n\t\t\t$scope.calcdata.loanAmount = loanAmount;\r\n\t\t\tcalculatePurchasePrice();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction calculatePurchasePrice() {\t\r\n\t\t$scope.calcdata.purchasePrice = +$scope.calcdata.netTradeinValue + +$scope.calcdata.loanAmount + +$scope.calcdata.downPayment;\r\n\t\tdataLayerPushloanAmount()\r\n\t}\r\n\r\n $timeout(function () {\r\n //focus on title after animation is done\r\n $('h1:visible')[0].focus();\r\n }, 500)\r\n\r\n\tfunction openSliderModal() {\r\n\t\tvar el = jQuery(\"#monthly-payment-wpr\");\r\n\t\tvar offset = el.offset().top - (window.innerHeight / 2);\r\n\t\t$scope.showOptionsModal = true;\r\n\t\t$timeout(function () {\r\n\t\t\tjQuery(\"main\").scrollTop(offset);\r\n\t\t\tjQuery(\"#tipLoanTermMob\").focus();\r\n\t\t}, 300);\r\n\t}\r\n\r\n\tfunction formatSliderCurrency(input) {\r\n\t\treturn $filter('currency')(input);\r\n\t}\r\n\r\n\t$scope.MIN_MONTHLY_PAYMENT = 118;\r\n\t$scope.MAX_DOWN_PAYMENT = +$scope.calcdata.downPayment + +25000;\r\n\tvar mpValues = getMonthlyPaymentValues();\r\n\r\n\tvar ir_slider = jQuery('#interestRate-slider');\r\n\tvar $ir_minLabel = ir_slider.closest('.slider-container').find(\"#min-label\");\r\n\tvar $ir_maxLabel = ir_slider.closest('.slider-container').find(\"#max-label\");\r\n\r\n\tir_slider.ionRangeSlider({\r\n\t\ttype: \"single\",\r\n\t\tskin: \"round\",\r\n\t\tmin: 0,\r\n\t\tmax: 14.99,\r\n\t\tpostfix: $scope.localContent.percentage,\r\n\t\tfrom: $scope.calcdata.interestRate,\r\n\t\tstep: 0.50,\r\n\t\thide_min_max: true,\r\n\t\tgrid_snap: false,\r\n\t\tonStart: function (res) {\r\n\t\t\t$ir_minLabel.text(res.min + $scope.localContent.percentage);\r\n\t\t\t$ir_maxLabel.text((incoming_lang == \"fr\" ? res.max.toString().replace('.', ',') : res.max) + $scope.localContent.percentage);\r\n\t\t},\r\n\t\tonUpdate: function (res) {},\r\n\t\tonFinish: function (res) {\r\n\t\t\t$rootScope.ga.updateIRSlider();\r\n\t\t},\r\n\t\tonChange: function (res) {\r\n\t\t\t$scope.$apply(function () {\r\n\t\t\t\t$scope.calcdata.interestRate = Number(res.from);\r\n\t\t\t\t$(\".interestRate\").text(incoming_lang == \"fr\" ? $scope.calcdata.interestRate.toString().replace('.', ',') : $scope.calcdata.interestRate);\r\n\t\t\t});\r\n\r\n\t\t\tirmob_slider_instance.update({ from: res.from });\r\n\t\t\tupdateInterestRateA11y();\r\n\t\t\t$timeout(function () { recalculate($scope.calcdata.loanTerm, $scope.calcdata.monthlyPayment); });\r\n\t\t}\r\n\t});\r\n\r\n\tvar irmob_slider = jQuery('#interestRateMob-slider');\r\n\tvar $ir_minLabelMob = irmob_slider.closest('.slider-container').find(\"#min-label\");\r\n\tvar $ir_maxLabelMob = irmob_slider.closest('.slider-container').find(\"#max-label\");\r\n\r\n\tirmob_slider.ionRangeSlider({\r\n\t\ttype: \"single\",\r\n\t\tskin: \"round\",\r\n\t\tmin: 0,\r\n\t\tmax: 14.99,\r\n\t\tpostfix: $scope.localContent.percentage,\r\n\t\tfrom: $scope.calcdata.interestRate,\r\n\t\tstep: 0.50,\r\n\t\thide_min_max: true,\r\n\t\tgrid_snap: false,\r\n\t\tonStart: function (res) {\r\n\t\t\t$ir_minLabelMob.text(res.min + $scope.localContent.percentage);\r\n\t\t\t$ir_maxLabelMob.text((incoming_lang == \"fr\" ? res.max.toString().replace('.', ',') : res.max) + $scope.localContent.percentage);\r\n\t\t},\r\n\t\tonUpdate: function (res) {},\r\n\t\tonFinish: function (res) {\r\n\t\t\t$rootScope.ga.updateIRSlider();\r\n\t\t},\r\n\t\tonChange: function (res) {\r\n\t\t\t$scope.$apply(function () {\r\n\t\t\t\t$scope.calcdata.interestRate = Number(res.from);\r\n\t\t\t\t$(\".interestRate\").text(incoming_lang == \"fr\" ? $scope.calcdata.interestRate.toString().replace('.', ',') : $scope.calcdata.interestRate);\r\n\t\t\t\t\r\n\t\t\t});\r\n\t\t\tir_slider_instance.update({ from: res.from });\r\n\t\t\tupdateInterestRateA11y();\r\n\t\t\t$timeout(function () { recalculate($scope.calcdata.loanTerm, $scope.calcdata.monthlyPayment); });\r\n\t\t}\r\n\t});\r\n\r\n\tvar ir_slider_instance = ir_slider.data(\"ionRangeSlider\");\r\n\tvar irmob_slider_instance = irmob_slider.data(\"ionRangeSlider\");\r\n\tupdateInterestRateA11y();\r\n\r\n\tvar lt_slider = jQuery('#loanTerm-slider');\r\n\tvar $lt_minLabel = lt_slider.closest('.slider-container').find(\"#min-label\");\r\n\tvar $lt_maxLabel = lt_slider.closest('.slider-container').find(\"#max-label\");\r\n\r\n\tlt_slider.ionRangeSlider({\r\n\t\ttype: \"single\",\r\n\t\tskin: \"round\",\r\n\t\tmin: 12,\r\n\t\tmax: 96,\r\n\t\tpostfix: $scope.localContent.months,\r\n\t\tfrom: $scope.calcdata.loanTerm,\r\n\t\tstep: 12,\r\n\t\thide_min_max: true,\r\n\t\tgrid_snap: false,\r\n\t\tonStart: function (res) {\r\n\t\t\t$lt_minLabel.text(res.min + $scope.localContent.months);\r\n\t\t\t$lt_maxLabel.text(res.max + $scope.localContent.months);\r\n\t\t},\r\n\t\tonUpdate: function (res) {},\r\n\t\tonFinish: function (res) {\r\n\t\t\t$rootScope.ga.updateLTSlider();\r\n\t\t},\r\n\t\tonChange: function (res) {\r\n\t\t\t$scope.$apply(function () {\r\n\t\t\t\t$scope.calcdata.loanTerm = res.from;\r\n\t\t\t\t$('.loanTerm').text($scope.calcdata.loanTerm);\r\n\t\t\t});\r\n\r\n\t\t\tltmob_slider_instance.update({ from: res.from });\r\n\t\t\tupdateLoanTermA11y();\r\n\t\t\t$timeout(function () { recalculate(res.from, $scope.calcdata.monthlyPayment); });\r\n\t\t}\r\n\t});\r\n\r\n\tvar ltmob_slider = jQuery('#loanTermMob-slider');\r\n\tvar $lt_minLabelMob = ltmob_slider.closest('.slider-container').find(\"#min-label\");\r\n\tvar $lt_maxLabelMob = ltmob_slider.closest('.slider-container').find(\"#max-label\");\r\n\r\n\tltmob_slider.ionRangeSlider({\r\n\t\ttype: \"single\",\r\n\t\tskin: \"round\",\r\n\t\tmin: 12,\r\n\t\tmax: 96,\r\n\t\tpostfix: $scope.localContent.months,\r\n\t\tfrom: $scope.calcdata.loanTerm,\r\n\t\tstep: 12,\r\n\t\thide_min_max: true,\r\n\t\tgrid_snap: false,\r\n\t\tonStart: function (res) {\r\n\t\t\t$lt_minLabelMob.text(res.min + $scope.localContent.months);\r\n\t\t\t$lt_maxLabelMob.text(res.max + $scope.localContent.months);\r\n\t\t},\r\n\t\tonUpdate: function (res) {},\r\n\t\tonFinish: function (res) {\r\n\t\t\t$rootScope.ga.updateLTSlider();\r\n\t\t},\r\n\t\tonChange: function (res) {\r\n\t\t\t$scope.$apply(function () {\r\n\t\t\t\t$scope.calcdata.loanTerm = res.from;\r\n\t\t\t\t$('.loanTerm').text($scope.calcdata.loanTerm);\r\n\t\t\t});\r\n\t\t\tlt_slider_instance.update({ from: res.from });\r\n\t\t\tupdateLoanTermA11y();\r\n\t\t\t$timeout(function () { recalculate(res.from, $scope.calcdata.monthlyPayment); });\r\n\t\t}\r\n\t});\r\n\r\n\tvar lt_slider_instance = lt_slider.data(\"ionRangeSlider\");\r\n\tvar ltmob_slider_instance = ltmob_slider.data(\"ionRangeSlider\");\r\n\tupdateLoanTermA11y();\r\n\r\n\tvar mp_slider = jQuery('#monthlyPayments-slider');\r\n\tvar $mp_minLabel = mp_slider.closest('.slider-container').find(\"#min-label\");\r\n\tvar $mp_maxLabel = mp_slider.closest('.slider-container').find(\"#max-label\");\r\n\r\n\tmp_slider.ionRangeSlider({\r\n\t\ttype: \"single\",\r\n\t\tskin: \"round\",\r\n\t\tfrom: mpValues.length - 1,\r\n\t\tvalues: mpValues,\r\n\t\tprettify_enabled: true,\r\n\t\tprettify: formatSliderCurrency,\r\n\t\thide_min_max: true,\r\n\t\tgrid_snap: false,\r\n\t\tonStart: function (res) {\r\n\t\t\t$mp_minLabel.text(incoming_lang == \"fr\" ? mpValues.at(0) + \" $\" : \"$\" + mpValues.at(0));\r\n\t\t\t$mp_maxLabel.text(incoming_lang == \"fr\" ? mpValues.at(-1) + \" $\" : \"$\" + mpValues.at(-1));\r\n\t\t},\r\n\t\tonUpdate: function (res) {},\r\n\t\tonFinish: function (res) {\r\n\t\t\t$rootScope.ga.updateMPSlider();\r\n\t\t},\r\n\t\tonChange: function (res) {\r\n\t\t\t$scope.$apply(function () { $scope.calcdata.monthlyPayment = mpValues[res.from] });\r\n\t\t\tmpmob_slider_instance.update({ from: res.from });\r\n\t\t\tupdateMonthlyPaymentA11y();\r\n\t\t\t$timeout(function () { recalculate($scope.calcdata.loanTerm, mpValues[res.from]); });\r\n\t\t}\r\n\t});\r\n\r\n\tvar mpmob_slider = jQuery('#monthlyPaymentsMob-slider');\r\n\tvar $mp_minLabelMob = mpmob_slider.closest('.slider-container').find(\"#min-label\");\r\n\tvar $mp_maxLabelMob = mpmob_slider.closest('.slider-container').find(\"#max-label\");\r\n\r\n\tmpmob_slider.ionRangeSlider({\r\n\t\ttype: \"single\",\r\n\t\tskin: \"round\",\r\n\t\tfrom: mpValues.length - 1,\r\n\t\tvalues: mpValues,\r\n\t\tprettify_enabled: true,\r\n\t\tprettify: formatSliderCurrency,\r\n\t\thide_min_max: true,\r\n\t\tgrid_snap: false,\r\n\t\tonStart: function (res) {\r\n\t\t\t$mp_minLabelMob.text(incoming_lang == \"fr\" ? mpValues.at(0) + \" $\" : \"$\" + mpValues.at(0));\r\n\t\t\t$mp_maxLabelMob.text(incoming_lang == \"fr\" ? mpValues.at(-1) + \" $\" : \"$\" + mpValues.at(-1));\r\n\t\t},\r\n\t\tonUpdate: function (res) {},\r\n\t\tonFinish: function (res) {\r\n\t\t\t$rootScope.ga.updateMPSlider();\r\n\t\t},\r\n\t\tonChange: function (res) {\r\n\t\t\t$scope.$apply(function () { $scope.calcdata.monthlyPayment = mpValues[res.from] });\r\n\t\t\tmp_slider_instance.update({ from: res.from });\r\n\t\t\tupdateMonthlyPaymentA11y();\r\n\t\t\t$timeout(function () { recalculate($scope.calcdata.loanTerm, mpValues[res.from]); });\r\n\t\t}\r\n\t});\r\n\r\n\tvar mp_slider_instance = mp_slider.data(\"ionRangeSlider\");\r\n\tvar mpmob_slider_instance = mpmob_slider.data(\"ionRangeSlider\");\r\n\tupdateMonthlyPaymentA11y();\r\n\r\n\tvar dp_slider = jQuery('#downPayment-slider');\r\n\tvar $dp_minLabel = dp_slider.closest('.slider-container').find(\"#min-label\");\r\n\tvar $dp_maxLabel = dp_slider.closest('.slider-container').find(\"#max-label\");\r\n\r\n\tdp_slider.ionRangeSlider({\r\n\t\ttype: \"single\",\r\n\t\tskin: \"round\",\r\n\t\tmin: 0,\r\n\t\tmax: $scope.MAX_DOWN_PAYMENT,\r\n\t\tprettify_enabled: true,\r\n\t\tprettify: formatSliderCurrency,\r\n\t\tfrom: $scope.calcdata.downPayment,\r\n\t\tstep: 100,\r\n\t\thide_min_max: true,\r\n\t\tgrid_snap: false,\r\n\t\tonStart: function (res) {\r\n\t\t\t$dp_minLabel.text(formatSliderCurrency(res.min));\r\n\t\t\t$dp_maxLabel.text(formatSliderCurrency(res.max));\r\n\t\t},\r\n\t\tonUpdate: function (res) {},\r\n\t\tonFinish: function (res) {\r\n\t\t\t$rootScope.ga.updateDPSlider();\r\n\t\t},\r\n\t\tonChange: function (res) {\r\n\t\t\t$scope.$apply(function () { $scope.calcdata.downPayment = res.from });\r\n\t\t\tdpmob_slider_instance.update({ from: res.from });\r\n\t\t\tupdateDownPaymentA11y();\r\n\t\t\t$timeout(function () { calculatePurchasePrice(); });\r\n\t\t\t$scope.ResultOptions[\"down-payment\"].$setValidity('', true);\r\n\t\t\t$scope.ResultOptionsMob[\"down-payment\"].$setValidity('', true);\r\n\t\t}\r\n\t});\r\n\r\n\tvar dpmob_slider = jQuery('#downPaymentMob-slider');\r\n\tvar $dp_minLabelMob = dpmob_slider.closest('.slider-container').find(\"#min-label\");\r\n\tvar $dp_maxLabelMob = dpmob_slider.closest('.slider-container').find(\"#max-label\");\r\n\r\n\tdpmob_slider.ionRangeSlider({\r\n\t\ttype: \"single\",\r\n\t\tskin: \"round\",\r\n\t\tmin: 0,\r\n\t\tmax: $scope.MAX_DOWN_PAYMENT,\r\n\t\tprettify_enabled: true,\r\n\t\tprettify: formatSliderCurrency,\r\n\t\tfrom: $scope.calcdata.downPayment,\r\n\t\tstep: 100,\r\n\t\thide_min_max: true,\r\n\t\tgrid_snap: false,\r\n\t\tonStart: function (res) {\r\n\t\t\t$dp_minLabelMob.text(formatSliderCurrency(res.min));\r\n\t\t\t$dp_maxLabelMob.text(formatSliderCurrency(res.max));\r\n\t\t},\r\n\t\tonUpdate: function (res) {},\r\n\t\tonFinish: function (res) {\r\n\t\t\t$rootScope.ga.updateDPSlider();\r\n\t\t},\r\n\t\tonChange: function (res) {\r\n\t\t\t$scope.$apply(function () { $scope.calcdata.downPayment = res.from });\r\n\t\t\tdp_slider_instance.update({ from: res.from });\r\n\t\t\tupdateDownPaymentA11y();\r\n\t\t\t$timeout(function () { calculatePurchasePrice(); });\r\n\t\t\t$scope.ResultOptions[\"down-payment\"].$setValidity('', true);\r\n\t\t\t$scope.ResultOptionsMob[\"down-payment\"].$setValidity('', true);\r\n\t\t}\r\n\t});\r\n\r\n\tvar dp_slider_instance = dp_slider.data(\"ionRangeSlider\");\r\n\tvar dpmob_slider_instance = dpmob_slider.data(\"ionRangeSlider\");\r\n\tupdateDownPaymentA11y();\r\n\r\n\tfunction updateInterestRate() {\r\n\t\tvar ir = $scope.calcdata.interestRate;\r\n\t\tif (isNaN(ir) || ir < 0 || ir > 14.99) {\r\n\t\t\t$scope.ResultOptions[\"interest-rate\"].$setValidity('', false);\r\n\t\t\t$scope.ResultOptionsMob[\"interest-rate\"].$setValidity('', false);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$scope.ResultOptions[\"interest-rate\"].$setValidity('', true);\r\n\t\t\t$scope.ResultOptionsMob[\"interest-rate\"].$setValidity('', true);\r\n\t\t} \r\n\r\n\t\tif ($scope.ResultOptions.$valid && $scope.ResultOptionsMob.$valid) {\r\n\t\t\tir_slider_instance.update({ from: ir });\r\n\t\t\tirmob_slider_instance.update({ from: ir });\r\n\t\t\tupdateInterestRateA11y();\r\n\t\t\t$timeout(function () {\r\n\t\t\t\trecalculate($scope.calcdata.loanTerm, $scope.calcdata.monthlyPayment);\r\n\t\t\t\t$(\".interestRate\").text(incoming_lang == \"fr\" ? $scope.calcdata.interestRate.toString().replace('.', ',') : $scope.calcdata.interestRate);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction updateLoanTerm() {\r\n\t\tvar lt = $scope.calcdata.loanTerm;\r\n\t\tif (isNaN(lt) || lt < 12 || lt > 96) {\r\n\t\t\t$scope.ResultOptions[\"loan-term\"].$setValidity('', false);\r\n\t\t\t$scope.ResultOptionsMob[\"loan-term\"].$setValidity('', false);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$scope.ResultOptions[\"loan-term\"].$setValidity('', true);\r\n\t\t\t$scope.ResultOptionsMob[\"loan-term\"].$setValidity('', true);\r\n\t\t} \r\n\r\n\t\tif ($scope.ResultOptions.$valid && $scope.ResultOptionsMob.$valid) {\r\n\t\t\tlt_slider_instance.update({ from: lt });\r\n\t\t\tltmob_slider_instance.update({ from: lt });\r\n\t\t\tupdateLoanTermA11y();\r\n\t\t\t$timeout(function () {\r\n\t\t\t\trecalculate(lt, $scope.calcdata.monthlyPayment);\r\n\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction updateMonthlyPayment() {\r\n\t\tvar mp = $scope.calcdata.monthlyPayment;\r\n\t\tif (isNaN(mp) || mp < $scope.MIN_MONTHLY_PAYMENT || mp > $scope.result.monthlyPayment) {\r\n\t\t\t$scope.ResultOptions[\"monthly-payments\"].$setValidity('', false);\r\n\t\t\t$scope.ResultOptionsMob[\"monthly-payments\"].$setValidity('', false);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$scope.ResultOptions[\"monthly-payments\"].$setValidity('', true);\r\n\t\t\t$scope.ResultOptionsMob[\"monthly-payments\"].$setValidity('', true);\r\n\t\t}\r\n\t\tif ($scope.ResultOptions.$valid && $scope.ResultOptionsMob.$valid) {\r\n\t\t\tvar closestVal = mpValues.indexOf(Math.round(+mp / 10) * 10);\r\n\t\t\tmp_slider_instance.update({ from: closestVal });\r\n\t\t\tmpmob_slider_instance.update({ from: closestVal });\r\n\t\t\tupdateMonthlyPaymentA11y();\r\n\t\t\t$timeout(function () {\r\n\t\t\t\trecalculate($scope.calcdata.loanTerm, mp);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction updateDownPayment() {\r\n\t\tvar dp = $scope.calcdata.downPayment;\r\n\t\tif (isNaN(dp) || dp < 0 || dp > $scope.MAX_DOWN_PAYMENT) {\r\n\t\t\t$scope.ResultOptions[\"down-payment\"].$setValidity('', false);\r\n\t\t\t$scope.ResultOptionsMob[\"down-payment\"].$setValidity('', false);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$scope.ResultOptions[\"down-payment\"].$setValidity('', true);\r\n\t\t\t$scope.ResultOptionsMob[\"down-payment\"].$setValidity('', true);\r\n\t\t}\r\n\t\tif ($scope.ResultOptions.$valid && $scope.ResultOptionsMob.$valid) {\r\n\t\t\tdp_slider_instance.update({ from: dp });\r\n\t\t\tdpmob_slider_instance.update({ from: dp });\r\n\t\t\tupdateDownPaymentA11y();\r\n\t\t\t$timeout(function () {\r\n\t\t\t\tcalculatePurchasePrice();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction updateInterestRateA11y() {\r\n\t\t$timeout(function () {\r\n\t\t\tvar ir_slider_a11y = ir_slider.siblings('.irs').find('.irs-line');\r\n\t\t\tvar irmob_slider_a11y = irmob_slider.siblings('.irs').find('.irs-line');\r\n\t\t\tir_slider_a11y.attr('aria-valuemin', '0 ' + $scope.localContent.percentage);\r\n\t\t\tir_slider_a11y.attr('aria-valuemax', '14.99 ' + $scope.localContent.percentage);\r\n\t\t\tir_slider_a11y.attr('aria-valuetext', $scope.calcdata.interestRate + ' ' + $scope.localContent.percentage);\r\n\t\t\tirmob_slider_a11y.attr('aria-valuemin', '0 ' + $scope.localContent.percentage);\r\n\t\t\tirmob_slider_a11y.attr('aria-valuemax', '14.99 ' + $scope.localContent.percentage);\r\n\t\t\tirmob_slider_a11y.attr('aria-valuetext', $scope.calcdata.interestRate + ' ' + $scope.localContent.percentage);\r\n\t\t});\r\n\t}\r\n\r\n\tfunction updateLoanTermA11y() {\r\n\t\t$timeout(function () {\r\n\t\t\tvar lt_slider_a11y = lt_slider.siblings('.irs').find('.irs-line');\r\n\t\t\tvar ltmob_slider_a11y = ltmob_slider.siblings('.irs').find('.irs-line');\r\n\t\t\tlt_slider_a11y.attr('aria-valuemin', '12 ' + $scope.localContent.months);\r\n\t\t\tlt_slider_a11y.attr('aria-valuemax', '96 ' + $scope.localContent.months);\r\n\t\t\tlt_slider_a11y.attr('aria-valuetext', $scope.calcdata.loanTerm + ' ' + $scope.localContent.months);\r\n\t\t\tltmob_slider_a11y.attr('aria-valuemin', '12 ' + $scope.localContent.months);\r\n\t\t\tltmob_slider_a11y.attr('aria-valuemax', '96 ' + $scope.localContent.months);\r\n\t\t\tltmob_slider_a11y.attr('aria-valuetext', $scope.calcdata.loanTerm + ' ' + $scope.localContent.months);\r\n\t\t});\r\n\t}\r\n\r\n\tfunction updateMonthlyPaymentA11y() {\r\n\t\t$timeout(function () {\r\n\t\t\tvar mp_slider_a11y = mp_slider.siblings('.irs').find('.irs-line');\r\n\t\t\tvar mpmob_slider_a11y = mpmob_slider.siblings('.irs').find('.irs-line');\r\n\t\t\tmp_slider_a11y.attr('aria-valuemin', $filter('currency')($scope.MIN_MONTHLY_PAYMENT));\r\n\t\t\tmp_slider_a11y.attr('aria-valuemax', $filter('currency')($scope.result.monthlyPayment));\r\n\t\t\tmp_slider_a11y.attr('aria-valuetext', $filter('currency')($scope.calcdata.monthlyPayment));\r\n\t\t\tmpmob_slider_a11y.attr('aria-valuemin', $filter('currency')($scope.MIN_MONTHLY_PAYMENT));\r\n\t\t\tmpmob_slider_a11y.attr('aria-valuemax', $filter('currency')($scope.result.monthlyPayment));\r\n\t\t\tmpmob_slider_a11y.attr('aria-valuetext', $filter('currency')($scope.calcdata.monthlyPayment));\r\n\t\t});\r\n\t}\r\n\r\n\tfunction updateDownPaymentA11y() {\r\n\t\t$timeout(function () {\r\n\t\t\tvar dp_slider_a11y = dp_slider.siblings('.irs').find('.irs-line');\r\n\t\t\tvar dpmob_slider_a11y = dpmob_slider.siblings('.irs').find('.irs-line');\r\n\t\t\tdp_slider_a11y.attr('aria-valuemin', $filter('currency')(0));\r\n\t\t\tdp_slider_a11y.attr('aria-valuemax', $filter('currency')($scope.MAX_DOWN_PAYMENT));\r\n\t\t\tdp_slider_a11y.attr('aria-valuetext', $filter('currency')($scope.calcdata.downPayment));\r\n\t\t\tdpmob_slider_a11y.attr('aria-valuemin', $filter('currency')(0));\r\n\t\t\tdpmob_slider_a11y.attr('aria-valuemax', $filter('currency')($scope.MAX_DOWN_PAYMENT));\r\n\t\t\tdpmob_slider_a11y.attr('aria-valuetext', $filter('currency')($scope.calcdata.downPayment));\r\n\t\t});\r\n\t}\r\n\r\n\tfunction adjustLoanTerm() {\r\n\t\t$scope.calcdata.loanTerm = Math.round(+$scope.calcdata.loanTerm / 12) * 12;\r\n\t\tupdateLoanTerm();\r\n\t}\r\n\r\n\tfunction getMonthlyPaymentValues() {\r\n\t\tvar rVal = [];\r\n\t\trVal.push($scope.MIN_MONTHLY_PAYMENT);\r\n\t\tfor (var i = 120; i < $scope.calcdata.monthlyPayment; i += 10) {\r\n\t\t\trVal.push(i);\r\n\t\t}\r\n\t\trVal.push($scope.calcdata.monthlyPayment);\r\n\t\treturn rVal;\r\n\t}\r\n}","angular\n\t.module('AutoPrequal')\n\t.controller('welcomeCtrl', welcomeCtrl);\n\nwelcomeCtrl.$inject = ['$scope', '$rootScope', '$timeout', 'ScrollFactory', 'DataFactory'];\n\nfunction welcomeCtrl($scope, $rootScope, $timeout, ScrollFactory, DataFactory) {\n\t$rootScope.progressCurrent = 0;\n\t$rootScope.progressMobCurrent = 0;\n\n\t$scope.content = DataFactory.appData.content;\n\n\tDataFactory.appData.state.startTime = new Date().getTime();\n\n\t//wait for loading to finish\n\t$scope.localContent = DataFactory.appData.content.welcome;\n\tvar unwatch = $rootScope.$watch('loading', function (newVal, oldVal) {\n\t\tif (newVal !== oldVal && !newVal) {\n\t\t\t$scope.localContent = DataFactory.appData.content.welcome;\n\t\t\t$rootScope.scrolling = false;\n\t\t\t$rootScope.isLoaded = true;\n\t\t\tunwatch();\n\t\t}\n\t})\n\n\tupdateUrlLanguage();\n\n\t$timeout(function () {\n\t\tvar toggle = $('#tglCancel');\n\t\t$(\".legalSup\").click(function () {\n\t\t\tif (toggle.attr('aria-expanded') == 'false') {\n\t\t\t\ttoggle.click();\n\t\t\t}\n\t\t\tvar sup = $(this).attr(\"data-sup-id\");\n\t\t\t$timeout(function () {\n\t\t\t\t$(\"#\" + sup).focus();\n\t\t\t}, 400)\n\t\t})\n\t});\n\n\tvar unwatchSession = null;\n\t$scope.nextStep = function () {\n\t\tvar continueNextStep = function () {\n\t\t\tDataFactory.appData.applicant.appState.welcome = true;\n\t\t\tScrollFactory.showStep(\"applicantName\");\n\t\t\tScrollFactory.goToStep(\"applicantName\");\n\t\t}\n\n\t\tif ($rootScope.isLoadingSession) {\n\t\t\t$rootScope.forcedLoader = true;\n\t\t\tunwatchSession = $rootScope.$watch('isLoadingSession', function() {\n\t\t\t\tif (!$rootScope.isLoadingSession) {\n\t\t\t\t\t$rootScope.forcedLoader = false;\n\t\t\t\t\tcontinueNextStep();\n\t\t\t\t\tunwatchSession();\n\t\t\t\t}\n\t\t\t})\n\t\t} else {\n\t\t\tcontinueNextStep();\n\t\t}\n\t}\n\n\tfunction updateUrlLanguage() {\n\t\tvar url = window.location.href;\n\t\tvar search = window.location.search.replace(/\\//, \"\");\n\t\tif (url.indexOf('lang=en') !== -1) {\n\t\t\t$rootScope.otherLangUrl = url.replace(/lang=en/, 'lang=fr');\n\t\t}\n\t\telse if (url.indexOf('lang=fr') !== -1) {\n\t\t\t$rootScope.otherLangUrl = url.replace(/lang=fr/, 'lang=en');\n\t\t}\n\t\telse if (incoming_lang === 'en') {\n\t\t\tif (window.location.search == \"\") {\n\t\t\t\t$rootScope.otherLangUrl = window.location.origin + window.location.pathname + \"?lang=fr\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$rootScope.otherLangUrl = window.location.origin + window.location.pathname + search + \"&lang=fr\";\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (window.location.search == \"\") {\n\t\t\t\t$rootScope.otherLangUrl = window.location.origin + window.location.pathname + \"?lang=en\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$rootScope.otherLangUrl = window.location.origin + window.location.pathname + search + \"&lang=en\";\n\t\t\t}\n\t\t}\n\t}\n\n\t$scope.$on('$destroy', function () {\n\t\tunwatch();\n\t\tunwatchSession && unwatchSession();\n\t});\n}\n","angular\n .module('AutoPrequal')\n .controller('errorCtrl', errorCtrl);\n\nerrorCtrl.$inject = ['$scope', '$rootScope', '$state', 'SessionFactory', 'DataFactory', 'ErrorFactory', '$timeout'];\n\nfunction errorCtrl($scope, $rootScope, $state, SessionFactory, DataFactory, ErrorFactory, $timeout) {\n SessionFactory.deleteCurrentSession();\n\n if (!$rootScope.isLoaded || !ErrorFactory.error || !ErrorFactory.error.code) {\n $rootScope.currentStep = \"welcome\";\n $state.go('main', { 'hash': 'welcome' });\n return;\n //location.reload()\n }\n\n $rootScope.progressCurrent = 0;\n $rootScope.progressMobCurrent = 0;\n $rootScope.currentStep = 'error';\n $scope.error = ErrorFactory.error;\n\t$scope.content = DataFactory.appData.content.error;\n\tif (ErrorFactory.error.code.indexOf(\"OOW\") > -1) {\n\t\t$scope.title = $rootScope.glContent.errors.attempt_err_msg;\n\t\t$scope.msg = \"\";\n\t\tjQuery(\"h1.notice-fail\").removeClass(\"h3\").addClass(\"h4\");\n\t}\n else if (ErrorFactory.error.code != \"STO\") {\n $scope.title = $scope.content.attention;\n $scope.msg = $scope.error.custom ? $scope.error.desc : $scope.content.generic_msg;\n } else {\n\t\t$scope.title = $scope.content.attention;\n\t\t$scope.msg = $scope.content.timeout;\n }\n $rootScope.forcedLoader = false;\n $timeout(function () {\n //focus on title after animation is done\n $('.notice.fail')[0].focus();\n }, 600)\n\n\n var unlisten = $scope.$on('$locationChangeStart', function (event, next, current) {\n if (!next || next.indexOf('error') === -1) {\n event && event.preventDefault();\n $rootScope.restart();\n unlisten();\n }\n });\n\n $scope.goBack = function () {\n $rootScope.restart();\n }\n}\n","angular\n\t.module('AutoPrequal')\n\t.controller('maintenanceCtrl', maintenanceCtrl);\n\nmaintenanceCtrl.$inject = ['$scope', '$rootScope', 'DataFactory'];\n\nfunction maintenanceCtrl($scope, $rootScope, DataFactory) {\n\t$rootScope.currentStep = 'error';\n\t$rootScope.progressCurrent = 0;\n\t$rootScope.progressMobCurrent = 0;\n\t$scope.content = DataFactory.appData.content.maintenance;\n\n\tif (mtnc_on == \"false\") {\n\t\t$rootScope.restart();\n\t}\n}","(function () {\r\n 'use strict';\r\n angular\r\n .module('AutoPrequal')\r\n //GA Events && GA Pageview\r\n .run(['$rootScope', '$transitions', function ($rootScope, $transitions) {\r\n function getUrlParameter(sParam) {\r\n var sPageURL = decodeURIComponent(window.location.search.substring(1)),\r\n sURLVariables = sPageURL.split('&'),\r\n sParameterName,\r\n i;\r\n\r\n for (i = 0; i < sURLVariables.length; i++) {\r\n sParameterName = sURLVariables[i].split('=');\r\n if (sParameterName[0] === sParam) {\r\n return sParameterName[1] === undefined\r\n ? true\r\n : sParameterName[1];\r\n }\r\n }\r\n };\r\n\r\n\t\t\t$rootScope.ga = {\r\n updateIRSlider: function () {\r\n\t\t\t\t\tgaEvent('Click', 'Results - Update Interest Rate')\r\n\t\t\t\t},\r\n\t\t\t\tupdateLTSlider: function () {\r\n\t\t\t\t\tgaEvent('Click', 'Results - Update Loan Term')\r\n\t\t\t\t},\r\n\t\t\t\tupdateMPSlider: function () {\r\n\t\t\t\t\tgaEvent('Click', 'Results - Update Monthly Payments')\r\n\t\t\t\t},\r\n updateDPSlider: function () {\r\n\t\t\t\t\tgaEvent('Click', 'Results - Update Down Payment')\r\n\t\t\t\t},\r\n\t\t\t\tmakingPaymentsYes: function () {\r\n\t\t\t\t\tgaEvent('Click', 'Trade In Loan Payments - Yes, know balance')\r\n\t\t\t\t},\r\n\t\t\t\tmakingPaymentsUnsure: function () {\r\n\t\t\t\t\tgaEvent('Click', \"Trade In Loan Payments - Yes but don't know balance\")\r\n\t\t\t\t},\r\n\t\t\t\tmakingPaymentsNo: function () {\r\n\t\t\t\t\tgaEvent('Click', 'Trade In Loan Payments - No')\r\n\t\t\t\t},\r\n\t\t\t\tsubmitSuccess: function () {\r\n\t\t\t\t\tgaEvent('Submit', 'Results - Success')\r\n\t\t\t\t},\r\n oowErrors: {\r\n idNotFound: function () {\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"IDV Failure - >1 Fail in 48 Hours\");\r\n },\r\n idNotFound2: function () {\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"IDV Failure - <2 Fails in 48 Hours\");\r\n },\r\n tuServerfail: function (errorCode) {\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"TransUnion - \" + errorCode);\r\n }\r\n },\r\n\t\t\t\tserviceErr: function (errCode, desc) { gaEvent(\"error\", \"error - \" + errCode + \"/\" + desc) },\r\n\t\t\t\terrors: {\r\n\t\t\t\t\tageOfMajority: function () {\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"Birthdate - Under Age of Majority\");\r\n\t\t\t\t\t},\r\n\t\t\t\t\tannualIncome: function(){\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"Annual Income - Less Than $10000\");\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsubmitError: function () {\r\n\t\t\t\t\t\tgaEvent(\"Submit\", \"Results - Decline\");\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttimeout: function () {\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"Timeout - Website\");\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttuError: function (errorCode) {\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"TransUnion - \" + errorCode);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tblackbookError: function (errorCode) {\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"CBB - \" + errorCode);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdescisionError: function (errorCode) {\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"RBC Decision Engine - \" + errorCode);\r\n\t\t\t\t\t},\r\n sessionError: function (errCode, desc) {\r\n\t\t\t\t\t\tgaEvent(\"Error\", \"service-error-session - \" + errCode + \"/\" + desc);\r\n }\r\n }\r\n };\r\n \r\n $rootScope.gaCustEvent = {\r\n tuEndresultSuccess: function () {\r\n gaCustEvent('auto-maat-tool-243', 'Quebec Freeze', 'Everyone else coming through')\r\n },\r\n tuEndresultFreezeSuccess: function () {\r\n gaCustEvent('auto-maat-tool-232', 'Quebec Freeze', 'Exempt - Data with Freeze - Success')\r\n },\r\n oowQFreezeFailure: function () {\r\n gaCustEvent('auto-maat-tool-230', 'Quebec Freeze', 'Non-Exempt - No Data with Freeze - Error')\r\n },\r\n //tuEndresultFailure: function () {\r\n // gaCustEvent('auto-maat-tool-2323', 'Quebec Freeze', 'Error - End Results')\r\n //},\r\n \r\n };\r\n\r\n var gaEvent = function (action, label, category) {\r\n gaEventPush(action, label, category);\r\n }\r\n $rootScope.gaEvent = gaEvent;\r\n\r\n var gaEventPush = function (action, label, category) {\r\n if (!$rootScope.isLoaded && action !== 'Error') return; //ensure session is valid before firing events\r\n var event = {\r\n\t\t\t\t\t\"event\": \"publicAutoCustEvent\",\r\n \"category\": category || \"Auto Finance - Prequal\",\r\n \"action\": action,\r\n \"label\": label\r\n }\r\n dataLayer.push(event);\r\n if (getUrlParameter('debug') === '1') {\r\n console.debug(event, dataLayer);\r\n }\r\n }\r\n \r\n var gaCustEvent = function (id, action, label, category) {\r\n if (!$rootScope.isLoaded && action !== 'Error') return; //ensure session is valid before firing events\r\n var event = {\r\n \"event\": \"publicAutoCustEvent\",\r\n \"data-dig-id\": id,\r\n \"category\": category || \"Auto Finance - Prequal\",\r\n \"action\": action,\r\n \"label\": label\r\n }\r\n dataLayer.push(event);\r\n if (getUrlParameter('debug') === '1') {\r\n console.debug(event, dataLayer);\r\n }\r\n }\r\n\r\n\r\n\r\n var gaPageView = function (vpvPageName, vpvUrl) {\r\n if (!$rootScope.isLoaded) return; //ensure session is valid before firing events\r\n\r\n vpvPageName = \"Auto Finance - Prequal - \" + vpvPageName;\r\n vpvUrl = \"/vpv/autofinance/autoprequal/\" + vpvUrl;\r\n\r\n var pageView = {\r\n\t\t\t\t\t\"event\": \"publicAutoPageview\",\r\n \"vpvName\": vpvPageName,\r\n \"vpvURL\": vpvUrl,\r\n \"language\": $rootScope.lang.toUpperCase(),\r\n \"pageType\": \"Tool\"\r\n };\r\n dataLayer.push(pageView);\r\n if (getUrlParameter('debug') === '1') {\r\n console.debug('pageView', pageView, dataLayer);\r\n }\r\n }\r\n $rootScope.gaPageView = {\r\n\t\t\t\t\"oow\": function () { gaPageView(\"Out of Wallet\", \"out-of-wallet\") }\r\n }\r\n\r\n $transitions.onSuccess({}, function ($transition) {\r\n //listen to state change to handle gtm page view\r\n if (!$transition.$to()) return;\r\n switch ($transition.$to().name) {\r\n case 'main':\r\n if (!$transition.params().hash) return;\r\n switch ($transition.params().hash) {\r\n case 'welcome':\r\n gaPageView(\"Start\", \"start\");\r\n break;\r\n case 'applicantName':\r\n gaPageView(\"Name\", \"name\");\r\n break;\r\n case 'applicantContact':\r\n gaPageView(\"Email\", \"email\");\r\n break;\r\n case 'birthdayMonth':\r\n gaPageView(\"Birthday Month\", \"birthday-month\");\r\n break;\r\n case 'birthdayDay':\r\n gaPageView(\"Birthday Day\", \"birthday-day\");\r\n break;\r\n case 'birthdayYear':\r\n gaPageView(\"Birthday Year\", \"birthday-year\");\r\n break;\r\n case 'applicantAddress':\r\n gaPageView(\"Address\", \"address\");\r\n break;\r\n case 'applicantIncome':\r\n gaPageView(\"Annual Income\", \"income\");\r\n break;\r\n case 'applicantMortgage':\r\n gaPageView(\"Rent or Mortgage Payment\", \"rent-mortgage\");\r\n break;\r\n case 'reviewTerms':\r\n gaPageView(\"Terms and Conditions\", \"terms\");\r\n break;\r\n case 'tradein':\r\n gaPageView(\"Vehicle Trade-in\", \"vehicle-trade-in\");\r\n break;\r\n case 'tradeinHelp':\r\n gaPageView(\"Help Assess Trade-In Value\", \"help-assess-trade-in\");\r\n break;\r\n case 'tradeinDetails':\r\n gaPageView(\"Trade-In Info\", \"trade-in-info\");\r\n break;\r\n case 'tradeinEstimate':\r\n gaPageView(\"Trade-In Estimate\", \"trade-in-estimate\");\r\n break;\r\n case 'tradeinPayments':\r\n gaPageView(\"Trade-In Loan Payments\", \"trade-in-loan-payment\");\r\n break;\r\n case 'downPayment':\r\n gaPageView(\"Downpayment\", \"downpayment\");\r\n break;\r\n }\r\n break;\r\n case 'results':\r\n gaPageView(\"results\", \"Results\");\r\n break;\r\n case 'error':\r\n break;\r\n case 'maintenance':\r\n break;\r\n }\r\n });\r\n }])\r\n})();\r\n\r\n","(function () {\n\n\t'use strict';\n\t/**\n\t * @ngdoc directive\n\t * @name mpaApp.ValidateDirective\n\t * @description\n\t * # ValidateDirective\n\t * Directive in the mpaApp.\n\t */\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.service('LoadingInterceptor', ['$q', '$rootScope', '$log', function ($q, $rootScope, $log) {\n\t\t\t'use strict';\n\n\t\t\tvar xhrCreations = 0;\n\t\t\tvar xhrResolutions = 0;\n\n\t\t\tfunction isLoading() {\n\t\t\t\treturn xhrResolutions < xhrCreations;\n\t\t\t}\n\n\t\t\tfunction updateStatus() {\n\t\t\t\t$rootScope.loading = isLoading();\n\t\t\t\tif (!isLoading()) {\n\t\t\t\t\t$rootScope.showLoader = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\trequest: function (config) {\n\t\t\t\t\t//exception for branch location\n\t\t\t\t\txhrCreations++;\n\n\t\t\t\t\tif (config.url !== \"/cgi-bin/common-ws/rbcServices_v1/service.cgi/branchlocator/alternate\") {\n\t\t\t\t\t\tupdateStatus();\n\t\t\t\t\t}\n\t\t\t\t\tif (config.url === baseUrl + \"api/OOW/question\" || config.url === baseUrl + \"api/OOW/answer\" || config.url === baseUrl + \"api/submit/post\" || config.url === baseUrl + \"api/consent/post\") {\n\t\t\t\t\t\t$rootScope.showLoader = true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn config;\n\t\t\t\t},\n\t\t\t\trequestError: function (rejection) {\n\t\t\t\t\txhrResolutions++;\n\t\t\t\t\tupdateStatus();\n\t\t\t\t\t$log.error('Request error:', rejection);\n\t\t\t\t\treturn $q.reject(rejection);\n\t\t\t\t},\n\t\t\t\tresponse: function (response) {\n\t\t\t\t\txhrResolutions++;\n\t\t\t\t\tupdateStatus();\n\t\t\t\t\treturn response;\n\t\t\t\t},\n\t\t\t\tresponseError: function (rejection) {\n\t\t\t\t\txhrResolutions++;\n\t\t\t\t\tupdateStatus();\n\t\t\t\t\t$log.error('Response error:', rejection);\n\t\t\t\t\treturn $q.reject(rejection);\n\t\t\t\t}\n\t\t\t};\n\t\t}]);\n})();\n","(function () {\n\n\t'use strict';\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.service('GoogleInitializer', ['$q', '$rootScope', '$window', function ($q, $rootScope, $window) {\n\t\t\t'use strict';\n\n\t\t\tvar urlBase = \"https://maps.googleapis.com/maps/api/js?libraries=places&callback=googleMapsInitialized\";\n\t\t\tvar deferred = null;\n\t\t\treturn {\n\t\t\t\tgetReadyPromise: function () {\n\t\t\t\t\tif ($window.google != undefined && $window.google.maps) return $q.resolve();\n\t\t\t\t\tif (deferred) return deferred.promise;\n\t\t\t\t\tdeferred = $q.defer();\n\t\t\t\t\t$window.googleMapsInitialized = function () {\n\t\t\t\t\t\tdeferred.resolve(\"googleMaps loaded\");\n\t\t\t\t\t\tdeferred = null;\n\t\t\t\t\t};\n\t\t\t\t\tvar config = $rootScope.glConfig;\n\t\t\t\t\tvar lang;\n\t\t\t\t\tif (window.locale === 'fr') {\n\t\t\t\t\t\tlang = \"&language=fr-CA\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlang = \"&language=en\";\n\t\t\t\t\t}\n\n\t\t\t\t\tvar script = document.createElement('script');\n\t\t\t\t\tscript.type = 'text/javascript';\n\t\t\t\t\tscript.src = urlBase + \"&client=gme-cment\" + lang;\n\t\t\t\t\tdocument.body.appendChild(script);\n\t\t\t\t\treturn deferred.promise;\n\t\t\t\t}\n\t\t\t}\n\t\t}]);\n})();\n","(function () {\n\n 'use strict';\n\n angular\n .module('AutoPrequal')\n .factory('DataFactory', DataFactory);\n\n DataFactory.$inject = ['$rootScope', '$q', 'SessionFactory'];\n\n function DataFactory($rootScope, $q, SessionFactory) {\n\n function setData(data) {\n if ($rootScope.validatingAllSteps) return;\n $.extend(true, dataFactory.appData.applicant, data);\n if (env == \"DEV\") {\n console.log(dataFactory.appData, data);\n }\n var deferred = $q.defer();\n SessionFactory.updateCurrentSession(dataFactory.appData.applicant)\n .then(function (response) {\n deferred.resolve(response)\n })\n return deferred.promise;\n };\n\n var dataFactory = {\n\n setData: setData,\n appData: {\n \"application\": {\n\n },\n \"applicant\": {\n \"appState\": {\n \"welcome\": false,\n \"applicantName\": false,\n\t\t\t\t\t\t\"applicantContact\": false,\n\t\t\t\t\t\t\"applicantAddress\": false,\n \"birthdayMonth\": false,\n \"birthdayDay\": false,\n\t\t\t\t\t\t\"birthdayYear\": false,\n\t\t\t\t\t\t\"applicantIncome\": false,\n\t\t\t\t\t\t\"applicantMortgage\": false,\n \"reviewTerms\": false,\n \"tradein\": false,\n\t\t\t\t\t\t\"tradeinHelp\": false,\n\t\t\t\t\t\t\"tradeinDetails\": false,\n\t\t\t\t\t\t\"tradeinEstimate\": false,\n\t\t\t\t\t\t\"tradeinPayments\": false,\n\t\t\t\t\t\t\"downPayment\": false,\n \"results\": false\n }\n },\n \"content\": {\n\n },\n \"state\": {\n\n },\n \"submit\": {\n\n }\n }\n };\n\n return dataFactory;\n };\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.factory('ErrorFactory', ErrorFactory);\n\n\tErrorFactory.$inject = ['$rootScope', '$state']\n\n\tfunction ErrorFactory($rootScope, $state) {\n\n\t\tvar error = {};\n\n\t\tfunction errorPage(errorCode, lang, description, content, custom_msg) {\n\t\t\tcontent = typeof content !== \"undefined\" ? content : \"\";\n\n\t\t\t$rootScope.currentStep = 'error';\n\t\t\tErrorFactory.error = {\n\t\t\t\tcode: errorCode,\n\t\t\t\tlang: lang,\n\t\t\t\tdesc: description,\n\t\t\t\tcontent: content,\n\t\t\t\tcustom: custom_msg\n\t\t\t};\n\t\t\tif ($rootScope.ga) {\n\t\t\t\t$rootScope.ga.serviceErr(errorCode, description);\n\t\t\t}\n\t\t\t$state.go('error');\n\t\t}\n\n\t\tfunction timeout() {\n\t\t\terrorPage(\"STO\");\n\t\t}\n\n\t\tvar ErrorFactory = {\n\t\t\terrorPage: errorPage,\n\t\t\terror: error,\n\t\t\ttimeout: timeout\n\t\t}\n\n\t\treturn ErrorFactory;\n\n\t};\n\n})();\n","angular\n\t.module('AutoPrequal')\n\t.factory('httpRequestInterceptor', function () {\n\treturn {\n\t\trequest: function (config) {\n\t\t\tvar _req_verf_token = $('input[name=\"__RequestVerificationToken\"]').val();\n\t\t\tconfig.headers['X-XSRF-Token'] = _req_verf_token;\n\t\t\treturn config;\n\t\t}\n\t};\n});","(function () {\n\n 'use strict';\n\n angular\n .module('AutoPrequal')\n .factory('ImageFactory', ImageFactory);\n\n ImageFactory.$inject = ['$rootScope'];\n\n function ImageFactory($rootScope) {\n\t\tfunction drawAddrImages() {\n\t\t\tvar input;\n\t\t\tif ($rootScope.name) {\n\t\t\t\tinput = $rootScope.name;\n\t\t\t}\n\n\t\t\tif (!input) input = \"\";\n\n\t\t\t/// The outside wrapper div\n\t\t\tvar canvasWrapper = $('.container-left');\n\t\t\t// Get wrapper's width & height\n\t\t\tvar cw = canvasWrapper[0].clientWidth;\n\t\t\tvar ch = canvasWrapper[0].clientHeight;\n\t\t\tvar widthFactor = cw / input.length;\n\n\t\t\t/// Assume image always fills the whole wrapper, so we don't need to set its width and height\n\t\t\t/// The overlay canvas\n\t\t\tvar canvas = document.getElementById(\"name-name-overlay\");\n\t\t\t// Set canvas to be same width & height as the wrapper\n\t\t\tcanvas.width = cw;\n\t\t\tcanvas.height = ch;\n\n\t\t\t/// Computation\n\t\t\tvar relativeFontSize, rx, ry, x, y, nameLen = input.length;\n\n\t\t\tif (window.innerWidth > 1000 && nameLen < 6) {\n\t\t\t\trelativeFontSize = 100;\n\t\t\t}\n\t\t\telse if (window.innerWidth < 380) {\n\t\t\t\trelativeFontSize = Math.floor(0.2 * Math.pow(nameLen, 2) - 7.7605 * nameLen + 90.51);\n\t\t\t}\n\t\t\telse if (window.innerWidth < 769) {\n\t\t\t\trelativeFontSize = Math.floor(0.2819 * Math.pow(nameLen, 2) - 10.359 * nameLen + 115.44);\n\t\t\t}\n\t\t\telse relativeFontSize = Math.floor(-0.0073 * Math.pow(widthFactor, 2) + 1.8223 * widthFactor - 10.437);\n\t\t\trx = 0.5; // Relative position on canvas, X axis\n\t\t\try = 0.5; // Relative position on canvas, Y axis\n\n\t\t\tx = rx * cw;\n\t\t\ty = ry * ch;\n\n\t\t\t/// Drawing \n\t\t\tvar ctx = canvas.getContext(\"2d\");\n\t\t\t// Erase the canvas before a new drawing\n\t\t\tctx.clearRect(0, 0, canvas.width, canvas.height);\n\t\t\tctx.font = \"normal \" + relativeFontSize + \"px Arial\";\n\t\t\tctx.fillStyle = \"white\";\n\t\t\tctx.textAlign = \"center\";\n\t\t\tctx.textBaseline = \"middle\";\n\t\t\tctx.fillText(input, x, y);\n\t\t}\n\n var imageFactory = {\n drawAddrImages: drawAddrImages\n };\n\n return imageFactory;\n };\n\n})();","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.factory('LocalizationFactory', LocalizationFactory);\n\n\tLocalizationFactory.$inject = ['$q', '$http', 'ErrorFactory'];\n\n\tfunction LocalizationFactory($q, $http, ErrorFactory) {\n\n\t\tfunction getContent(lang) {\n\t\t\tvar deferred = $q.defer();\n\t\t\t$http({\n\t\t\t\tmethod: 'GET',\n\t\t\t\turl: baseUrl + 'root/app/content/' + lang + '.json'\n\t\t\t}).then(function (response) {\n\n\t\t\t\tdeferred.resolve(response.data);\n\n\t\t\t}, function (httpError) {\n\t\t\t\tErrorFactory.errorPage(\"LOC-\" + httpError, lang, \"Localization content failed to load\", httpError);\n\t\t\t})\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tfunction mapFrChar(str) {\n\t\t\tif (str) {\n\t\t\t\tstr = str.replace(/[ÁÀÂÄ]/g, \"A\");\n\t\t\t\tstr = str.replace(/[áàâä]/g, \"a\");\n\t\t\t\tstr = str.replace(/[ÈÉÊË]/g, \"E\");\n\t\t\t\tstr = str.replace(/[èéêë]/g, \"e\");\n\t\t\t\tstr = str.replace(/[ÍÎÏÌ]/g, \"I\");\n\t\t\t\tstr = str.replace(/[íîïì]/g, \"i\");\n\t\t\t\tstr = str.replace(/[ÓÒÔ]/g, \"O\");\n\t\t\t\tstr = str.replace(/[óòô]/g, \"o\");\n\t\t\t\tstr = str.replace(/[ÚÙÛÜ]/g, \"U\");\n\t\t\t\tstr = str.replace(/[úùûü]/g, \"u\");\n\t\t\t\tstr = str.replace(/[Ÿ]/g, \"Y\");\n\t\t\t\tstr = str.replace(/[ÿ]/g, \"y\");\n\t\t\t\tstr = str.replace(/[Ç]/g, \"C\");\n\t\t\t\tstr = str.replace(/[ç]/g, \"c\");\n\t\t\t}\n\t\t\treturn str;\n\t\t}\n\n\t\tvar LocalizationFactory = {\n\t\t\tgetContent: getContent,\n\t\t\tmapFrChar: mapFrChar,\n\t\t\tappContent: {}\n\t\t};\n\n\t\treturn LocalizationFactory;\n\t};\n\n})();\n","(function () {\n\n 'use strict';\n\n angular\n .module('AutoPrequal')\n .factory('ScrollFactory', ScrollFactory);\n\n ScrollFactory.$inject = ['$rootScope', '$timeout', '$state'];\n\n function ScrollFactory($rootScope, $timeout, $state) {\n\n /* order matters */\n var steps = [\n {\n \"name\": \"welcome\",\n \"url\": baseUrl + \"root/app/views/welcome.html\",\n \"display\": true,\n \"scroll_hint\": false,\n \"cssClass\": \"active\",\n \"overflowing\": false,\n \"title\": \"Welcome\",\n \"titleFr\": \"Page d’accueil\"\n },\n {\n \"name\": \"applicantName\",\n \"url\": baseUrl + \"root/app/views/applicantName.html\",\n \"display\": false,\n \"scroll_hint\": true,\n \"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": \"Tell us about yourself\",\n \"titleFr\": \"Parlez-nous de vous\"\n },\n {\n \"name\": \"applicantContact\",\n \"url\": baseUrl + \"root/app/views/applicantContact.html\",\n \"display\": false,\n \"scroll_hint\": true,\n \"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": \"How can we reach you?\",\n \"titleFr\": \"Comment pouvons-nous vous joindre ?\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"applicantAddress\",\n\t\t\t\t\"url\": baseUrl + \"root/app/views/applicantAddress.html\",\n\t\t\t\t\"display\": false,\n\t\t\t\t\"scroll_hint\": false,\n\t\t\t\t\"cssClass\": \"\",\n\t\t\t\t\"overflowing\": false,\n\t\t\t\t\"title\": 'Where do you live?',\n\t\t\t\t\"titleFr\": 'Où habitez-vous ?'\n\t\t\t},\n {\n \"name\": \"birthdayMonth\",\n \"url\": baseUrl + \"root/app/views/birthdayMonth.html\",\n \"display\": false,\n \"scroll_hint\": false,\n \"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": 'Birthday Date - Month',\n \"titleFr\": 'Mois'\n },\n {\n \"name\": \"birthdayDay\",\n \"url\": baseUrl + \"root/app/views/birthdayDay.html\",\n \"display\": false,\n \"scroll_hint\": false,\n \"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": 'Birthday Date - Day',\n \"titleFr\": 'Jour'\n },\n {\n \"name\": \"birthdayYear\",\n \"url\": baseUrl + \"root/app/views/birthdayYear.html\",\n \"display\": false,\n \"scroll_hint\": false,\n \"overflowing\": false,\n \"title\": 'Birthday Date - Year',\n \"titleFr\": 'Année'\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"applicantIncome\",\n\t\t\t\t\"url\": baseUrl + \"root/app/views/applicantIncome.html\",\n\t\t\t\t\"display\": false,\n\t\t\t\t\"scroll_hint\": false,\n\t\t\t\t\"cssClass\": \"\",\n\t\t\t\t\"overflowing\": false,\n\t\t\t\t\"title\": 'Gross income',\n\t\t\t\t\"titleFr\": 'Revenu annuel brut'\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"applicantMortgage\",\n\t\t\t\t\"url\": baseUrl + \"root/app/views/applicantMortgage.html\",\n\t\t\t\t\"display\": false,\n\t\t\t\t\"scroll_hint\": false,\n\t\t\t\t\"cssClass\": \"\",\n\t\t\t\t\"overflowing\": false,\n\t\t\t\t\"title\": 'Monthly rent or mortgage',\n\t\t\t\t\"titleFr\": 'Loyer ou versement hypothécaire mensuel'\n\t\t\t},\n {\n \"name\": \"reviewTerms\",\n \"url\": baseUrl + \"root/app/views/reviewTerms.html\",\n \"display\": false,\n \"scroll_hint\": false,\n \"overflowing\": false,\n \"title\": 'Terms and Conditions',\n \"titleFr\": 'Conditions'\n },\n {\n \"name\": \"tradein\",\n \"url\": baseUrl + \"root/app/views/tradein.html\",\n \"display\": false,\n \"scroll_hint\": false,\n \"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": \"Do you have a vehicle to trade in?\",\n\t\t\t\t\"titleFr\": \"Avez-vous un véhicule d’échange ?\"\n },\n {\n \"name\": \"tradeinHelp\",\n \"url\": baseUrl + \"root/app/views/tradeinHelp.html\",\n \"display\": false,\n \"scroll_hint\": false,\n \"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": \"Do you need help assessing your trade-in value?\",\n\t\t\t\t\"titleFr\": \"Avez-vous besoin d’aide pour estimer la valeur de reprise de votre véhicule ?\"\n },\n {\n \"name\": \"tradeinDetails\",\n\t\t\t\t\"url\": baseUrl + \"root/app/views/tradeinDetails.html\",\n \"display\": false,\n \"scroll_hint\": false,\n \"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": \"Let's assess the value of your vehicle\",\n\t\t\t\t\"titleFr\": \"Estimons la valeur de votre véhicule\"\n },\n {\n \"name\": \"tradeinEstimate\",\n\t\t\t\t\"url\": baseUrl + \"root/app/views/tradeinEstimate.html\",\n \"display\": false,\n \"scroll_hint\": false,\n \"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": 'Your Trade-in value',\n\t\t\t\t\"titleFr\": 'La valeur de reprise de votre véhicule'\n },\n {\n \"name\": \"tradeinPayments\",\n \"url\": baseUrl + \"root/app/views/tradeinPayments.html\",\n \"display\": false,\n \"scroll_hint\": false,\n \"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": \"Trade-in loan payments\",\n\t\t\t\t\"titleFr\": \"Versements au titre du prêt du véhicule\"\n },\n {\n \"name\": \"downPayment\",\n\t\t\t\t\"url\": baseUrl + \"root/app/views/downPayment.html\",\n \"display\": false,\n\t\t\t\t\"scroll_hint\": false,\n\t\t\t\t\"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": \"What's your down payment?\",\n\t\t\t\t\"titleFr\": \"Quel est le montant de votre mise de fonds ?\"\n },\n {\n \"name\": \"results\",\n \"url\": baseUrl + \"root/app/views/results.html\",\n \"display\": false,\n\t\t\t\t\"scroll_hint\": false,\n\t\t\t\t\"cssClass\": \"\",\n \"overflowing\": false,\n \"title\": 'Results',\n \"titleFr\": 'Résultat'\n }\n ];\n\n var removedSteps = [];\n\n function showStep(stepName) {\n $timeout(function () {\n steps[stepNameToNo(stepName)].display = true;\n })\n };\n\n function hideStep(stepName, wait) {\n if (wait) {\n $timeout(function () {\n steps[stepNameToNo(stepName)].display = false;\n }, wait);\n } else {\n steps[stepNameToNo(stepName)].display = false;\n }\n };\n\n function hideOtherSteps(stepNameToShow) {\n angular.forEach(steps, function (stepName, index) {\n if (steps[stepNameToNo(stepNameToShow)] !== steps[index]) {\n steps[index].display = false;\n }\n })\n }\n\n function removeStep(stepName) {\n try {\n var stepToRemove = steps[stepNameToNo(stepName)]\n stepToRemove.index = stepNameToNo(stepName)\n removedSteps.unshift(stepToRemove)\n steps.splice(stepNameToNo(stepName), 1);\n }\n catch (e) { }\n }\n\n function readdStep(stepName, afterStep) {\n try {\n var stepToReadd = removedSteps[removedStepNameToNo(stepName)];\n steps.splice(stepNameToNo(afterStep) + 1, 0, stepToReadd)\n removedSteps.splice(removedStepNameToNo(stepName), 1);\n }\n catch (e) { }\n }\n\n function setClass(stepNo, cssClass) {\n steps[stepNo].cssClass = cssClass;\n };\n\n function goToStep(stepName, duration) {\n duration = typeof duration !== 'undefined' ? duration : 1000;\n if ($(window).width() > 769) {\n $('section.' + $rootScope.currentStep).addClass('inactive');\n }\n $rootScope.scrolling = true;\n $timeout(function () {\n $rootScope.scrolling = true;\n $rootScope.snapIndex = stepNameToNo(stepName);\n steps[$rootScope.snapIndex].cssClass = steps[$rootScope.snapIndex].cssClass + \" active\";\n if ($(window).width() > 769) {\n $(\"section.\" + stepName).velocity(\"scroll\", {\n container: $('.container-right'),\n duration: duration,\n easing: \"easeOutQuad\",\n complete: function (el) {\n if ($rootScope.snapIndex > 0) {\n steps[$rootScope.snapIndex - 1].cssClass = steps[$rootScope.snapIndex - 1].cssClass ? steps[$rootScope.snapIndex - 1].cssClass.replace(/\\s?active/, \"\") : \"\";\n }\n if ($rootScope.currentStep !== \"productError\" && $rootScope.currentStep !== \"error\" && $rootScope.currentStep !== \"maintenance\") $rootScope.currentStep = stepName;\n $state.go('.', { hash: $rootScope.currentStep })\n $rootScope.scrolling = false;\n }\n });\n }\n else {\n if ($rootScope.snapIndex > 0) {\n steps[$rootScope.snapIndex - 1].cssClass = steps[$rootScope.snapIndex - 1].cssClass ? steps[$rootScope.snapIndex - 1].cssClass.replace(/\\s?active/, \"\") : \"\";\n }\n if ($rootScope.currentStep !== \"productError\" && $rootScope.currentStep !== \"error\" && $rootScope.currentStep !== \"maintenance\") $rootScope.currentStep = stepName;\n $state.go('.', { hash: $rootScope.currentStep })\n $rootScope.scrolling = false;\n }\n });\n };\n\n function setActive(stepName) {\n var step = stepNameToNo(stepName);\n for (var i = 0; i < steps.length; i++) {\n if (steps[i].cssClass) {\n steps[i].cssClass = steps[i].cssClass.replace(/\\s?active/, \"\");\n }\n }\n steps[step].cssClass = steps[step].cssClass + \" active\";\n }\n\n function stepNameToNo(stepName) {\n var indexes = $.map(steps, function (obj, index) {\n if (obj.name == stepName) {\n return index;\n }\n });\n return indexes[0];\n }\n\n function removedStepNameToNo(stepName) {\n var indexes = $.map(removedSteps, function (obj, index) {\n if (obj.name == stepName) {\n return index;\n }\n });\n return indexes[0];\n }\n\n function stepNoToName(stepNo) {\n return steps[stepNo].name;\n };\n\n function lastVisibleStep(stepName) {\n var stepNo = stepNameToNo(stepName);\n for (var i = steps.length - 1; i > stepNo; i = i - 1) {\n steps[i].display = false;\n }\n };\n\n function getLastStep() {\n for (var i = steps.length - 1; i >= 0; i--) {\n if (steps[i].display) return steps[i].name;\n }\n }\n\n function getPrevStep(currentStep) {\n var currentNum = stepNameToNo(currentStep);\n while (--currentNum > 0) {\n if (steps[currentNum].display) break;\n }\n return stepNoToName(currentNum);\n }\n\n var scrollFactory = {\n \"showStep\": showStep,\n \"hideStep\": hideStep,\n \"setClass\": setClass,\n \"goToStep\": goToStep,\n \"removeStep\": removeStep,\n \"readdStep\": readdStep,\n \"stepNoToName\": stepNoToName,\n \"stepNameToNo\": stepNameToNo,\n \"lastVisibleStep\": lastVisibleStep,\n \"setActive\": setActive,\n \"steps\": steps,\n \"getLastStep\": getLastStep,\n \"getPrevStep\": getPrevStep,\n \"hideOtherSteps\": hideOtherSteps\n };\n\n return scrollFactory;\n\n };\n\n})();\n","(function () {\r\n\r\n\t'use strict';\r\n\r\n\tangular\r\n\t\t.module('AutoPrequal')\r\n\t\t.factory('SessionFactory', session);\r\n\r\n\tsession.$inject = ['$q', '$http', '$injector', '$rootScope', 'ErrorFactory'];\r\n\r\n\tfunction session($q, $http, $injector, $rootScope, ErrorFactory) {\r\n\r\n\t\tvar lang = \"en\";\r\n\t\tvar sessionId = \"\";\r\n\r\n\t\tvar sessionFactory = {\r\n\t\t\tgetCurrentSession: getCurrentSession,\r\n\t\t\tcreateSession: createSession,\r\n\t\t\tupdateCurrentSession: updateCurrentSession,\r\n\t\t\tretrieveCurrentSession: retrieveCurrentSession,\r\n\t\t\tdeleteCurrentSession: deleteCurrentSession,\r\n\t\t\tsession: {},\r\n\t\t\tsessionId: sessionId\r\n\t\t};\r\n\r\n\t\treturn sessionFactory;\r\n\r\n\t\t// getCurrentSession - create session id\r\n\t\tfunction getCurrentSession() {\r\n\t\t\tif (sessionStorage.getItem('lang') !== incoming_lang) sessionStorage.removeItem('sid');\r\n\t\t\tif (sessionStorage.getItem('sidTimeout') && sessionStorage.getItem('sidTimeout') < new Date().getTime()) sessionStorage.removeItem('sid');\r\n\t\t\tsessionFactory.sessionId = sessionStorage.getItem('sid');\r\n\t\t\tif (!sessionFactory.sessionId) {\r\n\t\t\t\tErrorFactory.timeout();\r\n\t\t\t}\r\n\t\t\t$injector.get('DataFactory').appData.applicant.sessionId = sessionFactory.sessionId;\r\n\t\t\treturn sessionFactory.sessionId;\r\n\t\t};\r\n\r\n\t\tfunction createSession(model) {\r\n\t\t\tmodel.lang = incoming_lang;\r\n\t\t\tif (env == \"DEV\") {\r\n\t\t\t\tconsole.log(\"createSession\", model);\r\n\t\t\t}\r\n\t\t\tmodel = JSON.stringify(model);\r\n\t\t\tvar reqDataString = JSON.stringify({\r\n\t\t\t\t'data': model,\r\n\t\t\t});\r\n\t\t\tvar deferred = $q.defer();\r\n\t\t\t$http({\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\turl: baseUrl + \"api/session/createsession\",\r\n\t\t\t\tdata: reqDataString\r\n\t\t\t}).then(function (response) {\r\n\t\t\t\tvar data;\r\n\t\t\t\ttry { data = JSON.parse(response.data); }\r\n\t\t\t\tcatch (e) { data = response.data };\r\n\t\t\t\tif (data['result_code'] === \"0\") {\r\n\t\t\t\t\tsessionFactory.sessionId = data.result_content.session_id;\r\n\t\t\t\t\t$injector.get('DataFactory').appData.applicant.sessionId = sessionFactory.sessionId;\r\n\t\t\t\t\tsessionStorage.setItem('lang', incoming_lang);\r\n\t\t\t\t\tsessionStorage.setItem('sid', sessionFactory.sessionId);\r\n\t\t\t\t\tsessionStorage.setItem('sidTimeout', new Date().getTime() + (19 * 60000));\r\n\r\n\t\t\t\t\tvar sessionData = JSON.parse(model);\r\n\t\t\t\t\tsessionData.appState = $injector.get('DataFactory').appData.applicant.appState;\r\n\t\t\t\t\t$injector.get('DataFactory').appData.applicant = sessionData;\r\n\t\t\t\t\tdeferred.resolve(sessionData);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tErrorFactory.errorPage(data['result_code'], \"en\", \"Session create failed with response code error\", data['result_content']);\r\n\t\t\t\t\t$rootScope.ga.errors.sessionError(data['result_code'], \"Session create failed with response code error\");\r\n\t\t\t\t}\r\n\t\t\t}, function (httpError) {\r\n\t\t\t\tif (httpError.status) {\r\n\t\t\t\t\tErrorFactory.errorPage(\"SCE-\" + httpError.status, \"en\", \"Session create failed\", \"Session create failed with http status code error\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tErrorFactory.errorPage(\"SCU\", \"en\", \"Session create failed\", \"Session create failed with unexpected error\");\r\n\t\t\t\t}\r\n\t\t\t\tdeferred.reject(httpError)\r\n\t\t\t})\r\n\t\t\treturn deferred.promise;\r\n\t\t}\r\n\r\n\t\t// retrieveCurrentSession - retrieve session data with id\r\n\t\tfunction retrieveCurrentSession() {\r\n\t\t\tvar sid = getCurrentSession();\r\n\t\t\tif (!sid) return $q.reject();\r\n\t\t\tvar reqDataString = JSON.stringify({\r\n\t\t\t\t'session_id': sid,\r\n\t\t\t});\r\n\t\t\tvar deferred = $q.defer();\r\n\t\t\t$http({\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\turl: baseUrl + \"api/session/retrievesession\",\r\n\t\t\t\tdata: reqDataString\r\n\t\t\t}).then(function (response) {\r\n\t\t\t\tvar data;\r\n\t\t\t\ttry { data = JSON.parse(response.data); }\r\n\t\t\t\tcatch (e) { data = response.data };\r\n\t\t\t\tif (data['result_code'] === \"0\") {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tvar result_content = JSON.parse(data.result_content.data);\r\n\t\t\t\t\t\tif (env == \"DEV\") {\r\n\t\t\t\t\t\t\tconsole.log(\"retrieveCurrentSession\", result_content);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!result_content.appState) result_content.appState = $injector.get('DataFactory').appData.applicant.appState;\r\n\t\t\t\t\t\t$injector.get('DataFactory').appData.applicant = result_content;\r\n\t\t\t\t\t\tdeferred.resolve(data);\r\n\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tErrorFactory.errorPage(\"SRN\", 'en', 'Session retrieve data null', data['result_content']);\r\n\t\t\t\t\t\t$rootScope.ga.errors.sessionError(\"SRN\", \"Session retrieve data null\");\r\n\t\t\t\t\t\tdeferred.reject(data)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tErrorFactory.errorPage(data['result_code'], \"en\", \"Session retrieve failed with response code error\", data['result_content']);\r\n\t\t\t\t\t$rootScope.ga.errors.sessionError(data['result_code'], \"Session retrieve failed with response code error\");\r\n\t\t\t\t\tdeferred.reject(data['result_code'])\r\n\t\t\t\t}\r\n\t\t\t}, function (httpError) {\r\n\t\t\t\tif (httpError.status) {\r\n\t\t\t\t\tErrorFactory.errorPage(\"SRE-\" + httpError.status, \"en\", \"Session retrieve failed\", \"Session retrieve failed with http status code error\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tErrorFactory.errorPage(\"SRU\", \"en\", \"Session retrieve failed\", \"Session retrieve failed with unexpected error\");\r\n\t\t\t\t}\r\n\t\t\t\tdeferred.reject(httpError)\r\n\t\t\t})\r\n\t\t\treturn deferred.promise;\r\n\t\t};\r\n\r\n\t\t// updateCurrentSession - update session with app data\r\n\t\tfunction updateCurrentSession(appData) {\r\n\t\t\tvar sid = getCurrentSession();\r\n\t\t\tif (!sid) return $q.reject();\r\n\t\t\tvar reqDataString = JSON.stringify({\r\n\t\t\t\t'session_id': sid,\r\n\t\t\t\t'data': JSON.stringify(appData)\r\n\t\t\t});\r\n\t\t\tif (env == \"DEV\") {\r\n\t\t\t\tconsole.log(\"updateCurrentSession\", appData);\r\n\t\t\t}\r\n\t\t\tvar deferred = $q.defer();\r\n\t\t\t$http({\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\turl: baseUrl + \"api/session/updatesession\",\r\n\t\t\t\tdata: reqDataString\r\n\t\t\t}).then(function (response) {\r\n\t\t\t\tvar data;\r\n\t\t\t\ttry { data = JSON.parse(response.data); }\r\n\t\t\t\tcatch (e) { data = response.data };\r\n\t\t\t\tif (data['result_code'] == \"0\") {\r\n\t\t\t\t\tdeferred.resolve(data);\r\n\t\t\t\t}\r\n\t\t\t\telse if (data['result_code'] == '300') {\r\n\t\t\t\t\tErrorFactory.timeout();\r\n\t\t\t\t\t$rootScope.ga.errors.timeout();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tErrorFactory.errorPage(data['result_code'], lang, \"Session update failed with response code error\", data['result_content']);\r\n\t\t\t\t\t$rootScope.ga.errors.sessionError(data['result_code'], \"Session update failed with response code error\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}, function (httpError) {\r\n\t\t\t\tif (httpError.status) {\r\n\t\t\t\t\tErrorFactory.errorPage(\"SUE-\" + httpError.status, lang, \"Session update failed with http status code error\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tErrorFactory.errorPage(\"SUU\", lang, \"Session update failed with unexpected error\");\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\treturn deferred.promise;\r\n\t\t};\r\n\r\n\t\t// deleteCurrentSession - delete session\r\n\t\tfunction deleteCurrentSession() {\r\n\t\t\tif (!sessionFactory.sessionId) sessionFactory.sessionId = sessionStorage.getItem('sid');\r\n\t\t\tsessionStorage.removeItem('sid');\r\n\t\t\tsessionStorage.removeItem('pid');\r\n\t\t\tsessionStorage.removeItem('asc');\r\n\t\t\tsessionStorage.removeItem('lang');\r\n\t\t\tsessionStorage.removeItem('sidTimeout')\r\n\t\t\t$rootScope.appCompleted = false;\r\n\t\t\tvar deferred = $q.defer();\r\n\t\t\tif (sessionFactory.sessionId) {\r\n\t\t\t\tvar reqDataString = JSON.stringify({\r\n\t\t\t\t\t'session_id': sessionFactory.sessionId\r\n\t\t\t\t});\r\n\t\t\t\tsessionFactory.sessionId = null;\r\n\t\t\t\t$http({\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\turl: baseUrl + \"api/session/deletesession\",\r\n\t\t\t\t\tdata: reqDataString\r\n\t\t\t\t}).then(function (response) {\r\n\t\t\t\t\tvar data = JSON.parse(response.data);\r\n\t\t\t\t\tif (data['result_code'] == '0') {\r\n\t\t\t\t\t\tdeferred.resolve(data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tdeferred.reject(data);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, function (httpError) {\r\n\t\t\t\t\tif (httpError.status) {\r\n\t\t\t\t\t\t//console.log(\"SDE-\"+httpError.status, lang, \"Session delete failed with http status code error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t//console.log(\"SDU\", lang, \"Session delete failed with unexpected 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\tdeferred.resolve();\r\n\t\t\t}\r\n\t\t\treturn deferred.promise;\r\n\t\t};\r\n\r\n\t};\r\n\r\n})();\r\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.factory('SubmitFactory', submit);\n\n\tsubmit.$inject = ['$http', '$q', '$rootScope', 'DataFactory', 'ErrorFactory', 'SessionFactory'];\n\n\tfunction submit($http, $q, $rootScope, DataFactory, ErrorFactory, SessionFactory) {\n\n\t\tvar service = {\n\t\t\tsubmit: submitApp,\n\t\t}\n\n\t\treturn service;\n\n\t\tfunction submitApp(sessionId) {\n\t\t\tvar deferred = $q.defer();\n\t\t\t$http({\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: baseUrl + 'api/submit/post',\n\t\t\t\tdata: JSON.stringify({\n\t\t\t\t\t'session_id': sessionId,\n\t\t\t\t})\n\t\t\t}).then(function (response) {\n\t\t\t\tvar data;\n\t\t\t\ttry { data = JSON.parse(response.data); }\n\t\t\t\tcatch (e) { data = response.data };\n\t\t\t\tif (data['result_code'] === \"0\") {\n\t\t\t\t\tDataFactory.appData.applicant.submit = response.data['result_content'];\n\n\t\t\t\t\t//if (data[\"result_content\"].QFreeze) $rootScope.gaCustEvent.tuEndresultSuccess();\n\t\t\t\t\t//else $rootScope.gaCustEvent.tuEndresultFailure();\n\n\t\t\t\t\tif (data[\"result_content\"].prequalResult === \"Success\") {\n\t\t\t\t\t\t$rootScope.ga.submitSuccess();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$rootScope.ga.errors.submitError();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (data[\"result_content\"].prequalResult === \"Success\" && !data[\"result_content\"].QFreeze) {\n\t\t\t\t\t\t$rootScope.gaCustEvent.tuEndresultSuccess();\n\t\t\t\t\t} else if (data[\"result_content\"].prequalResult === \"Success\" && data[\"result_content\"].QFreeze) {\n\t\t\t\t\t\t$rootScope.gaCustEvent.tuEndresultFreezeSuccess();// qfreeze\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tdeferred.resolve(data);\n\t\t\t\t\tSessionFactory.deleteCurrentSession();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar errCode = data['result_code'].split(\"-\")[0];\n\t\t\t\t\tif (errCode === \"TU\") $rootScope.ga.errors.tuError(data['result_code']);\n\t\t\t\t\tif (errCode === \"CALC7\" || errCode === \"CALC\") $rootScope.ga.errors.descisionError(data['result_code']);\n\t\t\t\t\tSessionFactory.deleteCurrentSession();\n\t\t\t\t\tErrorFactory.errorPage(data['result_code'], 'en', \"Submit failed with response code error\", data['result_content']);\n\t\t\t\t\tdeferred.reject(data.result_code);\n\t\t\t\t}\n\t\t\t}, function (httpError) {\n\t\t\t\tSessionFactory.deleteCurrentSession();\n\t\t\t\tif (httpError.status) {\n\t\t\t\t\tErrorFactory.errorPage(\"SAE-\" + httpError.status, 'en', \"Submit failed\", \"Submit failed with http status code \" + httpError.status);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tErrorFactory.errorPage(\"SAU\", 'en', \"Submit failed\", \"Submit failed with unexpected error\");\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t};\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.factory('VehicleFactory', vehicle);\n\n\tvehicle.$inject = ['$q', '$http', '$injector', '$rootScope', 'ErrorFactory'];\n\n\tfunction vehicle($q, $http, $injector, $rootScope, ErrorFactory) {\n\n\t\tvar lang = \"en\";\n\t\tvar sessionId = \"\";\n\n\t\tvar vehicleFactory = {\n\t\t\tautoComplete: autoComplete,\n\t\t\tgetVehicle: getVehicle\n\t\t};\n\n\t\treturn vehicleFactory;\n\n\t\tfunction autoComplete(model) {\n\t\t\tvar deferred = $q.defer();\n\t\t\t$http({\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: baseUrl + \"api/vehicles/autocomplete\",\n\t\t\t\tdata: model\n\t\t\t}).then(function (response) {\n\t\t\t\tvar data;\n\t\t\t\ttry { data = JSON.parse(response.data); }\n\t\t\t\tcatch (e) { data = response.data };\n\t\t\t\tif (data['result_code'] === \"0\") {\n\t\t\t\t\tdeferred.resolve(data);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$rootScope.ga.errors.blackbookError(data['result_code']);\n\t\t\t\t\tErrorFactory.errorPage(data['result_code'], \"en\", \"Autocomplete failed with response code error\", data['result_content']);\n\t\t\t\t\tdeferred.reject(data['result_code']);\n\t\t\t\t}\n\t\t\t}, function (httpError) {\n\t\t\t\tif (httpError.status) {\n\t\t\t\t\tErrorFactory.errorPage(\"ACE-\" + httpError.status, \"en\", \"Autocomplete failed\", \"Autocomplete failed with http status code error\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tErrorFactory.errorPage(\"ACU\", \"en\", \"Autocomplete failed\", \"Autocomplete failed with unexpected error\");\n\t\t\t\t}\n\t\t\t\tdeferred.reject(httpError);\n\t\t\t})\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tfunction getVehicle(model) {\n\t\t\tvar deferred = $q.defer();\n\t\t\t$http({\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: baseUrl + \"api/vehicles/usedvehicle\",\n\t\t\t\tdata: model\n\t\t\t}).then(function (response) {\n\t\t\t\tvar data;\n\t\t\t\ttry { data = JSON.parse(response.data); }\n\t\t\t\tcatch (e) { data = response.data };\n\t\t\t\tif (data['result_code'] === \"0\") {\n\t\t\t\t\tif (env == \"DEV\") {\n\t\t\t\t\t\tconsole.log(\"UsedVehicle\", data.result_content);\n\t\t\t\t\t}\n\t\t\t\t\t$injector.get('DataFactory').appData.applicant = data.result_content;\n\t\t\t\t\tdeferred.resolve(data);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$rootScope.ga.errors.blackbookError(data['result_code']);\n\t\t\t\t\tErrorFactory.errorPage(data['result_code'], \"en\", \"Get Vehicle failed with response code error\", data['result_content']);\n\t\t\t\t\tdeferred.reject(data['result_code'])\n\t\t\t\t}\n\t\t\t}, function (httpError) {\n\t\t\t\tif (httpError.status) {\n\t\t\t\t\tErrorFactory.errorPage(\"GVE-\" + httpError.status, \"en\", \"Get Vehicle failed\", \"Get Vehicle failed with http status code error\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tErrorFactory.errorPage(\"GVU\", \"en\", \"Get Vehicle failed\", \"Get Vehicle failed with unexpected error\");\n\t\t\t\t}\n\t\t\t\tdeferred.reject(httpError)\n\t\t\t})\n\t\t\treturn deferred.promise;\n\t\t};\n\t};\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.factory('ValidationFactory', validation);\n\n\tfunction validation() {\n\n\t\tvar validation = {\n\t\t\tcheckPOBox: checkPOBox\n\t\t}\n\n\t\treturn validation;\n\n\t\tfunction checkPOBox(field, form) {\n\t\t\tvar boxRegex = /(.*?(\\bbox\\b)[^$]*)$/;\n\t\t\tvar value = field.$viewValue;\n\t\t\tif (boxRegex.test(value)) {\n\t\t\t\tfield.$setValidity('pobox', false);\n\t\t\t\t$scope.poboxError = true;\n\t\t\t\tif (fieldName == \"apStreetNum\") {\n\t\t\t\t\t$scope.poboxErrorNum = true;\n\t\t\t\t}\n\t\t\t\telse if (fieldName == \"apStreetName\") {\n\t\t\t\t\t$scope.poboxErrorName = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfield.$setValidity('pobox', true);\n\t\t\t\t$scope.poboxError = false;\n\t\t\t\tif (fieldName == \"apStreetNum\") {\n\t\t\t\t\t$scope.poboxErrorNum = false;\n\t\t\t\t}\n\t\t\t\telse if (fieldName == \"apStreetName\") {\n\t\t\t\t\t$scope.poboxErrorName = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t};\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('clickOutside', ['$window', '$parse', function ($window, $parse) {\n\t\t\treturn {\n\t\t\t\tlink: function (scope, el, attr) {\n\t\t\t\t\tif (!attr.clickOutside) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar ignore;\n\t\t\t\t\tif (attr.ignoreIf) {\n\t\t\t\t\t\tignore = $parse(attr.ignoreIf);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar nakedEl = el[0];\n\t\t\t\t\tvar fn = $parse(attr.clickOutside);\n\n\t\t\t\t\tvar handler = function (e) {\n\t\t\t\t\t\tif (nakedEl === e.target || nakedEl.contains(e.target) || (ignore && ignore(scope))) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.$apply(fn);\n\t\t\t\t\t};\n\n\t\t\t\t\t$window.addEventListener('click', handler, true);\n\n\t\t\t\t\tscope.$on('$destroy', function (e) {\n\t\t\t\t\t\t$window.removeEventListener('click', handler);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t}]);\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('containerExpand', function () {\n\t\t\treturn {\n\t\t\t\trestrict: 'C',\n\t\t\t\tscope: {\n\t\t\t\t\tcontainerExpand: '='\n\t\t\t\t},\n\t\t\t\tlink: function (scope, el, attrs) {\n\t\t\t\t\tvar header = $(el).find(\".link-expand\");\n\t\t\t\t\tvar content = $(el).find(\".section-expand\");\n\n\t\t\t\t\t//convert string to boolean\n\t\t\t\t\tvar isContentVisible = false;\n\n\t\t\t\t\tangular.element(document).ready(function () {\n\t\t\t\t\t\tif (isContentVisible) {\n\t\t\t\t\t\t\tcontent.slideDown();\n\t\t\t\t\t\t\t$(el).addClass(\"expanded\");\n\t\t\t\t\t\t\theader.attr(\"aria-expanded\", 'true').removeClass(\"collapsed\").addClass(\"expanded\");\n\t\t\t\t\t\t\t$(el).find('.link-expand .collapsed').hide()\n\t\t\t\t\t\t\t$(el).find('.link-expand .expanded').show()\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcontent.slideUp();\n\t\t\t\t\t\t\t$(el).removeClass(\"expanded\");\n\t\t\t\t\t\t\theader.attr(\"aria-expanded\", 'false').removeClass(\"expanded\").addClass(\"collapsed\");\n\t\t\t\t\t\t\t$(el).find('.link-expand .collapsed').show()\n\t\t\t\t\t\t\t$(el).find('.link-expand .expanded').hide()\n\t\t\t\t\t\t\tscope.$eval(attrs.onExpand);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\theader.mousedown(function () {\n\t\t\t\t\t\t\theader.css(\"outline\", \"0\")\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\theader.blur(function () {\n\t\t\t\t\t\t\theader.css(\"outline\", \"\")\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// click event covers enter key\n\t\t\t\t\t\theader.click(function () {\n\t\t\t\t\t\t\tif (isContentVisible) {\n\t\t\t\t\t\t\t\tcontent.slideUp();\n\t\t\t\t\t\t\t\t$(el).removeClass(\"expanded\");\n\t\t\t\t\t\t\t\tisContentVisible = false;\n\t\t\t\t\t\t\t\theader.attr(\"aria-expanded\", 'false').toggleClass(\"expanded collapsed\");\n\t\t\t\t\t\t\t\t$(el).find('.link-expand .collapsed').show()\n\t\t\t\t\t\t\t\t$(el).find('.link-expand .expanded').hide()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tcontent.slideDown();\n\t\t\t\t\t\t\t\t$(el).addClass(\"expanded\");\n\t\t\t\t\t\t\t\tisContentVisible = true;\n\t\t\t\t\t\t\t\theader.attr(\"aria-expanded\", 'true').toggleClass(\"expanded collapsed\");\n\t\t\t\t\t\t\t\t$(el).find('.link-expand .collapsed').hide()\n\t\t\t\t\t\t\t\t$(el).find('.link-expand .expanded').show()\n\t\t\t\t\t\t\t\tscope.$eval(attrs.onExpand);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('equalHeightLabels', ['$timeout', '$window', function ($timeout, $window) {\n\t\t\treturn {\n\t\t\t\trestrict: 'A',\n\t\t\t\tlink: function (scope, element, attrs, ngModel) {\n\n\t\t\t\t\tscope.$watch('showAddressModal', function (newVal) {\n\t\t\t\t\t\tif (newVal) $timeout(function () { resizeLabels() }, 500)\n\t\t\t\t\t});\n\n\t\t\t\t\tangular.element($window).bind('resize', function () {\n\t\t\t\t\t\tif (scope.showAddressModal) {\n\t\t\t\t\t\t\tresizeLabels();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfunction resizeLabels() {\n\t\t\t\t\t\tvar maxH = 0;\n\t\t\t\t\t\tvar labels = $(element).find('label');\n\t\t\t\t\t\tlabels.css('height', 'auto');\n\t\t\t\t\t\tlabels.each(function () {\n\t\t\t\t\t\t\tmaxH = Math.max($(this).height(), maxH)\n\t\t\t\t\t\t})\n\t\t\t\t\t\tlabels.css('height', maxH);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}]);\n})();\n","(function () {\n\n 'use strict';\n\n angular\n .module('AutoPrequal')\n .directive('googlePlace', ['$timeout', 'GoogleInitializer', function ($timeout, GoogleInitializer) {\n var componentForm = {\n street_number: 'long_name',\n route: 'long_name',\n locality: 'long_name',\n administrative_area_level_1: 'short_name',\n country: 'long_name',\n postal_code: 'short_name'\n };\n var mapping = {\n street_number: 'number',\n route: 'street',\n locality: 'city',\n administrative_area_level_1: 'province',\n country: 'country',\n postal_code: 'postal'\n };\n return {\n require: 'ngModel',\n scope: {\n ngModel: '=',\n details: '=?'\n },\n link: function (scope, element, attrs, model) {\n var timeout = $timeout(function() {\n //if google library takes longer than 500ms to load, show loader\n scope.$root.forcedLoader = true;\n }, 500);\n //load google autocomplete\n GoogleInitializer.getReadyPromise().then(function () {\n $timeout.cancel(timeout);\n scope.$root.forcedLoader = false;\n var options = {\n types: attrs.googlePlace !== \"\" ? attrs.googlePlace.split(',') : [],\n componentRestrictions: { country: \"ca\" }\n };\n scope.addressApplied = true;\n\n scope.gPlace = new google.maps.places.Autocomplete(element[0], options);\n\n $timeout(function () {\n $('.pac-container').attr('aria-live', 'assertive')\n }, 1000);\n\n $('.pac-item').attr('role', 'option')\n\n\n element.bind('keyup', function (event) {\n //resetting fields when user starts typing again (exclude enter, tab, shift)\n\t\t\t\t\t\t\tif (event.keyCode != 13 && event.keyCode != 9 && event.keyCode != 16) {\n if (scope.addressApplied == true) {\n if (scope.$parent.addressType == \"residential\") {\n scope.$parent.data.apStreetNum = \"\";\n scope.$parent.data.apStreetName = \"\";\n scope.$parent.apStreetNameFull = \"\";\n scope.$parent.data.apCity = \"\";\n scope.$parent.data.apProvince = \"\";\n scope.$parent.data.apPostalCode = \"\";\n }\n scope.addressApplied = false;\n }\n }\n });\n\n google.maps.event.addListener(scope.gPlace, 'place_changed', function () {\n var place = scope.gPlace.getPlace();\n var details = place.geometry && place.geometry.location ? {\n latitude: place.geometry.location.lat(),\n longitude: place.geometry.location.lng()\n } : {};\n\n for (var i = 0; i < place.address_components.length; i++) {\n var addressType = place.address_components[i].types[0];\n if (componentForm[addressType]) {\n var val = place.address_components[i][componentForm[addressType]];\n details[mapping[addressType]] = val;\n }\n }\n\n details.formatted = place.formatted_address;\n details.placeId = place.place_id;\n\n scope.$apply(function () {\n if (scope.$parent.addressType === \"residential\") {\n scope.$parent.data.apStreetNum = details[\"number\"];\n scope.$parent.data.apStreetName = details[\"street\"] ? details[\"street\"].substring(0, 23) : \"\";\n scope.$parent.apStreetNameFull = details[\"street\"];\n scope.$parent.data.apCity = details[\"city\"];\n scope.$parent.data.apProvince = details[\"province\"];\n scope.$parent.data.apPostalCode = details[\"postal\"] ? details[\"postal\"].replace(/\\s/g, \"\").toUpperCase() : \"\";\n }\n\n $timeout(function () {\n scope.$parent.checkProvince();\n });\n\n model.$setViewValue(element.val());\n\n scope.addressApplied = true;\n });\n });\n\n scope.$watch(function () { return $('.pac-container').html(); }, function (newVal, oldVal) {\n $('.pac-item').attr('role', 'option')\n });\n })\n }\n };\n }]);\n})();","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('currencyFormatter', ['$rootScope', '$filter', function ($rootScope, $filter) {\n\t\t\t/**\n\t\t\t * Auto currency formatter for input fields as user types\n\t\t\t */\n\t\t\treturn {\n\t\t\t\trestrict: 'A',\n\t\t\t\trequire: 'ngModel',\n\t\t\t\tlink: function (scope, element, attrs, ngModel) {\n\t\t\t\t\tvar isFr = $rootScope.lang == 'fr';\n\n\t\t\t\t\t//view to model\n\t\t\t\t\tngModel.$parsers.push(function (value) {\n\t\t\t\t\t\tif (isFr) value = convertToEn(value);\n\t\t\t\t\t\treturn clean(value);\n\t\t\t\t\t});\n\n\t\t\t\t\t//model to view\n\t\t\t\t\tngModel.$formatters.push(function (value) {\n\t\t\t\t\t\tif (isFr) value = convertToFr(value);\n\t\t\t\t\t\treturn formatCurrency(value);\n\t\t\t\t\t});\n\n\t\t\t\t\telement.bind('keyup change', function () {\n\t\t\t\t\t\tscope.$apply(onChange);\n\t\t\t\t\t});\n\n\t\t\t\t\telement.bind('blur', function () {\n\t\t\t\t\t\tvar value = ngModel.$viewValue;\n\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\tif (isFr) value = convertToEn(value);\n\t\t\t\t\t\t\t//if (value.match(/\\.\\d$/)) {\n\t\t\t\t\t\t\t//check if only 1 decimal place and change to 2\n\t\t\t\t\t\t\t//\tvalue = value + \"0\";\n\t\t\t\t\t\t\t//} else if (value.match(/\\.$/)) {\n\t\t\t\t\t\t\tif (value.match(/\\.$/)) {\n\t\t\t\t\t\t\t\t//remove trailing .\n\t\t\t\t\t\t\t\tvalue = value.slice(0, -1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isFr) value = convertToFr(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tngModel.$viewValue = value;\n\t\t\t\t\t\tngModel.$render();\n\t\t\t\t\t\tngModel.$commitViewValue();\n\t\t\t\t\t});\n\n\t\t\t\t\tfunction onChange() {\n\t\t\t\t\t\tngModel.$viewValue = formatCurrency(ngModel.$viewValue);\n\t\t\t\t\t\tngModel.$render();\n\t\t\t\t\t\tngModel.$commitViewValue();\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction formatCurrency(value) {\n\t\t\t\t\t\tif (!value) return value;\n\t\t\t\t\t\tvalue = value + \"\";\n\t\t\t\t\t\tif (isFr) value = convertToEn(value);\n\t\t\t\t\t\t//var hasTrailingDot = value.match(/\\.$/) && (value.match(/\\./g) || []).length == 1;\n\t\t\t\t\t\tvalue = clean(value);\n\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t//value = value.match(/^\\d+(?:\\.\\d{0,2})?/)[0]; //truncate to 2 decimal places, no rounding!\n\t\t\t\t\t\t\tvalue = value.match(/^\\d+/)[0];\n\t\t\t\t\t\t\tvalue = $filter('currencyFormat')(value, \"en\", true).replace(/\\s?\\$/, ''); //remove currency symbol\n\t\t\t\t\t\t\t//if (hasTrailingDot) value = value + \".\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (isFr) value = convertToFr(value);\n\t\t\t\t\t\treturn cleanNonCurrencyChars(value);\n\t\t\t\t\t}\n\n\t\t\t\t\t//always assumes input is in en\n\t\t\t\t\tfunction clean(value) {\n\t\t\t\t\t\tif (!value) return value;\n\t\t\t\t\t\tvalue = value.replace(/[^\\d.]|\\.\\d{0,2}$/g, '');\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction cleanNonCurrencyChars(value) {\n\t\t\t\t\t\tif (!value) return value;\n\t\t\t\t\t\tvalue = value.replace(/[^\\d,\\s]/g, '');\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction convertToEn(value) {\n\t\t\t\t\t\tif (!value) return value;\n\t\t\t\t\t\tvalue = value + \"\";\n\t\t\t\t\t\tvalue = value.replace(\",\", \".\");\n\t\t\t\t\t\tvalue = value.replace(/\\s/g, \",\");\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction convertToFr(value) {\n\t\t\t\t\t\tif (!value) return value;\n\t\t\t\t\t\tvalue = value + \"\";\n\t\t\t\t\t\tvalue = value.replace(/,/g, \" \");\n\t\t\t\t\t\t//value = value.replace(\".\", \",\");\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}]);\n\n})();","(function () {\n\n 'use strict';\n\n angular\n .module('AutoPrequal')\n .directive('modal', ['$rootScope', '$timeout', function ($rootScope, $timeout) {\n return {\n restrict: 'A',\n scope: {\n modal: \"=\",\n },\n link: function (scope, element, attrs, ngModel) {\n\n var modalWindowQ = $(element).find(\".modal\");\n\n var firstToFocus = $(element).find(\".first-to-focus\");\n\n var firstToFocusMobile = $(element).find(\".first-to-focus-mobile\");\n\n var modalClose = $(element).find(\".close-modal\");\n\n var modalCloseMain = $(element).find(\".close-modal-main\");\n\n var modalAll = $(element).find(\"*\");\n\n var closeDisabled = element.hasClass('disable-close');\n\n //add region role to all modals\n\n modalWindowQ.attr(\"role\", \"region\");\n\n\n var unwatch = scope.$watch('modal', function (newVal, oldVal) {\n if (newVal == true) {\n $timeout(function () {\n firstToFocus.focus();\n });\n }\n else if ($rootScope.modalTrigger) {\n $timeout(function () {\n $rootScope.modalTrigger.focus();\n }, 100);\n }\n $rootScope.modalOpen = newVal;\n });\n\n modalClose.bind('click', function (event) {\n scope.$apply(function () {\n scope.modal = false;\n });\n });\n\n modalClose.bind(\"keydown keypress\", function (event) {\n if (event.which === 13) {\n scope.$apply(function () {\n scope.modal = false;\n });\n event.preventDefault();\n }\n });\n\n modalAll.bind(\"keydown keypress\", function (event) {\n if (event.which === 27 && !closeDisabled) {\n scope.$apply(function () {\n scope.modal = false;\n });\n event.preventDefault();\n }\n });\n\n modalCloseMain.bind(\"keydown keypress\", function (event) {\n\n if (!event.shiftKey && event.keyCode == 9) {\n $timeout(function () {\n\n if (!firstToFocus.is(':visible') && firstToFocusMobile.length && firstToFocusMobile.is(':visible')) {\n firstToFocusMobile.focus();\n }\n else {\n firstToFocus.focus();\n }\n\n }, 100);\n }\n\n });\n\n\n firstToFocus.bind(\"keydown keypress\", function (event) {\n\n if (event.shiftKey && event.keyCode == 9) {\n $timeout(function () {\n modalCloseMain.focus();\n });\n }\n\n });\n\n firstToFocusMobile.bind(\"keydown keypress\", function (event) {\n\n if (!firstToFocus.is(':visible')) {\n if (event.shiftKey && event.keyCode == 9) {\n $timeout(function () {\n modalCloseMain.focus();\n });\n }\n }\n });\n\n modalWindowQ.bind(\"keydown keypress\", function (event) {\n if (event.shiftKey && event.keyCode == 9 && $(this).is(\":focus\")) {\n $timeout(function () {\n modalCloseMain.focus();\n });\n }\n });\n\n scope.$on('$destroy', function () { unwatch(); })\n\n }\n }\n }]);\n\n})();\n","(function () {\n\n 'use strict';\n\n angular\n .module('AutoPrequal')\n .directive('modalTrigger', ['$rootScope', '$compile', function ($rootScope, $compile) {\n return {\n restrict: 'A',\n link: function (scope, element, attrs, ngModel) {\n\n var el = angular.element(' {{glContent.open_modal_window}}');\n\n $compile(el)(scope);\n element.append(el);\n\n element.bind('click', function (event) {\n var reviewTerms = $(element[0]).children(\".review-terms\");\n if (reviewTerms[0]) {\n $rootScope.modalTrigger = reviewTerms[0];\n } else {\n $rootScope.modalTrigger = $(element[0]);\n }\n });\n\n element.bind(\"keydown keypress\", function (event) {\n if (event.which === 13) {\n $rootScope.modalTrigger = $(element[0]);\n event.preventDefault();\n }\n });\n }\n }\n }]);\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('error', ['$timeout', function ($timeout) {\n\t\t\treturn {\n\t\t\t\trestrict: 'C',\n\t\t\t\tlink: function (scope, element, attrs) {\n\t\t\t\t\tif (element.hasClass('no-link')) return;\n\t\t\t\t\t//get parent input field\n\t\t\t\t\tvar inputElement = $(element).prevAll('input:first')[0];\n\t\t\t\t\tif (!inputElement) {\n\t\t\t\t\t\tinputElement = $(element).prevAll('select:first')[0];\n\t\t\t\t\t}\n\n\t\t\t\t\telement.on('click', function (event) {\n\t\t\t\t\t\tinputElement.focus();\n\t\t\t\t\t});\n\t\t\t\t\telement.on('keydown keypress', function (event) {\n\t\t\t\t\t\tvar key = event.keyCode || event.which;\n\t\t\t\t\t\tif (key === 13) {\n\t\t\t\t\t\t\tinputElement.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t//Add a11y string based on error type\n\t\t\t\t\tvar a11yString = \"\"\n\t\t\t\t\tif (scope.$root.glContent)\n\t\t\t\t\t\ta11yString = scope.$root.glContent.errors.error;\n\t\t\t\t\tvar classes = element[0].classList;\n\t\t\t\t\tvar offscreen = document.createElement('SPAN');\n\t\t\t\t\toffscreen.classList.add('off-screen');\n\t\t\t\t\tif (scope.$root.glContent && classes.contains('error-required')) {\n\t\t\t\t\t\ta11yString = a11yString + scope.$root.glContent.errors.error_required;\n\t\t\t\t\t} else if (scope.$root.glContent && classes.contains('error-invalid')) {\n\t\t\t\t\t\ta11yString = a11yString + scope.$root.glContent.errors.error_invalid;\n\t\t\t\t\t}\n\t\t\t\t\toffscreen.innerHTML = a11yString;\n\t\t\t\t\telement[0].insertBefore(offscreen, element[0].childNodes[0]);\n\t\t\t\t\telement[0].setAttribute(\"aria-describedby\", 'errMsgHelper');\n\t\t\t\t\t//Don't use aria-hidden in mobile. Causes issues with talkback (Android a11y)\n\t\t\t\t\tif (window.innerWidth > 768) {\n\t\t\t\t\t\telement[0].setAttribute(\"aria-hidden\", 'true');\n\t\t\t\t\t\t//Change aria-hidden attribute. angular watch visibility not reliable enough, using input element on blur instead\n\t\t\t\t\t\tinputElement && inputElement.addEventListener('blur', function (event) {\n\t\t\t\t\t\t\t$timeout(function () {\n\t\t\t\t\t\t\t\tif ($(element).is(':visible')) {\n\t\t\t\t\t\t\t\t\telement[0].setAttribute(\"aria-live\", \"assertive\");\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\telement[0].removeAttribute(\"aria-live\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telement[0].setAttribute(\"aria-hidden\", $(element).is(':visible') ? 'false' : 'true');\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}]);\n})();\n","(function() {\n\n 'use strict';\n\n angular\n .module('AutoPrequal')\n .directive('ngEnter', function () {\n return function (scope, element, attrs) {\n element.on('keydown keypress', function (event) {\n var key = event.keyCode || event.which;\n if(key === 13) {\n scope.$apply(function (){\n scope.$eval(attrs.ngEnter || attrs.ngClick, {$event:event});\n });\n event.preventDefault();\n }\n });\n };\n });\n\n})();\n","(function() {\n\n 'use strict';\n\n angular\n\t\t.module('AutoPrequal')\n .directive('setFocus', ['$timeout', '$parse', function ($timeout, $parse) {\n return {\n link: function (scope, element, attrs) {\n var model = $parse(attrs.setFocus);\n scope.$watch(model, function (value) {\n if (value === true) {\n $timeout(function () {\n element[0].focus();\n });\n }\n });\n element.bind('blur', function () {\n $timeout(function () {\n scope.$apply(model.assign(scope, false));\n });\n });\n }\n };\n }]);\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('phoneFormatter', function () {\n\t\t\treturn {\n\t\t\t\trestrict: 'A',\n\t\t\t\trequire: 'ngModel',\n\t\t\t\tlink: function (scope, element, attrs, ngModel) {\n\t\t\t\t\telement.bind('keyup change', function () {\n\t\t\t\t\t\tscope.$apply(formatPhone);\n\t\t\t\t\t});\n\n\t\t\t\t\tfunction formatPhone() {\n\t\t\t\t\t\tvar value = ngModel.$viewValue;\n\t\t\t\t\t\tif (value != null && value != undefined) {\n\t\t\t\t\t\t\tvalue = value.replace(/[^0-9]/g, '');\n\t\t\t\t\t\t\tif (value.length >= 4 && scope.lang === 'en' && value.substring(3, 4) != '-') {\n\t\t\t\t\t\t\t\tvalue = value.substring(0, 3) + \"-\" + value.substring(3, value.length);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (value.length >= 4 && scope.lang === 'fr' && value.substring(3, 4) != ' ') {\n\t\t\t\t\t\t\t\tvalue = value.substring(0, 3) + \" \" + value.substring(3, value.length);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (value.length >= 8 && value.substring(7, 8) != '-') {\n\t\t\t\t\t\t\t\tvalue = value.substring(0, 7) + \"-\" + value.substring(7, value.length);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//ngModel.$setViewValue(value);\n\t\t\t\t\t\t\tngModel.$viewValue = value;\n\t\t\t\t\t\t\tngModel.modelValue = value.replace(/\\D/g, '').replace(/(\\d{3})(\\d{7})/, \"$1-$2\");\n\t\t\t\t\t\t\tscope.ngModel = value.replace(/\\D/g, '').replace(/(\\d{3})(\\d{7})/, \"$1-$2\");\n\t\t\t\t\t\t\tngModel.$render();\n\t\t\t\t\t\t\tngModel.$commitViewValue();\n\n\n\t\t\t\t\t\t\t//prevent repeating same digits\n\t\t\t\t\t\t\tif (preventRepeat(value)) {\n\t\t\t\t\t\t\t\tngModel.$setValidity('pattern', false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction preventRepeat(value) {\n\t\t\t\t\t\tvalue = value.replace(/-/g, \"\");\n\t\t\t\t\t\tvar patt = /(^0{10}|1{10}|2{10}|3{10}|4{10}|5{10}|6{10}|7{10}|8{10}|9{10})$/i\n\t\t\t\t\t\tif (patt.test(value)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('progressBar', function () {\n\t\t\treturn {\n\t\t\t\treplace: true,\n\t\t\t\ttemplateUrl: baseUrl + 'root/app/views/progress-bar.tpl.html',\n\t\t\t\trestrict: 'E',\n\t\t\t\tscope: {\n\t\t\t\t\tsteps: \"=\",\n\t\t\t\t\tcurrent: \"=\",\n\t\t\t\t\tmobsteps: \"=\",\n\t\t\t\t\tmobcurrent: \"=\"\n\t\t\t\t},\n\t\t\t\tlink: function (scope, elem, attrs) {\n\t\t\t\t\tscope.$watch('current', function (value) {\n\t\t\t\t\t\tscope.position = Math.round((scope.current / scope.steps) * 100);\n\t\t\t\t\t\tif (scope.position > 100) scope.position = 100;\n\t\t\t\t\t});\n\n\t\t\t\t\tscope.$watch('mobcurrent', function (value) {\n\t\t\t\t\t\tscope.mobposition = Math.round((scope.mobcurrent / scope.mobsteps) * 100);\n\t\t\t\t\t\tif (scope.mobposition > 100) scope.mobposition = 100;\n\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('tooltip', ['$timeout', '$window', function ($timeout, $window) {\n\t\t\treturn {\n\t\t\t\treplace: true,\n\t\t\t\ttemplateUrl: baseUrl + 'root/app/views/tooltip.tpl.html',\n\t\t\t\trestrict: 'E',\n\t\t\t\tscope: {\n\t\t\t\t\tcontent: \"@\",\n\t\t\t\t\tdirection: \"=\",\n\t\t\t\t\ta11y: \"@\",\n\t\t\t\t\tiden: \"@\"\n\t\t\t\t},\n\t\t\t\tlink: function (scope, elem, attrs) {\n\n\t\t\t\t\tscope.expand = function () {\n\t\t\t\t\t\tif (scope.showTooltip) {\n\t\t\t\t\t\t\tscope.$eval(attrs.onExpand);\n\t\t\t\t\t\t\t$timeout(function () {\n\t\t\t\t\t\t\t\tsetStyle();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction setStyle() {\n\n\t\t\t\t\t\tvar containerWidth = $(elem).parents(\".container-right-inner\")[0].clientWidth;\n\t\t\t\t\t\tvar tooltipOffsetLeft = Math.max(-475, $(elem).parents(\".container-right-inner\").offset().left - $(elem).offset().left);\n\n\t\t\t\t\t\tscope.tooltipStyle = {\n\t\t\t\t\t\t\t\"width\": (containerWidth - 15) + \"px\",\n\t\t\t\t\t\t\t\"margin-left\": tooltipOffsetLeft + 7.5 + \"px\",\n\t\t\t\t\t\t\t\"max-width\": \"500px\"\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t$timeout(function () {\n\t\t\t\t\t\tsetStyle();\n\t\t\t\t\t});\n\n\t\t\t\t\tangular.element($window).bind('resize', function () {\n\t\t\t\t\t\tsetStyle();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}]);\n\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('validateOnClick', ['$timeout', '$compile', function ($timeout, $compile) {\n\t\t\treturn {\n\t\t\t\trestrict: 'A',\n\t\t\t\trequire: '^form',\n\t\t\t\tlink: function (scope, element, attrs, form) {\n\t\t\t\t\telement.on('click', function () {\n\t\t\t\t\t\tangular.forEach(form.$error, function (field) {\n\t\t\t\t\t\t\tangular.forEach(field, function (errorField) {\n\t\t\t\t\t\t\t\t$timeout(function () { errorField.$setTouched() }, 0);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}]);\n})();\n","(function () {\n\n\t'use strict';\n\n\tangular\n\t\t.module('AutoPrequal')\n\t\t.directive('validateOnEnter', ['$timeout', '$compile', function ($timeout, $compile) {\n\t\t\treturn {\n\t\t\t\trestrict: 'A',\n\t\t\t\trequire: '^form',\n\t\t\t\tlink: function (scope, element, attrs, form) {\n\t\t\t\t\telement.on('keydown keypress', function (event) {\n\t\t\t\t\t\tvar key = event.keyCode || event.which;\n\t\t\t\t\t\tif (key === 13) {\n\t\t\t\t\t\t\tangular.forEach(form.$error, function (field) {\n\t\t\t\t\t\t\t\tangular.forEach(field, function (errorField) {\n\t\t\t\t\t\t\t\t\t$timeout(function () { errorField.$setTouched() }, 0);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}]);\n})();\n"]}