{"id":13923,"date":"2026-06-08T12:12:16","date_gmt":"2026-06-08T04:12:16","guid":{"rendered":"https:\/\/tmmotoworld.com\/?page_id=13923"},"modified":"2026-07-08T11:14:16","modified_gmt":"2026-07-08T03:14:16","slug":"pricing-tool","status":"publish","type":"page","link":"https:\/\/tmmotoworld.com\/ms\/pricing-tool\/","title":{"rendered":"Pricing Tool"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"13923\" class=\"elementor elementor-13923\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b0ae7cd e-flex e-con-boxed e-con e-parent\" data-id=\"b0ae7cd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3ecf4ac elementor-widget elementor-widget-html\" data-id=\"3ecf4ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>TM Motoworld \u00b7 Used Bike Pricing Tool<\/title>\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@500;600;700&family=Archivo:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n  :root{\r\n    --ink:#15171a; --ink2:#4a4f57; --line:#e3e5e9; --bg:#f4f5f7;\r\n    --card:#ffffff; --navy:#002f79; --navy-dk:#00235c; --gold:#d39d00; --gold-dk:#a87d00; --ok:#10825a;\r\n    --chip:#f0f1f3; --shadow:0 1px 2px rgba(0,0,0,.05),0 8px 24px rgba(0,0,0,.06);\r\n  }\r\n  *{box-sizing:border-box;margin:0;padding:0}\r\n  body{font-family:'Archivo',sans-serif;background:var(--bg);color:var(--ink);line-height:1.45;-webkit-font-smoothing:antialiased}\r\n  .wrap{max-width:1120px;margin:0 auto;padding:18px 16px 60px}\r\n\r\n  header{display:flex;align-items:center;gap:14px;padding:6px 2px 16px;flex-wrap:wrap}\r\n  .logo{font-family:'Oswald';font-weight:700;font-size:22px;letter-spacing:.5px;color:var(--navy);display:flex;align-items:center;gap:8px}\r\n  .logo .bar{display:inline-block;width:6px;height:24px;background:var(--navy);border-radius:2px}\r\n  .logo b{color:var(--gold)}\r\n  .sub{font-size:12.5px;color:var(--ink2);font-weight:500}\r\n  .sub b{color:var(--ink)}\r\n\r\n  .grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}\r\n  @media(max-width:860px){.grid{grid-template-columns:1fr}}\r\n\r\n  .card{background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);overflow:hidden}\r\n  .card .hd{padding:13px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:10px}\r\n  .card .hd h2{font-family:'Oswald';font-weight:600;font-size:14px;letter-spacing:.6px;text-transform:uppercase;color:var(--ink)}\r\n  .card .hd .tag{font-size:11px;font-weight:600;color:var(--ink2);background:var(--chip);padding:3px 9px;border-radius:20px}\r\n  .bd{padding:16px}\r\n\r\n  label{display:block;font-size:11.5px;font-weight:600;letter-spacing:.3px;text-transform:uppercase;color:var(--ink2);margin:0 0 5px}\r\n  input,select,textarea{width:100%;font-family:'Archivo';font-size:14.5px;color:var(--ink);background:#fbfbfc;border:1px solid var(--line);border-radius:9px;padding:9px 11px;transition:border .15s,box-shadow .15s}\r\n  input:focus,select:focus,textarea:focus{outline:none;border-color:var(--navy);box-shadow:0 0 0 3px rgba(0,47,121,.12);background:#fff}\r\n  textarea{resize:vertical;min-height:64px;line-height:1.4}\r\n  .row{display:grid;gap:12px;margin-bottom:13px}\r\n  .r2{grid-template-columns:1fr 1fr}\r\n  .r3{grid-template-columns:1fr 1fr 1fr}\r\n  @media(max-width:520px){.r3{grid-template-columns:1fr 1fr}}\r\n\r\n  .grade{display:flex;gap:8px}\r\n  .grade button{flex:1;font-family:'Oswald';font-weight:600;font-size:15px;border:1.5px solid var(--line);background:#fbfbfc;color:var(--ink2);border-radius:9px;padding:9px 0;cursor:pointer;transition:all .12s}\r\n  .grade button.on{border-color:var(--navy);background:var(--navy);color:#fff;box-shadow:0 4px 12px rgba(0,47,121,.25)}\r\n\r\n  details{border:1px dashed var(--line);border-radius:10px;padding:0;margin-top:4px;background:#fafbfc}\r\n  summary{cursor:pointer;padding:11px 13px;font-size:12.5px;font-weight:600;color:var(--ink);list-style:none;display:flex;align-items:center;gap:7px}\r\n  summary::-webkit-details-marker{display:none}\r\n  summary .ic{color:var(--navy);font-weight:700}\r\n  details[open] summary{border-bottom:1px solid var(--line)}\r\n  .guidebd{padding:13px}\r\n  .note{font-size:11.5px;color:var(--ink2);background:#fff6e9;border:1px solid #f2dcae;border-radius:8px;padding:8px 10px;margin-bottom:11px}\r\n  .sugg{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:11px;padding:10px 12px;background:#eef7f2;border:1px solid #bfe3d2;border-radius:9px}\r\n  .sugg .v{font-family:'Oswald';font-weight:700;font-size:19px;color:var(--ok)}\r\n  .mini{font-size:14px;padding:7px 13px;font-family:'Oswald';font-weight:600;letter-spacing:.4px;background:var(--ok);color:#fff;border:none;border-radius:8px;cursor:pointer}\r\n\r\n  .contacts .cr{display:grid;grid-template-columns:1fr 1.2fr auto;gap:8px;margin-bottom:8px}\r\n  .contacts .cr input{font-size:13.5px;padding:8px 10px}\r\n  .rm{border:1px solid var(--line);background:#fff;color:var(--navy);border-radius:8px;width:38px;cursor:pointer;font-size:16px;font-weight:700}\r\n  .addc{font-size:12.5px;font-weight:600;color:var(--navy);background:none;border:1px dashed var(--navy);border-radius:8px;padding:7px 12px;cursor:pointer;width:100%}\r\n  .planlbl{font-family:'Oswald';font-weight:600;font-size:13px;color:var(--navy);align-self:center;white-space:nowrap}\r\n\r\n  .photoBox{border:1.5px dashed var(--line);border-radius:11px;padding:14px;text-align:center;background:#fbfbfc;cursor:pointer}\r\n  .photoBox:hover{border-color:var(--navy)}\r\n  .photoBox img{max-width:100%;border-radius:8px;margin-top:8px;max-height:220px;object-fit:cover}\r\n  .photoBox .ph{font-size:12.5px;color:var(--ink2);font-weight:500}\r\n\r\n  \/* outputs *\/\r\n  .priceBig{display:flex;align-items:baseline;gap:10px;padding:4px 0 14px}\r\n  .priceBig .cur{font-family:'Oswald';font-weight:600;font-size:20px;color:var(--ink2)}\r\n  .priceBig .amt{font-family:'Oswald';font-weight:700;font-size:40px;color:var(--navy);letter-spacing:.5px;line-height:1}\r\n  .priceBig .unit{font-size:13px;color:var(--ink2);font-weight:600}\r\n\r\n  table.inst{width:100%;border-collapse:collapse;font-size:13.5px}\r\n  table.inst th{font-family:'Oswald';font-weight:600;font-size:11px;letter-spacing:.5px;text-transform:uppercase;color:var(--ink2);text-align:left;padding:8px 10px;border-bottom:1.5px solid var(--line)}\r\n  table.inst td{padding:9px 10px;border-bottom:1px solid #eef0f2}\r\n  table.inst td.tenor{font-weight:600}\r\n  table.inst tr.hl td{background:#eef3fc}\r\n  table.inst td.mo{font-family:'Oswald';font-weight:600;color:var(--navy);text-align:right}\r\n  .yr{font-size:11px;color:var(--ink2);font-weight:500}\r\n\r\n  .preview{font-family:'JetBrains Mono',monospace;font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word;background:#0f1115;color:#e8eaed;border-radius:11px;padding:15px;max-height:520px;overflow:auto}\r\n  .preview .em{color:#ffd479}\r\n\r\n  .copybar{display:flex;gap:9px;margin-top:12px;flex-wrap:wrap}\r\n  .btn{font-family:'Oswald';font-weight:600;font-size:13.5px;letter-spacing:.5px;border:none;border-radius:9px;padding:11px 16px;cursor:pointer;transition:transform .08s,filter .12s;display:inline-flex;align-items:center;gap:7px}\r\n  .btn:active{transform:translateY(1px)}\r\n  .btn.brand{background:var(--navy);color:#fff}\r\n  .btn.brand:hover{filter:brightness(1.07)}\r\n  .btn.ghost{background:#fff;color:var(--ink);border:1px solid var(--line)}\r\n  .btn.ok{background:var(--ok)!important;color:#fff}\r\n\r\n  .blockttl{font-family:'Oswald';font-weight:600;font-size:12px;letter-spacing:.5px;text-transform:uppercase;color:var(--ink2);margin:18px 0 8px;display:flex;align-items:center;gap:8px}\r\n  .blockttl::before{content:\"\";width:14px;height:2px;background:var(--gold);display:inline-block}\r\n  .foot{font-size:11.5px;color:var(--ink2);text-align:center;padding-top:26px}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div class=\"wrap\">\r\n  <header>\r\n    <div class=\"logo\"><span class=\"bar\"><\/span>TM&nbsp;<b>MOTOWORLD<\/b><\/div>\r\n    <div class=\"sub\"><b>Used Bike Pricing Tool<\/b><br>Enter vehicle details \u2192 price \u00b7 installment \u00b7 copy-ready listing<\/div>\r\n  <\/header>\r\n\r\n  <div class=\"grid\">\r\n    <!-- INPUT -->\r\n    <div class=\"card\">\r\n      <div class=\"hd\"><h2>\u2460 Vehicle Input<\/h2><span class=\"tag\">INPUT<\/span><\/div>\r\n      <div class=\"bd\">\r\n        <div class=\"row\"><div>\r\n          <label>Branch<\/label>\r\n          <select id=\"branch\">\r\n            <option value=\"Kapar\">Kapar (HQ)<\/option><option>Honda<\/option><option>Klang<\/option><option>Shah Alam<\/option>\r\n          <\/select>\r\n        <\/div><\/div>\r\n\r\n        <div class=\"row\"><div>\r\n          <label>Model <span style=\"color:var(--navy)\">\u00b7 shown to customer<\/span><\/label>\r\n          <input id=\"model\" value=\"Kawasaki ZX 1000R\">\r\n        <\/div><\/div>\r\n\r\n        <div class=\"row\"><div>\r\n          <label style=\"display:flex;align-items:center;gap:8px;text-transform:none;font-size:13.5px;cursor:pointer;color:var(--ink)\">\r\n            <input type=\"checkbox\" id=\"usedBike\" checked style=\"width:auto;margin:0;accent-color:var(--navy)\"> Used bike \u2014 show Year, Mileage & Warranty <span style=\"color:var(--ink2)\">(uncheck for NEW bike)<\/span>\r\n          <\/label>\r\n        <\/div><\/div>\r\n\r\n        <div id=\"usedFields\">\r\n        <div class=\"row r2\">\r\n          <div><label>Year Made<\/label><input id=\"ymade\" type=\"number\" value=\"2004\"><\/div>\r\n          <div><label>Registered<\/label><input id=\"yreg\" type=\"number\" value=\"2006\"><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"row r2\">\r\n          <div><label>Mileage (km)<\/label><input id=\"mileage\" type=\"number\" value=\"80000\"><\/div>\r\n          <div><label>Warranty<\/label><input id=\"warranty\" value=\"1 Year Engine Warranty\"><\/div>\r\n        <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"row\"><div>\r\n          <label>Bike Detail (one item per line)<\/label>\r\n          <textarea id=\"acc\" style=\"min-height:140px\" placeholder=\"e.g.&#10;Akrapovic Exhaust&#10;Crash Bar&#10;Phone Holder\"><\/textarea>\r\n        <\/div><\/div>\r\n\r\n        <div class=\"blockttl\">Pricing<\/div>\r\n        <div class=\"row\"><div>\r\n          <label>Final Selling Price (RM) <span style=\"color:var(--navy)\">\u00b7 shown to customer<\/span><\/label>\r\n          <input id=\"price\" type=\"number\" value=\"20800\">\r\n        <\/div><\/div>\r\n        <div class=\"row r2\">\r\n          <div><label>Loan Amount (RM) <span style=\"color:var(--ink2)\">\u00b7 \ud83d\udd12 internal only<\/span><\/label><input id=\"loan\" type=\"number\" placeholder=\"blank = use selling price\"><\/div>\r\n          <div><label>Interest Rate (% p.a. flat)<\/label><input id=\"rate\" type=\"number\" step=\"0.1\" value=\"7.5\"><\/div>\r\n        <\/div>\r\n        <div class=\"row r2\">\r\n          <div><label>Max Loan Finance (RM) <span style=\"color:var(--ink2)\">\u00b7 \ud83d\udd12 internal<\/span><\/label><input id=\"maxfin\" type=\"number\" placeholder=\"bank max finance\"><\/div>\r\n          <div><label>Deposit Need (RM) <span style=\"color:var(--ink2)\">\u00b7 \ud83d\udd12 internal \u00b7 auto<\/span><\/label><input id=\"deposit\" type=\"number\" readonly style=\"background:#eef0f2;font-weight:600\"><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"blockttl\">Loan Setup<\/div>\r\n        <div class=\"row\"><div>\r\n          <label style=\"display:flex;align-items:center;gap:8px;text-transform:none;font-size:13.5px;cursor:pointer;color:var(--ink)\">\r\n            <input type=\"checkbox\" id=\"loanOn\" checked style=\"width:auto;margin:0;accent-color:var(--navy)\"> Loan \/ installment available <span style=\"color:var(--ink2)\">(uncheck = CASH SALE only)<\/span>\r\n          <\/label>\r\n        <\/div><\/div>\r\n        <div class=\"row\"><div>\r\n          <label>Service Line <span style=\"color:var(--navy)\">\u00b7 shown to customer<\/span><\/label>\r\n          <textarea id=\"svc\">\u2705 Loan Pinjaman & 0% EPP Credit Card\r\n\u2705 Trade-In semua jenis motor \u2014 datang, kami uruskan semua untuk anda!<\/textarea>\r\n        <\/div><\/div>\r\n        <div id=\"loanFields\">\r\n        <div class=\"row\"><div>\r\n          <label>Tenure (months) \u2014 comma separated <span style=\"color:var(--navy)\">\u00b7 shown to customer<\/span> \u00b7 e.g. 36, 60, 72, 84<\/label>\r\n          <input id=\"tenures\" value=\"60, 72, 84\">\r\n        <\/div><\/div>\r\n        <div class=\"row\"><div>\r\n          <label>Plans \u2014 Deposit RM <span style=\"color:var(--navy)\">\u00b7 shown to customer<\/span><\/label>\r\n          <div class=\"contacts\" id=\"tiers\"><\/div>\r\n          <button class=\"addc\" id=\"addTier\">+ Add Plan<\/button>\r\n        <\/div><\/div>\r\n        <\/div>\r\n        <div class=\"row\"><div>\r\n          <label>0% Credit Card EPP <span style=\"color:var(--navy)\">\u00b7 shown to customer<\/span><\/label>\r\n          <textarea id=\"cardplan\" style=\"min-height:96px\">\ud83d\udcb3 0% Credit Card Ez Payment Plan\r\nMBB, PBB, RHB, AMBANK, OCBC, UOB\/CITI, AFFIN, HLB, SCB, HSBC\r\nMax 3 year or 5 year\r\n*Terms & Conditions apply<\/textarea>\r\n        <\/div><\/div>\r\n        <div class=\"row\"><div>\r\n          <label>Shopee PayLater <span style=\"color:var(--navy)\">\u00b7 shown to customer<\/span><\/label>\r\n          <textarea id=\"shopee\" style=\"min-height:64px\">\ud83d\uded2 Shopee PayLater (SPayLater) tersedia \u2014 bayar ansuran tanpa kad kredit!<\/textarea>\r\n        <\/div><\/div>\r\n\r\n        <div class=\"blockttl\">Contacts<\/div>\r\n        <div class=\"contacts\" id=\"contacts\"><\/div>\r\n        <button class=\"addc\" id=\"addContact\">+ Add Contact<\/button>\r\n\r\n        <div class=\"blockttl\">Store Info<\/div>\r\n        <div class=\"row\"><div><label>Store Name<\/label><input id=\"storeName\" value=\"TM MOTOWORLD KAPAR\"><\/div><\/div>\r\n        <div class=\"row\"><div><label>Address<\/label><textarea id=\"address\">No. 17, Lorong Dato Kaya Kecil 6\/KU 13, Taman Indah, Batu 11, Kapar, 42200 Klang, Selangor Darul Ehsan.<\/textarea><\/div><\/div>\r\n        <div class=\"row r2\">\r\n          <div><label>Maps Link<\/label><input id=\"maps\" value=\"https:\/\/share.google\/ATPV8ngi5i6W44tJK\"><\/div>\r\n          <div><label>Hours<\/label><input id=\"hours\" value=\"Mon \u2013 Sat : 9am \u2013 6pm\"><\/div>\r\n        <\/div>\r\n        <div class=\"row r2\">\r\n          <div><label>Website<\/label><input id=\"web\" value=\"www.tmmotoworld.com\/ms\"><\/div>\r\n          <div><label>Hashtags<\/label><input id=\"tags\" value=\"#tmm #tmmotoworld #bigbikeworld\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- OUTPUT -->\r\n    <div class=\"card\">\r\n      <div class=\"hd\"><h2>\u2461 Auto Output<\/h2><span class=\"tag\">SAME FORMAT \u00b7 ALL BRANCHES<\/span><\/div>\r\n      <div class=\"bd\">\r\n        <div class=\"blockttl\">Selling Price<\/div>\r\n        <div class=\"priceBig\"><span class=\"cur\">RM<\/span><span class=\"amt\" id=\"bigPrice\">20,800<\/span><\/div>\r\n\r\n        <div id=\"instSection\">\r\n        <div class=\"blockttl\" id=\"instTitle\">Installment<\/div>\r\n        <div class=\"yr\" id=\"instCap\" style=\"margin:-4px 0 8px\"><\/div>\r\n        <table class=\"inst\">\r\n          <thead><tr id=\"instHead\"><\/tr><\/thead>\r\n          <tbody id=\"instBody\"><\/tbody>\r\n        <\/table>\r\n        <div class=\"copybar\">\r\n          <button class=\"btn ghost\" id=\"copyInst\">\ud83d\udccb Copy Installment<\/button>\r\n        <\/div>\r\n        <\/div>\r\n        <div class=\"blockttl\" id=\"cashNote\" style=\"display:none;color:var(--navy)\">\ud83d\udcb5 Cash Sale \u2014 no financing<\/div>\r\n\r\n        <div class=\"blockttl\">Listing (copy \u2192 WhatsApp \/ FB)<\/div>\r\n        <div class=\"preview\" id=\"preview\"><\/div>\r\n        <div class=\"copybar\">\r\n          <button class=\"btn brand\" id=\"copyListing\">\ud83d\udccb Copy Listing (with installment)<\/button>\r\n          <button class=\"btn ghost\" id=\"copyAll\">\ud83d\udccb Copy Installment only<\/button>\r\n        <\/div>\r\n\r\n        <div class=\"blockttl\">\ud83d\udce5 Inventory Log <span style=\"color:var(--ink2);font-weight:500;text-transform:none;letter-spacing:0\"> \u00b7 click once when bike comes in<\/span><\/div>\r\n        <div class=\"row\"><div>\r\n          <label>Logged by<\/label>\r\n          <select id=\"loggedBy\"><\/select>\r\n        <\/div><\/div>\r\n        <div class=\"yr\" id=\"logPreview\" style=\"margin:-2px 0 8px\"><\/div>\r\n        <div class=\"copybar\">\r\n          <button class=\"btn ghost\" id=\"logBtn\">\ud83d\udce5 Copy Inventory Row \u2192 paste into Lark Base<\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"foot\">TM Motoworld \u00b7 Internal Tool v2 \u00b7 Price is decided by Hana \/ Steven \u2014 this tool just makes it fast & consistent<\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  const $ = id => document.getElementById(id);\r\n  function getTenors(){ return $(\"tenures\").value.split(\",\").map(s=>parseInt(s)).filter(n=>n>0); }\r\n\r\n  const BRANCHES = {\r\n    \"Kapar\":{store:\"TM MOTOWORLD KAPAR\",\r\n      address:\"No. 17, Lorong Dato Kaya Kecil 6\/KU 13, Taman Indah, Batu 11, Kapar, 42200 Klang, Selangor Darul Ehsan.\",\r\n      maps:\"https:\/\/share.google\/ATPV8ngi5i6W44tJK\", hours:\"Mon \u2013 Sat : 9am \u2013 6pm\",\r\n      contacts:[{n:\"ADIB\",p:\"017-886 9542\"},{n:\"SHAHRIN\",p:\"016-348 8335\"},{n:\"FAZWAN\",p:\"012-817 4828\"},{n:\"AZRUL\",p:\"010-232 3259\"}]},\r\n    \"Honda\":{store:\"TM MOTOWORLD HONDA\",\r\n      address:\"NO, 4,6,8, LORONG HAMZAH ALANG, TAMAN INTAN KAPAR, 42200, KAPAR, SELANGOR.\",\r\n      maps:\"https:\/\/share.google\/PD0ZVaW8PJ\", hours:\"Mon \u2013 Sat : 9am \u2013 6pm\",\r\n      contacts:[{n:\"BELA\",p:\"0109693259\"},{n:\"ANIS\",p:\"0129323259\"},{n:\"SYAZA\",p:\"0123773259\"},{n:\"SYAFA\",p:\"\"}]},\r\n    \"Klang\":{store:\"TM MOTOWORLD KLANG\",\r\n      address:\"Lambretta Selangor- TM Motoworld Klang\\nNo.26, Jalan Bestari 6D, Bandar Bestari, 41200 Klang, Selangor.\",\r\n      maps:\"https:\/\/share.google\/n9RVBbdjVq0KqKPPf\", hours:\"Mon \u2013 Sat : 9am \u2013 6pm\",\r\n      contacts:[{n:\"NABIL\",p:\"0124164828\"},{n:\"JEBAT\",p:\"0128674828\"},{n:\"ALLYSA\",p:\"0123343259\"},{n:\"AZWIN\",p:\"0124828409\"},{n:\"JUE\",p:\"\"}]},\r\n    \"Shah Alam\":{store:\"TM MOTOWORLD SHAH ALAM\",\r\n      address:\"2 & 4, Jalan Panglima Hitam P 35\/P, Alam Impian, 40470, Shah Alam\",\r\n      maps:\"https:\/\/share.google\/qewYNMX4CnIpEYJWu\", hours:\"Mon \u2013 Sat : 9am \u2013 6pm\",\r\n      contacts:[{n:\"AMIRUL\",p:\"0108997920\"},{n:\"AWANG\",p:\"0127674828\"},{n:\"NAZRIN\",p:\"0123984828\"},{n:\"ROY\",p:\"0122653259\"}]}\r\n  };\r\n\r\n  \/\/ ---- helpers ----\r\n  const num = v => { const n = parseFloat(String(v).replace(\/[^0-9.\\-]\/g,\"\")); return isNaN(n)?0:n; };\r\n  const fmt = n => Math.round(n).toLocaleString(\"en-US\");\r\n  const km  = m => m>=1000 ? (Math.round(m\/100)\/10).toString().replace(\/\\.0$\/,\"\")+\"K km\" : m+\" km\";\r\n  const wa  = p => { const d = String(p).replace(\/[^0-9]\/g,\"\").replace(\/^0\/,\"60\"); return d?(\"https:\/\/wa.me\/\"+d):\"\"; };\r\n\r\n  \/\/ ---- contacts ----\r\n  function renderContacts(list){\r\n    const box = $(\"contacts\"); box.innerHTML=\"\";\r\n    list.forEach((c,i)=>{\r\n      const row=document.createElement(\"div\"); row.className=\"cr\";\r\n      row.innerHTML=`<input placeholder=\"Name\" value=\"${c.n||\"\"}\" data-k=\"n\" data-i=\"${i}\">\r\n        <input placeholder=\"01X-XXX XXXX\" value=\"${c.p||\"\"}\" data-k=\"p\" data-i=\"${i}\">\r\n        <button class=\"rm\" data-i=\"${i}\">\u00d7<\/button>`;\r\n      box.appendChild(row);\r\n    });\r\n    box.querySelectorAll(\"input\").forEach(inp=>inp.addEventListener(\"input\",render));\r\n    box.querySelectorAll(\".rm\").forEach(b=>b.addEventListener(\"click\",()=>{\r\n      const c=getContacts(); c.splice(+b.dataset.i,1); renderContacts(c); render();\r\n    }));\r\n  }\r\n  function getContacts(){\r\n    return [...$(\"contacts\").querySelectorAll(\".cr\")].map(r=>({\r\n      n:r.querySelector('[data-k=\"n\"]').value, p:r.querySelector('[data-k=\"p\"]').value\r\n    }));\r\n  }\r\n\r\n  \/\/ ---- down payment tiers ----\r\n  function renderTiers(list){\r\n    const box=$(\"tiers\"); box.innerHTML=\"\";\r\n    list.forEach((d,i)=>{\r\n      const L=String.fromCharCode(65+i);\r\n      const row=document.createElement(\"div\"); row.className=\"cr\"; row.style.gridTemplateColumns=\"auto 1fr auto\";\r\n      row.innerHTML=`<span class=\"planlbl\">Plan (${L})<\/span><input type=\"number\" placeholder=\"Deposit RM\" value=\"${d}\"><button class=\"rm\" data-i=\"${i}\">\u00d7<\/button>`;\r\n      box.appendChild(row);\r\n    });\r\n    box.querySelectorAll(\"input\").forEach(inp=>inp.addEventListener(\"input\",render));\r\n    box.querySelectorAll(\".rm\").forEach(b=>b.addEventListener(\"click\",()=>{\r\n      const t=getTiers(); t.splice(+b.dataset.i,1); renderTiers(t); render();\r\n    }));\r\n  }\r\n  function getTiers(){ return [...$(\"tiers\").querySelectorAll(\"input\")].map(i=>num(i.value)); }\r\n\r\n  \/\/ ---- installment (flat rate \u2014 html0 method: interest on full financed amount across the tenure, spread evenly per month) ----\r\n  function monthly(D,n){\r\n    const loan=num($(\"loan\").value), price=num($(\"price\").value), rate=num($(\"rate\").value);\r\n    const base = loan>0 ? loan : price;\r\n    const principal=Math.max(0, base - D);\r\n    const years = n\/12;                          \/\/ tenure kept in months, converted to years for the interest calc\r\n    const interestPerYear = principal * (rate\/100);\r\n    const totalInterest   = interestPerYear * years;\r\n    const totalPayable    = principal + totalInterest;\r\n    return totalPayable \/ n;                      \/\/ spread over n months\r\n  }\r\n  function planLines(){\r\n    const loanOn=$(\"loanOn\").checked;\r\n    let t=$(\"svc\").value.trim();\r\n    if(loanOn){\r\n      getTiers().forEach((D,i)=>{\r\n        const L=String.fromCharCode(65+i);\r\n        t+=`\\n\\nPlan (${L}) \u2014 Deposit RM ${fmt(D)}`;\r\n        getTenors().forEach(n=>{ t+=`\\nRM ${fmt(monthly(D,n))} x ${n} month`; });\r\n      });\r\n    } else {\r\n      t+=`\\n\\n\ud83d\udcb5 CASH SALE ONLY`;\r\n    }\r\n    const cc=$(\"cardplan\").value.trim();\r\n    if(cc) t+=`\\n\\n${cc}`;\r\n    const sp=$(\"shopee\").value.trim();\r\n    if(sp) t+=`\\n\\n${sp}`;\r\n    return t.trim();\r\n  }\r\n\r\n  \/\/ ---- build listing ----\r\n  function listing(){\r\n    const price=num($(\"price\").value);\r\n    const usedBike=$(\"usedBike\").checked;\r\n    let head =`\ud83c\udfcd\ufe0f ${$(\"model\").value} | Best Deal at TM Motoworld!\\n`+\r\n      `\ud83d\udcb0 Price: RM ${fmt(price)}\\n`+\r\n      `\ud83d\ude9a Delivery available across Malaysia & Singapore`;\r\n    if(usedBike) head += `\\n\ud83d\udee1\ufe0f ${$(\"warranty\").value}`;\r\n    const div=\"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\";\r\n    const details=`\ud83d\udccb VEHICLE DETAILS\\n${div}\\n`+\r\n      `${\"Year Made\".padEnd(14)}: ${$(\"ymade\").value}\\n`+\r\n      `${\"Registered\".padEnd(14)}: ${$(\"yreg\").value}\\n`+\r\n      `${\"Mileage\".padEnd(14)}: ${km(num($(\"mileage\").value))}`;\r\n    const accItems=$(\"acc\").value.split(\"\\n\").map(s=>s.trim()).filter(Boolean);\r\n    const acc=accItems.length?`\ud83d\udd27 BIKE DETAIL\\n${div}\\n`+accItems.map(i=>`\u2022 ${i}`).join(\"\\n\"):\"\";\r\n    const loan=`\ud83d\udcb3 LOAN OPTIONS\\n${div}\\n`+planLines();\r\n    let cont=`\ud83d\udcde CALL \/ WHATSAPP:`;\r\n    getContacts().forEach(c=>{ if(!c.n) return;\r\n      cont+=`\\n\\n${c.n.padEnd(8)}: ${c.p}`; const link=wa(c.p); if(link) cont+=`\\n${link}`;\r\n    });\r\n    const store=`\ud83d\udccd ${$(\"storeName\").value}\\n${$(\"address\").value}`+\r\n      ($(\"maps\").value?`\\n${$(\"maps\").value}`:\"\")+`\\n\ud83d\udd58 ${$(\"hours\").value}`;\r\n    const parts=[head];\r\n    if(usedBike) parts.push(div,details);\r\n    if(acc) parts.push(div,acc);\r\n    parts.push(div,loan,div,`\ud83c\udf10 ${$(\"web\").value}`,div,cont,div,store,div,$(\"tags\").value);\r\n    return parts.join(\"\\n\");\r\n  }\r\n\r\n  function instText(){ return `\ud83d\udcb3 LOAN \/ INSTALLMENT\\n`+planLines(); }\r\n\r\n  \/\/ ---- render ----\r\n  function render(){\r\n    const price=num($(\"price\").value), loan=num($(\"loan\").value), rate=num($(\"rate\").value);\r\n    const base = loan>0 ? loan : price;\r\n    const loanOn=$(\"loanOn\").checked;\r\n    $(\"usedFields\").style.display = $(\"usedBike\").checked ? \"\" : \"none\";\r\n    const depositNeed=Math.max(0, base - num($(\"maxfin\").value));\r\n    $(\"deposit\").value=Math.round(depositNeed);\r\n    $(\"bigPrice\").textContent=fmt(price);\r\n    $(\"loanFields\").style.display = loanOn ? \"\" : \"none\";\r\n    $(\"instSection\").style.display = loanOn ? \"\" : \"none\";\r\n    $(\"cashNote\").style.display = loanOn ? \"none\" : \"flex\";\r\n    $(\"instTitle\").textContent=`Installment \u00b7 ${rate}% p.a. flat`;\r\n    let cap = `\ud83d\udd12 Internal only \u00b7 Loan Amount RM ${fmt(base)}`;\r\n    if(loan>price) cap += ` (+RM ${fmt(loan-price)})`;\r\n    $(\"instCap\").textContent=cap;\r\n    const TENS=getTenors();\r\n    $(\"instHead\").innerHTML=`<th>Plan \/ Deposit<\/th>`+TENS.map(n=>`<th style=\"text-align:right\">${n} mo<\/th>`).join(\"\");\r\n    const tb=$(\"instBody\"); tb.innerHTML=\"\";\r\n    getTiers().forEach((D,i)=>{\r\n      const L=String.fromCharCode(65+i);\r\n      const tr=document.createElement(\"tr\");\r\n      let cells=`<td class=\"tenor\">Plan (${L}) \u00b7 RM ${fmt(D)}<\/td>`;\r\n      TENS.forEach(n=>{ cells+=`<td class=\"mo\">RM ${fmt(monthly(D,n))}<\/td>`; });\r\n      tr.innerHTML=cells; tb.appendChild(tr);\r\n    });\r\n    $(\"preview\").textContent=listing();\r\n    const usedBike=$(\"usedBike\").checked;\r\n    $(\"logPreview\").textContent=`Logs: ${$(\"model\").value||\"\u2014\"} \u00b7 ${$(\"branch\").value} \u00b7 RM ${fmt(price)} \u00b7 ${usedBike?\"Used\":\"New\"} \u00b7 ${loanOn?\"Loan\":\"Cash\"}`;\r\n  }\r\n\r\n  \/\/ ---- inventory log (Lark Base) ----\r\n  function fillLoggedBy(){\r\n    const sel=$(\"loggedBy\");\r\n    const names=getContacts().map(c=>c.n).filter(Boolean);\r\n    sel.innerHTML=`<option value=\"\">\u2014 select \u2014<\/option>`+names.map(n=>`<option>${n}<\/option>`).join(\"\");\r\n  }\r\n  function inventoryRow(){\r\n    const usedBike=$(\"usedBike\").checked;\r\n    const price=num($(\"price\").value);\r\n    const loan=num($(\"loan\").value), base=loan>0?loan:price;\r\n    const today=new Date().toISOString().slice(0,10);\r\n    return [\r\n      today,\r\n      $(\"branch\").value,\r\n      $(\"model\").value,\r\n      usedBike ? $(\"ymade\").value : \"\",\r\n      usedBike ? num($(\"mileage\").value) : \"\",\r\n      price,\r\n      base,\r\n      num($(\"maxfin\").value),\r\n      num($(\"deposit\").value),\r\n      usedBike ? \"Used\" : \"New\",\r\n      $(\"loanOn\").checked ? \"Loan\" : \"Cash\",\r\n      $(\"loggedBy\").value,\r\n      \"In Stock\"\r\n    ].join(\"\\t\");\r\n  }\r\n\r\n  \/\/ ---- copy ----\r\n  function copy(text,btn,label){\r\n    const done=()=>{ const o=btn.textContent; btn.textContent=\"\u2713 Copied!\"; btn.classList.add(\"ok\");\r\n      setTimeout(()=>{btn.textContent=o;btn.classList.remove(\"ok\");},1400); };\r\n    if(navigator.clipboard&&navigator.clipboard.writeText){\r\n      navigator.clipboard.writeText(text).then(done).catch(()=>fallback(text,done));\r\n    } else fallback(text,done);\r\n  }\r\n  function fallback(text,done){\r\n    const ta=document.createElement(\"textarea\"); ta.value=text; ta.style.position=\"fixed\"; ta.style.opacity=\"0\";\r\n    document.body.appendChild(ta); ta.focus(); ta.select();\r\n    try{document.execCommand(\"copy\");done();}catch(e){alert(\"Copy failed \u2014 select manually\");}\r\n    document.body.removeChild(ta);\r\n  }\r\n\r\n  \/\/ ---- events ----\r\n  [\"model\",\"ymade\",\"yreg\",\"mileage\",\"warranty\",\"acc\",\"price\",\"loan\",\"rate\",\"maxfin\",\"tenures\",\"svc\",\"cardplan\",\"shopee\",\r\n   \"storeName\",\"address\",\"maps\",\"hours\",\"web\",\"tags\"]\r\n   .forEach(id=>$(id).addEventListener(\"input\",render));\r\n\r\n  $(\"loanOn\").addEventListener(\"change\",render);\r\n  $(\"usedBike\").addEventListener(\"change\",render);\r\n\r\n  $(\"addTier\").addEventListener(\"click\",()=>{ const t=getTiers(); t.push(0); renderTiers(t); render(); });\r\n\r\n  $(\"branch\").addEventListener(\"change\",()=>{\r\n    const b=BRANCHES[$(\"branch\").value];\r\n    $(\"storeName\").value=b.store; $(\"address\").value=b.address; $(\"maps\").value=b.maps; $(\"hours\").value=b.hours;\r\n    renderContacts(b.contacts.map(c=>({...c}))); fillLoggedBy(); render();\r\n  });\r\n\r\n  $(\"addContact\").addEventListener(\"click\",()=>{ const c=getContacts(); c.push({n:\"\",p:\"\"}); renderContacts(c); });\r\n\r\n  $(\"copyListing\").addEventListener(\"click\",e=>copy(listing(),e.currentTarget));\r\n  $(\"copyInst\").addEventListener(\"click\",e=>copy(instText(),e.currentTarget));\r\n  $(\"copyAll\").addEventListener(\"click\",e=>copy(instText(),e.currentTarget));\r\n  $(\"logBtn\").addEventListener(\"click\",e=>copy(inventoryRow(),e.currentTarget));\r\n\r\n  \/\/ init\r\n  renderContacts(BRANCHES[\"Kapar\"].contacts.map(c=>({...c})));\r\n  renderTiers([500,1000]);\r\n  fillLoggedBy();\r\n  render();\r\n})();\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>TM Motoworld \u00b7 Used Bike Pricing Tool TM&nbsp;MOTOWORLD Used Bike Pricing ToolEnter vehicle details \u2192 price \u00b7 installment \u00b7 copy-ready [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-13923","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/tmmotoworld.com\/ms\/wp-json\/wp\/v2\/pages\/13923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tmmotoworld.com\/ms\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tmmotoworld.com\/ms\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tmmotoworld.com\/ms\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tmmotoworld.com\/ms\/wp-json\/wp\/v2\/comments?post=13923"}],"version-history":[{"count":3,"href":"https:\/\/tmmotoworld.com\/ms\/wp-json\/wp\/v2\/pages\/13923\/revisions"}],"predecessor-version":[{"id":15034,"href":"https:\/\/tmmotoworld.com\/ms\/wp-json\/wp\/v2\/pages\/13923\/revisions\/15034"}],"wp:attachment":[{"href":"https:\/\/tmmotoworld.com\/ms\/wp-json\/wp\/v2\/media?parent=13923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}