[{"data":1,"prerenderedAt":783},["ShallowReactive",2],{"header:help":3,"footer:default":67,"story:navigation\u002Fsearch:help":250,"story:help\u002Fcategories":288,"story:help\u002Farticles\u002Fupdate-a-total-on-your-product-page-for-selected-options":314,"no-guide:update-a-total-on-your-product-page-for-selected-options":59,"article:\u002Fhelp\u002Farticles\u002Fupdate-a-total-on-your-product-page-for-selected-options":539,"story:contact":564,"help:tree:f4a0ced8-3763-4ba2-a54d-f03ef225e4e5":754,"_apollo:default":782},{"name":4,"created_at":5,"published_at":6,"updated_at":7,"id":8,"uuid":9,"content":10,"slug":57,"full_slug":58,"sort_by_date":59,"position":60,"tag_list":61,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":63,"first_published_at":64,"release_id":59,"lang":65,"path":59,"alternates":66,"default_full_slug":59,"translated_slugs":59},"Help Center Header","2024-08-09T18:06:34.939Z","2024-10-21T21:58:39.217Z","2024-10-21T21:58:39.232Z",10082752,"3e9b88f7-c163-4657-a2f2-62532d600fad",{"_uid":11,"link":12,"badge":16,"items":17,"title":13,"buttons":50,"new_tab":24,"submenu":51,"alignment":13,"component":52,"badge_link":53,"top_menu_items":56},"e5645a1a-f991-40e8-8d67-e40ebc082b5a",{"id":13,"url":13,"linktype":14,"fieldtype":15,"cached_url":13},"","story","multilink","Help Center",[18,27,34,39,44],{"_uid":19,"link":20,"title":23,"new_tab":24,"submenu":25,"component":26},"5cbe2861-1f49-4166-97da-a4dddd8105e3",{"id":21,"url":13,"linktype":14,"fieldtype":15,"cached_url":22},"4c0a2d99-ec30-4579-8ef1-6bf5564d4839","help\u002Fcategories\u002F","Articles",false,[],"header___item",{"_uid":28,"link":29,"title":32,"new_tab":33,"component":26},"1c8edeb5-b9e9-4cb8-b1c6-c1f292f7d7cd",{"id":13,"url":30,"linktype":31,"fieldtype":15,"cached_url":30},"https:\u002F\u002Fwiki.foxycart.com\u002F","url","Documentation",true,{"_uid":35,"link":36,"title":38,"new_tab":33,"component":26},"8d7df70e-f087-4da0-b616-6f0e9a5af35c",{"id":13,"url":37,"linktype":31,"fieldtype":15,"cached_url":37},"https:\u002F\u002Fapi.foxycart.com\u002F","API Documentation",{"_uid":40,"link":41,"title":43,"new_tab":33,"component":26},"f76e7944-23d5-4652-87e4-cdae79272762",{"id":13,"url":42,"linktype":31,"fieldtype":15,"cached_url":42},"https:\u002F\u002Fstatus.foxy.io\u002F","System Status",{"_uid":45,"link":46,"title":49,"new_tab":24,"component":26},"0de16771-4c84-466c-a1da-d8568113c71f",{"id":47,"url":13,"linktype":14,"fieldtype":15,"cached_url":48},"01e4e370-f9b9-45af-8fa9-f15540699b0d","contact","Contact Us",[],[],"header",{"id":54,"url":13,"linktype":14,"fieldtype":15,"cached_url":55},"4a679eb7-662d-4ea4-a976-5a2acbf0b663","help\u002F",[],"help-header","navigation\u002Fhelp-header",null,20,[],10082747,"71b81c2e-5e09-48a1-a397-a3c72fcd344a","2022-09-21T14:50:25.655Z","default",[],{"name":68,"created_at":69,"published_at":70,"updated_at":71,"id":72,"uuid":73,"content":74,"slug":243,"full_slug":244,"sort_by_date":59,"position":245,"tag_list":246,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":247,"first_published_at":248,"release_id":59,"lang":65,"path":59,"alternates":249,"default_full_slug":59,"translated_slugs":59},"Default Footer","2024-08-09T18:06:59.024Z","2025-09-04T06:24:46.223Z","2025-09-04T06:24:46.241Z",10082753,"e59e67ac-248a-482f-84a1-53d4f318186a",{"_uid":75,"about":76,"logos":77,"socials":82,"sections":108,"component":225,"cta_title":226,"bottom_links":227,"cta_subtitle":241,"cta_button_link":242,"cta_button_text":183},"830983f5-c4c4-43c8-b150-86a5e3fa6dc8","Foxy’s hosted cart & payment page allow you to sell anything, using your existing website or platform.",[78],{"id":79,"alt":13,"name":13,"focus":13,"title":13,"filename":80,"copyright":13,"fieldtype":81},14760,"https:\u002F\u002Fa-us.storyblok.com\u002Ff\u002F1001040\u002Fx\u002F3b030847ec\u002Fb-corp.svg","asset",[83,90,96,102],{"_uid":84,"icon":85,"link":86,"name":88,"component":89},"faf0a618-ea94-42ea-9182-03be18c43216","fa-facebook",{"id":13,"url":87,"linktype":31,"fieldtype":15,"cached_url":87},"https:\u002F\u002Fwww.facebook.com\u002Ffoxycart","Facebook","footer___social",{"_uid":91,"icon":92,"link":93,"name":95,"component":89},"14309c18-7e79-423e-b375-34555bac0811","fa-instagram",{"id":13,"url":94,"linktype":31,"fieldtype":15,"cached_url":94},"https:\u002F\u002Fwww.instagram.com\u002Ffoxy_io","Instagram",{"_uid":97,"icon":98,"link":99,"name":101,"component":89},"8f7fe7cf-0dd3-4596-8334-226ea466716a","fa-linkedin",{"id":13,"url":100,"linktype":31,"fieldtype":15,"cached_url":100},"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Ffoxycart.com","LinkedIn",{"_uid":103,"icon":104,"link":105,"name":107,"component":89},"90a675b4-dd97-40b5-be09-00a87223d4c5","fa-youtube",{"id":13,"url":106,"linktype":31,"fieldtype":15,"cached_url":106},"https:\u002F\u002Fwww.youtube.com\u002Fuser\u002Ffoxycart","Youtube",[109,139,184,206],{"_uid":110,"name":111,"items":112,"component":138},"82849945-282f-488c-b18d-a8d2252f514a","Company",[113,120,126,132],{"_uid":114,"link":115,"title":118,"new_tab":24,"component":119},"1f699ab1-938b-4d9d-9825-aabcbe6f57fe",{"id":116,"url":13,"linktype":14,"fieldtype":15,"cached_url":117},"63634293-a749-4226-9439-9f38ee6dcda0","about-us","About Us","footer___menu_items",{"_uid":121,"link":122,"title":125,"new_tab":24,"component":119},"b26b00f1-a0e7-4be2-8ab3-428b8cc841f8",{"id":123,"url":13,"linktype":14,"fieldtype":15,"cached_url":124},"26cb7c55-faed-4a77-a291-1552d4111b3e","how-foxy-works","How Foxy Works",{"_uid":127,"link":128,"title":131,"new_tab":24,"component":119},"b40c68a0-1ceb-4226-9515-6176534f61fe",{"id":129,"url":13,"linktype":14,"fieldtype":15,"cached_url":130},"dc6657d7-7f4f-4c0d-b781-e971b038ee26","for-good","Foxy For Good",{"_uid":133,"link":134,"title":137,"new_tab":24,"component":119},"3ad0c134-bef9-4fff-b891-e09f16109036",{"id":135,"url":13,"linktype":14,"fieldtype":15,"cached_url":136},"23cae210-baf4-4588-9862-d09f4f52ccd2","brand-assets","Brand Assets","footer___section",{"_uid":140,"name":141,"items":142,"component":138},"a6805fa8-ac60-47f1-b8f0-f27aded0afbe","Product",[143,149,155,161,167,173,179],{"_uid":144,"link":145,"title":148,"new_tab":24,"component":119},"b39c8a4e-2383-486f-b76a-11fbb15d8134",{"id":146,"url":13,"linktype":14,"fieldtype":15,"cached_url":147},"bb04690f-fe98-4ce6-80be-05b950f2364f","features\u002F","Features",{"_uid":150,"link":151,"title":154,"new_tab":24,"component":119},"64f8a41f-c181-433d-bc0a-fc94e71ecbf6",{"id":152,"url":13,"linktype":14,"fieldtype":15,"cached_url":153},"c450c58d-761d-48c0-a9af-0b064611689b","pricing","Pricing",{"_uid":156,"link":157,"title":160,"new_tab":24,"component":119},"6e0b287f-fd8c-4146-9e0e-0ab0b5c9ce3c",{"id":158,"url":13,"linktype":14,"fieldtype":15,"cached_url":159},"fab20ad9-e76a-4947-b709-3a6fdfa88028","blog\u002Fcategories\u002Fproduct-updates","Product Updates",{"_uid":162,"link":163,"title":166,"new_tab":24,"component":119},"47e5a074-a6b5-4f1c-8c2f-89a2ae9f83eb",{"id":164,"url":13,"linktype":14,"fieldtype":15,"cached_url":165},"d2c83612-d611-47f3-a3b4-ca7fe08540b8","changelogs\u002F","Changelogs",{"_uid":168,"link":169,"title":172,"new_tab":24,"component":119},"b5c08774-542f-4ffd-b357-c94d674488b9",{"id":170,"url":13,"linktype":14,"fieldtype":15,"cached_url":171},"08876121-0df3-4ed9-aa11-902b3e41cd02","whats-next","What's Next",{"_uid":174,"link":175,"title":178,"new_tab":24,"component":119},"9c2704ed-6d9f-43e1-9e67-c8d91c083288",{"id":176,"url":13,"linktype":14,"fieldtype":15,"cached_url":177},"056a7857-b18f-4025-8f97-91a38fc19bc8","compare\u002F","Compare",{"_uid":180,"link":181,"title":183,"new_tab":24,"component":119},"5f2db35b-674b-406a-8fa7-d246633af9fe",{"id":13,"url":182,"linktype":31,"fieldtype":15,"cached_url":182},"https:\u002F\u002Fadmin.foxy.io\u002Fsign-up","Try Foxy Free",{"_uid":185,"name":186,"items":187,"component":138},"63fa1f29-4252-4640-9922-fe310e69e54a","Security",[188,194,200],{"_uid":189,"link":190,"title":193,"new_tab":24,"component":119},"1158ddb6-9eb0-466f-8eb6-7ca2ae66c8b8",{"id":191,"url":13,"linktype":14,"fieldtype":15,"cached_url":192},"1f58fb2c-8681-4742-b6e8-09999beae9f6","security-contact","Security Contact",{"_uid":195,"link":196,"title":199,"new_tab":24,"component":119},"9a79c54a-6022-4dfd-854b-766f5e4703ba",{"id":197,"url":13,"linktype":14,"fieldtype":15,"cached_url":198},"55cbfcc3-425a-4261-8037-54e919851d2d","pci","PCI Compliance",{"_uid":201,"link":202,"title":205,"new_tab":24,"component":119},"0b85f5b6-9534-4071-b323-b39d053dd4d7",{"id":203,"url":13,"linktype":14,"fieldtype":15,"cached_url":204},"c3ac0fe3-83e2-4879-afbd-d4c83e1590df","help\u002Farticles\u002Four-official-domains-public-code","Domains & Codebases",{"_uid":207,"name":208,"items":209,"component":138},"998ded67-d107-49f4-8154-ca6be51671ec","Support",[210,213,216,219,222],{"_uid":211,"link":212,"title":16,"new_tab":24,"component":119},"594ffd35-3049-4004-bb08-0db568ebd819",{"id":54,"url":13,"linktype":14,"fieldtype":15,"cached_url":55},{"_uid":214,"link":215,"title":32,"new_tab":33,"component":119},"0a1a55ab-a985-4f9d-8b42-26da714d0c1c",{"id":13,"url":30,"linktype":31,"fieldtype":15,"cached_url":30},{"_uid":217,"link":218,"title":38,"new_tab":33,"component":119},"61e0b7c8-aadf-419b-a339-b3ccabc65bf4",{"id":13,"url":37,"linktype":31,"fieldtype":15,"cached_url":37},{"_uid":220,"link":221,"title":43,"new_tab":33,"component":119},"fd67a89e-1c54-4d31-94b5-64be999062d6",{"id":13,"url":42,"linktype":31,"fieldtype":15,"cached_url":42},{"_uid":223,"link":224,"title":49,"new_tab":24,"component":119},"231a6f71-e996-4ad4-b033-d4d5542f34f0",{"id":47,"url":13,"linktype":14,"fieldtype":15,"cached_url":48},"footer","Get started with our *unlimited free trial*.",[228,235],{"_uid":229,"link":230,"text":233,"component":234},"f0b77210-2632-45a2-8436-e57cad84d01a",{"id":231,"url":13,"linktype":14,"fieldtype":15,"cached_url":232},"60ba16a2-c1f4-485f-b978-8d2eeeafbf5a","terms-of-service","Terms of Service","footer___bottom_links",{"_uid":236,"link":237,"text":240,"component":234},"4bd497b0-993f-4b4d-a5b7-8a49c7c8fec9",{"id":238,"url":13,"linktype":14,"fieldtype":15,"cached_url":239},"332302b9-1d18-4016-b9c8-9b33c72d782b","privacy-policy","Privacy Policy","No credit card required.",{"id":13,"url":182,"linktype":31,"fieldtype":15,"cached_url":182},"default-footer","navigation\u002Fdefault-footer",50,[],"11006268-07f9-41e9-96f3-c51fb723399d","2022-09-21T20:39:02.357Z",[],{"name":251,"created_at":252,"published_at":253,"updated_at":254,"id":255,"uuid":256,"content":257,"slug":279,"full_slug":282,"sort_by_date":59,"position":283,"tag_list":284,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":285,"first_published_at":286,"release_id":59,"lang":65,"path":59,"alternates":287,"default_full_slug":59,"translated_slugs":59},"Search","2024-10-21T22:08:54.973Z","2025-05-26T09:17:25.790Z","2025-05-26T09:17:25.804Z",13592003,"14cbc359-9ac1-4a7a-a8de-ad4ac8ef26d4",{"_uid":258,"name":251,"indices":259,"summary":13,"component":279,"primary_image":280},"5e4a56e8-76f1-4790-b3a7-70f1be97d042",[260,265,269,274],{"key":261,"_uid":262,"icon":13,"name":263,"component":264},"all","c12a3210-7323-4273-8217-5215e52efe84","All","index",{"key":266,"_uid":267,"icon":268,"name":23,"component":264},"help_center_article","5acff080-95e4-44d3-8dcf-1b19720af382","fa-file-alt",{"key":270,"_uid":271,"icon":272,"name":273,"component":264},"help_center_guide","b8fbc206-c083-471e-a1f0-0ebeb90a669d","fa-book","Guides",{"key":275,"_uid":276,"icon":277,"name":278,"component":264},"blog_post","23419e83-2e56-4c4c-8a05-9fd1b3c9a9bd","fa-file-image","Blog Posts","search",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":281},{},"navigation\u002Fsearch",60,[],"11e1fd31-95cd-4fc9-b736-8b8910663e6c","2024-10-21T23:17:05.904Z",[],{"name":23,"created_at":289,"published_at":290,"updated_at":291,"id":292,"uuid":21,"content":293,"slug":307,"full_slug":22,"sort_by_date":59,"position":308,"tag_list":309,"is_startpage":33,"parent_id":310,"meta_data":59,"group_id":311,"first_published_at":312,"release_id":59,"lang":65,"path":59,"alternates":313,"default_full_slug":59,"translated_slugs":59},"2022-09-19T14:42:29.685Z","2024-07-30T18:17:22.506Z","2024-07-30T18:17:22.525Z",2660,{"_uid":294,"icon":13,"name":23,"guides":295,"pinned":24,"summary":296,"category":13,"component":297,"blog_posts":298,"content_hub":24,"icon_custom":299,"case_studies":300,"faq_sections":301,"help_articles":302,"featured_guides":303,"mailbox_category":13,"featured_articles":304,"featured_blog_posts":305,"featured_case_studies":306},"d6dae89a-907a-4bf7-82de-fe2ba875ee6e",[],"Get your questions answered with our browsable knowledge base.","help_center_category",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"filename":13,"copyright":59,"fieldtype":81},[],[],[],[],[],[],[],"categories",530,[],2658,"19ebcdd2-027f-47f5-9a5b-a8992c959578","2022-09-19T16:24:39.219Z",[],{"name":315,"created_at":316,"published_at":317,"updated_at":318,"id":319,"uuid":320,"content":321,"slug":532,"full_slug":533,"sort_by_date":59,"position":534,"tag_list":535,"is_startpage":24,"parent_id":536,"meta_data":59,"group_id":537,"first_published_at":317,"release_id":59,"lang":65,"path":59,"alternates":538,"default_full_slug":59,"translated_slugs":59},"Update a total on your product page for selected options","2026-07-22T17:17:18.268Z","2026-07-22T17:44:57.158Z","2026-07-22T17:44:57.171Z",200913052797055,"f4a0ced8-3763-4ba2-a54d-f03ef225e4e5",{"_uid":322,"body":323,"name":526,"image":527,"pinned":24,"summary":529,"category":530,"component":266,"related_articles":531},"3cacbb58-29dd-4c76-b10f-4c8931ea1acb",{"type":324,"content":325},"doc",[326,333,340,358,370,376,381,386,392,397,402,407,412,417,422,427,432,437,442,447,452,457,462,473,478,483,488,510,515],{"type":327,"attrs":328,"content":329},"paragraph",{"textAlign":59},[330],{"text":331,"type":332},"It can be useful to display a dynamically update total cost to customers on your add to cart pages - to let them know what the options they're selecting will cost. The following snippet will allow you to display a dynamic total to customers, taking into consideration a change in quantity or options that include a price product option modifier.","text",{"type":334,"attrs":335,"content":337},"heading",{"level":336,"textAlign":59},2,[338],{"text":339,"type":332},"Step 1: Include snippet",{"type":327,"attrs":341,"content":342},{"textAlign":59},[343,345,350,352,356],{"text":344,"type":332},"Paste the following before the closing ",{"text":346,"type":332,"marks":347},"\u003C\u002Fbody>",[348],{"type":349},"code",{"text":351,"type":332}," tag of any page that you want to display the dynamically calculated price of a product. It can also be included in an existing javascript file you're including if you prefer. This snippet relies on the ",{"text":353,"type":332,"marks":354},"loader.js",[355],{"type":349},{"text":357,"type":332}," file being included on your page.",{"type":327,"attrs":359,"content":360},{"textAlign":59},[361,363,368],{"text":362,"type":332},"This is ",{"text":364,"type":332,"marks":365},"not",[366],{"type":367},"italic",{"text":369,"type":332}," required on the cart, checkout or receipt pages, so should not be place in those templates.",{"type":371,"attrs":372,"content":373},"code_block",{"class":59},[374],{"text":375,"type":332},"\u003Cscript>\n\u002F\u002F Dynamic Price Calculation v3.3\nvar pricemod_regex=\u002F[{\\|]p([+\\-:])([\\d\\.]+)(?:\\D{3})?(?=[\\|}])\u002F,id_regex=\u002F^(\\d+):\u002F,FC=FC||{};function initDynamicPrice(){ADJUST={},$(\"input,select\").off(\"change.foxy-dynamic-price\"),$('form[action*=\"'+FC.settings.storedomain+'\"]').each((function(){var t=$(this),a=\"\",e={products:{}};$(this).find(\"[name='name'],[name^='name||'],[name$=':name'],[name*=':name||']\").each((function(){var r=getId(this.name),i=r?r+\":\":\"\",s=parseFloat(t.find(\"[name='\"+i+\"price'],[name^='\"+i+\"price||']\").first().val()),c={id:r,code:\"\",base_price:isNaN(s)?0:s,quantity:1,attributes:{},has_quantity:!1},n=t.find(\"[name='\"+i+\"quantity'],[name^='\"+i+\"quantity||']\"),o=t.find(\"[name='\"+i+\"code'],[name^='\"+i+\"code||']\");if(o.length>0&&(c.code=clearHash(o.first().val()),\"\"===a&&(a=c.code)),n.length>0){var d=0,h=getElementType(n);[\"select\",\"text\"].indexOf(h)>-1?(c.has_quantity=!0,d=parseFloat(clearHash(n.val()))):[\"radio\",\"checkbox\"].indexOf(h)>-1&&(c.has_quantity=!0,1==n.filter(\":checked\").length&&(d=parseFloat(clearHash(n.filter(\":checked\").val())))),isNaN(d)&&(d=0),c.quantity=d}e.products[r]=c}));t.attr(\"data-fc-form-code\")&&(a=t.attr(\"data-fc-form-code\")),\"\"!==a&&($(this).find(\"input,select\").each((function(){if(!this.disabled){var t=getId(this.name),r=getName(this.name),i=getElementType($(this));if(\"quantity\"!=r)if(\"price\"!=r||\"hidden\"==i){if(\"SELECT\"==this.tagName){var s=!1;$(this).children(\"option\").each((function(){this.value.search(pricemod_regex)>-1&&(s=!0)})),s&&($(this).data(\"fc-adjust-for\",a),e.products[t].attributes[clearHash(this.name)]=clearHash(this.value),$(this).on(\"change.foxy-dynamic-price\",(function(){ADJUST[$(this).data(\"fc-adjust-for\")].products[t].attributes[clearHash(this.name)]=clearHash(this.value),recalcTotal()})))}else if(this.value.search(pricemod_regex)>-1)switch($(this).data(\"fc-adjust-for\",a),$(this).attr(\"type\")){case\"checkbox\":$(this).is(\":checked\")?e.products[t].attributes[clearHash(this.name)]=clearHash(this.value):e.products[t].attributes[clearHash(this.name)]=\"\",$(this).on(\"change.foxy-dynamic-price\",(function(){$(this).is(\":checked\")?ADJUST[$(this).data(\"fc-adjust-for\")].products[t].attributes[clearHash(this.name)]=clearHash(this.value):ADJUST[$(this).data(\"fc-adjust-for\")].products[t].attributes[clearHash(this.name)]=\"\",recalcTotal()}));break;case\"radio\":e.products[t].attributes.hasOwnProperty(clearHash(this.name))||(e.products[t].attributes[clearHash(this.name)]=\"\"),$(this).is(\":checked\")&&(e.products[t].attributes[clearHash(this.name)]=clearHash(this.value)),$(\"[name='\"+this.name+\"']\").data(\"fc-adjust-for\",a).on(\"change.foxy-dynamic-price\",(function(){ADJUST[$(this).data(\"fc-adjust-for\")].products[t].attributes[clearHash(this.name)]=clearHash(this.value),recalcTotal()}))}}else $(this).data(\"fc-adjust-for\",a).on(\"change.foxy-dynamic-price\",(function(){var a=0;([\"select\",\"text\"].indexOf(i)>-1||[\"radio\",\"checkbox\"].indexOf(i)>-1&&$(this).is(\":checked\"))&&(a=parseFloat(clearHash(this.value))),isNaN(a)&&(a=0),ADJUST[$(this).data(\"fc-adjust-for\")].products[t].base_price=a,recalcTotal()}));else $(this).data(\"fc-adjust-for\",a).on(\"change.foxy-dynamic-price\",(function(){var a=0;([\"select\",\"text\"].indexOf(i)>-1||[\"radio\",\"checkbox\"].indexOf(i)>-1&&$(this).is(\":checked\"))&&(a=parseFloat(clearHash(this.value))),isNaN(a)&&(a=0),ADJUST[$(this).data(\"fc-adjust-for\")].products[t].quantity=a,recalcTotal()}))}})),ADJUST[a]=e)})),recalcTotal()}function clearHash(t){return t.replace(\u002F\\|\\|[\\d\\w]+(?:\\|\\|open)?$\u002F,\"\")}function getNameParts(t){return(t=clearHash(t)).match(\u002F(?:(\\d+):)?(.*)\u002F)}function getId(t){var a=getNameParts(t);return id_regex.test(this.name)&&(prefix=parseInt(this.name.match(id_regex)[0])),void 0===a[1]?0:parseInt(a[1])}function getName(t){return getNameParts(t)[2]}function getElementType(t){if(\"SELECT\"==t[0].tagName)return\"select\";if(\"INPUT\"==t[0].tagName)switch(t.attr(\"type\").toLowerCase()){case\"text\":case\"number\":case\"tel\":return\"text\";default:return t.attr(\"type\").toLowerCase()}}function recalcTotal(){for(f in ADJUST){var t=0,e=0;for(p in ADJUST[f].products){var r=ADJUST[f].products[p].base_price,i=0;for(a in ADJUST[f].products[p].attributes){var s=ADJUST[f].products[p].attributes[a].match(pricemod_regex);if(s)switch(s[1]){case\":\":r=parseFloat(s[2]);break;case\"+\":i+=parseFloat(s[2]);break;case\"-\":i-=parseFloat(s[2])}}r+=i,t+=r*=ADJUST[f].products[p].quantity,e+=ADJUST[f].products[p].quantity}\"function\"==typeof fcFormatPrice&&(t=fcFormatPrice(t,f)),\"function\"==typeof fcFormatQuantity&&(e=fcFormatQuantity(e,f)),t=adjustDisplayPrice(t);var c=\"object\"==typeof FC&&FC.hasOwnProperty(\"json\")&&FC.json.config.hasOwnProperty(\"currency_format\")?jQuery.trim(FC.util.money_format(FC.json.config.currency_format,t)):t.formatMoney(2);$(\".\"+f+\"_total\").html(c),$(\".\"+f+\"_total_quantity\").html(e)}}function adjustDisplayPrice(t){return\"function\"!=typeof fc_adjust_price_display||(adjusted_price=fc_adjust_price_display(t),void 0===adjusted_price||isNaN(parseFloat(adjusted_price)))?t:parseFloat(adjusted_price)}FC.onLoad=function(){FC.client.on(\"ready.done\",initDynamicPrice)},Number.prototype.formatMoney=function(t,a,e){var r=this,i=(t=isNaN(t=Math.abs(t))?2:t,a=null==a?\".\":a,e=null==e?\",\":e,r\u003C0?\"-\":\"\"),s=parseInt(r=Math.abs(+r||0).toFixed(t))+\"\",c=(c=s.length)>3?c%3:0;return i+(c?s.substr(0,c)+e:\"\")+s.substr(c).replace(\u002F(\\d{3})(?=\\d)\u002Fg,\"$1\"+e)+(t?a+Math.abs(r-s).toFixed(t).slice(2):\"\")};\n\u003C\u002Fscript>",{"type":334,"attrs":377,"content":378},{"level":336,"textAlign":59},[379],{"text":380,"type":332},"Step 2: Set up forms",{"type":327,"attrs":382,"content":383},{"textAlign":59},[384],{"text":385,"type":332},"Setup your forms like so:",{"type":334,"attrs":387,"content":389},{"level":388,"textAlign":59},3,[390],{"text":391,"type":332},"Product Code",{"type":327,"attrs":393,"content":394},{"textAlign":59},[395],{"text":396,"type":332},"Every Foxy based product that you want to dynamically calculate the total needs to have a unique code set like this:",{"type":371,"attrs":398,"content":399},{"class":59},[400],{"text":401,"type":332},"\u003Cinput type=\"hidden\" name=\"code\" value=\"p1\" \u002F>",{"type":327,"attrs":403,"content":404},{"textAlign":59},[405],{"text":406,"type":332},"The code from the first product in your form will be used as a key for using in the element that dynamically shows the total product price.",{"type":327,"attrs":408,"content":409},{"textAlign":59},[410],{"text":411,"type":332},"If you're not able to know what product code is first, or you just want to set a specific code to use for the price modifier, you can also add a data attribute to your form like this:",{"type":371,"attrs":413,"content":414},{"class":59},[415],{"text":416,"type":332},"\u003Cform ... data-fc-form-code=\"p1\">",{"type":334,"attrs":418,"content":419},{"level":388,"textAlign":59},[420],{"text":421,"type":332},"Total Price Element",{"type":327,"attrs":423,"content":424},{"textAlign":59},[425],{"text":426,"type":332},"Next, set an element to be where the total cost is shown and updated, by combining the code from above and \"_total\" as its class, like this:",{"type":371,"attrs":428,"content":429},{"class":59},[430],{"text":431,"type":332},"\u003Ch4 class=\"p1_total\">$20.00\u003C\u002Fh4>",{"type":327,"attrs":433,"content":434},{"textAlign":59},[435],{"text":436,"type":332},"If you'd like to show the total quantity, you can also do that using an element with a class that is a combination of the code and \"_total_quantity\" as its class, like:",{"type":371,"attrs":438,"content":439},{"class":59},[440],{"text":441,"type":332},"\u003Cp class=\"p1_total_quantity\">0\u003C\u002Fp>",{"type":334,"attrs":443,"content":444},{"level":388,"textAlign":59},[445],{"text":446,"type":332},"Dynamically triggering recalculation",{"type":327,"attrs":448,"content":449},{"textAlign":59},[450],{"text":451,"type":332},"If for whatever reason you need to trigger the dynamic price calculations to be recreated - for example if you dynamically add in a new input that includes a price modifier, you can execute this function in your javascript:",{"type":371,"attrs":453,"content":454},{"class":59},[455],{"text":456,"type":332},"initDynamicPrice();",{"type":334,"attrs":458,"content":459},{"level":388,"textAlign":59},[460],{"text":461,"type":332},"Modify dynamically calculated total price",{"type":327,"attrs":463,"content":464},{"textAlign":59},[465,467,471],{"text":466,"type":332},"If you need to dynamically modify the calculated price, for example if your product prices are tax exclusive, but you want to show the calculated price as tax inclusive, you can define a function on your page to achieve that result. The function has a name of ",{"text":468,"type":332,"marks":469},"fc_adjust_price_display",[470],{"type":349},{"text":472,"type":332},", and is passed a single argument which is the dynamically calculated total price. The function should return your modified price.",{"type":327,"attrs":474,"content":475},{"textAlign":59},[476],{"text":477,"type":332},"As an example, let's say you want to account for a 25% inclusive tax on your product prices, that would look like this:",{"type":371,"attrs":479,"content":480},{"class":59},[481],{"text":482,"type":332},"\u003Cscript>\n  function fc_adjust_price_display(price) {\n    return price * 1.25;\n  }\n\u003C\u002Fscript>",{"type":334,"attrs":484,"content":485},{"level":336,"textAlign":59},[486],{"text":487,"type":332},"That's it!",{"type":327,"attrs":489,"content":490},{"textAlign":59},[491,493,497,499,503,504,508],{"text":492,"type":332},"That should be it. The script basically runs through all the inputs within Foxy add to cart forms on the page, and grabs what the active value is. If that value has a price modifier (",{"text":494,"type":332,"marks":495},"p:X",[496],{"type":349},{"text":498,"type":332},", ",{"text":500,"type":332,"marks":501},"p+X",[502],{"type":349},{"text":498,"type":332},{"text":505,"type":332,"marks":506},"p-X",[507],{"type":349},{"text":509,"type":332},"), it chucks it into an array. After looping over all the form elements, it loops through all the selected price modifiers, adjusts the base price, multiplies it by the quantity and sets the total element.",{"type":334,"attrs":511,"content":512},{"level":336,"textAlign":59},[513],{"text":514,"type":332},"Notes and Limitations",{"type":516,"content":517},"bullet_list",[518],{"type":519,"content":520},"list_item",[521],{"type":327,"attrs":522,"content":523},{"textAlign":59},[524],{"text":525,"type":332},"The snippet is run after the Foxy javascript has been initialized. As such - there may be a small time while the page is loading before the dynamic total is calculated.","Update a total dynamically on your product page for selected options",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":528},{},"How to display a running total on your product page that updates as customers select price modifying options.","389d5512-29ba-4a93-9cfa-9491d1618f73",[],"update-a-total-on-your-product-page-for-selected-options","help\u002Farticles\u002Fupdate-a-total-on-your-product-page-for-selected-options",-4360,[],2659,"6dbf1438-b331-44a7-8608-6d7464a0679f",[],{"html":540,"sections":541,"segments":560},"\u003Cp>It can be useful to display a dynamically update total cost to customers on your add to cart pages - to let them know what the options they&#039;re selecting will cost. The following snippet will allow you to display a dynamic total to customers, taking into consideration a change in quantity or options that include a price product option modifier.\u003C\u002Fp>\u003Csection id=\"step-1-include-snippet\" data-title=\"Step 1: Include snippet\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"step-1-include-snippet\">Step 1: Include snippet\u003C\u002Fh2>\u003Cp>Paste the following before the closing \u003Ccode class=\"badge bg-soft-danger text-danger\">&lt;\u002Fbody&gt;\u003C\u002Fcode> tag of any page that you want to display the dynamically calculated price of a product. It can also be included in an existing javascript file you&#039;re including if you prefer. This snippet relies on the \u003Ccode class=\"badge bg-soft-danger text-danger\">loader.js\u003C\u002Fcode> file being included on your page.\u003C\u002Fp>\u003Cp>This is \u003Cem>not\u003C\u002Fem> required on the cart, checkout or receipt pages, so should not be place in those templates.\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">script\u003C\u002Fspan>&gt;\u003C\u002Fspan>\u003Cspan class=\"language-javascript\">\n\u003Cspan class=\"hljs-comment\">\u002F\u002F Dynamic Price Calculation v3.3\u003C\u002Fspan>\n\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> pricemod_regex=\u003Cspan class=\"hljs-regexp\">\u002F[{\\|]p([+\\-:])([\\d\\.]+)(?:\\D{3})?(?=[\\|}])\u002F\u003C\u002Fspan>,id_regex=\u003Cspan class=\"hljs-regexp\">\u002F^(\\d+):\u002F\u003C\u002Fspan>,\u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>=\u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>||{};\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">initDynamicPrice\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>={},$(\u003Cspan class=\"hljs-string\">&quot;input,select&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">off\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;change.foxy-dynamic-price&quot;\u003C\u002Fspan>),$(\u003Cspan class=\"hljs-string\">&#x27;form[action*=&quot;&#x27;\u003C\u002Fspan>+\u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">settings\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">storedomain\u003C\u002Fspan>+\u003Cspan class=\"hljs-string\">&#x27;&quot;]&#x27;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">each\u003C\u002Fspan>((\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> t=$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>),a=\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>,e={\u003Cspan class=\"hljs-attr\">products\u003C\u002Fspan>:{}};$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">find\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;[name=&#x27;name&#x27;],[name^=&#x27;name||&#x27;],[name$=&#x27;:name&#x27;],[name*=&#x27;:name||&#x27;]&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">each\u003C\u002Fspan>((\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> r=\u003Cspan class=\"hljs-title function_\">getId\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>),i=r?r+\u003Cspan class=\"hljs-string\">&quot;:&quot;\u003C\u002Fspan>:\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>,s=\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(t.\u003Cspan class=\"hljs-title function_\">find\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;[name=&#x27;&quot;\u003C\u002Fspan>+i+\u003Cspan class=\"hljs-string\">&quot;price&#x27;],[name^=&#x27;&quot;\u003C\u002Fspan>+i+\u003Cspan class=\"hljs-string\">&quot;price||&#x27;]&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">first\u003C\u002Fspan>().\u003Cspan class=\"hljs-title function_\">val\u003C\u002Fspan>()),c={\u003Cspan class=\"hljs-attr\">id\u003C\u002Fspan>:r,\u003Cspan class=\"hljs-attr\">code\u003C\u002Fspan>:\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>,\u003Cspan class=\"hljs-attr\">base_price\u003C\u002Fspan>:\u003Cspan class=\"hljs-built_in\">isNaN\u003C\u002Fspan>(s)?\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>:s,\u003Cspan class=\"hljs-attr\">quantity\u003C\u002Fspan>:\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>,\u003Cspan class=\"hljs-attr\">attributes\u003C\u002Fspan>:{},\u003Cspan class=\"hljs-attr\">has_quantity\u003C\u002Fspan>:!\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>},n=t.\u003Cspan class=\"hljs-title function_\">find\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;[name=&#x27;&quot;\u003C\u002Fspan>+i+\u003Cspan class=\"hljs-string\">&quot;quantity&#x27;],[name^=&#x27;&quot;\u003C\u002Fspan>+i+\u003Cspan class=\"hljs-string\">&quot;quantity||&#x27;]&quot;\u003C\u002Fspan>),o=t.\u003Cspan class=\"hljs-title function_\">find\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;[name=&#x27;&quot;\u003C\u002Fspan>+i+\u003Cspan class=\"hljs-string\">&quot;code&#x27;],[name^=&#x27;&quot;\u003C\u002Fspan>+i+\u003Cspan class=\"hljs-string\">&quot;code||&#x27;]&quot;\u003C\u002Fspan>);\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan>(o.\u003Cspan class=\"hljs-property\">length\u003C\u002Fspan>&gt;\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>&amp;&amp;(c.\u003Cspan class=\"hljs-property\">code\u003C\u002Fspan>=\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(o.\u003Cspan class=\"hljs-title function_\">first\u003C\u002Fspan>().\u003Cspan class=\"hljs-title function_\">val\u003C\u002Fspan>()),\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>===a&amp;&amp;(a=c.\u003Cspan class=\"hljs-property\">code\u003C\u002Fspan>)),n.\u003Cspan class=\"hljs-property\">length\u003C\u002Fspan>&gt;\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> d=\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>,h=\u003Cspan class=\"hljs-title function_\">getElementType\u003C\u002Fspan>(n);[\u003Cspan class=\"hljs-string\">&quot;select&quot;\u003C\u002Fspan>,\u003Cspan class=\"hljs-string\">&quot;text&quot;\u003C\u002Fspan>].\u003Cspan class=\"hljs-title function_\">indexOf\u003C\u002Fspan>(h)&gt;-\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>?(c.\u003Cspan class=\"hljs-property\">has_quantity\u003C\u002Fspan>=!\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>,d=\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(n.\u003Cspan class=\"hljs-title function_\">val\u003C\u002Fspan>()))):[\u003Cspan class=\"hljs-string\">&quot;radio&quot;\u003C\u002Fspan>,\u003Cspan class=\"hljs-string\">&quot;checkbox&quot;\u003C\u002Fspan>].\u003Cspan class=\"hljs-title function_\">indexOf\u003C\u002Fspan>(h)&gt;-\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>&amp;&amp;(c.\u003Cspan class=\"hljs-property\">has_quantity\u003C\u002Fspan>=!\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>,\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>==n.\u003Cspan class=\"hljs-title function_\">filter\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;:checked&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-property\">length\u003C\u002Fspan>&amp;&amp;(d=\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(n.\u003Cspan class=\"hljs-title function_\">filter\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;:checked&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">val\u003C\u002Fspan>())))),\u003Cspan class=\"hljs-built_in\">isNaN\u003C\u002Fspan>(d)&amp;&amp;(d=\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>),c.\u003Cspan class=\"hljs-property\">quantity\u003C\u002Fspan>=d}e.\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[r]=c}));t.\u003Cspan class=\"hljs-title function_\">attr\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;data-fc-form-code&quot;\u003C\u002Fspan>)&amp;&amp;(a=t.\u003Cspan class=\"hljs-title function_\">attr\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;data-fc-form-code&quot;\u003C\u002Fspan>)),\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>!==a&amp;&amp;($(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">find\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;input,select&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">each\u003C\u002Fspan>((\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan>(!\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">disabled\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> t=\u003Cspan class=\"hljs-title function_\">getId\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>),r=\u003Cspan class=\"hljs-title function_\">getName\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>),i=\u003Cspan class=\"hljs-title function_\">getElementType\u003C\u002Fspan>($(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>));\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;quantity&quot;\u003C\u002Fspan>!=r)\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;price&quot;\u003C\u002Fspan>!=r||\u003Cspan class=\"hljs-string\">&quot;hidden&quot;\u003C\u002Fspan>==i){\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;SELECT&quot;\u003C\u002Fspan>==\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">tagName\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> s=!\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>;$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">children\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;option&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">each\u003C\u002Fspan>((\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">search\u003C\u002Fspan>(pricemod_regex)&gt;-\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>&amp;&amp;(s=!\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>)})),s&amp;&amp;($(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>,a),e.\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)]=\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>),$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">on\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;change.foxy-dynamic-price&quot;\u003C\u002Fspan>,(\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>)].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)]=\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>),\u003Cspan class=\"hljs-title function_\">recalcTotal\u003C\u002Fspan>()})))}\u003Cspan class=\"hljs-keyword\">else\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">search\u003C\u002Fspan>(pricemod_regex)&gt;-\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>)\u003Cspan class=\"hljs-keyword\">switch\u003C\u002Fspan>($(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>,a),$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">attr\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;type&quot;\u003C\u002Fspan>)){\u003Cspan class=\"hljs-keyword\">case\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;checkbox&quot;\u003C\u002Fspan>:$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">is\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;:checked&quot;\u003C\u002Fspan>)?e.\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)]=\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>):e.\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)]=\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>,$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">on\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;change.foxy-dynamic-price&quot;\u003C\u002Fspan>,(\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">is\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;:checked&quot;\u003C\u002Fspan>)?\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>)].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)]=\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>):\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>)].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)]=\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>,\u003Cspan class=\"hljs-title function_\">recalcTotal\u003C\u002Fspan>()}));\u003Cspan class=\"hljs-keyword\">break\u003C\u002Fspan>;\u003Cspan class=\"hljs-keyword\">case\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;radio&quot;\u003C\u002Fspan>:e.\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">hasOwnProperty\u003C\u002Fspan>(\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>))||(e.\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)]=\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>),$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">is\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;:checked&quot;\u003C\u002Fspan>)&amp;&amp;(e.\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)]=\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>)),$(\u003Cspan class=\"hljs-string\">&quot;[name=&#x27;&quot;\u003C\u002Fspan>+\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>+\u003Cspan class=\"hljs-string\">&quot;&#x27;]&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>,a).\u003Cspan class=\"hljs-title function_\">on\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;change.foxy-dynamic-price&quot;\u003C\u002Fspan>,(\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>)].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)]=\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>),\u003Cspan class=\"hljs-title function_\">recalcTotal\u003C\u002Fspan>()}))}}\u003Cspan class=\"hljs-keyword\">else\u003C\u002Fspan> $(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>,a).\u003Cspan class=\"hljs-title function_\">on\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;change.foxy-dynamic-price&quot;\u003C\u002Fspan>,(\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> a=\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>;([\u003Cspan class=\"hljs-string\">&quot;select&quot;\u003C\u002Fspan>,\u003Cspan class=\"hljs-string\">&quot;text&quot;\u003C\u002Fspan>].\u003Cspan class=\"hljs-title function_\">indexOf\u003C\u002Fspan>(i)&gt;-\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>||[\u003Cspan class=\"hljs-string\">&quot;radio&quot;\u003C\u002Fspan>,\u003Cspan class=\"hljs-string\">&quot;checkbox&quot;\u003C\u002Fspan>].\u003Cspan class=\"hljs-title function_\">indexOf\u003C\u002Fspan>(i)&gt;-\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>&amp;&amp;$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">is\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;:checked&quot;\u003C\u002Fspan>))&amp;&amp;(a=\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>))),\u003Cspan class=\"hljs-built_in\">isNaN\u003C\u002Fspan>(a)&amp;&amp;(a=\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>),\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>)].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">base_price\u003C\u002Fspan>=a,\u003Cspan class=\"hljs-title function_\">recalcTotal\u003C\u002Fspan>()}));\u003Cspan class=\"hljs-keyword\">else\u003C\u002Fspan> $(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>,a).\u003Cspan class=\"hljs-title function_\">on\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;change.foxy-dynamic-price&quot;\u003C\u002Fspan>,(\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> a=\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>;([\u003Cspan class=\"hljs-string\">&quot;select&quot;\u003C\u002Fspan>,\u003Cspan class=\"hljs-string\">&quot;text&quot;\u003C\u002Fspan>].\u003Cspan class=\"hljs-title function_\">indexOf\u003C\u002Fspan>(i)&gt;-\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>||[\u003Cspan class=\"hljs-string\">&quot;radio&quot;\u003C\u002Fspan>,\u003Cspan class=\"hljs-string\">&quot;checkbox&quot;\u003C\u002Fspan>].\u003Cspan class=\"hljs-title function_\">indexOf\u003C\u002Fspan>(i)&gt;-\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>&amp;&amp;$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">is\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;:checked&quot;\u003C\u002Fspan>))&amp;&amp;(a=\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">value\u003C\u002Fspan>))),\u003Cspan class=\"hljs-built_in\">isNaN\u003C\u002Fspan>(a)&amp;&amp;(a=\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>),\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[$(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">data\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;fc-adjust-for&quot;\u003C\u002Fspan>)].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[t].\u003Cspan class=\"hljs-property\">quantity\u003C\u002Fspan>=a,\u003Cspan class=\"hljs-title function_\">recalcTotal\u003C\u002Fspan>()}))}})),\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[a]=e)})),\u003Cspan class=\"hljs-title function_\">recalcTotal\u003C\u002Fspan>()}\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">t\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> t.\u003Cspan class=\"hljs-title function_\">replace\u003C\u002Fspan>(\u003Cspan class=\"hljs-regexp\">\u002F\\|\\|[\\d\\w]+(?:\\|\\|open)?$\u002F\u003C\u002Fspan>,\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>)}\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">getNameParts\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">t\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan>(t=\u003Cspan class=\"hljs-title function_\">clearHash\u003C\u002Fspan>(t)).\u003Cspan class=\"hljs-title function_\">match\u003C\u002Fspan>(\u003Cspan class=\"hljs-regexp\">\u002F(?:(\\d+):)?(.*)\u002F\u003C\u002Fspan>)}\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">getId\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">t\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> a=\u003Cspan class=\"hljs-title function_\">getNameParts\u003C\u002Fspan>(t);\u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> id_regex.\u003Cspan class=\"hljs-title function_\">test\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>)&amp;&amp;(prefix=\u003Cspan class=\"hljs-built_in\">parseInt\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">name\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">match\u003C\u002Fspan>(id_regex)[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>])),\u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>===a[\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>]?\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>:\u003Cspan class=\"hljs-built_in\">parseInt\u003C\u002Fspan>(a[\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>])}\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">getName\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">t\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">getNameParts\u003C\u002Fspan>(t)[\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>]}\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">getElementType\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">t\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;SELECT&quot;\u003C\u002Fspan>==t[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>].\u003Cspan class=\"hljs-property\">tagName\u003C\u002Fspan>)\u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;select&quot;\u003C\u002Fspan>;\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;INPUT&quot;\u003C\u002Fspan>==t[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>].\u003Cspan class=\"hljs-property\">tagName\u003C\u002Fspan>)\u003Cspan class=\"hljs-keyword\">switch\u003C\u002Fspan>(t.\u003Cspan class=\"hljs-title function_\">attr\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;type&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C\u002Fspan>()){\u003Cspan class=\"hljs-keyword\">case\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;text&quot;\u003C\u002Fspan>:\u003Cspan class=\"hljs-keyword\">case\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;number&quot;\u003C\u002Fspan>:\u003Cspan class=\"hljs-keyword\">case\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;tel&quot;\u003C\u002Fspan>:\u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;text&quot;\u003C\u002Fspan>;\u003Cspan class=\"hljs-attr\">default\u003C\u002Fspan>:\u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> t.\u003Cspan class=\"hljs-title function_\">attr\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;type&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C\u002Fspan>()}}\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">recalcTotal\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan>(f \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> \u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> t=\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>,e=\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>;\u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan>(p \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> \u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[f].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> r=\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[f].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[p].\u003Cspan class=\"hljs-property\">base_price\u003C\u002Fspan>,i=\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>;\u003Cspan class=\"hljs-keyword\">for\u003C\u002Fspan>(a \u003Cspan class=\"hljs-keyword\">in\u003C\u002Fspan> \u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[f].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[p].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> s=\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[f].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[p].\u003Cspan class=\"hljs-property\">attributes\u003C\u002Fspan>[a].\u003Cspan class=\"hljs-title function_\">match\u003C\u002Fspan>(pricemod_regex);\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan>(s)\u003Cspan class=\"hljs-keyword\">switch\u003C\u002Fspan>(s[\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>]){\u003Cspan class=\"hljs-keyword\">case\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;:&quot;\u003C\u002Fspan>:r=\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(s[\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>]);\u003Cspan class=\"hljs-keyword\">break\u003C\u002Fspan>;\u003Cspan class=\"hljs-keyword\">case\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;+&quot;\u003C\u002Fspan>:i+=\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(s[\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>]);\u003Cspan class=\"hljs-keyword\">break\u003C\u002Fspan>;\u003Cspan class=\"hljs-keyword\">case\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;-&quot;\u003C\u002Fspan>:i-=\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(s[\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>])}}r+=i,t+=r*=\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[f].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[p].\u003Cspan class=\"hljs-property\">quantity\u003C\u002Fspan>,e+=\u003Cspan class=\"hljs-variable constant_\">ADJUST\u003C\u002Fspan>[f].\u003Cspan class=\"hljs-property\">products\u003C\u002Fspan>[p].\u003Cspan class=\"hljs-property\">quantity\u003C\u002Fspan>}\u003Cspan class=\"hljs-string\">&quot;function&quot;\u003C\u002Fspan>==\u003Cspan class=\"hljs-keyword\">typeof\u003C\u002Fspan> fcFormatPrice&amp;&amp;(t=\u003Cspan class=\"hljs-title function_\">fcFormatPrice\u003C\u002Fspan>(t,f)),\u003Cspan class=\"hljs-string\">&quot;function&quot;\u003C\u002Fspan>==\u003Cspan class=\"hljs-keyword\">typeof\u003C\u002Fspan> fcFormatQuantity&amp;&amp;(e=\u003Cspan class=\"hljs-title function_\">fcFormatQuantity\u003C\u002Fspan>(e,f)),t=\u003Cspan class=\"hljs-title function_\">adjustDisplayPrice\u003C\u002Fspan>(t);\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> c=\u003Cspan class=\"hljs-string\">&quot;object&quot;\u003C\u002Fspan>==\u003Cspan class=\"hljs-keyword\">typeof\u003C\u002Fspan> \u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>&amp;&amp;\u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">hasOwnProperty\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;json&quot;\u003C\u002Fspan>)&amp;&amp;\u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">json\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">config\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">hasOwnProperty\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;currency_format&quot;\u003C\u002Fspan>)?jQuery.\u003Cspan class=\"hljs-title function_\">trim\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">util\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">money_format\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">json\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">config\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">currency_format\u003C\u002Fspan>,t)):t.\u003Cspan class=\"hljs-title function_\">formatMoney\u003C\u002Fspan>(\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>);$(\u003Cspan class=\"hljs-string\">&quot;.&quot;\u003C\u002Fspan>+f+\u003Cspan class=\"hljs-string\">&quot;_total&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">html\u003C\u002Fspan>(c),$(\u003Cspan class=\"hljs-string\">&quot;.&quot;\u003C\u002Fspan>+f+\u003Cspan class=\"hljs-string\">&quot;_total_quantity&quot;\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">html\u003C\u002Fspan>(e)}}\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">adjustDisplayPrice\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">t\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;function&quot;\u003C\u002Fspan>!=\u003Cspan class=\"hljs-keyword\">typeof\u003C\u002Fspan> fc_adjust_price_display||(adjusted_price=\u003Cspan class=\"hljs-title function_\">fc_adjust_price_display\u003C\u002Fspan>(t),\u003Cspan class=\"hljs-keyword\">void\u003C\u002Fspan> \u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>===adjusted_price||\u003Cspan class=\"hljs-built_in\">isNaN\u003C\u002Fspan>(\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(adjusted_price)))?\u003Cspan class=\"hljs-attr\">t\u003C\u002Fspan>:\u003Cspan class=\"hljs-built_in\">parseFloat\u003C\u002Fspan>(adjusted_price)}\u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">onLoad\u003C\u002Fspan>=\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">\u003C\u002Fspan>){\u003Cspan class=\"hljs-variable constant_\">FC\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">client\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">on\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">&quot;ready.done&quot;\u003C\u002Fspan>,initDynamicPrice)},\u003Cspan class=\"hljs-title class_\">Number\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">\u003Cspan class=\"hljs-keyword\">prototype\u003C\u002Fspan>\u003C\u002Fspan>.\u003Cspan class=\"hljs-property\">formatMoney\u003C\u002Fspan>=\u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">t,a,e\u003C\u002Fspan>){\u003Cspan class=\"hljs-keyword\">var\u003C\u002Fspan> r=\u003Cspan class=\"hljs-variable language_\">this\u003C\u002Fspan>,i=(t=\u003Cspan class=\"hljs-built_in\">isNaN\u003C\u002Fspan>(t=\u003Cspan class=\"hljs-title class_\">Math\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">abs\u003C\u002Fspan>(t))?\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>:t,a=\u003Cspan class=\"hljs-literal\">null\u003C\u002Fspan>==a?\u003Cspan class=\"hljs-string\">&quot;.&quot;\u003C\u002Fspan>:a,e=\u003Cspan class=\"hljs-literal\">null\u003C\u002Fspan>==e?\u003Cspan class=\"hljs-string\">&quot;,&quot;\u003C\u002Fspan>:e,r&lt;\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>?\u003Cspan class=\"hljs-string\">&quot;-&quot;\u003C\u002Fspan>:\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>),s=\u003Cspan class=\"hljs-built_in\">parseInt\u003C\u002Fspan>(r=\u003Cspan class=\"hljs-title class_\">Math\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">abs\u003C\u002Fspan>(+r||\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>).\u003Cspan class=\"hljs-title function_\">toFixed\u003C\u002Fspan>(t))+\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>,c=(c=s.\u003Cspan class=\"hljs-property\">length\u003C\u002Fspan>)&gt;\u003Cspan class=\"hljs-number\">3\u003C\u002Fspan>?c%\u003Cspan class=\"hljs-number\">3\u003C\u002Fspan>:\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>;\u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> i+(c?s.\u003Cspan class=\"hljs-title function_\">substr\u003C\u002Fspan>(\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>,c)+\u003Cspan class=\"hljs-attr\">e\u003C\u002Fspan>:\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>)+s.\u003Cspan class=\"hljs-title function_\">substr\u003C\u002Fspan>(c).\u003Cspan class=\"hljs-title function_\">replace\u003C\u002Fspan>(\u003Cspan class=\"hljs-regexp\">\u002F(\\d{3})(?=\\d)\u002Fg\u003C\u002Fspan>,\u003Cspan class=\"hljs-string\">&quot;$1&quot;\u003C\u002Fspan>+e)+(t?a+\u003Cspan class=\"hljs-title class_\">Math\u003C\u002Fspan>.\u003Cspan class=\"hljs-title function_\">abs\u003C\u002Fspan>(r-s).\u003Cspan class=\"hljs-title function_\">toFixed\u003C\u002Fspan>(t).\u003Cspan class=\"hljs-title function_\">slice\u003C\u002Fspan>(\u003Cspan class=\"hljs-number\">2\u003C\u002Fspan>):\u003Cspan class=\"hljs-string\">&quot;&quot;\u003C\u002Fspan>)};\n\u003C\u002Fspan>\u003Cspan class=\"hljs-tag\">&lt;\u002F\u003Cspan class=\"hljs-name\">script\u003C\u002Fspan>&gt;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"step-2-set-up-forms\" data-title=\"Step 2: Set up forms\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"step-2-set-up-forms\">Step 2: Set up forms\u003C\u002Fh2>\u003Cp>Setup your forms like so:\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"product-code\" data-title=\"Product Code\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"product-code\">Product Code\u003C\u002Fh3>\u003Cp>Every Foxy based product that you want to dynamically calculate the total needs to have a unique code set like this:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">input\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">type\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;hidden&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">name\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;code&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">value\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;p1&quot;\u003C\u002Fspan> \u002F&gt;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>The code from the first product in your form will be used as a key for using in the element that dynamically shows the total product price.\u003C\u002Fp>\u003Cp>If you&#039;re not able to know what product code is first, or you just want to set a specific code to use for the price modifier, you can also add a data attribute to your form like this:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">form\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">...\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">data-fc-form-code\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;p1&quot;\u003C\u002Fspan>&gt;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"total-price-element\" data-title=\"Total Price Element\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"total-price-element\">Total Price Element\u003C\u002Fh3>\u003Cp>Next, set an element to be where the total cost is shown and updated, by combining the code from above and &quot;_total&quot; as its class, like this:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">h4\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">class\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;p1_total&quot;\u003C\u002Fspan>&gt;\u003C\u002Fspan>$20.00\u003Cspan class=\"hljs-tag\">&lt;\u002F\u003Cspan class=\"hljs-name\">h4\u003C\u002Fspan>&gt;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>If you&#039;d like to show the total quantity, you can also do that using an element with a class that is a combination of the code and &quot;_total_quantity&quot; as its class, like:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">p\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">class\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;p1_total_quantity&quot;\u003C\u002Fspan>&gt;\u003C\u002Fspan>0\u003Cspan class=\"hljs-tag\">&lt;\u002F\u003Cspan class=\"hljs-name\">p\u003C\u002Fspan>&gt;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"dynamically-triggering-recalculation\" data-title=\"Dynamically triggering recalculation\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"dynamically-triggering-recalculation\">Dynamically triggering recalculation\u003C\u002Fh3>\u003Cp>If for whatever reason you need to trigger the dynamic price calculations to be recreated - for example if you dynamically add in a new input that includes a price modifier, you can execute this function in your javascript:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>initDynamicPrice();\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"modify-dynamically-calculated-total-price\" data-title=\"Modify dynamically calculated total price\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"modify-dynamically-calculated-total-price\">Modify dynamically calculated total price\u003C\u002Fh3>\u003Cp>If you need to dynamically modify the calculated price, for example if your product prices are tax exclusive, but you want to show the calculated price as tax inclusive, you can define a function on your page to achieve that result. The function has a name of \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_adjust_price_display\u003C\u002Fcode>, and is passed a single argument which is the dynamically calculated total price. The function should return your modified price.\u003C\u002Fp>\u003Cp>As an example, let&#039;s say you want to account for a 25% inclusive tax on your product prices, that would look like this:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">script\u003C\u002Fspan>&gt;\u003C\u002Fspan>\u003Cspan class=\"language-javascript\">\n  \u003Cspan class=\"hljs-keyword\">function\u003C\u002Fspan> \u003Cspan class=\"hljs-title function_\">fc_adjust_price_display\u003C\u002Fspan>(\u003Cspan class=\"hljs-params\">price\u003C\u002Fspan>) {\n    \u003Cspan class=\"hljs-keyword\">return\u003C\u002Fspan> price * \u003Cspan class=\"hljs-number\">1.25\u003C\u002Fspan>;\n  }\n\u003C\u002Fspan>\u003Cspan class=\"hljs-tag\">&lt;\u002F\u003Cspan class=\"hljs-name\">script\u003C\u002Fspan>&gt;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"that039s-it\" data-title=\"That&#039;s it!\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"that039s-it\">That&#039;s it!\u003C\u002Fh2>\u003Cp>That should be it. The script basically runs through all the inputs within Foxy add to cart forms on the page, and grabs what the active value is. If that value has a price modifier (\u003Ccode class=\"badge bg-soft-danger text-danger\">p:X\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">p+X\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">p-X\u003C\u002Fcode>), it chucks it into an array. After looping over all the form elements, it loops through all the selected price modifiers, adjusts the base price, multiplies it by the quantity and sets the total element.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"notes-and-limitations\" data-title=\"Notes and Limitations\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"notes-and-limitations\">Notes and Limitations\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>The snippet is run after the Foxy javascript has been initialized. As such - there may be a small time while the page is loading before the dynamic total is calculated.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fsection>",[542,545,547,550,552,554,556,558],{"id":543,"title":339,"level":544},"step-1-include-snippet","H2",{"id":546,"title":380,"level":544},"step-2-set-up-forms",{"id":548,"title":391,"level":549},"product-code","H3",{"id":551,"title":421,"level":549},"total-price-element",{"id":553,"title":446,"level":549},"dynamically-triggering-recalculation",{"id":555,"title":461,"level":549},"modify-dynamically-calculated-total-price",{"id":557,"title":487,"level":544},"that039s-it",{"id":559,"title":514,"level":544},"notes-and-limitations",[561],{"type":562,"content":563},"html","\u003Cp>It can be useful to display a dynamically update total cost to customers on your add to cart pages - to let them know what the options they&#039;re selecting will cost. The following snippet will allow you to display a dynamic total to customers, taking into consideration a change in quantity or options that include a price product option modifier.\u003C\u002Fp>\u003Ch2>Step 1: Include snippet\u003C\u002Fh2>\u003Cp>Paste the following before the closing \u003Ccode class=\"badge bg-soft-danger text-danger\">&lt;\u002Fbody&gt;\u003C\u002Fcode> tag of any page that you want to display the dynamically calculated price of a product. It can also be included in an existing javascript file you&#039;re including if you prefer. This snippet relies on the \u003Ccode class=\"badge bg-soft-danger text-danger\">loader.js\u003C\u002Fcode> file being included on your page.\u003C\u002Fp>\u003Cp>This is \u003Cem>not\u003C\u002Fem> required on the cart, checkout or receipt pages, so should not be place in those templates.\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;script&gt;\n\u002F\u002F Dynamic Price Calculation v3.3\nvar pricemod_regex=\u002F[{\\|]p([+\\-:])([\\d\\.]+)(?:\\D{3})?(?=[\\|}])\u002F,id_regex=\u002F^(\\d+):\u002F,FC=FC||{};function initDynamicPrice(){ADJUST={},$(&quot;input,select&quot;).off(&quot;change.foxy-dynamic-price&quot;),$(&#039;form[action*=&quot;&#039;+FC.settings.storedomain+&#039;&quot;]&#039;).each((function(){var t=$(this),a=&quot;&quot;,e={products:{}};$(this).find(&quot;[name=&#039;name&#039;],[name^=&#039;name||&#039;],[name$=&#039;:name&#039;],[name*=&#039;:name||&#039;]&quot;).each((function(){var r=getId(this.name),i=r?r+&quot;:&quot;:&quot;&quot;,s=parseFloat(t.find(&quot;[name=&#039;&quot;+i+&quot;price&#039;],[name^=&#039;&quot;+i+&quot;price||&#039;]&quot;).first().val()),c={id:r,code:&quot;&quot;,base_price:isNaN(s)?0:s,quantity:1,attributes:{},has_quantity:!1},n=t.find(&quot;[name=&#039;&quot;+i+&quot;quantity&#039;],[name^=&#039;&quot;+i+&quot;quantity||&#039;]&quot;),o=t.find(&quot;[name=&#039;&quot;+i+&quot;code&#039;],[name^=&#039;&quot;+i+&quot;code||&#039;]&quot;);if(o.length&gt;0&amp;&amp;(c.code=clearHash(o.first().val()),&quot;&quot;===a&amp;&amp;(a=c.code)),n.length&gt;0){var d=0,h=getElementType(n);[&quot;select&quot;,&quot;text&quot;].indexOf(h)&gt;-1?(c.has_quantity=!0,d=parseFloat(clearHash(n.val()))):[&quot;radio&quot;,&quot;checkbox&quot;].indexOf(h)&gt;-1&amp;&amp;(c.has_quantity=!0,1==n.filter(&quot;:checked&quot;).length&amp;&amp;(d=parseFloat(clearHash(n.filter(&quot;:checked&quot;).val())))),isNaN(d)&amp;&amp;(d=0),c.quantity=d}e.products[r]=c}));t.attr(&quot;data-fc-form-code&quot;)&amp;&amp;(a=t.attr(&quot;data-fc-form-code&quot;)),&quot;&quot;!==a&amp;&amp;($(this).find(&quot;input,select&quot;).each((function(){if(!this.disabled){var t=getId(this.name),r=getName(this.name),i=getElementType($(this));if(&quot;quantity&quot;!=r)if(&quot;price&quot;!=r||&quot;hidden&quot;==i){if(&quot;SELECT&quot;==this.tagName){var s=!1;$(this).children(&quot;option&quot;).each((function(){this.value.search(pricemod_regex)&gt;-1&amp;&amp;(s=!0)})),s&amp;&amp;($(this).data(&quot;fc-adjust-for&quot;,a),e.products[t].attributes[clearHash(this.name)]=clearHash(this.value),$(this).on(&quot;change.foxy-dynamic-price&quot;,(function(){ADJUST[$(this).data(&quot;fc-adjust-for&quot;)].products[t].attributes[clearHash(this.name)]=clearHash(this.value),recalcTotal()})))}else if(this.value.search(pricemod_regex)&gt;-1)switch($(this).data(&quot;fc-adjust-for&quot;,a),$(this).attr(&quot;type&quot;)){case&quot;checkbox&quot;:$(this).is(&quot;:checked&quot;)?e.products[t].attributes[clearHash(this.name)]=clearHash(this.value):e.products[t].attributes[clearHash(this.name)]=&quot;&quot;,$(this).on(&quot;change.foxy-dynamic-price&quot;,(function(){$(this).is(&quot;:checked&quot;)?ADJUST[$(this).data(&quot;fc-adjust-for&quot;)].products[t].attributes[clearHash(this.name)]=clearHash(this.value):ADJUST[$(this).data(&quot;fc-adjust-for&quot;)].products[t].attributes[clearHash(this.name)]=&quot;&quot;,recalcTotal()}));break;case&quot;radio&quot;:e.products[t].attributes.hasOwnProperty(clearHash(this.name))||(e.products[t].attributes[clearHash(this.name)]=&quot;&quot;),$(this).is(&quot;:checked&quot;)&amp;&amp;(e.products[t].attributes[clearHash(this.name)]=clearHash(this.value)),$(&quot;[name=&#039;&quot;+this.name+&quot;&#039;]&quot;).data(&quot;fc-adjust-for&quot;,a).on(&quot;change.foxy-dynamic-price&quot;,(function(){ADJUST[$(this).data(&quot;fc-adjust-for&quot;)].products[t].attributes[clearHash(this.name)]=clearHash(this.value),recalcTotal()}))}}else $(this).data(&quot;fc-adjust-for&quot;,a).on(&quot;change.foxy-dynamic-price&quot;,(function(){var a=0;([&quot;select&quot;,&quot;text&quot;].indexOf(i)&gt;-1||[&quot;radio&quot;,&quot;checkbox&quot;].indexOf(i)&gt;-1&amp;&amp;$(this).is(&quot;:checked&quot;))&amp;&amp;(a=parseFloat(clearHash(this.value))),isNaN(a)&amp;&amp;(a=0),ADJUST[$(this).data(&quot;fc-adjust-for&quot;)].products[t].base_price=a,recalcTotal()}));else $(this).data(&quot;fc-adjust-for&quot;,a).on(&quot;change.foxy-dynamic-price&quot;,(function(){var a=0;([&quot;select&quot;,&quot;text&quot;].indexOf(i)&gt;-1||[&quot;radio&quot;,&quot;checkbox&quot;].indexOf(i)&gt;-1&amp;&amp;$(this).is(&quot;:checked&quot;))&amp;&amp;(a=parseFloat(clearHash(this.value))),isNaN(a)&amp;&amp;(a=0),ADJUST[$(this).data(&quot;fc-adjust-for&quot;)].products[t].quantity=a,recalcTotal()}))}})),ADJUST[a]=e)})),recalcTotal()}function clearHash(t){return t.replace(\u002F\\|\\|[\\d\\w]+(?:\\|\\|open)?$\u002F,&quot;&quot;)}function getNameParts(t){return(t=clearHash(t)).match(\u002F(?:(\\d+):)?(.*)\u002F)}function getId(t){var a=getNameParts(t);return id_regex.test(this.name)&amp;&amp;(prefix=parseInt(this.name.match(id_regex)[0])),void 0===a[1]?0:parseInt(a[1])}function getName(t){return getNameParts(t)[2]}function getElementType(t){if(&quot;SELECT&quot;==t[0].tagName)return&quot;select&quot;;if(&quot;INPUT&quot;==t[0].tagName)switch(t.attr(&quot;type&quot;).toLowerCase()){case&quot;text&quot;:case&quot;number&quot;:case&quot;tel&quot;:return&quot;text&quot;;default:return t.attr(&quot;type&quot;).toLowerCase()}}function recalcTotal(){for(f in ADJUST){var t=0,e=0;for(p in ADJUST[f].products){var r=ADJUST[f].products[p].base_price,i=0;for(a in ADJUST[f].products[p].attributes){var s=ADJUST[f].products[p].attributes[a].match(pricemod_regex);if(s)switch(s[1]){case&quot;:&quot;:r=parseFloat(s[2]);break;case&quot;+&quot;:i+=parseFloat(s[2]);break;case&quot;-&quot;:i-=parseFloat(s[2])}}r+=i,t+=r*=ADJUST[f].products[p].quantity,e+=ADJUST[f].products[p].quantity}&quot;function&quot;==typeof fcFormatPrice&amp;&amp;(t=fcFormatPrice(t,f)),&quot;function&quot;==typeof fcFormatQuantity&amp;&amp;(e=fcFormatQuantity(e,f)),t=adjustDisplayPrice(t);var c=&quot;object&quot;==typeof FC&amp;&amp;FC.hasOwnProperty(&quot;json&quot;)&amp;&amp;FC.json.config.hasOwnProperty(&quot;currency_format&quot;)?jQuery.trim(FC.util.money_format(FC.json.config.currency_format,t)):t.formatMoney(2);$(&quot;.&quot;+f+&quot;_total&quot;).html(c),$(&quot;.&quot;+f+&quot;_total_quantity&quot;).html(e)}}function adjustDisplayPrice(t){return&quot;function&quot;!=typeof fc_adjust_price_display||(adjusted_price=fc_adjust_price_display(t),void 0===adjusted_price||isNaN(parseFloat(adjusted_price)))?t:parseFloat(adjusted_price)}FC.onLoad=function(){FC.client.on(&quot;ready.done&quot;,initDynamicPrice)},Number.prototype.formatMoney=function(t,a,e){var r=this,i=(t=isNaN(t=Math.abs(t))?2:t,a=null==a?&quot;.&quot;:a,e=null==e?&quot;,&quot;:e,r&lt;0?&quot;-&quot;:&quot;&quot;),s=parseInt(r=Math.abs(+r||0).toFixed(t))+&quot;&quot;,c=(c=s.length)&gt;3?c%3:0;return i+(c?s.substr(0,c)+e:&quot;&quot;)+s.substr(c).replace(\u002F(\\d{3})(?=\\d)\u002Fg,&quot;$1&quot;+e)+(t?a+Math.abs(r-s).toFixed(t).slice(2):&quot;&quot;)};\n&lt;\u002Fscript&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>Step 2: Set up forms\u003C\u002Fh2>\u003Cp>Setup your forms like so:\u003C\u002Fp>\u003Ch3>Product Code\u003C\u002Fh3>\u003Cp>Every Foxy based product that you want to dynamically calculate the total needs to have a unique code set like this:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;input type=&quot;hidden&quot; name=&quot;code&quot; value=&quot;p1&quot; \u002F&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The code from the first product in your form will be used as a key for using in the element that dynamically shows the total product price.\u003C\u002Fp>\u003Cp>If you&#039;re not able to know what product code is first, or you just want to set a specific code to use for the price modifier, you can also add a data attribute to your form like this:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;form ... data-fc-form-code=&quot;p1&quot;&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>Total Price Element\u003C\u002Fh3>\u003Cp>Next, set an element to be where the total cost is shown and updated, by combining the code from above and &quot;_total&quot; as its class, like this:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;h4 class=&quot;p1_total&quot;&gt;$20.00&lt;\u002Fh4&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>If you&#039;d like to show the total quantity, you can also do that using an element with a class that is a combination of the code and &quot;_total_quantity&quot; as its class, like:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;p class=&quot;p1_total_quantity&quot;&gt;0&lt;\u002Fp&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>Dynamically triggering recalculation\u003C\u002Fh3>\u003Cp>If for whatever reason you need to trigger the dynamic price calculations to be recreated - for example if you dynamically add in a new input that includes a price modifier, you can execute this function in your javascript:\u003C\u002Fp>\u003Cpre>\u003Ccode>initDynamicPrice();\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>Modify dynamically calculated total price\u003C\u002Fh3>\u003Cp>If you need to dynamically modify the calculated price, for example if your product prices are tax exclusive, but you want to show the calculated price as tax inclusive, you can define a function on your page to achieve that result. The function has a name of \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_adjust_price_display\u003C\u002Fcode>, and is passed a single argument which is the dynamically calculated total price. The function should return your modified price.\u003C\u002Fp>\u003Cp>As an example, let&#039;s say you want to account for a 25% inclusive tax on your product prices, that would look like this:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;script&gt;\n  function fc_adjust_price_display(price) {\n    return price * 1.25;\n  }\n&lt;\u002Fscript&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>That&#039;s it!\u003C\u002Fh2>\u003Cp>That should be it. The script basically runs through all the inputs within Foxy add to cart forms on the page, and grabs what the active value is. If that value has a price modifier (\u003Ccode class=\"badge bg-soft-danger text-danger\">p:X\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">p+X\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">p-X\u003C\u002Fcode>), it chucks it into an array. After looping over all the form elements, it loops through all the selected price modifiers, adjusts the base price, multiplies it by the quantity and sets the total element.\u003C\u002Fp>\u003Ch2>Notes and Limitations\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>The snippet is run after the Foxy javascript has been initialized. As such - there may be a small time while the page is loading before the dynamic total is calculated.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>",{"name":565,"created_at":566,"published_at":567,"updated_at":568,"id":569,"uuid":47,"content":570,"slug":48,"full_slug":48,"sort_by_date":59,"position":749,"tag_list":750,"is_startpage":24,"parent_id":59,"meta_data":59,"group_id":751,"first_published_at":752,"release_id":59,"lang":65,"path":59,"alternates":753,"default_full_slug":59,"translated_slugs":59},"Contact","2022-09-23T19:56:58.957Z","2025-05-08T18:24:40.382Z","2025-05-08T18:24:40.392Z",3138,{"seo":571,"_uid":574,"title":575,"action":576,"fields":577,"method":725,"columns":726,"subtitle":740,"component":48,"button_text":746,"submit_title":747,"submit_subtitle":748},{"_uid":572,"title":565,"plugin":573,"description":13},"24ff7574-3bcc-48d2-85b5-e529dfea1cc4","meta-fields","8f54f1da-9d8f-49b2-89e7-840e886491cb","We're here to help.","https:\u002F\u002Fusebasin.com\u002Ff\u002F029f48d65402",[578,583,587,696,699,704,719],{"_uid":579,"name":580,"type":332,"label":581,"options":13,"required":33,"component":582,"placeholder":13},"9a70b226-2036-4f90-a052-b3efa61c5896","name","Name","form___field",{"_uid":584,"name":585,"type":585,"label":586,"options":13,"required":33,"component":582,"placeholder":13},"86ba35be-ff43-4a28-8633-14052a8f6622","email","Email Address",{"_uid":588,"name":589,"type":590,"label":591,"options":592,"required":33,"component":582,"conditions":593,"placeholder":13},"3f827475-492c-4f97-aa1e-2386ac263b6c","topic","select","Topic","Presales, Support, Billing, Partnerships, Order Enquiry, Other",[594,650,660,667,675,683,689],{"_uid":595,"equals":596,"fields":597,"component":649},"e21d97dd-e68e-4fa6-ba97-bc40f3041dde","Order Enquiry",[598],{"_uid":599,"body":600,"type":647,"title":13,"component":648},"b64992bc-6d53-48b8-b7a0-d81e5a062e50",{"type":324,"content":601},[602],{"type":327,"content":603},[604,606,614,616,618,619,624,626,630,638,640,645],{"text":605,"type":332},"We are ",{"text":607,"type":332,"marks":608},"Foxy.io",[609],{"type":610,"attrs":611},"link",{"href":612,"uuid":59,"anchor":59,"custom":613,"target":59,"linktype":31},"http:\u002F\u002FFoxy.io",{},{"text":615,"type":332},", an ecommerce platform powering ecommerce for other merchants. We do not sell products, and are unable to assist with questions about order statuses or refunds for any merchants using our platform. Please contact the merchant you ordered from for assistance. If you’d like to report a store using Foxy for fraudulent practices, please select ‘other’ in the subject.",{"type":617},"hard_break",{"type":617},{"text":620,"type":332,"marks":621},"NOTE:",[622],{"type":623},"bold",{"text":625,"type":332}," We are ",{"text":627,"type":332,"marks":628},"not ",[629],{"type":367},{"text":631,"type":332,"marks":632},"Foxy.in",[633,637],{"type":610,"attrs":634},{"href":635,"uuid":59,"anchor":59,"custom":636,"target":59,"linktype":31},"http:\u002F\u002FFoxy.in",{},{"type":367},{"text":639,"type":332},". We are not in any way affiliated with ",{"text":631,"type":332,"marks":641},[642],{"type":610,"attrs":643},{"href":635,"uuid":59,"anchor":59,"custom":644,"target":59,"linktype":31},{},{"text":646,"type":332},", and cannot help in any way with your order from that website.","danger","global___alert","form___condition",{"_uid":651,"equals":652,"fields":653,"component":649},"8765c3e1-25cf-44aa-b8ea-fc6094acf9c3","Presales",[654],{"_uid":655,"name":656,"type":657,"label":13,"options":13,"required":24,"component":582,"conditions":658,"placeholder":13,"default_value":659},"cf464f8e-d643-4f6e-af29-d3abffaf7380","department_email_address","hidden",[],"hello@foxy.io",{"_uid":661,"equals":208,"fields":662,"component":649},"4007b6d8-77e5-421d-bd1e-6f336dd853fb",[663],{"_uid":664,"name":656,"type":657,"label":13,"options":13,"required":24,"component":582,"conditions":665,"placeholder":13,"default_value":666},"7b4c6aa5-a68c-45e0-9ce1-0a36af10c0c2",[],"help@foxy.io",{"_uid":668,"equals":669,"fields":670,"component":649},"1dbb8f11-613d-43cd-9e09-1b94f6e19219","Billing",[671],{"_uid":672,"name":656,"type":657,"label":13,"options":13,"required":24,"component":582,"conditions":673,"placeholder":13,"default_value":674},"a0ac0d1b-bc4f-4a6c-a682-581d450b0b73",[],"help+billing@foxy.io",{"_uid":676,"equals":677,"fields":678,"component":649},"a0a53a50-7172-4a29-ba58-181e38874e12","Partnerships",[679],{"_uid":680,"name":656,"type":657,"label":13,"options":13,"required":24,"component":582,"conditions":681,"placeholder":13,"default_value":682},"7aa011d9-f374-4aed-b5a5-929b54aaf152",[],"partners@foxy.io",{"_uid":684,"equals":596,"fields":685,"component":649},"a4cd431f-25d5-41c7-bfdc-02c908c8fb47",[686],{"_uid":687,"name":656,"type":657,"label":13,"options":13,"required":24,"component":582,"conditions":688,"placeholder":13,"default_value":659},"f5d52168-d6ae-451b-94ee-2ced1cbd28ad",[],{"_uid":690,"equals":691,"fields":692,"component":649},"25aba1ed-eb41-4bbc-aa89-f7a7167ea86e","Other",[693],{"_uid":694,"name":656,"type":657,"label":13,"options":13,"required":24,"component":582,"conditions":695,"placeholder":13,"default_value":659},"f40dfaef-c203-4b71-bf4e-e1b43cef192b",[],{"_uid":697,"component":698},"e9c53a05-f40a-4510-aaf8-bc072a235a0c","form___subject",{"_uid":700,"name":701,"type":702,"label":703,"options":13,"required":33,"component":582,"placeholder":13},"a4c4d385-fff4-4978-99fb-b68cfea623d6","message","textarea","Message",{"_uid":705,"name":706,"type":590,"label":707,"options":708,"required":33,"component":582,"conditions":709,"placeholder":13},"8a3c9f85-f438-427d-9c7a-d7b295a14b5b","existing_user","Are you an existing user?","No, Yes",[710],{"_uid":711,"equals":712,"fields":713,"component":649},"115933d6-262a-4b59-8fa8-579c5ad73de1","Yes",[714],{"_uid":715,"name":716,"type":332,"label":717,"options":13,"required":33,"component":582,"conditions":718,"placeholder":13},"44b6ff23-98f0-4e95-b7f5-c23e06415c2d","subdomain","Store Subdomain",[],{"_uid":720,"name":721,"type":590,"label":722,"options":723,"required":33,"component":582,"conditions":724,"placeholder":13},"922a5cef-3af2-4113-8855-36c7910e3ee3","user_type","What type of user are you?","Developer, Designer, Merchant",[],"POST",[727],{"_uid":728,"text":729,"title":738,"component":739},"7323b90d-a93a-4bf1-baa9-20d0b7ead61b",{"type":324,"content":730},[731],{"type":327,"content":732},[733,735,736],{"text":734,"type":332},"855.369.9227",{"type":617},{"text":737,"type":332},"9:30am-6pm Central M-F","Pre-sales, Sales, & Partnerships","contact___footer_column",{"type":324,"content":741},[742],{"type":327,"content":743},[744],{"text":745,"type":332},"Get in touch to get help from our friendly support team.","Submit","Success!","Your email has been received. We'll get back to you as soon as we can, but it might take a business day. If you don't hear back from us in a timely manner, please check your spam folder to ensure our reply didn't go there.",-80,[],"2fd9fb7d-a48a-4184-acfd-30022d8d6f08","2022-09-23T20:10:45.360Z",[],[288,755],{"name":756,"created_at":757,"published_at":758,"updated_at":759,"id":760,"uuid":530,"content":761,"slug":775,"full_slug":776,"sort_by_date":59,"position":777,"tag_list":778,"is_startpage":24,"parent_id":310,"meta_data":59,"group_id":779,"first_published_at":780,"release_id":59,"lang":65,"path":59,"alternates":781,"default_full_slug":59,"translated_slugs":59},"Products","2023-01-19T16:20:53.075Z","2024-06-05T04:29:14.851Z","2024-06-05T04:29:14.872Z",28236,{"_uid":762,"icon":763,"name":756,"guides":764,"pinned":24,"summary":765,"category":13,"component":297,"blog_posts":766,"content_hub":24,"icon_custom":767,"case_studies":768,"faq_sections":769,"help_articles":770,"featured_guides":771,"mailbox_category":13,"featured_articles":772,"featured_blog_posts":773,"featured_case_studies":774},"3551f6e8-765a-4b8d-8587-2e2eda4d2b23","fa-tags",[],"How products work, supported product types, inventory management, and more.",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"filename":13,"copyright":59,"fieldtype":81},[],[],[],[],[],[],[],"products","help\u002Fcategories\u002Fproducts",150,[],"c025c7a7-0d20-4244-938a-c8d6588e1269","2023-01-19T17:25:32.570Z",[],{},1784742854592]