/* ===== 'scripts.js' ===== */

// The document is loaded -->
onload = function(){
	MoreProd();	// Показываем/скрываем блок с подраздеоами продукции -->
	ProdSearchInit();	// "Аяксовый" поиск по товарам -->
	ProdAddInit();	// "Аякс" добавление товара в корзину -->
	ChangeFormValue();	// Изменение содержимого полей в формах -->
	SubmitForm();	// Отправка форм -->
	ClearForm();	// Очистка форм -->
}
// -->






// Show/hide the block on event -->
function MoreProd(){
	var obj = document.getElementById('ProdMore');	// Элемент, по которому кликнули -->
	var cat = document.getElementById('ProdCat');	// Блок, который нужно показать -->
	
	if (obj && cat) {	// Если оба элемента существуют -->
		var el = obj.parentNode.parentNode.parentNode;	// Находим родительский 'li' -->
		var def = el.className;	// Класс по-умолчанию -->
		
		obj.onclick = function(){	// Щелчок по элементу -->
			if (this.className == 'more') {	// Сравниваем классы -->
				SelectBug('hide');	// Исправление бага в ie. Скрываем все 'select'-ы на странице (т.к. их невозможно ничем перекрыть) -->
				this.className = 'click';	// Смена класса -->
				el.className = 'active item click';	// Смена класса -->
				cat.className = 'catalogue';	// Смена класса -->
			}
			else if (this.className == 'click') {	// Сравниваем классы -->
				this.className = 'more';	// Смена класса -->
				el.className = def;	// Смена класса -->
				cat.className = cat.className+' hide';	// Смена класса -->
				SelectBug('show');	// Исправление бага в ie. Возвращаем на место все 'select'-ы на странице-->
			}
			else {	// Несуществующий класс -->
				// -->
			}	
			return false;
		}
	}
}
// -->


// Исправление бага в ie. Скрываем все 'select'-ы на странице (т.к. их невозможно ничем перекрыть) -->
function SelectBug(method) {
	
	/*
	method	// Метод отображения ("hide"/"show") -->
	*/
	
	var array = document.getElementsByTagName('select');
	for (var i=0; i<array.length; i++) {
		var el = array[i];
		if (method == 'hide') {	// Если скрываем 'select'-ы -->
			el.className = el.className+' invisible';	// Скрываем 'select'-ы, присваивая им новый 'class' -->
		}
		else if (method == 'show') {	// Если показываем 'select'-ы -->
			el.className = el.className.slice(0,-10);	// Возвращаем оригинальные названия классов -->
		}
	}
}
// -->


// "Аяксовый" поиск по товарам -->
function ProdSearchInit(){
	var obj = document.getElementById('SearchField');
	if (obj) {
		var url = obj.form.action;
		var param = '?cmd=process&tpl=1&search_text=';
		var value;
		
		setInterval(function(){
			value = this.value;
			AjaxRequest('GET', url+param+value, null, false, ProdSearchResult);
		}, 500);
		
	}
}
// -->


// "Аякс" добавление товара в корзину ('callback'-функция) -->
function ProdSearchResult(obj, data) {
	var obj = document.getElementById('SearchResult');
	obj.className = 'result';
	obj.innerHTML = data;
}
// -->


// "Аякс" добавление товара в корзину (находим "нужные" ссылки и расставляем события) -->
function ProdAddInit(){
	var array = document.getElementsByTagName('a');
	for (var i=0; i<array.length; i++) {
		var el = array[i];
		if (el.id.slice(0, 12) == 'ProdAddItem_') {	// Нужная нам ссылка 'ProdAddLink_...' -->
			el.onclick = function(){
				
				var loader = document.createElement('i');
				loader.innerHTML = '<img src="/kscms/img/public/ajax_loader.gif" width="16" height="16" alt="Загрузка..." title="Загрузка..." />';
				this.parentNode.appendChild(loader);
				
				AjaxRequest('GET', this.href, null, loader, ProdAddResult);
				
				this.parentNode.removeChild(this);
				return false;
			}
		}
	}
}
// -->


// "Аякс" запрос (методами 'get/post') -->
function AjaxRequest(method, url, data, obj, callback) {
	
	/*
	method		// Метод запроса ('get'/'post') -->
	url			// Адрес, на который отправляются данные -->
	data		// Заранее сформированные данные (для 'post'-запроса синтаксис следующий: 'name1=value1&name2=value2&...', для 'get'-запроса ставим null) -->
	obj			// Объект для работы -->
	callback	// Функция, которая будет обрабатывать результат -->
	*/
	
	var request;	// Создаём объект для запроса к серверу -->
	
	if (window.XMLHttpRequest) {	// Для нормальных броузеров  -->
		request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) {	// Для ie -->
		request = new ActiveXObject('Microsoft.XMLHTTP');
	}
	else{
		alert('Ошибка! Объект "XMLHttpRequest" не поддерживается...');
	}
	
	request.open(method, url, true);	// Создаём асинхронный запрос ('get'/'post') для заданного 'url'-адреса -->
	
	request.onreadystatechange = function(){	// 'onreadystatechange' активируется при получении ответа сервера
		
		if (request.readyState == 4) {	// Приём запроса завершился -->
			if (request.status == 200) {	// Если запрос увенчался успехом (200 = "OK") -->
				
				// request.getResponseHeader('Content-Type'); Узнаём тип заголовка -->
				// request.getAllResponseHeaders(); Узнаём все 'http'-заголовки -->
				// request.responseText -->
				// request.responseXML -->
				
				callback(obj, request.responseText);
				
			}
			else{
				alert('Ошибка! Запрос не увенчался успехом: '+request.status+' - '+request.statusText);
			}
		}
	}
	
	request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');	// Обязателен заголовок 'Content-Type', содержащий кодировку (вдруг она не указана a форме?). Ставим по-умолчанию -->
	request.send(data);	// Передаём запрос -->
	
}
// -->


// "Аякс" добавление товара в корзину ('callback'-функция) -->
function ProdAddResult(obj, data) {
	
	/*
	obj		// Объект для работы -->
	data	// Данные, полученные от сервера -->
	*/
	
	var answer = JSON.parse(data);	// Распарсим данные (формата 'json') с помощью специальной библиотеки "json2.js" -->
	
	var error = answer.js.cmd_errors;	// Ошибка-->
	var message = answer.js.cmd_messages;	// Сообщение -->
	var count = answer.js.cart_count;	// Кол-во товаров в корзине -->
	
	var result;	// Сюда запишем конечный результат -->
	
	if (error) {	// Если ответ сервера отрицательный... -->
		result = error;
	}
	else if (message) {	// ...иначе -->
		result = message;
	}
	
	obj.innerHTML = result;	// Выводим на экран -->
		
	document.getElementById('CartCount').innerHTML = '('+count+')'; // ...и счётчик -->
	
}
// -->


// Change contained in "value" -->
function ChangeFormValue(){
	var form = ['Search','FilterForm'];	// Массив конкретных форм -->
	for (var i=0; i<form.length; i++) {	// Пробегаем по массиву с id -->
		var obj = document.getElementById(form[i]);	// Конкретный id -->
		
		if (obj) {	// Если элемент существует -->
			
			var array = obj.elements;	// Массив всех элементов конкретной формы -->
			for (var j=0; j<array.length; j++) {	// Пробегаем по всем элементам -->
				var el = array[j];	// Конкретный элемент -->
				if (el.name == 'status') {
					check = el.value;
					break;
				}
			}
			
			if (check != 1) {	// Флаг, показывающий, были ли отправлена форма -->
				
				for (var j=0; j<array.length; j++) {	// Пробегаем по всем элементам -->	
					var el = array[j];	// Конкретный элемент -->
					if (el.type == 'text' || el.tagName.toLowerCase() == 'textarea') {	// Только "input type='text'" или "textarea" (т.е. те поля, в которые можно водить текст) -->
						el.onfocus = function(){	// Элемент получает "фокус" -->
							if (this.value == this.defaultValue) {	// Если 'value' дефолтное -->
								this.className = 'curr';
								this.value = '';	// Очищаем перед вводом поле -->							
							}
						}
						el.onblur = function(){	// Элемент теряет "фокус" -->
							if (this.value == '') {	// Если ничего не ввели -->
								this.className = '';
								this.value = this.defaultValue;	// Возвращаем значение по-умолчанию -->
							}
						}
					}
				}
				
			}
			
			obj.onsubmit = function(){	// Перед отправкой формы - проверяем её -->
				return ResultValue(this.elements);	// Передаём a форму массив элементов -->
			}
			
		}
	}
}
// -->


// Check result -->
function ResultValue(array) {
	for (var i=0; i<array.length; i++) {	// Пробегаем по всем элементам -->
		var el = array[i];	// Конкретный элемент -->
		if (el.type == 'text' || el.tagName.toLowerCase() == 'textarea') {	// Только "input type='text'" или "textarea" (т.е. те поля, в которые можно водить текст) -->
			if (el.value == el.defaultValue) {	// Если 'value' дефолтное -->
				el.value = '';	// Очищаем его -->
			}
		}
	}
	
	return true; // Возвращаем "false" если форма не прошла валидацию, "true" - если всё устраивает -->
}
// -->


// Form submit() -->
function SubmitForm() {
	var array = [/*'SearchSubmit',*/'ContactsFormSubmit','CartFormSubmit','OrderFormSubmit','FilterFormSubmit','CompareFormSubmit','SpecSearchFormSubmit'];	// Массив ссылок для отправки форм -->
	
	for (var i=0; i<array.length; i++) {	// Пробегаем по массиву с id -->
		var obj = document.getElementById(array[i]);	// Конкретная ссылка -->
		
		if (obj) {	// Если элемент существует -->
			obj.onclick = function(){	// На клик отправляем форму -->
				var name = this.id.slice(0,-6);	// Получаем id формы -->
				var form = document.getElementById(name);	// Ссылка на форму -->
				form.submit();	// Отправляем форму -->
				return false;	// Запрещаем переход по ссылке -->
			}
		}
		
	}
	
}
// -->


// Form clear() -->
function ClearForm() {
	var array = ['FilterFormClear','CompareFormClear'];	// Массив ссылок для очистки форм -->
	
	for (var i=0; i<array.length; i++) {	// Пробегаем по массиву с id -->
		var obj = document.getElementById(array[i]);	// Конкретная ссылка -->
		
		if (obj) {	// Если элемент существует -->
			obj.onclick = function(){	// На клик очищаем форму -->
				var name = this.id.slice(0,-5);	// Получаем id формы -->
				var form = document.getElementById(name);	// Ссылка на форму -->
				form.reset();	// Очищаем форму -->
				return false;	// Запрещаем переход по ссылке -->
			}
		}
		
	}
	
}
// -->


// Сравнение товаров (расставляем события) -->
function CompareFormEvent(){
	var form = document.getElementById('CompareForm');	// Конкретная форма -->
	if (form) {	// Если элемент существует -->
		var array = form.elements;	// Массив всех элементов конкретной формы -->
		for (var i=0; i<array.length; i++) {	// Пробегаем по всем элементам -->
			var el = array[i];	// Конкретный элемент -->
			el.onchange = function(){	// Если было изменено значение поля... -->
				CompareFormChange(array);	// ...вызываем функцию -->
			}
		}
	}
}
// -->


// Сравнение товаров (изменение результата) -->
function CompareFormChange(array){
	var result = false;	// Флаг, показывающие, есть ли отмеченные 'input'-ы -->
	var status = document.getElementById('CompareFormActionStatus');	// Блок с информацией по товарам (если будут выбраны) -->
	var buttons = document.getElementById('CompareFormActionButtons');	// Блок с кнопками управления по товарам (если будут выбраны) -->
	
	for (var i=0; i<array.length; i++) {	// Пробегаем по всем элементам -->
		var el = array[i];	// Конкретный элемент -->
		if (el.type == 'checkbox') {	// Только "input type='checkbox'" (т.е. те поля, которые можно отметить) -->
			if (el.checked) {
				result = true;
			}
		}
	}
	
	if (result) {
		status.innerHTML = 'Вы можете сравнить понравившиеся Вам товары.';
		buttons.className = '';
	}
	else{
		status.innerHTML = 'Выберите товары для сравнения.';
		buttons.className = 'hide';
	}
}
// -->


// Полоса прокрутки при сравнении товаров -->
function CompareListEvent(){
	var main = document.getElementById('CompareList');
	var add = document.getElementById('CompareListScroll');
	
	if (main && add) {	// Если оба элемента существуют -->
		if (main.offsetWidth < main.scrollWidth) {	// Узнаём, есть ли горизонтальная полоса прокрутки -->
			add.className = add.className.slice(0,-5);	// Показываем скрытый блок -->
			add.firstChild.style.width = main.scrollWidth+'px';	// Синхронизируем ширину -->
			
			main.onscroll = function(){	// Если "прокрутили" элемент... -->
				add.scrollLeft = this.scrollLeft;	// ...синхронизируем ширину -->
			}
			
			add.onscroll = function(){	// Если "прокрутили" элемент... -->
				main.scrollLeft = this.scrollLeft;	// ...синхронизируем ширину -->
			}
			
		}
	}
	
}
// -->


/* --- © Tarik, 2011 --- */

/* ===== // 'scripts.js' // ===== */
