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

// The document is loaded -->
$(document).ready(function(){
	
	ChangeFormValue();
	StylisedFormRadio();
	HoverFormSubmit();
	
	// ChangeFormBirthplace(); - Deleted by Tarik 23.05.2011 -->
	
	SignUpInitialization();
	BackToPreviousPage();
	
	// Added by Tarik 23.05.2011 -->
	SelectDataChange(); // "Аякс" изменение содержимого 'select' -->
	// -->
	
});    
// -->

// The document changes the sizes -->
onresize = function()
	{				
		CenteringElement();
	}
// -->

// Change contained in "value" -->
function ChangeFormValue()
	{
		var form = document.forms;	// array of all forms on page -->
		if (form.length > 0)
			{
				for (var i = 0; i < form.length; i++)
					{
						var check = 0;	// using for reset -->
						var array = form[i].elements;	// array of form's elements -->
						for (var j = 0; j < array.length; j++)
							{
								var el = array[j];	// element -->
								if (el.name == 'status')	// only "input name='status'" -->
									{
										check = el.value;
										break;
									}
							}
						if (check === '')
							{
								for (j = 0; j < array.length; j++)
									{
										el = array[j];	// element -->
										if (el.type == 'text' || el.tagName.toLowerCase() == 'textarea')	// only "input type='text'" & "textarea" -->
											{
												el.onfocus = function()
													{
														if (this.value == this.defaultValue)
															{
																this.value = '';
															}
													}
												el.onblur = function()
													{
														if (this.value == '')
															{
																this.value = this.defaultValue;
															}
													}
											}	
									}
								form[i].onsubmit = function()
									{
										return ResultValue(this.elements);	// arrays of elements -->
									}
							}
					}
			}
	}
// -->

// Check result -->
function ResultValue(array)
	{
		for (var i = 0; i < array.length; i++)
			{
				var el = array[i];	// element -->
				if (el.type == 'text' || el.tagName.toLowerCase() == 'textarea')	// only "input type='text'" & "textarea" -->
					{
						if (el.value == el.defaultValue)
							{
								el.value = '';
							}
					}
			}
		return true;	// "false" - not send the form, "true" - send the form -->
	}
// -->

// Stylised "input type='radio'" -->
function StylisedFormRadio()
	{
		var form = document.forms;	// array of all forms on page -->
		if (form.length > 0)
			{
				for (var i = 0; i < form.length; i++)
					{
						var array = form[i].elements;	// array of form's elements -->
						for (var j = 0; j < array.length; j++)
							{
								var el = array[j];	// element -->
								if (el.type == 'radio')	// only "input type='radio'" -->
									{
										var label = el.nextSibling;	// label
										if (label.lastChild.nodeType == '3')	// [object Text]
											{
												var span = document.createElement('span');	// span
												label.appendChild(span);
											}
										else
											{
												var span = label.lastChild;	// span
											}
										el.className = 'hide-input';
										if (el.checked)
											{
												span.className = 'radio-on';
												label.onmouseover = function()
													{
														this.lastChild.className = 'radio-on-over';
													}
												label.onmouseout = function()
													{
														this.lastChild.className = 'radio-on';
													}
											}
										else
											{
												span.className = '';
												label.onmouseover = function()
													{
														this.lastChild.className = 'radio-off-over';
													}
												label.onmouseout = function()
													{
														this.lastChild.className = '';
													}
												label.onclick = function()
													{
														this.previousSibling.checked = true;
														StylisedFormRadio();
													}
											}
									}
							}
					}
			}
	}
// -->

// Changing class at ":hover" -->
function HoverFormSubmit()
	{
		var SearchButton = document.getElementById('Search');	// search submit's id -->
		SearchButton.onmouseover = function()
			{
				this.className = 'submit hover';
			}
		SearchButton.onmouseout = function()
			{
				this.className = 'submit';
			}
		// -->
		var SubscrButton = document.getElementById('Subscr');	// subscription form's id -->
		if (SubscrButton)
			{
				SubscrButton.onmouseover = function()
					{
						this.className = 'submit hover';
					}
				SubscrButton.onmouseout = function()
					{
						this.className = 'submit';
					}
			}
	}
// -->

/* - Deleted by Tarik 23.05.2011
// Choice birthplace -->
function ChangeFormBirthplace()
	{
		var obj = document.getElementById('FormCountry');	// select's id -->
		if (obj)
			{
				obj.onchange = function()
					{
						if (obj.options[1].selected == true)
							{
								document.getElementById('ParentFormCity').className = 'field';
                                document.getElementById('ParentFormCity2').className = 'field';
							}
						else
							{
								document.getElementById('ParentFormCity').className = 'field delete';
                                document.getElementById('ParentFormCity2').className = 'field delete';
							}
					}
			}
	}
// -->
- */

// Initialization block of authorisation -->
function SignUpInitialization()
	{
		var obj = document.getElementById('SignUp');	// link's id -->
		if (obj)
			{
				obj.onclick = function()
					{
						return PopupAuthorisation();
					}
			}
	}
// -->

// Popup block of authorisation -->
function PopupAuthorisation()
	{
		var eclipse = document.createElement('div');
		eclipse.id = 'Eclipse';
		eclipse.className = 'eclipse';
		eclipse.innerHTML = '<!-- // -->';
		eclipse.style.width = document.documentElement.scrollWidth+'px';
		eclipse.style.height = document.documentElement.scrollHeight+'px';
		document.body.appendChild(eclipse);
		
		var authWrap = document.createElement('div');
		authWrap.id = 'AuthWrap';
		authWrap.className = 'auth-wrap haslayout';
		authWrap.innerHTML = authGLOBALblock;
		document.body.appendChild(authWrap);	
		CenteringElement();
		
		var button = document.getElementById('AuthClose');	// link's id -->
		button.onclick = function()
			{
				return CloseAuthorisation(eclipse, authWrap);
			}
		return false;
	}
// -->

// Centering element -->
function CenteringElement()
	{
		var obj = document.getElementById('AuthWrap');	// element's id -->
		if (obj)
			{
				var elWidth = obj.offsetWidth;	// original element width
				var elHeight = obj.offsetHeight+110;	// original element height
				var winWidth = document.documentElement.clientWidth;	// original window width
				var winHeight = document.documentElement.clientHeight;	// original window height
				if (elWidth < winWidth)
					{
						var posX = (winWidth-elWidth) / 2;
					}
				else
					{
						var posX = 0;
					}
				if (elHeight < winHeight)
					{
						var posY = (winHeight-elHeight) / 2;
					}
				else
					{
						var posY = 0;
					}
				obj.style.left = posX+'px';
				obj.style.top = posY+'px';
			}
		var location = document.getElementById('Eclipse');	// element's id -->
		if (location)
			{
				location.style.width = location.parentNode.offsetWidth+'px';
			}
	}
// -->

// Close block of authorisation -->
function CloseAuthorisation(eclipse, authWrap)
	{
		eclipse.parentNode.removeChild(eclipse);
		authWrap.parentNode.removeChild(authWrap);
		return false;
	}
// -->

// Return to the previous page -->
function BackToPreviousPage()
	{
		var obj = document.getElementById('BackToPage');	// link's id -->
		if (obj)
			{
				obj.onclick = function()
					{
						if (history.length > 1)
							{
								history.back();
								return false;
							}
						else
							{
								return true;
							}
					}
			}
	}
// -->

// Added by Tarik 23.05.2011 -->
// "Аякс" изменение содержимого 'select' - запрос -->
function SelectDataChange(){
	var form = document.getElementById('RegForm');	// форма-родитель -->
	
	if (form) { // Если элемент существует -->
		
		var getSelect = document.getElementById('FormCountry');	// 'select'-геттер -->
		var setSelect = document.getElementById('FormRegion');	// 'select'-сеттер -->
		
		var setSelectWrap = document.getElementById('FormRegionWrap'); // 'select'-сеттер, обертка -->
		
		var getCust = document.getElementById('FormCountryCust'); // Доп. поле (геттер) -->
		var setCust = document.getElementById('FormRegionCust'); // Доп. поле (сеттер) -->
		
		var getCustWrap = document.getElementById('FormCountryCustWrap'); // Доп. поле (геттер), обертка -->
		var setCustWrap = document.getElementById('FormRegionCustWrap'); // Доп. поле (сеттер), обертка -->
		
		if (getSelect && setSelect && getCust && setCust) {	// Если элементы существуют -->
			
			var url = getSelect.form.action; // Адрес, по которому будем отправлять форму -->
			var param = '?ajax=1&mod=300&cmd=get_data&pid='; // Особые параметры для "Аякс"-запроса -->
			
			if (getSelect.value == '-1') { // Если выбрано "другое"... -->
				getCustWrap.className = 'field'; // Показываем доп. поле (геттер), обертка -->
			}
			else { // иначе... -->
				
				if (getSelect.value != '0') { // ...если выбрано НЕ "-- выбор --"... -->
					AjaxRequest('GET', url+param+getSelect.value, null, [setSelect, setSelectWrap, setCustWrap], SelectDataResult); // ..."аякс" изменение содержимого 'select' - результат -->
				}
				
			}
			
			getSelect.onchange = function(){ // При изменении 'select'-геттера -->
				
				// Сбрасываем значения 'select'-сеттер и доп. поле (сеттер) -->
				setSelect.value = '0';
				setCust.value = '';
				
				// Скрываем 'select'-сеттер, обертка и доп. поле (сеттер), обертка-->
				setSelectWrap.className = 'field delete';
				setCustWrap.className = 'field delete';
				
				var value = this.value; // Обновляем значение 'select' -->
				
				if (value == '-1') { // Если выбрано "другое"... -->
					getCustWrap.className = 'field'; // ...показываем доп. поле (геттер), обертка -->
				}
				else{ // иначе... -->
					getCust.value = ''; // ...сбрасываем значение доп. поле (геттер) -->
					getCustWrap.className = 'field delete'; // Скрываем доп. поле (геттер), обертка -->
					
					if (value != '0') { // Если выбрано НЕ "-- выбор --"... -->
						AjaxRequest('GET', url+param+value, null, [setSelect, setSelectWrap, false], SelectDataResult); // ..."аякс" изменение содержимого 'select' - результат -->
					}
					
				}
				
			}
			
			setSelect.onchange = function(){ // При изменении 'select'-сеттера -->
				var value = this.value; // Обновляем значение 'select' -->
				
				if (value == '-1') { // Если выбрано "другое"... -->
					setCustWrap.className = 'field'; // Показываем доп. поле (сеттер), обертка -->
				}
				else{ // иначе... -->
					setCust.value = ''; // ...сбрасываем значение доп. поле (сеттер) -->
					setCustWrap.className = 'field delete'; // Скрываем доп. поле (сеттер), обертка -->
				}
				
			}
			
		}
		
	}
	
}
// -->

// "Аякс" изменение содержимого 'select' - результат -->
function SelectDataResult(obj, data) {
	
	/*
	obj		// Объект(ы) для работы -->
	data	// Данные, полученные от сервера -->
	*/
	
	var setSelect = obj[0]; // 'select'-сеттер -->
	var setSelectWrap = obj[1]; // 'select'-сеттер, обертка -->
	var setCustWrap = obj[2]; // Доп. поле (сеттер), обертка -->
	
	var answer = JSON.parse(data);	// Распарсим данные (формата 'json') с помощью специальной библиотеки "json2.js" -->
	
	// var id = answer.id; - Id -->
	var error = answer.js.cmd_errors; // Ошибка -->
	var message = answer.js.cmd_messages; // Сообщение -->
	var count = answer.js.count; // Кол-во новых данных -->
	var list = answer.js.data; // Массив новых данных -->
	// var logged = answer.js.is_logged; - Флаг, показывающий, зарегистрирован пользователь или нет -->
	
	var curr = setSelect.value; // Оригинальное значение 'select'-сеттер -->
	
	setSelect.options.length = 0; // Удаляем содержисое 'select'-сеттер -->
	
	if (count > 0) { // Если найдены элементы... -->
		for (var i in list) { // ...забираем их в цикле -->
			
			// Формируем новые элементы -->
			var opt = document.createElement('option');
			opt.value = i;
			if (i == curr) { // Отмечаем активный пункт -->
				opt.selected = true;
			}
			opt.innerHTML = list[i];
			
			setSelect.appendChild(opt); // Вносим элементы в 'DOM' -->
		}
		
	}
	
	setSelectWrap.className = 'field'; // Показываем  'select'-сеттер, обертка -->
	
	if (curr == '-1') { // Если выбрано "другое"... -->
		setCustWrap.className = 'field'; // Показываем доп. поле (сеттер), обертка -->
	}
	
}
// -->


// "Аякс" запрос (методами '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);	// Передаём запрос -->
	
}
// -->


/* --- © Tarik, 2010 --- */

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