{"version":3,"sources":["webpack://MandG/./src/js/legacy/eactool.js"],"names":["$","window","eacController","_p","_d","state","isEACBlockActive","userHasFinancialAdvisor","currentActiveGroup","currentActiveFunds","modalView","isResponsive","eacDOMObj","fundData","templateData","paramsDefault","c","eacBlockClass","eacContainerClass","tableContainerClass","financialAdvisorRadioButtonClass","tableInjectionClass","tableHeaderInjectionClass","cta_addProduct","cta_clearValues","cta_calculate","control_toggleProduct","control_removeProduct","control_confirmProductListUpdate","control_closeModal","fragmentContainerClass","tableHeaderFragmentClass","tableRowLargeFragementClass","tableRowResponsiveFragementClass","modalFragmentClass","modalGroupContainerClass","modalGroupTitleFragmentClass","modalRowFragmentClass","ctaControlBlockClass","resultTableClass","datapoint","tableRow","d","fundListData","callback","UITableRowFragment","financialAdvisorToggle","eacCalculationResults","eacValidationFailed","_dc","cNodeKey","this","_gf","fragmentClass","eacEvents","events","syncTableData","e","p","syncVal","syncTargetSelectorString","not","target","val","syncProductList","setActiveGroup","group","data","groupIndex","modalElements","elem","addClass","removeClass","h_storeModalElemRef","checkedItemsInfundGroup","count","enableFlag","obj","applySelectionToUI","i","elems","hasOwnProperty","processData","fundGroup","attr","productIndex","isProductActive","dataUpdateProcess","pushTableRowsToUI","products","isActive","gi","pi","fundName","productName","html","htmlFragments","apply","r","toggleRequiredElemsD","find","toggleRequiredElemsR","length","replaceTemplateTag","targetElem","tagName","value","returnInnerHtml","elemResponsive","tableHeaders","children","modal","populateModal","applyEACEventListeners","event","getEventHandler","self","document","on","UIEvents","toggleFinancialAdvisorCalcs","$doc","getAttribute","gaTracking","sendEvent","trigger","addProduct","css","$modalContent","$modalFundList","viewportHeight","height","h_setInactiveGroupOnPartialView","removeProduct","$this","elemData","closest","h_setAllActiveGroupsOnModalViewFull","remove","closeModal","clearValues","tableContainer","eacResultsTable","calculate","$rows","validationCheckResult","isValid","fieldsFailed","lumpsum","recurringDebitOrder","initialAdviceFee","recurringAdviceFee","rowValidationCheck","rowValueData","fieldDataByClass","dataLumpsum","$fieldElem","hasClass","Number","dataRecurringOrder","dataInitialAdviceFee","replace","dataRecurringAdviseFee","returnData","each","index","productObj","fundID","fundCode","productId","fundId","GetRowData","calculateEACValues","eacBlock","modalControl_confirmProductListUpdate","$data","ctaControlBlock","productControl_toggle","$datapoint","toggleClass","groupProductIndex","actionIndex","isResponsiveCheck","applyUIEventHandlers","fragment","getHtmlFragments","tableHeaderFragment","tableRowFragment","tableRowResponsiveFragment","modalFragment","modalProductGroupContainerFragment","modalProductTitleFragment","modalProductRowFragment","clone","fragmentNodeKey","width","isTargetHtmlString","selfOrNull","selfOrFalse","applyDefaultParamValues","arr","toReplace","isArray","push","loopTagArray","replaceTagStringTarget","doReplace","innerHTML","outerHTML","replaceTagOnObjectTarget","productGroupFragment","modalContent","titleHeaderFragment","productRowFragment","groupHeader","fundsForGroup","fund","productGroupTitle","groupName","modalControl_confirmProductListUpdateClicked","groupProducts","returnObj","item","innerText","trim","$fundGroupElem","init","userParams","extend","setParams","f","consumeEACData","getFundlistData","fd","eacData","productGroup","isActiveGroup","getProductsForGroup","getTemplateData","td","dataGroup","getDataInDataGroup","node","nodeName","console","warn","key","populateObjectPool","getDOMRefObjects","eacContainer","desktopTableHeader","applyModal","append","applyDesktopTableHeader","storeModalElementReferences","checkResponsiveStateOnLoad","initializeController","jQuery","isEACDataReady","ajax","url","type","success","setTimeout","productGroupName","formatString","fundProductArray","NULL","LA","UT","TFSA","PIP","International","fundProductGroupName","findListSortOrder","productData","FundName","FundCode","FundProduct","curretKey","indexOf","currentFund","productGroupExists","exist","toLowerCase","splice","checkGroupName","result","fData","sortedList","sortlistorder","getFundCategory","category","spliceIndex","sortFundListData","compileEACDataObject","filter","ready","$validationElem","i_EACDataReadyWatch","setInterval","$eacBlock","lumpSumTotal","eacAPICallData","calculateLumpSum","toFixed","ajaxData","LumpSum","RecDebitOrder","InitFinAdvice","FinAdviceRecurring","FundId","ProductId","HasFinancialAdvisor","contentType","JSON","stringify","resAdviceChargeYr1","resAdviceChargeYr3","resAdviceChargeYr5","resAdviceChargeYr10","OtherChargeYr1","OtherChargeYr3","OtherChargeYr5","OtherChargeYr10","EffectiveAnnualCostYr1","InvestManChargeYr1","AdviceChargeYr1","EffectiveAnnualCostYr3","InvestManChargeYr3","AdviceChargeYr3","EffectiveAnnualCostYr5","InvestManChargeYr5","AdviceChargeYr5","EffectiveAnnualCostYr10","InvestManChargeYr10","AdviceChargeYr10","items","InvestManCharge","AdviceCharge","resAdviceCharge","OtherCharge","EffectiveAnnualCost","resFields","text","formatPecentageValue","populateResultsTable","eacAPICall","performEAC_API_Call","lumpsumMsg","recDebitOrderMsg","initAdviceFeeMsg","recAdviceFeeMsg","clearInterval","total","$accordion","next","containerHeight","outerHeight","velocity","duration","easing","selectorString","returnString","classList","getSelectorString","selectedFundItem","$thisValue","$thisName","previousElementSibling","$productGroupString","$productID","fundsList","sendFacebookToolCompletedEvent","chatBoxRemoveWatcher","chatBoxElem","getElementById","style","display","$chatBoxElem"],"mappings":"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","file":"eacTool.js","sourcesContent":["import \"/src/css/legacy/funds.css\"\r\nimport \"/src/css/legacy/eactool.css\"\r\n\r\n(function($) {\r\n\r\n\t\"use strict\";\r\n\r\n\tvar eacControllerClass = function() {\r\n\r\n\t\t // Params global var.\r\n\t\tvar _p = {},\r\n // Data / Object Pool.\r\n\t\t _d = {\r\n state : {\r\n isEACBlockActive \t\t: false,\r\n userHasFinancialAdvisor : false,\r\n currentActiveGroup \t\t: null,\r\n currentActiveFunds \t\t: 0,\r\n modalView\t\t\t\t: \"full\",\r\n isResponsive \t\t\t: false\r\n },\r\n eacDOMObj : {},\r\n fundData : {},\r\n templateData : {}\r\n },\r\n\t\t // EAC Event Names\r\n _e = {\r\n syncTableData \t\t\t: \"syncTableData\",\r\n syncProductList \t\t: \"syncProductList\",\r\n financialAdvisorToggle \t: \"financialAdvisorToggle\",\r\n applySelectionToUI\t\t: \"applySelectionToUI\"\r\n },\r\n // Parameter Object Defaults / Functionality\r\n paramsDefault = {\r\n c : {\r\n eacBlockClass\t\t\t\t\t\t: \"eac-block\",\r\n eacContainerClass\t\t\t\t\t: \"eac-table-container\",\r\n tableContainerClass\t\t\t\t\t: \"eac-table\",\r\n financialAdvisorRadioButtonClass \t: \"hasFinancialAdvisor\",\r\n tableInjectionClass \t\t\t\t: \"table-injection-div\",\r\n tableHeaderInjectionClass \t\t\t: \"table-header-injection-div\",\r\n cta_addProduct\t\t\t\t\t\t: \"add-new-product\",\r\n cta_clearValues\t\t\t\t\t\t: \"clear-values\",\r\n cta_calculate\t\t\t\t\t\t: \"calculate\",\r\n control_toggleProduct\t\t\t\t: \"toggle-product\",\r\n control_removeProduct\t\t\t\t: \"remove-fund\",\r\n control_confirmProductListUpdate \t: \"confirm-product-list-update\",\r\n control_closeModal \t\t\t\t\t: \"close-modal\",\r\n fragmentContainerClass \t\t\t\t: \"fragment-container\",\r\n tableHeaderFragmentClass \t\t\t: \"table-header\",\r\n tableRowLargeFragementClass \t\t: \"product-block.large\",\r\n tableRowResponsiveFragementClass \t: \"product-block.responsive\",\r\n modalFragmentClass\t\t\t\t\t: \"product-modal\",\r\n modalGroupContainerClass\t\t\t: \"product-group-container\",\r\n modalGroupTitleFragmentClass\t\t: \"product-group-title\",\r\n modalRowFragmentClass\t\t\t\t: \"modal-product-row\",\r\n ctaControlBlockClass \t\t\t\t: \"cta-control-block\",\r\n resultTableClass \t\t\t\t\t: \"eac-calc-results-block\",\r\n datapoint \t\t\t\t\t\t\t: \"datapoint\",\r\n tableRow \t\t\t\t\t\t\t: \"product-block\"\r\n },\r\n d : {\r\n fundListData \t\t\t\t\t\t: \"fundListData\",\r\n templateData \t\t\t\t\t\t: \"templateData\"\r\n },\r\n callback : {\r\n UITableRowFragment \t\t: function() {},\r\n financialAdvisorToggle \t: function() {},\r\n eacCalculationResults\t: function() {},\r\n eacValidationFailed\t\t: function() {}\r\n },\r\n\r\n // Get dot to class [.class] conversion.\r\n _dc : function(cNodeKey) {\r\n return \".\" + this.c[cNodeKey];\r\n },\r\n\r\n // Get \"to fragment\" class conversion.\r\n _gf : function(fragmentClass) {\r\n return \".\" + this.c.fragmentContainerClass + \" .\" + fragmentClass;\r\n }\r\n };\r\n\r\n\t\tvar eacEvents = {\r\n\t\t\tevents : {\r\n\t\t\t\tsyncTableData : function(e, p) {\r\n\r\n\t\t\t\t\t// Used to keep desktop & mobile tables in sync.\r\n\t\t\t\t\tvar syncVal = p.syncVal,\r\n $syncTarget = $(p.syncTargetSelectorString).not(e.target);\r\n\r\n\t\t\t\t\t$syncTarget.val(syncVal);\r\n\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\tsyncProductList : function(e, p) {\r\n\r\n\t\t\t\t\t// Is modal using \"full\" view or \"partial\" view.\r\n\t\t\t\t\tif (_d.state.modalView === \"full\") {\r\n\r\n\t\t\t\t\t\tfullModalViewProcess();\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tfunction fullModalViewProcess() {\r\n\r\n\t\t\t\t\t\th_storeModalElemRef();\r\n\r\n\t\t\t\t\t\t// Set current active group if it's not yet set.\r\n\t\t\t\t\t\tif (_d.state.currentActiveGroup === null) {\r\n\r\n\t\t\t\t\t\t\tsetActiveGroup();\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Count number of active items in active group\r\n\t\t\t\t\t\t// if = 0 : active group set to null\r\n\t\t\t\t\t\t// if > 1 : set active group\r\n\t\t\t\t\t\tif(checkedItemsInfundGroup(p.data.groupIndex, false).count > 0) {\r\n\r\n\t\t\t\t\t\t\tsetActiveGroup();\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tsetAllGroupsActive();\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfunction setActiveGroup() {\r\n\r\n\t\t\t\t\t\t_d.state.currentActiveGroup = p.data.groupIndex;\r\n\r\n\t\t\t\t\t\tfor (var group in _d.eacDOMObj.modalElements) {\r\n\r\n\t\t\t\t\t\t\tif (group !== _d.state.currentActiveGroup) {\r\n\r\n\t\t\t\t\t\t\t\t_d.eacDOMObj.modalElements[group].elem.addClass('inactive');\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\t_d.eacDOMObj.modalElements[group].elem.removeClass('inactive');\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfunction setAllGroupsActive() {\r\n\r\n\t\t\t\t\t\t_d.state.currentActiveGroup = null;\r\n\r\n\t\t\t\t\t\t$(_p._dc(\"modalGroupContainerClass\")).removeClass('inactive');\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfinancialAdvisorToggle : function(e, p) {\r\n\r\n\t\t\t\t\t_d.state.userHasFinancialAdvisor = p.enableFlag;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (!_d.state.isEACBlockActive) {\r\n\r\n\t\t\t\t\t\t_d.state.isEACBlockActive = true;\r\n\t\t\t\t\t\t$(_p._dc('eacBlockClass')).addClass('active');\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar obj = {\r\n\r\n\t\t\t\t\t\tuserHasFinancialAdvisor : p.enableFlag\r\n\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t_p.callback.financialAdvisorToggle(obj);\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tapplySelectionToUI : function(e, p) {\r\n\r\n\t\t\t\t\t// Update state of fund data in data pool.\r\n\t\t\t\t\tvar itemSelectedCount = 0;\r\n\r\n\t\t\t\t\tfor (var i in p.data.elems) {\r\n\r\n\t\t\t\t\t\tif (p.data.elems[i].hasOwnProperty) {\r\n\r\n\t\t\t\t\t\t\tvar processData = {\r\n\t\t\t\t\t\t\t\tfundGroup : p.data.elems[i].attr('data-group-index'),\r\n\t\t\t\t\t\t\t\tproductIndex : p.data.elems[i].attr('data-group-product-index')\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif (!isProductActive(processData)) {\r\n\r\n\t\t\t\t\t\t\t\tdataUpdateProcess(processData);\r\n\t\t\t\t\t\t\t\tpushTableRowsToUI(processData);\r\n\r\n\t\t\t\t\t\t\t\titemSelectedCount++;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Update State.\r\n\t\t\t\t\t_d.state.currentActiveFunds = $(\".eac-table.desktop .table-injection-div\").children().length;\r\n\t\t\t\t\t_d.state.modalView = \"partial\";\r\n\r\n\t\t\t\t\t// Update UI State.\r\n\t\t\t\t\t_d.eacDOMObj.modal.attr(\"data-view-mode\", \"partial\");\r\n\r\n\t\t\t\t\t// Update Modal after data update.\r\n\t\t\t\t\tpopulateModal();\r\n\r\n\t\t\t\t\tfunction isProductActive(processData) {\r\n\r\n\t\t\t\t\t\treturn _d.fundData[processData.fundGroup].products[processData.productIndex].isActive;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfunction dataUpdateProcess(processData) {\r\n\r\n\t\t\t\t\t\t_d.fundData[processData.fundGroup].products[processData.productIndex].isActive = true;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfunction pushTableRowsToUI(processData) {\r\n\r\n\t\t\t\t\t\tvar gi = processData.fundGroup,\r\n pi = processData.productIndex,\r\n fundName = _d.fundData[gi].products[pi].productName,\r\n html = {\r\n d : htmlFragments.apply('tableRowFragment'),\r\n r : htmlFragments.apply('tableRowResponsiveFragment')\r\n };\r\n\r\n\t\t\t\t\t\thtml.d.attr('data-group-index', gi).attr('data-group-product-index', pi);\r\n\t\t\t\t\t\thtml.r.attr('data-group-index', gi).attr('data-group-product-index', pi);\r\n\r\n\t\t\t\t\t\tvar toggleRequiredElemsD = html.d.find('input[data-toggle-required-on-finadvisor=\"true\"]'),\r\n toggleRequiredElemsR = html.r.find('input[data-toggle-required-on-finadvisor=\"true\"]');\r\n\r\n\t\t\t\t\t\tif (toggleRequiredElemsD.length > 0 && _d.state.userHasFinancialAdvisor) {\r\n\r\n\t\t\t\t\t\t\ttoggleRequiredElemsD.attr('required', true);\r\n\t\t\t\t\t\t\ttoggleRequiredElemsR.attr('required', true);\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar obj = {\r\n\t\t\t\t\t\t\telem : replaceTemplateTag(false, {\r\n\t\t\t\t\t\t\t\ttargetElem : html.d,\r\n\t\t\t\t\t\t\t\ttagName\t: [\r\n\t\t\t\t\t\t\t\t\t\"{fund-name}\"\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvalue : [\r\n\t\t\t\t\t\t\t\t\tfundName\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\treturnInnerHtml : false\r\n\t\t\t\t\t\t\t}),\r\n\r\n\t\t\t\t\t\t\telemResponsive : replaceTemplateTag(false, {\r\n\t\t\t\t\t\t\t\ttargetElem : html.r,\r\n\t\t\t\t\t\t\t\ttagName\t: [\r\n\t\t\t\t\t\t\t\t\t\"{fund-name}\",\r\n\t\t\t\t\t\t\t\t\t\"{table-header-title-2}\",\r\n\t\t\t\t\t\t\t\t\t\"{table-header-title-3}\",\r\n\t\t\t\t\t\t\t\t\t\"{table-header-title-4}\",\r\n\t\t\t\t\t\t\t\t\t\"{table-header-title-5}\",\r\n\t\t\t\t\t\t\t\t\t\"{table-header-title-6}\"\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvalue : [\r\n\t\t\t\t\t\t\t\t\tfundName,\r\n\t\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-2\"],\r\n\t\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-3\"],\r\n\t\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-4\"],\r\n\t\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-5\"],\r\n\t\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-6\"]\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\treturnInnerHtml : false\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t_p.callback.UITableRowFragment(obj);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tapplyEACEventListeners : function() \r\n\t\t\t{\r\n\t\t\t\tfor (var event in this.events)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.events[event].hasOwnProperty)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar self = this;\r\n\t\t\t\t\t\tgetEventHandler(self, event);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction getEventHandler(self, event)\r\n\t\t\t\t{\r\n\t\t\t\t\t$(document).on(event, function(e, p)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tself.events[event](e, p);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tvar UIEvents = {\r\n\r\n\t\t\tdocument : $(document),\r\n\r\n\t\t\tevents : {\r\n\t\t\t\t\r\n\t\t\t\ttoggleFinancialAdvisorCalcs : function($doc)\r\n\t\t\t\t{\r\n\t\t\t\t\t$doc.on(\"click\", _p._dc(\"financialAdvisorRadioButtonClass\"), function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar enableFlag = this.getAttribute(\"value\") === \"true\";\r\n\r\n\r\n window.gaTracking.sendEvent('Selection', 'EACTool', 'Do you have a financial adviser?', (enableFlag) ? 'Yes' : 'No', '', '');\r\n\r\n\t\t\t\t\t\t$doc.trigger(_e.financialAdvisorToggle, \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\"enableFlag\" : enableFlag\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\taddProduct : function($doc)\r\n\t\t\t\t{\r\n\t\t\t\t\t$(_p._dc(\"cta_addProduct\")).css(\"outline\", \"1px solid #055a60\");\r\n\r\n\t\t\t\t\t$doc.on(\"click\", _p._dc(\"cta_addProduct\"), function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Vertically center modal\r\n\t\t\t\t\t\tvar $modalContent = _d.eacDOMObj.modal.find(\".modal-content\");\r\n\t\t\t\t\t\tvar $modalFundList = _d.eacDOMObj.modal.find(\".modal-content-injection-div\");\r\n\r\n\t\t\t\t\t\tvar viewportHeight = $(window).height();\r\n\r\n\t\t\t\t\t\t$modalContent.css({\r\n\t\t\t\t\t\t\t/*\"height\" : viewportHeight * (0.8),*/\r\n\t\t\t\t\t\t\t\"margin-top\" : viewportHeight * (0.1)\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t$modalFundList.css({\r\n\t\t\t\t\t\t\t\"max-height\" : viewportHeight * (0.45),\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif (_d.state.modalView === \"partial\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\th_setInactiveGroupOnPartialView();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_d.eacDOMObj.modal.addClass(\"show-modal\");\r\n\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n\t\t\t\tremoveProduct : function($doc)\r\n\t\t\t\t{\r\n\t\t\t\t\t$doc.on(\"click\", _p._dc(\"control_removeProduct\"), function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar $this = $(this);\r\n\t\t\t\t\t\tvar elemData = {\r\n\t\t\t\t\t\t\tgroup : $this.closest(_p._dc(\"tableRow\")).attr(\"data-group-index\"),\r\n\t\t\t\t\t\t\tproductIndex : $this.closest(_p._dc(\"tableRow\")).attr(\"data-group-product-index\")\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tvar data = {\r\n\t\t\t\t\t\t\tgroup : elemData.group,\r\n\t\t\t\t\t\t\tproductIndex : elemData.productIndex\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t// update state\r\n\t\t\t\t\t\t_d.state.currentActiveFunds--;\r\n\t\t\t\t\t\t_d.fundData[data.group].products[data.productIndex].isActive = false;\r\n\r\n\t\t\t\t\t\tif (_d.state.currentActiveFunds === 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar $tableHeader = $(\".table-header-injection-div, .table-injection-div\");\r\n\t\t\t\t\t\t\t$tableHeader.removeClass(\"show-table-content\");\r\n\t\t\t\t\t\t\th_setAllActiveGroupsOnModalViewFull();\r\n\t\t\t\t\t\t\t_d.state.modalView = \"full\";\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpopulateModal();\r\n\r\n\t\t\t\t\t\t// console.log('REMOVING : ' + _d.fundData[data.group].productGroupTitle + ' > ' + _d.fundData[data.group].products[data.productIndex].productName);\r\n\r\n\t\t\t\t\t\t// Remove row from table.\r\n\t\t\t\t\t\t$(_p._dc(\"tableRow\") + \"[data-group-index='\" + data.group +\"'][data-group-product-index='\" + data.productIndex + \"']\").remove();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tcloseModal : function($doc)\r\n\t\t\t\t{\r\n\t\t\t\t\t$doc.on(\"click\", _p._dc(\"control_closeModal\"), function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar $this = $(this);\r\n\t\t\t\t\t\tvar modal = $this.attr(\"data-modal\");\r\n\r\n\t\t\t\t\t\tvar modalControlCode = {\r\n\t\t\t\t\t\t\t\"product-modal\" : function()\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t_d.eacDOMObj.modal.removeClass(\"show-modal\");\r\n\t\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t\t\"investManCharge\" : function()\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t$(\".modal-investManCharge\").removeClass(\"show\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tmodalControlCode[modal]();\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n\t\t\t\tclearValues : function($doc)\r\n\t\t\t\t{\r\n\t\t\t\t\t$doc.on(\"click\", _p._dc(\"cta_clearValues\"), function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t_d.eacDOMObj.tableContainer.find(\"input\").val(\"\");\r\n\t\t\t\t\t\t_d.eacDOMObj.eacResultsTable.find(\".result-block .rField p:not(.responsive-year-header)\").html(\" \");\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n /**\r\n *\r\n * @param $doc\r\n */\r\n\t\t\t\tcalculate : function($doc) {\r\n\r\n\t\t\t\t\t$doc.on(\"click\", _p._dc(\"cta_calculate\"), function() {\r\n\r\n\t\t\t\t\t\tcalculateEACValues();\r\n\t\t\t\t\t\t_d.eacDOMObj.eacBlock.addClass(\"show-field-validation\");\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tmodalControl_confirmProductListUpdate : function($doc)\r\n\t\t\t\t{\r\n\t\t\t\t\t$doc.on(\"click\", _p._dc(\"control_confirmProductListUpdate\"), function()\r\n\t\t\t\t\t{\t\r\n\t\t\t\t\t\tvar data = checkedItemsInfundGroup(_d.state.currentActiveGroup, true);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor (var i in data.elems)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (data.elems[i].hasOwnProperty)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar $data = $(data.elems[i]);\r\n\t\t\t\t\t\t\t\t_d.eacDOMObj.modalElements[$data.attr(\"data-group-index\")].elem.find(\"[data-group-product-index='\" + $data.attr('data-group-product-index') + \"'] input\").removeClass(\"checked\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t$doc.trigger(_e.applySelectionToUI, {\r\n\t\t\t\t\t\t\t\"data\" : data\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t_d.eacDOMObj.modal.removeClass(\"show-modal\");\r\n\r\n\t\t\t\t\t\tif (_d.state.currentActiveFunds > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t_d.eacDOMObj.ctaControlBlock.addClass(\"show\");\r\n\t\t\t\t\t\t\t$(\".text-block-notice\").addClass(\"show\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n\t\t\t\tproductControl_toggle : function($doc)\r\n\t\t\t\t{\r\n\t\t\t\t\t$doc.on(\"click\", _p._dc(\"control_toggleProduct\"), function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar $this = $(this);\r\n\t\t\t\t\t\tvar $datapoint = $this.closest(_p._dc(\"datapoint\"));\r\n\r\n\t\t\t\t\t\t// toggle checked class\r\n\t\t\t\t\t\t$this.toggleClass(\"checked\");\r\n\r\n\t\t\t\t\t\t// Find closest datapoint and get values\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar data = {\r\n\t\t\t\t\t\t\tgroupIndex \t\t\t: $datapoint.attr(\"data-group-index\"),\r\n\t\t\t\t\t\t\tgroupProductIndex \t: $datapoint.attr(\"data-group-product-index\"),\r\n\t\t\t\t\t\t\tactionIndex \t\t: $datapoint.attr(\"data-action-index\")\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t// Sync Product List\r\n\t\t\t\t\t\t$doc.trigger(_e.syncProductList, {\r\n\t\t\t\t\t\t\t\"data\" : data\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n\t\t\t\tisResponsive : function($doc) {\r\n\r\n\t\t\t\t\t$doc.on(\"resize\", function() {\r\n\r\n\t\t\t\t\t\tisResponsiveCheck();\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\tapplyUIEventHandlers : function() {\r\n\r\n\t\t\t\tfor (var event in this.events) {\r\n\r\n\t\t\t\t\tif (this.events[event].hasOwnProperty) {\r\n\r\n\t\t\t\t\t\tthis.events[event](this.document);\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\tvar htmlFragments = {\r\n\r\n\t\t\tfragment : {},\r\n\r\n\t\t\tgetHtmlFragments : function() {\r\n\r\n\t\t\t\tvar e = {\r\n\t\t\t\t\ttableHeaderFragment \t\t\t\t: $(_p._gf(_p.c.tableHeaderFragmentClass)),\r\n\t\t\t\t\ttableRowFragment\t\t\t\t\t: $(_p._gf(_p.c.tableRowLargeFragementClass)),\r\n\t\t\t\t\ttableRowResponsiveFragment\t\t\t: $(_p._gf(_p.c.tableRowResponsiveFragementClass)),\r\n\t\t\t\t\tmodalFragment \t\t\t\t\t\t: $(_p._gf(_p.c.modalFragmentClass)),\r\n\t\t\t\t\tmodalProductGroupContainerFragment \t: $(_p._gf(_p.c.modalGroupContainerClass)),\r\n\t\t\t\t\tmodalProductTitleFragment \t\t: $(_p._gf(_p.c.modalGroupTitleFragmentClass)),\r\n\t\t\t\t\tmodalProductRowFragment\t\t\t\t: $(_p._gf(_p.c.modalRowFragmentClass))\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Add fragments into object pool\r\n\t\t\t\tfor (var i in e)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (e[i].hasOwnProperty)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.fragment[i] = {};\r\n\t\t\t\t\t\tthis.fragment[i] = e[i].clone(true, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tapply : function(fragmentNodeKey)\r\n\t\t\t{\r\n\t\t\t\treturn this.fragment[fragmentNodeKey];\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\t/**\r\n\t\t*\r\n\t\t*\r\n\t\t* PUBLIC METHODS\r\n\t\t* \r\n\t\t* \r\n\t\t*/\r\n\t\tthis.init = function(userParams)\r\n\t\t{\r\n\t\t\tuserParams = userParams || null;\r\n\r\n\t\t\t_p = setParams(paramsDefault, userParams);\r\n\r\n\t\t\tinitializeController(_p);\r\n\t\t};\r\n\r\n\r\n\r\n\r\n\r\n\t\t/**\r\n\t\t*\r\n\t\t*\r\n\t\t* INTERNAL METHODS\r\n\t\t* \r\n\t\t* \r\n\t\t*/\r\n\t\tfunction setParams(paramsDefault, userParams)\r\n\t\t{\r\n\t\t\tvar p = {};\r\n\r\n\t\t\tif (userParams === null)\r\n\t\t\t{\r\n\t\t\t\tp = paramsDefault;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$.extend(true, p, paramsDefault, userParams);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn p;\r\n\t\t}\r\n\r\n\r\n\t\tfunction isResponsiveCheck()\r\n\t\t{\r\n\t\t\tvar width = $(window).width();\r\n\r\n\t\t\tif (width <= 900)\r\n\t\t\t{\r\n\t\t\t\t_d.state.isResponsive = true;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t_d.state.isResponsive = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction replaceTemplateTag(isTargetHtmlString, p)\r\n\t\t{\r\n\t\t\tapplyDefaultParamValues();\r\n\r\n\t\t\tvar toReplace = getToReplaceArray();\r\n\t\t\t\r\n\t\t\tif (isTargetHtmlString)\r\n\t\t\t{\r\n\t\t\t\treturn replaceTagStringTarget(p.targetElem);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn replaceTagOnObjectTarget(p.targetElem.clone(true, true));\r\n\t\t\t}\r\n\r\n\t\t\t\r\n\t\t\tfunction applyDefaultParamValues()\r\n\t\t\t{\r\n\t\t\t\tisTargetHtmlString\t= selfOrFalse(isTargetHtmlString);\r\n\r\n\t\t\t\tp.targetElem \t\t= selfOrNull(p.targetElem);\r\n\t\t\t\tp.tagName \t\t\t= selfOrNull(p.tagName);\r\n\t\t\t\tp.value \t\t\t= selfOrNull(p.value);\r\n\t\t\t\tp.returnInnerHtml\t= selfOrFalse(p.returnInnerHtml);\r\n\r\n\t\t\t\tfunction selfOrNull(self)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn self || null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction selfOrFalse(self)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn self || false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction getToReplaceArray()\r\n\t\t\t{\r\n\t\t\t\tvar arr = [];\r\n\r\n\t\t\t\tif ($.isArray(p.tagName))\r\n\t\t\t\t{\r\n\t\t\t\t\tloopTagArray();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tarr.push({\r\n\t\t\t\t\t\ttagName : p.tagName,\r\n\t\t\t\t\t\tvalue \t: p.value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn arr;\r\n\r\n\r\n\t\t\t\tfunction loopTagArray()\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (var i in p.tagName)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (p.tagName[i].hasOwnProperty)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarr.push({\r\n\t\t\t\t\t\t\t\ttagName : p.tagName[i],\r\n\t\t\t\t\t\t\t\tvalue \t: p.value[i]\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction replaceTagOnObjectTarget(target)\r\n\t\t\t{\r\n\t\t\t\tfor (var i in toReplace)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (toReplace[i].hasOwnProperty)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdoReplace(toReplace[i].tagName, toReplace[i].value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (p.returnInnerHtml)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn target[0].innerHTML;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn target[0].outerHTML;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction doReplace(tagName, value)\r\n\t\t\t\t{\r\n\t\t\t\t\ttarget.html(function(index, html)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn html.replace(tagName, value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tfunction replaceTagStringTarget(target) \r\n\t\t\t{\r\n\t\t\t\tfor (var i in toReplace)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (toReplace[i].hasOwnProperty)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdoReplace(toReplace[i].tagName, toReplace[i].value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn target;\r\n\r\n\t\t\t\tfunction doReplace(tagName, value)\r\n\t\t\t\t{\r\n\t\t\t\t\ttarget = target.replace(tagName, value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tfunction initializeController()\r\n\t\t{\r\n\t\t\tvar f = {\r\n\t\t\t\tconsumeEACData : function()\r\n\t\t\t\t{\r\n\t\t\t\t\tvar d = {\r\n\t\t\t\t\t\tgetFundlistData : function()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar fd = window.eacData[_p.d.fundListData];\r\n\r\n\t\t\t\t\t\t\tfor (var i in fd)\r\n\t\t\t\t\t\t\t{\r\n if (fd[i].hasOwnProperty !== \"undefined\")\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tvar data = {};\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tvar productGroupSchema = {\r\n\t\t\t\t\t\t\t\t\t\tproductGroup \t: null,\r\n\t\t\t\t\t\t\t\t\t\tisActiveGroup \t: false,\r\n\t\t\t\t\t\t\t\t\t\tproducts \t\t: {}\r\n\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\tdata = productGroupSchema;\r\n\r\n\t\t\t\t\t\t\t\t\tdata.productGroup = fd[i].productGroup;\r\n\t\t\t\t\t\t\t\t\tdata.productGroupTitle = fd[i].productGroupTitle;\r\n\t\t\t\t\t\t\t\t\tdata.products = getProductsForGroup(fd[i].products);\r\n\r\n\t\t\t\t\t\t\t\t\t_d.fundData[fd[i].productGroup] = data;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tfunction getProductsForGroup(products)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar returnData = {};\r\n\r\n\t\t\t\t\t\t\t\tfor (var i in products)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (products[i].hasOwnProperty)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tvar productSchema = {\r\n\t\t\t\t\t\t\t\t\t\t\tproductName : null,\r\n\t\t\t\t\t\t\t\t\t\t\tfundCode : null,\r\n\t\t\t\t\t\t\t\t\t\t\tisActive : false,\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\treturnData[i] = productSchema;\r\n\t\t\t\t\t\t\t\t\t\treturnData[i].productName = products[i].productName;\r\n\t\t\t\t\t\t\t\t\t\treturnData[i].fundCode = products[i].fundCode;\r\n\t\t\t\t\t\t\t\t\t\treturnData[i].productId = products[i].productId;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\treturn returnData;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\tgetTemplateData : function()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar td = window.eacData[_p.d.templateData];\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tfor (var dataGroup in td)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (td[dataGroup].hasOwnProperty)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t// Create node for data group\r\n\t\t\t\t\t\t\t\t\t_d.templateData[dataGroup] = {};\r\n\r\n\t\t\t\t\t\t\t\t\t// Loop thru data group and add template data to data pool\r\n\t\t\t\t\t\t\t\t\tgetDataInDataGroup(td[dataGroup], dataGroup);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tfunction getDataInDataGroup(node, nodeName)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tfor (var i in node)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (node[i].hasOwnProperty)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t_d.templateData[nodeName][i] = node[i];\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (typeof window.eacData === \"undefined\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twindow.console.warn(\"eacData object is not defined globally, or was not instantiated before the execution of this function.\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpopulateObjectPool();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfunction populateObjectPool()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor (var key in d)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (d[key].hasOwnProperty)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\td[key]();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\tgetHtmlFragments : function()\r\n\t\t\t\t{\r\n\t\t\t\t\thtmlFragments.getHtmlFragments();\r\n\t\t\t\t},\r\n\r\n\t\t\t\tgetDOMRefObjects : function()\r\n\t\t\t\t{\r\n\t\t\t\t\t_d.eacDOMObj.eacBlock \t\t\t= $(_p._dc(\"eacBlockClass\"));\r\n\t\t\t\t\t_d.eacDOMObj.eacContainer \t\t= $(_p._dc(\"eacContainerClass\"));\r\n\t\t\t\t\t_d.eacDOMObj.tableContainer \t= $(_p._dc(\"tableContainerClass\"));\r\n\t\t\t\t\t_d.eacDOMObj.modal \t\t\t\t= $(_p._dc(\"modalFragmentClass\"));\r\n\t\t\t\t\t_d.eacDOMObj.desktopTableHeader = $(_p._dc(\"tableHeaderInjectionClass\"));\r\n\t\t\t\t\t_d.eacDOMObj.eacResultsTable = $(_p._dc(\"resultTableClass\"));\r\n\t\t\t\t\t_d.eacDOMObj.ctaControlBlock = $(_p._dc(\"ctaControlBlockClass\"));\r\n\t\t\t\t},\r\n\r\n\t\t\t\tapplyModal : function()\r\n\t\t\t\t{\r\n\t\t\t\t\t$(\"body\").append(_d.eacDOMObj.modal);\r\n\r\n\t\t\t\t\tpopulateModal();\r\n\t\t\t\t},\r\n\r\n\r\n\t\t\t\tapplyDesktopTableHeader : function()\r\n\t\t\t\t{\r\n\t\t\t\t\t_d.eacDOMObj.desktopTableHeader.append(\r\n\t\t\t\t\t\treplaceTemplateTag(false, {\r\n\t\t\t\t\t\t\ttargetElem : htmlFragments.apply(\"tableHeaderFragment\"),\r\n\r\n\t\t\t\t\t\t\ttagName : [\r\n\t\t\t\t\t\t\t\t\"{table-header-title-1}\",\r\n\t\t\t\t\t\t\t\t\"{table-header-title-2}\",\r\n\t\t\t\t\t\t\t\t\"{table-header-title-3}\",\r\n\t\t\t\t\t\t\t\t\"{table-header-title-4}\",\r\n\t\t\t\t\t\t\t\t\"{table-header-title-5}\",\r\n\t\t\t\t\t\t\t\t\"{table-header-title-6}\"\r\n\t\t\t\t\t\t\t],\r\n\r\n\t\t\t\t\t\t\tvalue : [\r\n\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-1\"],\r\n\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-2\"],\r\n\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-3\"],\r\n\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-4\"],\r\n\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-5\"],\r\n\t\t\t\t\t\t\t\t_d.templateData.tableHeaders[\"table-header-title-6\"]\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tstoreModalElementReferences : function()\r\n\t\t\t\t{\r\n\t\t\t\t\t// create empty node to store reference objects for fund groups & funds per group\r\n\t\t\t\t\t_d.eacDOMObj.modalElements = {};\r\n\r\n\t\t\t\t\tfor (var fundGroup in _d.fundData)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (_d.fundData[fundGroup].hasOwnProperty)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar $fundGroupElem = $(_p._dc(\"modalGroupContainerClass\") + \"[data-group-index='\" + fundGroup + \"']\");\r\n\r\n\t\t\t\t\t\t\t_d.eacDOMObj.modalElements[fundGroup] = {\r\n\t\t\t\t\t\t\t\telem : $fundGroupElem,\r\n\t\t\t\t\t\t\t\tproducts : {}\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tfor (var fund in _d.fundData[fundGroup].products)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (_d.fundData[fundGroup].products[fund].hasOwnProperty)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t_d.eacDOMObj.modalElements[fundGroup].products[fund] = {\r\n\t\t\t\t\t\t\t\t\t\telem : $fundGroupElem.find(_p._dc(\"modalRowFragmentClass\") + \"[data-group-product-index='\" + fund + \"']\")\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\tapplyEACEventListeners : function()\r\n\t\t\t\t{\r\n\t\t\t\t\teacEvents.applyEACEventListeners();\t\t\r\n\t\t\t\t},\r\n\r\n\t\t\t\tapplyUIEventHandlers : function()\r\n\t\t\t\t{\r\n\t\t\t\t\tUIEvents.applyUIEventHandlers();\r\n\t\t\t\t},\r\n\r\n\t\t\t\tcheckResponsiveStateOnLoad : function()\r\n\t\t\t\t{\r\n\t\t\t\t\tisResponsiveCheck();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\r\n\t\t\t// Function Loader\r\n\t\t\tfor (var key in f)\r\n\t\t\t{\r\n\t\t\t\tif (f[key].hasOwnProperty)\r\n\t\t\t\t{\r\n\t\t\t\t\tf[key]();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction populateModal()\r\n\t\t{\r\n\t\t\tvar modal \t\t\t\t\t= _d.eacDOMObj.modal;\r\n\t\t\tvar modalFragment \t\t= htmlFragments.apply(\"modalFragment\");\r\n\t\t\tvar modalContent \t\t\t= \"\";\r\n\t\t\tvar titleHeaderFragment \t= htmlFragments.apply(\"modalProductTitleFragment\");\r\n\t\t\tvar productRowFragment \t\t= htmlFragments.apply(\"modalProductRowFragment\");\r\n\t\t\tvar productGroupFragment;\r\n\r\n\t\t\t// Get Product Title Headers\r\n\t\t\tfor (var fundGroup in _d.fundData)\r\n\t\t\t{\r\n\t\t\t\tif (_d.fundData[fundGroup].hasOwnProperty)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar groupHeader \t= \"\";\r\n\t\t\t\t\tvar fundsForGroup \t= \"\";\r\n\r\n\t\t\t\t\tproductGroupFragment = htmlFragments.apply(\"modalProductGroupContainerFragment\");\t\t\r\n\t\t\t\t\tproductGroupFragment.attr(\"data-group-index\", fundGroup);\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t// First Get the Group Header\r\n\t\t\t\t\ttitleHeaderFragment.attr(\"data-group-index\", fundGroup);\r\n\r\n\t\t\t\t\tgroupHeader = replaceTemplateTag(false, {\r\n\t\t\t\t\t\ttargetElem : titleHeaderFragment,\r\n\t\t\t\t\t\ttagName : \"{title}\",\r\n\t\t\t\t\t\tvalue : _d.fundData[fundGroup].productGroupTitle\r\n\t\t\t\t\t});\r\n\r\n\r\n\t\t\t\t\t// Then get the funds per Group\r\n\t\t\t\t\tfor (var fund in _d.fundData[fundGroup].products)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (_d.fundData[fundGroup].products[fund].hasOwnProperty &&\r\n\t\t\t\t\t\t\t!_d.fundData[fundGroup].products[fund].isActive)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tproductRowFragment.attr({\r\n\t\t\t\t\t\t\t\t\"data-group-index\" : fundGroup,\r\n\t\t\t\t\t\t\t\t\"data-group-product-index\" : fund,\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tfundsForGroup += replaceTemplateTag(false, {\r\n\t\t\t\t\t\t\t\ttargetElem : productRowFragment,\r\n\t\t\t\t\t\t\t\ttagName : \"{product-name}\",\r\n\t\t\t\t\t\t\t\tvalue : _d.fundData[fundGroup].products[fund].productName\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Inject html into Group Container & append to modalContent\r\n\t\t\t\t\tmodalContent += replaceTemplateTag(false, {\r\n\t\t\t\t\t\ttargetElem : productGroupFragment,\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\ttagName : [\r\n\t\t\t\t\t\t\t\"{group-header}\", \r\n\t\t\t\t\t\t\t\"{group-products}\"\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvalue : [\r\n\t\t\t\t\t\t\tgroupHeader, \r\n\t\t\t\t\t\t\tfundsForGroup\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t// clear current modal\r\n\t\t\tmodal.html(\"\");\r\n\r\n\t\t\t// use replaceTemplateTag to inject modalFragment's innerHTML\r\n\t\t\t// to avoid duplication of modalFragment's parent div \r\n\t\t\tmodal.html(replaceTemplateTag(false, {\r\n\t\t\t\ttargetElem : modalFragment,\r\n\t\t\t\ttagName\t: \"{n/a}\",\r\n\t\t\t\tvalue : null,\r\n\t\t\t\treturnInnerHtml : true\r\n\t\t\t}));\r\n\t\t\t\r\n\t\t\t// inject modalContent into modal\r\n\t\t\tmodal.html(\r\n\t\t\t\treplaceTemplateTag(false, {\r\n\t\t\t\t\ttargetElem : modal,\r\n\t\t\t\t\ttagName\t: \"{modal-content}\",\r\n\t\t\t\t\tvalue : modalContent,\r\n\t\t\t\t\treturnInnerHtml : true\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\r\n\r\n\t\tfunction checkedItemsInfundGroup(groupName, modalControl_confirmProductListUpdateClicked) {\r\n\r\n\t\t\th_storeModalElemRef();\r\n\r\n\t\t\tvar groupProducts = _d.eacDOMObj.modalElements[groupName].products,\r\n\t\t\t\treturnObj = {\r\n\t\t\t\t\tcount : 0,\r\n\t\t\t\t\telems : []\r\n\t\t\t\t};\r\n\t\t\t\r\n\t\t\tfor (var item in groupProducts) {\r\n\r\n\t\t\t\tif (groupProducts[item].hasOwnProperty) {\r\n\r\n\t\t\t\t\tvar targetElem = groupProducts[item].elem,\r\n\t\t\t\t\t\ttargetControl = targetElem.find(_p._dc('control_toggleProduct'));\r\n\r\n\t\t\t\t\tif(targetControl.hasClass('checked')) {\r\n\r\n\t\t\t\t\t\treturnObj.count++;\r\n\t\t\t\t\t\treturnObj.elems.push(targetElem);\r\n\r\n\t\t\t\t\t\tif (modalControl_confirmProductListUpdateClicked) {\r\n\r\n window.gaTracking.sendEvent('Selection', 'EACTool', targetElem[0].innerText.trim(), 'Selected', '', '');\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn returnObj;\r\n\r\n\t\t}\r\n\r\n\t\tfunction calculateEACValues()\r\n\t\t{\t\r\n\t\t\t// Get rows\r\n\t\t\tvar $rows;\r\n\t\t\tif (_d.state.isResponsive)\r\n\t\t\t{\r\n\t\t\t\t// Mobile table row\r\n\t\t\t\t$rows = $(_d.eacDOMObj.tableContainer[1]).find(_p._dc(\"tableRow\"));\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Desktop table row\r\n\t\t\t\t$rows = $(_d.eacDOMObj.tableContainer[0]).find(_p._dc(\"tableRow\"));\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// Row validation check\r\n\t\t\tvar validationCheckResult = rowValidationCheck($rows);\r\n\t\t\t\r\n\r\n\t\t\tif (validationCheckResult.isValid)\r\n\t\t\t{\r\n\t\t\t\t// If Valid, collect row data, and execute eacCalculationResults callback\r\n\t\t\t\tvar rowValueData = GetRowData($rows);\r\n\t\t\t\t_p.callback.eacCalculationResults(rowValueData);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// If Invalid, pass validation check results to eacValidationFailed callback\r\n\t\t\t\t_p.callback.eacValidationFailed(validationCheckResult);\r\n\t\t\t}\r\n\r\n\t\t\tfunction GetRowData($rows) \r\n\t\t\t{\t\r\n\t\t\t\tvar fieldDataByClass = {\r\n\t\t\t\t\tdataLumpsum : function($fieldElem)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ($fieldElem.hasClass(\"data-lumpsum\"))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn Number($fieldElem.val());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tdataRecurringOrder : function($fieldElem)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ($fieldElem.hasClass(\"data-recurring-order\"))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn Number($fieldElem.val());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tdataInitialAdviceFee : function($fieldElem)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ($fieldElem.hasClass(\"data-initial-advice-fee\"))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn Number($fieldElem.val().replace(\"%\",\"\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tdataRecurringAdviseFee : function($fieldElem)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ($fieldElem.hasClass(\"data-recurring-advice-fee\"))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn Number($fieldElem.val().replace(\"%\",\"\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar returnData = {};\r\n\t\t\t\t\r\n\t\t\t\t$rows.each(function()\r\n\t\t\t\t{\r\n\t\t\t\t\tvar $this = $(this);\r\n\t\t\t\t\tvar index = $this.attr(\"data-group-product-index\");\r\n\t\t\t\t\tvar productObj = _d.fundData[$this.attr(\"data-group-index\")].products[$this.attr(\"data-group-product-index\")];\r\n\t\t\t\t\tvar fundID = productObj.fundCode;\r\n\t\t\t\t\tvar productId = productObj.productId;\r\n\t\t\t\t\tvar initialAdviceFee, recurringAdviceFee;\r\n\r\n\t\t\t\t\tif (_d.state.userHasFinancialAdvisor)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tinitialAdviceFee \t= fieldDataByClass.dataInitialAdviceFee($this.find(\".data-initial-advice-fee\"));\r\n\t\t\t\t\t\trecurringAdviceFee \t= fieldDataByClass.dataRecurringAdviseFee($this.find(\".data-recurring-advice-fee\"));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinitialAdviceFee \t= 0;\r\n\t\t\t\t\t\trecurringAdviceFee \t= 0;\r\n\t\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t\treturnData[index] = {};\r\n\t\t\t\t\treturnData[index] = {\r\n\t\t\t\t\t\tlumpsum \t\t\t\t: fieldDataByClass.dataLumpsum($this.find(\".data-lumpsum\")),\r\n\t\t\t\t\t\trecurringDebitOrder \t: fieldDataByClass.dataRecurringOrder($this.find(\".data-recurring-order\")),\r\n\t\t\t\t\t\tinitialAdviceFee \t\t: initialAdviceFee,\r\n\t\t\t\t\t\trecurringAdviceFee \t\t: recurringAdviceFee,\r\n\t\t\t\t\t\tfundId \t\t\t\t\t: fundID,\r\n\t\t\t\t\t\tproductId \t\t\t\t: productId,\r\n\t\t\t\t\t\tuserHasFinancialAdvisor : _d.state.userHasFinancialAdvisor\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn returnData;\r\n\t\t\t}\r\n\r\n\t\t\tfunction rowValidationCheck($rows)\r\n\t\t\t{\r\n\t\t\t\treturn {\r\n\t\t\t\t\tisValid : $rows.find(\"input:invalid\").length === 0,\r\n\t\t\t\t\tfieldsFailed : {\r\n\t\t\t\t\t\tlumpsum \t\t\t\t: $rows.find(\"input.data-lumpsum:invalid\").length > 0,\r\n\t\t\t\t\t\trecurringDebitOrder \t: $rows.find(\"input.data-recurring-order:invalid\").length > 0,\r\n\t\t\t\t\t\tinitialAdviceFee \t\t: $rows.find(\"input.data-initial-advice-fee:invalid\").length > 0,\r\n\t\t\t\t\t\trecurringAdviceFee \t\t: $rows.find(\"input.data-recurring-advice-fee:invalid\").length > 0\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\t\r\n\t\t}\r\n\r\n\r\n\t\tfunction h_storeModalElemRef()\r\n\t\t{\r\n\t\t\t// create empty node to store reference objects for fund groups & funds per group\r\n\t\t\t_d.eacDOMObj.modalElements = {};\r\n\r\n\t\t\tfor (var fundGroup in _d.fundData)\r\n\t\t\t{\r\n\t\t\t\tif (_d.fundData[fundGroup].hasOwnProperty)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar $fundGroupElem = $(_p._dc(\"modalGroupContainerClass\") + \"[data-group-index='\" + fundGroup + \"']\");\r\n\r\n\t\t\t\t\t_d.eacDOMObj.modalElements[fundGroup] = {\r\n\t\t\t\t\t\telem : $fundGroupElem,\r\n\t\t\t\t\t\tproducts : {}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tfor (var fund in _d.fundData[fundGroup].products)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (_d.fundData[fundGroup].products[fund].hasOwnProperty)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t_d.eacDOMObj.modalElements[fundGroup].products[fund] = {\r\n\t\t\t\t\t\t\t\telem : $fundGroupElem.find(_p._dc(\"modalRowFragmentClass\") + \"[data-group-product-index='\" + fund + \"']\")\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction h_setInactiveGroupOnPartialView()\r\n\t\t{\r\n\t\t\th_storeModalElemRef();\r\n\r\n\t\t\tfor (var group in _d.eacDOMObj.modalElements)\r\n\t\t\t{\r\n\t\t\t\tif (_d.eacDOMObj.modalElements[group].hasOwnProperty)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (group !== _d.state.currentActiveGroup)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t_d.eacDOMObj.modalElements[group].elem.addClass(\"inactive\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t_d.eacDOMObj.modalElements[group].elem.removeClass(\"inactive\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction h_setAllActiveGroupsOnModalViewFull()\r\n\t\t{\r\n\t\t\th_storeModalElemRef();\r\n\r\n\t\t\tfor (var group in _d.eacDOMObj.modalElements)\r\n\t\t\t{\r\n\t\t\t\tif (_d.eacDOMObj.modalElements[group].hasOwnProperty)\r\n\t\t\t\t{\r\n\t\t\t\t\t_d.eacDOMObj.modalElements[group].elem.removeClass(\"inactive\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\twindow.eacController = new eacControllerClass();\r\n\r\n})(jQuery);\r\n\r\n\r\n\r\n\r\n\r\n(function()\r\n{\r\n\t\"use strict\";\r\n\twindow.isEACDataReady = false;\r\n\r\n\t$.ajax({\r\n url: \"/api/UmbracoData/GetFundDetails\",\r\n type: \"GET\",\r\n success: function (data) \r\n {\r\n \tsetTimeout(function()\r\n \t{\r\n\t\t\t\t// filter out funds by code\r\n\t\t\t\tconst filteredData = data.filter((fund) => fund.FundCode !== \"PEPI\" && fund.FundCode !== \"PEPCT\");\r\n\t\t\t\tcompileEACDataObject(filteredData);\r\n\t\t\t\twindow.isEACDataReady = true;\r\n \t}, 500); // This is done to deal with IE11 getting undefined values for 'window.eacData.fundListData'\r\n }\r\n });\r\n\r\n\tfunction compileEACDataObject(data)\r\n {\r\n var fundProductArray = {\r\n NULL: \"Uncategorized\",\r\n LA: \"Living Annuity\",\r\n UT: \"Units Trusts\",\r\n TFSA: \"Tax-Free Unit Trusts\",\r\n PIP: \"Income Portfolio\",\r\n International: \"International Unit Trusts\"\r\n \r\n };\r\n\t\tvar fundProductGroupName = {\r\n\t\t\tNULL \t: \"Uncategorized\",\r\n\r\n\t\t};\r\n\r\n \r\n\t\tvar findListSortOrder = [\r\n\t\t\t\"UT\", \r\n\t\t\t\"TFSA\", \r\n\t\t\t\"International\", \r\n\t\t\t\"PIP\", \r\n\t\t\t\"LA\"\r\n\t\t];\r\n\r\n \r\n\t\tvar fundListData = {},\r\n productGroupName;\r\n\t\t\r\n fundListData = window.eacData.fundListData;\r\n \r\n\t\tfor (var i in data)\r\n\t\t{\r\n\t\t\tif(data[i].hasOwnProperty)\r\n\t\t\t{\r\n\t\t\t\tvar productData = {\r\n\t\t\t\t\tproductName : data[i].FundName,\r\n\t\t\t\t\tfundCode : data[i].FundCode,\r\n\t\t\t\t\tproductId : data[i].FundProduct\r\n };\r\n\r\n \r\n\r\n \r\n //dynamically populating the fundProductGroupName obj to cater for for nodes being deleted or added in umbraco\r\n if (!fundProductGroupName[data[i].FundProduct]) {\r\n\r\n var curretKey = data[i].FundProduct;\r\n\r\n if (fundProductArray[curretKey]){\r\n fundProductGroupName[curretKey] = fundProductArray[curretKey];\r\n }\r\n else\r\n {\r\n //if the fundProductArray does not contain a key for this fund product then populate the fundProductGroupName with a key and value from the data obj\r\n fundProductGroupName[curretKey] = data[i].FundProduct;\r\n }\r\n\r\n //If any new fundProductGroupName is returned by the controller it will be appended too the sortlistorder\r\n if (findListSortOrder.indexOf(curretKey) === -1) {\r\n findListSortOrder.push(curretKey);\r\n }\r\n \r\n }\r\n\r\n // store the formatted FundProduct name by doing a lookup on fundProductGroupName\r\n\t\t\t\tif (data[i].FundProduct === \"\")\r\n\t\t\t\t{\r\n\t\t\t\t\tproductGroupName = fundProductGroupName.NULL;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tproductGroupName = fundProductGroupName[data[i].FundProduct];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check if FundProduct already exists in fundListData\r\n\t\t\t\tvar currentFund = productGroupExists(productGroupName);\r\n\t\t\t\tif(currentFund.exist)\r\n\t\t\t\t{\r\n\t\t\t\t\t// if it does exist, add product to existing node group\r\n\t\t\t\t\tfundListData[currentFund.index].products.push(productData);\r\n\t\t\t\t}\r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\t// if it doesn't exist, create new object node with the new FundProduct\r\n\t\t\t\t\t// and add the current fund to new node group.\r\n\t\t\t\t\tfundListData.push({\r\n\t\t\t\t\t\tproductGroup \t\t: formatProductGroupName(productGroupName),\r\n\t\t\t\t\t\tproductGroupTitle \t: productGroupName,\r\n\t\t\t\t\t\tproducts \t\t\t: [productData]\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n }\r\n\r\n //Removing the umbraco deleted fundProductGroupName from the findListSortOrder\r\n for (var i = 0; i < findListSortOrder.length; i++)\r\n {\r\n if (!fundProductGroupName[findListSortOrder[i]]) {\r\n \r\n findListSortOrder.splice(i, 1);\r\n i = -1; //forcing the array to start afresh each time a value is removed from the array\r\n }\r\n }\r\n\r\n\t\twindow.eacData.fundListData = sortFundListData(fundListData);\r\n\r\n\t\tfunction productGroupExists(checkGroupName)\r\n\t\t{\r\n\t\t\tvar result = {\r\n\t\t\t\texist : false,\r\n\t\t\t\tindex : null\r\n\t\t\t};\r\n\r\n\t\t\tfor (var i in fundListData) {\r\n\r\n if (fundListData[i].hasOwnProperty !== \"undefined\") {\r\n\r\n if (typeof fundListData[i].productGroupTitle !== \"undefined\" && fundListData[i].productGroupTitle === checkGroupName && fundListData[i].groupName !==\"undefined\") {\r\n\r\n result.exist = true;\r\n result.index = i;\r\n\r\n return result;\r\n\r\n }\r\n\r\n }\r\n \r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\r\n\t\t}\r\n\r\n\t\tfunction formatProductGroupName(formatString)\r\n\t\t{\r\n\t\t\tformatString = formatString.replace(\"-\", \"\");\r\n\t\t\tformatString = formatString.replace(\" \", \"-\");\r\n\t\t\tformatString = formatString.toLowerCase();\r\n\r\n\t\t\treturn formatString;\r\n\t\t}\r\n\r\n\t\tfunction sortFundListData(fData) {\r\n\r\n\t\t\tvar sortedList = [],\r\n sortlistorder = $.extend(true, [], findListSortOrder);\r\n\r\n\t\t\tfor (var i in sortlistorder)\r\n\t\t\t{\r\n\t\t\t\tif (sortlistorder[i].hasOwnProperty)\r\n\t\t\t\t{\r\n\t\t\t\t\tsortedList.push(getFundCategory(sortlistorder[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn sortedList;\r\n\r\n\t\t\tfunction getFundCategory(category)\r\n\t\t\t{\r\n\t\t\t\tfor (var i in fData)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (fData[i].hasOwnProperty)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (fData[i].productGroupTitle === fundProductGroupName[category])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn fData[i];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar spliceIndex = sortlistorder.indexOf(category);\r\n\r\n\t\t\t\tsortlistorder.splice(spliceIndex,spliceIndex);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n})();\r\n\r\n\r\n(function() {\r\n\r\n\t\"use strict\";\r\n\r\n\tvar $doc = $(document);\r\n\r\n\t$doc.ready(function() {\r\n\r\n\t\tvar $validationElem = $(\".eac-validation-messages\");\r\n\r\n\t\tvar i_EACDataReadyWatch = setInterval(function() {\r\n\r\n\t\t\tif (!window.isEACDataReady)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\twindow.eacController.init({\r\n\t\t\t\tcallback : {\r\n\t\t\t\t\tUITableRowFragment : function(obj)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar $tableHeader = $(\".table-header-injection-div, .table-injection-div\");\r\n\t\t\t\t\t\t$tableHeader.addClass(\"show-table-content\");\r\n\t\t\t\t\t\t$(\".eac-table.desktop .table-injection-div\").append(obj.elem);\r\n\t\t\t\t\t\t$(\".eac-table.responsive .table-injection-div\").append(obj.elemResponsive);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tfinancialAdvisorToggle : function(obj)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tobj = obj; //linter silence\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar $eacBlock = $(\".eac-block\");\r\n\r\n\t\t\t\t\t\tif (!$eacBlock.hasClass(\"table-active\"))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t$eacBlock.addClass(\"table-active\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (obj.userHasFinancialAdvisor)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t$(\".eac-content\").removeClass(\"no-fin-advice\");\r\n\t\t\t\t\t\t\t$(\".data-initial-advice-fee, .data-recurring-advice-fee\").attr(\"required\", true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t$(\".eac-content\").addClass(\"no-fin-advice\");\r\n\t\t\t\t\t\t\t$(\".data-initial-advice-fee, .data-recurring-advice-fee\").attr(\"required\", false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\teacCalculationResults : function(obj)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar lumpSumTotal = 0;\r\n\t\t\t\t\t\tvar eacAPICallData = [];\r\n\t\t\t\t\t\tvar i;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// Calculate Lumpsum\r\n\t\t\t\t\t\tcalculateLumpSum();\r\n\r\n\t\t\t\t\t\t// Populate Fund Weighting Field\r\n\t\t\t\t\t\tfor (i in obj)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (obj[i].hasOwnProperty)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t$(\".product-block[data-group-product-index='\" + i + \"']\").find(\".field-fund-weighting\").val(calcFundWeighting(obj[i].lumpsum));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\tfor (i in obj)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (obj[i].hasOwnProperty)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\teacAPICallData.push(obj[i]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tperformEAC_API_Call(eacAPICallData);\r\n\r\n\r\n\t\t\t\t\t\tfunction calculateLumpSum()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfor (i in obj)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (obj[i].hasOwnProperty)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tlumpSumTotal += Number(obj[i].lumpsum);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfunction calcFundWeighting(lumpsum)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn ((lumpsum / lumpSumTotal) * 100).toFixed(2) + \"%\";\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfunction performEAC_API_Call(fundData)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar ajaxData = [];\r\n\r\n\t\t\t\t\t\t\tfor (var i in fundData)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (fundData[i].hasOwnProperty)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tajaxData.push({\r\n\t\t\t\t\t\t\t\t\t\tLumpSum \t\t\t: fundData[i].lumpsum,\r\n\t\t\t\t\t\t\t\t\t\tRecDebitOrder \t\t: fundData[i].recurringDebitOrder,\r\n\t\t\t\t\t\t\t\t\t\tInitFinAdvice \t\t: fundData[i].initialAdviceFee,\r\n\t\t\t\t\t\t\t\t\t\tFinAdviceRecurring\t: fundData[i].recurringAdviceFee,\r\n\t\t\t\t\t\t\t\t\t\tFundId \t\t\t\t: fundData[i].fundId,\r\n\t\t\t\t\t\t\t\t\t\tProductId \t\t\t: fundData[i].productId,\r\n\t\t\t\t\t\t\t\t\t\tHasFinancialAdvisor : fundData[i].userHasFinancialAdvisor\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\teacAPICall(ajaxData);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\teacValidationFailed : function(obj)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t$validationElem.removeClass(\"disabled\");\r\n\t\t\t\t\t\ttoggleValidationMessages(obj.fieldsFailed);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfunction toggleValidationMessages(fieldsFailed)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar lumpsumMsg = $validationElem.find(\".msg-lumpsum\");\r\n\t\t\t\t\t\t\tvar recDebitOrderMsg = $validationElem.find(\".msg-recDebitOrder\");\r\n\t\t\t\t\t\t\tvar initAdviceFeeMsg = $validationElem.find(\".msg-initAdviceFee\");\r\n\t\t\t\t\t\t\tvar recAdviceFeeMsg = $validationElem.find(\".msg-recAdviceFee\");\r\n\t\t\t\t\t\t\tvar res;\r\n\r\n\t\t\t\t\t\t\tres = fieldsFailed.lumpsum ? lumpsumMsg.removeClass(\"disabled\") : lumpsumMsg.addClass(\"disabled\");\r\n\t\t\t\t\t\t\tres = fieldsFailed.recurringDebitOrder ? recDebitOrderMsg.removeClass(\"disabled\") : recDebitOrderMsg.addClass(\"disabled\");\r\n\t\t\t\t\t\t\tres = fieldsFailed.initialAdviceFee ? initAdviceFeeMsg.removeClass(\"disabled\") : initAdviceFeeMsg.addClass(\"disabled\");\r\n\t\t\t\t\t\t\tres = fieldsFailed.recurringAdviceFee ? recAdviceFeeMsg.removeClass(\"disabled\") : recAdviceFeeMsg.addClass(\"disabled\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tclearInterval(i_EACDataReadyWatch);\r\n\r\n\t\t}, 500);\r\n\r\n /**\r\n * This function sends the users data to the API and populates the table with the returned data.\r\n * @param fundData Object The model sent with the API call.\r\n */\r\n\t\tfunction eacAPICall(fundData) {\r\n\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: \"/api/Services/GetEACPercentages\",\r\n\t type: \"POST\",\r\n\t contentType : 'application/json',\r\n\t data: JSON.stringify(fundData),\r\n\t success: function (data) {\r\n\r\n\t \t// Append 0% advice fees and other charges, until it comes through from Umbraco.\r\n\t \tdata.resAdviceChargeYr1 \t\t= 0;\r\n\t \tdata.resAdviceChargeYr3 \t\t= 0;\r\n\t \tdata.resAdviceChargeYr5 \t\t= 0;\r\n\t \tdata.resAdviceChargeYr10 \t\t= 0;\r\n\t\t data.OtherChargeYr1 \t\t\t= 0;\r\n\t\t data.OtherChargeYr3 \t\t\t= 0;\r\n\t\t data.OtherChargeYr5 \t\t\t= 0;\r\n\t \tdata.OtherChargeYr10 \t\t\t= 0;\r\n\t \tdata.EffectiveAnnualCostYr1 \t= data.InvestManChargeYr1 + data.AdviceChargeYr1;\r\n\t \tdata.EffectiveAnnualCostYr3 \t= data.InvestManChargeYr3 + data.AdviceChargeYr3;\r\n\t \tdata.EffectiveAnnualCostYr5 \t= data.InvestManChargeYr5 + data.AdviceChargeYr5;\r\n\t \tdata.EffectiveAnnualCostYr10 \t= data.InvestManChargeYr10 + data.AdviceChargeYr10;\r\n\t \t\r\n\t $validationElem.addClass(\"disabled\");\r\n\r\n\t // Populate Results Table\r\n\t populateResultsTable();\r\n\r\n\t function populateResultsTable()\r\n\t {\t\r\n\t \tvar items = {\r\n\t \t\tInvestManCharge : function() \r\n\t \t\t{\r\n\t \t\t\treturn $(\".result-investmentManCharge\");\r\n\t \t\t},\r\n\t \t\t\r\n\t \t\tAdviceCharge : function() \r\n\t \t\t{\r\n\t \t\t\treturn $(\".result-initAdviceCharges\");\r\n\t \t\t},\r\n\r\n\t \t\tresAdviceCharge : function()\r\n\t \t\t{\r\n\t \t\t\treturn $(\".result-adviceCharges\");\r\n\t \t\t},\r\n\r\n\t \t\tOtherCharge : function()\r\n\t \t\t{\r\n\t \t\t\treturn $(\".result-otherCharges\");\r\n\t \t\t},\r\n\r\n\t \t\tEffectiveAnnualCost : function()\r\n\t \t\t{\r\n\t \t\t\treturn $(\".result-effectiveCost\");\r\n\t \t\t}\r\n\t \t};\r\n\t \t\r\n\t \tfor (var i in items)\r\n\t \t{\r\n\t \t\tif (items[i].hasOwnProperty)\r\n\t \t\t{\r\n\t \t\t\tvar resFields = items[i]().find(\".result-fields\");\r\n\t \t\t\t\r\n\t \t\t\tresFields.children(\".block-year-1\")\r\n\t \t\t\t\t.children(\"p:not(.responsive-year-header)\")\r\n\t \t\t\t\t.text(formatPecentageValue(data[i + \"Yr1\"]));\r\n\r\n\t \t\t\tresFields.children(\".block-year-3\")\r\n\t \t\t\t\t.children(\"p:not(.responsive-year-header)\")\r\n\t \t\t\t\t.text(formatPecentageValue(data[i + \"Yr3\"]));\r\n\r\n\t \t\t\tresFields.children(\".block-year-5\")\r\n\t \t\t\t\t.children(\"p:not(.responsive-year-header)\")\r\n\t \t\t\t\t.text(formatPecentageValue(data[i + \"Yr5\"]));\r\n\r\n\t \t\t\tresFields.children(\".block-year-10\")\r\n\t \t\t\t\t.children(\"p:not(.responsive-year-header)\")\r\n\t \t\t\t\t.text(formatPecentageValue(data[i + \"Yr10\"]));\r\n\t \t\t}\r\n\t \t}\r\n\r\n\t \tfunction formatPecentageValue(value)\r\n\t \t{\r\n\t \t\treturn value.toFixed(2) + \"%\";\r\n\t \t}\r\n\t }\r\n\t }\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t $doc.on(\"click\", \".accordion-main\", function() {\r\n\r\n\t\t\tvar $this = $(this),\r\n $accordion = $this.next(\".accordion\"),\r\n containerHeight = getContainerHeight();\r\n\r\n\t\t\t$this.toggleClass(\"accordion-active\");\r\n\t\t\t$accordion.toggleClass(\"active\");\r\n\t\t\t\r\n\t\t\tif ($accordion.hasClass(\"active\")) {\r\n\r\n\t\t\t\t$accordion.velocity({height : containerHeight}, {\r\n\t\t\t\t\tduration \t: 200,\r\n\t\t\t\t\teasing\t\t: \"ease\"\r\n\t\t\t\t});\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t$accordion.velocity({height : 0}, {\r\n\t\t\t\t\tduration \t: 200,\r\n\t\t\t\t\teasing\t\t: \"ease\"\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t\tfunction getContainerHeight() {\r\n\r\n\t\t\t\tvar total = 0;\r\n\r\n\t\t\t\t$accordion.children().each(function() {\r\n\r\n\t\t\t\t\ttotal += $(this).outerHeight();\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn total;\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\t$doc.on(\"input\", \".field-block .field\", function(e) {\r\n\r\n\t\t\tvar $this = $(this),\r\n selectorString = getSelectorString();\r\n\r\n\t\t\t$doc.trigger(\"syncTableData\", {\r\n\t\t\t\tsyncVal : $this.val(),\r\n\t\t\t\tsyncTargetSelectorString : selectorString\r\n\t\t\t});\r\n\r\n\t\t\tfunction getSelectorString() {\r\n\r\n\t\t\t\tvar returnString = \"\",\r\n classList = e.target.classList;\r\n\t\t\t\r\n\r\n\t\t\t\treturnString += \"[data-group-product-index='\" + $this.closest(\".product-block\").attr(\"data-group-product-index\")+ \"'] \";\r\n\r\n\t\t\t\tfor (var i = 0; i < classList.length; i++) {\r\n\r\n\t\t\t\t\treturnString += \".\" + classList[i];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn returnString;\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n $doc.on('blur', '.field-block .field', function () {\r\n\r\n var $this = $(this),\r\n $thisValue = $this.val(),\r\n $thisName = ($this[0].previousElementSibling === null) ? $this.attr('data-field-name') : $this[0].previousElementSibling.innerText,\r\n $productGroupString = $this.closest('.product-block').attr('data-group-index'),\r\n $productID = $this.closest(\".product-block\").attr(\"data-group-product-index\"),\r\n fundsList = window.eacData.fundListData,\r\n selectedFundItem;\r\n\r\n function selectedProductGroup(fundsList) {\r\n\r\n return fundsList.productGroup === $productGroupString;\r\n\r\n }\r\n\r\n selectedFundItem = fundsList.find(selectedProductGroup);\r\n\r\n if($thisValue) {\r\n\r\n window.gaTracking.sendEvent('Submit', 'EACTool', selectedFundItem.products[$productID].productName + ' > ' + $thisName, $thisValue, '', '');\r\n\r\n }\r\n\r\n });\r\n\r\n\r\n\t\t$doc.on(\"click\", \".tooltip-modal-button\", function()\r\n\t\t{\r\n\t\t\t$(\".modal-investManCharge\").addClass(\"show\");\r\n\t\t});\r\n\r\n\r\n\t\t$doc.on(\"click\", \".modal-close-overlay\", function()\r\n\t\t{\r\n\t\t\t$(\".modal\").removeClass(\"show-modal\");\r\n\t\t});\r\n\t});\r\n\t$doc.on(\"click\", \".calculate\", function () {sendFacebookToolCompletedEvent('EAC Tool'); });\r\n\r\n\tvar chatBoxRemoveWatcher = setInterval(function()\r\n\t{\r\n\t\tvar chatBoxElem = {};\r\n\r\n\t\ttry {\r\n\t\t\tchatBoxElem = document.getElementById(\"tawkchat-iframe-container\");\r\n\t\t}\r\n\t\tcatch(e)\r\n\t\t{\r\n\t\t\tchatBoxElem = null;\r\n\t\t}\r\n\r\n\t\tif (chatBoxElem !== null && chatBoxElem.style.display.indexOf(\"block\") >= 0)\r\n\t\t{\r\n\t\t\tvar $chatBoxElem = $(chatBoxElem);\r\n\t\t\t$chatBoxElem.attr(\"style\", \"\");\r\n\t\t\t$chatBoxElem.attr(\"style\", \"display:none!important; height: 0 !important; overflow: hidden !important\");\r\n\t\t\tclearInterval(chatBoxRemoveWatcher);\r\n\t\t}\r\n\t}, 100);\r\n})();"],"sourceRoot":""}