var countryList = [{
  code: 'AF',
  name: 'Afghanistan'
}, {
  code: 'AX',
  name: "\xC5land Islands"
}, {
  code: 'AL',
  name: 'Albania',
  currency: 'EUR'
}, {
  code: 'DZ',
  name: 'Algeria'
}, {
  code: 'AS',
  name: 'American Samoa'
}, {
  code: 'AD',
  name: 'Andorra',
  currency: 'EUR'
}, {
  code: 'AO',
  name: 'Angola'
}, {
  code: 'AI',
  name: 'Anguilla'
}, {
  code: 'AQ',
  name: 'Antarctica'
}, {
  code: 'AG',
  name: 'Antigua and Barbuda'
}, {
  code: 'AR',
  name: 'Argentina'
}, {
  code: 'AM',
  name: 'Armenia'
}, {
  code: 'AW',
  name: 'Aruba'
}, {
  code: 'AU',
  name: 'Australia',
  currency: 'AUD'
}, {
  code: 'AT',
  name: 'Austria',
  currency: 'EUR'
}, {
  code: 'AZ',
  name: 'Azerbaijan'
}, {
  code: 'BS',
  name: 'Bahamas'
}, {
  code: 'BH',
  name: 'Bahrain'
}, {
  code: 'BD',
  name: 'Bangladesh'
}, {
  code: 'BB',
  name: 'Barbados'
}, {
  code: 'BY',
  name: 'Belarus'
}, {
  code: 'BE',
  name: 'Belgium',
  currency: 'EUR'
}, {
  code: 'BZ',
  name: 'Belize'
}, {
  code: 'BJ',
  name: 'Benin'
}, {
  code: 'BM',
  name: 'Bermuda'
}, {
  code: 'BT',
  name: 'Bhutan'
}, {
  code: 'BO',
  name: 'Bolivia, Plurinational State of'
}, {
  code: 'BQ',
  name: 'Bonaire, Sint Eustatius and Saba'
}, {
  code: 'BA',
  name: 'Bosnia and Herzegovina',
  currency: 'EUR'
}, {
  code: 'BW',
  name: 'Botswana'
}, {
  code: 'BV',
  name: 'Bouvet Island'
}, {
  code: 'BR',
  name: 'Brazil'
}, {
  code: 'IO',
  name: 'British Indian Ocean Territory'
}, {
  code: 'BN',
  name: 'Brunei Darussalam'
}, {
  code: 'BG',
  name: 'Bulgaria',
  currency: 'EUR'
}, {
  code: 'BF',
  name: 'Burkina Faso'
}, {
  code: 'BI',
  name: 'Burundi'
}, {
  code: 'KH',
  name: 'Cambodia'
}, {
  code: 'CM',
  name: 'Cameroon'
}, {
  code: 'CA',
  name: 'Canada',
  currency: 'CAD'
}, {
  code: 'CV',
  name: 'Cape Verde'
}, {
  code: 'KY',
  name: 'Cayman Islands'
}, {
  code: 'CF',
  name: 'Central African Republic'
}, {
  code: 'TD',
  name: 'Chad'
}, {
  code: 'CL',
  name: 'Chile'
}, {
  code: 'CN',
  name: 'China'
}, {
  code: 'CX',
  name: 'Christmas Island'
}, {
  code: 'CC',
  name: 'Cocos (Keeling) Islands'
}, {
  code: 'CO',
  name: 'Colombia'
}, {
  code: 'KM',
  name: 'Comoros'
}, {
  code: 'CG',
  name: 'Congo'
}, {
  code: 'CD',
  name: 'Congo, the Democratic Republic of the'
}, {
  code: 'CK',
  name: 'Cook Islands'
}, {
  code: 'CR',
  name: 'Costa Rica'
}, {
  code: 'CI',
  name: "C\xF4te d'Ivoire"
}, {
  code: 'HR',
  name: 'Croatia',
  currency: 'EUR'
}, {
  code: 'CU',
  name: 'Cuba'
}, {
  code: 'CW',
  name: "Cura\xE7ao"
}, {
  code: 'CY',
  name: 'Cyprus',
  currency: 'EUR'
}, {
  code: 'CZ',
  name: 'Czech Republic',
  currency: 'EUR'
}, {
  code: 'DK',
  name: 'Denmark',
  currency: 'EUR'
}, {
  code: 'DJ',
  name: 'Djibouti'
}, {
  code: 'DM',
  name: 'Dominica'
}, {
  code: 'DO',
  name: 'Dominican Republic'
}, {
  code: 'EC',
  name: 'Ecuador'
}, {
  code: 'EG',
  name: 'Egypt'
}, {
  code: 'SV',
  name: 'El Salvador'
}, {
  code: 'GQ',
  name: 'Equatorial Guinea'
}, {
  code: 'ER',
  name: 'Eritrea'
}, {
  code: 'EE',
  name: 'Estonia',
  currency: 'EUR'
}, {
  code: 'ET',
  name: 'Ethiopia'
}, {
  code: 'FK',
  name: 'Falkland Islands (Malvinas)'
}, {
  code: 'FO',
  name: 'Faroe Islands'
}, {
  code: 'FJ',
  name: 'Fiji'
}, {
  code: 'FI',
  name: 'Finland',
  currency: 'EUR'
}, {
  code: 'FR',
  name: 'France',
  currency: 'EUR'
}, {
  code: 'GF',
  name: 'French Guiana'
}, {
  code: 'PF',
  name: 'French Polynesia'
}, {
  code: 'TF',
  name: 'French Southern Territories'
}, {
  code: 'GA',
  name: 'Gabon'
}, {
  code: 'GM',
  name: 'Gambia'
}, {
  code: 'GE',
  name: 'Georgia'
}, {
  code: 'DE',
  name: 'Germany',
  currency: 'EUR'
}, {
  code: 'GH',
  name: 'Ghana'
}, {
  code: 'GI',
  name: 'Gibraltar'
}, {
  code: 'GR',
  name: 'Greece',
  currency: 'EUR'
}, {
  code: 'GL',
  name: 'Greenland'
}, {
  code: 'GD',
  name: 'Grenada'
}, {
  code: 'GP',
  name: 'Guadeloupe'
}, {
  code: 'GU',
  name: 'Guam'
}, {
  code: 'GT',
  name: 'Guatemala'
}, {
  code: 'GG',
  name: 'Guernsey'
}, {
  code: 'GN',
  name: 'Guinea'
}, {
  code: 'GW',
  name: 'Guinea-Bissau'
}, {
  code: 'GY',
  name: 'Guyana'
}, {
  code: 'HT',
  name: 'Haiti'
}, {
  code: 'HM',
  name: 'Heard Island and McDonald Islands'
}, {
  code: 'VA',
  name: 'Holy See (Vatican City State)',
  currency: 'EUR'
}, {
  code: 'HN',
  name: 'Honduras'
}, {
  code: 'HK',
  name: 'Hong Kong'
}, {
  code: 'HU',
  name: 'Hungary',
  currency: 'EUR'
}, {
  code: 'IS',
  name: 'Iceland',
  currency: 'EUR'
}, {
  code: 'IN',
  name: 'India'
}, {
  code: 'ID',
  name: 'Indonesia'
}, {
  code: 'IR',
  name: 'Iran, Islamic Republic of'
}, {
  code: 'IQ',
  name: 'Iraq'
}, {
  code: 'IE',
  name: 'Ireland',
  currency: 'EUR'
}, {
  code: 'IM',
  name: 'Isle of Man'
}, {
  code: 'IL',
  name: 'Israel'
}, {
  code: 'IT',
  name: 'Italy',
  currency: 'EUR'
}, {
  code: 'JM',
  name: 'Jamaica'
}, {
  code: 'JP',
  name: 'Japan'
}, {
  code: 'JE',
  name: 'Jersey'
}, {
  code: 'JO',
  name: 'Jordan'
}, {
  code: 'KZ',
  name: 'Kazakhstan'
}, {
  code: 'KE',
  name: 'Kenya'
}, {
  code: 'KI',
  name: 'Kiribati'
}, {
  code: 'KP',
  name: "Korea, Democratic People's Republic of"
}, {
  code: 'KR',
  name: 'Korea, Republic of'
}, {
  code: 'KW',
  name: 'Kuwait'
}, {
  code: 'KG',
  name: 'Kyrgyzstan'
}, {
  code: 'LA',
  name: "Lao People's Democratic Republic"
}, {
  code: 'LV',
  name: 'Latvia',
  currency: 'EUR'
}, {
  code: 'LB',
  name: 'Lebanon'
}, {
  code: 'LS',
  name: 'Lesotho'
}, {
  code: 'LR',
  name: 'Liberia'
}, {
  code: 'LY',
  name: 'Libya'
}, {
  code: 'LI',
  name: 'Liechtenstein',
  currency: 'EUR'
}, {
  code: 'LT',
  name: 'Lithuania',
  currency: 'EUR'
}, {
  code: 'LU',
  name: 'Luxembourg',
  currency: 'EUR'
}, {
  code: 'MO',
  name: 'Macao'
}, {
  code: 'MK',
  name: 'Macedonia, the Former Yugoslav Republic of',
  currency: 'EUR'
}, {
  code: 'MG',
  name: 'Madagascar'
}, {
  code: 'MW',
  name: 'Malawi'
}, {
  code: 'MY',
  name: 'Malaysia'
}, {
  code: 'MV',
  name: 'Maldives'
}, {
  code: 'ML',
  name: 'Mali'
}, {
  code: 'MT',
  name: 'Malta',
  currency: 'EUR'
}, {
  code: 'MH',
  name: 'Marshall Islands'
}, {
  code: 'MQ',
  name: 'Martinique'
}, {
  code: 'MR',
  name: 'Mauritania'
}, {
  code: 'MU',
  name: 'Mauritius'
}, {
  code: 'YT',
  name: 'Mayotte'
}, {
  code: 'MX',
  name: 'Mexico'
}, {
  code: 'FM',
  name: 'Micronesia, Federated States of'
}, {
  code: 'MD',
  name: 'Moldova, Republic of',
  currency: 'EUR'
}, {
  code: 'MC',
  name: 'Monaco',
  currency: 'EUR'
}, {
  code: 'MN',
  name: 'Mongolia'
}, {
  code: 'ME',
  name: 'Montenegro',
  currency: 'EUR'
}, {
  code: 'MS',
  name: 'Montserrat'
}, {
  code: 'MA',
  name: 'Morocco'
}, {
  code: 'MZ',
  name: 'Mozambique'
}, {
  code: 'MM',
  name: 'Myanmar'
}, {
  code: 'NA',
  name: 'Namibia'
}, {
  code: 'NR',
  name: 'Nauru'
}, {
  code: 'NP',
  name: 'Nepal'
}, {
  code: 'NL',
  name: 'Netherlands',
  currency: 'EUR'
}, {
  code: 'NC',
  name: 'New Caledonia'
}, {
  code: 'NZ',
  name: 'New Zealand',
  currency: 'NZD'
}, {
  code: 'NI',
  name: 'Nicaragua'
}, {
  code: 'NE',
  name: 'Niger'
}, {
  code: 'NG',
  name: 'Nigeria'
}, {
  code: 'NU',
  name: 'Niue'
}, {
  code: 'NF',
  name: 'Norfolk Island'
}, {
  code: 'MP',
  name: 'Northern Mariana Islands'
}, {
  code: 'NO',
  name: 'Norway',
  currency: 'EUR'
}, {
  code: 'OM',
  name: 'Oman'
}, {
  code: 'PK',
  name: 'Pakistan'
}, {
  code: 'PW',
  name: 'Palau'
}, {
  code: 'PS',
  name: 'Palestine, State of'
}, {
  code: 'PA',
  name: 'Panama'
}, {
  code: 'PG',
  name: 'Papua New Guinea'
}, {
  code: 'PY',
  name: 'Paraguay'
}, {
  code: 'PE',
  name: 'Peru'
}, {
  code: 'PH',
  name: 'Philippines'
}, {
  code: 'PN',
  name: 'Pitcairn'
}, {
  code: 'PL',
  name: 'Poland',
  currency: 'EUR'
}, {
  code: 'PT',
  name: 'Portugal',
  currency: 'EUR'
}, {
  code: 'PR',
  name: 'Puerto Rico'
}, {
  code: 'QA',
  name: 'Qatar'
}, {
  code: 'RE',
  name: "R\xE9union"
}, {
  code: 'RO',
  name: 'Romania',
  currency: 'EUR'
}, {
  code: 'RU',
  name: 'Russian Federation'
}, {
  code: 'RW',
  name: 'Rwanda'
}, {
  code: 'BL',
  name: "Saint Barth\xE9lemy"
}, {
  code: 'SH',
  name: 'Saint Helena, Ascension and Tristan da Cunha'
}, {
  code: 'KN',
  name: 'Saint Kitts and Nevis'
}, {
  code: 'LC',
  name: 'Saint Lucia'
}, {
  code: 'MF',
  name: 'Saint Martin (French part)'
}, {
  code: 'PM',
  name: 'Saint Pierre and Miquelon'
}, {
  code: 'VC',
  name: 'Saint Vincent and the Grenadines'
}, {
  code: 'WS',
  name: 'Samoa'
}, {
  code: 'SM',
  name: 'San Marino',
  currency: 'EUR'
}, {
  code: 'ST',
  name: 'Sao Tome and Principe'
}, {
  code: 'SA',
  name: 'Saudi Arabia'
}, {
  code: 'SN',
  name: 'Senegal'
}, {
  code: 'RS',
  name: 'Serbia',
  currency: 'EUR'
}, {
  code: 'SC',
  name: 'Seychelles'
}, {
  code: 'SL',
  name: 'Sierra Leone'
}, {
  code: 'SG',
  name: 'Singapore'
}, {
  code: 'SX',
  name: 'Sint Maarten (Dutch part)'
}, {
  code: 'SK',
  name: 'Slovakia',
  currency: 'EUR'
}, {
  code: 'SI',
  name: 'Slovenia',
  currency: 'EUR'
}, {
  code: 'SB',
  name: 'Solomon Islands'
}, {
  code: 'SO',
  name: 'Somalia'
}, {
  code: 'ZA',
  name: 'South Africa',
  currency: 'ZAR'
}, {
  code: 'GS',
  name: 'South Georgia and the South Sandwich Islands'
}, {
  code: 'SS',
  name: 'South Sudan'
}, {
  code: 'ES',
  name: 'Spain',
  currency: 'EUR'
}, {
  code: 'LK',
  name: 'Sri Lanka'
}, {
  code: 'SD',
  name: 'Sudan'
}, {
  code: 'SR',
  name: 'Suriname'
}, {
  code: 'SJ',
  name: 'Svalbard and Jan Mayen'
}, {
  code: 'SZ',
  name: 'Swaziland'
}, {
  code: 'SE',
  name: 'Sweden',
  currency: 'EUR'
}, {
  code: 'CH',
  name: 'Switzerland',
  currency: 'EUR'
}, {
  code: 'SY',
  name: 'Syrian Arab Republic'
}, {
  code: 'TW',
  name: 'Taiwan, Province of China'
}, {
  code: 'TJ',
  name: 'Tajikistan'
}, {
  code: 'TZ',
  name: 'Tanzania, United Republic of'
}, {
  code: 'TH',
  name: 'Thailand'
}, {
  code: 'TL',
  name: 'Timor-Leste'
}, {
  code: 'TG',
  name: 'Togo'
}, {
  code: 'TK',
  name: 'Tokelau'
}, {
  code: 'TO',
  name: 'Tonga'
}, {
  code: 'TT',
  name: 'Trinidad and Tobago'
}, {
  code: 'TN',
  name: 'Tunisia'
}, {
  code: 'TR',
  name: 'Turkey'
}, {
  code: 'TM',
  name: 'Turkmenistan'
}, {
  code: 'TC',
  name: 'Turks and Caicos Islands'
}, {
  code: 'TV',
  name: 'Tuvalu'
}, {
  code: 'UG',
  name: 'Uganda'
}, {
  code: 'UA',
  name: 'Ukraine',
  currency: 'EUR'
}, {
  code: 'AE',
  name: 'United Arab Emirates'
}, {
  code: 'GB',
  name: 'United Kingdom',
  currency: 'GBP'
}, {
  code: 'US',
  name: 'United States',
  currency: 'USD'
}, {
  code: 'UM',
  name: 'United States Minor Outlying Islands'
}, {
  code: 'UY',
  name: 'Uruguay'
}, {
  code: 'UZ',
  name: 'Uzbekistan'
}, {
  code: 'VU',
  name: 'Vanuatu'
}, {
  code: 'VE',
  name: 'Venezuela, Bolivarian Republic of'
}, {
  code: 'VN',
  name: 'Viet Nam'
}, {
  code: 'VG',
  name: 'Virgin Islands, British'
}, {
  code: 'VI',
  name: 'Virgin Islands, U.S.'
}, {
  code: 'WF',
  name: 'Wallis and Futuna'
}, {
  code: 'EH',
  name: 'Western Sahara'
}, {
  code: 'YE',
  name: 'Yemen'
}, {
  code: 'ZM',
  name: 'Zambia'
}, {
  code: 'ZW',
  name: 'Zimbabwe'
}];

var priceDataList = {
  AUD: {
      "portfolio_plan_100": "$95",
      "portfolio_plan_300": "$245",
      "portfolio_plan_unlimited": "$495",
      "portfolio_disclaimer":"Prices in AUD, excluding GST"
  },
  USD: {
      "portfolio_plan_100": "$60",
      "portfolio_plan_300": "$170",
      "portfolio_plan_unlimited": "$360",
      "portfolio_disclaimer":"Prices in USD, excluding Sales Tax"
  },
  NZD: {
    "portfolio_plan_100": "$95",
    "portfolio_plan_300": "$245",
    "portfolio_plan_unlimited": "$495",
    "portfolio_disclaimer":"Prices in NZD, excluding GST"
},
  EUR: {
    "portfolio_plan_100": "€59",
    "portfolio_plan_300": "€149",
    "portfolio_plan_unlimited": "€299",
    "portfolio_disclaimer":"Prices in EUR, excluding any applicable taxes"
},
  GBP: {
      "portfolio_plan_100": "£45",
      "portfolio_plan_300": "£125",
      "portfolio_plan_unlimited": "£245",
      "portfolio_disclaimer":"Prices in GBP, excluding VAT"
  },
  CAD: {
    "portfolio_plan_100": "$95",
    "portfolio_plan_300": "$245",
    "portfolio_plan_unlimited": "$495",
    "portfolio_disclaimer":"Prices in CAD, excluding GST"
},
ZAR: {
    "portfolio_plan_100": "R1000*",
    "portfolio_plan_300": "R2500*",
    "portfolio_plan_unlimited": "R5000*",
    "portfolio_disclaimer":"Prices in ZAR, excluding VAT/GST"
},
};

// Helper function to get URL parameters
function getParameterByName(name) {
  const url = window.location.href;
  const paramName = name.replace(/[\[\]]/g, '\\$&');
  const regex = new RegExp('[?&]' + paramName + '(=([^&#]*)|&|#|$)');
  const results = regex.exec(url);
  if (!results) return null;
  if (!results[2]) return '';
  return decodeURIComponent(results[2].replace(/\+/g, ' '));
}

// Function to load the GeoIP2 script
function loadGeoIPScript(successCallback, errorCallback) {
  var script = document.createElement('script');
  script.src = 'https://js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js'; // Correct GeoIP script URL
  script.onload = successCallback;
  script.onerror = errorCallback;
  document.head.appendChild(script);
}

// Function to get the price data based on the currency
function getPriceData(currency) {
  return priceDataList[currency.toUpperCase()];
}

// Function to update the prices on the page
function updatePrices(currency) {
    var priceData = getPriceData(currency);
    
    if (priceData) {
        // Update all matching elements
        for (let priceId in priceData) {
            var priceElements = document.querySelectorAll(`#${priceId}`); // Select all elements with the same ID
            if (priceElements.length > 0) {
                priceElements.forEach(element => {
                    element.textContent = priceData[priceId];
                                   // Apply font weight 500 except for portfolio_disclaimer
                                   if (priceId !== "portfolio_disclaimer") {
                                    element.style.fontWeight = "500";
                                }
                            });
                        }
                    }
                } else {
                    console.warn('No price data found for currency: ' + currency);
                }
            }

// Function to handle GeoLocation and currency-based price updates
function getGeoLocation() {
  var countryParameter = getParameterByName('country'); // Check if 'country' is in the URL

  if (countryParameter) {
      // Use the currency from the URL
      var currency = countryList.find(country => country.code === countryParameter.toUpperCase())?.currency;

      if (currency) {
          updatePrices(currency); // Update prices based on the found currency
      } else {
          console.warn('Currency not found for country code: ' + countryParameter);
          updatePrices('USD'); // Default to USD if currency not found
      }
  } else {
      geoip2.country(function (geoipResponse) {
          var countryCode = geoipResponse.country.iso_code; // Get the country code from GeoIP response
          var currency = countryList.find(country => country.code === countryCode)?.currency; // Find currency by country code

          if (currency) {
              updatePrices(currency); // Update prices based on the found currency
          } else {
              console.warn('Currency not found for country code: ' + countryCode);
              updatePrices('USD'); // Default to USD if currency not found
          }
      }, function (error) {
          console.error('GeoIP error: ', error);
          console.warn('GeoIP lookup failed. Defaulting to USD.');
          updatePrices('USD'); // Fallback to default country if GeoIP fails
      });
  }
}

// Check if the current path matches /
if (window.location.pathname === '/portfolio') {
  // Call the GeoIP service on page load
  document.addEventListener('DOMContentLoaded', function () {
      console.log('DOM fully loaded and parsed.');
      loadGeoIPScript(
          function () {
              getGeoLocation(); // On success, retrieve geolocation and map to currency
          },
          function () {
              console.error('Failed to load GeoIP2 script');
              console.warn('GeoIP2 script failed. Stopping script execution.');
          }
      );
  });
}