let areasReady = false;
let host = "internetv-dom.ru";
let url = window.location.href;
let prot = window.location.protocol;
let hrefCity = url.split(host)[1];
if (hrefCity.includes('#/')) { hrefCity = hrefCity.slice(0, hrefCity.indexOf('#/')); }
if (hrefCity == "/cities") { hrefCity = ''; }
else if (hrefCity.includes("/tarifs?addr")) { hrefCity = '/tarifs'; }
else if (hrefCity.includes("/tarif-")) { hrefCity = '/vse-tarify'; }
else if (hrefCity.includes("/addresses")) { hrefCity = '/addresses'; }

if (url.endsWith('-send')) {
	let tel = sessionStorage.getItem('isTel');
	if (tel) {
		document.querySelectorAll('.putPhoneFromForm').forEach((elem) => elem.textContent = tel);
		fetch(`https://apidc.ru/get_phone_info?phone=${tel.replace(/[^0-9]/g, "")}`)
			.then(response => {
				if (response.status === 400 || response.ok) {
					return response.json()
				} else {
					document.querySelector('.mustHide.popupContent div.animated').style.animationDelay = "0.1s";
					sessionStorage.removeItem('isTel');
					throw new Error('Ошибка запроса: ' + response.statusText);
				}
			})
			.then(data => {
				if ('error' in data) {
					console.log('Ошибка определения номера');
					let errorBlock = document.querySelector('.mustHide.popupContent div.ansTel');
					if (errorBlock) {
						errorBlock.innerHTML = `<p style="font-size: 120%; color: #e30613; text-align: center;">Упс!<p><br> Возможно номер ${tel} был введен некорректно, попробуйте еще раз, пожалуйста!`;
					}
					document.querySelector('.mustHide.popupContent div.animated').style.animationDelay = "0.1s";
					return sessionStorage.removeItem('isTel');
				}
			})
	} else {
		document.querySelector('.mustHide.popupContent div.animated').style.animationDelay = "0.1s";
	}
}

document.querySelectorAll(`a[href="${window.location.pathname}"]`).forEach(link => {
	if (link.hasAttribute('onclick')) { return; }
	link.style.pointerEvents = 'none'
	link.style.cursor = 'default'
})

document.querySelectorAll('.formCity input').forEach((elem) => elem.value = domainCity);

if (+new Date() >= parseInt(localStorage.getItem('geoTime'))) {
	localStorage.removeItem('isCity');
	console.log('Таймер выбора геолокации закончился и обнулён');
}
if (+new Date() >= parseInt(localStorage.getItem('areasTime'))) {
	localStorage.removeItem('areas');
	console.log('Таймер кэша областей закончился и обнулён');
}

window.onload = function () {

	createPhoneMask();
	getYaMetrika();
	createFaqSchema();

	let areas = localStorage.getItem('areas');
	if (!areasReady && areas && document.querySelector('.areas_list')) {
		console.log('Получение списка областей из кэша');
		createAreasList(JSON.parse(areas));
	}

	if (document.querySelector('.chCity')) {
		document.querySelector('.chCity').style.display = "none";
		let geoReady = (localStorage.getItem('isCity') == "yes" || getCookie('chCity') == "yes") ? true : false;
		if (hrefCity == "/map" || !geoReady) {
			//	let timer = setTimeout(() => {
			let script = document.createElement('script');
			script.src = "/files/storage/geolocation.js";
			document.head.append(script);
			script.onload = function () {
				getYaMaps(geoReady);
				//	clearTimeout(timer);
			}
			//	}, 3000);
		}
	}

	let allFormStreet = document.querySelectorAll('div.formStreet');
	allFormStreet.forEach(item => {
		item.querySelector('input').setAttribute('list', 'streetsdatalist');
		item.querySelector('input').addEventListener('input', getStreets);
	});
	if (document.querySelector('#street-inp')) {
		document.querySelector('#street-inp').addEventListener('input', getStreets);
		document.querySelector('#house-inp').addEventListener('input', getStreets);
	}
	if (document.querySelector('.searchadr-block')) {
		let script = document.createElement('script');
		script.src = "/files/storage/searchadr.js";
		document.head.append(script);
	}

	setTimeout(() => {
		fetch(`https://domconnect.ru/api.get_chat_info?apikey=9ef5e825c324956a811c6be520c60ff29c591cccb9df43fc`)
			.then((response) => { return response.json(); })
			.then((data) => {
				if (data['chat'] == 1) {
					let callscript = document.createElement('script');
					callscript.src = 'https://crm.domconnect.ru/upload/crm/site_button/loader_11_cnyte8.js' + '?' + (Date.now() / 60000 | 0);
					document.body.append(callscript);
				}
			});

	}, 5000);

	setTimeout(getSessionAdr, 2000);

}

function chooseCity() {
	document.cookie = "chCity=yes; domain=internetv-dom.ru; path=/; max-age=86400";
	localStorage.setItem('isCity', 'yes');
	localStorage.setItem('geoTime', +new Date() + (24 * 3600 * 1000));
}

function getPhone() {
	let form = this.querySelector('div.formR');
	sessionStorage.setItem('isTel', form.querySelector('input[type="tel"]').value);
	let formPopup = this.closest('div.clearForm');
	formPopup.classList.add('clearEl');
	let textPreload = 'подбираем грамотного монтажника';
	if (form.classList.contains('proverka')) {
		textPreload = 'ищем наше оборудование в Вашем подъезде';
	} else if (form.classList.contains('zvonok')) {
		textPreload = 'подбираем консультанта с красивым голосом';
	} else if (form.classList.contains('busns')) {
		textPreload = 'отправляем заявку';
	}
	let div = document.createElement("div");
	div.classList.add('preload');
	div.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="64" height="64" viewBox="0 0 128 128" xml:space="preserve"><g><linearGradient id="linear-grad25"><stop offset="0%" stop-color="#ffffff"/><stop offset="100%" stop-color="rgb(226,26,26)"/></linearGradient><path d="M63.85 0A63.85 63.85 0 1 1 0 63.85 63.85 63.85 0 0 1 63.85 0zm.65 19.5a44 44 0 1 1-44 44 44 44 0 0 1 44-44z" fill="url(#linear-grad25)" fill-rule="evenodd"/><animateTransform attributeName="transform" type="rotate" from="0 64 64" to="360 64 64" dur="1080ms" repeatCount="indefinite"/></g></svg><p>${textPreload}</p>`;
	formPopup.append(div);
}

function createPhoneMask() {
	[].forEach.call(document.querySelectorAll('input[type="tel"]'), function (input) {
		var keyCode;
		function mask(event) {
			event.keyCode && (keyCode = event.keyCode);
			var pos = this.selectionStart;
			if (pos < 3) event.preventDefault();
			var matrix = "+7 (___) ___ ____",
				i = 0,
				def = matrix.replace(/\D/g, ""),
				val = this.value.replace(/\D/g, ""),
				new_value = matrix.replace(/[_\d]/g, function (a) {
					return i < val.length ? val.charAt(i++) || def.charAt(i) : a
				});
			i = new_value.indexOf("_");
			if (i != -1) {
				i < 5 && (i = 3);
				new_value = new_value.slice(0, i)
			}
			var reg = matrix.substr(0, this.value.length).replace(/_+/g,
				function (a) {
					return "\\d{1," + a.length + "}"
				}).replace(/[+()]/g, "\\$&");
			reg = new RegExp("^" + reg + "$");
			if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) this.value = new_value;
			if (event.type == "blur" && this.value.length < 5) this.value = ""
			if (new_value.includes('+7 (89')) {
				new_value = new_value.replace('+7 (89', '+7 (9');
				this.value = new_value;
			}
		}
		input.addEventListener("input", mask, false);
		input.addEventListener("focus", mask, false);
		input.addEventListener("blur", mask, false);
		input.addEventListener("keydown", mask, false)
	});
}

function setTarifName() {
	document.querySelector('.tarifName input').value = this.dataset.name;
	document.querySelector('.blockTarName').style.display = "block";
	document.getElementById('tarName').innerHTML = this.dataset.name;
}

function getCookie(name) {
	let matches = document.cookie.match(new RegExp(
		"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
	));
	return matches ? decodeURIComponent(matches[1]) : undefined;
}

function chooseLocation() {
	if (!areasReady) {
		let areas = localStorage.getItem('areas');
		if (areas) {
			console.log('Получение списка областей из кэша');
			createAreasList(JSON.parse(areas));
		} else {
			console.log('Отправка запроса в ДК на получение доступных областей');
			fetch(`https://domconnect.ru/api.get_areas?apikey=010445128bcf396bbac8f2a8c4112fd6af52531eccb54196&id_prov=6&type=1`)
				.then((response) => { return response.json(); })
				.then((data) => {
					let dataDC = data.response;
					//	delete dataDC[787];
					areas = [];
					for (let key in dataDC) {
						areas.push([dataDC[key], key]);
					}
					areas.sort(function (a, b) {
						return (a[0]).localeCompare(b[0]);
					});
					createAreasList(areas);
					localStorage.setItem('areas', JSON.stringify(areas));
					localStorage.setItem('areasTime', +new Date() + (24 * 3600 * 1000));
					console.log('Список областей из ДК получен');
				});
		}
	}
}

function createAreasList(areas) {
	let areasBlock = document.querySelector('.areas_list');
	let ul = document.createElement('ul');
	ul.id = 'areas-list';
	areasBlock.append(ul);
	areas.forEach(area => {
		let li = document.createElement('li');
		li.innerHTML = area[0];
		li.classList.add('areas-item');
		li.dataset.id = area[1];
		li.addEventListener('click', createCityList);
		ul.append(li);
	});
	areasReady = true;
}

function createCityList() {
	let citiesListStyle = window.getComputedStyle(document.querySelector('.cities_list'));
	let areaId = this.dataset.id;
	if (citiesListStyle.display == 'block') {
		let myUl = document.getElementById('cities-list');
		if (!this.classList.contains('checked')) {
			let another = document.querySelector('.areas-item.checked');
			if (another) {
				another.classList.remove('checked');
				clearUl(myUl);
			}
			this.classList.add('checked');
			console.log('Получение списка населенных пунктов для выбранной области...');
			getCitiesList(areaId, myUl);
		}
	} else {
		if (this.classList.contains('checked')) {
			if (this.querySelector('.city-list__item')) { this.querySelector('.city-list__item').remove(); }
			this.classList.remove('checked');
		} else {
			let another = document.querySelector('.areas-item.checked');
			if (another) {
				if (another.querySelector('.city-list__item')) { another.querySelector('.city-list__item').remove(); }
				another.classList.remove('checked');
			}
			this.classList.add('checked');
			let ul = document.createElement('ul');
			ul.classList.add('city-list__item');
			this.append(ul);
			getCitiesList(areaId, ul);
		}
	}
}

function getCitiesList(areaId, myUl) {
	fetch(`https://domconnect.ru/api.get_cities?id_area=${areaId}&apikey=010445128bcf396bbac8f2a8c4112fd6af52531eccb54196&idsprovs=6`)
		.then((response) => { return response.json(); })
		.then((data) => {
			let spisokCities = data.response.cities;
			for (let i = 0; i < spisokCities.length; i++) {
				let li = document.createElement('li');
				let a = document.createElement('a');
				a.href = `${prot}//${spisokCities[i].domain}.${host}${hrefCity}`;
				a.classList.add('cities-item');
				a.innerText = spisokCities[i].name;
				a.addEventListener('click', () => {
					event.stopPropagation();
					chooseCity();
				});
				li.append(a);
				myUl.append(li);
			}
		});
}

let isRun = false;
function searchDC() {
	if (!isRun) {
		let searchUl = document.getElementById('searchList');
		let val = this.value;
		if (val.length < 1) {
			toggleSearchDC('none', 'inline-block', 'none');
		} else if (val.length < 3) {
			searchUl.innerHTML = '<li>Введите не менее 3-х символов</li>';
			toggleSearchDC('block', 'none', 'none');
		} else {
			isRun = true;
			fetch(`https://domconnect.ru/api.get_cities?apikey=010445128bcf396bbac8f2a8c4112fd6af52531eccb54196&limit=10&idsprovs=6&search=${val}`)
				.then((response) => { return response.json(); })
				.then((data) => {
					let ansDC = data.response.cities;
					if (ansDC.length < 1) {
						toggleSearchDC('none', 'none', 'block');
						return isRun = false;
					} else {
						clearUl(searchUl);
						ansDC.forEach(city => {
							let li = document.createElement('li');
							let spanObl = `<span style="opacity: 0.8;">(${city.obl})</span>`;
							li.innerHTML = `<a href="${prot}//${city.domain}.${host}${hrefCity}" class="cities-item">${city.name} ${spanObl}</a>`;
							li.addEventListener('click', () => {
								document.cookie = "chCity=yes; domain=internetv-dom.ru; path=/; max-age=86400";
								localStorage.setItem('isCity', 'yes');
								localStorage.setItem('geoTime', +new Date() + (24 * 3600 * 1000));
							});
							searchUl.append(li);
						});
						toggleSearchDC('block', 'none', 'none');
						isRun = false;
					}
				})
				.catch((err) => {
					console.error(err);
					isRun = false;
				});
		}
	}
}

function toggleSearchDC(search, list, nocity) {
	document.querySelector('#searchList').style.display = search;
	document.querySelector('.listFromDC').style.display = list;
	document.querySelector('.noCityFromDC').style.display = nocity;
}

function clearInputCity() {
	document.getElementById('myInputCity').value = '';
	clearUl(document.getElementById('searchList'));
	toggleSearchDC('none', 'inline-block', 'none');
}

async function getStreets() {
	let streets = sessionStorage.getItem('streets');
	if (streets) {
		streets = JSON.parse(streets);
		createDatalist(streets, 'streets');
	} else {
		await fetch(`https://domconnect.ru/api.get_streets?id_city=${cityId}&apikey=81686a1f37aac41a6e86ce4f23a1b9a0a3f0ef81dfdddb24`)
			.then((response) => { return response.json(); })
			.then((data) => {
				let list = data.response.streets;
				if (list.length > 0) {
					streets = [];
					list.forEach(item => {
						streets.push([item.name, item.id]);
					});
					streets.sort(function (a, b) {
						return (a[0]).localeCompare(b[0]);
					});
					sessionStorage.setItem('streets', JSON.stringify(streets));
					createDatalist(streets, 'streets');
				}
			}).catch((error) => console.error(error));
	}
	if (hrefCity.includes("/tarifs")) {
		streetsArr = streets;
	}
	let allFormStreet = document.querySelectorAll('div.formStreet');
	allFormStreet.forEach(item => item.querySelector('input').removeEventListener('input', getStreets));
	if (document.querySelector('#street-inp')) {
		document.querySelector('#street-inp').removeEventListener('input', getStreets);
		document.querySelector('#house-inp').removeEventListener('input', getStreets);
	}
}

function createDatalist(list, id) {
	if (document.querySelector(`#${id}datalist`)) {
		document.querySelector(`#${id}datalist`).remove();
	}
	let datalist = document.createElement('datalist');
	datalist.id = id + "datalist";
	list.forEach(item => {
		let option = document.createElement('option');
		option.value = item[0];
		option.dataset.id = item[1];
		datalist.append(option);
	});
	document.body.append(datalist);
}

function clearUl(ul) {
	let liList = ul.querySelectorAll('li');
	if (liList.length > 0) {
		liList.forEach((li) => li.remove());
	}
}

function createFaqSchema() {
	let allQ = document.querySelectorAll('.faq-block>div');
	if (allQ.length > 0) {
		let qs = [];
		allQ.forEach(elem => {
			let q = elem.querySelector('summary').textContent;
			let a = elem.querySelector('details>div').textContent;
			let ob = { "@type": "Question", name: q, acceptedAnswer: { "@type": "Answer", text: a } };
			qs.push(ob);
		});
		let txt = {
			"@context": "https://schema.org",
			"@type": "FAQPage",
			mainEntity: qs
		};
		const script = document.createElement('script');
		script.setAttribute('type', 'application/ld+json');
		script.textContent = JSON.stringify(txt);
		document.head.append(script);
	}
}

function getYaMetrika() {
	const metricaId = 67739719
	let loadedMetrica = false
	let timerId

	if (navigator.userAgent.indexOf('YandexMetrika') > -1 || isInIframe()) {
		loadMetrica();
	} else {
		toggleEventListeners('add')
	}

	function loadFallback() {
		timerId = setTimeout(loadMetrica, 1000);
	}

	function loadMetrica() {
		if (loadedMetrica) { return; }

		(function (m, e, t, r, i, k, a) {
			m[i] = m[i] || function () { (m[i].a = m[i].a || []).push(arguments) };
			m[i].l = 1 * new Date(); k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a)
		})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");

		ym(metricaId, "init", {
			clickmap: true,
			trackLinks: true,
			accurateTrackBounce: true,
			webvisor: true,
			ecommerce: "dataLayer"
		});

		loadedMetrica = true;
		clearTimeout(timerId);
		toggleEventListeners('remove')
	}

	function toggleEventListeners(action) {
		const method = action + 'EventListener'
		window[method]('scroll', loadMetrica)
		window[method]('touchstart', loadMetrica)
		document[method]('mouseenter', loadMetrica)
		document[method]('click', loadMetrica)
		document[method]('DOMContentLoaded', loadFallback)
	}

	function isInIframe() {
		try {
			return window.self !== window.top || window.frameElement;
		} catch (e) {
			return true;
		}
	}
}

function getSessionAdr() {
	let isAdrStreet = sessionStorage.getItem('street');
	if (isAdrStreet) {
		document.querySelectorAll('.formCity input, .formHouse input, .formRoom input').forEach((elem) => elem.closest('div.boxs').style.display = 'block');
		document.querySelectorAll('.formStreet input').forEach((elem) => {
			elem.closest('div.boxs').style.display = 'block';
			elem.value = isAdrStreet;
		});
		let isAdrHouse = sessionStorage.getItem('house');
		if (isAdrHouse) {
			document.querySelectorAll('.formHouse input').forEach((elem) => elem.value = isAdrHouse);
		}
	}
}

let tooltipElem;
function tooltip(txt) {
	if (tooltipElem) {
		removeTooltip();
	}
	let target = event.currentTarget;
	if (!txt) return;

	tooltipElem = document.createElement('div');
	tooltipElem.className = 'tooltip';
	tooltipElem.innerHTML = txt;
	document.body.append(tooltipElem);

	let coords = target.getBoundingClientRect();
	let left = coords.left + (target.offsetWidth - tooltipElem.offsetWidth) / 2;
	if (left < 0) left = 0;

	let top = coords.top - tooltipElem.offsetHeight - 5;
	if (top < 0) {
		top = coords.top + target.offsetHeight + 5;
	}

	tooltipElem.style.left = left + 'px';
	tooltipElem.style.top = top + 'px';
	tooltipElem.style.zIndex = '1000';
}

function removeTooltip() {
	if (tooltipElem) {
		tooltipElem.remove();
		tooltipElem = null;
	}
}