{"id":3476,"date":"2025-11-28T22:44:39","date_gmt":"2025-11-28T22:44:39","guid":{"rendered":"https:\/\/dallasdrink.com\/dealerships-and-sales-centers\/"},"modified":"2026-06-18T05:41:53","modified_gmt":"2026-06-18T05:41:53","slug":"dealerships-and-sales-centers","status":"publish","type":"page","link":"https:\/\/dallasdrink.com\/en\/dealerships-and-sales-centers\/","title":{"rendered":"Dealerships and sales centers"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3476\" class=\"elementor elementor-3476 elementor-2533\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f08f4da e-flex e-con-boxed e-con e-parent\" data-id=\"f08f4da\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1bcb675 elementor-widget elementor-widget-heading\" data-id=\"1bcb675\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dealerships and sales centers<\/h2>\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<div class=\"elementor-element elementor-element-cf901e4 e-con-full e-flex e-con e-parent\" data-id=\"cf901e4\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-017bb8c e-con-full e-flex e-con e-child\" data-id=\"017bb8c\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d09cfe7 elementor-widget elementor-widget-html\" data-id=\"d09cfe7\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"dallas-locations-wrapper\">\n\n  <div class=\"dallas-filter-bar\">\n    <div class=\"dallas-filter-group\">\n      <label for=\"dallas-country-filter\">\u06a9\u0634\u0648\u0631:<\/label>\n      <select id=\"dallas-country-filter\">\n        <option value=\"\">\u0647\u0645\u0647 \u06a9\u0634\u0648\u0631\u0647\u0627<\/option>\n      <\/select>\n    <\/div>\n\n    <div class=\"dallas-filter-group\">\n      <label for=\"dallas-province-filter\">\u0627\u0633\u062a\u0627\u0646:<\/label>\n      <select id=\"dallas-province-filter\">\n        <option value=\"\">\u0647\u0645\u0647 \u0627\u0633\u062a\u0627\u0646\u200c\u0647\u0627<\/option>\n      <\/select>\n    <\/div>\n\n    <div class=\"dallas-filter-group\">\n      <label for=\"dallas-city-filter\">\u0634\u0647\u0631:<\/label>\n      <select id=\"dallas-city-filter\">\n        <option value=\"\">\u0647\u0645\u0647 \u0634\u0647\u0631\u0647\u0627<\/option>\n      <\/select>\n    <\/div>\n  <\/div>\n\n  <div class=\"dallas-map-wrapper\">\n    <div class=\"dallas-map-inner\">\n\n      <div class=\"dallas-map-zoom-controls\">\n        <button type=\"button\" id=\"dallas-zoom-in\">+<\/button>\n        <button type=\"button\" id=\"dallas-zoom-out\">\u2212<\/button>\n        <button type=\"button\" id=\"dallas-zoom-reset\">\u21ba<\/button>\n        <span class=\"dallas-map-zoom-label\" id=\"dallas-zoom-label\">130%<\/span>\n      <\/div>\n\n      <div class=\"dallas-map-zoom-container\" id=\"dallas-map-zoom-container\">\n        <img decoding=\"async\"\n          src=\"https:\/\/dallasdrink.com\/wp-content\/uploads\/2025\/12\/world.svg\"\n          alt=\"\u0646\u0642\u0634\u0647 \u062c\u0647\u0627\u0646\u06cc \u0646\u0645\u0627\u06cc\u0646\u062f\u06af\u06cc \u0647\u0627\u06cc \u062f\u0627\u0644\u0627\u0633\"\n          class=\"dallas-map-image\"\n          id=\"dallas-map-image\"\n        \/>\n        <div class=\"dallas-markers-layer\" id=\"dallas-markers-layer\"><\/div>\n      <\/div>\n\n    <\/div>\n  <\/div>\n\n  <div class=\"dallas-table-wrapper\">\n    <table class=\"dallas-branches-table\" id=\"dallas-branches-table\">\n      <thead>\n        <tr>\n          <th>#<\/th>\n          <th>\u06a9\u0634\u0648\u0631<\/th>\n          <th>\u0627\u0633\u062a\u0627\u0646<\/th>\n          <th>\u0634\u0647\u0631 \/ \u0645\u0646\u0637\u0642\u0647<\/th>\n        <\/tr>\n      <\/thead>\n      <tbody id=\"dallas-branches-table-body\"><\/tbody>\n    <\/table>\n  <\/div>\n\n<\/div>\n\n<style>\n  .dallas-locations-wrapper {\n    direction: rtl;\n    font-family: inherit;\n    max-width: 100%;\n  }\n\n  .dallas-filter-bar {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 0.75rem;\n    margin-bottom: 1rem;\n    font-size: 14px;\n  }\n\n  .dallas-filter-group {\n    display: flex;\n    align-items: center;\n    gap: 0.25rem;\n  }\n\n  .dallas-filter-bar label {\n    font-weight: 600;\n    white-space: nowrap;\n  }\n\n  .dallas-filter-bar select {\n    padding: 0.35rem 0.75rem;\n    border-radius: 6px;\n    border: 1px solid #ccc;\n    min-width: 150px;\n    font-size: 14px;\n  }\n\n  .dallas-map-wrapper {\n    margin-bottom: 1.5rem;\n  }\n\n  .dallas-map-inner {\n    position: relative;\n    max-width: 900px;\n    margin: 0 auto;\n    overflow: hidden;\n    background: #f3f3f3;\n        border-radius: 20px;\n  }\n\n  .dallas-map-image {\n    width: 100%;\n    height: auto;\n    display: block;\n  }\n\n  .dallas-map-zoom-container {\n    width: 100%;\n    transform-origin: center center;\n    transition: transform 0.25s ease-out;\n    cursor: grab;\n    position: relative;\n    touch-action: none;\n  }\n\n  .dallas-map-zoom-container.dallas-panning {\n    cursor: grabbing;\n  }\n\n  .dallas-markers-layer {\n    position: absolute;\n    inset: 0;\n    pointer-events: none;\n  }\n\n  .dallas-marker {\n    position: absolute;\n    transform: translate(-50%, -100%);\n    pointer-events: auto;\n    background: none;\n    border: none;\n    padding: 0;\n    cursor: pointer;\n    text-align: center;\n    font-size: 11px;\n    color: #222;\n  }\n\n  .dallas-marker-icon {\n    width: 16px;\n    height: 16px;\n    border-radius: 50% 50% 50% 0;\n    transform: rotate(-45deg);\n    background: #e53935;\n    display: inline-block;\n    box-shadow: 0 0 0 2px #fff, 0 2px 6px rgba(0, 0, 0, 0.3);\n  }\n\n  .dallas-marker-icon::after {\n    content: \"\";\n    display: block;\n    width: 6px;\n    height: 6px;\n    background: #fff;\n    border-radius: 50%;\n    margin: 4px auto 0;\n  }\n\n  .dallas-marker-label {\n    display: block;\n    white-space: nowrap;\n    background: rgba(255, 255, 255, 0.9);\n    padding: 2px 6px;\n    border-radius: 4px;\n    margin-top: 2px;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n  }\n\n  .dallas-marker-active .dallas-marker-icon {\n    background: #1e88e5;\n  }\n\n  .dallas-marker-active .dallas-marker-label {\n    font-weight: 600;\n  }\n\n  .dallas-map-zoom-controls {\n    position: absolute;\n    top: 10px;\n    left: 10px;\n    z-index: 10;\n    display: flex;\n    flex-direction: column;\n    gap: 4px;\n    background: rgba(255, 255, 255, 0.9);\n    padding: 4px;\n    border-radius: 6px;\n    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\n    font-size: 12px;\n  }\n\n  .dallas-map-zoom-controls button {\n    border: 1px solid #ccc;\n    background: #fff;\n    border-radius: 4px;\n    padding: 2px 6px;\n    cursor: pointer;\n    font-size: 14px;\n    line-height: 1;\n  }\n\n  .dallas-map-zoom-controls button:hover {\n    background: #f1f1f1;\n  }\n\n  .dallas-map-zoom-label {\n    text-align: center;\n    font-size: 11px;\n    margin-top: 2px;\n  }\n\n  .dallas-table-wrapper {\n    overflow-x: auto;\n  }\n\n  .dallas-branches-table {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 13px;\n  }\n\n  .dallas-branches-table thead {\n    background: #f5f5f5;\n  }\n\n  .dallas-branches-table th,\n  .dallas-branches-table td {\n    padding: 0.5rem 0.6rem;\n    border: 1px solid #e0e0e0;\n    text-align: right;\n    vertical-align: top;\n  }\n\n  .dallas-branches-table tbody tr:nth-child(odd) {\n    background: #fafafa;\n  }\n\n  .dallas-branches-table tbody tr:hover {\n    background: #e3f2fd;\n  }\n\n  .dallas-row-active {\n    background: #bbdefb !important;\n    font-weight: 600;\n  }\n\n  @media (max-width: 600px) {\n    .dallas-filter-bar {\n      flex-direction: column;\n      align-items: flex-start;\n    }\n    .dallas-marker-label {\n      font-size: 10px;\n    }\n  }\n<\/style>\n\n<script>\n(function () {\n  const MAP_BOUNDS = {\n    minLon: -169.110266,\n    maxLon: 190.486279,\n    minLat: -58.508473,\n    maxLat: 83.600842\n  };\n\n  \/\/ \u2705 UI \u0633\u0647\u200c\u0632\u0628\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc \u0644\u06cc\u0628\u0644\u200c\u0647\u0627 \u0648 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u0641\u06cc\u0644\u062a\u0631 \u0648 \u062a\u06cc\u062a\u0631 \u062c\u062f\u0648\u0644\n  const UI_TEXT = {\n    fa: {\n      countryLabel: \"\u06a9\u0634\u0648\u0631:\",\n      provinceLabel: \"\u0627\u0633\u062a\u0627\u0646:\",\n      cityLabel: \"\u0634\u0647\u0631:\",\n      allCountries: \"\u0647\u0645\u0647 \u06a9\u0634\u0648\u0631\u0647\u0627\",\n      allProvinces: \"\u0647\u0645\u0647 \u0627\u0633\u062a\u0627\u0646\u200c\u0647\u0627\",\n      allCities: \"\u0647\u0645\u0647 \u0634\u0647\u0631\u0647\u0627\",\n      thIndex: \"#\",\n      thCountry: \"\u06a9\u0634\u0648\u0631\",\n      thProvince: \"\u0627\u0633\u062a\u0627\u0646\",\n      thCity: \"\u0634\u0647\u0631 \/ \u0645\u0646\u0637\u0642\u0647\"\n    },\n    en: {\n      countryLabel: \"Country:\",\n      provinceLabel: \"Province:\",\n      cityLabel: \"City:\",\n      allCountries: \"All countries\",\n      allProvinces: \"All provinces\",\n      allCities: \"All cities\",\n      thIndex: \"#\",\n      thCountry: \"Country\",\n      thProvince: \"Province\",\n      thCity: \"City \/ Area\"\n    },\n    ar: {\n      countryLabel: \"\u0627\u0644\u062f\u0648\u0644\u0629:\",\n      provinceLabel: \"\u0627\u0644\u0645\u062d\u0627\u0641\u0638\u0629:\",\n      cityLabel: \"\u0627\u0644\u0645\u062f\u064a\u0646\u0629:\",\n      allCountries: \"\u0643\u0644 \u0627\u0644\u062f\u0648\u0644\",\n      allProvinces: \"\u0643\u0644 \u0627\u0644\u0645\u062d\u0627\u0641\u0638\u0627\u062a\",\n      allCities: \"\u0643\u0644 \u0627\u0644\u0645\u062f\u0646\",\n      thIndex: \"#\",\n      thCountry: \"\u0627\u0644\u062f\u0648\u0644\u0629\",\n      thProvince: \"\u0627\u0644\u0645\u062d\u0627\u0641\u0638\u0629\",\n      thCity: \"\u0627\u0644\u0645\u062f\u064a\u0646\u0629 \/ \u0627\u0644\u0645\u0646\u0637\u0642\u0629\"\n    }\n  };\n\n  function getUIText(lang) {\n    return UI_TEXT[lang] || UI_TEXT.fa;\n  }\n\n  \/\/ \u0632\u0628\u0627\u0646 \u0635\u0641\u062d\u0647 \u0627\u0632 WPML (html lang)\n  function getPageLang() {\n    const lang = (document.documentElement.getAttribute(\"lang\") || \"\").toLowerCase();\n    if (lang.startsWith(\"fa\")) return \"fa\";\n    if (lang.startsWith(\"ar\")) return \"ar\";\n    return \"en\";\n  }\n\n  \/\/ \u0627\u06af\u0631 value string \u0628\u0648\u062f \u0647\u0645\u0648\u0646\u0648 \u0628\u062f\u0647\u061b \u0627\u06af\u0631 \u0622\u0628\u062c\u06a9\u062a \u0628\u0648\u062f {fa\/en\/ar} \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\n  function tName(value, lang) {\n    if (typeof value === \"string\") return value || \"\";\n    if (value && typeof value === \"object\") {\n      return value[lang] || value.fa || value.en || value.ar || \"\";\n    }\n    return \"\";\n  }\n\n  \/\/ \u2705 \u0633\u0647\u200c\u0632\u0628\u0627\u0646\u0647 (fa\/ar\/en) \u2014 \u0647\u0645\u0627\u0646 \u062f\u06cc\u062a\u0627\u06cc \u0642\u0628\u0644\u06cc + \u062a\u0631\u062c\u0645\u0647\u200c\u0647\u0627\n  const DALLAS_BRANCHES = [\n    { id: 0,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0627\u0635\u0641\u0647\u0627\u0646\",en:\"Isfahan\",ar:\"\u0623\u0635\u0641\u0647\u0627\u0646\"}, city:{fa:\"\u0627\u0635\u0641\u0647\u0627\u0646\",en:\"Isfahan\",ar:\"\u0623\u0635\u0641\u0647\u0627\u0646\"}, lat:32.577637, lon:51.659054 },\n    { id: 1,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0627\u0644\u0628\u0631\u0632\",en:\"Alborz\",ar:\"\u0627\u0644\u0628\u0631\u0632\"}, city:{fa:\"\u0643\u0631\u062c\",en:\"Karaj\",ar:\"\u0643\u0631\u062c\"}, lat:35.72472,  lon:50.952766 },\n    { id: 2,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0628\u0648\u0634\u0647\u0631\",en:\"Bushehr\",ar:\"\u0628\u0648\u0634\u0647\u0631\"}, city:{fa:\"\u0627\u0646\u0627\u0631\u0633\u062a\u0627\u0646\",en:\"Anarestan\",ar:\"\u0627\u0646\u0627\u0631\u0633\u062a\u0627\u0646\"}, lat:28.032549, lon:52.066467 },\n    { id: 3,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0628\u0648\u0634\u0647\u0631\",en:\"Bushehr\",ar:\"\u0628\u0648\u0634\u0647\u0631\"}, city:{fa:\"\u0628\u0631\u0627\u0632\u062c\u0627\u0646\",en:\"Borazjan\",ar:\"\u0628\u0631\u0627\u0632\u062c\u0627\u0646\"}, lat:29.270712, lon:51.216709 },\n    { id: 4,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0628\u0648\u0634\u0647\u0631\",en:\"Bushehr\",ar:\"\u0628\u0648\u0634\u0647\u0631\"}, city:{fa:\"\u0628\u0646\u062f\u0631\u0643\u0646\u06af\u0627\u0646\",en:\"Bandar Kangan\",ar:\"\u0628\u0646\u062f\u0631 \u0643\u0646\u06af\u0627\u0646\"}, lat:27.837763, lon:52.061794 },\n    { id: 5,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0628\u0648\u0634\u0647\u0631\",en:\"Bushehr\",ar:\"\u0628\u0648\u0634\u0647\u0631\"}, city:{fa:\"\u0628\u0646\u062f\u0631\u06af\u0646\u0627\u0648\u0647\",en:\"Bandar Ganaveh\",ar:\"\u0628\u0646\u062f\u0631 \u06af\u0646\u0627\u0648\u0647\"}, lat:29.573654, lon:50.518543 },\n    { id: 6,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0628\u0648\u0634\u0647\u0631\",en:\"Bushehr\",ar:\"\u0628\u0648\u0634\u0647\u0631\"}, city:{fa:\"\u0628\u0648\u0634\u0647\u0631\",en:\"Bushehr\",ar:\"\u0628\u0648\u0634\u0647\u0631\"}, lat:28.921427, lon:50.837669 },\n    { id: 7,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0628\u0648\u0634\u0647\u0631\",en:\"Bushehr\",ar:\"\u0628\u0648\u0634\u0647\u0631\"}, city:{fa:\"\u062f\u0644\u0648\u0627\u0631\",en:\"Delvar\",ar:\"\u062f\u0644\u0648\u0627\u0631\"}, lat:28.745995, lon:51.070183 },\n    { id: 8,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062a\u0647\u0631\u0627\u0646\",en:\"Tehran Province\",ar:\"\u0637\u0647\u0631\u0627\u0646\"}, city:{fa:\"\u062a\u0647\u0631\u0627\u0646\",en:\"Tehran\",ar:\"\u0637\u0647\u0631\u0627\u0646\"}, lat:35.702908, lon:51.349758 },\n    { id: 9,  country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0686\u0647\u0627\u0631\u0645\u062d\u0627\u0644 \u0648\u0628\u062e\u062a\u064a\u0627\u0631\u064a\",en:\"Chaharmahal and Bakhtiari\",ar:\"\u0686\u0647\u0627\u0631\u0645\u062d\u0627\u0644 \u0648\u0628\u062e\u062a\u064a\u0627\u0631\u064a\"}, city:{fa:\"\u0634\u0647\u0631\u0643\u0631\u062f\",en:\"Shahrekord\",ar:\"\u0634\u0647\u0631\u0643\u0631\u062f\"}, lat:32.316181, lon:50.858204 },\n    { id: 10, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u062c\u0646\u0648\u0628\u064a\",en:\"South Khorasan\",ar:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629\"}, city:{fa:\"\u0641\u0631\u062f\u0648\u0633\",en:\"Ferdows\",ar:\"\u0641\u0631\u062f\u0648\u0633\"}, lat:34.018078, lon:58.172386 },\n    { id: 11, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0631\u0636\u0648\u064a\",en:\"Razavi Khorasan\",ar:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0627\u0644\u0631\u0636\u0648\u064a\u0629\"}, city:{fa:\"\u062a\u0631\u0628\u062a \u062d\u064a\u062f\u0631\u064a\u0647\",en:\"Torbat-e Heydarieh\",ar:\"\u062a\u0631\u0628\u062a \u062d\u064a\u062f\u0631\u064a\u0647\"}, lat:35.278458, lon:59.21302 },\n    { id: 12, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0631\u0636\u0648\u064a\",en:\"Razavi Khorasan\",ar:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0627\u0644\u0631\u0636\u0648\u064a\u0629\"}, city:{fa:\"\u0686\u0646\u0627\u0631\u0627\u0646\",en:\"Chenaran\",ar:\"\u0686\u0646\u0627\u0631\u0627\u0646\"}, lat:36.642281, lon:59.120838 },\n    { id: 13, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0631\u0636\u0648\u064a\",en:\"Razavi Khorasan\",ar:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0627\u0644\u0631\u0636\u0648\u064a\u0629\"}, city:{fa:\"\u0633\u0628\u0632\u0648\u0627\u0631\",en:\"Sabzevar\",ar:\"\u0633\u0628\u0632\u0648\u0627\u0631\"}, lat:36.209213, lon:57.68232 },\n    { id: 14, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0631\u0636\u0648\u064a\",en:\"Razavi Khorasan\",ar:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0627\u0644\u0631\u0636\u0648\u064a\u0629\"}, city:{fa:\"\u0642\u0648\u0686\u0627\u0646\",en:\"Quchan\",ar:\"\u0642\u0648\u0686\u0627\u0646\"}, lat:37.102367, lon:58.510872 },\n    { id: 15, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0631\u0636\u0648\u064a\",en:\"Razavi Khorasan\",ar:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0627\u0644\u0631\u0636\u0648\u064a\u0629\"}, city:{fa:\"\u0645\u0634\u0647\u062f\",en:\"Mashhad\",ar:\"\u0645\u0634\u0647\u062f\"}, lat:36.372772, lon:59.504089 },\n    { id: 16, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0631\u0636\u0648\u064a\",en:\"Razavi Khorasan\",ar:\"\u062e\u0631\u0627\u0633\u0627\u0646 \u0627\u0644\u0631\u0636\u0648\u064a\u0629\"}, city:{fa:\"\u0646\u064a\u0634\u0627\u0628\u0648\u0631\",en:\"Neyshabur\",ar:\"\u0646\u064a\u0634\u0627\u0628\u0648\u0631\"}, lat:36.211357, lon:58.796997 },\n    { id: 17, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062e\u0648\u0632\u0633\u062a\u0627\u0646\",en:\"Khuzestan\",ar:\"\u062e\u0648\u0632\u0633\u062a\u0627\u0646\"}, city:{fa:\"\u0627\u0647\u0648\u0627\u0632\",en:\"Ahvaz\",ar:\"\u0627\u0644\u0623\u0647\u0648\u0627\u0632\"}, lat:31.333559, lon:48.680302 },\n    { id: 18, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u062e\u0648\u0632\u0633\u062a\u0627\u0646\",en:\"Khuzestan\",ar:\"\u062e\u0648\u0632\u0633\u062a\u0627\u0646\"}, city:{fa:\"\u062f\u0632\u0641\u0648\u0644\",en:\"Dezful\",ar:\"\u062f\u0632\u0641\u0648\u0644\"}, lat:32.396439, lon:48.38073 },\n    { id: 19, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0641\u0627\u0631\u0633\",en:\"Fars\",ar:\"\u0641\u0627\u0631\u0633\"}, city:{fa:\"\u0634\u064a\u0631\u0627\u0632\",en:\"Shiraz\",ar:\"\u0634\u064a\u0631\u0627\u0632\"}, lat:29.611949, lon:52.49321 },\n    { id: 20, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0641\u0627\u0631\u0633\",en:\"Fars\",ar:\"\u0641\u0627\u0631\u0633\"}, city:{fa:\"\u0627\u0642\u0644\u064a\u062f\",en:\"Eqlid\",ar:\"\u0627\u0642\u0644\u064a\u062f\"}, lat:30.90192,  lon:52.705261 },\n    { id: 21, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0641\u0627\u0631\u0633\",en:\"Fars\",ar:\"\u0641\u0627\u0631\u0633\"}, city:{fa:\"\u0643\u0627\u0632\u0631\u0648\u0646\",en:\"Kazerun\",ar:\"\u0643\u0627\u0632\u0631\u0648\u0646\"}, lat:29.603746, lon:51.651798 },\n    { id: 22, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0641\u0627\u0631\u0633\",en:\"Fars\",ar:\"\u0641\u0627\u0631\u0633\"}, city:{fa:\"\u0643\u0648\u0627\u0631\",en:\"Kavar\",ar:\"\u0643\u0648\u0627\u0631\"}, lat:29.196085, lon:52.686718 },\n    { id: 23, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0641\u0627\u0631\u0633\",en:\"Fars\",ar:\"\u0641\u0627\u0631\u0633\"}, city:{fa:\"\u0644\u0627\u0631\",en:\"Lar\",ar:\"\u0644\u0627\u0631\"}, lat:27.642649, lon:54.320358 },\n    { id: 24, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0641\u0627\u0631\u0633\",en:\"Fars\",ar:\"\u0641\u0627\u0631\u0633\"}, city:{fa:\"\u0644\u0627\u0645\u0631\u062f\",en:\"Lamerd\",ar:\"\u0644\u0627\u0645\u0631\u062f\"}, lat:27.329967, lon:53.18792 },\n    { id: 25, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0643\u0631\u0645\u0627\u0646\",en:\"Kerman\",ar:\"\u0643\u0631\u0645\u0627\u0646\"}, city:{fa:\"\u0633\u064a\u0631\u062c\u0627\u0646\",en:\"Sirjan\",ar:\"\u0633\u064a\u0631\u062c\u0627\u0646\"}, lat:29.437616, lon:55.674908 },\n    { id: 26, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0643\u0631\u0645\u0627\u0646\",en:\"Kerman\",ar:\"\u0643\u0631\u0645\u0627\u0646\"}, city:{fa:\"\u0642\u0644\u0639\u0647 \u06af\u0646\u062c\",en:\"Qaleh Ganj\",ar:\"\u0642\u0644\u0639\u0647 \u06af\u0646\u062c\"}, lat:27.516354, lon:57.882969 },\n    { id: 27, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0643\u0631\u0645\u0627\u0646\",en:\"Kerman\",ar:\"\u0643\u0631\u0645\u0627\u0646\"}, city:{fa:\"\u0643\u0631\u0645\u0627\u0646\",en:\"Kerman\",ar:\"\u0643\u0631\u0645\u0627\u0646\"}, lat:30.281403, lon:57.064182 },\n    { id: 28, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0643\u0647\u06af\u064a\u0644\u0648\u064a\u0647 \u0648\u0628\u0648\u064a\u0631\u0627\u062d\u0645\u062f\",en:\"Kohgiluyeh and Boyer-Ahmad\",ar:\"\u0643\u0647\u06af\u064a\u0644\u0648\u064a\u0647 \u0648\u0628\u0648\u064a\u0631\u0627\u062d\u0645\u062f\"}, city:{fa:\"\u064a\u0627\u0633\u0648\u062c\",en:\"Yasuj\",ar:\"\u064a\u0627\u0633\u0648\u062c\"}, lat:30.656763, lon:51.582424 },\n    { id: 29, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0645\u0627\u0632\u0646\u062f\u0631\u0627\u0646\",en:\"Mazandaran\",ar:\"\u0645\u0627\u0632\u0646\u062f\u0631\u0627\u0646\"}, city:{fa:\"\u062a\u0646\u0643\u0627\u0628\u0646\",en:\"Tonekabon\",ar:\"\u062a\u0646\u0643\u0627\u0628\u0646\"}, lat:36.81514,  lon:50.874363 },\n    { id: 30, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0647\u0631\u0645\u0632\u06af\u0627\u0646\",en:\"Hormozgan\",ar:\"\u0647\u0631\u0645\u0632\u06af\u0627\u0646\"}, city:{fa:\"\u0643\u064a\u0634\",en:\"Kish\",ar:\"\u0643\u064a\u0634\"}, lat:26.533424, lon:53.973846 },\n    { id: 31, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0647\u0631\u0645\u0632\u06af\u0627\u0646\",en:\"Hormozgan\",ar:\"\u0647\u0631\u0645\u0632\u06af\u0627\u0646\"}, city:{fa:\"\u0645\u064a\u0646\u0627\u0628\",en:\"Minab\",ar:\"\u0645\u064a\u0646\u0627\u0628\"}, lat:27.097588, lon:57.07415 },\n    { id: 32, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0647\u0631\u0645\u0632\u06af\u0627\u0646\",en:\"Hormozgan\",ar:\"\u0647\u0631\u0645\u0632\u06af\u0627\u0646\"}, city:{fa:\"\u0647\u0634\u062a\u0628\u0646\u062f\u064a\",en:\"Hashtbandi\",ar:\"\u0647\u0634\u062a\u0628\u0646\u062f\u064a\"}, lat:27.164568, lon:57.451237 },\n    { id: 33, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u064a\u0632\u062f\",en:\"Yazd Province\",ar:\"\u064a\u0632\u062f\"}, city:{fa:\"\u064a\u0632\u062f\",en:\"Yazd\",ar:\"\u064a\u0632\u062f\"}, lat:31.883522, lon:54.34774 },\n    { id: 34, country:{fa:\"\u0627\u06cc\u0631\u0627\u0646\",en:\"Iran\",ar:\"\u0625\u064a\u0631\u0627\u0646\"}, province:{fa:\"\u0645\u0631\u06a9\u0632\u06cc\",en:\"Markazi\",ar:\"\u0645\u0631\u0643\u0632\u064a\"}, city:{fa:\"\u0627\u0631\u0627\u06a9\",en:\"Arak\",ar:\"\u0623\u0631\u0627\u0643\"}, lat:34.0917, lon:49.6892 },   \/\/ <-- \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647\n\n    { id: 100, country:{fa:\"\u0627\u0645\u0627\u0631\u0627\u062a \u0645\u062a\u062d\u062f\u0647 \u0639\u0631\u0628\u06cc\",en:\"United Arab Emirates\",ar:\"\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629\"}, province:\"\", city:{fa:\"\u062f\u0628\u06cc\",en:\"Dubai\",ar:\"\u062f\u0628\u064a\"}, lat:25.2048, lon:55.2708 },\n    { id: 101, country:{fa:\"\u0642\u0637\u0631\",en:\"Qatar\",ar:\"\u0642\u0637\u0631\"}, province:\"\", city:{fa:\"\u062f\u0648\u062d\u0647\",en:\"Doha\",ar:\"\u0627\u0644\u062f\u0648\u062d\u0629\"}, lat:25.2854, lon:51.5310 },\n    { id: 102, country:{fa:\"\u0639\u0645\u0627\u0646\",en:\"Oman\",ar:\"\u0639\u064f\u0645\u0627\u0646\"}, province:\"\", city:{fa:\"\u0645\u0633\u0642\u0637\",en:\"Muscat\",ar:\"\u0645\u0633\u0642\u0637\"}, lat:23.5880, lon:58.3829 },\n    { id: 103, country:{fa:\"\u062a\u0631\u06a9\u0645\u0646\u0633\u062a\u0627\u0646\",en:\"Turkmenistan\",ar:\"\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646\"}, province:\"\", city:{fa:\"\u0639\u0634\u0642\u200c\u0622\u0628\u0627\u062f\",en:\"Ashgabat\",ar:\"\u0639\u0634\u0642 \u0622\u0628\u0627\u062f\"}, lat:37.9601, lon:58.3261 },\n    { id: 104, country:{fa:\"\u0642\u0632\u0627\u0642\u0633\u062a\u0627\u0646\",en:\"Kazakhstan\",ar:\"\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646\"}, province:\"\", city:{fa:\"\u0622\u0633\u062a\u0627\u0646\u0647\",en:\"Astana\",ar:\"\u0623\u0633\u062a\u0627\u0646\u0627\"}, lat:51.1605, lon:71.4704 },\n    { id: 105, country:{fa:\"\u0631\u0648\u0633\u06cc\u0647\",en:\"Russia\",ar:\"\u0631\u0648\u0633\u064a\u0627\"}, province:\"\", city:{fa:\"\u0645\u0633\u06a9\u0648\",en:\"Moscow\",ar:\"\u0645\u0648\u0633\u0643\u0648\"}, lat:55.7558, lon:37.6173 }\n  ];\n\n  function initDallasLocations() {\n    const root = document.querySelector(\".dallas-locations-wrapper\");\n    if (!root) return;\n\n    const pageLang = getPageLang();\n    const ui = getUIText(pageLang);\n\n    const countrySelect  = root.querySelector(\"#dallas-country-filter\");\n    const provinceSelect = root.querySelector(\"#dallas-province-filter\");\n    const citySelect     = root.querySelector(\"#dallas-city-filter\");\n    const markersLayer   = root.querySelector(\"#dallas-markers-layer\");\n    const tableBody      = root.querySelector(\"#dallas-branches-table-body\");\n    const zoomContainer  = root.querySelector(\"#dallas-map-zoom-container\");\n    const zoomInBtn      = root.querySelector(\"#dallas-zoom-in\");\n    const zoomOutBtn     = root.querySelector(\"#dallas-zoom-out\");\n    const zoomResetBtn   = root.querySelector(\"#dallas-zoom-reset\");\n    const zoomLabel      = root.querySelector(\"#dallas-zoom-label\");\n    const mapImage       = root.querySelector(\"#dallas-map-image\");\n    const mapInner       = root.querySelector(\".dallas-map-inner\");\n\n    if (!countrySelect || !provinceSelect || !citySelect || !markersLayer || !tableBody || !zoomContainer) return;\n\n    \/\/ \u2705 \u062a\u0631\u062c\u0645\u0647\u200c\u06cc \u0644\u06cc\u0628\u0644\u200c\u0647\u0627 \u0648 \u062a\u06cc\u062a\u0631\u0647\u0627 \u062f\u0627\u062e\u0644 \u062e\u0648\u062f \u0635\u0641\u062d\u0647 (\u0628\u062f\u0648\u0646 WPML)\n    (function applyUILanguage() {\n      const countryLabelEl  = root.querySelector('label[for=\"dallas-country-filter\"]');\n      const provinceLabelEl = root.querySelector('label[for=\"dallas-province-filter\"]');\n      const cityLabelEl     = root.querySelector('label[for=\"dallas-city-filter\"]');\n\n      if (countryLabelEl)  countryLabelEl.textContent  = ui.countryLabel;\n      if (provinceLabelEl) provinceLabelEl.textContent = ui.provinceLabel;\n      if (cityLabelEl)     cityLabelEl.textContent     = ui.cityLabel;\n\n      const ths = root.querySelectorAll(\"#dallas-branches-table thead th\");\n      if (ths && ths.length >= 4) {\n        ths[0].textContent = ui.thIndex;\n        ths[1].textContent = ui.thCountry;\n        ths[2].textContent = ui.thProvince;\n        ths[3].textContent = ui.thCity;\n      }\n    })();\n\n    const branchesById = {};\n    DALLAS_BRANCHES.forEach((b) => { branchesById[String(b.id)] = b; });\n\n    const DEFAULT_ZOOM = 6;\n    const MIN_ZOOM     = 0.7;\n    const MAX_ZOOM     = 50;\n    const ZOOM_STEP    = 2;\n\n    let currentZoom  = DEFAULT_ZOOM;\n    let translateX   = 0;\n    let translateY   = 0;\n\n    let isPanning       = false;\n    let startX          = 0;\n    let startY          = 0;\n    let startTranslateX = 0;\n    let startTranslateY = 0;\n\n    let isPinching = false;\n    let pinchStartDist = 0;\n    let pinchStartZoom = 1;\n    let pinchMapPoint = null;\n    let pinchStartTranslateX = 0;\n    let pinchStartTranslateY = 0;\n\n    function clamp(v, min, max) { return Math.max(min, Math.min(max, v)); }\n\n    function touchDistance(t1, t2) {\n      const dx = t2.clientX - t1.clientX;\n      const dy = t2.clientY - t1.clientY;\n      return Math.hypot(dx, dy);\n    }\n\n    function touchCenterInViewport(t1, t2) {\n      const rect = (mapInner || zoomContainer).getBoundingClientRect();\n      return {\n        x: (t1.clientX + t2.clientX) \/ 2 - rect.left,\n        y: (t1.clientY + t2.clientY) \/ 2 - rect.top\n      };\n    }\n\n    function updateMarkersScale() {\n      const markers = markersLayer.querySelectorAll(\".dallas-marker\");\n      const inverseScale = 1 \/ currentZoom;\n\n      markers.forEach(function (marker) {\n        marker.style.transformOrigin = \"50% 100%\";\n        marker.style.transform = \"translate(-50%, -100%) scale(\" + inverseScale + \")\";\n      });\n    }\n\n    function updateMarkersPositions() {\n      const baseW = mapImage ? mapImage.offsetWidth : zoomContainer.offsetWidth;\n      const baseH = mapImage ? mapImage.offsetHeight : zoomContainer.offsetHeight;\n      if (!baseW || !baseH) return;\n\n      const markers = markersLayer.querySelectorAll(\".dallas-marker\");\n      markers.forEach((marker) => {\n        const id = marker.dataset.branchId;\n        const branch = branchesById[id];\n        if (!branch) return;\n\n        const pos = projectToPercent(branch.lat, branch.lon);\n        marker.style.left = ((pos.xPercent \/ 100) * baseW) + \"px\";\n        marker.style.top  = ((pos.yPercent \/ 100) * baseH) + \"px\";\n      });\n    }\n\n    function applyTransform() {\n      zoomContainer.style.transform =\n        \"translate(\" + translateX + \"px,\" + translateY + \"px) scale(\" + currentZoom + \")\";\n      updateMarkersScale();\n      if (zoomLabel) zoomLabel.textContent = Math.round(currentZoom * 100) + \"%\";\n    }\n\n    \/\/ \u0633\u0646\u062a\u0631 \u06a9\u0631\u062f\u0646 \u0648\u06cc\u0648 \u0631\u0648\u06cc \u06cc\u06a9 lat\/lon (\u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0641\u06cc\u0644\u062a\u0631\u0647\u0627)\n    function centerOnLatLon(lat, lon, zoomLevel) {\n      const baseW = mapImage ? mapImage.offsetWidth : zoomContainer.offsetWidth;\n      const baseH = mapImage ? mapImage.offsetHeight : zoomContainer.offsetHeight;\n      if (!baseW || !baseH) return;\n\n      currentZoom = zoomLevel;\n\n      const pos = projectToPercent(lat, lon);\n      const x = (pos.xPercent \/ 100) * baseW;\n      const y = (pos.yPercent \/ 100) * baseH;\n\n      const ox = baseW \/ 2;\n      const oy = baseH \/ 2;\n\n      translateX = (ox - x) * currentZoom;\n      translateY = (oy - y) * currentZoom;\n\n      applyTransform();\n    }\n\n    function uniqueSorted(list) {\n      return Array.from(new Set(list.filter(Boolean)))\n        .sort((a, b) => String(a).localeCompare(String(b), pageLang));\n    }\n\n    function populateCountryOptions() {\n      const countries = uniqueSorted(DALLAS_BRANCHES.map((b) => tName(b.country, pageLang)));\n      countrySelect.innerHTML = '<option value=\"\">' + ui.allCountries + '<\/option>';\n      countries.forEach((country) => {\n        const opt = document.createElement(\"option\");\n        opt.value = country;\n        opt.textContent = country;\n        countrySelect.appendChild(opt);\n      });\n    }\n\n    function populateProvinceOptions(selectedCountry) {\n      provinceSelect.innerHTML = '<option value=\"\">' + ui.allProvinces + '<\/option>';\n\n      let subset = DALLAS_BRANCHES;\n      if (selectedCountry) subset = subset.filter((b) => tName(b.country, pageLang) === selectedCountry);\n\n      const provinces = uniqueSorted(\n        subset.map((b) => tName(b.province, pageLang)).filter((p) => p && p.trim() !== \"\")\n      );\n\n      provinces.forEach((province) => {\n        const opt = document.createElement(\"option\");\n        opt.value = province;\n        opt.textContent = province;\n        provinceSelect.appendChild(opt);\n      });\n    }\n\n    function populateCityOptions(selectedCountry, selectedProvince) {\n      citySelect.innerHTML = '<option value=\"\">' + ui.allCities + '<\/option>';\n\n      let subset = DALLAS_BRANCHES;\n      if (selectedCountry) subset = subset.filter((b) => tName(b.country, pageLang) === selectedCountry);\n      if (selectedProvince) subset = subset.filter((b) => tName(b.province, pageLang) === selectedProvince);\n\n      const cities = uniqueSorted(subset.map((b) => tName(b.city, pageLang)));\n\n      cities.forEach((city) => {\n        const opt = document.createElement(\"option\");\n        opt.value = city;\n        opt.textContent = city;\n        citySelect.appendChild(opt);\n      });\n    }\n\n    function clearActive() {\n      root.querySelectorAll(\".dallas-marker-active, .dallas-row-active\")\n        .forEach((el) => el.classList.remove(\"dallas-marker-active\", \"dallas-row-active\"));\n    }\n\n    function focusBranch(branchId) {\n      clearActive();\n\n      const marker = root.querySelector('.dallas-marker[data-branch-id=\"' + branchId + '\"]');\n      const row    = root.querySelector('.dallas-row[data-branch-id=\"' + branchId + '\"]');\n\n      if (marker) marker.classList.add(\"dallas-marker-active\");\n      if (row) {\n        row.classList.add(\"dallas-row-active\");\n        row.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n      }\n    }\n\n    function getCurrentFilters() {\n      return { country: countrySelect.value, province: provinceSelect.value, city: citySelect.value };\n    }\n\n    function renderBranches() {\n      const filter = getCurrentFilters();\n      markersLayer.innerHTML = \"\";\n      tableBody.innerHTML = \"\";\n\n      const filtered = DALLAS_BRANCHES.filter((b) =>\n        (filter.country ? tName(b.country, pageLang) === filter.country : true) &&\n        (filter.province ? tName(b.province, pageLang) === filter.province : true) &&\n        (filter.city ? tName(b.city, pageLang) === filter.city : true)\n      );\n\n      filtered.forEach((branch, index) => {\n        const cityName = tName(branch.city, pageLang);\n        const provinceName = tName(branch.province, pageLang);\n        const countryName = tName(branch.country, pageLang);\n\n        const marker = document.createElement(\"button\");\n        marker.type = \"button\";\n        marker.className = \"dallas-marker\";\n        marker.dataset.branchId = branch.id;\n        marker.title = cityName + (provinceName ? \" - \" + provinceName : \"\") + \" - \" + countryName;\n\n        marker.innerHTML =\n          '<span class=\"dallas-marker-icon\"><\/span>' +\n          '<span class=\"dallas-marker-label\">' + cityName + \"<\/span>\";\n\n        marker.addEventListener(\"click\", function () { focusBranch(branch.id); });\n        markersLayer.appendChild(marker);\n\n        const tr = document.createElement(\"tr\");\n        tr.className = \"dallas-row\";\n        tr.dataset.branchId = branch.id;\n\n        tr.innerHTML =\n          \"<td>\" + (index + 1) + \"<\/td>\" +\n          \"<td>\" + countryName + \"<\/td>\" +\n          \"<td>\" + (provinceName || \"\u2014\") + \"<\/td>\" +\n          \"<td>\" + cityName + \"<\/td>\";\n\n        tr.addEventListener(\"click\", function () { focusBranch(branch.id); });\n        tableBody.appendChild(tr);\n      });\n\n      updateMarkersPositions();\n      updateMarkersScale();\n    }\n\n    \/\/ \u0632\u0648\u0645 \u06a9\u0646\u062a\u0631\u0644\u200c\u0647\u0627\n    if (zoomInBtn) zoomInBtn.addEventListener(\"click\", function () {\n      currentZoom = Math.min(MAX_ZOOM, currentZoom + ZOOM_STEP);\n      applyTransform();\n    });\n\n    if (zoomOutBtn) zoomOutBtn.addEventListener(\"click\", function () {\n      currentZoom = Math.max(MIN_ZOOM, currentZoom - ZOOM_STEP);\n      applyTransform();\n    });\n\n    if (zoomResetBtn) zoomResetBtn.addEventListener(\"click\", function () {\n      currentZoom = DEFAULT_ZOOM;\n      translateX = 0;\n      translateY = 0;\n      applyTransform();\n    });\n\n    \/\/ \u062f\u0631\u06af \u0645\u0627\u0648\u0633\n    zoomContainer.addEventListener(\"mousedown\", function (e) {\n      e.preventDefault();\n      isPanning = true;\n      startX = e.clientX;\n      startY = e.clientY;\n      startTranslateX = translateX;\n      startTranslateY = translateY;\n      zoomContainer.classList.add(\"dallas-panning\");\n    });\n\n    window.addEventListener(\"mousemove\", function (e) {\n      if (!isPanning) return;\n      const dx = e.clientX - startX;\n      const dy = e.clientY - startY;\n      translateX = startTranslateX + dx;\n      translateY = startTranslateY + dy;\n      applyTransform();\n    });\n\n    window.addEventListener(\"mouseup\", function () {\n      if (!isPanning) return;\n      isPanning = false;\n      zoomContainer.classList.remove(\"dallas-panning\");\n    });\n\n    \/\/ \u062a\u0627\u0686: \u067e\u0646 + \u067e\u06cc\u0646\u0686\n    zoomContainer.addEventListener(\"touchstart\", function (e) {\n      if (!mapImage) return;\n\n      if (e.touches.length === 2) {\n        e.preventDefault();\n\n        isPinching = true;\n        isPanning = false;\n        zoomContainer.classList.add(\"dallas-panning\");\n\n        const t1 = e.touches[0];\n        const t2 = e.touches[1];\n\n        pinchStartDist = touchDistance(t1, t2);\n        pinchStartZoom = currentZoom;\n        pinchStartTranslateX = translateX;\n        pinchStartTranslateY = translateY;\n\n        const c = touchCenterInViewport(t1, t2);\n\n        const baseW = mapImage.offsetWidth;\n        const baseH = mapImage.offsetHeight;\n        const ox = baseW \/ 2;\n        const oy = baseH \/ 2;\n\n        pinchMapPoint = {\n          x: ox + (c.x - ox - pinchStartTranslateX) \/ pinchStartZoom,\n          y: oy + (c.y - oy - pinchStartTranslateY) \/ pinchStartZoom\n        };\n\n        return;\n      }\n\n      if (e.touches.length === 1) {\n        const touch = e.touches[0];\n        isPanning = true;\n        isPinching = false;\n        startX = touch.clientX;\n        startY = touch.clientY;\n        startTranslateX = translateX;\n        startTranslateY = translateY;\n        zoomContainer.classList.add(\"dallas-panning\");\n      }\n    }, { passive: false });\n\n    zoomContainer.addEventListener(\"touchmove\", function (e) {\n      if (!mapImage) return;\n\n      if (isPinching && e.touches.length === 2) {\n        e.preventDefault();\n\n        const t1 = e.touches[0];\n        const t2 = e.touches[1];\n\n        const distNow = touchDistance(t1, t2);\n        const scaleFactor = distNow \/ pinchStartDist;\n\n        currentZoom = clamp(pinchStartZoom * scaleFactor, MIN_ZOOM, MAX_ZOOM);\n\n        const c = touchCenterInViewport(t1, t2);\n\n        const baseW = mapImage.offsetWidth;\n        const baseH = mapImage.offsetHeight;\n        const ox = baseW \/ 2;\n        const oy = baseH \/ 2;\n\n        translateX = c.x - ox - currentZoom * (pinchMapPoint.x - ox);\n        translateY = c.y - oy - currentZoom * (pinchMapPoint.y - oy);\n\n        applyTransform();\n        return;\n      }\n\n      if (isPanning && e.touches.length === 1) {\n        e.preventDefault();\n\n        const touch = e.touches[0];\n        const dx = touch.clientX - startX;\n        const dy = touch.clientY - startY;\n\n        translateX = startTranslateX + dx;\n        translateY = startTranslateY + dy;\n\n        applyTransform();\n      }\n    }, { passive: false });\n\n    zoomContainer.addEventListener(\"touchend\", function (e) {\n      if (isPinching && e.touches.length < 2) {\n        isPinching = false;\n        zoomContainer.classList.remove(\"dallas-panning\");\n\n        if (e.touches.length === 1) {\n          const touch = e.touches[0];\n          isPanning = true;\n          startX = touch.clientX;\n          startY = touch.clientY;\n          startTranslateX = translateX;\n          startTranslateY = translateY;\n          zoomContainer.classList.add(\"dallas-panning\");\n        }\n      }\n\n      if (isPanning && e.touches.length === 0) {\n        isPanning = false;\n        zoomContainer.classList.remove(\"dallas-panning\");\n      }\n    }, { passive: false });\n\n    zoomContainer.addEventListener(\"touchcancel\", function () {\n      isPinching = false;\n      isPanning = false;\n      zoomContainer.classList.remove(\"dallas-panning\");\n    }, { passive: false });\n\n    \/\/ \u0641\u06cc\u0644\u062a\u0631\u0647\u0627\n    countrySelect.addEventListener(\"change\", function () {\n      const country = countrySelect.value;\n      populateProvinceOptions(country);\n      provinceSelect.value = \"\";\n      populateCityOptions(country, \"\");\n      citySelect.value = \"\";\n      renderBranches();\n    });\n\n    provinceSelect.addEventListener(\"change\", function () {\n      const country = countrySelect.value;\n      const province = provinceSelect.value;\n      populateCityOptions(country, province);\n      citySelect.value = \"\";\n      renderBranches();\n    });\n\n    citySelect.addEventListener(\"change\", function () {\n      renderBranches();\n    });\n\n    window.addEventListener(\"resize\", function () {\n      updateMarkersPositions();\n      updateMarkersScale();\n    });\n\n    \/\/ \u2705 \u0633\u0646\u062a\u0631 \u0627\u0648\u0644\u06cc\u0647 \u0627\u06cc\u0631\u0627\u0646 (\u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0641\u06cc\u0644\u062a\u0631\u0647\u0627)\n    if (mapImage) {\n      const iranLat = 32.0;\n      const iranLon = 53.0;\n\n      const onReady = () => {\n        requestAnimationFrame(() => {\n          requestAnimationFrame(() => {\n            updateMarkersPositions();\n            updateMarkersScale();\n\n            const zoom = window.innerWidth <= 600 ? 4 : 6;\n            centerOnLatLon(iranLat, iranLon, zoom);\n          });\n        });\n      };\n\n      if (mapImage.complete) onReady();\n      else mapImage.addEventListener(\"load\", onReady);\n    }\n\n    \/\/ init\n    populateCountryOptions();\n    populateProvinceOptions(\"\");\n    populateCityOptions(\"\", \"\");\n    renderBranches();\n    applyTransform();\n  }\n\n  \/\/ --- Projection ---\n  function projectToPercent(lat, lon) {\n    const clamp = (v, min, max) => Math.max(min, Math.min(max, v));\n    const deg2rad = Math.PI \/ 180;\n\n    const xRatio = (lon - MAP_BOUNDS.minLon) \/ (MAP_BOUNDS.maxLon - MAP_BOUNDS.minLon);\n\n    const latClamped = clamp(lat, MAP_BOUNDS.minLat, MAP_BOUNDS.maxLat);\n\n    const phi      = latClamped * deg2rad;\n    const phiMin   = MAP_BOUNDS.minLat * deg2rad;\n    const phiMax   = MAP_BOUNDS.maxLat * deg2rad;\n\n    const mercY    = Math.log(Math.tan(Math.PI \/ 4 + phi    \/ 2));\n    const mercYMin = Math.log(Math.tan(Math.PI \/ 4 + phiMin \/ 2));\n    const mercYMax = Math.log(Math.tan(Math.PI \/ 4 + phiMax \/ 2));\n\n    const yRatio = (mercYMax - mercY) \/ (mercYMax - mercYMin);\n\n    return { xPercent: xRatio * 100, yPercent: yRatio * 100 };\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initDallasLocations);\n  } else {\n    initDallasLocations();\n  }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dd74e03 e-flex e-con-boxed e-con e-parent\" data-id=\"dd74e03\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-92d8fe6 elementor-widget elementor-widget-spacer\" data-id=\"92d8fe6\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\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>Dealerships and sales centers \u06a9\u0634\u0648\u0631: \u0647\u0645\u0647 \u06a9\u0634\u0648\u0631\u0647\u0627 \u0627\u0633\u062a\u0627\u0646: \u0647\u0645\u0647 \u0627\u0633\u062a\u0627\u0646\u200c\u0647\u0627 \u0634\u0647\u0631: \u0647\u0645\u0647 \u0634\u0647\u0631\u0647\u0627 + \u2212 \u21ba 130% # \u06a9\u0634\u0648\u0631 \u0627\u0633\u062a\u0627\u0646 \u0634\u0647\u0631 \/ \u0645\u0646\u0637\u0642\u0647<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3476","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/dallasdrink.com\/en\/wp-json\/wp\/v2\/pages\/3476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dallasdrink.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dallasdrink.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dallasdrink.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dallasdrink.com\/en\/wp-json\/wp\/v2\/comments?post=3476"}],"version-history":[{"count":5,"href":"https:\/\/dallasdrink.com\/en\/wp-json\/wp\/v2\/pages\/3476\/revisions"}],"predecessor-version":[{"id":4755,"href":"https:\/\/dallasdrink.com\/en\/wp-json\/wp\/v2\/pages\/3476\/revisions\/4755"}],"wp:attachment":[{"href":"https:\/\/dallasdrink.com\/en\/wp-json\/wp\/v2\/media?parent=3476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}