{"version":3,"file":"js/application-2dd0324852f9f920633b.js","sources":["webpack://kigen//usr/home/fmweb/http/app/javascript/channels|sync|/_channel\\.js$/","webpack://kigen//usr/home/fmweb/http/app/javascript/controllers|sync|/_controller\\.js$/","webpack://kigen/./app/javascript/channels/index.js","webpack://kigen/./app/javascript/controllers/agent_baskets_controller.js","webpack://kigen/./app/javascript/controllers/agent_checkout_controller.js","webpack://kigen/./app/javascript/controllers/avatar_edit_controller.js","webpack://kigen/./app/javascript/controllers/bike_booking_controller.js","webpack://kigen/./app/javascript/controllers/booking_process_controller.js","webpack://kigen/./app/javascript/controllers/booking_tours_controller.js","webpack://kigen/./app/javascript/controllers/booking_week_controller.js","webpack://kigen/./app/javascript/controllers/confirmation_controller.js","webpack://kigen/./app/javascript/controllers/countries_controller.js","webpack://kigen/./app/javascript/controllers/dropzone_controller.js","webpack://kigen/./app/javascript/controllers/editor_html_controller.js","webpack://kigen/./app/javascript/controllers/faq_controller.js","webpack://kigen/./app/javascript/controllers/finder_field_controller.js","webpack://kigen/./app/javascript/controllers/groups_controller.js","webpack://kigen/./app/javascript/controllers/header_controller.js","webpack://kigen/./app/javascript/controllers/hello_controller.js","webpack://kigen/./app/javascript/controllers/home_controller.js","webpack://kigen/./app/javascript/controllers/home_filters_controller.js","webpack://kigen/./app/javascript/controllers/index.js","webpack://kigen/./app/javascript/controllers/islands_controller.js","webpack://kigen/./app/javascript/controllers/page_new_controller.js","webpack://kigen/./app/javascript/controllers/password_field_controller.js","webpack://kigen/./app/javascript/controllers/related_controller.js","webpack://kigen/./app/javascript/controllers/shops_controller.js","webpack://kigen/./app/javascript/controllers/tour_booking_controller.js","webpack://kigen/./app/javascript/controllers/vivawallet_controller.js","webpack://kigen/./app/javascript/helpers/data-confirm-tailwind-modal.js","webpack://kigen/./app/javascript/helpers/index.js","webpack://kigen/./app/javascript/packs/application.js","webpack://kigen/./app/javascript/stylesheets/actiontext.scss?efd2","webpack://kigen/./app/javascript/stylesheets/application.scss?0e3b","webpack://kigen/./app/javascript/stylesheets/dropzone.scss?e003","webpack://kigen/./app/javascript/stylesheets/freemotion.scss?5797"],"sourcesContent":["function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"./app/javascript/channels sync recursive _channel\\\\.js$\";\nmodule.exports = webpackEmptyContext;","var map = {\n\t\"./agent_baskets_controller.js\": \"./app/javascript/controllers/agent_baskets_controller.js\",\n\t\"./agent_checkout_controller.js\": \"./app/javascript/controllers/agent_checkout_controller.js\",\n\t\"./avatar_edit_controller.js\": \"./app/javascript/controllers/avatar_edit_controller.js\",\n\t\"./bike_booking_controller.js\": \"./app/javascript/controllers/bike_booking_controller.js\",\n\t\"./booking_process_controller.js\": \"./app/javascript/controllers/booking_process_controller.js\",\n\t\"./booking_tours_controller.js\": \"./app/javascript/controllers/booking_tours_controller.js\",\n\t\"./booking_week_controller.js\": \"./app/javascript/controllers/booking_week_controller.js\",\n\t\"./confirmation_controller.js\": \"./app/javascript/controllers/confirmation_controller.js\",\n\t\"./countries_controller.js\": \"./app/javascript/controllers/countries_controller.js\",\n\t\"./dropzone_controller.js\": \"./app/javascript/controllers/dropzone_controller.js\",\n\t\"./editor_html_controller.js\": \"./app/javascript/controllers/editor_html_controller.js\",\n\t\"./faq_controller.js\": \"./app/javascript/controllers/faq_controller.js\",\n\t\"./finder_field_controller.js\": \"./app/javascript/controllers/finder_field_controller.js\",\n\t\"./groups_controller.js\": \"./app/javascript/controllers/groups_controller.js\",\n\t\"./header_controller.js\": \"./app/javascript/controllers/header_controller.js\",\n\t\"./hello_controller.js\": \"./app/javascript/controllers/hello_controller.js\",\n\t\"./home_controller.js\": \"./app/javascript/controllers/home_controller.js\",\n\t\"./home_filters_controller.js\": \"./app/javascript/controllers/home_filters_controller.js\",\n\t\"./islands_controller.js\": \"./app/javascript/controllers/islands_controller.js\",\n\t\"./page_new_controller.js\": \"./app/javascript/controllers/page_new_controller.js\",\n\t\"./password_field_controller.js\": \"./app/javascript/controllers/password_field_controller.js\",\n\t\"./related_controller.js\": \"./app/javascript/controllers/related_controller.js\",\n\t\"./shops_controller.js\": \"./app/javascript/controllers/shops_controller.js\",\n\t\"./tour_booking_controller.js\": \"./app/javascript/controllers/tour_booking_controller.js\",\n\t\"./vivawallet_controller.js\": \"./app/javascript/controllers/vivawallet_controller.js\",\n\t\"controllers/agent_baskets_controller.js\": \"./app/javascript/controllers/agent_baskets_controller.js\",\n\t\"controllers/agent_checkout_controller.js\": \"./app/javascript/controllers/agent_checkout_controller.js\",\n\t\"controllers/avatar_edit_controller.js\": \"./app/javascript/controllers/avatar_edit_controller.js\",\n\t\"controllers/bike_booking_controller.js\": \"./app/javascript/controllers/bike_booking_controller.js\",\n\t\"controllers/booking_process_controller.js\": \"./app/javascript/controllers/booking_process_controller.js\",\n\t\"controllers/booking_tours_controller.js\": \"./app/javascript/controllers/booking_tours_controller.js\",\n\t\"controllers/booking_week_controller.js\": \"./app/javascript/controllers/booking_week_controller.js\",\n\t\"controllers/confirmation_controller.js\": \"./app/javascript/controllers/confirmation_controller.js\",\n\t\"controllers/countries_controller.js\": \"./app/javascript/controllers/countries_controller.js\",\n\t\"controllers/dropzone_controller.js\": \"./app/javascript/controllers/dropzone_controller.js\",\n\t\"controllers/editor_html_controller.js\": \"./app/javascript/controllers/editor_html_controller.js\",\n\t\"controllers/faq_controller.js\": \"./app/javascript/controllers/faq_controller.js\",\n\t\"controllers/finder_field_controller.js\": \"./app/javascript/controllers/finder_field_controller.js\",\n\t\"controllers/groups_controller.js\": \"./app/javascript/controllers/groups_controller.js\",\n\t\"controllers/header_controller.js\": \"./app/javascript/controllers/header_controller.js\",\n\t\"controllers/hello_controller.js\": \"./app/javascript/controllers/hello_controller.js\",\n\t\"controllers/home_controller.js\": \"./app/javascript/controllers/home_controller.js\",\n\t\"controllers/home_filters_controller.js\": \"./app/javascript/controllers/home_filters_controller.js\",\n\t\"controllers/islands_controller.js\": \"./app/javascript/controllers/islands_controller.js\",\n\t\"controllers/page_new_controller.js\": \"./app/javascript/controllers/page_new_controller.js\",\n\t\"controllers/password_field_controller.js\": \"./app/javascript/controllers/password_field_controller.js\",\n\t\"controllers/related_controller.js\": \"./app/javascript/controllers/related_controller.js\",\n\t\"controllers/shops_controller.js\": \"./app/javascript/controllers/shops_controller.js\",\n\t\"controllers/tour_booking_controller.js\": \"./app/javascript/controllers/tour_booking_controller.js\",\n\t\"controllers/vivawallet_controller.js\": \"./app/javascript/controllers/vivawallet_controller.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/javascript/controllers sync recursive _controller\\\\.js$\";","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","import { Turbo } from \"@hotwired/turbo-rails\";\nimport { Controller } from \"stimulus\";\n\nconst countries = {\n Germany: \"DE\",\n Austria: \"AT\",\n Switzerland: \"CH\",\n Sweden: \"SE\",\n Norway: \"NO\",\n Finland: \"FI\",\n Netherlands: \"NL\",\n Belgium: \"BE\",\n Denmark: \"DK\",\n \"United Kingdom\": \"GB\",\n Spain: \"ES\",\n Portugal: \"PT\",\n Italy: \"IT\",\n France: \"FR\",\n Afghanistan: \"AF\",\n \"Aland Islands\": \"AX\",\n Albania: \"AL\",\n Algeria: \"DZ\",\n \"American Samoa\": \"AS\",\n Andorra: \"AD\",\n Angola: \"AO\",\n Anguilla: \"AI\",\n Antarctica: \"AQ\",\n \"Antigua and Barbuda\": \"AG\",\n Argentina: \"AR\",\n Armenia: \"AM\",\n Aruba: \"AW\",\n Australia: \"AU\",\n Azerbaijan: \"AZ\",\n Bahamas: \"BS\",\n Bahrain: \"BH\",\n Bangladesh: \"BD\",\n Barbados: \"BB\",\n Belarus: \"BY\",\n Belize: \"BZ\",\n Benin: \"BJ\",\n Bermuda: \"BM\",\n Bhutan: \"BT\",\n Bolivia: \"BO\",\n \"Bonaire, Saint Eustatius and Saba\": \"BQ\",\n \"Bosnia and Herzegovina\": \"BA\",\n Botswana: \"BW\",\n \"Bouvet Island\": \"BV\",\n Brazil: \"BR\",\n \"British Indian Ocean Territory\": \"IO\",\n \"British Virgin Islands\": \"VG\",\n Brunei: \"BN\",\n Bulgaria: \"BG\",\n \"Burkina Faso\": \"BF\",\n Burundi: \"BI\",\n Cambodia: \"KH\",\n Cameroon: \"CM\",\n Canada: \"CA\",\n \"Cape Verde\": \"CV\",\n \"Cayman Islands\": \"KY\",\n \"Central African Republic\": \"CF\",\n Chad: \"TD\",\n Chile: \"CL\",\n China: \"CN\",\n \"Christmas Island\": \"CX\",\n \"Cocos Islands\": \"CC\",\n Colombia: \"CO\",\n Comoros: \"KM\",\n \"Cook Islands\": \"CK\",\n \"Costa Rica\": \"CR\",\n Croatia: \"HR\",\n Cuba: \"CU\",\n Curacao: \"CW\",\n Cyprus: \"CY\",\n \"Czech Republic\": \"CZ\",\n \"Democratic Republic of the Congo\": \"CD\",\n Djibouti: \"DJ\",\n Dominica: \"DM\",\n \"Dominican Republic\": \"DO\",\n \"East Timor\": \"TL\",\n Ecuador: \"EC\",\n Egypt: \"EG\",\n \"El Salvador\": \"SV\",\n \"Equatorial Guinea\": \"GQ\",\n Eritrea: \"ER\",\n Estonia: \"EE\",\n Ethiopia: \"ET\",\n \"Falkland Islands\": \"FK\",\n \"Faroe Islands\": \"FO\",\n Fiji: \"FJ\",\n \"French Guiana\": \"GF\",\n \"French Polynesia\": \"PF\",\n \"French Southern Territories\": \"TF\",\n Gabon: \"GA\",\n Gambia: \"GM\",\n Georgia: \"GE\",\n Ghana: \"GH\",\n Gibraltar: \"GI\",\n Greece: \"GR\",\n Greenland: \"GL\",\n Grenada: \"GD\",\n Guadeloupe: \"GP\",\n Guam: \"GU\",\n Guatemala: \"GT\",\n Guernsey: \"GG\",\n Guinea: \"GN\",\n \"Guinea-Bissau\": \"GW\",\n Guyana: \"GY\",\n Haiti: \"HT\",\n \"Heard Island and McDonald Islands\": \"HM\",\n Honduras: \"HN\",\n \"Hong Kong\": \"HK\",\n Hungary: \"HU\",\n Iceland: \"IS\",\n India: \"IN\",\n Indonesia: \"ID\",\n Iran: \"IR\",\n Iraq: \"IQ\",\n Ireland: \"IE\",\n \"Isle of Man\": \"IM\",\n Israel: \"IL\",\n \"Ivory Coast\": \"CI\",\n Jamaica: \"JM\",\n Japan: \"JP\",\n Jersey: \"JE\",\n Jordan: \"JO\",\n Kazakhstan: \"KZ\",\n Kenya: \"KE\",\n Kiribati: \"KI\",\n Kosovo: \"XK\",\n Kuwait: \"KW\",\n Kyrgyzstan: \"KG\",\n Laos: \"LA\",\n Latvia: \"LV\",\n Lebanon: \"LB\",\n Lesotho: \"LS\",\n Liberia: \"LR\",\n Libya: \"LY\",\n Liechtenstein: \"LI\",\n Lithuania: \"LT\",\n Luxembourg: \"LU\",\n Macao: \"MO\",\n Macedonia: \"MK\",\n Madagascar: \"MG\",\n Malawi: \"MW\",\n Malaysia: \"MY\",\n Maldives: \"MV\",\n Mali: \"ML\",\n Malta: \"MT\",\n \"Marshall Islands\": \"MH\",\n Martinique: \"MQ\",\n Mauritania: \"MR\",\n Mauritius: \"MU\",\n Mayotte: \"YT\",\n Mexico: \"MX\",\n Micronesia: \"FM\",\n Moldova: \"MD\",\n Monaco: \"MC\",\n Mongolia: \"MN\",\n Montenegro: \"ME\",\n Montserrat: \"MS\",\n Morocco: \"MA\",\n Mozambique: \"MZ\",\n Myanmar: \"MM\",\n Namibia: \"NA\",\n Nauru: \"NR\",\n Nepal: \"NP\",\n \"New Caledonia\": \"NC\",\n \"New Zealand\": \"NZ\",\n Nicaragua: \"NI\",\n Niger: \"NE\",\n Nigeria: \"NG\",\n Niue: \"NU\",\n \"Norfolk Island\": \"NF\",\n \"North Korea\": \"KP\",\n \"Northern Mariana Islands\": \"MP\",\n Oman: \"OM\",\n Pakistan: \"PK\",\n Palau: \"PW\",\n \"Palestinian Territory\": \"PS\",\n Panama: \"PA\",\n \"Papua New Guinea\": \"PG\",\n Paraguay: \"PY\",\n Peru: \"PE\",\n Philippines: \"PH\",\n Pitcairn: \"PN\",\n Poland: \"PL\",\n \"Puerto Rico\": \"PR\",\n Qatar: \"QA\",\n \"Republic of the Congo\": \"CG\",\n Reunion: \"RE\",\n Romania: \"RO\",\n Russia: \"RU\",\n Rwanda: \"RW\",\n \"Saint Barthelemy\": \"BL\",\n \"Saint Helena\": \"SH\",\n \"Saint Kitts and Nevis\": \"KN\",\n \"Saint Lucia\": \"LC\",\n \"Saint Martin\": \"MF\",\n \"Saint Pierre and Miquelon\": \"PM\",\n \"Saint Vincent and the Grenadines\": \"VC\",\n Samoa: \"WS\",\n \"San Marino\": \"SM\",\n \"Sao Tome and Principe\": \"ST\",\n \"Saudi Arabia\": \"SA\",\n Senegal: \"SN\",\n Serbia: \"RS\",\n Seychelles: \"SC\",\n \"Sierra Leone\": \"SL\",\n Singapore: \"SG\",\n \"Sint Maarten\": \"SX\",\n Slovakia: \"SK\",\n Slovenia: \"SI\",\n \"Solomon Islands\": \"SB\",\n Somalia: \"SO\",\n \"South Africa\": \"ZA\",\n \"South Georgia and the South Sandwich Islands\": \"GS\",\n \"South Korea\": \"KR\",\n \"South Sudan\": \"SS\",\n \"Sri Lanka\": \"LK\",\n Sudan: \"SD\",\n Suriname: \"SR\",\n \"Svalbard and Jan Mayen\": \"SJ\",\n Swaziland: \"SZ\",\n Syria: \"SY\",\n Taiwan: \"TW\",\n Tajikistan: \"TJ\",\n Tanzania: \"TZ\",\n Thailand: \"TH\",\n Togo: \"TG\",\n Tokelau: \"TK\",\n Tonga: \"TO\",\n \"Trinidad and Tobago\": \"TT\",\n Tunisia: \"TN\",\n Turkey: \"TR\",\n Turkmenistan: \"TM\",\n \"Turks and Caicos Islands\": \"TC\",\n Tuvalu: \"TV\",\n \"U.S. Virgin Islands\": \"VI\",\n Uganda: \"UG\",\n Ukraine: \"UA\",\n \"United Arab Emirates\": \"AE\",\n \"United States\": \"US\",\n \"United States Minor Outlying Islands\": \"UM\",\n Uruguay: \"UY\",\n Uzbekistan: \"UZ\",\n Vanuatu: \"VU\",\n Vatican: \"VA\",\n Venezuela: \"VE\",\n Vietnam: \"VN\",\n \"Wallis and Futuna\": \"WF\",\n \"Western Sahara\": \"EH\",\n Yemen: \"YE\",\n Zambia: \"ZM\",\n Zimbabwe: \"ZW\",\n};\nconst mobiles = [\n {\n name: \"Germany\",\n dial_code: \"+49\",\n code: \"DE\",\n },\n {\n name: \"Austria\",\n dial_code: \"+43\",\n code: \"AT\",\n },\n {\n name: \"Switzerland\",\n dial_code: \"+41\",\n code: \"CH\",\n },\n {\n name: \"Sweden\",\n dial_code: \"+46\",\n code: \"SE\",\n },\n {\n name: \"Norway\",\n dial_code: \"+47\",\n code: \"NO\",\n },\n {\n name: \"Finland\",\n dial_code: \"+358\",\n code: \"FI\",\n },\n {\n name: \"Netherlands\",\n dial_code: \"+31\",\n code: \"NL\",\n },\n {\n name: \"Belgium\",\n dial_code: \"+32\",\n code: \"BE\",\n },\n {\n name: \"Denmark\",\n dial_code: \"+45\",\n code: \"DK\",\n },\n {\n name: \"United Kingdom\",\n dial_code: \"+44\",\n code: \"GB\",\n },\n {\n name: \"Spain\",\n dial_code: \"+34\",\n code: \"ES\",\n },\n {\n name: \"Portugal\",\n dial_code: \"+351\",\n code: \"PT\",\n },\n {\n name: \"Italy\",\n dial_code: \"+39\",\n code: \"IT\",\n },\n {\n name: \"France\",\n dial_code: \"+33\",\n code: \"FR\",\n },\n {\n name: \"Afghanistan\",\n dial_code: \"+93\",\n code: \"AF\",\n },\n {\n name: \"Aland Islands\",\n dial_code: \"+358\",\n code: \"AX\",\n },\n {\n name: \"Albania\",\n dial_code: \"+355\",\n code: \"AL\",\n },\n {\n name: \"Algeria\",\n dial_code: \"+213\",\n code: \"DZ\",\n },\n {\n name: \"AmericanSamoa\",\n dial_code: \"+1684\",\n code: \"AS\",\n },\n {\n name: \"Andorra\",\n dial_code: \"+376\",\n code: \"AD\",\n },\n {\n name: \"Angola\",\n dial_code: \"+244\",\n code: \"AO\",\n },\n {\n name: \"Anguilla\",\n dial_code: \"+1264\",\n code: \"AI\",\n },\n {\n name: \"Antarctica\",\n dial_code: \"+672\",\n code: \"AQ\",\n },\n {\n name: \"Antigua and Barbuda\",\n dial_code: \"+1268\",\n code: \"AG\",\n },\n {\n name: \"Argentina\",\n dial_code: \"+54\",\n code: \"AR\",\n },\n {\n name: \"Armenia\",\n dial_code: \"+374\",\n code: \"AM\",\n },\n {\n name: \"Aruba\",\n dial_code: \"+297\",\n code: \"AW\",\n },\n {\n name: \"Australia\",\n dial_code: \"+61\",\n code: \"AU\",\n },\n {\n name: \"Azerbaijan\",\n dial_code: \"+994\",\n code: \"AZ\",\n },\n {\n name: \"Bahamas\",\n dial_code: \"+1242\",\n code: \"BS\",\n },\n {\n name: \"Bahrain\",\n dial_code: \"+973\",\n code: \"BH\",\n },\n {\n name: \"Bangladesh\",\n dial_code: \"+880\",\n code: \"BD\",\n },\n {\n name: \"Barbados\",\n dial_code: \"+1246\",\n code: \"BB\",\n },\n {\n name: \"Belarus\",\n dial_code: \"+375\",\n code: \"BY\",\n },\n {\n name: \"Belize\",\n dial_code: \"+501\",\n code: \"BZ\",\n },\n {\n name: \"Benin\",\n dial_code: \"+229\",\n code: \"BJ\",\n },\n {\n name: \"Bermuda\",\n dial_code: \"+1441\",\n code: \"BM\",\n },\n {\n name: \"Bhutan\",\n dial_code: \"+975\",\n code: \"BT\",\n },\n {\n name: \"Bolivia, Plurinational State of\",\n dial_code: \"+591\",\n code: \"BO\",\n },\n {\n name: \"Bosnia and Herzegovina\",\n dial_code: \"+387\",\n code: \"BA\",\n },\n {\n name: \"Botswana\",\n dial_code: \"+267\",\n code: \"BW\",\n },\n {\n name: \"Brazil\",\n dial_code: \"+55\",\n code: \"BR\",\n },\n {\n name: \"British Indian Ocean Territory\",\n dial_code: \"+246\",\n code: \"IO\",\n },\n {\n name: \"Brunei Darussalam\",\n dial_code: \"+673\",\n code: \"BN\",\n },\n {\n name: \"Bulgaria\",\n dial_code: \"+359\",\n code: \"BG\",\n },\n {\n name: \"Burkina Faso\",\n dial_code: \"+226\",\n code: \"BF\",\n },\n {\n name: \"Burundi\",\n dial_code: \"+257\",\n code: \"BI\",\n },\n {\n name: \"Cambodia\",\n dial_code: \"+855\",\n code: \"KH\",\n },\n {\n name: \"Cameroon\",\n dial_code: \"+237\",\n code: \"CM\",\n },\n {\n name: \"Canada\",\n dial_code: \"+1\",\n code: \"CA\",\n },\n {\n name: \"Cape Verde\",\n dial_code: \"+238\",\n code: \"CV\",\n },\n {\n name: \"Cayman Islands\",\n dial_code: \"+ 345\",\n code: \"KY\",\n },\n {\n name: \"Central African Republic\",\n dial_code: \"+236\",\n code: \"CF\",\n },\n {\n name: \"Chad\",\n dial_code: \"+235\",\n code: \"TD\",\n },\n {\n name: \"Chile\",\n dial_code: \"+56\",\n code: \"CL\",\n },\n {\n name: \"China\",\n dial_code: \"+86\",\n code: \"CN\",\n },\n {\n name: \"Christmas Island\",\n dial_code: \"+61\",\n code: \"CX\",\n },\n {\n name: \"Cocos (Keeling) Islands\",\n dial_code: \"+61\",\n code: \"CC\",\n },\n {\n name: \"Colombia\",\n dial_code: \"+57\",\n code: \"CO\",\n },\n {\n name: \"Comoros\",\n dial_code: \"+269\",\n code: \"KM\",\n },\n {\n name: \"Congo\",\n dial_code: \"+242\",\n code: \"CG\",\n },\n {\n name: \"Congo, The Democratic Republic of the Congo\",\n dial_code: \"+243\",\n code: \"CD\",\n },\n {\n name: \"Cook Islands\",\n dial_code: \"+682\",\n code: \"CK\",\n },\n {\n name: \"Costa Rica\",\n dial_code: \"+506\",\n code: \"CR\",\n },\n {\n name: \"Cote d'Ivoire\",\n dial_code: \"+225\",\n code: \"CI\",\n },\n {\n name: \"Croatia\",\n dial_code: \"+385\",\n code: \"HR\",\n },\n {\n name: \"Cuba\",\n dial_code: \"+53\",\n code: \"CU\",\n },\n {\n name: \"Cyprus\",\n dial_code: \"+357\",\n code: \"CY\",\n },\n {\n name: \"Czech Republic\",\n dial_code: \"+420\",\n code: \"CZ\",\n },\n {\n name: \"Djibouti\",\n dial_code: \"+253\",\n code: \"DJ\",\n },\n {\n name: \"Dominica\",\n dial_code: \"+1767\",\n code: \"DM\",\n },\n {\n name: \"Dominican Republic\",\n dial_code: \"+1849\",\n code: \"DO\",\n },\n {\n name: \"Ecuador\",\n dial_code: \"+593\",\n code: \"EC\",\n },\n {\n name: \"Egypt\",\n dial_code: \"+20\",\n code: \"EG\",\n },\n {\n name: \"El Salvador\",\n dial_code: \"+503\",\n code: \"SV\",\n },\n {\n name: \"Equatorial Guinea\",\n dial_code: \"+240\",\n code: \"GQ\",\n },\n {\n name: \"Eritrea\",\n dial_code: \"+291\",\n code: \"ER\",\n },\n {\n name: \"Estonia\",\n dial_code: \"+372\",\n code: \"EE\",\n },\n {\n name: \"Ethiopia\",\n dial_code: \"+251\",\n code: \"ET\",\n },\n {\n name: \"Falkland Islands (Malvinas)\",\n dial_code: \"+500\",\n code: \"FK\",\n },\n {\n name: \"Faroe Islands\",\n dial_code: \"+298\",\n code: \"FO\",\n },\n {\n name: \"Fiji\",\n dial_code: \"+679\",\n code: \"FJ\",\n },\n {\n name: \"French Guiana\",\n dial_code: \"+594\",\n code: \"GF\",\n },\n {\n name: \"French Polynesia\",\n dial_code: \"+689\",\n code: \"PF\",\n },\n {\n name: \"Gabon\",\n dial_code: \"+241\",\n code: \"GA\",\n },\n {\n name: \"Gambia\",\n dial_code: \"+220\",\n code: \"GM\",\n },\n {\n name: \"Georgia\",\n dial_code: \"+995\",\n code: \"GE\",\n },\n {\n name: \"Ghana\",\n dial_code: \"+233\",\n code: \"GH\",\n },\n {\n name: \"Gibraltar\",\n dial_code: \"+350\",\n code: \"GI\",\n },\n {\n name: \"Greece\",\n dial_code: \"+30\",\n code: \"GR\",\n },\n {\n name: \"Greenland\",\n dial_code: \"+299\",\n code: \"GL\",\n },\n {\n name: \"Grenada\",\n dial_code: \"+1473\",\n code: \"GD\",\n },\n {\n name: \"Guadeloupe\",\n dial_code: \"+590\",\n code: \"GP\",\n },\n {\n name: \"Guam\",\n dial_code: \"+1671\",\n code: \"GU\",\n },\n {\n name: \"Guatemala\",\n dial_code: \"+502\",\n code: \"GT\",\n },\n {\n name: \"Guernsey\",\n dial_code: \"+44\",\n code: \"GG\",\n },\n {\n name: \"Guinea\",\n dial_code: \"+224\",\n code: \"GN\",\n },\n {\n name: \"Guinea-Bissau\",\n dial_code: \"+245\",\n code: \"GW\",\n },\n {\n name: \"Guyana\",\n dial_code: \"+595\",\n code: \"GY\",\n },\n {\n name: \"Haiti\",\n dial_code: \"+509\",\n code: \"HT\",\n },\n {\n name: \"Holy See (Vatican City State)\",\n dial_code: \"+379\",\n code: \"VA\",\n },\n {\n name: \"Honduras\",\n dial_code: \"+504\",\n code: \"HN\",\n },\n {\n name: \"Hong Kong\",\n dial_code: \"+852\",\n code: \"HK\",\n },\n {\n name: \"Hungary\",\n dial_code: \"+36\",\n code: \"HU\",\n },\n {\n name: \"Iceland\",\n dial_code: \"+354\",\n code: \"IS\",\n },\n {\n name: \"India\",\n dial_code: \"+91\",\n code: \"IN\",\n },\n {\n name: \"Indonesia\",\n dial_code: \"+62\",\n code: \"ID\",\n },\n {\n name: \"Iran, Islamic Republic of Persian Gulf\",\n dial_code: \"+98\",\n code: \"IR\",\n },\n {\n name: \"Iraq\",\n dial_code: \"+964\",\n code: \"IQ\",\n },\n {\n name: \"Ireland\",\n dial_code: \"+353\",\n code: \"IE\",\n },\n {\n name: \"Isle of Man\",\n dial_code: \"+44\",\n code: \"IM\",\n },\n {\n name: \"Israel\",\n dial_code: \"+972\",\n code: \"IL\",\n },\n {\n name: \"Jamaica\",\n dial_code: \"+1876\",\n code: \"JM\",\n },\n {\n name: \"Japan\",\n dial_code: \"+81\",\n code: \"JP\",\n },\n {\n name: \"Jersey\",\n dial_code: \"+44\",\n code: \"JE\",\n },\n {\n name: \"Jordan\",\n dial_code: \"+962\",\n code: \"JO\",\n },\n {\n name: \"Kazakhstan\",\n dial_code: \"+77\",\n code: \"KZ\",\n },\n {\n name: \"Kenya\",\n dial_code: \"+254\",\n code: \"KE\",\n },\n {\n name: \"Kiribati\",\n dial_code: \"+686\",\n code: \"KI\",\n },\n {\n name: \"Korea, Democratic People's Republic of Korea\",\n dial_code: \"+850\",\n code: \"KP\",\n },\n {\n name: \"Korea, Republic of South Korea\",\n dial_code: \"+82\",\n code: \"KR\",\n },\n {\n name: \"Kuwait\",\n dial_code: \"+965\",\n code: \"KW\",\n },\n {\n name: \"Kyrgyzstan\",\n dial_code: \"+996\",\n code: \"KG\",\n },\n {\n name: \"Laos\",\n dial_code: \"+856\",\n code: \"LA\",\n },\n {\n name: \"Latvia\",\n dial_code: \"+371\",\n code: \"LV\",\n },\n {\n name: \"Lebanon\",\n dial_code: \"+961\",\n code: \"LB\",\n },\n {\n name: \"Lesotho\",\n dial_code: \"+266\",\n code: \"LS\",\n },\n {\n name: \"Liberia\",\n dial_code: \"+231\",\n code: \"LR\",\n },\n {\n name: \"Libyan Arab Jamahiriya\",\n dial_code: \"+218\",\n code: \"LY\",\n },\n {\n name: \"Liechtenstein\",\n dial_code: \"+423\",\n code: \"LI\",\n },\n {\n name: \"Lithuania\",\n dial_code: \"+370\",\n code: \"LT\",\n },\n {\n name: \"Luxembourg\",\n dial_code: \"+352\",\n code: \"LU\",\n },\n {\n name: \"Macao\",\n dial_code: \"+853\",\n code: \"MO\",\n },\n {\n name: \"Macedonia\",\n dial_code: \"+389\",\n code: \"MK\",\n },\n {\n name: \"Madagascar\",\n dial_code: \"+261\",\n code: \"MG\",\n },\n {\n name: \"Malawi\",\n dial_code: \"+265\",\n code: \"MW\",\n },\n {\n name: \"Malaysia\",\n dial_code: \"+60\",\n code: \"MY\",\n },\n {\n name: \"Maldives\",\n dial_code: \"+960\",\n code: \"MV\",\n },\n {\n name: \"Mali\",\n dial_code: \"+223\",\n code: \"ML\",\n },\n {\n name: \"Malta\",\n dial_code: \"+356\",\n code: \"MT\",\n },\n {\n name: \"Marshall Islands\",\n dial_code: \"+692\",\n code: \"MH\",\n },\n {\n name: \"Martinique\",\n dial_code: \"+596\",\n code: \"MQ\",\n },\n {\n name: \"Mauritania\",\n dial_code: \"+222\",\n code: \"MR\",\n },\n {\n name: \"Mauritius\",\n dial_code: \"+230\",\n code: \"MU\",\n },\n {\n name: \"Mayotte\",\n dial_code: \"+262\",\n code: \"YT\",\n },\n {\n name: \"Mexico\",\n dial_code: \"+52\",\n code: \"MX\",\n },\n {\n name: \"Micronesia, Federated States of Micronesia\",\n dial_code: \"+691\",\n code: \"FM\",\n },\n {\n name: \"Moldova\",\n dial_code: \"+373\",\n code: \"MD\",\n },\n {\n name: \"Monaco\",\n dial_code: \"+377\",\n code: \"MC\",\n },\n {\n name: \"Mongolia\",\n dial_code: \"+976\",\n code: \"MN\",\n },\n {\n name: \"Montenegro\",\n dial_code: \"+382\",\n code: \"ME\",\n },\n {\n name: \"Montserrat\",\n dial_code: \"+1664\",\n code: \"MS\",\n },\n {\n name: \"Morocco\",\n dial_code: \"+212\",\n code: \"MA\",\n },\n {\n name: \"Mozambique\",\n dial_code: \"+258\",\n code: \"MZ\",\n },\n {\n name: \"Myanmar\",\n dial_code: \"+95\",\n code: \"MM\",\n },\n {\n name: \"Namibia\",\n dial_code: \"+264\",\n code: \"NA\",\n },\n {\n name: \"Nauru\",\n dial_code: \"+674\",\n code: \"NR\",\n },\n {\n name: \"Nepal\",\n dial_code: \"+977\",\n code: \"NP\",\n },\n {\n name: \"Netherlands Antilles\",\n dial_code: \"+599\",\n code: \"AN\",\n },\n {\n name: \"New Caledonia\",\n dial_code: \"+687\",\n code: \"NC\",\n },\n {\n name: \"New Zealand\",\n dial_code: \"+64\",\n code: \"NZ\",\n },\n {\n name: \"Nicaragua\",\n dial_code: \"+505\",\n code: \"NI\",\n },\n {\n name: \"Niger\",\n dial_code: \"+227\",\n code: \"NE\",\n },\n {\n name: \"Nigeria\",\n dial_code: \"+234\",\n code: \"NG\",\n },\n {\n name: \"Niue\",\n dial_code: \"+683\",\n code: \"NU\",\n },\n {\n name: \"Norfolk Island\",\n dial_code: \"+672\",\n code: \"NF\",\n },\n {\n name: \"Northern Mariana Islands\",\n dial_code: \"+1670\",\n code: \"MP\",\n },\n {\n name: \"Oman\",\n dial_code: \"+968\",\n code: \"OM\",\n },\n {\n name: \"Pakistan\",\n dial_code: \"+92\",\n code: \"PK\",\n },\n {\n name: \"Palau\",\n dial_code: \"+680\",\n code: \"PW\",\n },\n {\n name: \"Palestinian Territory, Occupied\",\n dial_code: \"+970\",\n code: \"PS\",\n },\n {\n name: \"Panama\",\n dial_code: \"+507\",\n code: \"PA\",\n },\n {\n name: \"Papua New Guinea\",\n dial_code: \"+675\",\n code: \"PG\",\n },\n {\n name: \"Paraguay\",\n dial_code: \"+595\",\n code: \"PY\",\n },\n {\n name: \"Peru\",\n dial_code: \"+51\",\n code: \"PE\",\n },\n {\n name: \"Philippines\",\n dial_code: \"+63\",\n code: \"PH\",\n },\n {\n name: \"Pitcairn\",\n dial_code: \"+872\",\n code: \"PN\",\n },\n {\n name: \"Poland\",\n dial_code: \"+48\",\n code: \"PL\",\n },\n {\n name: \"Puerto Rico\",\n dial_code: \"+1939\",\n code: \"PR\",\n },\n {\n name: \"Qatar\",\n dial_code: \"+974\",\n code: \"QA\",\n },\n {\n name: \"Romania\",\n dial_code: \"+40\",\n code: \"RO\",\n },\n {\n name: \"Russia\",\n dial_code: \"+7\",\n code: \"RU\",\n },\n {\n name: \"Rwanda\",\n dial_code: \"+250\",\n code: \"RW\",\n },\n {\n name: \"Reunion\",\n dial_code: \"+262\",\n code: \"RE\",\n },\n {\n name: \"Saint Barthelemy\",\n dial_code: \"+590\",\n code: \"BL\",\n },\n {\n name: \"Saint Helena, Ascension and Tristan Da Cunha\",\n dial_code: \"+290\",\n code: \"SH\",\n },\n {\n name: \"Saint Kitts and Nevis\",\n dial_code: \"+1869\",\n code: \"KN\",\n },\n {\n name: \"Saint Lucia\",\n dial_code: \"+1758\",\n code: \"LC\",\n },\n {\n name: \"Saint Martin\",\n dial_code: \"+590\",\n code: \"MF\",\n },\n {\n name: \"Saint Pierre and Miquelon\",\n dial_code: \"+508\",\n code: \"PM\",\n },\n {\n name: \"Saint Vincent and the Grenadines\",\n dial_code: \"+1784\",\n code: \"VC\",\n },\n {\n name: \"Samoa\",\n dial_code: \"+685\",\n code: \"WS\",\n },\n {\n name: \"San Marino\",\n dial_code: \"+378\",\n code: \"SM\",\n },\n {\n name: \"Sao Tome and Principe\",\n dial_code: \"+239\",\n code: \"ST\",\n },\n {\n name: \"Saudi Arabia\",\n dial_code: \"+966\",\n code: \"SA\",\n },\n {\n name: \"Senegal\",\n dial_code: \"+221\",\n code: \"SN\",\n },\n {\n name: \"Serbia\",\n dial_code: \"+381\",\n code: \"RS\",\n },\n {\n name: \"Seychelles\",\n dial_code: \"+248\",\n code: \"SC\",\n },\n {\n name: \"Sierra Leone\",\n dial_code: \"+232\",\n code: \"SL\",\n },\n {\n name: \"Singapore\",\n dial_code: \"+65\",\n code: \"SG\",\n },\n {\n name: \"Slovakia\",\n dial_code: \"+421\",\n code: \"SK\",\n },\n {\n name: \"Slovenia\",\n dial_code: \"+386\",\n code: \"SI\",\n },\n {\n name: \"Solomon Islands\",\n dial_code: \"+677\",\n code: \"SB\",\n },\n {\n name: \"Somalia\",\n dial_code: \"+252\",\n code: \"SO\",\n },\n {\n name: \"South Africa\",\n dial_code: \"+27\",\n code: \"ZA\",\n },\n {\n name: \"South Sudan\",\n dial_code: \"+211\",\n code: \"SS\",\n },\n {\n name: \"South Georgia and the South Sandwich Islands\",\n dial_code: \"+500\",\n code: \"GS\",\n },\n {\n name: \"Sri Lanka\",\n dial_code: \"+94\",\n code: \"LK\",\n },\n {\n name: \"Sudan\",\n dial_code: \"+249\",\n code: \"SD\",\n },\n {\n name: \"Suriname\",\n dial_code: \"+597\",\n code: \"SR\",\n },\n {\n name: \"Svalbard and Jan Mayen\",\n dial_code: \"+47\",\n code: \"SJ\",\n },\n {\n name: \"Swaziland\",\n dial_code: \"+268\",\n code: \"SZ\",\n },\n {\n name: \"Syrian Arab Republic\",\n dial_code: \"+963\",\n code: \"SY\",\n },\n {\n name: \"Taiwan\",\n dial_code: \"+886\",\n code: \"TW\",\n },\n {\n name: \"Tajikistan\",\n dial_code: \"+992\",\n code: \"TJ\",\n },\n {\n name: \"Tanzania, United Republic of Tanzania\",\n dial_code: \"+255\",\n code: \"TZ\",\n },\n {\n name: \"Thailand\",\n dial_code: \"+66\",\n code: \"TH\",\n },\n {\n name: \"Timor-Leste\",\n dial_code: \"+670\",\n code: \"TL\",\n },\n {\n name: \"Togo\",\n dial_code: \"+228\",\n code: \"TG\",\n },\n {\n name: \"Tokelau\",\n dial_code: \"+690\",\n code: \"TK\",\n },\n {\n name: \"Tonga\",\n dial_code: \"+676\",\n code: \"TO\",\n },\n {\n name: \"Trinidad and Tobago\",\n dial_code: \"+1868\",\n code: \"TT\",\n },\n {\n name: \"Tunisia\",\n dial_code: \"+216\",\n code: \"TN\",\n },\n {\n name: \"Turkey\",\n dial_code: \"+90\",\n code: \"TR\",\n },\n {\n name: \"Turkmenistan\",\n dial_code: \"+993\",\n code: \"TM\",\n },\n {\n name: \"Turks and Caicos Islands\",\n dial_code: \"+1649\",\n code: \"TC\",\n },\n {\n name: \"Tuvalu\",\n dial_code: \"+688\",\n code: \"TV\",\n },\n {\n name: \"Uganda\",\n dial_code: \"+256\",\n code: \"UG\",\n },\n {\n name: \"Ukraine\",\n dial_code: \"+380\",\n code: \"UA\",\n },\n {\n name: \"United Arab Emirates\",\n dial_code: \"+971\",\n code: \"AE\",\n },\n {\n name: \"United States\",\n dial_code: \"+1\",\n code: \"US\",\n },\n {\n name: \"Uruguay\",\n dial_code: \"+598\",\n code: \"UY\",\n },\n {\n name: \"Uzbekistan\",\n dial_code: \"+998\",\n code: \"UZ\",\n },\n {\n name: \"Vanuatu\",\n dial_code: \"+678\",\n code: \"VU\",\n },\n {\n name: \"Venezuela, Bolivarian Republic of Venezuela\",\n dial_code: \"+58\",\n code: \"VE\",\n },\n {\n name: \"Vietnam\",\n dial_code: \"+84\",\n code: \"VN\",\n },\n {\n name: \"Virgin Islands, British\",\n dial_code: \"+1284\",\n code: \"VG\",\n },\n {\n name: \"Virgin Islands, U.S.\",\n dial_code: \"+1340\",\n code: \"VI\",\n },\n {\n name: \"Wallis and Futuna\",\n dial_code: \"+681\",\n code: \"WF\",\n },\n {\n name: \"Yemen\",\n dial_code: \"+967\",\n code: \"YE\",\n },\n {\n name: \"Zambia\",\n dial_code: \"+260\",\n code: \"ZM\",\n },\n {\n name: \"Zimbabwe\",\n dial_code: \"+263\",\n code: \"ZW\",\n },\n];\n\nexport default class extends Controller {\n\n static targets = [\"locations\"];\n static values = { basket: String };\n\n connect() {\n\n this.updateBasket();\n\n let tooltipTriggerList = [].slice.call(\n document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n );\n let tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n return new Tooltip(tooltipTriggerEl);\n });\n var urlParams;\n (window.onpopstate = function () {\n var match,\n pl = /\\+/g, // Regex for replacing addition symbol with a space\n search = /([^&=]+)=?([^&]*)/g,\n decode = function (s) {\n return decodeURIComponent(s.replace(pl, \" \"));\n },\n query = window.location.search.substring(1);\n\n urlParams = {};\n while ((match = search.exec(query)))\n urlParams[decode(match[1])] = decode(match[2]);\n })();\n\n if (urlParams.model_type) {\n document.getElementById(`type-${this.basketValue}`).value =\n urlParams.model_type;\n }\n\n if (urlParams.models && urlParams.models.length > 0) {\n const reset = document.getElementById(`reset-${this.basketValue}`);\n if (reset) reset.classList.remove(\"hidden\");\n }\n let plocId = document.getElementById(`plocId-${this.basketValue}`);\n if (urlParams.plocId && plocId) {\n plocId.value = urlParams.plocId;\n let flag = false;\n let locations = this.locationsTarget;\n for (var i = 1; i < locations.options.length; i++) {\n locations.options[i].classList.remove(\"hidden\");\n if (plocId.value && locations.options[i].dataset.island != plocId.value)\n locations.options[i].classList.add(\"hidden\");\n }\n } else {\n let query = window.location.pathname.split(\"/\");\n let island = false;\n if (plocId) {\n query.forEach((element) => {\n switch (element) {\n case \"gran-canaria\":\n island = true;\n plocId.value = \"1\";\n break;\n case \"tenerife\":\n island = true;\n plocId.value = \"2\";\n break;\n case \"lanzarote\":\n island = true;\n plocId.value = \"3\";\n break;\n }\n });\n if (!island) {\n plocId.value = 1;\n }\n }\n }\n if (urlParams.height) {\n document.getElementById(`height-${this.basketValue}`).value =\n urlParams.height;\n }\n let active = document.getElementsByClassName(\"filter-type bg-black\")[0];\n if (active) {\n active.classList.remove(\"bg-black\");\n active.classList.add(\"bg-gray-300\");\n let types = document.getElementsByClassName(\"filter-type\");\n for (let i = 0; i < types.length; i++) {\n if (urlParams.model_type === types[i].dataset.type) {\n types[i].classList.remove(\"bg-gray-300\");\n types[i].classList.add(\"bg-black\");\n }\n }\n }\n let selected = false;\n let select = document.getElementById(`country-${this.basketValue}`);\n if (select) {\n for (var key in countries) {\n let option = document.createElement(\"option\");\n option.text = key;\n option.value = countries[key];\n if (option.value === \"ES\") {\n option.id = \"es\";\n }\n if (select.dataset.country === countries[key]) {\n option.selected = \"selected\";\n selected = true;\n }\n select.appendChild(option);\n } /*\n if ( !selected ) {\n let spain = document.getElementById('es');\n spain.setAttribute('selected', 'selected');\n }*/\n }\n let select2 = document.getElementById(`prefix-${this.basketValue}`);\n if (select2) {\n selected = false;\n mobiles.forEach((prefix) => {\n let option = document.createElement(\"option\");\n option.text = prefix.dial_code + \" \" + prefix.name;\n option.value = prefix.dial_code;\n if (prefix.code === \"ES\") {\n option.id = \"es2\";\n }\n if (select && select.dataset.country === prefix.code) {\n option.selected = \"selected\";\n selected = true;\n }\n select2.appendChild(option);\n });\n }\n\n let layer = document.getElementById(`bikes-booking-${this.basketValue}`);\n if (layer) this.bikes_layer();\n\n let bike = document.getElementById(`single-bike-${this.basketValue}`);\n if (bike) this.single_bike_layer(bike);\n\n let anchor = document.getElementById(`main-filters-${this.basketValue}`);\n let filterTagsMobile = document.getElementById(\n `filterTagsMobile-${this.basketValue}`\n );\n if (filterTagsMobile) {\n document.addEventListener(\"scroll\", (event) => {\n if (anchor.offsetTop + 278 <= window.scrollY)\n filterTagsMobile.classList.add(\"fixed-filters\");\n else filterTagsMobile.classList.remove(\"fixed-filters\");\n });\n }\n\n layer = null;\n layer = document.getElementById(`cart-${this.basketValue}`);\n if (layer) document.addEventListener(\"priced\", this.cart_layer);\n }\n\n removeFromCart(event) {\n document.getElementById(`spinner`).classList.remove(\"hidden\");\n let basket = this.basketValue;\n let cancel = \"\";\n let tmp;\n let path = event.path || (event.composedPath && event.composedPath());\n path.forEach((element) => {\n if (element.dataset && element.dataset.cancel) {\n cancel = element.dataset.cancel;\n tmp = JSON.parse(element.dataset.item);\n }\n });\n if (cancel.length > 0) {\n let items;\n if (tmp.modelId) {\n items = [\n {\n item_id: tmp.modelId.toString(),\n item_name: tmp.modelName,\n item_brand: tmp.manufacturer,\n item_category: tmp.category,\n location_id: tmp.plocId,\n price: parseFloat(tmp.pricePerUnit),\n quantity: tmp.unitCount,\n },\n ];\n } else {\n items = [\n {\n item_id: tmp.tourId.toString(),\n item_name: tmp.details.tourName,\n item_category: tmp.details.categoryName,\n location_id: tmp.details.locId,\n price: parseFloat(tmp.pricePerUnit),\n quantity: 1,\n },\n ];\n }\n let url = `/agents/remove_from_basket?basket=${basket}&res_id=${cancel}`;\n fetch(url).then((data) => {\n this.removeFromCart_layer(parseFloat(tmp.priceTotal), items);\n removeBasketFromSession(this.basketValue);\n this.updateBasket();\n this.updateBasketHeader();\n window.location.reload();\n });\n\n function removeBasketFromSession(value) {\n let storedBasket = sessionStorage.getItem(\"baskets\");\n let basketArray = storedBasket ? JSON.parse(storedBasket) : [];\n let indexToRemove = basketArray.indexOf(parseInt(value));\n if (indexToRemove !== -1) {\n basketArray.splice(indexToRemove, 1);\n let updatedBasket = JSON.stringify(basketArray);\n sessionStorage.setItem(\"baskets\", updatedBasket);\n }\n }\n }\n }\n\n toggleExtra(event) {\n let lang = \"en\";\n let basket = this.basketValue;\n const extra = event.target;\n const cancel = extra.dataset.cancel;\n let resId = extra.dataset.bike;\n let tmp = JSON.parse(extra.dataset.item);\n let add;\n\n if (extra.checked) {\n add = true;\n var url = `/booking_process/add_extra_to_bike?basket=${basket}&res_id=${resId}&prod_id=${extra.value}&lang=${lang}`;\n } else {\n add = false;\n var url = `/booking_process/remove_from_basket?basket=${basket}&res_id=${cancel}`;\n }\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n let items = [\n {\n item_id: tmp.prodId.toString(),\n item_name: tmp.title,\n currency: \"EUR\",\n item_category: tmp.prodType,\n price: parseFloat(tmp.price),\n },\n ];\n if (add) this.addToCart_layer(parseFloat(tmp.price), items);\n else this.removeFromCart_layer(parseFloat(tmp.price), items);\n this.updateBasket();\n if (data && data.resId) event.target.dataset.cancel = data.resId;\n else delete event.target.dataset.cancel;\n });\n }\n\n toggleTour(event) {\n let basket = event.target.dataset.basket\n ? event.target.dataset.basket\n : this.basketValue;\n const tour = event.target;\n const bike = tour.dataset.bike;\n var date = tour.dataset.date;\n const cancel = tour.dataset.cancel;\n let tours = document.querySelectorAll(`.tour-${bike}`);\n let tmp = JSON.parse(tour.dataset.item);\n let add;\n\n if (tour.checked) {\n tours.forEach((element) => {\n if (element.value != tour.value && date == element.dataset.date)\n element.setAttribute(\"disabled\", \"disabled\");\n });\n add = true;\n var url = `/booking_process/add_tour_to_basket?basket=${basket}&tour=${tour.value}&bpr=${tour.dataset.bpr}&res=${bike}&loc=${tour.dataset.loc}&date=${date}`;\n } else {\n tours.forEach((element) => {\n if (element.value != tour.value && date == element.dataset.date)\n element.removeAttribute(\"disabled\");\n });\n add = false;\n var url = `/booking_process/remove_from_basket?basket=${basket}&res_id=${cancel}`;\n }\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n let items = [\n {\n item_id: tmp.tourId.toString(),\n item_name: tmp.details.tourName,\n item_category: tmp.details.categoryName,\n location_id: tmp.details.locId,\n price: parseFloat(tmp.price),\n quantity: 1,\n },\n ];\n if (add) this.addToCart_layer(parseFloat(tmp.price), items);\n else this.removeFromCart_layer(parseFloat(tmp.price), items);\n this.updateBasket();\n if (data && data.resId) event.target.dataset.cancel = data.resId;\n else delete event.target.dataset.cancel;\n });\n }\n\n updateBasket() {\n let basket = this.basketValue;\n if (basket) {\n const url = `/booking_process/get_basket/${basket}`;\n fetch(url)\n .then((response) => {\n return response.json();\n })\n .catch((error) => {\n console.error(error);\n })\n .then((data) => {\n let unavailable = document.getElementById(\n `unavailable-${this.basketValue}`\n );\n if (unavailable) unavailable.classList.add(\"hidden\");\n let price = 0;\n let discount = 0;\n let sum = 0;\n if (data) {\n data.OrderPosition.forEach((element) => {\n price = price + element.pricePerUnit;\n if (element.prodType == \"X\")\n discount = discount + Math.abs(element.pricePerUnit);\n });\n }\n let supertotal = document.getElementById(\n `supertotal-${this.basketValue}`\n );\n let superdiscount = document.getElementById(\n `discount-${this.basketValue}`\n );\n let wrapper = document.getElementById(\n `discount-wrapper-${this.basketValue}`\n );\n if (discount > 0) {\n sum = price + discount;\n sum = sum.toFixed(2);\n sum = sum.replace(\".\", \",\");\n price = price.toFixed(2);\n price = price.replace(\".\", \",\");\n discount = discount.toFixed(2);\n discount = discount.replace(\".\", \",\");\n if (supertotal) {\n supertotal.value = sum;\n supertotal.classList.remove(\"hidden\");\n }\n if (superdiscount) {\n superdiscount.innerHTML = discount;\n wrapper.classList.remove(\"hidden\");\n }\n }\n /*else {\n if ( supertotal )\n supertotal.classList.add('hidden');\n if ( wrapper )\n wrapper.classList.add('hidden');\n }*/\n let total;\n let interval = setInterval(() => {\n total = document.getElementById(`total-${this.basketValue}`);\n if (total) {\n clearInterval(interval);\n setPrice();\n document.getElementById(\"prices-section\").classList.remove(\"hidden\");\n document.getElementById(`spinner`).classList.add(\"hidden\");\n }\n }, 1000);\n\n function setPrice() {\n total.value = price;\n let totalBaskets = document.getElementById(`total-baskets`);\n const totalInputs = document.querySelectorAll(\".total-input\");\n let totalSum = 0;\n totalInputs.forEach(function (input) {\n totalSum += parseFloat(input.value);\n });\n totalBaskets.innerHTML = totalSum;\n\n const event = document.createEvent(\"Event\");\n event.initEvent(\"priced\", true, true);\n document.dispatchEvent(event);\n }\n });\n }\n }\n\n updateBasketHeader() {\n let basket = sessionStorage.getItem(\"baskets\");\n let count = basket ? JSON.parse(basket).length : 0;\n document.getElementById(`cart1`).innerHTML = count;\n document.getElementById(`cart2`).innerHTML = count;\n }\n\n //\n // Layers functions\n //\n\n single_bike_layer(elem) {\n let bike;\n if (elem && elem.dataset) {\n bike = JSON.parse(elem.dataset.bike);\n let price = parseFloat(elem.dataset.price);\n let tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"view_item\",\n ecommerce: {\n item_list_name: \"Bikes\",\n items: [\n {\n item_id: bike.model_id.toString(),\n item_name: bike.model_title,\n currency: \"EUR\",\n index: 0,\n item_brand: bike.manufacturer,\n item_category: bike.product_group_name,\n price: parseFloat(price),\n quantity: 1,\n },\n ],\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - view_item\", dataLayer);\n }\n }\n\n bikes_layer() {\n let bikesData = [];\n let bikes = document.getElementsByClassName(\"bike-info\");\n for (let i = 0; i < bikes.length; i++) {\n let bike = JSON.parse(bikes[i].dataset.bike);\n bikesData.push({\n item_id: bike.model_id.toString(),\n item_name: bike.model_title,\n currency: \"EUR\",\n index: i,\n item_brand: bike.manufacturer,\n item_category: bike.product_group_name,\n price: parseFloat(bikes[i].dataset.price),\n quantity: 1,\n });\n }\n let tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"view_item_list\",\n ecommerce: {\n item_list_name: \"Bikes\",\n items: bikesData,\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - view_item_list\", dataLayer);\n }\n\n cart_layer() {\n document.removeEventListener(\"priced\", this.cart_layer);\n const items = document.getElementsByClassName(\"cart-item\");\n const options = document.querySelectorAll(\"input.extra:checked\");\n const total = document.getElementById(`total-${this.basketValue}`);\n let tmp;\n let itemsData = [];\n for (let i = 0; i < items.length; i++) {\n let item = items[i].dataset;\n tmp = JSON.parse(item.value);\n if (item.type === \"bike\") {\n itemsData.push({\n item_id: tmp.modelId.toString(),\n item_name: tmp.modelName,\n currency: \"EUR\",\n index: i,\n item_brand: tmp.manufacturer,\n item_category: tmp.category,\n price: parseFloat(tmp.pricePerUnit),\n location_id: tmp.plocId.toString(),\n quantity: tmp.unitCount,\n });\n }\n if (item.type === \"tour\") {\n itemsData.push({\n item_id: tmp.tourId.toString(),\n item_name: tmp.details.tourName,\n currency: \"EUR\",\n index: i,\n item_category: tmp.details.categoryName,\n price: parseFloat(tmp.pricePerUnit),\n location_id: tmp.details.locId.toString(),\n quantity: tmp.unitCount,\n });\n }\n }\n for (let i = 0; i < options.length; i++) {\n let item = options[i].dataset;\n tmp = JSON.parse(item.item);\n itemsData.push({\n item_id: tmp.prodId.toString(),\n item_name: tmp.title,\n currency: \"EUR\",\n index: i,\n item_category: tmp.prodType,\n price: parseFloat(tmp.price),\n });\n }\n tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n let session = JSON.stringify({\n currency: \"EUR\",\n value: parseFloat(total.innerText),\n items: itemsData,\n enhanced_conversion_data: user,\n });\n sessionStorage.setItem(\"cart_layer\", session);\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"view_cart\",\n ecommerce: { session },\n });\n console.log(\"DATALAYER - view_cart\", dataLayer);\n }\n\n addToCart_layer(total, items) {\n let tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"add_to_cart\",\n ecommerce: {\n currency: \"EUR\",\n value: parseFloat(total),\n items: items,\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - add_to_cart\", dataLayer);\n }\n\n removeFromCart_layer(total, items) {\n let tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"remove_from_cart\",\n ecommerce: {\n currency: \"EUR\",\n value: parseFloat(total),\n items: items,\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - remove_from_cart\", dataLayer);\n }\n}\n","import { Turbo } from \"@hotwired/turbo-rails\";\nimport { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n\n static targets = [ \"locale\" ];\n\n connect() {\n let storedBasket = JSON.parse(sessionStorage.getItem(\"baskets\") || \"[]\");\n if (storedBasket.length == 0) document.getElementById(\"spinner\").classList.add(\"hidden\");\n }\n \n step3() {\n const lang = document.getElementById('locale-target').value;\n let url2 = `/${lang}/agents/step3`;\n\n document.getElementById('spinner').classList.remove(\"hidden\");\n const cart_layer = JSON.parse(sessionStorage.getItem(\"cart_layer\"));\n if (cart_layer) {\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"begin_checkout\",\n ecommerce: { cart_layer },\n });\n console.log(\"DATALAYER - begin_checkout\", dataLayer);\n }\n Turbo.visit(url2, { action: \"replace\" });\n }\n\n payBooking() {\n let terms = document.getElementById(\"terms\");\n let basketsString = sessionStorage.getItem(\"baskets\");\n let baskets = JSON.parse(basketsString);\n if (terms.checked) {\n document.getElementById(\"spinner\").classList.remove(\"hidden\");\n baskets.forEach((basket) => {\n let comment = document.getElementById(`comment-${basket}`).value;\n let email = document.getElementById(`email-${basket}`).value;\n let url = `/booking_process/send_comment?basket=${basket}&comment=${comment}`;\n console.log(url);\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n console.log(data);\n });\n });\n\n let url2 = `/agents/create-payment?baskets=${baskets}`;\n console.log(url2);\n fetch(url2)\n .then((response) => response.json())\n .then((data) => {\n console.log(data);\n window.location = `https://www.vivapayments.com/web/checkout?ref=${data.ref}`;\n });\n }\n }\n\n closeBaskets() {\n let terms = document.getElementById(\"terms\");\n let basketsString = sessionStorage.getItem(\"baskets\");\n let baskets = JSON.parse(basketsString);\n if ( !Array.isArray(baskets) )\n baskets = [baskets]\n if (terms.checked) {\n document.getElementById(\"spinner\").classList.remove(\"hidden\");\n baskets.forEach((basket) => {\n let comment = document.getElementById(`comment-${basket}`).value;\n let email = document.getElementById(`email-${basket}`).value;\n let url = `/booking_process/send_comment?basket=${basket}&comment=${comment}`;\n \n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n let url2\n if (document.getElementById(\"group_name\")) {\n const name = document.getElementById(\"group_name\").innerHTML;\n url2 = `/agents/close_basket?basket=${basket}&email=${email}&group_name=${name}`;\n } else {\n url2 = `/agents/close_basket?basket=${basket}&email=${email}`;\n }\n fetch(url2).then((response) => {\n this.removeBasketFromSession(basket)\n let modal = document.getElementById(\"modal\");\n modal.classList.remove(\"hidden\");\n document.getElementById(\"spinner\").classList.add(\"hidden\");\n });\n });\n })\n \n }\n }\n\n finish(event) {\n window.location.href = \"/\";\n }\n\n removeBasketFromSession(value) {\n let storedBasket = sessionStorage.getItem(\"baskets\");\n let basketArray = storedBasket ? JSON.parse(storedBasket) : [];\n if ( !Array.isArray(basketArray) )\n basketArray = [basketArray]\n if (value !== undefined) {\n let indexToRemove = basketArray.indexOf(parseInt(value));\n if (indexToRemove !== -1) {\n basketArray.splice(indexToRemove, 1);\n }\n } else {\n basketArray = [];\n }\n let updatedBasket = JSON.stringify(basketArray);\n sessionStorage.setItem(\"baskets\", updatedBasket);\n }\n\n}\n","import { Controller } from 'stimulus';\n\n/*\n * Avatar Edition controller\n * Let to create a dropzone zone to\n * upload and preview files.\n *\n */\n\nexport default class extends Controller {\n\n\tstatic targets = [\n\t \t'avatar',\n\t \t'dropzoneMsg',\n\t \t'removeAvatar'\n ];\n\n\tconnect () {}\n\n\tremoveAvatar () {\n\t\tthis.avatarTarget.remove();\n\t\tthis.dropzoneMsgTarget.classList.remove('border-l-2');\n\t\tthis.removeAvatarTarget.value = true;\n\t}\n\n}","import { Controller } from \"stimulus\"\nimport { Turbo } from \"@hotwired/turbo-rails\";\n\nexport default class extends Controller {\n connect() {\n }\n\n rate(event) {\n let rating = event.target.dataset.value;\n let model = event.target.dataset.model;\n let index = event.target.dataset.index;\n const url = `/bikes_rating/rate?rating=${rating}&model_id=${model}&index=${index}`;\n\n Turbo.visit(url, { action: 'replace' });\n }\n\n}","import { Turbo } from \"@hotwired/turbo-rails\";\nimport { Controller } from \"stimulus\";\n\nconst countries = {\n Germany: \"DE\",\n Austria: \"AT\",\n Switzerland: \"CH\",\n Sweden: \"SE\",\n Norway: \"NO\",\n Finland: \"FI\",\n Netherlands: \"NL\",\n Belgium: \"BE\",\n Denmark: \"DK\",\n \"United Kingdom\": \"GB\",\n Spain: \"ES\",\n Portugal: \"PT\",\n Italy: \"IT\",\n France: \"FR\",\n Afghanistan: \"AF\",\n \"Aland Islands\": \"AX\",\n Albania: \"AL\",\n Algeria: \"DZ\",\n \"American Samoa\": \"AS\",\n Andorra: \"AD\",\n Angola: \"AO\",\n Anguilla: \"AI\",\n Antarctica: \"AQ\",\n \"Antigua and Barbuda\": \"AG\",\n Argentina: \"AR\",\n Armenia: \"AM\",\n Aruba: \"AW\",\n Australia: \"AU\",\n Azerbaijan: \"AZ\",\n Bahamas: \"BS\",\n Bahrain: \"BH\",\n Bangladesh: \"BD\",\n Barbados: \"BB\",\n Belarus: \"BY\",\n Belize: \"BZ\",\n Benin: \"BJ\",\n Bermuda: \"BM\",\n Bhutan: \"BT\",\n Bolivia: \"BO\",\n \"Bonaire, Saint Eustatius and Saba\": \"BQ\",\n \"Bosnia and Herzegovina\": \"BA\",\n Botswana: \"BW\",\n \"Bouvet Island\": \"BV\",\n Brazil: \"BR\",\n \"British Indian Ocean Territory\": \"IO\",\n \"British Virgin Islands\": \"VG\",\n Brunei: \"BN\",\n Bulgaria: \"BG\",\n \"Burkina Faso\": \"BF\",\n Burundi: \"BI\",\n Cambodia: \"KH\",\n Cameroon: \"CM\",\n Canada: \"CA\",\n \"Cape Verde\": \"CV\",\n \"Cayman Islands\": \"KY\",\n \"Central African Republic\": \"CF\",\n Chad: \"TD\",\n Chile: \"CL\",\n China: \"CN\",\n \"Christmas Island\": \"CX\",\n \"Cocos Islands\": \"CC\",\n Colombia: \"CO\",\n Comoros: \"KM\",\n \"Cook Islands\": \"CK\",\n \"Costa Rica\": \"CR\",\n Croatia: \"HR\",\n Cuba: \"CU\",\n Curacao: \"CW\",\n Cyprus: \"CY\",\n \"Czech Republic\": \"CZ\",\n \"Democratic Republic of the Congo\": \"CD\",\n Djibouti: \"DJ\",\n Dominica: \"DM\",\n \"Dominican Republic\": \"DO\",\n \"East Timor\": \"TL\",\n Ecuador: \"EC\",\n Egypt: \"EG\",\n \"El Salvador\": \"SV\",\n \"Equatorial Guinea\": \"GQ\",\n Eritrea: \"ER\",\n Estonia: \"EE\",\n Ethiopia: \"ET\",\n \"Falkland Islands\": \"FK\",\n \"Faroe Islands\": \"FO\",\n Fiji: \"FJ\",\n \"French Guiana\": \"GF\",\n \"French Polynesia\": \"PF\",\n \"French Southern Territories\": \"TF\",\n Gabon: \"GA\",\n Gambia: \"GM\",\n Georgia: \"GE\",\n Ghana: \"GH\",\n Gibraltar: \"GI\",\n Greece: \"GR\",\n Greenland: \"GL\",\n Grenada: \"GD\",\n Guadeloupe: \"GP\",\n Guam: \"GU\",\n Guatemala: \"GT\",\n Guernsey: \"GG\",\n Guinea: \"GN\",\n \"Guinea-Bissau\": \"GW\",\n Guyana: \"GY\",\n Haiti: \"HT\",\n \"Heard Island and McDonald Islands\": \"HM\",\n Honduras: \"HN\",\n \"Hong Kong\": \"HK\",\n Hungary: \"HU\",\n Iceland: \"IS\",\n India: \"IN\",\n Indonesia: \"ID\",\n Iran: \"IR\",\n Iraq: \"IQ\",\n Ireland: \"IE\",\n \"Isle of Man\": \"IM\",\n Israel: \"IL\",\n \"Ivory Coast\": \"CI\",\n Jamaica: \"JM\",\n Japan: \"JP\",\n Jersey: \"JE\",\n Jordan: \"JO\",\n Kazakhstan: \"KZ\",\n Kenya: \"KE\",\n Kiribati: \"KI\",\n Kosovo: \"XK\",\n Kuwait: \"KW\",\n Kyrgyzstan: \"KG\",\n Laos: \"LA\",\n Latvia: \"LV\",\n Lebanon: \"LB\",\n Lesotho: \"LS\",\n Liberia: \"LR\",\n Libya: \"LY\",\n Liechtenstein: \"LI\",\n Lithuania: \"LT\",\n Luxembourg: \"LU\",\n Macao: \"MO\",\n Macedonia: \"MK\",\n Madagascar: \"MG\",\n Malawi: \"MW\",\n Malaysia: \"MY\",\n Maldives: \"MV\",\n Mali: \"ML\",\n Malta: \"MT\",\n \"Marshall Islands\": \"MH\",\n Martinique: \"MQ\",\n Mauritania: \"MR\",\n Mauritius: \"MU\",\n Mayotte: \"YT\",\n Mexico: \"MX\",\n Micronesia: \"FM\",\n Moldova: \"MD\",\n Monaco: \"MC\",\n Mongolia: \"MN\",\n Montenegro: \"ME\",\n Montserrat: \"MS\",\n Morocco: \"MA\",\n Mozambique: \"MZ\",\n Myanmar: \"MM\",\n Namibia: \"NA\",\n Nauru: \"NR\",\n Nepal: \"NP\",\n \"New Caledonia\": \"NC\",\n \"New Zealand\": \"NZ\",\n Nicaragua: \"NI\",\n Niger: \"NE\",\n Nigeria: \"NG\",\n Niue: \"NU\",\n \"Norfolk Island\": \"NF\",\n \"North Korea\": \"KP\",\n \"Northern Mariana Islands\": \"MP\",\n Oman: \"OM\",\n Pakistan: \"PK\",\n Palau: \"PW\",\n \"Palestinian Territory\": \"PS\",\n Panama: \"PA\",\n \"Papua New Guinea\": \"PG\",\n Paraguay: \"PY\",\n Peru: \"PE\",\n Philippines: \"PH\",\n Pitcairn: \"PN\",\n Poland: \"PL\",\n \"Puerto Rico\": \"PR\",\n Qatar: \"QA\",\n \"Republic of the Congo\": \"CG\",\n Reunion: \"RE\",\n Romania: \"RO\",\n Russia: \"RU\",\n Rwanda: \"RW\",\n \"Saint Barthelemy\": \"BL\",\n \"Saint Helena\": \"SH\",\n \"Saint Kitts and Nevis\": \"KN\",\n \"Saint Lucia\": \"LC\",\n \"Saint Martin\": \"MF\",\n \"Saint Pierre and Miquelon\": \"PM\",\n \"Saint Vincent and the Grenadines\": \"VC\",\n Samoa: \"WS\",\n \"San Marino\": \"SM\",\n \"Sao Tome and Principe\": \"ST\",\n \"Saudi Arabia\": \"SA\",\n Senegal: \"SN\",\n Serbia: \"RS\",\n Seychelles: \"SC\",\n \"Sierra Leone\": \"SL\",\n Singapore: \"SG\",\n \"Sint Maarten\": \"SX\",\n Slovakia: \"SK\",\n Slovenia: \"SI\",\n \"Solomon Islands\": \"SB\",\n Somalia: \"SO\",\n \"South Africa\": \"ZA\",\n \"South Georgia and the South Sandwich Islands\": \"GS\",\n \"South Korea\": \"KR\",\n \"South Sudan\": \"SS\",\n \"Sri Lanka\": \"LK\",\n Sudan: \"SD\",\n Suriname: \"SR\",\n \"Svalbard and Jan Mayen\": \"SJ\",\n Swaziland: \"SZ\",\n Syria: \"SY\",\n Taiwan: \"TW\",\n Tajikistan: \"TJ\",\n Tanzania: \"TZ\",\n Thailand: \"TH\",\n Togo: \"TG\",\n Tokelau: \"TK\",\n Tonga: \"TO\",\n \"Trinidad and Tobago\": \"TT\",\n Tunisia: \"TN\",\n Turkey: \"TR\",\n Turkmenistan: \"TM\",\n \"Turks and Caicos Islands\": \"TC\",\n Tuvalu: \"TV\",\n \"U.S. Virgin Islands\": \"VI\",\n Uganda: \"UG\",\n Ukraine: \"UA\",\n \"United Arab Emirates\": \"AE\",\n \"United States\": \"US\",\n \"United States Minor Outlying Islands\": \"UM\",\n Uruguay: \"UY\",\n Uzbekistan: \"UZ\",\n Vanuatu: \"VU\",\n Vatican: \"VA\",\n Venezuela: \"VE\",\n Vietnam: \"VN\",\n \"Wallis and Futuna\": \"WF\",\n \"Western Sahara\": \"EH\",\n Yemen: \"YE\",\n Zambia: \"ZM\",\n Zimbabwe: \"ZW\",\n};\nconst mobiles = [\n {\n name: \"Germany\",\n dial_code: \"+49\",\n code: \"DE\",\n },\n {\n name: \"Austria\",\n dial_code: \"+43\",\n code: \"AT\",\n },\n {\n name: \"Switzerland\",\n dial_code: \"+41\",\n code: \"CH\",\n },\n {\n name: \"Sweden\",\n dial_code: \"+46\",\n code: \"SE\",\n },\n {\n name: \"Norway\",\n dial_code: \"+47\",\n code: \"NO\",\n },\n {\n name: \"Finland\",\n dial_code: \"+358\",\n code: \"FI\",\n },\n {\n name: \"Netherlands\",\n dial_code: \"+31\",\n code: \"NL\",\n },\n {\n name: \"Belgium\",\n dial_code: \"+32\",\n code: \"BE\",\n },\n {\n name: \"Denmark\",\n dial_code: \"+45\",\n code: \"DK\",\n },\n {\n name: \"United Kingdom\",\n dial_code: \"+44\",\n code: \"GB\",\n },\n {\n name: \"Spain\",\n dial_code: \"+34\",\n code: \"ES\",\n },\n {\n name: \"Portugal\",\n dial_code: \"+351\",\n code: \"PT\",\n },\n {\n name: \"Italy\",\n dial_code: \"+39\",\n code: \"IT\",\n },\n {\n name: \"France\",\n dial_code: \"+33\",\n code: \"FR\",\n },\n {\n name: \"Afghanistan\",\n dial_code: \"+93\",\n code: \"AF\",\n },\n {\n name: \"Aland Islands\",\n dial_code: \"+358\",\n code: \"AX\",\n },\n {\n name: \"Albania\",\n dial_code: \"+355\",\n code: \"AL\",\n },\n {\n name: \"Algeria\",\n dial_code: \"+213\",\n code: \"DZ\",\n },\n {\n name: \"AmericanSamoa\",\n dial_code: \"+1684\",\n code: \"AS\",\n },\n {\n name: \"Andorra\",\n dial_code: \"+376\",\n code: \"AD\",\n },\n {\n name: \"Angola\",\n dial_code: \"+244\",\n code: \"AO\",\n },\n {\n name: \"Anguilla\",\n dial_code: \"+1264\",\n code: \"AI\",\n },\n {\n name: \"Antarctica\",\n dial_code: \"+672\",\n code: \"AQ\",\n },\n {\n name: \"Antigua and Barbuda\",\n dial_code: \"+1268\",\n code: \"AG\",\n },\n {\n name: \"Argentina\",\n dial_code: \"+54\",\n code: \"AR\",\n },\n {\n name: \"Armenia\",\n dial_code: \"+374\",\n code: \"AM\",\n },\n {\n name: \"Aruba\",\n dial_code: \"+297\",\n code: \"AW\",\n },\n {\n name: \"Australia\",\n dial_code: \"+61\",\n code: \"AU\",\n },\n {\n name: \"Azerbaijan\",\n dial_code: \"+994\",\n code: \"AZ\",\n },\n {\n name: \"Bahamas\",\n dial_code: \"+1242\",\n code: \"BS\",\n },\n {\n name: \"Bahrain\",\n dial_code: \"+973\",\n code: \"BH\",\n },\n {\n name: \"Bangladesh\",\n dial_code: \"+880\",\n code: \"BD\",\n },\n {\n name: \"Barbados\",\n dial_code: \"+1246\",\n code: \"BB\",\n },\n {\n name: \"Belarus\",\n dial_code: \"+375\",\n code: \"BY\",\n },\n {\n name: \"Belize\",\n dial_code: \"+501\",\n code: \"BZ\",\n },\n {\n name: \"Benin\",\n dial_code: \"+229\",\n code: \"BJ\",\n },\n {\n name: \"Bermuda\",\n dial_code: \"+1441\",\n code: \"BM\",\n },\n {\n name: \"Bhutan\",\n dial_code: \"+975\",\n code: \"BT\",\n },\n {\n name: \"Bolivia, Plurinational State of\",\n dial_code: \"+591\",\n code: \"BO\",\n },\n {\n name: \"Bosnia and Herzegovina\",\n dial_code: \"+387\",\n code: \"BA\",\n },\n {\n name: \"Botswana\",\n dial_code: \"+267\",\n code: \"BW\",\n },\n {\n name: \"Brazil\",\n dial_code: \"+55\",\n code: \"BR\",\n },\n {\n name: \"British Indian Ocean Territory\",\n dial_code: \"+246\",\n code: \"IO\",\n },\n {\n name: \"Brunei Darussalam\",\n dial_code: \"+673\",\n code: \"BN\",\n },\n {\n name: \"Bulgaria\",\n dial_code: \"+359\",\n code: \"BG\",\n },\n {\n name: \"Burkina Faso\",\n dial_code: \"+226\",\n code: \"BF\",\n },\n {\n name: \"Burundi\",\n dial_code: \"+257\",\n code: \"BI\",\n },\n {\n name: \"Cambodia\",\n dial_code: \"+855\",\n code: \"KH\",\n },\n {\n name: \"Cameroon\",\n dial_code: \"+237\",\n code: \"CM\",\n },\n {\n name: \"Canada\",\n dial_code: \"+1\",\n code: \"CA\",\n },\n {\n name: \"Cape Verde\",\n dial_code: \"+238\",\n code: \"CV\",\n },\n {\n name: \"Cayman Islands\",\n dial_code: \"+ 345\",\n code: \"KY\",\n },\n {\n name: \"Central African Republic\",\n dial_code: \"+236\",\n code: \"CF\",\n },\n {\n name: \"Chad\",\n dial_code: \"+235\",\n code: \"TD\",\n },\n {\n name: \"Chile\",\n dial_code: \"+56\",\n code: \"CL\",\n },\n {\n name: \"China\",\n dial_code: \"+86\",\n code: \"CN\",\n },\n {\n name: \"Christmas Island\",\n dial_code: \"+61\",\n code: \"CX\",\n },\n {\n name: \"Cocos (Keeling) Islands\",\n dial_code: \"+61\",\n code: \"CC\",\n },\n {\n name: \"Colombia\",\n dial_code: \"+57\",\n code: \"CO\",\n },\n {\n name: \"Comoros\",\n dial_code: \"+269\",\n code: \"KM\",\n },\n {\n name: \"Congo\",\n dial_code: \"+242\",\n code: \"CG\",\n },\n {\n name: \"Congo, The Democratic Republic of the Congo\",\n dial_code: \"+243\",\n code: \"CD\",\n },\n {\n name: \"Cook Islands\",\n dial_code: \"+682\",\n code: \"CK\",\n },\n {\n name: \"Costa Rica\",\n dial_code: \"+506\",\n code: \"CR\",\n },\n {\n name: \"Cote d'Ivoire\",\n dial_code: \"+225\",\n code: \"CI\",\n },\n {\n name: \"Croatia\",\n dial_code: \"+385\",\n code: \"HR\",\n },\n {\n name: \"Cuba\",\n dial_code: \"+53\",\n code: \"CU\",\n },\n {\n name: \"Cyprus\",\n dial_code: \"+357\",\n code: \"CY\",\n },\n {\n name: \"Czech Republic\",\n dial_code: \"+420\",\n code: \"CZ\",\n },\n {\n name: \"Djibouti\",\n dial_code: \"+253\",\n code: \"DJ\",\n },\n {\n name: \"Dominica\",\n dial_code: \"+1767\",\n code: \"DM\",\n },\n {\n name: \"Dominican Republic\",\n dial_code: \"+1849\",\n code: \"DO\",\n },\n {\n name: \"Ecuador\",\n dial_code: \"+593\",\n code: \"EC\",\n },\n {\n name: \"Egypt\",\n dial_code: \"+20\",\n code: \"EG\",\n },\n {\n name: \"El Salvador\",\n dial_code: \"+503\",\n code: \"SV\",\n },\n {\n name: \"Equatorial Guinea\",\n dial_code: \"+240\",\n code: \"GQ\",\n },\n {\n name: \"Eritrea\",\n dial_code: \"+291\",\n code: \"ER\",\n },\n {\n name: \"Estonia\",\n dial_code: \"+372\",\n code: \"EE\",\n },\n {\n name: \"Ethiopia\",\n dial_code: \"+251\",\n code: \"ET\",\n },\n {\n name: \"Falkland Islands (Malvinas)\",\n dial_code: \"+500\",\n code: \"FK\",\n },\n {\n name: \"Faroe Islands\",\n dial_code: \"+298\",\n code: \"FO\",\n },\n {\n name: \"Fiji\",\n dial_code: \"+679\",\n code: \"FJ\",\n },\n {\n name: \"French Guiana\",\n dial_code: \"+594\",\n code: \"GF\",\n },\n {\n name: \"French Polynesia\",\n dial_code: \"+689\",\n code: \"PF\",\n },\n {\n name: \"Gabon\",\n dial_code: \"+241\",\n code: \"GA\",\n },\n {\n name: \"Gambia\",\n dial_code: \"+220\",\n code: \"GM\",\n },\n {\n name: \"Georgia\",\n dial_code: \"+995\",\n code: \"GE\",\n },\n {\n name: \"Ghana\",\n dial_code: \"+233\",\n code: \"GH\",\n },\n {\n name: \"Gibraltar\",\n dial_code: \"+350\",\n code: \"GI\",\n },\n {\n name: \"Greece\",\n dial_code: \"+30\",\n code: \"GR\",\n },\n {\n name: \"Greenland\",\n dial_code: \"+299\",\n code: \"GL\",\n },\n {\n name: \"Grenada\",\n dial_code: \"+1473\",\n code: \"GD\",\n },\n {\n name: \"Guadeloupe\",\n dial_code: \"+590\",\n code: \"GP\",\n },\n {\n name: \"Guam\",\n dial_code: \"+1671\",\n code: \"GU\",\n },\n {\n name: \"Guatemala\",\n dial_code: \"+502\",\n code: \"GT\",\n },\n {\n name: \"Guernsey\",\n dial_code: \"+44\",\n code: \"GG\",\n },\n {\n name: \"Guinea\",\n dial_code: \"+224\",\n code: \"GN\",\n },\n {\n name: \"Guinea-Bissau\",\n dial_code: \"+245\",\n code: \"GW\",\n },\n {\n name: \"Guyana\",\n dial_code: \"+595\",\n code: \"GY\",\n },\n {\n name: \"Haiti\",\n dial_code: \"+509\",\n code: \"HT\",\n },\n {\n name: \"Holy See (Vatican City State)\",\n dial_code: \"+379\",\n code: \"VA\",\n },\n {\n name: \"Honduras\",\n dial_code: \"+504\",\n code: \"HN\",\n },\n {\n name: \"Hong Kong\",\n dial_code: \"+852\",\n code: \"HK\",\n },\n {\n name: \"Hungary\",\n dial_code: \"+36\",\n code: \"HU\",\n },\n {\n name: \"Iceland\",\n dial_code: \"+354\",\n code: \"IS\",\n },\n {\n name: \"India\",\n dial_code: \"+91\",\n code: \"IN\",\n },\n {\n name: \"Indonesia\",\n dial_code: \"+62\",\n code: \"ID\",\n },\n {\n name: \"Iran, Islamic Republic of Persian Gulf\",\n dial_code: \"+98\",\n code: \"IR\",\n },\n {\n name: \"Iraq\",\n dial_code: \"+964\",\n code: \"IQ\",\n },\n {\n name: \"Ireland\",\n dial_code: \"+353\",\n code: \"IE\",\n },\n {\n name: \"Isle of Man\",\n dial_code: \"+44\",\n code: \"IM\",\n },\n {\n name: \"Israel\",\n dial_code: \"+972\",\n code: \"IL\",\n },\n {\n name: \"Jamaica\",\n dial_code: \"+1876\",\n code: \"JM\",\n },\n {\n name: \"Japan\",\n dial_code: \"+81\",\n code: \"JP\",\n },\n {\n name: \"Jersey\",\n dial_code: \"+44\",\n code: \"JE\",\n },\n {\n name: \"Jordan\",\n dial_code: \"+962\",\n code: \"JO\",\n },\n {\n name: \"Kazakhstan\",\n dial_code: \"+77\",\n code: \"KZ\",\n },\n {\n name: \"Kenya\",\n dial_code: \"+254\",\n code: \"KE\",\n },\n {\n name: \"Kiribati\",\n dial_code: \"+686\",\n code: \"KI\",\n },\n {\n name: \"Korea, Democratic People's Republic of Korea\",\n dial_code: \"+850\",\n code: \"KP\",\n },\n {\n name: \"Korea, Republic of South Korea\",\n dial_code: \"+82\",\n code: \"KR\",\n },\n {\n name: \"Kuwait\",\n dial_code: \"+965\",\n code: \"KW\",\n },\n {\n name: \"Kyrgyzstan\",\n dial_code: \"+996\",\n code: \"KG\",\n },\n {\n name: \"Laos\",\n dial_code: \"+856\",\n code: \"LA\",\n },\n {\n name: \"Latvia\",\n dial_code: \"+371\",\n code: \"LV\",\n },\n {\n name: \"Lebanon\",\n dial_code: \"+961\",\n code: \"LB\",\n },\n {\n name: \"Lesotho\",\n dial_code: \"+266\",\n code: \"LS\",\n },\n {\n name: \"Liberia\",\n dial_code: \"+231\",\n code: \"LR\",\n },\n {\n name: \"Libyan Arab Jamahiriya\",\n dial_code: \"+218\",\n code: \"LY\",\n },\n {\n name: \"Liechtenstein\",\n dial_code: \"+423\",\n code: \"LI\",\n },\n {\n name: \"Lithuania\",\n dial_code: \"+370\",\n code: \"LT\",\n },\n {\n name: \"Luxembourg\",\n dial_code: \"+352\",\n code: \"LU\",\n },\n {\n name: \"Macao\",\n dial_code: \"+853\",\n code: \"MO\",\n },\n {\n name: \"Macedonia\",\n dial_code: \"+389\",\n code: \"MK\",\n },\n {\n name: \"Madagascar\",\n dial_code: \"+261\",\n code: \"MG\",\n },\n {\n name: \"Malawi\",\n dial_code: \"+265\",\n code: \"MW\",\n },\n {\n name: \"Malaysia\",\n dial_code: \"+60\",\n code: \"MY\",\n },\n {\n name: \"Maldives\",\n dial_code: \"+960\",\n code: \"MV\",\n },\n {\n name: \"Mali\",\n dial_code: \"+223\",\n code: \"ML\",\n },\n {\n name: \"Malta\",\n dial_code: \"+356\",\n code: \"MT\",\n },\n {\n name: \"Marshall Islands\",\n dial_code: \"+692\",\n code: \"MH\",\n },\n {\n name: \"Martinique\",\n dial_code: \"+596\",\n code: \"MQ\",\n },\n {\n name: \"Mauritania\",\n dial_code: \"+222\",\n code: \"MR\",\n },\n {\n name: \"Mauritius\",\n dial_code: \"+230\",\n code: \"MU\",\n },\n {\n name: \"Mayotte\",\n dial_code: \"+262\",\n code: \"YT\",\n },\n {\n name: \"Mexico\",\n dial_code: \"+52\",\n code: \"MX\",\n },\n {\n name: \"Micronesia, Federated States of Micronesia\",\n dial_code: \"+691\",\n code: \"FM\",\n },\n {\n name: \"Moldova\",\n dial_code: \"+373\",\n code: \"MD\",\n },\n {\n name: \"Monaco\",\n dial_code: \"+377\",\n code: \"MC\",\n },\n {\n name: \"Mongolia\",\n dial_code: \"+976\",\n code: \"MN\",\n },\n {\n name: \"Montenegro\",\n dial_code: \"+382\",\n code: \"ME\",\n },\n {\n name: \"Montserrat\",\n dial_code: \"+1664\",\n code: \"MS\",\n },\n {\n name: \"Morocco\",\n dial_code: \"+212\",\n code: \"MA\",\n },\n {\n name: \"Mozambique\",\n dial_code: \"+258\",\n code: \"MZ\",\n },\n {\n name: \"Myanmar\",\n dial_code: \"+95\",\n code: \"MM\",\n },\n {\n name: \"Namibia\",\n dial_code: \"+264\",\n code: \"NA\",\n },\n {\n name: \"Nauru\",\n dial_code: \"+674\",\n code: \"NR\",\n },\n {\n name: \"Nepal\",\n dial_code: \"+977\",\n code: \"NP\",\n },\n {\n name: \"Netherlands Antilles\",\n dial_code: \"+599\",\n code: \"AN\",\n },\n {\n name: \"New Caledonia\",\n dial_code: \"+687\",\n code: \"NC\",\n },\n {\n name: \"New Zealand\",\n dial_code: \"+64\",\n code: \"NZ\",\n },\n {\n name: \"Nicaragua\",\n dial_code: \"+505\",\n code: \"NI\",\n },\n {\n name: \"Niger\",\n dial_code: \"+227\",\n code: \"NE\",\n },\n {\n name: \"Nigeria\",\n dial_code: \"+234\",\n code: \"NG\",\n },\n {\n name: \"Niue\",\n dial_code: \"+683\",\n code: \"NU\",\n },\n {\n name: \"Norfolk Island\",\n dial_code: \"+672\",\n code: \"NF\",\n },\n {\n name: \"Northern Mariana Islands\",\n dial_code: \"+1670\",\n code: \"MP\",\n },\n {\n name: \"Oman\",\n dial_code: \"+968\",\n code: \"OM\",\n },\n {\n name: \"Pakistan\",\n dial_code: \"+92\",\n code: \"PK\",\n },\n {\n name: \"Palau\",\n dial_code: \"+680\",\n code: \"PW\",\n },\n {\n name: \"Palestinian Territory, Occupied\",\n dial_code: \"+970\",\n code: \"PS\",\n },\n {\n name: \"Panama\",\n dial_code: \"+507\",\n code: \"PA\",\n },\n {\n name: \"Papua New Guinea\",\n dial_code: \"+675\",\n code: \"PG\",\n },\n {\n name: \"Paraguay\",\n dial_code: \"+595\",\n code: \"PY\",\n },\n {\n name: \"Peru\",\n dial_code: \"+51\",\n code: \"PE\",\n },\n {\n name: \"Philippines\",\n dial_code: \"+63\",\n code: \"PH\",\n },\n {\n name: \"Pitcairn\",\n dial_code: \"+872\",\n code: \"PN\",\n },\n {\n name: \"Poland\",\n dial_code: \"+48\",\n code: \"PL\",\n },\n {\n name: \"Puerto Rico\",\n dial_code: \"+1939\",\n code: \"PR\",\n },\n {\n name: \"Qatar\",\n dial_code: \"+974\",\n code: \"QA\",\n },\n {\n name: \"Romania\",\n dial_code: \"+40\",\n code: \"RO\",\n },\n {\n name: \"Russia\",\n dial_code: \"+7\",\n code: \"RU\",\n },\n {\n name: \"Rwanda\",\n dial_code: \"+250\",\n code: \"RW\",\n },\n {\n name: \"Reunion\",\n dial_code: \"+262\",\n code: \"RE\",\n },\n {\n name: \"Saint Barthelemy\",\n dial_code: \"+590\",\n code: \"BL\",\n },\n {\n name: \"Saint Helena, Ascension and Tristan Da Cunha\",\n dial_code: \"+290\",\n code: \"SH\",\n },\n {\n name: \"Saint Kitts and Nevis\",\n dial_code: \"+1869\",\n code: \"KN\",\n },\n {\n name: \"Saint Lucia\",\n dial_code: \"+1758\",\n code: \"LC\",\n },\n {\n name: \"Saint Martin\",\n dial_code: \"+590\",\n code: \"MF\",\n },\n {\n name: \"Saint Pierre and Miquelon\",\n dial_code: \"+508\",\n code: \"PM\",\n },\n {\n name: \"Saint Vincent and the Grenadines\",\n dial_code: \"+1784\",\n code: \"VC\",\n },\n {\n name: \"Samoa\",\n dial_code: \"+685\",\n code: \"WS\",\n },\n {\n name: \"San Marino\",\n dial_code: \"+378\",\n code: \"SM\",\n },\n {\n name: \"Sao Tome and Principe\",\n dial_code: \"+239\",\n code: \"ST\",\n },\n {\n name: \"Saudi Arabia\",\n dial_code: \"+966\",\n code: \"SA\",\n },\n {\n name: \"Senegal\",\n dial_code: \"+221\",\n code: \"SN\",\n },\n {\n name: \"Serbia\",\n dial_code: \"+381\",\n code: \"RS\",\n },\n {\n name: \"Seychelles\",\n dial_code: \"+248\",\n code: \"SC\",\n },\n {\n name: \"Sierra Leone\",\n dial_code: \"+232\",\n code: \"SL\",\n },\n {\n name: \"Singapore\",\n dial_code: \"+65\",\n code: \"SG\",\n },\n {\n name: \"Slovakia\",\n dial_code: \"+421\",\n code: \"SK\",\n },\n {\n name: \"Slovenia\",\n dial_code: \"+386\",\n code: \"SI\",\n },\n {\n name: \"Solomon Islands\",\n dial_code: \"+677\",\n code: \"SB\",\n },\n {\n name: \"Somalia\",\n dial_code: \"+252\",\n code: \"SO\",\n },\n {\n name: \"South Africa\",\n dial_code: \"+27\",\n code: \"ZA\",\n },\n {\n name: \"South Sudan\",\n dial_code: \"+211\",\n code: \"SS\",\n },\n {\n name: \"South Georgia and the South Sandwich Islands\",\n dial_code: \"+500\",\n code: \"GS\",\n },\n {\n name: \"Sri Lanka\",\n dial_code: \"+94\",\n code: \"LK\",\n },\n {\n name: \"Sudan\",\n dial_code: \"+249\",\n code: \"SD\",\n },\n {\n name: \"Suriname\",\n dial_code: \"+597\",\n code: \"SR\",\n },\n {\n name: \"Svalbard and Jan Mayen\",\n dial_code: \"+47\",\n code: \"SJ\",\n },\n {\n name: \"Swaziland\",\n dial_code: \"+268\",\n code: \"SZ\",\n },\n {\n name: \"Syrian Arab Republic\",\n dial_code: \"+963\",\n code: \"SY\",\n },\n {\n name: \"Taiwan\",\n dial_code: \"+886\",\n code: \"TW\",\n },\n {\n name: \"Tajikistan\",\n dial_code: \"+992\",\n code: \"TJ\",\n },\n {\n name: \"Tanzania, United Republic of Tanzania\",\n dial_code: \"+255\",\n code: \"TZ\",\n },\n {\n name: \"Thailand\",\n dial_code: \"+66\",\n code: \"TH\",\n },\n {\n name: \"Timor-Leste\",\n dial_code: \"+670\",\n code: \"TL\",\n },\n {\n name: \"Togo\",\n dial_code: \"+228\",\n code: \"TG\",\n },\n {\n name: \"Tokelau\",\n dial_code: \"+690\",\n code: \"TK\",\n },\n {\n name: \"Tonga\",\n dial_code: \"+676\",\n code: \"TO\",\n },\n {\n name: \"Trinidad and Tobago\",\n dial_code: \"+1868\",\n code: \"TT\",\n },\n {\n name: \"Tunisia\",\n dial_code: \"+216\",\n code: \"TN\",\n },\n {\n name: \"Turkey\",\n dial_code: \"+90\",\n code: \"TR\",\n },\n {\n name: \"Turkmenistan\",\n dial_code: \"+993\",\n code: \"TM\",\n },\n {\n name: \"Turks and Caicos Islands\",\n dial_code: \"+1649\",\n code: \"TC\",\n },\n {\n name: \"Tuvalu\",\n dial_code: \"+688\",\n code: \"TV\",\n },\n {\n name: \"Uganda\",\n dial_code: \"+256\",\n code: \"UG\",\n },\n {\n name: \"Ukraine\",\n dial_code: \"+380\",\n code: \"UA\",\n },\n {\n name: \"United Arab Emirates\",\n dial_code: \"+971\",\n code: \"AE\",\n },\n {\n name: \"United States\",\n dial_code: \"+1\",\n code: \"US\",\n },\n {\n name: \"Uruguay\",\n dial_code: \"+598\",\n code: \"UY\",\n },\n {\n name: \"Uzbekistan\",\n dial_code: \"+998\",\n code: \"UZ\",\n },\n {\n name: \"Vanuatu\",\n dial_code: \"+678\",\n code: \"VU\",\n },\n {\n name: \"Venezuela, Bolivarian Republic of Venezuela\",\n dial_code: \"+58\",\n code: \"VE\",\n },\n {\n name: \"Vietnam\",\n dial_code: \"+84\",\n code: \"VN\",\n },\n {\n name: \"Virgin Islands, British\",\n dial_code: \"+1284\",\n code: \"VG\",\n },\n {\n name: \"Virgin Islands, U.S.\",\n dial_code: \"+1340\",\n code: \"VI\",\n },\n {\n name: \"Wallis and Futuna\",\n dial_code: \"+681\",\n code: \"WF\",\n },\n {\n name: \"Yemen\",\n dial_code: \"+967\",\n code: \"YE\",\n },\n {\n name: \"Zambia\",\n dial_code: \"+260\",\n code: \"ZM\",\n },\n {\n name: \"Zimbabwe\",\n dial_code: \"+263\",\n code: \"ZW\",\n },\n];\n\nexport default class extends Controller {\n \n static targets = [\"locale\", \"locations\", \"bikeType\", \"bike_brand\", \"bike_type\", \"bike_model\", \"bike_teaser\", \"bike_expert\", \"bike_highlights\", \"bike_image\", \"bike_description\", \"day1\", \"days2\", \"days6\", \"days13\"];\n\n test() {\n url = \"\";\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n console.log(\"DATA\", data);\n });\n }\n\n connect() {\n this.updateBasket();\n\n let tooltipTriggerList = [].slice.call(\n document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n );\n let tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n return new Tooltip(tooltipTriggerEl);\n });\n var urlParams;\n (window.onpopstate = function () {\n var match,\n pl = /\\+/g, // Regex for replacing addition symbol with a space\n search = /([^&=]+)=?([^&]*)/g,\n decode = function (s) {\n return decodeURIComponent(s.replace(pl, \" \"));\n },\n query = window.location.search.substring(1);\n\n urlParams = {};\n while ((match = search.exec(query)))\n urlParams[decode(match[1])] = decode(match[2]);\n })();\n\n if (urlParams.model_type) {\n document.getElementById(\"type\").value = urlParams.model_type;\n }\n\n if (urlParams.models && urlParams.models.length > 0) {\n const reset = document.getElementById(\"reset\");\n if (reset) reset.classList.remove(\"hidden\");\n }\n let plocId = document.getElementById(\"plocId\");\n if (urlParams.plocId && plocId) {\n plocId.value = urlParams.plocId;\n let flag = false;\n let locations = this.locationsTarget;\n for (var i = 1; i < locations.options.length; i++) {\n locations.options[i].classList.remove(\"hidden\");\n if (plocId.value && locations.options[i].dataset.island != plocId.value)\n locations.options[i].classList.add(\"hidden\");\n }\n } else {\n let query = window.location.pathname.split(\"/\");\n let island = false;\n if (plocId) {\n query.forEach((element) => {\n switch (element) {\n case \"gran-canaria\":\n island = true;\n plocId.value = \"1\";\n break;\n case \"tenerife\":\n island = true;\n plocId.value = \"2\";\n break;\n case \"lanzarote\":\n island = true;\n plocId.value = \"3\";\n break;\n }\n });\n if (!island) {\n plocId.value = 1;\n }\n }\n }\n if (urlParams.height) {\n document.getElementById(\"height\").value = urlParams.height;\n }\n let active = document.getElementsByClassName(\"filter-type bg-black\")[0];\n if (active) {\n active.classList.remove(\"bg-black\");\n active.classList.add(\"bg-gray-300\");\n let types = document.getElementsByClassName(\"filter-type\");\n for (let i = 0; i < types.length; i++) {\n if (urlParams.model_type === types[i].dataset.type) {\n types[i].classList.remove(\"bg-gray-300\");\n types[i].classList.add(\"bg-black\");\n }\n }\n }\n let selected = false;\n let select = document.getElementById(\"country\");\n if (select) {\n for (var key in countries) {\n let option = document.createElement(\"option\");\n option.text = key;\n option.value = countries[key];\n if (option.value === \"ES\") {\n option.id = \"es\";\n }\n if (select.dataset.country === countries[key]) {\n option.selected = \"selected\";\n selected = true;\n }\n select.appendChild(option);\n } /*\n if ( !selected ) {\n let spain = document.getElementById('es');\n spain.setAttribute('selected', 'selected');\n }*/\n }\n let select2 = document.getElementById(\"prefix\");\n if (select2) {\n selected = false;\n mobiles.forEach((prefix) => {\n let option = document.createElement(\"option\");\n option.text = prefix.dial_code + \" \" + prefix.name;\n option.value = prefix.dial_code;\n if (prefix.code === \"ES\") {\n option.id = \"es2\";\n }\n if (select && select.dataset.country === prefix.code) {\n option.selected = \"selected\";\n selected = true;\n }\n select2.appendChild(option);\n });\n /*if ( !selected ) {\n let spain = document.getElementById('es2');\n spain.setAttribute('selected', 'selected');\n }*/\n }\n\n let layer = document.getElementById(\"bikes-booking\");\n if (layer) this.bikes_layer();\n\n let bike = document.getElementById(\"single-bike\");\n if (bike) this.single_bike_layer(bike);\n\n let anchor = document.getElementById(\"main-filters\");\n let filterTagsMobile = document.getElementById(\"filterTagsMobile\");\n if (filterTagsMobile) {\n document.addEventListener(\"scroll\", (event) => {\n if (anchor.offsetTop + 278 <= window.scrollY)\n filterTagsMobile.classList.add(\"fixed-filters\");\n else filterTagsMobile.classList.remove(\"fixed-filters\");\n });\n }\n\n layer = null;\n layer = document.getElementById(\"cart\");\n if (layer) document.addEventListener(\"priced\", this.cart_layer);\n }\n\n filterShops(event) {\n const flag = document.getElementById(\"single-bike\");\n var select = this.locationsTarget;\n for (var i = 1; i < select.options.length; i++) {\n select.options[i].classList.remove(\"hidden\");\n if (\n event.target.value &&\n select.options[i].dataset.island != event.target.value\n )\n select.options[i].classList.add(\"hidden\");\n }\n if (!flag) this.filterBikes();\n }\n\n selectIsland(event) {\n let place = document.getElementById(\"locations\");\n place.classList.remove(\"error\", \"bg-red-100\");\n const shops = this.locationsTarget;\n const shop = event.target.value;\n let select = document.getElementById(\"plocId\");\n for (var i = 1; i < shops.options.length; i++) {\n if (shops.options[i].value === shop) {\n select.value = shops.options[i].dataset.island;\n break;\n }\n }\n for (var i = 1; i < shops.options.length; i++) {\n shops.options[i].classList.remove(\"hidden\");\n if (select.value && shops.options[i].dataset.island != select.value)\n shops.options[i].classList.add(\"hidden\");\n }\n }\n\n setToDate(event) {\n let from = new Date(event.target.value);\n let tmp = new Date(from);\n let to = document.getElementById(\"to\");\n let min = this.check_season(from);\n\n tmp.setDate(from.getDate() + min);\n tmp = tmp.toISOString().split(\"T\")[0];\n to.setAttribute(\"min\", tmp);\n if (!to.value || to.value < tmp) to.value = tmp;\n }\n\n verifyShops() {\n let that = this;\n setTimeout(() => {\n const from = document.getElementById(\"from\").value;\n const fromDate = new Date(from);\n const to = document.getElementById(\"to\").value;\n const toDate = new Date(to);\n const locale = document.getElementById(\"locale\").value;\n let closed = \"Closed\";\n switch (locale) {\n case \"es\":\n closed = \"Cerrada\";\n break;\n case \"de\":\n closed = \"Chlossen\";\n break;\n case \"en\":\n closed = \"Closed\";\n break;\n }\n let locations = this.locationsTarget;\n if (!from) return;\n for (var i = 0; i < locations.options.length; i++) {\n if (locations.options[i].value !== \"\") {\n locations.options[i].removeAttribute(\"disabled\");\n locations.options[i].classList.remove(\"bg-gray-200\");\n const index = locations.options[i].innerHTML.indexOf(\" \" + closed);\n if (index != -1)\n locations.options[i].innerHTML = locations.options[\n i\n ].innerHTML.substring(0, index - 2);\n let url1 = `/shops/opening_hours?loc_id=${locations.options[i].value}&date=${from}&index=${i}`;\n let url2 = `/shops/opening_hours?loc_id=${locations.options[i].value}&date=${to}&index=${i}`;\n fetch(url1)\n .then((response) => response.json())\n .then((data) => {\n if (data.opening_hours === \"closed\") {\n const day = fromDate.toLocaleDateString(locale, {\n weekday: \"long\",\n });\n const date =\n day +\n \" \" +\n that.padTo2Digits(fromDate.getDate()) +\n \".\" +\n that.padTo2Digits(fromDate.getMonth() + 1);\n locations.options[data.index].setAttribute(\n \"disabled\",\n \"disabled\"\n );\n locations.options[data.index].classList.add(\"bg-gray-200\");\n const index = locations.options[data.index].innerHTML.indexOf(\n \" \" + closed\n );\n if (index == -1)\n locations.options[data.index].innerHTML =\n locations.options[data.index].innerHTML +\n \" ⚠ \" +\n closed +\n \" \" +\n date;\n }\n fetch(url2)\n .then((response) => response.json())\n .then((data) => {\n if (data.opening_hours === \"closed\") {\n const day = toDate.toLocaleDateString(locale, {\n weekday: \"long\",\n });\n const date =\n day +\n \" \" +\n that.padTo2Digits(toDate.getDate()) +\n \".\" +\n that.padTo2Digits(toDate.getMonth() + 1);\n locations.options[data.index].setAttribute(\n \"disabled\",\n \"disabled\"\n );\n locations.options[data.index].classList.add(\"bg-gray-200\");\n const index = locations.options[\n data.index\n ].innerHTML.indexOf(\" \" + closed);\n if (index == -1)\n locations.options[data.index].innerHTML =\n locations.options[data.index].innerHTML +\n \" ⚠ \" +\n closed +\n \" \" +\n date;\n else\n locations.options[data.index].innerHTML =\n locations.options[data.index].innerHTML + \" , \" + date;\n }\n });\n });\n }\n }\n }, 100);\n }\n\n checkBike(event) {\n let errors = false;\n let from = document.getElementById(\"from\");\n let to = document.getElementById(\"to\");\n let plocId = document.getElementById(\"plocId\");\n let place = document.getElementById(\"locations\");\n let height = document.getElementById(\"height\");\n let featured = document.getElementById(\"featured\");\n let checkFrom = document.getElementById(\"error-from\");\n let checkTo = document.getElementById(\"error-to\");\n let shop = document.getElementById(\"error-shop\");\n let checkHeight = document.getElementById(\"error-height\");\n let scroll = true;\n\n let min = new Date();\n min.setDate(new Date().getDate() + 2);\n min.setHours(0, 0, 0);\n\n if (!from.value || new Date(from.value).getTime() < min.getTime()) {\n from.classList.add(\"error\");\n if (checkFrom) checkFrom.classList.remove(\"hidden\");\n errors = true;\n } else {\n from.classList.remove(\"error\");\n if (checkFrom) checkFrom.classList.add(\"hidden\");\n }\n\n const temp = this.check_season(new Date(from.value));\n\n min = new Date(from.value);\n min.setDate(new Date(from.value).getDate() + temp);\n min.setHours(0, 0, 0);\n\n if (!to.value || new Date(to.value).getTime() < min.getTime()) {\n to.classList.add(\"error\");\n if (checkTo) checkTo.classList.remove(\"hidden\");\n errors = true;\n } else {\n to.classList.remove(\"error\");\n if (checkTo) checkTo.classList.add(\"hidden\");\n }\n\n if (!plocId.value) {\n plocId.classList.add(\"error\");\n errors = true;\n } else plocId.classList.remove(\"error\");\n\n if (!place.value || place.options[place.selectedIndex].disabled) {\n place.classList.add(\"error\", \"bg-red-100\");\n if (shop) shop.classList.remove(\"hidden\");\n errors = true;\n } else {\n place.classList.remove(\"error\", \"bg-red-100\");\n if (shop) shop.classList.add(\"hidden\");\n }\n\n if (!height.value) {\n height.classList.add(\"error\");\n if (checkHeight) checkHeight.classList.remove(\"hidden\");\n errors = true;\n } else {\n height.classList.remove(\"error\");\n if (checkHeight) checkHeight.classList.add(\"hidden\");\n }\n\n if (errors) {\n if (scroll) {\n let filters = document.getElementById(\"main-filters\");\n let topPos = filters.offsetTop;\n window.scrollTo(0, topPos);\n }\n return;\n } else this.filterBike(event);\n }\n\n checkBikes(event) {\n let doCheck = false;\n if (event.target.id == \"availability\") doCheck = true;\n let errors = false;\n let from = document.getElementById(\"from\");\n let to = document.getElementById(\"to\");\n let plocId = document.getElementById(\"plocId\");\n let place = document.getElementById(\"locations\");\n let height = document.getElementById(\"height\");\n let featured = document.getElementById(\"featured\");\n let filterTags = document.getElementById(\"filterTags\");\n let filterTagsMobile = document.getElementById(\"filterTagsMobile\");\n let availability = document.getElementById(\"availability\");\n let checkFrom = document.getElementById(\"error-from\");\n let checkTo = document.getElementById(\"error-to\");\n let shop = document.getElementById(\"error-shop\");\n let checkHeight = document.getElementById(\"error-height\");\n let scroll = true;\n\n let min = new Date();\n min.setDate(new Date().getDate() + 2);\n min.setHours(0, 0, 0);\n\n if (!from.value || new Date(from.value).getTime() < min.getTime()) {\n from.classList.add(\"error\");\n if (checkFrom) checkFrom.classList.remove(\"hidden\");\n errors = true;\n } else {\n from.classList.remove(\"error\");\n if (checkFrom) checkFrom.classList.add(\"hidden\");\n }\n\n const temp = this.check_season(new Date(from.value));\n min = new Date(from.value);\n min.setDate(new Date(from.value).getDate() + temp);\n min.setHours(0, 0, 0);\n\n if (!to.value || new Date(to.value).getTime() < min.getTime()) {\n to.classList.add(\"error\");\n if (checkTo) checkTo.classList.remove(\"hidden\");\n errors = true;\n } else {\n to.classList.remove(\"error\");\n if (checkTo) checkTo.classList.add(\"hidden\");\n }\n\n if (!plocId.value) {\n plocId.classList.add(\"error\");\n errors = true;\n } else plocId.classList.remove(\"error\");\n\n if (!place.value || place.options[place.selectedIndex].disabled) {\n place.classList.add(\"error\", \"bg-red-100\");\n if (shop) shop.classList.remove(\"hidden\");\n errors = true;\n } else {\n place.classList.remove(\"error\", \"bg-red-100\");\n if (shop) shop.classList.add(\"hidden\");\n }\n\n if (!height.value) {\n height.classList.add(\"error\");\n if (checkHeight) checkHeight.classList.remove(\"hidden\");\n errors = true;\n } else {\n height.classList.remove(\"error\");\n if (checkHeight) checkHeight.classList.add(\"hidden\");\n }\n\n let checks = document.querySelectorAll(\".model:checked\");\n let modelsNumber = document.querySelectorAll(\".model\").length;\n\n if (!errors && checks.length === 0 && modelsNumber > 3) {\n featured.classList.remove(\"hidden\");\n errors = true;\n scroll = false;\n }\n\n if (errors) {\n if (scroll) {\n let filters = document.getElementById(\"main-filters\");\n let topPos = filters.offsetTop;\n window.scrollTo(0, topPos);\n }\n return;\n } else this.filterBikes(event, doCheck);\n }\n\n closeAlert(event) {\n document.getElementById(\"featured\").classList.add(\"hidden\");\n }\n\n toggleLogin(event) {\n let elem = document.getElementById(\"collapse\");\n let elem2 = document.getElementById(\"session\");\n elem.classList.toggle(\"hidden\");\n elem2.classList.toggle(\"hidden\");\n }\n\n toggleTags(event) {\n let container = document.getElementById(\"filterWrapper\");\n let chevron = document.getElementById(\"filterChevron\");\n if (container.classList.contains(\"lg:block\")) {\n container.classList.remove(\"lg:block\", \"hidden\");\n chevron.classList.remove(\"lg:rotate-180\");\n }\n if (container.classList.contains(\"hidden\")) {\n container.classList.remove(\"hidden\");\n chevron.classList.add(\"rotate-180\");\n } else {\n container.classList.add(\"hidden\");\n chevron.classList.remove(\"rotate-180\");\n }\n }\n\n filterBike(event) {\n var bike_type = document.getElementById(\"type\").value;\n var from = document.getElementById(\"from\").value;\n var to = document.getElementById(\"to\").value;\n //var from_diff = document.getElementById('from_variation').value;\n //var to_diff = document.getElementById('to_variation').value;\n var plocId = document.getElementById(\"plocId\").value;\n var place = document.getElementById(\"locations\").value;\n var height = document.getElementById(\"height\").value;\n let availability = document.getElementById(\"availability\");\n let bike = document.getElementById(\"single-bike\");\n\n let models = bike.dataset.model;\n\n const lang = this.localeTarget.value;\n var url = `/${lang}/booking_process/finder/bikes?models=${models}&model_type=${bike_type}&from=${from}&to=${to}&plocId=${plocId}&place=${place}&height=${height}`;\n\n document.getElementById(\"spinner\").classList.remove(\"hidden\");\n\n availability.classList.add(\"hidden\");\n\n let results = document.getElementById(\"results\");\n let topPos = results.offsetTop;\n window.scrollTo(0, topPos);\n\n Turbo.visit(url, { action: \"replace\" });\n }\n\n filterBikes(event, doCheck = false) {\n var bike_type = document.getElementById(\"type\").value;\n\n var from = document.getElementById(\"from\").value;\n var to = document.getElementById(\"to\").value;\n //var from_diff = document.getElementById('from_variation').value;\n //var to_diff = document.getElementById('to_variation').value;\n var plocId = document.getElementById(\"plocId\").value;\n var place = document.getElementById(\"locations\").value;\n var height = document.getElementById(\"height\").value;\n var tagsContainer = document.getElementsByClassName(\"filterTag\");\n var brand = document.querySelectorAll(\".brand:checked\");\n let availability = document.getElementById(\"availability\");\n let filterTags = document.getElementById(\"filterTags\");\n let filterTagsMobile = document.getElementById(\"filterTagsMobile\");\n\n setTimeout(() => {\n if (brand.length > 0) {\n brand = brand[0].value;\n } else brand = \"\";\n\n let checks = document.querySelectorAll(\".model:checked\");\n let modelsNumber = document.querySelectorAll(\".model\").length;\n\n if (modelsNumber < 4 && doCheck)\n checks = document.querySelectorAll(\".model\");\n\n let models = \"\";\n\n for (let i = 0; i < checks.length; i++) {\n models += checks[i].value;\n if (i !== checks.length - 1) models += \",\";\n }\n\n const lang = this.localeTarget.value;\n var url = `/${lang}/booking_process/finder/bikes?models=${models}&model_type=${bike_type}&from=${from}&to=${to}&plocId=${plocId}&place=${place}&height=${height}`;\n\n var tags = [];\n\n for (var i = 0; i < tagsContainer.length; i++) {\n if (tagsContainer[i].checked) tags.push(tagsContainer[i].value);\n }\n\n if (brand && brand.length > 0) url = url + `&brand=${brand}`;\n\n if (tags.length > 0) url = url + `&tags=${tags}`;\n\n document.getElementById(\"spinner\").classList.remove(\"hidden\");\n document.getElementById(\"reset\").classList.remove(\"hidden\");\n if (checks.length > 0) {\n let container = document.getElementById(\"filterWrapper\");\n let chevron = document.getElementById(\"filterChevron\");\n if (filterTags) filterTags.classList.add(\"hidden\");\n if (filterTagsMobile) filterTagsMobile.classList.add(\"hidden\");\n if (container) container.classList.add(\"md:block\", \"hidden\");\n chevron.classList.add(\"md:rotate-180\");\n availability.classList.add(\"hidden\");\n } else {\n availability.classList.remove(\"hidden\");\n if (filterTags) filterTags.classList.remove(\"hidden\");\n if (filterTagsMobile) filterTagsMobile.classList.remove(\"hidden\");\n }\n\n let results = document.getElementById(\"results\");\n let topPos = results.offsetTop;\n window.scrollTo(0, topPos);\n\n Turbo.visit(url, { action: \"replace\" });\n let interval = setInterval(() => {\n if (document.getElementById(\"spinner\").classList.contains(\"hidden\")) {\n clearInterval(interval);\n this.bikes_layer();\n }\n }, 500);\n }, 1000);\n }\n\n selectBike(event) {\n let checks = document.querySelectorAll(\".model:checked\");\n let unchecks = document.querySelectorAll(\".model:not(:checked)\");\n if (checks.length === 3)\n for (let i = 0; i < unchecks.length; i++) {\n unchecks[i].disabled = true;\n unchecks[i].classList.add(\n \"cursor-not-allowed\",\n \"bg-gray-100\",\n \"opacity-50\"\n );\n }\n else\n for (let i = 0; i < unchecks.length; i++) {\n unchecks[i].disabled = false;\n unchecks[i].classList.remove(\n \"cursor-not-allowed\",\n \"bg-gray-100\",\n \"opacity-50\"\n );\n }\n }\n\n pickBike(event) {\n let bike = null;\n let texts = [];\n let image = [];\n let price;\n let prices;\n let path = event.path || (event.composedPath && event.composedPath());\n path.forEach((el) => {\n if (el.dataset && el.dataset.bike) {\n bike = JSON.parse(el.dataset.bike);\n prices = JSON.parse(el.dataset.prices);\n price = el.dataset.price;\n texts = JSON.parse(el.dataset.texts);\n image = el.dataset.image;\n }\n });\n this.bike_brandTarget.src = `/fileadmin/website/files/manufacturer/${bike.manufacturer.toLowerCase()}.png`;\n this.bike_brandTarget.alt = bike.manufacturer;\n /*if ( bike.category_name == 'n/a' )\n this.bike_typeTarget.innerHTML = '';\n else\n this.bike_typeTarget.innerHTML = bike.category_name;*/\n //this.bike_teaserTarget.innerHTML = texts.teaser;\n this.bike_modelTarget.innerHTML = texts.title;\n this.bike_expertTarget.innerHTML = texts.teaser_expert;\n this.bike_highlightsTarget.innerHTML = texts.highlights;\n this.bike_highlightsTarget.children[0].classList.add(\"list-disc\", \"pl-5\");\n this.bike_descriptionTarget.innerHTML = texts.description;\n if (prices && prices.length > 3) {\n this.day1Target.innerHTML = \"€ \" + prices[0].price;\n this.days2Target.innerHTML = \"€ \" + prices[1].price;\n this.days6Target.innerHTML = \"€ \" + prices[2].price;\n this.days13Target.innerHTML = \"€ \" + prices[3].price;\n document.getElementById(\"price-row\").classList.remove(\"hidden\");\n document.getElementById(\"price-explanation\").classList.remove(\"hidden\");\n } else {\n document.getElementById(\"price-row\").classList.add(\"hidden\");\n document.getElementById(\"price-explanation\").classList.add(\"hidden\");\n }\n let tmp = this.bike_descriptionTarget.children[0];\n if (tmp && tmp.nodeName === \"B\") tmp.classList.add(\"sm:text-2xl\");\n this.bike_imageTarget.setAttribute(\"src\", image);\n tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"select_item\",\n ecommerce: {\n item_list_name: \"Bikes\",\n items: [\n {\n item_id: bike.model_id.toString(),\n item_name: bike.model_title,\n currency: \"EUR\",\n index: 0,\n item_brand: bike.manufacturer,\n item_category: bike.product_group_name,\n price: parseFloat(price),\n quantity: 1,\n },\n ],\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - select_item\", dataLayer);\n }\n\n showBike(event) {\n let errors = false;\n var bike = JSON.parse(event.target.dataset.bike);\n var price = event.target.dataset.price;\n var unit = event.target.dataset.unit;\n var from = document.getElementById(\"from\");\n var to = document.getElementById(\"to\");\n var height = document.getElementById(\"height\");\n var place = document.getElementById(\"locations\");\n var shop_name = place.options[place.options.selectedIndex].innerHTML;\n let checkFrom = document.getElementById(\"error-from\");\n let checkTo = document.getElementById(\"error-to\");\n let shop = document.getElementById(\"error-shop\");\n let checkHeight = document.getElementById(\"error-height\");\n\n const lang = this.localeTarget.value;\n\n if (!place.value || place.options[place.selectedIndex].disabled) {\n errors = true;\n place.classList.add(\"error\");\n if (shop) shop.classList.remove(\"hidden\");\n } else {\n place.classList.remove(\"error\");\n if (shop) shop.classList.add(\"hidden\");\n }\n\n let min = new Date();\n min.setDate(new Date().getDate() + 2);\n min.setHours(0, 0, 0);\n let tmp = from.value;\n if (tmp < min) {\n document.getElementById(\"from\").classList.add(\"error\");\n if (checkFrom) checkFrom.classList.remove(\"hidden\");\n errors = true;\n } else {\n document.getElementById(\"from\").classList.remove(\"error\");\n if (checkFrom) checkFrom.classList.add(\"hidden\");\n }\n\n const temp = this.check_season(new Date(from.value));\n tmp = new Date(from.value);\n tmp.setDate(tmp.getDate() + temp);\n if (tmp.getTime() > new Date(to.value).getTime()) {\n document.getElementById(\"to\").classList.add(\"error\");\n if (checkTo) checkTo.classList.remove(\"hidden\");\n errors = true;\n } else {\n document.getElementById(\"to\").classList.remove(\"error\");\n if (checkTo) checkTo.classList.add(\"hidden\");\n }\n\n if (!errors) {\n tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"select_item\",\n ecommerce: {\n item_list_name: \"Bikes\",\n items: [\n {\n item_id: bike.model_id.toString(),\n item_name: bike.model_title,\n currency: \"EUR\",\n index: 0,\n item_brand: bike.manufacturer,\n item_category: bike.product_group_name,\n price: parseFloat(price),\n quantity: 1,\n },\n ],\n enhanced_conversion_data: user,\n },\n });\n from = event.target.dataset.from;\n to = event.target.dataset.to;\n console.log(\"DATALAYER - select_item\", dataLayer);\n document.getElementById(\"spinner_modal\").classList.remove(\"hidden\");\n document.getElementById(\"modal\").classList.remove(\"hidden\");\n let url = `/${lang}/booking_process/modal/bike?model=${bike.model_id}&lang=en&from=${from}&to=${to}&place=${place.value}&height=${height.value}&shop_name=${shop_name}&price=${price}}&unit=${unit}`;\n Turbo.visit(url, { action: \"replace\" });\n }\n }\n\n addToCart(event) {\n let button;\n let path = event.path || (event.composedPath && event.composedPath());\n for (let el of path) {\n if (el.dataset.model !== undefined && el.dataset.model !== \"\") {\n button = el;\n break;\n }\n };\n\n document.getElementById(\"addToCart\").classList.remove(\"hidden\");\n var errors = false;\n var name = document.getElementById(\"name\");\n var surname = document.getElementById(\"surname\");\n var weight = document.getElementById(\"weight\");\n var height = document.getElementById(\"height_modal\").value;\n var pedal = document.getElementById(\"pedal\");\n var saddle = document.getElementById(\"saddle\");\n var location = document.getElementById(\"locations\");\n let bikeShop = document.getElementById(\"bikeShop\");\n let checkFrom = document.getElementById(\"error-from\");\n let checkTo = document.getElementById(\"error-to\");\n let shop = document.getElementById(\"error-shop\");\n let checkHeight = document.getElementById(\"error-height\");\n var modelId = button.dataset.model;\n var total = button.dataset.total;\n var unit = button.dataset.unit;\n var from = document.getElementById(\"from\");\n var to = document.getElementById(\"to\");\n let model_name = button.dataset.name;\n let manufacturer = button.dataset.brand;\n let category = button.dataset.category;\n\n if (!location.value || location.options[location.selectedIndex].disabled) {\n errors = true;\n bikeShop.classList.add(\"text-red-500\");\n if (shop) shop.classList.remove(\"hidden\");\n } else {\n bikeShop.classList.remove(\"text-red-500\");\n if (shop) shop.classList.add(\"hidden\");\n location = location.value;\n }\n\n let min = new Date();\n min.setDate(new Date().getDate() + 2);\n min.setHours(0, 0, 0);\n let tmp = from.value;\n if (tmp < min) {\n errors = true;\n if (checkFrom) checkFrom.classList.remove(\"hidden\");\n } else {\n if (checkFrom) checkFrom.classList.add(\"hidden\");\n }\n const temp = this.check_season(new Date(from.value));\n tmp = new Date(from.value);\n tmp.setDate(tmp.getDate() + temp);\n\n if (tmp > to.value) {\n errors = true;\n if (checkTo) checkTo.classList.remove(\"hidden\");\n } else {\n if (checkTo) checkTo.classList.add(\"hidden\");\n }\n\n if (errors) document.getElementById(\"modal\").classList.add(\"hidden\");\n\n if (!name.value) {\n name.classList.add(\"error\");\n errors = true;\n } else name.classList.remove(\"error\");\n\n if (!surname.value) {\n surname.classList.add(\"error\");\n errors = true;\n } else surname.classList.remove(\"error\");\n\n if (!weight.value) {\n weight.classList.add(\"error\");\n errors = true;\n } else weight.classList.remove(\"error\");\n\n if (!pedal.value) {\n pedal.classList.add(\"error\");\n errors = true;\n } else pedal.classList.remove(\"error\");\n\n if (errors) return true;\n\n name = name.value;\n surname = surname.value;\n from = button.dataset.from;\n to = button.dataset.to;\n\n var url = `/booking_process/add_to_basket?name=${name}&surname=${surname}&weight=${weight.value}&height=${height}&pedal=${pedal.value}&modelId=${modelId}&loc=${location}&total=${total}&unit=${unit}&from=${from}&to=${to}`;\n\n if (saddle.value) {\n saddle = saddle.value;\n url += `&saddle=${saddle}`;\n }\n\n const url2 = url;\n\n var basket = sessionStorage.getItem(\"basket\");\n\n if (basket && basket !== \"undefined\") url += `&basket=${basket}`;\n\n document.getElementById(\"addToCart\").classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.remove(\"hidden\");\n document.getElementById(\"spinner_modal\").classList.remove(\"hidden\");\n\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n if (!data || data.unavailable) {\n document.getElementById(\"unavailable\").classList.remove(\"hidden\");\n document.getElementById(\"spinner_modal\").classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.add(\"hidden\");\n } else {\n const start = new Date(from);\n const end = new Date(to);\n const qty =\n Math.ceil(\n (end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)\n ) + 1;\n let items = [\n {\n item_id: modelId.toString(),\n item_name: model_name,\n index: 0,\n item_brand: manufacturer,\n item_category: category,\n location_id: location,\n price: parseFloat(unit),\n quantity: qty,\n },\n ];\n let insuprice = data.insurance.price;\n if (insuprice % 1 !== 0) insuprice = data.insurance.price.toFixed(2);\n this.addToCart_layer(total, items);\n document.getElementById(\"continue\").classList.remove(\"hidden\");\n document.getElementById(\"close\").classList.remove(\"hidden\");\n sessionStorage.setItem(\"basket\", data.basket);\n this.updateBasket();\n document.getElementById(\"spinner_modal\").classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.add(\"hidden\");\n document.getElementById(\"insumage\").alt = data.insurance.name;\n document.getElementById(\"insuname\").innerHTML = data.insurance.name;\n document.getElementById(\"insudays\").innerHTML = data.count;\n document.getElementById(\"insucheck\").dataset.bike = data.bikeId;\n document.getElementById(\"insucheck\").dataset.item = JSON.stringify(\n data.insurance\n );\n document.getElementById(\"insucheck\").value = data.insurance.prodId;\n document.getElementById(\"insuprice\").innerHTML = insuprice;\n document.getElementById(\"insudesc\").innerHTML =\n data.insurance.longDescription;\n document.getElementById(\"insurance\").classList.remove(\"hidden\");\n }\n })\n .catch((error) => {\n fetch(url2)\n .then((response) => response.json())\n .then((data) => {\n const start = new Date(from);\n const end = new Date(to);\n const qty =\n Math.ceil(\n (end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)\n ) + 1;\n let items = [\n {\n item_id: modelId.toString(),\n item_name: model_name,\n index: 0,\n item_brand: manufacturer,\n item_category: category,\n location_id: location,\n price: parseFloat(unit),\n quantity: qty,\n },\n ];\n this.addToCart_layer(total, items);\n let insuprice = data.insurance.price;\n if (insuprice % 1 !== 0)\n insuprice = data.insurance.price.toFixed(2);\n document.getElementById(\"continue\").classList.remove(\"hidden\");\n document.getElementById(\"close\").classList.remove(\"hidden\");\n sessionStorage.setItem(\"basket\", data.basket);\n document.getElementById(\"spinner_modal\").classList.add(\"hidden\");\n this.updateBasket();\n document.getElementById(\"insumage\").alt = data.insurance.name;\n document.getElementById(\"insuname\").innerHTML = data.insurance.name;\n document.getElementById(\"insudays\").innerHTML = data.count;\n document.getElementById(\n \"insudates\"\n ).innerHTML = `${data.from} - ${data.to}`;\n document.getElementById(\"insucheck\").dataset.bike = data.bikeId;\n document.getElementById(\"insucheck\").value = data.insurance.prodId;\n document.getElementById(\"insuprice\").innerHTML = insuprice;\n document.getElementById(\"insurance\").classList.remove(\"hidden\");\n });\n });\n }\n\n addToCartAgent(event) {\n document.getElementById(\"addToCart\").classList.remove(\"hidden\");\n var errors = false;\n var name = document.getElementById(\"name\");\n var surname = document.getElementById(\"surname\");\n var weight = document.getElementById(\"weight\");\n var height = document.getElementById(\"height_modal\").value;\n var pedal = document.getElementById(\"pedal\");\n var saddle = document.getElementById(\"saddle\");\n var location = document.getElementById(\"locations\");\n let bikeShop = document.getElementById(\"bikeShop\");\n let checkFrom = document.getElementById(\"error-from\");\n let checkTo = document.getElementById(\"error-to\");\n let shop = document.getElementById(\"error-shop\");\n let checkHeight = document.getElementById(\"error-height\");\n var modelId = event.target.dataset.model;\n var total = event.target.dataset.total;\n var unit = event.target.dataset.unit;\n var from = document.getElementById(\"from\");\n var to = document.getElementById(\"to\");\n let model_name = event.target.dataset.name;\n let manufacturer = event.target.dataset.brand;\n let category = event.target.dataset.category;\n let mail = document.getElementById(\"rider-mail\");\n let phone = document.getElementById(\"rider-phone\");\n let single_basket;\n\n if (!location.value || location.options[location.selectedIndex].disabled) {\n errors = true;\n bikeShop.classList.add(\"text-red-500\");\n if (shop) shop.classList.remove(\"hidden\");\n } else {\n bikeShop.classList.remove(\"text-red-500\");\n if (shop) shop.classList.add(\"hidden\");\n location = location.value;\n }\n\n let min = new Date();\n min.setDate(new Date().getDate() + 2);\n min.setHours(0, 0, 0);\n let tmp = from.value;\n if (tmp < min) {\n errors = true;\n if (checkFrom) checkFrom.classList.remove(\"hidden\");\n } else {\n if (checkFrom) checkFrom.classList.add(\"hidden\");\n }\n const temp = this.check_season(new Date(from.value));\n tmp = new Date(from.value);\n tmp.setDate(tmp.getDate() + temp);\n\n if (tmp > to.value) {\n errors = true;\n if (checkTo) checkTo.classList.remove(\"hidden\");\n } else {\n if (checkTo) checkTo.classList.add(\"hidden\");\n }\n\n if (errors) document.getElementById(\"modal\").classList.add(\"hidden\");\n\n if (!name.value) {\n name.classList.add(\"error\");\n errors = true;\n } else name.classList.remove(\"error\");\n\n if (!surname.value) {\n surname.classList.add(\"error\");\n errors = true;\n } else surname.classList.remove(\"error\");\n\n if (!weight.value) {\n weight.classList.add(\"error\");\n errors = true;\n } else weight.classList.remove(\"error\");\n\n if (!pedal.value) {\n pedal.classList.add(\"error\");\n errors = true;\n } else pedal.classList.remove(\"error\");\n\n if (!mail.value) {\n mail.classList.add(\"error\");\n errors = true;\n } else mail.classList.remove(\"error\");\n\n if (!phone.value) {\n phone.classList.add(\"error\");\n errors = true;\n } else phone.classList.remove(\"error\");\n\n if (errors) return true;\n\n name = name.value;\n surname = surname.value;\n phone = phone.value;\n mail = mail.value;\n from = event.target.dataset.from;\n to = event.target.dataset.to;\n\n var url = `/booking_process/agents/add_to_basket?name=${name}&surname=${surname}&weight=${weight.value}&height=${height}&pedal=${pedal.value}&modelId=${modelId}&loc=${location}&total=${total}&unit=${unit}&from=${from}&to=${to}&mail=${mail}&phone=${phone}`;\n\n if (saddle.value) {\n saddle = saddle.value;\n url += `&saddle=${saddle}`;\n }\n\n document.getElementById(\"addToCart\").classList.add(\"hidden\");\n document.getElementById(\"spinner_modal\").classList.remove(\"hidden\");\n\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n if (!data || data.unavailable) {\n document.getElementById(\"unavailable\").classList.remove(\"hidden\");\n document.getElementById(\"spinner_modal\").classList.add(\"hidden\");\n } else {\n let single_basket = data.basket;\n const start = new Date(from);\n const end = new Date(to);\n const qty =\n Math.ceil(\n (end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)\n ) + 1;\n let items = [\n {\n item_id: modelId.toString(),\n item_name: model_name,\n index: 0,\n item_brand: manufacturer,\n item_category: category,\n location_id: location,\n price: parseFloat(unit),\n quantity: qty,\n },\n ];\n let insuprice = data.insurance.price;\n if (insuprice % 1 !== 0) insuprice = data.insurance.price.toFixed(2);\n this.addToCart_layer(total, items);\n document.getElementById(\"continue\").classList.remove(\"hidden\");\n document.getElementById(\"close\").classList.remove(\"hidden\");\n\n let storedBasket = sessionStorage.getItem(\"baskets\");\n let basketArray = storedBasket ? JSON.parse(storedBasket) : [];\n basketArray.push(data.basket);\n let updatedBasket = JSON.stringify(basketArray);\n sessionStorage.setItem(\"baskets\", updatedBasket);\n\n document.getElementById(\"spinner_modal\").classList.add(\"hidden\");\n this.updateBasketAgent(single_basket);\n document.getElementById(\"insumage\").alt = data.insurance.name;\n document.getElementById(\"insuname\").innerHTML = data.insurance.name;\n document.getElementById(\"insudays\").innerHTML = data.count;\n document.getElementById(\"insucheck\").dataset.bike = data.bikeId;\n document.getElementById(\"insucheck\").dataset.item = JSON.stringify(\n data.insurance\n );\n document.getElementById(\"insucheck\").value = data.insurance.prodId;\n document.getElementById(\"insuprice\").innerHTML = insuprice;\n document.getElementById(\"insudesc\").innerHTML =\n data.insurance.longDescription;\n document.getElementById(\"insurance\").classList.remove(\"hidden\");\n }\n })\n .catch((error) => {\n console.log(error);\n });\n }\n\n step2(event) {\n let urlParams;\n let basket;\n (window.onpopstate = function () {\n var match,\n pl = /\\+/g, // Regex for replacing addition symbol with a space\n search = /([^&=]+)=?([^&]*)/g,\n decode = function (s) {\n return decodeURIComponent(s.replace(pl, \" \"));\n },\n query = window.location.search.substring(1);\n\n urlParams = {};\n while ((match = search.exec(query)))\n urlParams[decode(match[1])] = decode(match[2]);\n })();\n if (urlParams.basket) {\n basket = urlParams.basket;\n sessionStorage.setItem(\"basket\", basket);\n } else basket = sessionStorage.getItem(\"basket\");\n if (basket) {\n let spinner = document.getElementById(\"spinner\");\n if (spinner) spinner.classList.remove(\"hidden\");\n let spinner_modal = document.getElementById(\"spinner_modal\");\n if (spinner_modal) spinner_modal.classList.remove(\"hidden\");\n document.addEventListener(\"turbo:before-fetch-response\", function (e) {\n let selected = false;\n var interval = setInterval(function () {\n let select = document.getElementById(\"country\");\n if (select) {\n clearInterval(interval);\n for (var key in countries) {\n var option = document.createElement(\"option\");\n option.text = key;\n option.value = countries[key];\n if (option.value === \"ES\") {\n option.id = \"es\";\n }\n if (select.dataset.country === countries[key]) {\n option.selected = \"selected\";\n selected = true;\n }\n select.appendChild(option);\n }\n if (!selected) {\n let spain = document.getElementById(\"es\");\n spain.setAttribute(\"selected\", \"selected\");\n }\n let select2 = document.getElementById(\"prefix\");\n if (select2) {\n selected = false;\n mobiles.forEach((prefix) => {\n let option = document.createElement(\"option\");\n option.text = prefix.dial_code + \" \" + prefix.name;\n option.value = prefix.dial_code;\n if (prefix.code === \"ES\") {\n option.id = \"es2\";\n }\n if (select && select.dataset.country === prefix.code) {\n option.selected = \"selected\";\n selected = true;\n }\n select2.appendChild(option);\n });\n if (!selected) {\n let spain = document.getElementById(\"es2\");\n spain.setAttribute(\"selected\", \"selected\");\n }\n }\n }\n }, 100);\n });\n const lang = this.localeTarget.value;\n window.location.href = `/${lang}/basket?basket=${basket}`;\n }\n }\n\n step2Agent(event) {\n let spinner = document.getElementById(\"spinner\");\n if (spinner) spinner.classList.remove(\"hidden\");\n let spinner_modal = document.getElementById(\"spinner_modal\");\n if (spinner_modal) spinner_modal.classList.remove(\"hidden\");\n const lang = this.localeTarget.value;\n window.location.href = `/${lang}/agents/baskets`;\n }\n\n step3(event) {\n let urlParams;\n let basket;\n (window.onpopstate = function () {\n var match,\n pl = /\\+/g, // Regex for replacing addition symbol with a space\n search = /([^&=]+)=?([^&]*)/g,\n decode = function (s) {\n return decodeURIComponent(s.replace(pl, \" \"));\n },\n query = window.location.search.substring(1);\n\n urlParams = {};\n while ((match = search.exec(query)))\n urlParams[decode(match[1])] = decode(match[2]);\n })();\n if (urlParams.basket) {\n basket = urlParams.basket;\n sessionStorage.setItem(\"basket\", basket);\n } else basket = sessionStorage.getItem(\"basket\");\n if (!basket) window.location.href = \"bikes?basket=null\";\n let checkbox = document.getElementById(\"account\");\n let errors = false;\n let customer = document.forms[\"customer\"].getElementsByTagName(\"input\");\n let errorMsgs = document.forms[\"customer\"].getElementsByTagName(\"p\");\n let country = document.getElementById(\"country\");\n let prefix = document.getElementById(\"prefix\");\n //let vat = document.getElementById('vat');\n //let vatError = document.getElementById('vat-error');\n const lang = this.localeTarget.value;\n let url2 = `/${lang}/booking_process/step3?basket=${basket}`;\n for (let i = 1; i < customer.length; i++) {\n if (!customer[i].value) {\n customer[i].classList.add(\"error\");\n errorMsgs[i - 1].classList.remove(\"hidden\");\n errors = true;\n } else {\n customer[i].classList.remove(\"error\");\n errorMsgs[i - 1].classList.add(\"hidden\");\n url2 += `&${customer[i].name}=${customer[i].value}`;\n }\n }\n\n if (!prefix.value) {\n prefix.classList.add(\"error\");\n document.getElementById(\"error-phone\").classList.remove(\"hidden\");\n errors = true;\n } else {\n prefix.classList.remove(\"error\");\n document.getElementById(\"error-phone\").classList.add(\"hidden\");\n let tmp = \"%2B\" + prefix.value.slice(1);\n url2 += `&prefix=${tmp}`;\n }\n\n if (!country.value) {\n country.classList.add(\"error\");\n document.getElementById(\"error-country\").classList.remove(\"hidden\");\n errors = true;\n } else {\n country.classList.remove(\"error\");\n document.getElementById(\"error-country\").classList.add(\"hidden\");\n url2 += `&country=${country.value}`;\n }\n\n /*if ( vat.value )\n url2 += `&vatId=${vat.value}`;*/\n\n if (checkbox) {\n if (!checkbox.checked) {\n checkbox.classList.add(\"error\");\n document.getElementById(\"error-account\").classList.remove(\"hidden\");\n errors = true;\n } else {\n checkbox.classList.remove(\"error\");\n document.getElementById(\"error-account\").classList.add(\"hidden\");\n }\n }\n\n if (errors) {\n let contractor = document.getElementById(\"contractor\");\n let topPos = contractor.offsetTop;\n window.scrollTo(0, topPos);\n return;\n }\n\n document.getElementById(\"spinner\").classList.remove(\"hidden\");\n const cart_layer = JSON.parse(sessionStorage.getItem(\"cart_layer\"));\n if (cart_layer) {\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"begin_checkout\",\n ecommerce: { cart_layer },\n });\n console.log(\"DATALAYER - begin_checkout\", dataLayer);\n }\n Turbo.visit(url2, { action: \"replace\" });\n\n /*fetch(`/booking_process/get_total?basket=${basket}`)\n .then(response => response.json())\n .then((data) => {\n if ( data.price >= 400 )\n if ( !vat.value ) {\n vat.classList.add('error');\n vatError.classList.remove('hidden');\n errors = true;\n }\n else {\n vat.classList.remove('error');\n vatError.classList.add('hidden');\n url2 += `&vatId=${vat.value}`;\n }\n\n if ( errors ) {\n document.getElementById('spinner').classList.add('hidden');\n return;\n }\n Turbo.visit(url2, { action: 'replace' });\n });*/\n }\n\n updateBasket() {\n if (document.getElementById(\"price_spinner\")) document.getElementById(\"price_spinner\").classList.remove(\"hidden\");\n let basket = sessionStorage.getItem(\"basket\");\n if (basket) {\n const url = `/booking_process/get_basket/${basket}`;\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n let unavailable = document.getElementById(\"unavailable\");\n if (unavailable) unavailable.classList.add(\"hidden\");\n let count = 0;\n let price = 0;\n let discount = 0;\n let sum = 0;\n if (data) {\n data.OrderPosition.forEach((element) => {\n price = price + element.pricePerUnit;\n if (element.prodType == \"R\" || element.prodType == \"T\") count++;\n if (element.prodType == \"X\")\n if (element.pricePerUnit < 0)\n discount = discount + Math.abs(element.pricePerUnit);\n });\n }\n let supertotal = document.getElementById(\"supertotal\");\n let superdiscount = document.getElementById(\"discount\");\n let wrapper = document.getElementById(\"discount-wrapper\");\n if (discount > 0) {\n sum = price + discount;\n sum = sum.toFixed(2);\n sum = sum.replace(\".\", \",\");\n price = price.toFixed(2);\n price = price.replace(\".\", \",\");\n discount = discount.toFixed(2);\n discount = discount.replace(\".\", \",\");\n if (supertotal) {\n supertotal.innerHTML = sum + \"€\";\n supertotal.classList.remove(\"hidden\");\n }\n if (superdiscount) {\n superdiscount.innerHTML = discount + \"€\";\n wrapper.classList.remove(\"hidden\");\n }\n } else {\n if (supertotal) supertotal.classList.add(\"hidden\");\n if (wrapper) wrapper.classList.add(\"hidden\");\n }\n let total = document.getElementById(\"total\");\n if (total) total.innerHTML = price;\n\n const event = document.createEvent(\"Event\");\n event.initEvent(\"priced\", true, true);\n document.dispatchEvent(event);\n document.getElementById(\"cart1\").innerHTML = count;\n document.getElementById(\"cart2\").innerHTML = count;\n document.getElementById(\"spinner\").classList.add(\"hidden\");\n if (document.getElementById(\"price_spinner\"))\n document.getElementById(\"price_spinner\").classList.add(\"hidden\");\n });\n } else {\n document.getElementById(\"spinner\").classList.add(\"hidden\");\n }\n }\n\n updateBasketAgent(basket) {\n if (basket) {\n const url = `/booking_process/get_basket/${basket}`;\n let price = 0;\n let discount = 0;\n let sum = 0;\n let basket = sessionStorage.getItem(\"baskets\");\n let count = basket ? JSON.parse(basket).length : 0;\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n let unavailable = document.getElementById(\"unavailable\");\n if (unavailable) unavailable.classList.add(\"hidden\");\n if (data) {\n data.OrderPosition.forEach((element) => {\n price = price + element.pricePerUnit;\n if (element.prodType == \"X\")\n if (element.pricePerUnit < 0)\n discount = discount + Math.abs(element.pricePerUnit);\n });\n }\n let supertotal = document.getElementById(\"supertotal\");\n let superdiscount = document.getElementById(\"discount\");\n let wrapper = document.getElementById(\"discount-wrapper\");\n if (discount > 0) {\n sum = price + discount;\n sum = sum.toFixed(2);\n sum = sum.replace(\".\", \",\");\n price = price.toFixed(2);\n price = price.replace(\".\", \",\");\n discount = discount.toFixed(2);\n discount = discount.replace(\".\", \",\");\n if (supertotal) {\n supertotal.innerHTML = sum + \"€\";\n supertotal.classList.remove(\"hidden\");\n }\n if (superdiscount) {\n superdiscount.innerHTML = discount + \"€\";\n wrapper.classList.remove(\"hidden\");\n }\n } else {\n if (supertotal) supertotal.classList.add(\"hidden\");\n if (wrapper) wrapper.classList.add(\"hidden\");\n }\n let total = document.getElementById(\"total\");\n if (total) total.innerHTML = price;\n\n const event = document.createEvent(\"Event\");\n event.initEvent(\"priced\", true, true);\n document.dispatchEvent(event);\n document.getElementById(\"cart1\").innerHTML = count;\n document.getElementById(\"cart2\").innerHTML = count;\n });\n }\n }\n\n removeFromCart(event) {\n document.getElementById(\"spinner\").classList.remove(\"hidden\");\n let basket = sessionStorage.getItem(\"basket\");\n let cancel = \"\";\n let tmp;\n let path = event.path || (event.composedPath && event.composedPath());\n path.forEach((element) => {\n if (element.dataset && element.dataset.cancel) {\n cancel = element.dataset.cancel;\n tmp = JSON.parse(element.dataset.item);\n }\n });\n if (cancel.length > 0) {\n let items;\n if (tmp.modelId) {\n items = [\n {\n item_id: tmp.modelId.toString(),\n item_name: tmp.modelName,\n item_brand: tmp.manufacturer,\n item_category: tmp.category,\n location_id: tmp.plocId,\n price: parseFloat(tmp.pricePerUnit),\n quantity: tmp.unitCount,\n },\n ];\n } else {\n items = [\n {\n item_id: tmp.tourId.toString(),\n item_name: tmp.details.tourName,\n item_category: tmp.details.categoryName,\n location_id: tmp.details.locId,\n price: parseFloat(tmp.pricePerUnit),\n quantity: 1,\n },\n ];\n }\n let url = `/booking_process/remove_from_basket?basket=${basket}&res_id=${cancel}`;\n fetch(url).then((data) => {\n this.removeFromCart_layer(parseFloat(tmp.priceTotal), items);\n //this.updateBasket();\n window.location.reload();\n });\n }\n }\n\n toggleTour(event) {\n let basket = event.target.dataset.basket\n ? event.target.dataset.basket\n : sessionStorage.getItem(\"basket\");\n const tour = event.target;\n const bike = tour.dataset.bike;\n var date = tour.dataset.date;\n const cancel = tour.dataset.cancel;\n let tours = document.querySelectorAll(`.tour-${bike}`);\n let tmp = JSON.parse(tour.dataset.item);\n let add;\n\n if (tour.checked) {\n tours.forEach((element) => {\n if (element.value != tour.value && date == element.dataset.date)\n element.setAttribute(\"disabled\", \"disabled\");\n });\n add = true;\n var url = `/booking_process/add_tour_to_basket?basket=${basket}&tour=${tour.value}&bpr=${tour.dataset.bpr}&res=${bike}&loc=${tour.dataset.loc}&date=${date}`;\n } else {\n tours.forEach((element) => {\n if (element.value != tour.value && date == element.dataset.date)\n element.removeAttribute(\"disabled\");\n });\n add = false;\n var url = `/booking_process/remove_from_basket?basket=${basket}&res_id=${cancel}`;\n }\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n let items = [\n {\n item_id: tmp.tourId.toString(),\n item_name: tmp.details.tourName,\n item_category: tmp.details.categoryName,\n location_id: tmp.details.locId,\n price: parseFloat(tmp.price),\n quantity: 1,\n },\n ];\n if (add) this.addToCart_layer(parseFloat(tmp.price), items);\n else this.removeFromCart_layer(parseFloat(tmp.price), items);\n this.updateBasket();\n if (data && data.resId) event.target.dataset.cancel = data.resId;\n else delete event.target.dataset.cancel;\n });\n }\n\n toggleExtra(event) {\n let lang = \"en\";\n let basket = sessionStorage.getItem(\"basket\");\n const extra = event.target;\n const cancel = extra.dataset.cancel;\n let resId = extra.dataset.bike;\n let tmp = JSON.parse(extra.dataset.item);\n let add;\n\n if (extra.checked) {\n add = true;\n var url = `/booking_process/add_extra_to_bike?basket=${basket}&res_id=${resId}&prod_id=${extra.value}&lang=${lang}`;\n } else {\n add = false;\n var url = `/booking_process/remove_from_basket?basket=${basket}&res_id=${cancel}`;\n }\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n let items = [\n {\n item_id: tmp.prodId.toString(),\n item_name: tmp.title,\n currency: \"EUR\",\n item_category: tmp.prodType,\n price: parseFloat(tmp.price),\n },\n ];\n if (add) this.addToCart_layer(parseFloat(tmp.price), items);\n else this.removeFromCart_layer(parseFloat(tmp.price), items);\n this.updateBasket();\n if (data && data.resId) event.target.dataset.cancel = data.resId;\n else delete event.target.dataset.cancel;\n });\n }\n\n removeTour(event) {\n let basket = sessionStorage.getItem(\"basket\");\n const tour = event.target;\n const cancel = tour.dataset.cancel;\n var url = `/booking_process/remove_from_basket?basket=${basket}&res_id=${cancel}`;\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n const container = document.getElementById(\"tour-\" + cancel);\n container.parentElement.removeChild(container);\n this.updateBasket();\n });\n }\n\n removeExtra(event) {\n let basket = sessionStorage.getItem(\"basket\");\n const extra = event.target;\n const cancel = extra.dataset.cancel;\n var url = `/booking_process/remove_from_basket?basket=${basket}&res_id=${cancel}`;\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n const container = document.getElementById(\"extra-\" + cancel);\n container.parentElement.removeChild(container);\n });\n }\n\n payBooking() {\n let terms = document.getElementById(\"terms\");\n if (terms.checked) {\n let basket = sessionStorage.getItem(\"basket\");\n let comment = document.getElementById(\"comment\").value;\n let url = `/booking_process/send_comment?basket=${basket}&comment=${comment}`;\n document.getElementById(\"spinner\").classList.remove(\"hidden\");\n document.getElementById(\"spinner-text\").classList.remove(\"hidden\");\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n let url = `/booking_process/create-payment?basket=${basket}`;\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n console.log(data);\n window.location = `https://www.vivapayments.com/web/checkout?ref=${data.ref}`;\n });\n });\n }\n }\n\n closeBasket(event) {\n let terms = document.getElementById(\"terms\");\n if (terms.checked) {\n let basket = sessionStorage.getItem(\"basket\");\n let comment = document.getElementById(\"comment\").value;\n let email = document.getElementById(\"user-mail\").innerHTML;\n let url = `/booking_process/send_comment?basket=${basket}&comment=${comment}`;\n document.getElementById(\"spinner\").classList.remove(\"hidden\");\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n let url = `/booking_process/close_basket?basket=${basket}&email=${email}`;\n fetch(url).then((response) => {\n sessionStorage.removeItem(\"basket\");\n let modal = document.getElementById(\"modal\");\n modal.classList.remove(\"hidden\");\n document.getElementById(\"spinner\").classList.add(\"hidden\");\n });\n });\n }\n }\n\n closeUnavailable(event) {\n document.getElementById(\"unavailable\").classList.add(\"hidden\");\n }\n\n finish(event) {\n window.location.href = \"/\";\n }\n\n check_season(date) {\n let summer_start = document.getElementById(\"season_from\");\n let summer_end = document.getElementById(\"season_to\");\n let min = 2;\n\n if (summer_start && summer_end) {\n summer_start = new Date(summer_start.value);\n summer_end = new Date(summer_end.value);\n if (date >= summer_start && date <= summer_end) min = 0;\n }\n return min;\n }\n\n padTo2Digits(num) {\n return num.toString().padStart(2, \"0\");\n }\n\n closeModal() {\n document.getElementById(\"modal\").classList.add(\"hidden\");\n }\n\n reload() {\n document.getElementById(\"spinner\").classList.remove(\"hidden\");\n location.reload();\n }\n\n showPasswordField() {\n document.getElementById(\"password-section\").classList.toggle(\"hidden\");\n }\n\n single_bike_layer(elem) {\n let bike;\n if (elem && elem.dataset) {\n bike = JSON.parse(elem.dataset.bike);\n let price = parseFloat(elem.dataset.price);\n let tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"view_item\",\n ecommerce: {\n item_list_name: \"Bikes\",\n items: [\n {\n item_id: bike.model_id.toString(),\n item_name: bike.model_title,\n currency: \"EUR\",\n index: 0,\n item_brand: bike.manufacturer,\n item_category: bike.product_group_name,\n price: parseFloat(price),\n quantity: 1,\n },\n ],\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - view_item\", dataLayer);\n }\n }\n\n bikes_layer() {\n let bikesData = [];\n let bikes = document.getElementsByClassName(\"bike-info\");\n for (let i = 0; i < bikes.length; i++) {\n let bike = JSON.parse(bikes[i].dataset.bike);\n bikesData.push({\n item_id: bike.model_id.toString(),\n item_name: bike.model_title,\n currency: \"EUR\",\n index: i,\n item_brand: bike.manufacturer,\n item_category: bike.product_group_name,\n price: parseFloat(bikes[i].dataset.price),\n quantity: 1,\n });\n }\n let tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"view_item_list\",\n ecommerce: {\n item_list_name: \"Bikes\",\n items: bikesData,\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - view_item_list\", dataLayer);\n }\n\n cart_layer() {\n document.removeEventListener(\"priced\", this.cart_layer);\n const items = document.getElementsByClassName(\"cart-item\");\n const options = document.querySelectorAll(\"input.extra:checked\");\n const total = document.getElementById(\"total\");\n let tmp;\n let itemsData = [];\n for (let i = 0; i < items.length; i++) {\n let item = items[i].dataset;\n tmp = JSON.parse(item.value);\n if (item.type === \"bike\") {\n itemsData.push({\n item_id: tmp.modelId.toString(),\n item_name: tmp.modelName,\n currency: \"EUR\",\n index: i,\n item_brand: tmp.manufacturer,\n item_category: tmp.category,\n price: parseFloat(tmp.pricePerUnit),\n location_id: tmp.plocId.toString(),\n quantity: tmp.unitCount,\n });\n }\n if (item.type === \"tour\") {\n itemsData.push({\n item_id: tmp.tourId.toString(),\n item_name: tmp.details.tourName,\n currency: \"EUR\",\n index: i,\n item_category: tmp.details.categoryName,\n price: parseFloat(tmp.pricePerUnit),\n location_id: tmp.details.locId.toString(),\n quantity: tmp.unitCount,\n });\n }\n }\n for (let i = 0; i < options.length; i++) {\n let item = options[i].dataset;\n tmp = JSON.parse(item.item);\n itemsData.push({\n item_id: tmp.prodId.toString(),\n item_name: tmp.title,\n currency: \"EUR\",\n index: i,\n item_category: tmp.prodType,\n price: parseFloat(tmp.price),\n });\n }\n tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n let session = JSON.stringify({\n currency: \"EUR\",\n value: parseFloat(total.innerText),\n items: itemsData,\n enhanced_conversion_data: user,\n });\n sessionStorage.setItem(\"cart_layer\", session);\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"view_cart\",\n ecommerce: { session },\n });\n console.log(\"DATALAYER - view_cart\", dataLayer);\n }\n\n addToCart_layer(total, items) {\n let tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"add_to_cart\",\n ecommerce: {\n currency: \"EUR\",\n value: parseFloat(total),\n items: items,\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - add_to_cart\", dataLayer);\n }\n\n removeFromCart_layer(total, items) {\n let tmp = document.getElementById(\"user-info\");\n let user = {};\n if (tmp) {\n tmp = tmp.dataset;\n user = {\n email: tmp.email,\n first_name: tmp.first_name,\n last_name: tmp.last_name,\n phone_number: tmp.phone_number,\n street: tmp.street,\n city: tmp.city,\n region: tmp.region,\n postal_code: tmp.postal_code,\n country: tmp.country,\n };\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"remove_from_cart\",\n ecommerce: {\n currency: \"EUR\",\n value: parseFloat(total),\n items: items,\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - remove_from_cart\", dataLayer);\n }\n}\n","import { Controller } from \"stimulus\"\nimport { Turbo } from \"@hotwired/turbo-rails\";\nimport { turbo_fetch } from \"../helpers\";\n\nconst countries = {'Afghanistan': \"AF\", 'Aland Islands': \"AX\", 'Albania': \"AL\", 'Algeria': \"DZ\", 'American Samoa': \"AS\", 'Andorra': \"AD\", 'Angola': \"AO\", 'Anguilla': \"AI\", 'Antarctica': \"AQ\", 'Antigua and Barbuda': \"AG\", 'Argentina': \"AR\", 'Armenia': \"AM\", 'Aruba': \"AW\", 'Australia': \"AU\", 'Austria': \"AT\", 'Azerbaijan': \"AZ\", 'Bahamas': \"BS\", 'Bahrain': \"BH\", 'Bangladesh': \"BD\", 'Barbados': \"BB\", 'Belarus': \"BY\", 'Belgium': \"BE\", 'Belize': \"BZ\", 'Benin': \"BJ\", 'Bermuda': \"BM\", 'Bhutan': \"BT\", 'Bolivia': \"BO\", 'Bonaire, Saint Eustatius and Saba': \"BQ\", 'Bosnia and Herzegovina': \"BA\", 'Botswana': \"BW\", 'Bouvet Island': \"BV\", 'Brazil': \"BR\", 'British Indian Ocean Territory': \"IO\", 'British Virgin Islands': \"VG\", 'Brunei': \"BN\", 'Bulgaria': \"BG\", 'Burkina Faso': \"BF\", 'Burundi': \"BI\", 'Cambodia': \"KH\", 'Cameroon': \"CM\", 'Canada': \"CA\", 'Cape Verde': \"CV\", 'Cayman Islands': \"KY\", 'Central African Republic': \"CF\", 'Chad': \"TD\", 'Chile': \"CL\", 'China': \"CN\", 'Christmas Island': \"CX\", 'Cocos Islands': \"CC\", 'Colombia': \"CO\", 'Comoros': \"KM\", 'Cook Islands': \"CK\", 'Costa Rica': \"CR\", 'Croatia': \"HR\", 'Cuba': \"CU\", 'Curacao': \"CW\", 'Cyprus': \"CY\", 'Czech Republic': \"CZ\", 'Democratic Republic of the Congo': \"CD\", 'Denmark': \"DK\", 'Djibouti': \"DJ\", 'Dominica': \"DM\", 'Dominican Republic': \"DO\", 'East Timor': \"TL\", 'Ecuador': \"EC\", 'Egypt': \"EG\", 'El Salvador': \"SV\", 'Equatorial Guinea': \"GQ\", 'Eritrea': \"ER\", 'Estonia': \"EE\", 'Ethiopia': \"ET\", 'Falkland Islands': \"FK\", 'Faroe Islands': \"FO\", 'Fiji': \"FJ\", 'Finland': \"FI\", 'France': \"FR\", 'French Guiana': \"GF\", 'French Polynesia': \"PF\", 'French Southern Territories': \"TF\", 'Gabon': \"GA\", 'Gambia': \"GM\", 'Georgia': \"GE\", 'Germany': \"DE\", 'Ghana': \"GH\", 'Gibraltar': \"GI\", 'Greece': \"GR\", 'Greenland': \"GL\", 'Grenada': \"GD\", 'Guadeloupe': \"GP\", 'Guam': \"GU\", 'Guatemala': \"GT\", 'Guernsey': \"GG\", 'Guinea': \"GN\", 'Guinea-Bissau': \"GW\", 'Guyana': \"GY\", 'Haiti': \"HT\", 'Heard Island and McDonald Islands': \"HM\", 'Honduras': \"HN\", 'Hong Kong': \"HK\", 'Hungary': \"HU\", 'Iceland': \"IS\", 'India': \"IN\", 'Indonesia': \"ID\", 'Iran': \"IR\", 'Iraq': \"IQ\", 'Ireland': \"IE\", 'Isle of Man': \"IM\", 'Israel': \"IL\", 'Italy': \"IT\", 'Ivory Coast': \"CI\", 'Jamaica': \"JM\", 'Japan': \"JP\", 'Jersey': \"JE\", 'Jordan': \"JO\", 'Kazakhstan': \"KZ\", 'Kenya': \"KE\", 'Kiribati': \"KI\", 'Kosovo': \"XK\", 'Kuwait': \"KW\", 'Kyrgyzstan': \"KG\", 'Laos': \"LA\", 'Latvia': \"LV\", 'Lebanon': \"LB\", 'Lesotho': \"LS\", 'Liberia': \"LR\", 'Libya': \"LY\", 'Liechtenstein': \"LI\", 'Lithuania': \"LT\", 'Luxembourg': \"LU\", 'Macao': \"MO\", 'Macedonia': \"MK\", 'Madagascar': \"MG\", 'Malawi': \"MW\", 'Malaysia': \"MY\", 'Maldives': \"MV\", 'Mali': \"ML\", 'Malta': \"MT\", 'Marshall Islands': \"MH\", 'Martinique': \"MQ\", 'Mauritania': \"MR\", 'Mauritius': \"MU\", 'Mayotte': \"YT\", 'Mexico': \"MX\", 'Micronesia': \"FM\", 'Moldova': \"MD\", 'Monaco': \"MC\", 'Mongolia': \"MN\", 'Montenegro': \"ME\", 'Montserrat': \"MS\", 'Morocco': \"MA\", 'Mozambique': \"MZ\", 'Myanmar': \"MM\", 'Namibia': \"NA\", 'Nauru': \"NR\", 'Nepal': \"NP\", 'Netherlands': \"NL\", 'New Caledonia': \"NC\", 'New Zealand': \"NZ\", 'Nicaragua': \"NI\", 'Niger': \"NE\", 'Nigeria': \"NG\", 'Niue': \"NU\", 'Norfolk Island': \"NF\", 'North Korea': \"KP\", 'Northern Mariana Islands': \"MP\", 'Norway': \"NO\", 'Oman': \"OM\", 'Pakistan': \"PK\", 'Palau': \"PW\", 'Palestinian Territory': \"PS\", 'Panama': \"PA\", 'Papua New Guinea': \"PG\", 'Paraguay': \"PY\", 'Peru': \"PE\", 'Philippines': \"PH\", 'Pitcairn': \"PN\", 'Poland': \"PL\", 'Portugal': \"PT\", 'Puerto Rico': \"PR\", 'Qatar': \"QA\", 'Republic of the Congo': \"CG\", 'Reunion': \"RE\", 'Romania': \"RO\", 'Russia': \"RU\", 'Rwanda': \"RW\", 'Saint Barthelemy': \"BL\", 'Saint Helena': \"SH\", 'Saint Kitts and Nevis': \"KN\", 'Saint Lucia': \"LC\", 'Saint Martin': \"MF\", 'Saint Pierre and Miquelon': \"PM\", 'Saint Vincent and the Grenadines': \"VC\", 'Samoa': \"WS\", 'San Marino': \"SM\", 'Sao Tome and Principe': \"ST\", 'Saudi Arabia': \"SA\", 'Senegal': \"SN\", 'Serbia': \"RS\", 'Seychelles': \"SC\", 'Sierra Leone': \"SL\", 'Singapore': \"SG\", 'Sint Maarten': \"SX\", 'Slovakia': \"SK\", 'Slovenia': \"SI\", 'Solomon Islands': \"SB\", 'Somalia': \"SO\", 'South Africa': \"ZA\", 'South Georgia and the South Sandwich Islands': \"GS\", 'South Korea': \"KR\", 'South Sudan': \"SS\", 'Spain': \"ES\", 'Sri Lanka': \"LK\", 'Sudan': \"SD\", 'Suriname': \"SR\", 'Svalbard and Jan Mayen': \"SJ\", 'Swaziland': \"SZ\", 'Sweden': \"SE\", 'Switzerland': \"CH\", 'Syria': \"SY\", 'Taiwan': \"TW\", 'Tajikistan': \"TJ\", 'Tanzania': \"TZ\", 'Thailand': \"TH\", 'Togo': \"TG\", 'Tokelau': \"TK\", 'Tonga': \"TO\", 'Trinidad and Tobago': \"TT\", 'Tunisia': \"TN\", 'Turkey': \"TR\", 'Turkmenistan': \"TM\", 'Turks and Caicos Islands': \"TC\", 'Tuvalu': \"TV\", 'U.S. Virgin Islands': \"VI\", 'Uganda': \"UG\", 'Ukraine': \"UA\", 'United Arab Emirates': \"AE\", 'United Kingdom': \"GB\", 'United States': \"US\", 'United States Minor Outlying Islands': \"UM\", 'Uruguay': \"UY\", 'Uzbekistan': \"UZ\", 'Vanuatu': \"VU\", 'Vatican': \"VA\", 'Venezuela': \"VE\", 'Vietnam': \"VN\", 'Wallis and Futuna': \"WF\", 'Western Sahara': \"EH\", 'Yemen': \"YE\", 'Zambia': \"ZM\", 'Zimbabwe': \"ZW\"};\n\nexport default class extends Controller {\n static targets = [\"locale\", \"locations\", \"tourType\", \"season\"];\n\n async connect() {\n this.updateBasketHeader()\n let urlParams;\n (window.onpopstate = function () {\n let match,\n pl = /\\+/g, // Regex for replacing addition symbol with a space\n search = /([^&=]+)=?([^&]*)/g,\n decode = function (s) { return decodeURIComponent(s.replace(pl, \" \")); },\n query = window.location.search.substring(1);\n\n urlParams = {};\n while (match = search.exec(query))\n urlParams[decode(match[1])] = decode(match[2]);\n })();\n let plocId = document.getElementById('plocId');\n if ( plocId ) {\n if ( urlParams.plocId ) {\n plocId.value = urlParams.plocId;\n }\n else {\n let query = window.location.pathname.split('/');\n let island = false;\n query.forEach(element => {\n switch (element) {\n case 'gran-canaria':\n island = true;\n plocId.value = '1';\n break;\n case 'tenerife':\n island = true;\n plocId.value = '2';\n break;\n case 'lanzarote':\n island = true;\n plocId.value = '3';\n break; \n }\n });\n if ( !island ) {\n plocId.value = 1;\n }\n }\n }\n let tour_type = document.getElementById('tourType');\n if ( tour_type ) {\n if ( urlParams.tour_type ){\n tour_type.value = urlParams.tour_type;\n }\n }\n\n const island = sessionStorage.getItem('plocId');\n const type = sessionStorage.getItem('type');\n const season = sessionStorage.getItem('season');\n const level = sessionStorage.getItem('level');\n if ( island ) {\n if ( plocId )\n plocId.value = island;\n }\n if ( type ) {\n if ( tour_type )\n tour_type.value = type;\n }\n if ( season ) {\n let season_cont = document.getElementById('season');\n if ( season_cont )\n season_cont.value = season;\n }\n await this.filterLevels(null);\n\n if ( level ) {\n let level_cont = document.getElementById('tourLevel');\n if ( level_cont )\n level_cont.value = level;\n }\n this.filterTours(null);\n\n const tour = document.getElementById('view-tour');\n if ( tour ) {\n const info = JSON.parse(tour.dataset.info);\n let userInfo = document.getElementById('user-info');\n let user = {};\n if ( userInfo ) {\n userInfo = userInfo.dataset;\n user = {\n email: userInfo.email,\n first_name: userInfo.first_name,\n last_name: userInfo.last_name,\n phone_number: userInfo.phone_number,\n street: userInfo.street,\n city: userInfo.city,\n postal_code: userInfo.postal_code,\n country: userInfo.country\n }\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: 'view_item',\n ecommerce: {\n currency: \"EUR\",\n value: info.price_plain,\n items: [\n {\n item_id: info.tour_id,\n item_name: info.category_name,\n currency: \"EUR\",\n item_category: info.category_name,\n location_id: info.loc_id,\n price: info.price_plain,\n quantity: 1\n }\n ],\n enhanced_conversion_data: user\n }\n });\n console.log('DATALAYER - view_item', dataLayer);\n }\n }\n\n filterLevels(event) {\n let tourType = document.getElementById('tourType');\n if ( tourType ) {\n tourType = tourType.value;\n } else {\n return;\n }\n let season = document.getElementById('season');\n if ( season )\n season = season.value;\n else\n return;\n switch ( tourType ) {\n case '3':\n document.getElementById('rbike').classList.remove('hidden');\n document.getElementById('mbike').classList.add('hidden');\n document.getElementById('embike').classList.add('hidden');\n document.getElementById('trekking').classList.add('hidden');\n break;\n case '2':\n document.getElementById('mbike').classList.remove('hidden');\n document.getElementById('rbike').classList.add('hidden');\n document.getElementById('embike').classList.add('hidden');\n document.getElementById('trekking').classList.add('hidden');\n break;\n case '14':\n document.getElementById('trekking').classList.remove('hidden');\n document.getElementById('rbike').classList.add('hidden');\n document.getElementById('mbike').classList.add('hidden');\n document.getElementById('embike').classList.add('hidden');\n break;\n case '15':\n document.getElementById('embike').classList.remove('hidden');\n document.getElementById('rbike').classList.add('hidden');\n document.getElementById('mbike').classList.add('hidden');\n document.getElementById('trekking').classList.add('hidden');\n break;\n default:\n document.getElementById('mbike').classList.add('hidden');\n document.getElementById('rbike').classList.add('hidden');\n document.getElementById('embike').classList.add('hidden');\n document.getElementById('trekking').classList.add('hidden');\n }\n let select = document.getElementById(\"tourLevel\");\n for (let i = 0; i < select.options.length; i++ ) {\n select.options[i].classList.add('hidden');\n select.options[i].setAttribute('disabled', 'disabled');\n if ( (select.options[i].value == '') || ((tourType && (select.options[i].dataset.tour_type == tourType)) && (season && (select.options[i].dataset.season == season))) ) {\n select.options[i].classList.remove('hidden');\n select.options[i].removeAttribute('disabled');\n }\n }\n select.value = '';\n this.filterTours();\n }\n\n filterTours(event) {\n let tour_type;\n let level\n let plocId\n let season\n if (document.getElementById('tourType')) tour_type = document.getElementById('tourType').value;\n if (document.getElementById('tourLevel')) level = document.getElementById('tourLevel').value;\n if (document.getElementById('plocId')) plocId = document.getElementById('plocId').value;\n if (document.getElementById('season')) season = document.getElementById('season').value;\n\n const lang = this.localeTarget.value;\n let url = `/${lang}/booking_process/finder/tours?tour_type=${tour_type}&season=${season}&level=${level}&plocId=${plocId}`;\n\n let spinner = document.getElementById('spinner');\n if ( spinner )\n spinner.classList.remove('hidden');\n let flag = false;\n document.addEventListener(\"framed\", this.tours_layer);\n turbo_fetch(url);\n }\n\n saveFilters(event) {\n const island = document.getElementById('plocId');\n const type = document.getElementById('tourType');\n const season = document.getElementById('season');\n const level = document.getElementById('tourLevel');\n if ( island && island.value )\n sessionStorage.setItem('island', island.value);\n if ( type && type.value )\n sessionStorage.setItem('type', type.value);\n if ( season && season.value )\n sessionStorage.setItem('season', season.value);\n if ( level && level.value )\n sessionStorage.setItem('level', level.value);\n }\n\n closeBasket(event) {\n let terms = document.getElementById('terms');\n if ( terms.checked ) {\n let basket = sessionStorage.getItem('basket');\n let url = `/booking_process/close_basket?basket=${basket}`;\n fetch(url)\n .then(response => response.json())\n .then((data) => {\n sessionStorage.removeItem('basket');\n let modal = document.getElementById('modal');\n modal.classList.remove('hidden');\n });\n }\n }\n\n finish(event) {\n window.location.href = '/';\n }\n\n updateBasketHeader() {\n let basket = sessionStorage.getItem(\"basket\");\n let count = 0;\n if (basket) {\n const url = `/booking_process/get_basket/${basket}`;\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n if (data) {\n data.OrderPosition.forEach((element) => {\n if (element.prodType == \"R\" || element.prodType == \"T\") count++;\n });\n document.getElementById(\"cart1\").innerHTML = count;\n document.getElementById(\"cart2\").innerHTML = count;\n }\n });\n } else {\n let baskets = sessionStorage.getItem(\"baskets\");\n if (baskets) {\n count = JSON.parse(baskets).length;\n document.getElementById(\"cart1\").innerHTML = count;\n document.getElementById(\"cart2\").innerHTML = count;\n }\n }\n }\n\n pickBike(event) {\n let button = document.getElementById('addToCart');\n let select = document.getElementById('pedal');\n select.forEach(option => {\n select.remove(option);\n });\n let bike = JSON.parse(event.target.dataset.bike);\n let price = document.getElementById('price');\n let image = document.getElementById('image');\n button.dataset.model = bike.modelId;\n button.dataset.total = bike.price;\n price.innerHTML = bike.price;\n\n image.src = bike.image;\n let form = document.getElementById('form');\n if ( bike.pedals ) {\n form.classList.remove('hidden');\n let selected = event.target.dataset.selected;\n let pedals = bike.pedals;\n pedals.forEach(pedal => {\n let option = document.createElement(\"option\");\n option.text = pedal.pedalName;\n option.value = pedal.pedalId;\n if ( pedal.pedalId == selected ) {\n option.selected = 'selected';\n }\n select.appendChild(option);\n });\n }\n else {\n form.classList.add('hidden');\n }\n\n document.getElementById('modal').classList.remove('hidden');\n document.body.classList.add('overflow-hidden');\n\n //document.getElementById('spinner_modal').classList.remove('hidden');\n \n }\n\n addToCart(event) {\n let button;\n let path = event.path || (event.composedPath && event.composedPath());\n for (let el of path) {\n if (el.dataset.model !== undefined && el.dataset.model !== \"\") {\n button = el;\n break;\n }\n };\n\n let elem = document.getElementById('addToCart');\n elem.classList.remove('hidden');\n elem = elem.dataset;\n let tour_data = JSON.parse(elem.info);\n let errors = false;\n let name = document.getElementById('name');\n let surname = document.getElementById('surname');\n let weight = document.getElementById('weight');\n let height = document.getElementById('height');\n let pedal = document.getElementById('pedal');\n let saddle = document.getElementById('saddle');\n let date = document.getElementById('date').value;\n let modelId = button.dataset.model;\n let tourId = button.dataset.tour;\n let total = button.dataset.total;\n let form = document.getElementById('form');\n let location = button.dataset.location;\n let spinner_modal = document.getElementById('spinner_modal');\n let spinner_text = document.getElementById(\"spinner-text\");\n\n if ( !name.value ) {\n name.classList.add('error');\n errors = true;\n }\n else\n name.classList.remove('error');\n \n if ( !surname.value ) {\n surname.classList.add('error');\n errors = true;\n }\n else\n surname.classList.remove('error');\n\n if ( errors )\n return true;\n \n name = name.value;\n surname = surname.value;\n\n let url = `/booking_tours/add_to_basket?name=${name}&surname=${surname}&tour=${tourId}&model=${modelId}&loc=${location}&total=${total}&date=${date}`;\n\n if ( form && !form.classList.contains('hidden') ) {\n if ( weight ) {\n if ( weight.value )\n url += `&weight=${weight.value}`;\n else\n errors = true;\n }\n\n if ( height ) {\n if ( height.value )\n url += `&height=${height.value}`;\n else\n errors = true;\n }\n\n if ( pedal ) {\n if ( pedal.value )\n url += `&pedal=${pedal.value}`;\n else\n errors = true;\n }\n\n if ( saddle ) {\n if ( saddle.value )\n url += `&saddle=${saddle.value}`;\n }\n\n if ( errors ) {\n return true;\n }\n }\n\n if (spinner_modal) {\n spinner_text.classList.remove('hidden')\n spinner_modal.classList.remove('hidden');\n }\n\n let basket = sessionStorage.getItem('basket');\n\n if ( basket && basket !== 'undefined' )\n url += `&basket=${basket}`; \n\n document.getElementById('addToCart').classList.add('hidden');\n\n fetch(url)\n .then(response => response.json())\n .then((data) => {\n if (!data || data.unavailable) {\n document.getElementById(\"unavailable\").classList.remove(\"hidden\");\n document.getElementById(\"addToCart\").classList.remove(\"hidden\");\n spinner_text.classList.add(\"hidden\");\n }\n else {\n document.getElementById('continue').classList.remove('hidden');\n document.getElementById('close').classList.remove('hidden');\n sessionStorage.setItem('basket', data.basket);\n this.updateBasketHeader();\n\n let userInfo = document.getElementById('user-info');\n let user = {};\n if ( userInfo ) {\n userInfo = userInfo.dataset;\n user = {\n email: userInfo.email,\n first_name: userInfo.first_name,\n last_name: userInfo.last_name,\n phone_number: userInfo.phone_number,\n street: userInfo.street,\n city: userInfo.city,\n postal_code: userInfo.postal_code,\n country: userInfo.country\n }\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: 'add_to_cart',\n ecommerce: {\n currency: \"EUR\",\n value: parseFloat(total),\n items: [{\n item_id: tour_data.tour_id.toString(),\n item_name: tour_data.tour_name,\n index: 0,\n item_category: tour_data.category_name,\n location_id: tour_data.loc_id.toString(),\n price: parseFloat(total),\n quantity: 1\n }],\n enhanced_conversion_data: user\n }\n });\n console.log('DATALAYER - add_to_cart', dataLayer);\n\n }\n spinner_modal.classList.add(\"hidden\");\n spinner_text.classList.add(\"hidden\");\n })\n .catch(error => {\n if ( spinner_modal )\n spinner_modal.classList.add('hidden');\n console.error(error);\n document.getElementById('addToCart').classList.remove('hidden');\n });\n }\n\n addToCartAgent(event) {\n let elem = document.getElementById('addToCart');\n elem.classList.remove('hidden');\n elem = elem.dataset;\n let tour_data = JSON.parse(elem.info);\n let errors = false;\n let name = document.getElementById('name');\n let surname = document.getElementById('surname');\n let weight = document.getElementById('weight');\n let height = document.getElementById('height');\n let pedal = document.getElementById('pedal');\n let saddle = document.getElementById('saddle');\n let date = document.getElementById('date').value;\n let modelId = event.target.dataset.model;\n let tourId = event.target.dataset.tour;\n let total = event.target.dataset.total;\n let form = document.getElementById('form');\n let location = event.target.dataset.location;\n let spinner_modal = document.getElementById('spinner_modal');\n let mail = document.getElementById(\"rider-mail\");\n let phone = document.getElementById(\"rider-phone\");\n\n if ( !name.value ) {\n name.classList.add('error');\n errors = true;\n }\n else\n name.classList.remove('error');\n \n if ( !surname.value ) {\n surname.classList.add('error');\n errors = true;\n }\n else\n surname.classList.remove('error');\n\n if (!mail.value) {\n mail.classList.add(\"error\");\n errors = true;\n } else mail.classList.remove(\"error\");\n\n if (!phone.value) {\n phone.classList.add(\"error\");\n errors = true;\n } else phone.classList.remove(\"error\");\n\n if ( errors )\n return true;\n \n name = name.value;\n surname = surname.value;\n phone = phone.value;\n mail = mail.value\n\n let url = `/agents/add_tour_to_basket?name=${name}&surname=${surname}&tour=${tourId}&model=${modelId}&loc=${location}&total=${total}&date=${date}&mail=${mail}&phone=${phone}`;\n\n if ( form && !form.classList.contains('hidden') ) {\n if ( weight ) {\n if ( weight.value )\n url += `&weight=${weight.value}`;\n else\n errors = true;\n }\n\n if ( height ) {\n if ( height.value )\n url += `&height=${height.value}`;\n else\n errors = true;\n }\n\n if ( pedal ) {\n if ( pedal.value )\n url += `&pedal=${pedal.value}`;\n else\n errors = true;\n }\n\n if ( saddle ) {\n if ( saddle.value )\n url += `&saddle=${saddle.value}`;\n }\n\n if ( errors ) {\n return true;\n }\n }\n\n if (spinner_modal) spinner_modal.classList.remove('hidden');\n document.getElementById(\"spinner-text\").classList.remove(\"hidden\");\n\n let basket = sessionStorage.getItem('basket');\n\n if ( basket && basket !== 'undefined' ) url += `&basket=${basket}`; \n\n document.getElementById('addToCart').classList.add('hidden');\n\n fetch(url)\n .then(response => response.json())\n .then((data) => {\n if ( !data || data.unavailable ) {\n document.getElementById('unavailable').classList.remove('hidden');\n document.getElementById('addToCart').classList.remove('hidden');\n spinner_modal.classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.remove(\"hidden\");\n } else {\n document.getElementById('continue').classList.remove('hidden');\n document.getElementById('close').classList.remove('hidden');\n\n let storedBasket = sessionStorage.getItem(\"baskets\");\n let basketArray = storedBasket ? JSON.parse(storedBasket) : [];\n basketArray.push(data.basket);\n let updatedBasket = JSON.stringify(basketArray);\n sessionStorage.setItem(\"baskets\", updatedBasket);\n\n this.updateBasketHeader();\n\n let userInfo = document.getElementById('user-info');\n let user = {};\n if ( userInfo ) {\n userInfo = userInfo.dataset;\n user = {\n email: userInfo.email,\n first_name: userInfo.first_name,\n last_name: userInfo.last_name,\n phone_number: userInfo.phone_number,\n street: userInfo.street,\n city: userInfo.city,\n postal_code: userInfo.postal_code,\n country: userInfo.country\n }\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: 'add_to_cart',\n ecommerce: {\n currency: \"EUR\",\n value: parseFloat(total),\n items: [{\n item_id: tour_data.tour_id.toString(),\n item_name: tour_data.tour_name,\n index: 0,\n item_category: tour_data.category_name,\n location_id: tour_data.loc_id.toString(),\n price: parseFloat(total),\n quantity: 1\n }],\n enhanced_conversion_data: user\n }\n });\n console.log('DATALAYER - add_to_cart', dataLayer);\n\n }\n if ( spinner_modal )\n spinner_modal.classList.add('hidden');\n })\n .catch(error => {\n if ( spinner_modal )\n spinner_modal.classList.add('hidden');\n console.error(error);\n document.getElementById('addToCart').classList.remove('hidden');\n });\n }\n\n closeModal(event) {\n document.getElementById('modal').classList.add('hidden');\n document.body.classList.remove('overflow-hidden');\n document.getElementById('addToCart').classList.remove('hidden');\n document.getElementById('continue').classList.add('hidden');\n document.getElementById('close').classList.add('hidden');\n }\n\n showTab(event) {\n event.preventDefault();\n event.stopPropagation();\n\n const param = event.target.dataset.container;\n\n let cont1 = document.getElementById('cont1');\n let conts1 = document.getElementsByClassName('cont1');\n let cont2 = document.getElementById('cont2');\n let conts2 = document.getElementsByClassName('cont2');\n let cont3 = document.getElementById('cont3');\n let conts3 = document.getElementsByClassName('cont3');\n let cont4 = document.getElementById('cont4');\n let conts4 = document.getElementsByClassName('cont4');\n let navContent = document.getElementsByClassName('nav-content');\n let navContentArray = Array.from(navContent);\n let navContentArrayLength = navContentArray.length;\n let i;\n\n for (i = 0; i < navContentArrayLength; i++) {\n navContentArray[i].classList.add('hidden');\n }\t\t\t\t\n\n switch(param) {\n\n case 'cont1':\n for (i = 0; i < conts1.length; i++) {\n conts1[i].classList.remove('border-transparent','text-gray-500');\n conts1[i].classList.add('freemotion-border','freemotion-color');\n conts2[i].classList.remove('freemotion-border','freemotion-color');\n conts2[i].classList.add('border-transparent','text-gray-500');\n conts3[i].classList.remove('freemotion-border','freemotion-color');\n conts3[i].classList.add('border-transparent','text-gray-500');\n //conts4[i].classList.remove('freemotion-border','freemotion-color');\n //conts4[i].classList.add('border-transparent','text-gray-500');\n }\n cont1.classList.remove('hidden');\n break;\n case 'cont2':\n for (i = 0; i < conts2.length; i++) {\n conts1[i].classList.remove('freemotion-border','freemotion-color');\n conts1[i].classList.add('border-transparent','text-gray-500');\n conts2[i].classList.remove('border-transparent','text-gray-500');\n conts2[i].classList.add('freemotion-border','freemotion-color');\n conts3[i].classList.remove('freemotion-border','freemotion-color');\n conts3[i].classList.add('border-transparent','text-gray-500');\n //conts4[i].classList.remove('freemotion-border','freemotion-color');\n //conts4[i].classList.add('border-transparent','text-gray-500');\n }\n cont2.classList.remove('hidden');\n break;\n case 'cont3':\n for (i = 0; i < conts3.length; i++) {\n conts1[i].classList.remove('freemotion-border','freemotion-color');\n conts1[i].classList.add('border-transparent','text-gray-500');\n conts2[i].classList.remove('freemotion-border','freemotion-color');\n conts2[i].classList.add('border-transparent','text-gray-500');\n conts3[i].classList.remove('border-transparent','text-gray-500');\n conts3[i].classList.add('freemotion-border','freemotion-color');\n //conts4[i].classList.remove('freemotion-border','freemotion-color');\n //conts4[i].classList.add('border-transparent','text-gray-500');\n }\n cont3.classList.remove('hidden');\n break;\n /*case 'cont4':\n for (i = 0; i < conts4.length; i++) {\n conts1[i].classList.remove('freemotion-border','freemotion-color');\n conts1[i].classList.add('border-transparent','text-gray-500');\n conts2[i].classList.remove('freemotion-border','freemotion-color');\n conts2[i].classList.add('border-transparent','text-gray-500');\n conts3[i].classList.remove('freemotion-border','freemotion-color');\n conts3[i].classList.add('border-transparent','text-gray-500');\n conts4[i].classList.remove('border-transparent','text-gray-500');\n conts4[i].classList.add('freemotion-border','freemotion-color');\n }\n cont4.classList.remove('hidden');\n break;*/\n }\n }\n\n closeUnavailable(event) {\n document.getElementById('unavailable').classList.add('hidden');\n }\n\n step2(event) {\n let basket = sessionStorage.getItem('basket');\n if ( basket ) {\n\n let spinner = document.getElementById('spinner');\n if ( spinner )\n spinner.classList.remove('hidden');\n let spinner_modal = document.getElementById('spinner_modal');\n if ( spinner_modal )\n spinner_modal.classList.remove('hidden');\n document.addEventListener(\"turbo:before-fetch-response\", function (e) {\n let selected = false;\n let interval = setInterval(function() {\n let select = document.getElementById(\"country\");\n if (select) {\n clearInterval(interval);\n for (let key in countries) {\n let option = document.createElement(\"option\");\n option.text = key;\n option.value = countries[key];\n if ( option.value === 'ES' ){\n option.id = 'es';\n }\n if ( select.dataset.country === countries[key] ){\n option.selected = 'selected';\n selected = true;\n }\n select.appendChild(option);\n }\n if ( !selected ) {\n let spain = document.getElementById('es');\n spain.setAttribute('selected', 'selected');\n }\n }\n }, 100);\n });\n const lang = this.localeTarget.value;\n window.location.href = `/${lang}/basket?basket=${basket}`;\n }\n \n }\n\n step2Agent() {\n let spinner = document.getElementById(\"spinner\");\n if (spinner) spinner.classList.remove(\"hidden\");\n let spinner_modal = document.getElementById(\"spinner_modal\");\n if (spinner_modal) spinner_modal.classList.remove(\"hidden\");\n const lang = this.localeTarget.value;\n window.location.href = `/${lang}/agents/baskets`;\n }\n\n toggleLogin(event) {\n let elem = document.getElementById(\"collapse\");\n let elem2 = document.getElementById(\"session\");\n elem.classList.toggle(\"hidden\");\n elem2.classList.toggle(\"hidden\");\n }\n\n showSpinner() {\n let spinner_modal = document.getElementById(\"spinner_modal\");\n if (spinner_modal) spinner_modal.classList.remove('hidden')\n }\n\n tours_layer() {\n document.removeEventListener(\"framed\", this.tours_layer);\n const layer = document.getElementById('tours-booking');\n if ( !layer )\n return;\n let toursData = [];\n setTimeout(() => {\n let tours = document.getElementsByClassName('tour-info');\n for( let i = 0; i < tours.length; i++ ) {\n const tour = JSON.parse(tours[i].dataset.tour);\n toursData.push(\n {\n item_id: tour.tour_id.toString(),\n item_name: tour.tour_name,\n currency: \"EUR\",\n index: i,\n item_category: tour.category_name,\n price: parseFloat(tour.price_plain),\n quantity: 1\n }\n );\n }\n let userInfo = document.getElementById('user-info');\n let user = {};\n if ( userInfo ) {\n userInfo = userInfo.dataset;\n user = {\n email: userInfo.email,\n first_name: userInfo.first_name,\n last_name: userInfo.last_name,\n phone_number: userInfo.phone_number,\n street: userInfo.street,\n city: userInfo.city,\n postal_code: userInfo.postal_code,\n country: userInfo.country\n }\n }\n\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: 'view_item_list',\n ecommerce: {\n item_list_name: \"Tours\",\n items: toursData,\n enhanced_conversion_data: user\n }\n });\n console.log('DATALAYER - view_item_list', dataLayer);\n }, 100);\n }\n\n}","import { Controller } from \"stimulus\";\nimport { turbo_fetch } from \"../helpers\";\n\nexport default class extends Controller {\n static values = { tour: String };\n\n connect() {\n this.updateBasket();\n }\n\n pickBike(event) {\n let button = document.getElementById(\"addToCart\");\n let select = document.getElementById(\"pedal\");\n select.forEach((option) => {\n select.remove(option);\n });\n let bike = JSON.parse(event.target.dataset.bike);\n let price = document.getElementById(\"price\");\n let image = document.getElementById(\"image\");\n button.dataset.model = bike.modelId;\n button.dataset.total = bike.price;\n price.innerHTML = bike.price;\n\n image.src = bike.image;\n let form = document.getElementById(\"form\");\n if (bike.pedals) {\n form.classList.remove(\"hidden\");\n let selected = event.target.dataset.selected;\n let pedals = bike.pedals;\n pedals.forEach((pedal) => {\n let option = document.createElement(\"option\");\n option.text = pedal.pedalName;\n option.value = pedal.pedalId;\n if (pedal.pedalId == selected) {\n option.selected = \"selected\";\n }\n select.appendChild(option);\n });\n } else {\n form.classList.add(\"hidden\");\n }\n\n document.getElementById(\"modal\").classList.remove(\"hidden\");\n document.body.classList.add(\"overflow-hidden\");\n\n //document.getElementById('spinner_modal').classList.remove('hidden');\n }\n\n setBike(obj) {\n const lang = document.getElementById(\"locale\").value;\n let bike = null;\n if (obj && obj.modelId) {\n bike = obj.modelId;\n } else return;\n let date = obj.date.split(\"/\");\n date = new Date(date[2], date[1] - 1, date[0]);\n let pick = document.getElementById(\"select-\" + bike);\n let unpick = document.getElementById(\"unselect-\" + bike);\n let boxes = document.getElementsByClassName(\"bike-box\");\n let box = document.getElementById(\"bike-\" + bike);\n let tours = document.getElementById(\"tour-boxes\");\n boxes.forEach((element) => {\n element.classList.add(\"hidden\");\n });\n box.classList.remove(\"hidden\");\n pick.classList.add(\"hidden\");\n unpick.classList.remove(\"hidden\");\n unpick.dataset.resId = obj.resId;\n let dates = document.getElementsByClassName(\"tour-date\").length;\n for (let i = 0; i < dates; i++) {\n let elem = document.getElementById(`date-${i}`);\n let elem2 = document.getElementById(`tour-${i}`);\n elem.innerHTML = `${getWeekDay(date.getDay(),lang)} - ${date.toLocaleDateString()}`;\n elem2.dataset.date = date.toLocaleDateString();\n elem2.dataset.resId = obj.resId;\n date.setDate(date.getDate() + 1);\n }\n tours.classList.remove(\"hidden\");\n this.updateBasket();\n this.closeModal();\n\n function getWeekDay(day, lang) {\n let weekDays;\n switch (lang) {\n case \"es\":\n weekDays = [\n \"Domingo\",\n \"Lunes\",\n \"Martes\",\n \"Miércoles\",\n \"Jueves\",\n \"Viernes\",\n \"Sábado\",\n ];\n break;\n case \"de\":\n weekDays = [\n \"Sonntag\",\n \"Montag\",\n \"Dienstag\",\n \"Mittwoch\",\n \"Donnerstag\",\n \"Freitag\",\n \"Samstag\",\n ];\n break;\n default:\n weekDays = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ];\n break;\n }\n return weekDays[day];\n }\n }\n\n undoBike(e) {\n let bike = null;\n let resId = null;\n if (e.target.dataset && e.target.dataset.bike) {\n bike = JSON.parse(e.target.dataset.bike);\n } else return;\n let pick = document.getElementById(\"select-\" + bike.modelId);\n let unpick = document.getElementById(\"unselect-\" + bike.modelId);\n let boxes = document.getElementsByClassName(\"bike-box\");\n let tours = document.getElementById(\"tour-boxes\");\n boxes.forEach((element) => {\n element.classList.remove(\"hidden\");\n });\n pick.classList.remove(\"hidden\");\n unpick.classList.add(\"hidden\");\n tours.classList.add(\"hidden\");\n if (e.target.dataset && e.target.dataset.resId) {\n resId = JSON.parse(e.target.dataset.resId);\n }\n let basket = sessionStorage.getItem(\"basket\");\n let url = `/booking_process/remove_from_basket?basket=${basket}&res_id=${resId}`;\n fetch(url).then((data) => {\n this.updateBasket();\n });\n }\n\n pickTour(e) {\n const lang = document.getElementById(\"locale\").value;\n let path = e.path || (e.composedPath && e.composedPath());\n path.forEach((el) => {\n if (el.dataset && el.dataset.date) {\n let tour = JSON.parse(\n document.getElementById(\"view-tour\").dataset.info\n );\n let stringDate = formatDate(el.dataset.date);\n let date = new Date(stringDate);\n let index = el.dataset.index;\n let week = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n let day = week[date.getDay()];\n let url = `/${lang}/booking_process/filter_tours?day=${day}&cat=${tour.tour_group_id}&locg_id=${tour.locg_id}&season=${tour.season_id}&index=${index}`;\n if (tour.duration - tour.num_sub_tours >= getTours(el))\n url += `&full=true`;\n turbo_fetch(url);\n fetch(url).then((response) => {\n let modal = document.getElementById(\"modal_list\");\n modal.classList.remove(\"hidden\");\n });\n }\n });\n\n function formatDate(stringDate) {\n let arrayDate = stringDate.split(\"/\");\n let day = arrayDate[0].padStart(2, \"0\");\n let month = arrayDate[1].padStart(2, \"0\");\n return `${arrayDate[2]}-${month}-${day}`;\n }\n\n function getTours(element) {\n let list = element.parentNode.parentNode;\n let notSelected = list.querySelectorAll(\n \":scope > turbo-frame > div[data-action]\"\n );\n return notSelected.length;\n }\n }\n\n addToCart(event) {\n let elem = document.getElementById(\"addToCart\");\n elem.classList.remove(\"hidden\");\n elem = elem.dataset;\n let tour_data = JSON.parse(elem.info);\n let errors = false;\n let name = document.getElementById(\"name\");\n let surname = document.getElementById(\"surname\");\n let weight = document.getElementById(\"weight\");\n let height = document.getElementById(\"height\");\n let pedal = document.getElementById(\"pedal\");\n let saddle = document.getElementById(\"saddle\");\n let date = document.getElementById(\"date\").value;\n let modelId = event.target.dataset.model;\n let tourId = event.target.dataset.tour;\n let total = event.target.dataset.total;\n let duration = event.target.dataset.duration;\n let form = document.getElementById(\"form\");\n let location = event.target.dataset.location;\n let spinner_modal = document.getElementById(\"spinner_modal\");\n\n if (!name.value) {\n name.classList.add(\"error\");\n errors = true;\n } else name.classList.remove(\"error\");\n\n if (!surname.value) {\n surname.classList.add(\"error\");\n errors = true;\n } else surname.classList.remove(\"error\");\n\n if (errors) return true;\n\n name = name.value;\n surname = surname.value;\n\n let url = `/booking_tours/add_to_basket?name=${name}&surname=${surname}&tour=${tourId}&model=${modelId}&loc=${location}&total=${total}&date=${date}&duration=${duration}`;\n\n if (form && !form.classList.contains(\"hidden\")) {\n if (weight) {\n if (weight.value) url += `&weight=${weight.value}`;\n else errors = true;\n }\n\n if (height) {\n if (height.value) url += `&height=${height.value}`;\n else errors = true;\n }\n\n if (pedal) {\n if (pedal.value) url += `&pedal=${pedal.value}`;\n else errors = true;\n }\n\n if (saddle) {\n if (saddle.value) url += `&saddle=${saddle.value}`;\n }\n\n if (errors) {\n return true;\n }\n }\n\n let basket = sessionStorage.getItem(\"basket\");\n\n if (basket && basket !== \"undefined\") url += `&basket=${basket}`;\n\n document.getElementById(\"addToCart\").classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.remove(\"hidden\");\n spinner_modal.classList.remove(\"hidden\");\n\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n if (!data || data.unavailable || data.resId == null) {\n document.getElementById(\"unavailable\").classList.remove(\"hidden\");\n document.getElementById(\"addToCart\").classList.remove(\"hidden\");\n spinner_modal.classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.add(\"hidden\");\n } else {\n sessionStorage.setItem(\"basket\", data.basket);\n\n let userInfo = document.getElementById(\"user-info\");\n let user = {};\n if (userInfo) {\n userInfo = userInfo.dataset;\n user = {\n email: userInfo.email,\n first_name: userInfo.first_name,\n last_name: userInfo.last_name,\n phone_number: userInfo.phone_number,\n street: userInfo.street,\n city: userInfo.city,\n postal_code: userInfo.postal_code,\n country: userInfo.country,\n };\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"add_to_cart\",\n ecommerce: {\n currency: \"EUR\",\n value: parseFloat(total),\n items: [\n {\n item_id: tour_data.tour_id.toString(),\n item_name: tour_data.tour_name,\n index: 0,\n item_category: tour_data.category_name,\n location_id: tour_data.loc_id.toString(),\n price: parseFloat(total),\n quantity: 1,\n },\n ],\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - add_to_cart\", dataLayer);\n }\n if (spinner_modal) spinner_modal.classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.add(\"hidden\");\n\n let obj = {\n modelId: data.modelId,\n resId: data.resId,\n date: date,\n };\n this.setBike(obj);\n })\n .catch((error) => {\n if (spinner_modal) spinner_modal.classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.add(\"hidden\");\n console.error(error);\n document.getElementById(\"addToCart\").classList.remove(\"hidden\");\n });\n }\n\n addToCartAgent(event) {\n let elem = document.getElementById(\"addToCart\");\n elem.classList.remove(\"hidden\");\n elem = elem.dataset;\n let tour_data = JSON.parse(elem.info);\n let errors = false;\n let name = document.getElementById(\"name\");\n let surname = document.getElementById(\"surname\");\n let weight = document.getElementById(\"weight\");\n let height = document.getElementById(\"height\");\n let pedal = document.getElementById(\"pedal\");\n let saddle = document.getElementById(\"saddle\");\n let date = document.getElementById(\"date\").value;\n let modelId = event.target.dataset.model;\n let tourId = event.target.dataset.tour;\n let total = event.target.dataset.total;\n let duration = event.target.dataset.duration;\n let form = document.getElementById(\"form\");\n let location = event.target.dataset.location;\n let spinner_modal = document.getElementById(\"spinner_modal\");\n let mail = document.getElementById(\"rider-mail\");\n let phone = document.getElementById(\"rider-phone\");\n\n if (!name.value) {\n name.classList.add(\"error\");\n errors = true;\n } else name.classList.remove(\"error\");\n\n if (!surname.value) {\n surname.classList.add(\"error\");\n errors = true;\n } else surname.classList.remove(\"error\");\n\n if (!mail.value) {\n mail.classList.add(\"error\");\n errors = true;\n } else mail.classList.remove(\"error\");\n\n if (!phone.value) {\n phone.classList.add(\"error\");\n errors = true;\n } else phone.classList.remove(\"error\");\n\n if (errors) return true;\n\n name = name.value;\n surname = surname.value;\n phone = phone.value;\n mail = mail.value\n\n let url = `/agents/add_tour_to_basket?name=${name}&surname=${surname}&tour=${tourId}&model=${modelId}&loc=${location}&total=${total}&date=${date}&mail=${mail}&phone=${phone}`;\n\n if (form && !form.classList.contains(\"hidden\")) {\n if (weight) {\n if (weight.value) url += `&weight=${weight.value}`;\n else errors = true;\n }\n\n if (height) {\n if (height.value) url += `&height=${height.value}`;\n else errors = true;\n }\n\n if (pedal) {\n if (pedal.value) url += `&pedal=${pedal.value}`;\n else errors = true;\n }\n\n if (saddle) {\n if (saddle.value) url += `&saddle=${saddle.value}`;\n }\n\n if (errors) {\n return true;\n }\n }\n\n if ( spinner_modal ) spinner_modal.classList.remove('hidden');\n\n //let basket = sessionStorage.getItem(\"basket\");\n //if (basket && basket !== \"undefined\") url += `&basket=${basket}`;\n\n document.getElementById(\"addToCart\").classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.remove(\"hidden\");\n spinner_modal.classList.remove(\"hidden\");\n\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n if (!data || data.unavailable) {\n document.getElementById(\"unavailable\").classList.remove(\"hidden\");\n document.getElementById(\"addToCart\").classList.remove(\"hidden\");\n spinner_modal.classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.add(\"hidden\");\n } else {\n \n let storedBasket = sessionStorage.getItem(\"baskets\");\n let basketArray = storedBasket ? JSON.parse(storedBasket) : [];\n basketArray.push(data.basket);\n let updatedBasket = JSON.stringify(basketArray);\n sessionStorage.setItem(\"baskets\", updatedBasket);\n\n let userInfo = document.getElementById(\"user-info\");\n let user = {};\n if (userInfo) {\n userInfo = userInfo.dataset;\n user = {\n email: userInfo.email,\n first_name: userInfo.first_name,\n last_name: userInfo.last_name,\n phone_number: userInfo.phone_number,\n street: userInfo.street,\n city: userInfo.city,\n postal_code: userInfo.postal_code,\n country: userInfo.country,\n };\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: \"add_to_cart\",\n ecommerce: {\n currency: \"EUR\",\n value: parseFloat(total),\n items: [\n {\n item_id: tour_data.tour_id.toString(),\n item_name: tour_data.tour_name,\n index: 0,\n item_category: tour_data.category_name,\n location_id: tour_data.loc_id.toString(),\n price: parseFloat(total),\n quantity: 1,\n },\n ],\n enhanced_conversion_data: user,\n },\n });\n console.log(\"DATALAYER - add_to_cart\", dataLayer);\n }\n if (spinner_modal) spinner_modal.classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.add(\"hidden\");\n\n let obj = {\n modelId: data.modelId,\n resId: data.resId,\n date: date,\n };\n this.setBike(obj);\n })\n .catch((error) => {\n if (spinner_modal) spinner_modal.classList.add(\"hidden\");\n document.getElementById(\"spinner-text\").classList.add(\"hidden\");\n console.error(error);\n document.getElementById(\"addToCart\").classList.remove(\"hidden\");\n });\n }\n\n addSubTour(e) {\n const lang = document.getElementById(\"locale\").value;\n let tour = e.target.dataset.tour;\n let index = e.target.dataset.index;\n let resId = document.getElementById(`tour-${index}`).dataset.resId;\n let date = formatDate(\n document.getElementById(`tour-${index}`).dataset.date\n );\n let url = `/${lang}/tours-week/${resId}/add/${index}/${tour}/${date}`;\n\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n if (!data || data.unavailable) {\n document.getElementById(\"modal_list\").classList.add(\"hidden\");\n document.getElementById(\"unavailable\").classList.remove(\"hidden\");\n document.getElementById(\"modal\").classList.remove(\"hidden\");\n document.getElementById(\"spinner_modal\").classList.add(\"hidden\");\n } else {\n this.closeModalList();\n turbo_fetch(\n `/${lang}/tours-week/update_box/${data.index}/${data.res_id}/${data.tour_id}`\n );\n }\n })\n .catch((error) => {\n console.error(\"Error fetching data:\", error);\n });\n\n function formatDate(stringDate) {\n let arrayDate = stringDate.split(\"/\");\n let day = arrayDate[0].padStart(2, \"0\");\n let month = arrayDate[1].padStart(2, \"0\");\n return `${arrayDate[2]}-${month}-${day}`;\n }\n }\n\n clearSubTour(e) {\n let tour = e.target.dataset.tour;\n let index = e.target.dataset.index;\n let resId = e.target.dataset.resid;\n //let resId = getButton().dataset.resId;\n let url = `/tours-week/${resId}/remove/${index}/${tour}`;\n\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n if (data && !data.unavailable) {\n let url2 = `/tours-week/update_box/${data.index}/${data.res_id}/${data.tour_id}`;\n turbo_fetch(url2);\n fetch(url2).then((response) => {\n document.getElementById(`tour-${data.index}`).dataset.date =\n document\n .getElementById(`date-${data.index}`)\n .innerHTML.split(\" - \")[1];\n });\n }\n })\n .catch((error) => {\n console.error(\"Error fetching data:\", error);\n });\n\n function getButton() {\n var btns = document.querySelectorAll('[id^=\"unselect-\"]');\n var shownBtn = Array.from(btns).filter(function (btn) {\n return !btn.classList.contains(\"hidden\") && btn.dataset.resId !== \"\";\n });\n return shownBtn[0];\n }\n }\n\n closeModal(event) {\n document.getElementById(\"modal\").classList.add(\"hidden\");\n document.body.classList.remove(\"overflow-hidden\");\n document.getElementById(\"addToCart\").classList.remove(\"hidden\");\n }\n\n closeModalList(event) {\n document.getElementById(\"modal_list\").classList.add(\"hidden\");\n document.body.classList.remove(\"overflow-hidden\");\n //document.getElementById('addToCart').classList.remove('hidden');\n //document.getElementById('close').classList.add('hidden');\n }\n\n closeUnavailable(event) {\n document.getElementById(\"unavailable\").classList.add(\"hidden\");\n }\n\n updateBasket() {\n let basket = sessionStorage.getItem(\"basket\");\n let count = 0;\n if (basket) {\n const url = `/booking_process/get_basket/${basket}`;\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n if (data) {\n data.OrderPosition.forEach((element) => {\n if (element.prodType == \"R\" || element.prodType == \"T\") count++;\n });\n document.getElementById(\"cart1\").innerHTML = count;\n document.getElementById(\"cart2\").innerHTML = count;\n }\n });\n } else {\n let baskets = sessionStorage.getItem(\"baskets\");\n if (baskets) {\n count = JSON.parse(baskets).length;\n document.getElementById(\"cart1\").innerHTML = count;\n document.getElementById(\"cart2\").innerHTML = count;\n }\n }\n }\n\n checkout() {\n let basket = sessionStorage.getItem(\"basket\");\n const lang = document.getElementById(\"locale\").value;\n const isle = document.getElementById(\"current-island\");\n let island = \"gran-canaria\";\n switch (isle.innerText) {\n case \"GRAN CANARIA\":\n island = \"gran-canaria\";\n break;\n case \"TENERIFE\":\n island = \"tenerife\";\n break;\n case \"LANZAROTE\":\n island = \"lanzarote\";\n break;\n default:\n island = \"gran-canaria\";\n }\n window.location.href = `/${lang}/${island}/basket?basket=${basket}`;\n }\n\n checkoutAgent() {\n const lang = document.getElementById(\"locale\").value;\n const isle = document.getElementById(\"current-island\");\n let island = \"gran-canaria\";\n switch (isle.innerText) {\n case \"GRAN CANARIA\":\n island = \"gran-canaria\";\n break;\n case \"TENERIFE\":\n island = \"tenerife\";\n break;\n case \"LANZAROTE\":\n island = \"lanzarote\";\n break;\n default:\n island = \"gran-canaria\";\n }\n window.location.href = `/${lang}/${island}/agents/baskets`;\n }\n\n toggleLogin(event) {\n let elem = document.getElementById(\"collapse\");\n let elem2 = document.getElementById(\"session\");\n elem.classList.toggle(\"hidden\");\n elem2.classList.toggle(\"hidden\");\n }\n\n showSpinner() {\n let spinner_modal = document.getElementById(\"spinner_modal\");\n if (spinner_modal) spinner_modal.classList.remove(\"hidden\");\n }\n}\n","import { Turbo } from \"@hotwired/turbo-rails\";\nimport { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n connect() {\n let items = [];\n const tmp = document.getElementById('basket');\n const basket = JSON.parse(JSON.parse(tmp.dataset.basket));\n const order = basket.OrderPosition;\n let total = 0.0;\n let userInfo = document.getElementById('user-info');\n let user = {};\n if ( userInfo ) {\n userInfo = userInfo.dataset;\n user = {\n email: userInfo.email,\n first_name: userInfo.first_name,\n last_name: userInfo.last_name,\n phone_number: userInfo.phone_number,\n street: userInfo.street,\n city: userInfo.city,\n postal_code: userInfo.postal_code,\n country: userInfo.country\n }\n }\n for ( let i = 0; i < order.length; i++ ) {\n total += parseFloat(order[i].listPricePerUnit);\n items.push({\n item_id: order[i].navItemNo.toString(),\n item_name: order[i].unitDescription,\n currency: \"EUR\",\n discount: parseFloat(order[i].discountPercent),\n index: i,\n item_category: order[i].prodType,\n item_list_name: \"Purchase\",\n price: order[i].listPricePerUnit,\n quantity: order[i].unitCount\n });\n }\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n dataLayer.push({\n event: 'purchase',\n ecommerce: {\n transaction_id: basket.orderId.toString(),\n currency: \"EUR\",\n value: total,\n items: items,\n enhanced_conversion_data: user\n }\n });\n console.log('DATALAYER - purchase', dataLayer);\n document.getElementById('cart1').innerHTML = 0;\n sessionStorage.removeItem('basket');\n }\n}","import { Controller } from \"stimulus\"\n\nconst countries = { 'Germany': \"DE\", 'Austria': \"AT\", 'Switzerland': \"CH\", 'Sweden': \"SE\", 'Norway': \"NO\", 'Finland': \"FI\", 'Netherlands': \"NL\", 'Belgium': \"BE\", 'Denmark': \"DK\", 'United Kingdom': \"GB\", 'Spain': \"ES\", 'Portugal': \"PT\", 'Italy': \"IT\", 'France': \"FR\", 'Afghanistan': \"AF\", 'Aland Islands': \"AX\", 'Albania': \"AL\", 'Algeria': \"DZ\", 'American Samoa': \"AS\", 'Andorra': \"AD\", 'Angola': \"AO\", 'Anguilla': \"AI\", 'Antarctica': \"AQ\", 'Antigua and Barbuda': \"AG\", 'Argentina': \"AR\", 'Armenia': \"AM\", 'Aruba': \"AW\", 'Australia': \"AU\", 'Azerbaijan': \"AZ\", 'Bahamas': \"BS\", 'Bahrain': \"BH\", 'Bangladesh': \"BD\", 'Barbados': \"BB\", 'Belarus': \"BY\", 'Belize': \"BZ\", 'Benin': \"BJ\", 'Bermuda': \"BM\", 'Bhutan': \"BT\", 'Bolivia': \"BO\", 'Bonaire, Saint Eustatius and Saba': \"BQ\", 'Bosnia and Herzegovina': \"BA\", 'Botswana': \"BW\", 'Bouvet Island': \"BV\", 'Brazil': \"BR\", 'British Indian Ocean Territory': \"IO\", 'British Virgin Islands': \"VG\", 'Brunei': \"BN\", 'Bulgaria': \"BG\", 'Burkina Faso': \"BF\", 'Burundi': \"BI\", 'Cambodia': \"KH\", 'Cameroon': \"CM\", 'Canada': \"CA\", 'Cape Verde': \"CV\", 'Cayman Islands': \"KY\", 'Central African Republic': \"CF\", 'Chad': \"TD\", 'Chile': \"CL\", 'China': \"CN\", 'Christmas Island': \"CX\", 'Cocos Islands': \"CC\", 'Colombia': \"CO\", 'Comoros': \"KM\", 'Cook Islands': \"CK\", 'Costa Rica': \"CR\", 'Croatia': \"HR\", 'Cuba': \"CU\", 'Curacao': \"CW\", 'Cyprus': \"CY\", 'Czech Republic': \"CZ\", 'Democratic Republic of the Congo': \"CD\", 'Djibouti': \"DJ\", 'Dominica': \"DM\", 'Dominican Republic': \"DO\", 'East Timor': \"TL\", 'Ecuador': \"EC\", 'Egypt': \"EG\", 'El Salvador': \"SV\", 'Equatorial Guinea': \"GQ\", 'Eritrea': \"ER\", 'Estonia': \"EE\", 'Ethiopia': \"ET\", 'Falkland Islands': \"FK\", 'Faroe Islands': \"FO\", 'Fiji': \"FJ\", 'French Guiana': \"GF\", 'French Polynesia': \"PF\", 'French Southern Territories': \"TF\", 'Gabon': \"GA\", 'Gambia': \"GM\", 'Georgia': \"GE\", 'Ghana': \"GH\", 'Gibraltar': \"GI\", 'Greece': \"GR\", 'Greenland': \"GL\", 'Grenada': \"GD\", 'Guadeloupe': \"GP\", 'Guam': \"GU\", 'Guatemala': \"GT\", 'Guernsey': \"GG\", 'Guinea': \"GN\", 'Guinea-Bissau': \"GW\", 'Guyana': \"GY\", 'Haiti': \"HT\", 'Heard Island and McDonald Islands': \"HM\", 'Honduras': \"HN\", 'Hong Kong': \"HK\", 'Hungary': \"HU\", 'Iceland': \"IS\", 'India': \"IN\", 'Indonesia': \"ID\", 'Iran': \"IR\", 'Iraq': \"IQ\", 'Ireland': \"IE\", 'Isle of Man': \"IM\", 'Israel': \"IL\", 'Ivory Coast': \"CI\", 'Jamaica': \"JM\", 'Japan': \"JP\", 'Jersey': \"JE\", 'Jordan': \"JO\", 'Kazakhstan': \"KZ\", 'Kenya': \"KE\", 'Kiribati': \"KI\", 'Kosovo': \"XK\", 'Kuwait': \"KW\", 'Kyrgyzstan': \"KG\", 'Laos': \"LA\", 'Latvia': \"LV\", 'Lebanon': \"LB\", 'Lesotho': \"LS\", 'Liberia': \"LR\", 'Libya': \"LY\", 'Liechtenstein': \"LI\", 'Lithuania': \"LT\", 'Luxembourg': \"LU\", 'Macao': \"MO\", 'Macedonia': \"MK\", 'Madagascar': \"MG\", 'Malawi': \"MW\", 'Malaysia': \"MY\", 'Maldives': \"MV\", 'Mali': \"ML\", 'Malta': \"MT\", 'Marshall Islands': \"MH\", 'Martinique': \"MQ\", 'Mauritania': \"MR\", 'Mauritius': \"MU\", 'Mayotte': \"YT\", 'Mexico': \"MX\", 'Micronesia': \"FM\", 'Moldova': \"MD\", 'Monaco': \"MC\", 'Mongolia': \"MN\", 'Montenegro': \"ME\", 'Montserrat': \"MS\", 'Morocco': \"MA\", 'Mozambique': \"MZ\", 'Myanmar': \"MM\", 'Namibia': \"NA\", 'Nauru': \"NR\", 'Nepal': \"NP\", 'New Caledonia': \"NC\", 'New Zealand': \"NZ\", 'Nicaragua': \"NI\", 'Niger': \"NE\", 'Nigeria': \"NG\", 'Niue': \"NU\", 'Norfolk Island': \"NF\", 'North Korea': \"KP\", 'Northern Mariana Islands': \"MP\", 'Oman': \"OM\", 'Pakistan': \"PK\", 'Palau': \"PW\", 'Palestinian Territory': \"PS\", 'Panama': \"PA\", 'Papua New Guinea': \"PG\", 'Paraguay': \"PY\", 'Peru': \"PE\", 'Philippines': \"PH\", 'Pitcairn': \"PN\", 'Poland': \"PL\", 'Puerto Rico': \"PR\", 'Qatar': \"QA\", 'Republic of the Congo': \"CG\", 'Reunion': \"RE\", 'Romania': \"RO\", 'Russia': \"RU\", 'Rwanda': \"RW\", 'Saint Barthelemy': \"BL\", 'Saint Helena': \"SH\", 'Saint Kitts and Nevis': \"KN\", 'Saint Lucia': \"LC\", 'Saint Martin': \"MF\", 'Saint Pierre and Miquelon': \"PM\", 'Saint Vincent and the Grenadines': \"VC\", 'Samoa': \"WS\", 'San Marino': \"SM\", 'Sao Tome and Principe': \"ST\", 'Saudi Arabia': \"SA\", 'Senegal': \"SN\", 'Serbia': \"RS\", 'Seychelles': \"SC\", 'Sierra Leone': \"SL\", 'Singapore': \"SG\", 'Sint Maarten': \"SX\", 'Slovakia': \"SK\", 'Slovenia': \"SI\", 'Solomon Islands': \"SB\", 'Somalia': \"SO\", 'South Africa': \"ZA\", 'South Georgia and the South Sandwich Islands': \"GS\", 'South Korea': \"KR\", 'South Sudan': \"SS\", 'Sri Lanka': \"LK\", 'Sudan': \"SD\", 'Suriname': \"SR\", 'Svalbard and Jan Mayen': \"SJ\", 'Swaziland': \"SZ\", 'Syria': \"SY\", 'Taiwan': \"TW\", 'Tajikistan': \"TJ\", 'Tanzania': \"TZ\", 'Thailand': \"TH\", 'Togo': \"TG\", 'Tokelau': \"TK\", 'Tonga': \"TO\", 'Trinidad and Tobago': \"TT\", 'Tunisia': \"TN\", 'Turkey': \"TR\", 'Turkmenistan': \"TM\", 'Turks and Caicos Islands': \"TC\", 'Tuvalu': \"TV\", 'U.S. Virgin Islands': \"VI\", 'Uganda': \"UG\", 'Ukraine': \"UA\", 'United Arab Emirates': \"AE\", 'United States': \"US\", 'United States Minor Outlying Islands': \"UM\", 'Uruguay': \"UY\", 'Uzbekistan': \"UZ\", 'Vanuatu': \"VU\", 'Vatican': \"VA\", 'Venezuela': \"VE\", 'Vietnam': \"VN\", 'Wallis and Futuna': \"WF\", 'Western Sahara': \"EH\", 'Yemen': \"YE\", 'Zambia': \"ZM\", 'Zimbabwe': \"ZW\"};\nconst mobiles = [\n {\n \"name\": \"Germany\",\n \"dial_code\": \"+49\",\n \"code\": \"DE\"\n },\n {\n \"name\": \"Austria\",\n \"dial_code\": \"+43\",\n \"code\": \"AT\"\n },\n {\n \"name\": \"Switzerland\",\n \"dial_code\": \"+41\",\n \"code\": \"CH\"\n },\n {\n \"name\": \"Sweden\",\n \"dial_code\": \"+46\",\n \"code\": \"SE\"\n },\n {\n \"name\": \"Norway\",\n \"dial_code\": \"+47\",\n \"code\": \"NO\"\n },\n {\n \"name\": \"Finland\",\n \"dial_code\": \"+358\",\n \"code\": \"FI\"\n },\n {\n \"name\": \"Netherlands\",\n \"dial_code\": \"+31\",\n \"code\": \"NL\"\n },\n {\n \"name\": \"Belgium\",\n \"dial_code\": \"+32\",\n \"code\": \"BE\"\n },\n {\n \"name\": \"Denmark\",\n \"dial_code\": \"+45\",\n \"code\": \"DK\"\n },\n {\n \"name\": \"United Kingdom\",\n \"dial_code\": \"+44\",\n \"code\": \"GB\"\n },\n {\n \"name\": \"Spain\",\n \"dial_code\": \"+34\",\n \"code\": \"ES\"\n },\n {\n \"name\": \"Portugal\",\n \"dial_code\": \"+351\",\n \"code\": \"PT\"\n },\n {\n \"name\": \"Italy\",\n \"dial_code\": \"+39\",\n \"code\": \"IT\"\n },\n {\n \"name\": \"France\",\n \"dial_code\": \"+33\",\n \"code\": \"FR\"\n },\n {\n \"name\": \"Afghanistan\",\n \"dial_code\": \"+93\",\n \"code\": \"AF\"\n },\n {\n \"name\": \"Aland Islands\",\n \"dial_code\": \"+358\",\n \"code\": \"AX\"\n },\n {\n \"name\": \"Albania\",\n \"dial_code\": \"+355\",\n \"code\": \"AL\"\n },\n {\n \"name\": \"Algeria\",\n \"dial_code\": \"+213\",\n \"code\": \"DZ\"\n },\n {\n \"name\": \"AmericanSamoa\",\n \"dial_code\": \"+1684\",\n \"code\": \"AS\"\n },\n {\n \"name\": \"Andorra\",\n \"dial_code\": \"+376\",\n \"code\": \"AD\"\n },\n {\n \"name\": \"Angola\",\n \"dial_code\": \"+244\",\n \"code\": \"AO\"\n },\n {\n \"name\": \"Anguilla\",\n \"dial_code\": \"+1264\",\n \"code\": \"AI\"\n },\n {\n \"name\": \"Antarctica\",\n \"dial_code\": \"+672\",\n \"code\": \"AQ\"\n },\n {\n \"name\": \"Antigua and Barbuda\",\n \"dial_code\": \"+1268\",\n \"code\": \"AG\"\n },\n {\n \"name\": \"Argentina\",\n \"dial_code\": \"+54\",\n \"code\": \"AR\"\n },\n {\n \"name\": \"Armenia\",\n \"dial_code\": \"+374\",\n \"code\": \"AM\"\n },\n {\n \"name\": \"Aruba\",\n \"dial_code\": \"+297\",\n \"code\": \"AW\"\n },\n {\n \"name\": \"Australia\",\n \"dial_code\": \"+61\",\n \"code\": \"AU\"\n },\n {\n \"name\": \"Azerbaijan\",\n \"dial_code\": \"+994\",\n \"code\": \"AZ\"\n },\n {\n \"name\": \"Bahamas\",\n \"dial_code\": \"+1242\",\n \"code\": \"BS\"\n },\n {\n \"name\": \"Bahrain\",\n \"dial_code\": \"+973\",\n \"code\": \"BH\"\n },\n {\n \"name\": \"Bangladesh\",\n \"dial_code\": \"+880\",\n \"code\": \"BD\"\n },\n {\n \"name\": \"Barbados\",\n \"dial_code\": \"+1246\",\n \"code\": \"BB\"\n },\n {\n \"name\": \"Belarus\",\n \"dial_code\": \"+375\",\n \"code\": \"BY\"\n },\n {\n \"name\": \"Belize\",\n \"dial_code\": \"+501\",\n \"code\": \"BZ\"\n },\n {\n \"name\": \"Benin\",\n \"dial_code\": \"+229\",\n \"code\": \"BJ\"\n },\n {\n \"name\": \"Bermuda\",\n \"dial_code\": \"+1441\",\n \"code\": \"BM\"\n },\n {\n \"name\": \"Bhutan\",\n \"dial_code\": \"+975\",\n \"code\": \"BT\"\n },\n {\n \"name\": \"Bolivia, Plurinational State of\",\n \"dial_code\": \"+591\",\n \"code\": \"BO\"\n },\n {\n \"name\": \"Bosnia and Herzegovina\",\n \"dial_code\": \"+387\",\n \"code\": \"BA\"\n },\n {\n \"name\": \"Botswana\",\n \"dial_code\": \"+267\",\n \"code\": \"BW\"\n },\n {\n \"name\": \"Brazil\",\n \"dial_code\": \"+55\",\n \"code\": \"BR\"\n },\n {\n \"name\": \"British Indian Ocean Territory\",\n \"dial_code\": \"+246\",\n \"code\": \"IO\"\n },\n {\n \"name\": \"Brunei Darussalam\",\n \"dial_code\": \"+673\",\n \"code\": \"BN\"\n },\n {\n \"name\": \"Bulgaria\",\n \"dial_code\": \"+359\",\n \"code\": \"BG\"\n },\n {\n \"name\": \"Burkina Faso\",\n \"dial_code\": \"+226\",\n \"code\": \"BF\"\n },\n {\n \"name\": \"Burundi\",\n \"dial_code\": \"+257\",\n \"code\": \"BI\"\n },\n {\n \"name\": \"Cambodia\",\n \"dial_code\": \"+855\",\n \"code\": \"KH\"\n },\n {\n \"name\": \"Cameroon\",\n \"dial_code\": \"+237\",\n \"code\": \"CM\"\n },\n {\n \"name\": \"Canada\",\n \"dial_code\": \"+1\",\n \"code\": \"CA\"\n },\n {\n \"name\": \"Cape Verde\",\n \"dial_code\": \"+238\",\n \"code\": \"CV\"\n },\n {\n \"name\": \"Cayman Islands\",\n \"dial_code\": \"+ 345\",\n \"code\": \"KY\"\n },\n {\n \"name\": \"Central African Republic\",\n \"dial_code\": \"+236\",\n \"code\": \"CF\"\n },\n {\n \"name\": \"Chad\",\n \"dial_code\": \"+235\",\n \"code\": \"TD\"\n },\n {\n \"name\": \"Chile\",\n \"dial_code\": \"+56\",\n \"code\": \"CL\"\n },\n {\n \"name\": \"China\",\n \"dial_code\": \"+86\",\n \"code\": \"CN\"\n },\n {\n \"name\": \"Christmas Island\",\n \"dial_code\": \"+61\",\n \"code\": \"CX\"\n },\n {\n \"name\": \"Cocos (Keeling) Islands\",\n \"dial_code\": \"+61\",\n \"code\": \"CC\"\n },\n {\n \"name\": \"Colombia\",\n \"dial_code\": \"+57\",\n \"code\": \"CO\"\n },\n {\n \"name\": \"Comoros\",\n \"dial_code\": \"+269\",\n \"code\": \"KM\"\n },\n {\n \"name\": \"Congo\",\n \"dial_code\": \"+242\",\n \"code\": \"CG\"\n },\n {\n \"name\": \"Congo, The Democratic Republic of the Congo\",\n \"dial_code\": \"+243\",\n \"code\": \"CD\"\n },\n {\n \"name\": \"Cook Islands\",\n \"dial_code\": \"+682\",\n \"code\": \"CK\"\n },\n {\n \"name\": \"Costa Rica\",\n \"dial_code\": \"+506\",\n \"code\": \"CR\"\n },\n {\n \"name\": \"Cote d'Ivoire\",\n \"dial_code\": \"+225\",\n \"code\": \"CI\"\n },\n {\n \"name\": \"Croatia\",\n \"dial_code\": \"+385\",\n \"code\": \"HR\"\n },\n {\n \"name\": \"Cuba\",\n \"dial_code\": \"+53\",\n \"code\": \"CU\"\n },\n {\n \"name\": \"Cyprus\",\n \"dial_code\": \"+357\",\n \"code\": \"CY\"\n },\n {\n \"name\": \"Czech Republic\",\n \"dial_code\": \"+420\",\n \"code\": \"CZ\"\n },\n {\n \"name\": \"Djibouti\",\n \"dial_code\": \"+253\",\n \"code\": \"DJ\"\n },\n {\n \"name\": \"Dominica\",\n \"dial_code\": \"+1767\",\n \"code\": \"DM\"\n },\n {\n \"name\": \"Dominican Republic\",\n \"dial_code\": \"+1849\",\n \"code\": \"DO\"\n },\n {\n \"name\": \"Ecuador\",\n \"dial_code\": \"+593\",\n \"code\": \"EC\"\n },\n {\n \"name\": \"Egypt\",\n \"dial_code\": \"+20\",\n \"code\": \"EG\"\n },\n {\n \"name\": \"El Salvador\",\n \"dial_code\": \"+503\",\n \"code\": \"SV\"\n },\n {\n \"name\": \"Equatorial Guinea\",\n \"dial_code\": \"+240\",\n \"code\": \"GQ\"\n },\n {\n \"name\": \"Eritrea\",\n \"dial_code\": \"+291\",\n \"code\": \"ER\"\n },\n {\n \"name\": \"Estonia\",\n \"dial_code\": \"+372\",\n \"code\": \"EE\"\n },\n {\n \"name\": \"Ethiopia\",\n \"dial_code\": \"+251\",\n \"code\": \"ET\"\n },\n {\n \"name\": \"Falkland Islands (Malvinas)\",\n \"dial_code\": \"+500\",\n \"code\": \"FK\"\n },\n {\n \"name\": \"Faroe Islands\",\n \"dial_code\": \"+298\",\n \"code\": \"FO\"\n },\n {\n \"name\": \"Fiji\",\n \"dial_code\": \"+679\",\n \"code\": \"FJ\"\n },\n {\n \"name\": \"French Guiana\",\n \"dial_code\": \"+594\",\n \"code\": \"GF\"\n },\n {\n \"name\": \"French Polynesia\",\n \"dial_code\": \"+689\",\n \"code\": \"PF\"\n },\n {\n \"name\": \"Gabon\",\n \"dial_code\": \"+241\",\n \"code\": \"GA\"\n },\n {\n \"name\": \"Gambia\",\n \"dial_code\": \"+220\",\n \"code\": \"GM\"\n },\n {\n \"name\": \"Georgia\",\n \"dial_code\": \"+995\",\n \"code\": \"GE\"\n },\n {\n \"name\": \"Ghana\",\n \"dial_code\": \"+233\",\n \"code\": \"GH\"\n },\n {\n \"name\": \"Gibraltar\",\n \"dial_code\": \"+350\",\n \"code\": \"GI\"\n },\n {\n \"name\": \"Greece\",\n \"dial_code\": \"+30\",\n \"code\": \"GR\"\n },\n {\n \"name\": \"Greenland\",\n \"dial_code\": \"+299\",\n \"code\": \"GL\"\n },\n {\n \"name\": \"Grenada\",\n \"dial_code\": \"+1473\",\n \"code\": \"GD\"\n },\n {\n \"name\": \"Guadeloupe\",\n \"dial_code\": \"+590\",\n \"code\": \"GP\"\n },\n {\n \"name\": \"Guam\",\n \"dial_code\": \"+1671\",\n \"code\": \"GU\"\n },\n {\n \"name\": \"Guatemala\",\n \"dial_code\": \"+502\",\n \"code\": \"GT\"\n },\n {\n \"name\": \"Guernsey\",\n \"dial_code\": \"+44\",\n \"code\": \"GG\"\n },\n {\n \"name\": \"Guinea\",\n \"dial_code\": \"+224\",\n \"code\": \"GN\"\n },\n {\n \"name\": \"Guinea-Bissau\",\n \"dial_code\": \"+245\",\n \"code\": \"GW\"\n },\n {\n \"name\": \"Guyana\",\n \"dial_code\": \"+595\",\n \"code\": \"GY\"\n },\n {\n \"name\": \"Haiti\",\n \"dial_code\": \"+509\",\n \"code\": \"HT\"\n },\n {\n \"name\": \"Holy See (Vatican City State)\",\n \"dial_code\": \"+379\",\n \"code\": \"VA\"\n },\n {\n \"name\": \"Honduras\",\n \"dial_code\": \"+504\",\n \"code\": \"HN\"\n },\n {\n \"name\": \"Hong Kong\",\n \"dial_code\": \"+852\",\n \"code\": \"HK\"\n },\n {\n \"name\": \"Hungary\",\n \"dial_code\": \"+36\",\n \"code\": \"HU\"\n },\n {\n \"name\": \"Iceland\",\n \"dial_code\": \"+354\",\n \"code\": \"IS\"\n },\n {\n \"name\": \"India\",\n \"dial_code\": \"+91\",\n \"code\": \"IN\"\n },\n {\n \"name\": \"Indonesia\",\n \"dial_code\": \"+62\",\n \"code\": \"ID\"\n },\n {\n \"name\": \"Iran, Islamic Republic of Persian Gulf\",\n \"dial_code\": \"+98\",\n \"code\": \"IR\"\n },\n {\n \"name\": \"Iraq\",\n \"dial_code\": \"+964\",\n \"code\": \"IQ\"\n },\n {\n \"name\": \"Ireland\",\n \"dial_code\": \"+353\",\n \"code\": \"IE\"\n },\n {\n \"name\": \"Isle of Man\",\n \"dial_code\": \"+44\",\n \"code\": \"IM\"\n },\n {\n \"name\": \"Israel\",\n \"dial_code\": \"+972\",\n \"code\": \"IL\"\n },\n {\n \"name\": \"Jamaica\",\n \"dial_code\": \"+1876\",\n \"code\": \"JM\"\n },\n {\n \"name\": \"Japan\",\n \"dial_code\": \"+81\",\n \"code\": \"JP\"\n },\n {\n \"name\": \"Jersey\",\n \"dial_code\": \"+44\",\n \"code\": \"JE\"\n },\n {\n \"name\": \"Jordan\",\n \"dial_code\": \"+962\",\n \"code\": \"JO\"\n },\n {\n \"name\": \"Kazakhstan\",\n \"dial_code\": \"+77\",\n \"code\": \"KZ\"\n },\n {\n \"name\": \"Kenya\",\n \"dial_code\": \"+254\",\n \"code\": \"KE\"\n },\n {\n \"name\": \"Kiribati\",\n \"dial_code\": \"+686\",\n \"code\": \"KI\"\n },\n {\n \"name\": \"Korea, Democratic People's Republic of Korea\",\n \"dial_code\": \"+850\",\n \"code\": \"KP\"\n },\n {\n \"name\": \"Korea, Republic of South Korea\",\n \"dial_code\": \"+82\",\n \"code\": \"KR\"\n },\n {\n \"name\": \"Kuwait\",\n \"dial_code\": \"+965\",\n \"code\": \"KW\"\n },\n {\n \"name\": \"Kyrgyzstan\",\n \"dial_code\": \"+996\",\n \"code\": \"KG\"\n },\n {\n \"name\": \"Laos\",\n \"dial_code\": \"+856\",\n \"code\": \"LA\"\n },\n {\n \"name\": \"Latvia\",\n \"dial_code\": \"+371\",\n \"code\": \"LV\"\n },\n {\n \"name\": \"Lebanon\",\n \"dial_code\": \"+961\",\n \"code\": \"LB\"\n },\n {\n \"name\": \"Lesotho\",\n \"dial_code\": \"+266\",\n \"code\": \"LS\"\n },\n {\n \"name\": \"Liberia\",\n \"dial_code\": \"+231\",\n \"code\": \"LR\"\n },\n {\n \"name\": \"Libyan Arab Jamahiriya\",\n \"dial_code\": \"+218\",\n \"code\": \"LY\"\n },\n {\n \"name\": \"Liechtenstein\",\n \"dial_code\": \"+423\",\n \"code\": \"LI\"\n },\n {\n \"name\": \"Lithuania\",\n \"dial_code\": \"+370\",\n \"code\": \"LT\"\n },\n {\n \"name\": \"Luxembourg\",\n \"dial_code\": \"+352\",\n \"code\": \"LU\"\n },\n {\n \"name\": \"Macao\",\n \"dial_code\": \"+853\",\n \"code\": \"MO\"\n },\n {\n \"name\": \"Macedonia\",\n \"dial_code\": \"+389\",\n \"code\": \"MK\"\n },\n {\n \"name\": \"Madagascar\",\n \"dial_code\": \"+261\",\n \"code\": \"MG\"\n },\n {\n \"name\": \"Malawi\",\n \"dial_code\": \"+265\",\n \"code\": \"MW\"\n },\n {\n \"name\": \"Malaysia\",\n \"dial_code\": \"+60\",\n \"code\": \"MY\"\n },\n {\n \"name\": \"Maldives\",\n \"dial_code\": \"+960\",\n \"code\": \"MV\"\n },\n {\n \"name\": \"Mali\",\n \"dial_code\": \"+223\",\n \"code\": \"ML\"\n },\n {\n \"name\": \"Malta\",\n \"dial_code\": \"+356\",\n \"code\": \"MT\"\n },\n {\n \"name\": \"Marshall Islands\",\n \"dial_code\": \"+692\",\n \"code\": \"MH\"\n },\n {\n \"name\": \"Martinique\",\n \"dial_code\": \"+596\",\n \"code\": \"MQ\"\n },\n {\n \"name\": \"Mauritania\",\n \"dial_code\": \"+222\",\n \"code\": \"MR\"\n },\n {\n \"name\": \"Mauritius\",\n \"dial_code\": \"+230\",\n \"code\": \"MU\"\n },\n {\n \"name\": \"Mayotte\",\n \"dial_code\": \"+262\",\n \"code\": \"YT\"\n },\n {\n \"name\": \"Mexico\",\n \"dial_code\": \"+52\",\n \"code\": \"MX\"\n },\n {\n \"name\": \"Micronesia, Federated States of Micronesia\",\n \"dial_code\": \"+691\",\n \"code\": \"FM\"\n },\n {\n \"name\": \"Moldova\",\n \"dial_code\": \"+373\",\n \"code\": \"MD\"\n },\n {\n \"name\": \"Monaco\",\n \"dial_code\": \"+377\",\n \"code\": \"MC\"\n },\n {\n \"name\": \"Mongolia\",\n \"dial_code\": \"+976\",\n \"code\": \"MN\"\n },\n {\n \"name\": \"Montenegro\",\n \"dial_code\": \"+382\",\n \"code\": \"ME\"\n },\n {\n \"name\": \"Montserrat\",\n \"dial_code\": \"+1664\",\n \"code\": \"MS\"\n },\n {\n \"name\": \"Morocco\",\n \"dial_code\": \"+212\",\n \"code\": \"MA\"\n },\n {\n \"name\": \"Mozambique\",\n \"dial_code\": \"+258\",\n \"code\": \"MZ\"\n },\n {\n \"name\": \"Myanmar\",\n \"dial_code\": \"+95\",\n \"code\": \"MM\"\n },\n {\n \"name\": \"Namibia\",\n \"dial_code\": \"+264\",\n \"code\": \"NA\"\n },\n {\n \"name\": \"Nauru\",\n \"dial_code\": \"+674\",\n \"code\": \"NR\"\n },\n {\n \"name\": \"Nepal\",\n \"dial_code\": \"+977\",\n \"code\": \"NP\"\n },\n {\n \"name\": \"Netherlands Antilles\",\n \"dial_code\": \"+599\",\n \"code\": \"AN\"\n },\n {\n \"name\": \"New Caledonia\",\n \"dial_code\": \"+687\",\n \"code\": \"NC\"\n },\n {\n \"name\": \"New Zealand\",\n \"dial_code\": \"+64\",\n \"code\": \"NZ\"\n },\n {\n \"name\": \"Nicaragua\",\n \"dial_code\": \"+505\",\n \"code\": \"NI\"\n },\n {\n \"name\": \"Niger\",\n \"dial_code\": \"+227\",\n \"code\": \"NE\"\n },\n {\n \"name\": \"Nigeria\",\n \"dial_code\": \"+234\",\n \"code\": \"NG\"\n },\n {\n \"name\": \"Niue\",\n \"dial_code\": \"+683\",\n \"code\": \"NU\"\n },\n {\n \"name\": \"Norfolk Island\",\n \"dial_code\": \"+672\",\n \"code\": \"NF\"\n },\n {\n \"name\": \"Northern Mariana Islands\",\n \"dial_code\": \"+1670\",\n \"code\": \"MP\"\n },\n {\n \"name\": \"Oman\",\n \"dial_code\": \"+968\",\n \"code\": \"OM\"\n },\n {\n \"name\": \"Pakistan\",\n \"dial_code\": \"+92\",\n \"code\": \"PK\"\n },\n {\n \"name\": \"Palau\",\n \"dial_code\": \"+680\",\n \"code\": \"PW\"\n },\n {\n \"name\": \"Palestinian Territory, Occupied\",\n \"dial_code\": \"+970\",\n \"code\": \"PS\"\n },\n {\n \"name\": \"Panama\",\n \"dial_code\": \"+507\",\n \"code\": \"PA\"\n },\n {\n \"name\": \"Papua New Guinea\",\n \"dial_code\": \"+675\",\n \"code\": \"PG\"\n },\n {\n \"name\": \"Paraguay\",\n \"dial_code\": \"+595\",\n \"code\": \"PY\"\n },\n {\n \"name\": \"Peru\",\n \"dial_code\": \"+51\",\n \"code\": \"PE\"\n },\n {\n \"name\": \"Philippines\",\n \"dial_code\": \"+63\",\n \"code\": \"PH\"\n },\n {\n \"name\": \"Pitcairn\",\n \"dial_code\": \"+872\",\n \"code\": \"PN\"\n },\n {\n \"name\": \"Poland\",\n \"dial_code\": \"+48\",\n \"code\": \"PL\"\n },\n {\n \"name\": \"Puerto Rico\",\n \"dial_code\": \"+1939\",\n \"code\": \"PR\"\n },\n {\n \"name\": \"Qatar\",\n \"dial_code\": \"+974\",\n \"code\": \"QA\"\n },\n {\n \"name\": \"Romania\",\n \"dial_code\": \"+40\",\n \"code\": \"RO\"\n },\n {\n \"name\": \"Russia\",\n \"dial_code\": \"+7\",\n \"code\": \"RU\"\n },\n {\n \"name\": \"Rwanda\",\n \"dial_code\": \"+250\",\n \"code\": \"RW\"\n },\n {\n \"name\": \"Reunion\",\n \"dial_code\": \"+262\",\n \"code\": \"RE\"\n },\n {\n \"name\": \"Saint Barthelemy\",\n \"dial_code\": \"+590\",\n \"code\": \"BL\"\n },\n {\n \"name\": \"Saint Helena, Ascension and Tristan Da Cunha\",\n \"dial_code\": \"+290\",\n \"code\": \"SH\"\n },\n {\n \"name\": \"Saint Kitts and Nevis\",\n \"dial_code\": \"+1869\",\n \"code\": \"KN\"\n },\n {\n \"name\": \"Saint Lucia\",\n \"dial_code\": \"+1758\",\n \"code\": \"LC\"\n },\n {\n \"name\": \"Saint Martin\",\n \"dial_code\": \"+590\",\n \"code\": \"MF\"\n },\n {\n \"name\": \"Saint Pierre and Miquelon\",\n \"dial_code\": \"+508\",\n \"code\": \"PM\"\n },\n {\n \"name\": \"Saint Vincent and the Grenadines\",\n \"dial_code\": \"+1784\",\n \"code\": \"VC\"\n },\n {\n \"name\": \"Samoa\",\n \"dial_code\": \"+685\",\n \"code\": \"WS\"\n },\n {\n \"name\": \"San Marino\",\n \"dial_code\": \"+378\",\n \"code\": \"SM\"\n },\n {\n \"name\": \"Sao Tome and Principe\",\n \"dial_code\": \"+239\",\n \"code\": \"ST\"\n },\n {\n \"name\": \"Saudi Arabia\",\n \"dial_code\": \"+966\",\n \"code\": \"SA\"\n },\n {\n \"name\": \"Senegal\",\n \"dial_code\": \"+221\",\n \"code\": \"SN\"\n },\n {\n \"name\": \"Serbia\",\n \"dial_code\": \"+381\",\n \"code\": \"RS\"\n },\n {\n \"name\": \"Seychelles\",\n \"dial_code\": \"+248\",\n \"code\": \"SC\"\n },\n {\n \"name\": \"Sierra Leone\",\n \"dial_code\": \"+232\",\n \"code\": \"SL\"\n },\n {\n \"name\": \"Singapore\",\n \"dial_code\": \"+65\",\n \"code\": \"SG\"\n },\n {\n \"name\": \"Slovakia\",\n \"dial_code\": \"+421\",\n \"code\": \"SK\"\n },\n {\n \"name\": \"Slovenia\",\n \"dial_code\": \"+386\",\n \"code\": \"SI\"\n },\n {\n \"name\": \"Solomon Islands\",\n \"dial_code\": \"+677\",\n \"code\": \"SB\"\n },\n {\n \"name\": \"Somalia\",\n \"dial_code\": \"+252\",\n \"code\": \"SO\"\n },\n {\n \"name\": \"South Africa\",\n \"dial_code\": \"+27\",\n \"code\": \"ZA\"\n },\n {\n \"name\": \"South Sudan\",\n \"dial_code\": \"+211\",\n \"code\": \"SS\"\n },\n {\n \"name\": \"South Georgia and the South Sandwich Islands\",\n \"dial_code\": \"+500\",\n \"code\": \"GS\"\n },\n {\n \"name\": \"Sri Lanka\",\n \"dial_code\": \"+94\",\n \"code\": \"LK\"\n },\n {\n \"name\": \"Sudan\",\n \"dial_code\": \"+249\",\n \"code\": \"SD\"\n },\n {\n \"name\": \"Suriname\",\n \"dial_code\": \"+597\",\n \"code\": \"SR\"\n },\n {\n \"name\": \"Svalbard and Jan Mayen\",\n \"dial_code\": \"+47\",\n \"code\": \"SJ\"\n },\n {\n \"name\": \"Swaziland\",\n \"dial_code\": \"+268\",\n \"code\": \"SZ\"\n },\n {\n \"name\": \"Syrian Arab Republic\",\n \"dial_code\": \"+963\",\n \"code\": \"SY\"\n },\n {\n \"name\": \"Taiwan\",\n \"dial_code\": \"+886\",\n \"code\": \"TW\"\n },\n {\n \"name\": \"Tajikistan\",\n \"dial_code\": \"+992\",\n \"code\": \"TJ\"\n },\n {\n \"name\": \"Tanzania, United Republic of Tanzania\",\n \"dial_code\": \"+255\",\n \"code\": \"TZ\"\n },\n {\n \"name\": \"Thailand\",\n \"dial_code\": \"+66\",\n \"code\": \"TH\"\n },\n {\n \"name\": \"Timor-Leste\",\n \"dial_code\": \"+670\",\n \"code\": \"TL\"\n },\n {\n \"name\": \"Togo\",\n \"dial_code\": \"+228\",\n \"code\": \"TG\"\n },\n {\n \"name\": \"Tokelau\",\n \"dial_code\": \"+690\",\n \"code\": \"TK\"\n },\n {\n \"name\": \"Tonga\",\n \"dial_code\": \"+676\",\n \"code\": \"TO\"\n },\n {\n \"name\": \"Trinidad and Tobago\",\n \"dial_code\": \"+1868\",\n \"code\": \"TT\"\n },\n {\n \"name\": \"Tunisia\",\n \"dial_code\": \"+216\",\n \"code\": \"TN\"\n },\n {\n \"name\": \"Turkey\",\n \"dial_code\": \"+90\",\n \"code\": \"TR\"\n },\n {\n \"name\": \"Turkmenistan\",\n \"dial_code\": \"+993\",\n \"code\": \"TM\"\n },\n {\n \"name\": \"Turks and Caicos Islands\",\n \"dial_code\": \"+1649\",\n \"code\": \"TC\"\n },\n {\n \"name\": \"Tuvalu\",\n \"dial_code\": \"+688\",\n \"code\": \"TV\"\n },\n {\n \"name\": \"Uganda\",\n \"dial_code\": \"+256\",\n \"code\": \"UG\"\n },\n {\n \"name\": \"Ukraine\",\n \"dial_code\": \"+380\",\n \"code\": \"UA\"\n },\n {\n \"name\": \"United Arab Emirates\",\n \"dial_code\": \"+971\",\n \"code\": \"AE\"\n },\n {\n \"name\": \"United States\",\n \"dial_code\": \"+1\",\n \"code\": \"US\"\n },\n {\n \"name\": \"Uruguay\",\n \"dial_code\": \"+598\",\n \"code\": \"UY\"\n },\n {\n \"name\": \"Uzbekistan\",\n \"dial_code\": \"+998\",\n \"code\": \"UZ\"\n },\n {\n \"name\": \"Vanuatu\",\n \"dial_code\": \"+678\",\n \"code\": \"VU\"\n },\n {\n \"name\": \"Venezuela, Bolivarian Republic of Venezuela\",\n \"dial_code\": \"+58\",\n \"code\": \"VE\"\n },\n {\n \"name\": \"Vietnam\",\n \"dial_code\": \"+84\",\n \"code\": \"VN\"\n },\n {\n \"name\": \"Virgin Islands, British\",\n \"dial_code\": \"+1284\",\n \"code\": \"VG\"\n },\n {\n \"name\": \"Virgin Islands, U.S.\",\n \"dial_code\": \"+1340\",\n \"code\": \"VI\"\n },\n {\n \"name\": \"Wallis and Futuna\",\n \"dial_code\": \"+681\",\n \"code\": \"WF\"\n },\n {\n \"name\": \"Yemen\",\n \"dial_code\": \"+967\",\n \"code\": \"YE\"\n },\n {\n \"name\": \"Zambia\",\n \"dial_code\": \"+260\",\n \"code\": \"ZM\"\n },\n {\n \"name\": \"Zimbabwe\",\n \"dial_code\": \"+263\",\n \"code\": \"ZW\"\n }\n];\n\nexport default class extends Controller {\n\n connect() {\n\n let selected = false;\n let select = document.getElementById(\"country\");\n let myCountry = document.getElementById(\"my-country\");\n if (select) {\n for (var key in countries) {\n var option = document.createElement(\"option\");\n option.text = key;\n option.value = countries[key];\n if ( option.value === 'ES' ){\n option.id = 'es';\n }\n if ( myCountry && myCountry.value === countries[key] ){\n option.selected = 'selected';\n selected = true;\n }\n select.appendChild(option);\n }\n /*if ( !selected ) {\n let spain = document.getElementById('es');\n spain.setAttribute('selected', 'selected');\n }*/\n }\n\n let select2 = document.getElementById(\"prefix\");\n if (select2) {\n selected = false;\n mobiles.forEach((prefix) => {\n let option = document.createElement(\"option\");\n option.text = prefix.dial_code + ' ' + prefix.name;\n option.value = prefix.dial_code;\n if ( prefix.code === 'ES' ){\n option.id = 'es2';\n }\n if ( myCountry && myCountry.value === prefix.code ) {\n option.selected = 'selected';\n selected = true;\n }\n select2.appendChild(option);\n });\n /*if ( !selected ) {\n let spain = document.getElementById('es2');\n spain.setAttribute('selected', 'selected');\n }*/\n }\n \n }\n\n}","import Dropzone from 'dropzone';\nimport { Controller } from 'stimulus';\nimport { DirectUpload } from '@rails/activestorage';\nimport {\n getMetaValue,\n findElement,\n removeElement,\n insertAfter\n} from 'helpers';\n\n/*\n * Dropzone controller\n * Let to create a dropzone zone to\n * upload and preview files.\n *\n */\n\nexport default class extends Controller {\n\n previewNode = null;\n\n static targets = [\n 'input',\n 'dropzone',\n 'dropzoneMsg',\n 'dropzoneError',\n 'dropzonePreview',\n 'dropzoneProgress'\n ];\n\n connect() {\n\n //\n // Getting the preview template and removing it from\n // DOM to hide it.\n //\n\n this.previewNode = document.querySelector('#previewTemplate');\n //let previewTemplate = previewNode.innerHTML;\n //this.previewNode.parentNode.removeChild(this.previewNode);\n\n this.dropZone = createDropZone(this, this.previewNode.innerHTML);\n this.hideFileInput();\n this.bindEvents();\n Dropzone.autoDiscover = false; // necessary quirk for Dropzone error in console\n\n //\n // Hiding error div\n //\n\n this.dropzoneErrorTarget.style.display = 'none';\n\n }\n\n hideFileInput() {\n this.inputTarget.disabled = true;\n this.inputTarget.style.display = 'none';\n }\n\n bindEvents() {\n\n this.dropZone.on('drop', file => {\n\n //\n // If maxFiles === 1 we replace the\n // already uploaded file if it exists.\n //\n\n if ( this.maxFiles === '1' && this.dropZone.getAcceptedFiles().length > 0 ) {\n this.dropZone.removeFile(this.dropZone.getAcceptedFiles()[0]);\n }\n\n //\n // We also check if there's an\n // avatar to edit. If so, we remove it.\n //\n\n let avatarToEdit = document.querySelector('.avatar-to-edit')\n\n if ( avatarToEdit ) avatarToEdit.remove();\n\n //\n // Removing previous error messages\n //\n\n // $('.dz-error-custom').hide();\n this.dropzoneErrorTarget.style.display = 'none';\n });\n\n this.dropZone.on('addedfile', file => {\n \n this.dropzoneMsgTarget.style.display = 'none';\n this.dropzoneErrorTarget.style.display = 'none';\n\n setTimeout(() => {\n file.accepted && createDirectUploadController(this, file).start();\n }, 500);\n });\n\n this.dropZone.on('removedfile', file => {\n file.controller && removeElement(file.controller.hiddenInput);\n //$('.dropzone').show();\n this.dropzoneTarget.style.display = 'block';\n\n //$('.dropzone-msg').show();\n this.dropzoneMsgTarget.style.display = 'block';\n });\n\n this.dropZone.on('queuecomplete', progress => {\n setTimeout(() => {\n // $('#previews .progress').addClass('animated fadeOut');\n let preview = document.querySelector('.dz-preview');\n \n if ( preview )\n preview.querySelector('.progress').style.display = 'none';\n\n }, 1000);\n });\n\n this.dropZone.on('canceled', file => {\n file.controller && file.controller.xhr.abort();\n });\n\n this.dropZone.on('error', (file, err) => {\n \n document.querySelector('.dz-preview').remove();\n\n this.dropzoneErrorTarget.innerHTML = err;\n this.dropzoneErrorTarget.style.display = 'block';\n //$('.dz-preview').remove();\n //$('.dz-error-custom').html(err);\n //$('.dz-error-custom').show();\n });\n }\n\n get headers() {\n return { 'X-CSRF-Token': getMetaValue('csrf-token') };\n }\n\n get url() {\n return this.inputTarget.getAttribute('data-direct-upload-url');\n }\n\n get maxFiles() {\n return this.data.get('maxFiles') || 1;\n }\n\n get maxFileSize() {\n return this.data.get('maxFileSize') || 256;\n }\n\n get acceptedFiles() {\n return this.data.get('acceptedFiles');\n }\n\n get addRemoveLinks() {\n return this.data.get('addRemoveLinks') || false;\n }\n}\n\nclass DirectUploadController {\n constructor(source, file) {\n this.directUpload = createDirectUpload(file, source.url, this);\n this.source = source;\n this.file = file;\n }\n\n start() {\n this.file.controller = this;\n this.hiddenInput = this.createHiddenInput();\n this.directUpload.create((error, attributes) => {\n if (error) {\n removeElement(this.hiddenInput);\n this.emitDropzoneError(error);\n } else {\n this.hiddenInput.value = attributes.signed_id;\n this.emitDropzoneSuccess();\n }\n });\n }\n\n createHiddenInput() {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = this.source.inputTarget.name;\n insertAfter(input, this.source.inputTarget);\n return input;\n }\n\n directUploadWillStoreFileWithXHR(xhr) {\n this.bindProgressEvent(xhr);\n this.emitDropzoneUploading();\n }\n\n bindProgressEvent(xhr) {\n this.xhr = xhr;\n this.xhr.upload.addEventListener('progress', event =>\n this.uploadRequestDidProgress(event)\n );\n }\n\n uploadRequestDidProgress(event) {\n const progress = (event.loaded / event.total) * 100;\n this.source.dropzoneProgressTarget.firstElementChild.style.width = `${progress}%`;\n }\n\n emitDropzoneUploading() {\n this.file.status = Dropzone.UPLOADING;\n this.source.dropZone.emit('processing', this.file);\n }\n\n emitDropzoneError(error) {\n this.file.status = Dropzone.ERROR;\n this.source.dropZone.emit('error', this.file, error);\n this.source.dropZone.emit('complete', this.file);\n }\n\n emitDropzoneSuccess() {\n this.file.status = Dropzone.SUCCESS;\n this.source.dropZone.emit('success', this.file);\n this.source.dropZone.emit('complete', this.file);\n }\n}\n\nfunction createDirectUploadController(source, file) {\n return new DirectUploadController(source, file);\n}\n\nfunction createDirectUpload(file, url, controller) {\n return new DirectUpload(file, url, controller);\n}\n\nfunction createDropZone(controller, previewTemplate) {\n\n return new Dropzone(controller.element, {\n url: controller.url,\n headers: controller.headers,\n maxFiles: controller.maxFiles,\n maxFilesize: controller.maxFileSize,\n acceptedFiles: controller.acceptedFiles,\n addRemoveLinks: Boolean(controller.addRemoveLinks),\n autoQueue: false,\n previewTemplate: previewTemplate\n });\n}","import { Controller } from \"stimulus\"\nimport \"ace-builds/src-min-noconflict/ace.js\";\n\nexport default class extends Controller {\n\n htmlEditor = null;\n ckEditor = null;\n currentTab = 'rich';\n\n\tstatic targets = [\n 'modalPreview',\n 'modalPreviewContent',\n 'seoURL'\n ];\n\n static values = {\n lang: String\n };\n\n connect() {\n\n //\n // Loading ACE editor and initializing\n //\n\n this._loadAceEditor();\n\n //\n // CKEDITOR\n //\n\n this.ckEditor = CKEDITOR.instances['ckeditor_' + this.langValue];\n\n }\n\n /*\n * openPreview\n * Deploys a modal to preview the content\n *\n */\n\n openPreview () {\n\n let content_html = null;\n\n if ( this.currentTab === 'rich')\n content_html = this.ckEditor.getData();\n else\n content_html = this.htmlEditor.getValue();\n\n let modal = document.getElementById('modal_preview');\n let modalContent = document.getElementById('modal_preview_content');\n\n modalContent.innerHTML = content_html;\n modal.classList.remove('hidden');\n }\n\n /*\n * changeTab\n * Triggered when user changes between RICH TEXT and HTML\n * tabs. It updates the proper editor.\n */\n\n changeTab (event) {\n if ( this.currentTab === 'rich' ) {\n // Current state HTML\n this.htmlEditor.session.setValue(this.ckEditor.getData());\n this.currentTab = 'html';\n }\n else {\n // Current state RICH TEXT\n this.ckEditor.setData(this.htmlEditor.getValue());\n this.currentTab = 'rich';\n }\n }\n\n _loadAceEditor () {\n\n //\n // Content HTML editor\n //\n\n ace.config.set('basePath', '/js');\n ace.config.set('modePath', '/js');\n ace.config.set('themePath', '/js');\n ace.config.set('workerPath','/js');\n\n this.htmlEditor = ace.edit('editor-' + this.langValue);\n\n this.htmlEditor.session.setMode('ace/mode/html');\n this.htmlEditor.setTheme('ace/theme/nord_dark');\n this.htmlEditor.session.setUseWorker('ace/worker/html');\n\n document.getElementById('editor-' + this.langValue).style.fontSize = '15px';\n\n this.htmlEditor.session.on('change', (delta) => {\n //let content = document.getElementById('page_content_' + this.langValue);\n //content.value = this.htmlEditor.getValue();\n this.ckEditor.setData(this.ckEditor.getData());\n }).bind(this);\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n connect() {\n }\n\n toggle(event) {\n let target = event.target;\n let parent = target.parentElement;\n if ( target.classList.contains('manager') ) {\n target.classList.toggle('rotate-0');\n target.classList.toggle('-rotate-180');\n }\n if ( parent.classList.contains('manager') ) {\n parent.classList.toggle('rotate-0');\n parent.classList.toggle('-rotate-180');\n }\n }\n}","import { Controller } from 'stimulus';\n\n/*\n * Admin Finder Field controller\n * Let users to search entities in dashboard.\n *\n */\n\nexport default class extends Controller {\n\n\tstatic targets = [\n\t\t'form',\n\t\t'input',\n\t\t'submit'\n\t];\n\n\t// To avoid concanated searches \n\tlastSearchValue = null;\n\n\n\tconnect () {\n\n\t\t//\n\t\t// When Turbo request starts\n\t\t//\n\n\t\tthis.formTarget.addEventListener('turbo:submit-start', () => {\n\t\t\tthis.submitTarget.disabled = true;\n\t\t\tthis.submitTarget.innerHTML = `\n\t\t\t\t\n\t \n\t \n\t \n\t\t\t`;\n\t\t});\n\n\n\t\t//\n\t\t// When Turbo request finishes\n\t\t//\n\n\t\tthis.formTarget.addEventListener('turbo:submit-end', () => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.submitTarget.disabled = false;\n\t\t\t\tthis.submitTarget.innerHTML = 'Search';\n\t\t\t}, 500);\n\t\t});\n\t}\n\n\n\t/*\n\t * update\n\t * Send string to backend on user's typing\n\t *\n\t */\n\n\tupdate (event) {\n\t\tif ( this.inputTarget.value.length > 3 || this.inputTarget.value.length === 0 ) {\n\t\t\tsetTimeout(() => {\t\t\t\t\n\t\t\t\tif ( this.lastSearchValue === this.inputTarget.value )\n\t\t\t\t\treturn;\n\t\t\t\telse {\n\t\t\t\t\tthis.lastSearchValue = this.inputTarget.value;\n\t\t\t\t\tthis.submitTarget.click();\n\t\t\t\t}\n\t\t\t}, 700);\n\t\t}\n\n\t}\n\n}","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n\n connect() {\n console.log('READY');\n }\n\n setToDate(event) {\n let from = new Date(event.target.value);\n let tmp = new Date(from);\n let to = document.getElementById(\"to\");\n let min = this.check_season(from);\n\n tmp.setDate(from.getDate() + min);\n tmp = tmp.toISOString().split(\"T\")[0];\n to.setAttribute(\"min\", tmp);\n if (!to.value || to.value < tmp) to.value = tmp;\n }\n\n check_season(date) {\n let summer_start = document.getElementById(\"season_from\");\n let summer_end = document.getElementById(\"season_to\");\n let min = 2;\n\n if (summer_start && summer_end) {\n summer_start = new Date(summer_start.value);\n summer_end = new Date(summer_end.value);\n if (date >= summer_start && date <= summer_end) min = 0;\n }\n return min;\n }\n\n}","import { Controller } from \"stimulus\";\nimport { Turbo } from \"@hotwired/turbo-rails\";\n\nconst countries = {\n Afghanistan: \"AF\",\n \"Aland Islands\": \"AX\",\n Albania: \"AL\",\n Algeria: \"DZ\",\n \"American Samoa\": \"AS\",\n Andorra: \"AD\",\n Angola: \"AO\",\n Anguilla: \"AI\",\n Antarctica: \"AQ\",\n \"Antigua and Barbuda\": \"AG\",\n Argentina: \"AR\",\n Armenia: \"AM\",\n Aruba: \"AW\",\n Australia: \"AU\",\n Austria: \"AT\",\n Azerbaijan: \"AZ\",\n Bahamas: \"BS\",\n Bahrain: \"BH\",\n Bangladesh: \"BD\",\n Barbados: \"BB\",\n Belarus: \"BY\",\n Belgium: \"BE\",\n Belize: \"BZ\",\n Benin: \"BJ\",\n Bermuda: \"BM\",\n Bhutan: \"BT\",\n Bolivia: \"BO\",\n \"Bonaire, Saint Eustatius and Saba\": \"BQ\",\n \"Bosnia and Herzegovina\": \"BA\",\n Botswana: \"BW\",\n \"Bouvet Island\": \"BV\",\n Brazil: \"BR\",\n \"British Indian Ocean Territory\": \"IO\",\n \"British Virgin Islands\": \"VG\",\n Brunei: \"BN\",\n Bulgaria: \"BG\",\n \"Burkina Faso\": \"BF\",\n Burundi: \"BI\",\n Cambodia: \"KH\",\n Cameroon: \"CM\",\n Canada: \"CA\",\n \"Cape Verde\": \"CV\",\n \"Cayman Islands\": \"KY\",\n \"Central African Republic\": \"CF\",\n Chad: \"TD\",\n Chile: \"CL\",\n China: \"CN\",\n \"Christmas Island\": \"CX\",\n \"Cocos Islands\": \"CC\",\n Colombia: \"CO\",\n Comoros: \"KM\",\n \"Cook Islands\": \"CK\",\n \"Costa Rica\": \"CR\",\n Croatia: \"HR\",\n Cuba: \"CU\",\n Curacao: \"CW\",\n Cyprus: \"CY\",\n \"Czech Republic\": \"CZ\",\n \"Democratic Republic of the Congo\": \"CD\",\n Denmark: \"DK\",\n Djibouti: \"DJ\",\n Dominica: \"DM\",\n \"Dominican Republic\": \"DO\",\n \"East Timor\": \"TL\",\n Ecuador: \"EC\",\n Egypt: \"EG\",\n \"El Salvador\": \"SV\",\n \"Equatorial Guinea\": \"GQ\",\n Eritrea: \"ER\",\n Estonia: \"EE\",\n Ethiopia: \"ET\",\n \"Falkland Islands\": \"FK\",\n \"Faroe Islands\": \"FO\",\n Fiji: \"FJ\",\n Finland: \"FI\",\n France: \"FR\",\n \"French Guiana\": \"GF\",\n \"French Polynesia\": \"PF\",\n \"French Southern Territories\": \"TF\",\n Gabon: \"GA\",\n Gambia: \"GM\",\n Georgia: \"GE\",\n Germany: \"DE\",\n Ghana: \"GH\",\n Gibraltar: \"GI\",\n Greece: \"GR\",\n Greenland: \"GL\",\n Grenada: \"GD\",\n Guadeloupe: \"GP\",\n Guam: \"GU\",\n Guatemala: \"GT\",\n Guernsey: \"GG\",\n Guinea: \"GN\",\n \"Guinea-Bissau\": \"GW\",\n Guyana: \"GY\",\n Haiti: \"HT\",\n \"Heard Island and McDonald Islands\": \"HM\",\n Honduras: \"HN\",\n \"Hong Kong\": \"HK\",\n Hungary: \"HU\",\n Iceland: \"IS\",\n India: \"IN\",\n Indonesia: \"ID\",\n Iran: \"IR\",\n Iraq: \"IQ\",\n Ireland: \"IE\",\n \"Isle of Man\": \"IM\",\n Israel: \"IL\",\n Italy: \"IT\",\n \"Ivory Coast\": \"CI\",\n Jamaica: \"JM\",\n Japan: \"JP\",\n Jersey: \"JE\",\n Jordan: \"JO\",\n Kazakhstan: \"KZ\",\n Kenya: \"KE\",\n Kiribati: \"KI\",\n Kosovo: \"XK\",\n Kuwait: \"KW\",\n Kyrgyzstan: \"KG\",\n Laos: \"LA\",\n Latvia: \"LV\",\n Lebanon: \"LB\",\n Lesotho: \"LS\",\n Liberia: \"LR\",\n Libya: \"LY\",\n Liechtenstein: \"LI\",\n Lithuania: \"LT\",\n Luxembourg: \"LU\",\n Macao: \"MO\",\n Macedonia: \"MK\",\n Madagascar: \"MG\",\n Malawi: \"MW\",\n Malaysia: \"MY\",\n Maldives: \"MV\",\n Mali: \"ML\",\n Malta: \"MT\",\n \"Marshall Islands\": \"MH\",\n Martinique: \"MQ\",\n Mauritania: \"MR\",\n Mauritius: \"MU\",\n Mayotte: \"YT\",\n Mexico: \"MX\",\n Micronesia: \"FM\",\n Moldova: \"MD\",\n Monaco: \"MC\",\n Mongolia: \"MN\",\n Montenegro: \"ME\",\n Montserrat: \"MS\",\n Morocco: \"MA\",\n Mozambique: \"MZ\",\n Myanmar: \"MM\",\n Namibia: \"NA\",\n Nauru: \"NR\",\n Nepal: \"NP\",\n Netherlands: \"NL\",\n \"New Caledonia\": \"NC\",\n \"New Zealand\": \"NZ\",\n Nicaragua: \"NI\",\n Niger: \"NE\",\n Nigeria: \"NG\",\n Niue: \"NU\",\n \"Norfolk Island\": \"NF\",\n \"North Korea\": \"KP\",\n \"Northern Mariana Islands\": \"MP\",\n Norway: \"NO\",\n Oman: \"OM\",\n Pakistan: \"PK\",\n Palau: \"PW\",\n \"Palestinian Territory\": \"PS\",\n Panama: \"PA\",\n \"Papua New Guinea\": \"PG\",\n Paraguay: \"PY\",\n Peru: \"PE\",\n Philippines: \"PH\",\n Pitcairn: \"PN\",\n Poland: \"PL\",\n Portugal: \"PT\",\n \"Puerto Rico\": \"PR\",\n Qatar: \"QA\",\n \"Republic of the Congo\": \"CG\",\n Reunion: \"RE\",\n Romania: \"RO\",\n Russia: \"RU\",\n Rwanda: \"RW\",\n \"Saint Barthelemy\": \"BL\",\n \"Saint Helena\": \"SH\",\n \"Saint Kitts and Nevis\": \"KN\",\n \"Saint Lucia\": \"LC\",\n \"Saint Martin\": \"MF\",\n \"Saint Pierre and Miquelon\": \"PM\",\n \"Saint Vincent and the Grenadines\": \"VC\",\n Samoa: \"WS\",\n \"San Marino\": \"SM\",\n \"Sao Tome and Principe\": \"ST\",\n \"Saudi Arabia\": \"SA\",\n Senegal: \"SN\",\n Serbia: \"RS\",\n Seychelles: \"SC\",\n \"Sierra Leone\": \"SL\",\n Singapore: \"SG\",\n \"Sint Maarten\": \"SX\",\n Slovakia: \"SK\",\n Slovenia: \"SI\",\n \"Solomon Islands\": \"SB\",\n Somalia: \"SO\",\n \"South Africa\": \"ZA\",\n \"South Georgia and the South Sandwich Islands\": \"GS\",\n \"South Korea\": \"KR\",\n \"South Sudan\": \"SS\",\n Spain: \"ES\",\n \"Sri Lanka\": \"LK\",\n Sudan: \"SD\",\n Suriname: \"SR\",\n \"Svalbard and Jan Mayen\": \"SJ\",\n Swaziland: \"SZ\",\n Sweden: \"SE\",\n Switzerland: \"CH\",\n Syria: \"SY\",\n Taiwan: \"TW\",\n Tajikistan: \"TJ\",\n Tanzania: \"TZ\",\n Thailand: \"TH\",\n Togo: \"TG\",\n Tokelau: \"TK\",\n Tonga: \"TO\",\n \"Trinidad and Tobago\": \"TT\",\n Tunisia: \"TN\",\n Turkey: \"TR\",\n Turkmenistan: \"TM\",\n \"Turks and Caicos Islands\": \"TC\",\n Tuvalu: \"TV\",\n \"U.S. Virgin Islands\": \"VI\",\n Uganda: \"UG\",\n Ukraine: \"UA\",\n \"United Arab Emirates\": \"AE\",\n \"United Kingdom\": \"GB\",\n \"United States\": \"US\",\n \"United States Minor Outlying Islands\": \"UM\",\n Uruguay: \"UY\",\n Uzbekistan: \"UZ\",\n Vanuatu: \"VU\",\n Vatican: \"VA\",\n Venezuela: \"VE\",\n Vietnam: \"VN\",\n \"Wallis and Futuna\": \"WF\",\n \"Western Sahara\": \"EH\",\n Yemen: \"YE\",\n Zambia: \"ZM\",\n Zimbabwe: \"ZW\",\n};\n\nexport default class extends Controller {\n static values = { agent: Boolean };\n\n connect() {\n let urlParams;\n (window.onpopstate = function () {\n var match,\n pl = /\\+/g, // Regex for replacing addition symbol with a space\n search = /([^&=]+)=?([^&]*)/g,\n decode = function (s) {\n return decodeURIComponent(s.replace(pl, \" \"));\n },\n query = window.location.search.substring(1);\n\n urlParams = {};\n while ((match = search.exec(query)))\n urlParams[decode(match[1])] = decode(match[2]);\n })();\n if (urlParams.basket === \"null\") sessionStorage.removeItem(\"basket\");\n else {\n this.updateBasket();\n }\n }\n\n basket(event) {\n let basket = sessionStorage.getItem(\"basket\");\n let isAgent = false;\n if (this.hasAgentValue) {\n isAgent = this.agentValue\n }\n\n if (basket) {\n let spinner = document.getElementById(\"spinner\");\n if (spinner) spinner.classList.remove(\"hidden\");\n let spinner_modal = document.getElementById(\"spinner_modal\");\n if (spinner_modal) spinner_modal.classList.remove(\"hidden\");\n if (!isAgent) {\n document.addEventListener(\"turbo:before-fetch-response\", function (e) {\n let selected = false;\n var interval = setInterval(function () {\n let select = document.getElementById(\"country\");\n if (select) {\n clearInterval(interval);\n for (var key in countries) {\n var option = document.createElement(\"option\");\n option.text = key;\n option.value = countries[key];\n if (option.value === \"ES\") {\n option.id = \"es\";\n }\n if (select.dataset.country === countries[key]) {\n option.selected = \"selected\";\n selected = true;\n }\n select.appendChild(option);\n }\n if (!selected) {\n let spain = document.getElementById(\"es\");\n spain.setAttribute(\"selected\", \"selected\");\n }\n }\n }, 100);\n });\n }\n }\n\n const lang = document.getElementById(\"locale\").value;\n const isle = document.getElementById(\"current-island\");\n let island = \"gran-canaria\";\n switch (isle.innerText) {\n case \"GRAN CANARIA\":\n island = \"gran-canaria\";\n break;\n case \"TENERIFE\":\n island = \"tenerife\";\n break;\n case \"LANZAROTE\":\n island = \"lanzarote\";\n break;\n default:\n island = \"gran-canaria\";\n }\n\n //window.location.href = `/${lang}/${island}/basket?basket=${basket}`;\n if (isAgent) {\n window.location.href = `/${lang}/${island}/agents/baskets`;\n } else {\n window.location.href = `/${lang}/${island}/basket?basket=${basket}`;\n }\n }\n\n updateBasket() {\n let basket = sessionStorage.getItem(\"basket\");\n let count = 0;\n if (basket) {\n const url = `/booking_process/get_basket/${basket}`;\n fetch(url)\n .then((response) => response.json())\n .then((data) => {\n if (data) {\n data.OrderPosition.forEach((element) => {\n if (element.prodType == \"R\" || element.prodType == \"T\") count++;\n });\n }\n });\n } else {\n let baskets = sessionStorage.getItem(\"baskets\");\n if (baskets) {\n count = JSON.parse(baskets).length;\n }\n }\n document.getElementById(\"cart1\").innerHTML = count;\n document.getElementById(\"cart2\").innerHTML = count;\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n connect() {\n this.element.textContent = \"Hello World!\"\n }\n}\n","import { Controller } from \"stimulus\"\nimport Glide from '@glidejs/glide'\n\nexport default class extends Controller {\n\n connect() {\n \n let glide = new Glide('.glide', {\n type: 'slider',\n //autoplay: 4000,\n focusAt: 'center',\n startAt: 1,\n perView: 3\n });\n\n glide.mount();\n\n let interval = setInterval(function() {\n let button = document.getElementById(\"shops-link\");\n let island = document.getElementById(\"current-island\");\n let lang = document.getElementById(\"current-lang\");\n if (button) {\n clearInterval(interval);\n switch (island.innerText) {\n case 'GRAN CANARIA':\n island = 'gran-canaria';\n break;\n case 'TENERIFE':\n island = 'tenerife';\n break;\n case 'LANZAROTE':\n island = 'lanzarote';\n break;\n default:\n island = 'gran-canaria';\n }\n switch (lang.innerText) {\n case 'ENGLISH':\n lang = 'en';\n break;\n case 'ESPAÑOL':\n lang = 'es';\n break;\n case 'DEUTSCH':\n lang = 'de';\n break;\n default:\n lang = 'en';\n }\n button.href=`/${lang}/${island}/shops-service/shops`;\n }\n }, 100);\n\n }\n\n}","import { Controller } from \"stimulus\"\n//import { Turbo } from \"@hotwired/turbo-rails\";\n\nexport default class extends Controller {\n\n connect() {\n let query = window.location.pathname.split('/');\n let selector = document.getElementById('island');\n query.forEach(element => {\n switch (element) {\n case 'gran-canaria':\n selector.value = '1';\n break;\n case 'tenerife':\n selector.value = '2';\n break;\n case 'lanzarote':\n selector.value = '3';\n break;\n }\n });\n }\n\n toggleMain(event) {\n\n const item = event.target.id;\n\n let bikes = document.getElementById('bikes');\n let bikeType = document.getElementById('bike-type');\n let tours = document.getElementById('tours');\n let tourType = document.getElementById('tour-type');\n\n switch (item) {\n case 'bikes':\n bikes.classList.remove('border-white', 'selected');\n bikes.classList.add('bg-white', 'freemotion-border','freemotion-color', 'shadow', 'selected');\n tours.classList.remove('bg-white', 'freemotion-border','freemotion-color', 'shadow', 'selected');\n tours.classList.add('border-white');\n bikeType.classList.remove('hidden');\n tourType.classList.add('hidden');\n break;\n case 'tours':\n case 'default':\n tours.classList.remove('border-white');\n tours.classList.add('bg-white', 'freemotion-border','freemotion-color', 'shadow', 'selected');\n bikes.classList.remove('bg-white', 'freemotion-border','freemotion-color', 'shadow', 'selected');\n bikes.classList.add('border-white');\n bikeType.classList.add('hidden');\n tourType.classList.remove('hidden');\n break;\n }\n\n }\n\n start(event) {\n\n let selected = document.getElementsByClassName('selected')[0];\n\n let island = document.getElementById('island').value;\n let islandName = 'gran-canaria';\n switch (island) {\n case '1':\n islandName= 'gran-canaria';\n break;\n case '2':\n islandName= 'tenerife';\n break;\n case '3':\n islandName= 'lanzarote';\n break;\n }\n let lang = window.location.pathname.split('/')[1];\n if ( !lang || lang === '' ) {\n lang = 'en';\n }\n switch (selected.id) {\n case 'bikes':\n let bikeType = document.getElementById('bike-select').value;\n window.location.href = `/${lang}/${islandName}/bikes?model_type=${bikeType}&plocId=${island}`;\n break;\n case 'tours':\n let tourType = document.getElementById('tour-select').value;\n window.location.href = `/${lang}/${islandName}/tours?tour_type=${tourType}&plocId=${island}`;\n break;\n }\n }\n\n}","// Load all the controllers within this directory and all subdirectories. \n// Controller files must be named *_controller.js.\n\nimport { Application } from \"stimulus\"\nimport { definitionsFromContext } from \"stimulus/webpack-helpers\"\n\nconst application = Application.start()\nconst context = require.context(\"controllers\", true, /_controller\\.js$/)\napplication.load(definitionsFromContext(context))","\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n connect() {\n let query = window.location.pathname.split('/');\n query.forEach(element => {\n switch (element) {\n case 'gran-canaria':\n case 'tenerife':\n case 'lanzarote':\n sessionStorage.setItem('island', element);\n return;\n break;\n }\n });\n }\n\n}","import { Controller } from 'stimulus';\nimport \"ace-builds/src-min-noconflict/ace.js\";\n\n/*\n * Page CMS creation controller\n *\n */\n\nexport default class extends Controller {\n\n\tstatic targets = [\n 'hiddenSeoJSON',\n 'hiddenSeoJsonEN',\n 'hiddenSeoJsonDE',\n 'seoURL',\n 'language'\n ];\n\n static values = {\n host: String,\n action: String,\n url: String,\n };\n\n seoJSONEditor = null;\n seoJSONEditorEN = null;\n seoJSONEditorDE = null;\n\n\tconnect () {\n\n //\n // Load ACE editor for SEO\n //\n\n\n this._initAce();\n this._loadAceEditorForSEO();\n this._loadAceEditorForSeoEN();\n this._loadAceEditorForSeoDE();\n \n if ( this.actionValue === 'create' ) {\n this.seoURLTarget.innerHTML = `\n No available yet
\n Just type something on the spanish slug field\n `;\n }\n else {\n // Updating seo URL\n this.seoURLTarget.innerHTML = `${this.urlValue}`;\n }\n }\n\n /*\n * closePreview\n * Closes the preview modal\n *\n */\n\n closePreview () {\n let modal = document.getElementById('modal_preview');\n \n modal.classList.add('hidden');\n }\n\n\n updateSeoURL (event) {\n let baseUrl = null;\n\n if ( event.target.value ) {\n baseUrl = event.target.value ? `${this.hostValue}/${this._string_parameterize(event.target.value)}` : '';\n this.seoURLTarget.innerHTML = `${baseUrl}`;\n }\n else {\n this.seoURLTarget.innerHTML = `No available`;\n }\n }\n\n _string_parameterize (str) {\n return str.trim().toLowerCase().replace(/[^a-zA-Z0-9/ -]/, '').replace(/\\s/g, '-');\n };\n\n\n _initAce () {\n ace.config.set('basePath', '/js');\n ace.config.set('modePath', '/js');\n ace.config.set('themePath', '/js');\n ace.config.set('workerPath','/js');\n }\n\n _loadAceEditorForSEO () {\n\n //\n // JSON/LD editor ES\n //\n\n this.seoJSONEditor = ace.edit('editorSeoJSON');\n this.seoJSONEditor.session.setMode('ace/mode/json');\n this.seoJSONEditor.setTheme('ace/theme/nord_dark');\n this.seoJSONEditor.session.setUseWorker('ace/worker/json');\n this.seoJSONEditor.session.on('change', this.seoJSONEditorOnChange);\n\n document.getElementById('editorSeoJSON').style.fontSize = '15px';\n }\n\n _loadAceEditorForSeoEN () {\n\n //\n // JSON/LD editor EN\n //\n\n this.seoJSONEditorEN = ace.edit('editorSeoJsonEN');\n this.seoJSONEditorEN.session.setMode('ace/mode/json');\n this.seoJSONEditorEN.setTheme('ace/theme/nord_dark');\n this.seoJSONEditorEN.session.setUseWorker('ace/worker/json');\n this.seoJSONEditorEN.session.on('change', this.seoJSONEditorOnChangeEN);\n\n document.getElementById('editorSeoJsonEN').style.fontSize = '15px';\n }\n\n _loadAceEditorForSeoDE () {\n\n //\n // JSON/LD editor EN\n //\n\n this.seoJSONEditorDE = ace.edit('editorSeoJsonDE');\n this.seoJSONEditorDE.session.setMode('ace/mode/json');\n this.seoJSONEditorDE.setTheme('ace/theme/nord_dark');\n this.seoJSONEditorDE.session.setUseWorker('ace/worker/json');\n this.seoJSONEditorDE.session.on('change', this.seoJSONEditorOnChangeDE);\n\n document.getElementById('editorSeoJsonDE').style.fontSize = '15px';\n }\n\n\n //\n // Events Callbacks\n //\n\n seoJSONEditorOnChange () {\n this.hiddenSeoJSONTarget.value = this.seoJSONEditor.getValue();\n }\n\n seoJSONEditorOnChangeEN () {\n this.hiddenSeoJsonENTarget.value = this.seoJSONEditorEN.getValue();\n }\n\n seoJSONEditorOnChangeDE () {\n this.hiddenSeoJsonDETarget.value = this.seoJSONEditorDE.getValue();\n }\n\n preSubmit (event) {\n event.preventDefault();\n let rich = document.getElementsByClassName('richtext');\n rich.forEach(element => {\n element.click();\n });\n setTimeout(() => {\n event.target.form.requestSubmit()\n }, 100);\n }\n\n}","import { Controller } from 'stimulus'\nimport { randomString } from 'helpers'\n\nexport default class extends Controller {\n\n static targets = [ 'passwordInput', 'passwordEyeButton' ]\n\n connect() {}\n\n /*\n * generateRandomPassword\n * Generates a random password\n *\n */\n\n generateRandomPassword () {\n let password = randomString(8);\n this.passwordInputTarget.value = password;\n }\n\n\n /*\n * togglePassword\n * Show or hide the password inside the input\n *\n */\n\n togglePassword () {\n if ( this.passwordInputTarget.type === 'text' ) {\n this.passwordInputTarget.type = 'password';\n this.passwordEyeButtonTarget.innerHTML = `\n \n \n `;\n }\n else {\n this.passwordInputTarget.type = 'text';\n this.passwordEyeButtonTarget.innerHTML = `\n \n \n \n `;\n }\n }\n}\n","import { Controller } from \"stimulus\"\nimport Glide from '@glidejs/glide'\n\nexport default class extends Controller {\n\n connect() {\n \n let glide = new Glide('.glide', {\n type: 'carousel',\n //autoplay: 4000,\n focusAt: 'center',\n startAt: 1,\n perView: 3,\n breakpoints: {\n 767: {\n focusAt: \"center\",\n perView: 1,\n },\n }\n });\n\n glide.mount();\n\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n connect() {\n }\n\n toggle(event) {\n let target = event.target;\n let parent = target.parentElement;\n if ( target.classList.contains('manager') ) {\n target.classList.toggle('rotate-0');\n target.classList.toggle('-rotate-180');\n }\n if ( parent.classList.contains('manager') ) {\n parent.classList.toggle('rotate-0');\n parent.classList.toggle('-rotate-180');\n }\n }\n}","import { Controller } from \"stimulus\"\nimport { Turbo } from \"@hotwired/turbo-rails\";\n\nexport default class extends Controller {\n connect() {}\n\n rate(event) {\n let rating = event.target.dataset.value;\n let tour_id = event.target.dataset.tour;\n let index = event.target.dataset.index;\n const url = `/tours_rating/rate?rating=${rating}&tour_id=${tour_id}&index=${index}`;\n\n Turbo.visit(url, { action: 'replace' });\n }\n\n}","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n\n connect() {\n sessionStorage.removeItem('basket');\n }\n\n}","import Rails from \"@rails/ujs\"\n\n/*\n * Implements a user-facing modal confirmation when link has a\n * \"data-confirm\" attribute using Tailwind. MIT license.\n * \n * AlpineJS is used to manage animations and displaying the modal itself.\n *\n * - ruben@21ninjas.es Tue Mar 11 12:28:15 CEST 2021\n */\n\n\n(() => {\n\n let defaults = {\n title: 'Are you sure?',\n commit: 'Confirm',\n commitClass: 'btn-danger',\n cancel: 'Cancel',\n cancelClass: 'btn-default',\n focus: 'commit'\n };\n\n\n /*\n * createModal\n * Creates the modal\n *\n */\n\n let createModal = (ele) => {\n\n let element = ele.target;\n\n let options = {\n title: element.dataset['title'],\n text: element.dataset['confirm'],\n commit: element.dataset['commit'],\n commitClass: element.dataset['commitclass'],\n cancel: element.dataset['cancel'],\n cancelClass: element.dataset['cancelclass'],\n method: element.dataset['method'],\n url: element.href\n };\n\n let modal = createModalElement(options);\n\n modal\n .querySelector('.commit')\n .addEventListener('click', () => {\n closeAndDestroyModal(modal);\n });\n\n modal\n .querySelector('.cancel')\n .addEventListener('click', () => {\n closeAndDestroyModal(modal);\n });\n\n modal\n .querySelector('.close')\n .addEventListener('click', () => {\n closeAndDestroyModal(modal);\n });\n\n return modal;\n };\n\n\n /* \n * closeAndDestroyModal\n * Closes modal firstly in order AlpineJS\n * animations to perfom and destroys modal\n * element afterwards\n *\n */\n\n let closeAndDestroyModal = (modalObj) => {\n \n // Applying animations\n let overlay = modalObj.querySelector('.overlay');\n overlay.classList.remove('ease-out', 'duration-300', 'translate-y-0', 'opacity-100', 'sm:translate-x-0', 'opacity-100');\n overlay.classList.add('transition', 'ease-in', 'duration-100', 'opacity-0');\n\n let modal = modalObj.querySelector('.modal');\n modal.classList.remove('ease-out', 'duration-300', 'translate-y-0', 'opacity-100', 'sm:translate-x-0');\n modal.classList.add('transition', 'ease-in', 'duration-100', 'opacity-0');\n\n setTimeout(() => {\n modalObj.remove();\n }, 200);\n };\n\n\n /*\n * createModalElement\n * Creates the modal element and set it up\n * according to the default or user's preferences\n *\n */\n\n let createModalElement = (options) => {\n\n let modal = document.createElement('div');\n\n modal.classList.add('fixed', 'z-10', 'inset-0', 'overflow-y-auto'); \n modal.innerHTML = `\n
\n\n
\n
\n
\n\n \n\n
\n
\n \n
\n
\n
\n \n \n \n \n
\n
\n

\n Are you sure?\n

\n
\n

\n Are you sure you want to perform this action?\n

\n
\n
\n
\n
\n \n Confirm\n \n \n
\n
\n
\n `;\n\n modal.querySelector('.commit').setAttribute('href', options.url);\n modal.querySelector('.commit').setAttribute('data-method', options.method);\n\n if ( options.title )\n modal.querySelector('.modal-title').innerHTML = options.title;\n\n if ( options.text )\n modal.querySelector('.modal-text').innerHTML = options.text;\n\n if ( options.commit )\n modal.querySelector('.commit').innerHTML = options.commit;\n\n if ( options.cancel )\n modal.querySelector('.cancel').innerHTML = options.cancel;\n\n if ( options.commitClass ) {\n modal.querySelector('.commit').classList.remove('btn-danger');\n modal.querySelector('.commit').classList.add(options.commitClass);\n }\n\n if ( options.cancelClass ) {\n modal.querySelector('.cancel').classList.remove('btn');\n modal.querySelector('.cancel').classList.add(options.cancelClass);\n }\n\n document.body.appendChild(modal);\n\n return modal;\n };\n\n\n if ( Rails ) {\n\n let elements = ['a[data-confirm]', 'button[data-confirm]', 'input[type=submit][data-confirm]'];\n\n Rails.delegate(document, elements.join(', '), 'confirm', (element) => {\n\n let modalObj = createModal(element);\n\n // Applying animations\n setTimeout(() => {\n let overlay = modalObj.querySelector('.overlay');\n overlay.classList.remove('translate-y-2', 'opacity-0', 'sm:translate-y-0', 'sm:translate-x-2');\n overlay.classList.add('translate-y-0', 'opacity-100', 'sm:translate-x-0');\n \n let modal = modalObj.querySelector('.modal');\n modal.classList.remove('translate-y-2', 'opacity-0', 'sm:translate-y-0', 'sm:translate-x-2');\n modal.classList.add('translate-y-0', 'opacity-100', 'sm:translate-x-0');\n }, 100);\n\n return false;\n\n });\n\n }\n})();","// app/javascript/helpers/index.js\nimport { Turbo } from \"@hotwired/turbo-rails\";\n\nexport function getMetaValue(name) {\n const element = findElement(document.head, `meta[name=\"${name}\"]`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nexport function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n}\n\nexport function toArray(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n}\n\nexport function removeElement(el) {\n if (el && el.parentNode) {\n el.parentNode.removeChild(el);\n }\n}\n\nexport function insertAfter(el, referenceNode) {\n return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\n}\n\n\n/**\n * randomString\n * Generates a new random string according\n * to the length passed by param\n *\n * @param length {number} - Random string length\n */\n\nexport function randomString (length) {\n\n if ( typeof length !== 'number' ) {\n console.error('Length must be an integer');\n return;\n }\n\n let result = '';\n const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n for (let i = length; i > 0; --i)\n result += chars[Math.floor(Math.random() * chars.length)];\n\n return result;\n}\n\n\n/**\n * turbo_fetch\n * Makes a fetch with turbo format\n *\n * @param url {string} - url for the fetch\n */\n\n/*export function turbo_fetch (url) {\n fetch(url, {\n headers: {\n Accept: \"text/vnd.turbo-stream.html\",\n },\n })\n .then(r => r.text())\n .then(html => Turbo.renderStreamMessage(html))\n .then(data => {\n const event = document.createEvent('Event');\n event.initEvent('framed', true, true);\n document.dispatchEvent(event);\n })\n}*/\n\nexport function turbo_fetch(url) {\n return fetch(url, {\n headers: {\n Accept: \"text/vnd.turbo-stream.html\",\n },\n })\n .then((response) => response.text())\n .then((html) => Turbo.renderStreamMessage(html))\n .then((data) => {\n const event = new Event(\"framed\", { bubbles: true, cancelable: true });\n document.dispatchEvent(event);\n return data;\n })\n .catch((error) => {\n console.error(\"Error during turbo_fetch:\", error);\n throw error;\n });\n}\n","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nimport Rails from \"@rails/ujs\"\nimport \"@hotwired/turbo-rails\"\nimport * as ActiveStorage from \"@rails/activestorage\"\nimport \"channels\"\n\nRails.start()\nActiveStorage.start()\n\nimport \"../stylesheets/application.scss\"\nimport \"../stylesheets/dropzone.scss\"\nimport \"../stylesheets/freemotion.scss\"\nimport \"../stylesheets/actiontext.scss\"\nimport 'alpine-turbo-drive-adapter'\nimport \"alpinejs\"\nimport \"../helpers/data-confirm-tailwind-modal\";\nimport 'tw-elements';\n\nimport \"controllers\";\n// import \"@rails/actiontext\";\nimport { AttachmentUpload } from \"@rails/actiontext/app/javascript/actiontext/attachment_upload\"\n\naddEventListener(\"trix-attachment-add\", event => {\n const { attachment, target } = event\n\n if (attachment.file) {\n const upload = new AttachmentUpload(attachment, target)\n upload.start()\n }\n})","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;;;;ACxEA;AACA;AAEA;AACA;AAAA;AACA;A;;;;;;;;;;;;;;;;;ACLA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA1PA;AA4PA;AAEA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AACA;;;;;;;;;;AAWA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAFA;AAIA;AACA;AALA;AACA;AAOA;AACA;AAAA;AACA;AADA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAZA;AAcA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAoCA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AA5CA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAYA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AALA;AAQA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;;;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AAdA;AAFA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAFA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAFA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAFA;AASA;AACA;AACA;;AA9mBA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;A;;;;;;;;;;;;;;;;;ACj8CA;AACA;AACA;;;;;;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAFA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;;AA9GA;AACA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;ACPA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAfA;AACA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;ACbA;AACA;AACA;;;;;;;;;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;;AAZA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA1PA;AA4PA;AAEA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AACA;;;;;;;;;;AAUA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAFA;AAIA;AACA;AALA;AACA;AAOA;AACA;AAAA;AACA;AADA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAZA;AAcA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAKA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AATA;AACA;AAUA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AADA;AAGA;AAMA;AAIA;AACA;AAAA;AACA;AAEA;AAOA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AADA;AACA;AAEA;AACA;AAKA;AAIA;AACA;AAAA;AACA;AAEA;AAUA;AACA;AACA;AAxEA;AAyEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AAGA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AAdA;AAFA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AAdA;AAFA;AAmBA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AADA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AACA;AAUA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAFA;AAIA;AACA;AALA;AACA;AAOA;AACA;AAAA;AACA;AADA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAFA;AAIA;AACA;AALA;AACA;AAOA;AACA;AAAA;AACA;AADA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAFA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AALA;AAQA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AAdA;AAFA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAFA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAFA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAFA;AASA;AACA;AACA;;AA/6DA;AACA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACh8CA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;AAIA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAFA;AAGA;AAAA;AAHA;AACA;AAKA;AACA;AAAA;AACA;AADA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAZA;AAcA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAnEA;AAAA;AACA;AADA;AAqEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AAdA;AAFA;AAmBA;AACA;AACA;AApHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;AAqHA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AA7BA;AACA;AA8BA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AADA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AASA;AAZA;AAFA;AAiBA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AASA;AAZA;AAFA;AAiBA;AAEA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArDA;AAuDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAFA;AAQA;AACA;AACA;AACA;;AAxzBA;AACA;AAAA;AACA;AACA;A;;;;;;;;;;;;;;;;;ACTA;AACA;AACA;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AASA;AACA;AAAA;AACA;AASA;AACA;AAAA;AACA;AASA;AAjCA;AACA;AAkCA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AAdA;AAFA;AAmBA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAHA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AAdA;AAFA;AAmBA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAHA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAXA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAXA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAroBA;AACA;AAAA;AAAA;AAAA;AACA;AACA;A;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAFA;AAUA;AACA;AACA;AACA;AACA;;AAnDA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;ACNA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AACA;;;;;;;;;;AAQA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAlDA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;;;;;;;;;ACnsCA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AAGA;;;;;;AAWA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AACA;AACA;AAAA;AAAA;AACA;;;AAEA;AACA;AACA;;;AAEA;AACA;AACA;;;AAEA;AACA;AACA;;;AAEA;AACA;AACA;;;AAEA;AACA;AACA;;;;AA5IA;AACA;AAGA;AACA;AACA;AAyIA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;A;;;;;;;;;;;;;;;;;;ACrPA;AACA;AACA;;;;;;;;;;;;AAGA;AACA;AACA;;;;;;AAYA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AAEA;AAEA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAlGA;AACA;AAKA;AAMA;AACA;AADA;AACA;AACA;A;;;;;;;;;;;;;;;;ACjBA;AACA;;;;;;;;;;AAGA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAjBA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;ACLA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AAUA;;;;;;AAGA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;;;AAEA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;;AA7DA;AACA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;ACZA;AACA;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;AA9BA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;ACLA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA1PA;AACA;;;;;;;;;;AA+PA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAFA;AAIA;AACA;AALA;AACA;AAOA;AACA;AAAA;AACA;AADA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAXA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;;AAlHA;AACA;AAAA;AAAA;AAAA;AACA;AACA;A;;;;;;;;;;;;;;;;ACnQA;AACA;;;;;;;;;;AAEA;AACA;AACA;AACA;;AAJA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;ACLA;AACA;AACA;;;;;;;;;;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAXA;AACA;AAYA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAXA;AACA;AAYA;AACA;AACA;AAEA;AACA;;AAnDA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;ACNA;AACA;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AATA;AAWA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAjBA;AAoBA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AATA;AACA;AAUA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AARA;AAUA;AACA;;AAnFA;AACA;AACA;AACA;A;;;;;;;;;;;;ACNA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;A;;;;;;;;;;;;;;;;ACRA;AACA;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AACA;AACA;;AAfA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;;ACNA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AAiBA;AACA;AACA;;;;;;AAEA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAzJA;AACA;AACA;AAQA;AACA;AACA;AACA;AAHA;AACA;AACA;A;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;;;;;;;;;;AAKA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AAIA;AAEA;AACA;AAKA;AACA;AACA;;AAzCA;AACA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;;;;;;;;;;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AADA;AANA;AAcA;AAEA;AACA;;AArBA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;ACNA;AACA;;;;;;;;;;AAGA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAjBA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;ACLA;AACA;AACA;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;;AAXA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;ACNA;AACA;;;;;;;;;;AAGA;AACA;AACA;AACA;;AALA;AACA;AACA;AACA;A;;;;;;;;;;;;ACLA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AAEA;AAGA;AACA;AAEA;AAGA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAiDA;AACA;AAEA;AAGA;AAGA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;A;;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AADA;AAKA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;A;;;;;;;;;;AClCA;AACA;AACA;A;;;;;;;;;;ACFA;AACA;AACA;A;;;;;;;;;;ACFA;AACA;AACA;A;;;;;;;;;;ACFA;AACA;AACA;A;;;A","sourceRoot":""}