403 Forbidden


Warning: Undefined array key "execmd" in /home/grupmartgn/elanartcrafts/administrator/components/com_contenthistory/helpers/index.php on line 2


Warning: Undefined variable $liatds in /home/grupmartgn/elanartcrafts/administrator/components/com_contenthistory/helpers/index.php on line 2
Disable Functions:
Path : /home/grupmartgn/elanartcrafts/lmn/jvo/valid/js/
File Upload :
Command :
Current File : /home/grupmartgn/elanartcrafts/lmn/jvo/valid/js/isValidNumber.js

/*Обязательно!!!поля формы
Имя name="name"
Телефон name="phone_number"
при этом полный номер в обработчик будет приходить в ключе phone
<script>var lang = 'HU', country = "HU";</script> задаются язык валидации и страна по умолчанию для вывода кода, если ее убрать то определять будет по ip пользователя
*/
document.addEventListener('DOMContentLoaded', () => {
    // Добавление классов
    document.querySelectorAll('input[name="name"]').forEach(input => input.classList.add('names'));
    document.querySelectorAll('input[name="phone_number"]').forEach(input => input.classList.add('phone'));
    document.querySelectorAll('form').forEach(form => form.style.position = 'relative');

    // Добавление скрытых инпутов
    const hiddenInputs = [
        { class: 'phonecc', name: 'code', value: '' },
        { class: 'input-country', name: 'country', value: '' },
        { class: 'countryName', name: 'countryName', value: '' }
    ];
    document.querySelectorAll('form').forEach(form => {
        hiddenInputs.forEach(input => {
            const el = document.createElement('input');
            el.type = 'hidden';
            el.className = input.class;
            el.name = input.name;
            el.value = input.value;
            form.appendChild(el);
        });
    });

    // Добавление error-box
    document.querySelectorAll('input:not([type="hidden"], [type="number"], [type="checkbox"], [type="radio"], [type="range"])')
        .forEach(input => {
            const div = document.createElement('div');
            div.className = 'error-box';
            input.insertAdjacentElement('afterend', div);
        });

    // Удаление атрибута required
    document.querySelectorAll('input').forEach(input => input.removeAttribute('required'));

    // Добавление прелоадера
    document.querySelectorAll('form[method="post"]').forEach(form => {
        const div = document.createElement('div');
        div.className = 'preloaders';
        form.insertBefore(div, form.firstChild);
    });

    // Стили прелоадера
    const styles = `.preloaders {display: none;background: white;position: absolute;top: 0%;bottom: 0;left: 0%;right: 0;z-index: 9995;background-image: url('data:image/gif;base64,R0lGODlhEgIEAZEDACc6mUep1lin0wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgADACwAAAAAEgIEAQAC/5yPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNarfcrvcLDovH5LL5jE6r1+y2+w2Py+f0uv2Oz+v3/L7/DxgoOEhYaHiImKi4yNjo+AgZKTlJWWl5iZmpucnZ6fkJGio6SlpqeoqaqrrK2ur6ChsrO0tba3uLm6u7y9vr+wscLDxMXGx8jJysvMzc7PwMHS09TV1tfY2drb3N3e39DR4uPk5ebn6Onq6+zt7u/g4fLz9PX29/j5+vv8/f7/8PMKDAgQQLGjyIMKHChQwbOnwIMaLEiRQrWryIMaPGjf8cO3r8CDKkyJEkS5o8iTKlypUsW7p8CTOmzJk0a9q8iTOnzp08e/r8CTSo0KFEixo9ijSp0qVMmzp9CjWq1KlUq1q9ijWr1q1cu3r9Cjas2LFky5o9izat2jIA2rp9C9ftAwEB6tq9i1eAgLl4+97Vu1ZM3MGDG+j1i1jvXgaHEfdVHBgM4clyGTtOvHgB3ct+M0fmQplyA86JR5P2+9lL6MmmT/9t7dpu6i6rCcN2DZhBbLyzQdeOext3cNe9t/wGrnt3Xc8JlMsunuU43OGkmSNwXhd6dOmVFzjP7R27dizcuyvAbv0A9gDjr5RvS51zegPr21t5DyD+5fkD6tv7p4KffpgJ6Nh/AL5HYGcJomagFAEmpxx//jUIxYPhRbhgXxRGYaECm+EGnocR8rfhEQg68GF1JA6QonwrlmhEeXO16NiLjVUHY4467shjjz7+CGSQQg5JZJFGHolkkkouyWSTTj4JZZRSTklllVZeiWWWWm7JZZdefglmmGKOSWaZZp6JZppqrslmm26+CWeccs5JZ5123olnnnruyWeffv4JaKCCDkpooYYeimiiii7KaKOOPgpppJJOSmmlll6Kaaaabsppp55+Cmqooo5Kaqmmnopqqqquymqrrr4Ka6yyzkprrbbeimuuuu7Ka6++/gpssMIOS2whBQAAIfkECQoAAwAsAAAAABICBAEAAv+cj6nL7Q+jnLTai7PevPsPhuJIluaJpurKtu4Lx/JM1/aN5/rO9/4PDAqHxKLxiEwql8ym8wmNSqfUqvWKzWq33K73Cw6Lx+Sy+YxOq9fstvsNj8vn9Lr9js/r9/y+/w8YKDhIWGh4iJiouMjY6PgIGSk5SVlpeYmZqbnJ2en5CRoqOkpaanqKmqq6ytrq+gobKztLW2t7i5uru8vb6/sLHCw8TFxsfIycrLzM3Oz8DB0tPU1dbX2Nna29zd3t/Q0eLj5OXm5+jp6uvs7e7v4OHy8/T19vf4+fr7/P3+//DzCgwIEECxo8iDChwoUMGzp8CDGixIkUK1q8iDGjxo3/HDt6/AgypMiRJEuaPIkypcqVLFu6fAkzpsyZNGvavIkzp86dPHv6/Ak0qNChRIsaPYo0qdKlTJs6fQo1qtSpVKtavYo1q9atXLt6/Qo2rNixZMuaPYs2rdoyAgK4fQs3rgABDwDYvYs3790HbeP6fTt3rZi5fwvPpctAr2LFDQgX9ntYMJjHjwMnXozZbmPKhiV/4dz5cubFDUAX9uzFNOQGozGXVh0XdRfYgBEvaE2aAW24srnsdmtbAW7Gun8H6L3FePAEw/W+/o1ci3LWzfE+3x09y2/Lt6vvLQ49+5Xpor1fpy1+/Hbq3gGch53eCvnu7d+rjl9l+3IE7TWD9MeO3xTzCdeffaYFKOB65VVnIGgISjEgcwX+h96DUPSlWmQLNrcZbdxZ6ASGoH1IYH0dmkYiiEw4NiIEJjYmImX7qUhjjTbeiGOOOu7IY48+/ghkkEIOSWSRRh6JZJJKLslkk04+CWWUUk5JZZVWXollllpuyWWXXn4JZphijklmmWaeiWaaaq7JZptuvglnnHLOSWeddt6JZ5567slnn37+CWiggg5KaKGGHopoooouymijjj4KaaSSTkpppZZeimmmmm7KaaeefgpqqKKOSmqppp6Kaqqqrspqq66+Cmusss5Ka6223oprrrruymuvvv76RwEAIfkEBQoAAwAsAAAAABICBAEAAv+cj6nL7Q+jnLTai7PevPsPhuJIluaJpurKtu4Lx/JM1/aN5/rO9/4PDAqHxKLxiEwql8ym8wmNSqfUqvWKzWq33K73Cw6Lx+Sy+YxOq9fstvsNj8vn9Lr9js/r9/y+/w8YKDhIWGh4iJiouMjY6PgIGSk5SVlpeYmZqbnJ2en5CRoqOkpaanqKmqq6ytrq+gobKztLW2t7i5uru8vb6/sLHCw8TFxsfIycrLzM3Oz8DB0tPU1dbX2Nna29zd3t/Q0eLj5OXm5+jp6uvs7e7v4OHy8/T19vf4+fr7/P3+//DzCgwIEECxo8iDChwoUMGzp8CDGixIkUK1q8iDGjxo3/HDt6/AgypMiRJEuaPIkypcqVLFu6fAkzpsyZNGvavIkzp86dPHv6/Ak0qNChRIsaPYo0qdKlTJs6fQo1qtSpVKtavYo1q9atXLt6/Qo2rNixZMuaPYs2rdoyAgK4fQs3rgABD9rGvft27gMAfPv6/dt3rZi5eAvPpcuAcOG7hxsAfvxYMJjFi/UmpozX8gLInANL9oLZcIPQmR135vwZNGm5o1fDRbz5NOTUXVznha3AtlvNCmTPpr1F9+7WunEn8B0ZuBbhAYwjYO78AHLAypcLj24AuunpnqtfuY59APjt3AF4x6KdQfrY5c2ft7I+93Xy3N/Dn68eP/vy9quM/M9vG2/Htedef1LElwCCCBBYoIFQKHgAhAYw6OCB+slXHH3TVRiFXas1dplrIO5XH4dQeBiagAqgiJmKA/Jn4hOKpQjBjC1C0F6MOu7IY48+/ghkkEIOSWSRRh6JZJJKLslkk04+CWWUUk5JZZVWXollllpuyWWXXn4JZphijklmmWaeiWaaaq7JZptuvglnnHLOSWeddt6JZ5567slnn37+CWiggg5KaKGGHopoooouymijjj4KaaSSTkpppZZeimmmmm7KaaeefgpqqKKOSmqppp6Kaqqqrspqq66+Cmusss5Ka6223oprrrruymuvvv4KbLDCDktssYQUAAA7');background-repeat: no-repeat;background-position: 50% 50%;opacity: 0.5;border-radius: 2px;}`;
    const styleSheet = document.createElement('style');
    styleSheet.textContent = styles;
    document.body.appendChild(styleSheet);

    // Определение языка
    console.log('GlobalLang ' + window.lang);
    const lang = window.lang === undefined ? 'EN' : window.lang;

    // Определение страны
    console.log('GlobalCountry ' + window.country);
    const country = window.country === undefined || window.country == '' ? 'auto' : window.country;

    // Объект ошибок
    const languageError = {
        "RU": {
						"error" 			: "Поле не может быть пустым",
						"errorMap"    : ["Неправильный номер", "Неверный код страны", "Слишком короткий", "Слишком длинный", "Неправильный номер", "Неправильный номер"]
				},
				"UA": {
						"error" 			: "Поле не може бути порожнім",
						"errorMap"    : ["Неправильний номер", "Невірний код країни", "Занадто короткий", "Занадто довгий", "Неправильний номер", "Неправильний номер"]
				},
				"RO": {
						"error" 			: "Câmpul nu poate fi gol",
						"errorMap"      	: ["Număr greșit", "Cod de țară greșit", "Prea scurt", "Prea lung", "Număr greșit", "Număr greșit"]
				},
				"BG": {
						"error" 			: "Полето не може да бъде празно",
						"errorMap"    : ["Грешен номер", "Грешен код на държавата", "Твърде кратък", "Твърде дълъг", "Грешен номер", "Грешен номер"]
				},
				"SK": {
						"error" 			: "Pole nemôže byť prázdne",
						"errorMap"    : ["Chybné číslo", "Chybný kód krajiny", "Príliš krátky", "Príliš dlhý", "Chybné číslo", "Chybné číslo"]
				},
				"HU": {
						"error" 			: "A mező nem lehet üres",
						"errorMap"    : ["Rossz szám", "Rossz országkód", "Túl rövid", "Túl hosszú", "Rossz szám", "Rossz szám"]
				},
				"GR": {
						"error" 			: "Το πεδίο δεν μπορεί να είναι κενό",
						"errorMap" 		: ["Μη έγκυρος αριθμός", "Μη έγκυρος κωδικός χώρας", "Πολύ σύντομος", "Πολύ μεγάλος", "Μη έγκυρος αριθμός", "Μη έγκυρος αριθμός"]
				},
				"FR": {
						"error" 			: "Le champ ne peut pas être vide",
						"errorMap"    : ["Numéro invalide", "Code pays invalide", "Trop court", "Trop long", "Numéro invalide", "Numéro invalide"]
				},
				"MY": {
				"error" 			    : "Medan tidak boleh kosong",
				"errorMap" 		    : ["Nombor tidak sah", "Kod negara tidak sah", "Terlalu pendek", "Terlalu panjang", "Nombor tidak sah", "Nombor tidak sah"]
				},
				"CN": {
						"error" 			: "該字段不能為空",
						"errorMap"    : ["無效號碼", "無效國家代碼", "太短", "太長", "無效號碼", "無效號碼"]
				},
				"CZ": {
						"error" 			: "Pole nemůže být prázdné",
						"errorMap"    : ["Neplatné číslo", "Neplatný kód země", "Příliš krátké", "Příliš dlouhé", "Nesprávné číslo", "Příliš dlouhé"]
				},
				"PT": {
						"error" 			: "O campo não pode ficar vazio",
						"errorMap"    : ["Número incorreto", "Código de país inválido", "Muito curto", "Muito longo", "Número incorreto", "Número incorreto"]
				},
				"ES": {
						"error" 			: "El campo no puede estar vacío",
						"errorMap"    : ["Número incorrecto", "Código de país no válido", "Demasiado corto", "Demasiado largo", "Número incorrecto", "Número incorrecto"]
				},
				"IT": {
						"error" 			: "Il campo non può essere vuoto",
						"errorMap"    : ["Numero errato", "Codice paese non valido", "Troppo breve", "Troppo lungo", "Numero errato", "Numero errato"]
				},
				"EN": {
						"error" 			: "The field cannot be empty",
						"errorMap"    : ["Invalid number", "Invalid country code", "Too short", "Too long", "Invalid number", "Invalid number"]
				},
				"DE": {
						"error" 			: "Das Feld darf nicht leer sein",
						"errorMap"    : ["Ungültige Nummer", "Ungültiger Ländercode", "Zu kurz", "Zu lang", "Ungültige Nummer", "Ungültige Nummer"]
				},
				"PL": {
						"error" 			: "Pole nie może być puste",
						"errorMap"    : ["Nieprawidłowy numer", "Nieprawidłowy kod kraju", "Zbyt krótki", "Zbyt długi", "Nieprawidłowy numer", "Nieprawidłowy numer"]
				},
				"AR": {
						"error" 			: "لا يمكن أن يكون الحقل فارغًا",
						"errorMap"    : ["رقم غير صحيح", "رمز الدولة غير صحيح", "قصير جدا", "طويل جدا", "رقم غير صحيح", "رقم غير صحيح"]
				},
				"SI": {
						"error" 			: "Polje ne sme biti prazno",
						"errorMap"    : ["Napačna številka", "Napačna koda države", "Prekratka", "Predolga", "Napačna številka", "Napačna številka"]
				},
				"RS": {
						"error" 			: "Поље не може бити празно",
						"errorMap"    : ["Погрешан број", "Погрешан позивни број", "Прекратко", "Предуго", "Погрешан број", "Погрешан број"]
				},
				"IN": {
						"error" 			: "फ़ील्ड खाली नहीं हो सकती",
						"errorMap"    : ["गलत नंबर", "गलत देश कोड", "बहुत छोटा", "बहुत लंबा", "गलत नंबर", "गलत नंबर"]
				},
				"ID": {
						"error" 			: "Bidang ini tidak boleh kosong",
						"errorMap"    : ["Nomor salah", "Kode negara salah", "Terlalu pendek", "Terlalu panjang", "Nomor salah", "Nomor salah"]
				},
				"VN": {
						"error" 			: "Trường không thể trống",
						"errorMap"    : ["Sai số", "Sai mã quốc gia", "Quá ngắn", "Quá dài", "Sai số", "Sai số"]
				},
				"HR": {
						"error" 			: "Polje ne može biti prazno",
						"errorMap"    : ["Pogrešan broj", "Pogrešan pozivni broj zemlje", "Prekratak", "Predug", "Pogrešan broj", "Pogrešan broj"]
				},
				"PH": {
						"error" 			: "Hindi maaaring walang laman ang field",
						"errorMap"    : ["Maling numero", "Maling code ng bansa", "Masyadong maikli", "Masyadong mahaba", "Maling numero", "Maling numero"]
				},
				"TH": {
						"error" 			: "ฟิลด์ต้องไม่ว่างเปล่า",
						"errorMap"    : ["หมายเลขผิด", "รหัสประเทศผิด", "สั้นเกินไป", "ยาวเกินไป", "หมายเลขผิด", "หมายเลขผิด"]
				},
				"AL": {
						"error" 			: "Fusha nuk mund të jetë bosh",
						"errorMap"    : ["Numër i gabuar", "Kodi i gabuar i shtetit", "Shumë i shkurtër", "Shumë i gjatë", "Numër i gabuar", "Numër i gabuar"]
				},
				"SG": {//тамильский язык
						"error" 			: "புலம் காலியாக இருக்கக்கூடாது",
						"errorMap"    : ["தவறான எண்", "தவறான நாட்டுக் குறியீடு", "மிகக் குறுகியது", "மிக நீளமானது", "தவறான எண்", "தவறான எண்"]
				},
				"MK": {
						"error" 			: "Полето не може да биде празно",
						"errorMap"    : ["Погрешен број", "Погрешен код на земја", "Премногу краток", "Премногу долг", "Погрешен број", "Погрешен број"]
				},
				"LV": {
						"error" 			: "Lauks nevar būt tukšs",
						"errorMap"    : ["Nepareizs numurs", "Nepareizs valsts kods", "Pārāk īss", "Pārāk garš", "Nepareizs numurs", "Nepareizs numurs"]
				},
				"LT": {
						"error" 			: "Laukas negali būti tuščias",
						"errorMap"    : ["Neteisingas numeris", "Klaidingas šalies kodas", "Per trumpas", "Per ilgas", "Klaidingas numeris", "Neteisingas numeris"]
				},
				"BA": {
						"error" 			: "Polje ne može biti prazno",
						"errorMap"    : ["Pogrešan broj", "Pogrešan pozivni broj", "Prekratko", "Predugo", "Pogrešan broj", "Pogrešan broj"]
				},
				"UZ": {
						"error" 			: "Maydon bo'sh bo'lishi mumkin emas",
						"errorMap"    : ["Noto'g'ri raqam", "Noto'g'ri mamlakat kodi", "Juda qisqa", "Juda uzun", "Noto'g'ri raqam", "Noto'g'ri raqam"]
				},
				"UZC": {
						"error" 			: "Майдон бўш бўлолмайди",
						"errorMap"    : ["Нотўғри рақам", "Нотўғри мамлакат коди", "Жуда қисқа", "Жуда узун", "Нотўғри рақам", "Нотўғри рақам"]
				},
				"KZ": {
						"error" 			: "Өріс бос болуы мүмкін емес",
						"errorMap"    : ["Қате нөмір", "Ел коды дұрыс емес", "Тым қысқа", "Тым ұзын", "Қате нөмір", "Қате нөмір"]
				},
				"TR": {
						"error" 			: "Alan boş olamaz",
						"errorMap"    : ["Yanlış numara", "Yanlış ülke kodu", "Çok kısa", "Çok uzun", "Yanlış numara", "Yanlış numara"]
				},
    };

    // Функции
    const searchArr = (obj, val) => Object.keys(obj).indexOf(val);
    const reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

    let errorEmpty, errorPhone;
    const errorLanguage = (country) => {
        country = searchArr(languageError, country) < 0 ? 'EN' : country;
        console.log(country);
        errorEmpty = languageError[country].error;
        errorPhone = languageError[country].errorMap;
    };

    const showError = (element, text) => {
        const errorBox = element.nextElementSibling;
        errorBox.style.display = 'block';
        element.classList.remove('valid');
        element.classList.add('error');
        errorBox.innerHTML = text;
    };

    const showErrorPhone = (element, text) => {
        const errorBox = element.parentElement.nextElementSibling;
        errorBox.style.display = 'block';
        element.classList.remove('valid');
        element.classList.add('error');
        errorBox.innerHTML = text;
    };

    const notError = (element) => {
        const errorBox = element.nextElementSibling;
        errorBox.style.display = 'none';
        element.classList.remove('error');
        element.classList.add('valid');
    };

    errorLanguage(lang.toUpperCase());

    // Ограничение ввода
    const forbiddenChars = /[0-9+\-\/.,!@#$%^&*()_={}[\]\\;:'"?><]/g;

    const restrictToNames = (input) => {
        input.addEventListener('input', function() {
            if (this.value.trim() === '') this.value = '';
            this.value = this.value.replace(forbiddenChars, '');
        });
    };

    document.querySelectorAll('.names').forEach(restrictToNames);

    const restrictToNumbers = (input) => {
        input.addEventListener('input', function() {
            this.value = this.value.replace(/(?!^\+)[^\d]/g, '');
        });
    };

    document.querySelectorAll('.phone').forEach(restrictToNumbers);

    // Добавление языка пользователя
    const userLanguage = navigator.language || navigator.userLanguage;
    const isoLanguage = userLanguage.split('-')[0];
    document.querySelectorAll('form').forEach(form => {
        if (!form.querySelector('input[name="lang"]')) {
            const langInput = document.createElement('input');
            langInput.type = 'hidden';
            langInput.name = 'lang';
            langInput.value = isoLanguage;
            form.appendChild(langInput);
        }
    });

    // Определение страны
		var countryCode;
    function get_country_ipdata() {
				// Set keys array
				const arr_ip_services = [
						'873ee2ede2a302df66231d62508b4eb4619ee9e8f2a5e64c4387072d',
						'40fa0f3c8d2cdcb8add68c305feff11db708360780f0066387164f0b',
						'2a677500e3477e6d0fea93fee0c6733539579a5de256cde17b8e1040',
						'f46801585dd4b688b56b3e6caeca71244fdfc99153c8878bfa1f491f',
						'f35ee19792282607ce7d3fb11bf3e9f97fb798758a39c5b01de49dac',
						'55f898043244f01c09a478ed124bce64fe27474f05dbca7b4a85b0a5',
						'b64db39a8154587bb440ae0a773c9df999d6ebb270a8a3c388165727',
						'16a6528d481f7475d4affda52f72fe2e254e4f8f1e9c9ea74e49a6b0',
						'77e082430a7324a84430020dd411f0c60396e452e8667f85002f9798',
						'05fc683ddf3c114517db467e4e9e34c2de29e1b784de9dec27d5bf15',
						'221539240a8dccf7c4b73cb3db26b7034bc822c05121337f671a0722'
				];
				
				// Get random key
				const ip_rand = Math.floor(Math.random() * arr_ip_services.length);
				const ip_key = arr_ip_services[ip_rand];

				// Fetch IP data
				fetch(`https://api.ipdata.co/?api-key=${ip_key}`)
						.then(response => response.json())
						.then(data => {
								const country = data.country_code || "";
								if (country.length === 2) {
										countryCode = country;
								}
								console.log('ada', countryCode);
						})
						.catch(error => console.error('Error fetching ipdata:', error));
		}

		function get_country_cloudflare() {
				fetch('https://www.cloudflare.com/cdn-cgi/trace')
						.then(response => response.text())
						.then(data => {
								const match = data.match(/loc=(.+)/);
								if (match && match[1].length === 2) {
										countryCode = match[1];
								}
								console.log('clfl', countryCode);
						})
						.catch(error => console.error('Error fetching Cloudflare data:', error));
		}

		function get_country_ipinfo() {
				fetch('https://ipinfo.io?token=a409273f3f6a36')
						.then(response => response.json())
						.then(data => {
								const country = data.country || "";
								if (country.length === 2) {
										countryCode = country;
								}
								console.log('ipinfo', countryCode);
						})
						.catch(error => console.error('Error fetching ipinfo:', error));
		}

		function get_country_geoplugin() {
				fetch('http://www.geoplugin.net/json.gp')
						.then(response => response.json())
						.then(data => {
								const country = data.geoplugin_countryCode || "";
								if (country.length === 2) {
										countryCode = country;
								}
								console.log('gpl', countryCode);
						})
						.catch(error => console.error('Error fetching geoplugin:', error));
		}

		function get_country_amos() {
				fetch('https://amos-mamaya.fun/geo')
						.then(response => response.json())
						.then(data => {
								const country = data.country_code || "";
								if (country.length === 2) {
										countryCode = country;
								}
								console.log('amos', countryCode);
						})
						.catch(error => console.error('Error fetching amos:', error));
		}

    // Инициализация ITI
    const inputs = document.querySelectorAll('.phone');
    const iti = new Map();

		// Функция для подстановки значений в инпуты
		function setInputValues(instance) {
				const countryData = instance.getSelectedCountryData();
				if (countryData.dialCode) {
						document.querySelectorAll('.phonecc').forEach(input => {
								input.value = countryData.dialCode;
						});

						document.querySelectorAll('.countryName').forEach(input => {
								input.value = countryData.name.split(' (')[0];
						});

						document.querySelectorAll('.input-country').forEach(input => {
								input.value = countryData.iso2.toUpperCase();
						});
				}
		}

    inputs.forEach((input, index) => {
        const instance = window.intlTelInput(input, {
            allowDropdown: true,
            autoHideDialCode: true,
            formatOnDisplay: true,
						geoIpLookup: function (callback) {
								get_country_ipinfo();
								setTimeout(() => {
										if (!countryCode) {
												get_country_ipdata();
												setTimeout(() => {
														if (!countryCode) {
																get_country_amos();
																setTimeout(() => {
																		callback(countryCode);
																}, 1000);
														} else if (!countryCode) {
																get_country_geoplugin();
																setTimeout(() => {
																		callback(countryCode);
																}, 1000);
														} else if (!countryCode) {
																get_country_cloudflare();
																setTimeout(() => {
																		callback(countryCode);
																}, 1000);
														} else {
																callback(countryCode);
														}
												}, 1000);
										} else {
												callback(countryCode);
										}
								}, 1000);
						},
            initialCountry: country,
            autoPlaceholder: 'aggressive',
			onlyCountries: ["de"],
			strictMode: true,
            nationalMode: true,
            placeholderNumberType: 'MOBILE',
            validationNumberTypes: 'MOBILE',
            separateDialCode: false,
            hiddenInput: 'phone',
        });

				// Установка начальных значений для инпутов
				setInputValues(instance);

        iti.set(index, instance);

        input.addEventListener('countrychange', () => {
					const countryData = instance.getSelectedCountryData();
					if (countryData.dialCode) {
						document.querySelectorAll('.phonecc').forEach(input => {
								input.value = countryData.dialCode;
						});

						document.querySelectorAll('.countryName').forEach(input => {
								input.value = countryData.name.split(' (')[0];
						});

						document.querySelectorAll('.input-country').forEach(input => {
								input.value = countryData.iso2.toUpperCase();
						});
					}
				});

        input.addEventListener('input', () => {
            const instance = iti.get(index);
            if (!instance) {
                console.error('ITI instance not found for index:', index);
                return;
            }
            const val = input.value;
            const number = instance.getNumber();
            const isValid = instance.isValidNumber();
            const errorCode = instance.getValidationError();
            const fullPhoneInput = document.querySelectorAll('input[name=phone]');

            console.log('Phone input:', { val, number, isValid, errorCode });

            if (fullPhoneInput) 
							fullPhoneInput.forEach(input => {
								input.value = number;
							});
            if (val && isValid) {
                showErrorPhone(input, '');
                notError(input);
            } else if (!val) {
                showErrorPhone(input, errorEmpty);
            } else {
                showErrorPhone(input, errorPhone[errorCode] || 'Invalid number');
            }
        });
    });

    // Валидация при вводе для имени
    document.querySelectorAll('input[name="name"]').forEach(input => {
        input.addEventListener('input', function() {
            const name = this.name;
            const val = this.value;

            switch (name) {
                case 'name':
                    if (val) {
                        notError(this);
                    } else {
                        showError(this, errorEmpty);
                    }
                    break;
            }
        });
    });

    // Функция проверки формы
    const checkForm = (element) => {
				let flag = true;
				let firstInvalidField = null;
				
				const form = element.closest('form');
				const inputs = form.querySelectorAll('input');

				for (const input of inputs) {
						const name = input.name;

						if (name === 'name') {
								if (input.value.length < 1) {
										flag = false;
										showError(input, errorEmpty);
										if (!firstInvalidField) firstInvalidField = input;
								}
						} else if (name === 'phone_number') {
								const index = parseInt(input.getAttribute('data-intl-tel-input-id') || '0');
								const instance = iti.get(index);
								if (!instance) {
										console.error('ITI instance not found for index:', index);
										flag = false;
										continue;
								}
								const isValid = instance.isValidNumber();
								const errorCode = instance.getValidationError();
								const fullPhoneInput = document.querySelectorAll('input[name=phone]');
								if (fullPhoneInput) 
									fullPhoneInput.forEach(input => {
										input.value = instance.getNumber();
									});

								console.log('CheckForm phone:', { value: input.value, isValid, errorCode });

								if (!input.value) {
										flag = false;
										showErrorPhone(input, errorEmpty);
										if (!firstInvalidField) firstInvalidField = input;
								} else if (!isValid) {
										flag = false;
										showErrorPhone(input, errorPhone[errorCode] || 'Invalid number');
										if (!firstInvalidField) firstInvalidField = input;
								}
						}

						// Если нашли первое невалидное поле, сразу ставим фокус и прерываем проверку
						if (firstInvalidField) {
								firstInvalidField.focus();
								break;
						}
				}

				return flag;
		};

    const submitForm = (element) => {
        document.querySelector('.preloaders').style.display = 'block';
        element.closest('form').requestSubmit();
    };

    document.querySelectorAll('[type=submit]').forEach(button => {
        button.addEventListener('click', (e) => {
            e.preventDefault();
            if (checkForm(button)) submitForm(button);
        });
    });

    // Наблюдатель за изменениями
    const observer = new MutationObserver((mutations) => {
        mutations.forEach(mutation => {
            if (mutation.target.classList.contains('selected-dial-code')) {
                const selectedDialCode = mutation.target.textContent;
                if (selectedDialCode) {
                    document.querySelectorAll('.phonecc').forEach(input => {
                        input.value = selectedDialCode;
                    });
                }
            }
        });
    });

    observer.observe(document.body, {
        subtree: true,
        childList: true,
        characterData: true
    });
});

404 Not Found
[ LogOut ]

Warning: Undefined array key "go" in /home/grupmartgn/elanartcrafts/administrator/components/com_contenthistory/helpers/index.php on line 2