// Запуск скрипта после полной загрузки документа -->
if (window.addEventListener) {
	window.addEventListener('load', function(){  // Для нормальных браузеров -->
											DictEventInit();
											DictEventDelete();
											DictEventEdit();
										}, false)
}
else{
	window.attachEvent('onload', function(){ // Для IE -->
										  DictEventInit();
										  DictEventDelete();
										  DictEventEdit();
										})
}
// -->


// Инициализация. Расставляем события -->
function DictEventInit(){
	var block = document.getElementById('Editor');
	
	if (block) {
		var buttonArray = block.getElementsByTagName('a');
		
		if (buttonArray) {
			var i;
			var buttonArrayLength = buttonArray.length;
			
			for (i=0; i<buttonArrayLength; i++) {
				(function(i) { // Замыкаем на 'i' -->
						  
					var lnk = buttonArray[i];
					var lnkId = lnk.id.slice(0, 5);
					var lnkPos = lnk.id.slice(5);
					
					if (lnkId == 'Dict_') {
						
						lnk.onclick = function(){
							
							this.innerHTML = '<img src="/pub/img/ajax_loader.gif" width="16" height="16" alt="Загрузка..." title="Загрузка..." />';
							var url = this.href+'?ajax=1&cmd=dict_load&data='+encodeURIComponent(this.rel);
							
							AjaxRequest('GET', url, null, [this, lnkPos], DictEventResultLoad); // "Аякс" запрос -->
							
							this.onclick = function(){
								return false;
							}
							
							return false;
						}
						
					}
				
				})(i);
			}
			
		}
		
	}
	
}
// -->


// Результат. Ответ сервера на запрос "Добавить/Редактировать" -->
function DictEventResultLoad(obj, data) {
	
	/*
	obj		// cсылка на объект вызова и позиция слова
	data	// данные, полученные от сервера
	*/
	
	var answer = JSON.parse(data);	// Распарсим данные (формата 'json') с помощью специальной библиотеки "json2.js" -->
	
	/*
	answer.res          // 1 или 0
	answer.error        // текст ошибки
	answer.text         // текст сообщения
	answer.translate    // вариант перевода от пользователя
	answer.word         // само слово
	answer.list[]       // варианты перевода других пользователей
	answer.list_id[]    // номера вариантов переводов других пользователей
	*/
	
	var lnk = obj[0];
	
	var result = answer.res;
	var error = answer.error;
	var translate = answer.translate;
	
	if (translate) {
		var mode = 'change';
	}
	else {
		var mode = 'add';
	}
	
	if (result == '1') {
		DictEventCreate(obj, answer, mode);
	}
	else {
		alert(error);
		
		if (mode == "add") {
			lnk.title = 'Добавить перевод';
			lnk.innerHTML = '<img src="/pub/img/dict_add.png" width="16" height="16" alt="Добавить перевод" />';
		}
		else if (mode == "change") {
			lnk.title = 'Изменить перевод';
			lnk.innerHTML = '<img src="/pub/img/dict_change.png" width="16" height="16" alt="Изменить перевод" />';
		}
		else {
			alert('Указан неверный режим работы!');
		}
		
		lnk.onclick = function(){
			
			this.innerHTML = '<img src="/pub/img/ajax_loader.gif" width="16" height="16" alt="Загрузка..." title="Загрузка..." />';
			var url = this.href+'?ajax=1&cmd=dict_load&data='+encodeURIComponent(this.rel);
			
			AjaxRequest('GET', url, null, obj, DictEventResultLoad); // "Аякс" запрос -->
			
			this.onclick = function(){
				return false;
			}
			
			return false;
		}
		
	}
	
}
// -->


// Создание всплывающего окна -->
function DictEventCreate(obj, answer, mode) {
	
	/*
	obj		  // cсылка на объект вызова и позиция слова
	answer    // данные, полученные от сервера
	mode      // режим работы ('add' или 'change')
	*/
	
	/*
	answer.res          // 1 или 0
	answer.error        // текст ошибки
	answer.text         // текст сообщения
	answer.translate    // вариант перевода от пользователя
	answer.word         // само слово
	answer.list[]       // варианты перевода других пользователей
	answer.list_id[]    // номера вариантов переводов других пользователей
	*/
	
	var lnk = obj[0];
	var lnkId = obj[1];
	var title = lnk.title;
	
	var translate = answer.translate;
	var word = answer.word;
	var list = answer.list;
	var list_id = answer.list_id;
	var userList = '';
	
	if (list) {
		var i;
		var listLength = list.length;
		
		for (i=0; i<listLength; i++) {
			userList += '<li><span id="DictListItem_'+list_id[i]+'">'+list[i]+'</span><img src="/pub/img/dict_replace.png" width="16" height="16" alt="Выбрать" title="Выбрать" onclick="DictEventReplace(this,'+lnkId+');" /></li>';
		}
		
	}
	
	if (userList) {
		userList = '<div><p class="dict_list_title">Переводы других пользователей:</p><ul class="dict_list">'+userList+'</ul></div>';
	}
	
	var lnkParent = lnk.parentNode;
	var lnkParentWidth = lnkParent.offsetWidth;
	var lnkParentHeight = lnkParent.offsetHeight;
	
	var block = document.createElement('div');
	block.id = 'DictBlock_'+lnkId;
	block.className = 'dict_block';
	/*
	block.style.marginTop = -lnkParentHeight+'px';
	*/
	block.innerHTML = '\
	<h6 class="dict_title">'+title+': "'+word+'"</h6>\
	'+userList+'\
	<div>\
		<label for="DictTrans_'+lnkId+'">Ваш вариант перевода:</label>\
		<input type="text" value="'+translate+'" id="DictTrans_'+lnkId+'" />\
		<input type="hidden" value="" id="DictHideTrans_'+lnkId+'" />\
	</div>\
	<div class="dict_buttons">\
		<button type="button" title="Сохранить" id="DictEventSave_'+lnkId+'">Сохранить</button>\
		<button type="button" title="Закрыть" id="DictEventClose_'+lnkId+'">Закрыть</button>\
	</div>\
	';
	lnk.parentNode.appendChild(block);
	
	var blockWidth = block.offsetWidth;
	var blockHeight = block.offsetHeight;
	
	block.style.marginTop = -(blockHeight-10)+'px';
	block.style.marginLeft = -5+'px';
	
	var buttonClose = document.getElementById('DictEventClose_'+lnkId);
	buttonClose.onclick = function(){
		DictEventClose(obj, mode);
	}
	
	var buttonSave = document.getElementById('DictEventSave_'+lnkId);
	buttonSave.onclick = function(){
		
		var translate = document.getElementById('DictTrans_'+lnkId).value;
		var translateId = document.getElementById('DictHideTrans_'+lnkId).value;
		DictEventSave(obj, translate, translateId);
		
	}
	
}
// -->

// Выбор значени из списка переводов других пользователей -->
function DictEventReplace(el, id){
	
	/*
	el    // cсылка на объект вызова
	id    // идентификатор слова
	*/
	
	var elItem = el.parentNode.firstChild;
	var target = document.getElementById('DictTrans_'+id);
	var targetHide = document.getElementById('DictHideTrans_'+id);
	
	target.value = elItem.innerHTML;
	targetHide.value = elItem.id.slice(13);
}
// -->

// Функция закрытия окна -->
function DictEventClose(obj, mode) {
	
	/*
	obj		  // cсылка на объект вызова и позиция слова
	mode      // режим работы ('add' или 'change')
	*/
	
	var lnk = obj[0];
	var lnkId = obj[1];
	
	var block = document.getElementById('DictBlock_'+lnkId);
	block.parentNode.removeChild(block);
	
	if (mode == "add") {
		lnk.title = 'Добавить перевод';
		lnk.innerHTML = '<img src="/pub/img/dict_add.png" width="16" height="16" alt="Добавить перевод" />';
	}
	else if (mode == "change") {
		lnk.title = 'Изменить перевод';
		lnk.innerHTML = '<img src="/pub/img/dict_change.png" width="16" height="16" alt="Изменить перевод" />';
	}
	else {
		alert('Указан неверный режим работы!');
	}
	
	lnk.onclick = function(){
		
		this.innerHTML = '<img src="/pub/img/ajax_loader.gif" width="16" height="16" alt="Загрузка..." title="Загрузка..." />';
		var url = this.href+'?ajax=1&cmd=dict_load&data='+encodeURIComponent(this.rel);
		
		AjaxRequest('GET', url, null, obj, DictEventResultLoad); // "Аякс" запрос -->
		
		this.onclick = function(){
			return false;
		}
		
		return false;
	}
	
}
// -->


// Сохранение информации из окна -->
function DictEventSave(obj, translate, translateId) {
	
	/*
	obj		       // cсылка на объект вызова и позиция слова
	translate      // вариант перевода от пользователя
	translateId    // номер варианта перевода от пользователя
	*/
	
	var lnk = obj[0];
	var url = lnk.href+'?ajax=1&cmd=dict_add&data='+encodeURIComponent(lnk.rel)+'&translate='+encodeURIComponent(translate)+'&translate_id='+translateId;
	
    //sdata['translate'] = encodeURIComponent(sdata['translate']);
    
	AjaxRequest('GET', url, null, obj, DictEventResultAdd); // "Аякс" запрос -->
	
}
// -->


// Результат. Ответ сервера на запрос "Обновить" -->
function DictEventResultAdd(obj, data) {
	
	/*
	obj		// cсылка на объект вызова и позиция слова
	data	// данные, полученные от сервера
	*/
	
	var answer = JSON.parse(data);	// Распарсим данные (формата 'json') с помощью специальной библиотеки "json2.js" -->
	
	/*
	answer.res          // 1 или 0
	answer.error        // текст ошибки
	answer.text         // текст сообщения
	answer.translate    // вариант перевода от пользователя
	answer.word         // само слово
	answer.list[]       // варианты перевода других пользователей
	answer.list_id[]    // номера вариантов переводов других пользователей
	*/
	
	var result = answer.res;
	var error = answer.error;
	
	if (result == '1') {
		DictEventClose(obj, 'change');
	}
	else {
		alert(error);
	}
	
}
// -->


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


// Подтверждение удаления слова из словаря -->
function DictEventDelete(){
	var table = document.getElementById('DictTable');
	
	if (table) {
		var array = table.getElementsByTagName('a');
		
		if (array) {
			var i;
			var arrayLength = array.length;
			
			for (i=0; i<arrayLength; i++) {
				(function(i) { // Замыкаем на 'i' -->
					
					var el = array[i];
					var elId = el.id.slice(0, 12);
					
					if (elId == 'DictCellDel_') {
						
						el.onclick = function(){
							return confirm ("Вы уверены, что хотите удалить перевод?");
						}
						
					}
				
				})(i);
			}
			
		}
		
	}
	
}
// -->


// --- --- --- ---  --- --- --- --- --- ---  --- --- --- --- --- ---  --- --- --- --- --- ---  --- --- --- --- --- ---  --- ---
// --- --- --- ---  --- --- --- --- --- ---  --- --- --- --- --- ---  --- --- --- --- --- ---  --- --- --- --- --- ---  --- ---


// Редактирование слова в словаре -->
function DictEventEdit(){
	var table = document.getElementById('DictTable');
	
	if (table) {
		var array = table.getElementsByTagName('a');
		
		if (array) {
			var i;
			var arrayLength = array.length;
			
			for (i=0; i<arrayLength; i++) {
				(function(i) { // Замыкаем на 'i' -->
					
					var el = array[i];
					var elId = el.id.slice(0, 13);
					var elPos = el.id.slice(13);
					
					if (elId == 'DictCellEdit_') {
						
						el.onclick = function(){
							
							this.innerHTML = '<img src="/pub/img/ajax_loader.gif" width="16" height="16" alt="Загрузка..." title="Загрузка..." />';
							var url = this.href+'?ajax=1&cmd=dict_add&data='+this.rel+'&translate='+this.rev;
							
							AjaxRequest('GET', url, null, [this, elPos], DictEventEditResultLoad); // "Аякс" запрос -->
							
							this.onclick = function(){
								return false;
							}
							
							return false;
							
						}
						
					}
				
				})(i);
			}
			
		}
		
	}
	
}
// -->


// Результат. Ответ сервера на запрос "Редактировать перевод" (в словаре пользователя) -->
function DictEventEditResultLoad(obj, data) {
	
	/*
	obj		// cсылка на объект вызова и позиция слова
	data	// данные, полученные от сервера
	*/
	
	var answer = JSON.parse(data);	// Распарсим данные (формата 'json') с помощью специальной библиотеки "json2.js" -->
	
	/*
	answer.res          // 1 или 0
	answer.error        // текст ошибки
	answer.translate    // вариант перевода от пользователя
	answer.word         // само слово
	answer.double       // было отредактировано или нет
	*/
	
	var lnk = obj[0];
	var lnkPos = obj[1];
		
	var result = answer.res;
	var error = answer.error;
	var translate = answer.translate;
	
	if (result == '1') {
		DictEventEditCreate(obj, answer);
	}
	else {
		alert(error);
		
		lnk.title = 'Редактировать';
		lnk.innerHTML = '<img src="/pub/img/dict_edit.png" width="16" height="16" alt="Редактировать" />';
		
		lnk.onclick = function(){
			
			this.innerHTML = '<img src="/pub/img/ajax_loader.gif" width="16" height="16" alt="Загрузка..." title="Загрузка..." />';
			var url = this.href+'?ajax=1&cmd=dict_add&data='+encodeURIComponent(this.rel)+'&translate='+encodeURIComponent(this.rev);
			
			AjaxRequest('GET', url, null, obj, DictEventEditResultLoad); // "Аякс" запрос -->
			
			this.onclick = function(){
				return false;
			}
			
			return false;
			
		}
		
	}
	
}
// -->


// Создание всплывающего окна (в словаре пользователя) -->
function DictEventEditCreate(obj, answer) {
	
	/*
	obj		  // cсылка на объект вызова и позиция слова
	answer    // данные, полученные от сервера
	*/
	
	/*
	answer.res          // 1 или 0
	answer.error        // текст ошибки
	answer.translate    // вариант перевода от пользователя
	answer.word         // само слово
	answer.double       // было отредактировано или нет
	*/
	
	var lnk = obj[0];
	var lnkPos = obj[1];
	var title = lnk.title;
	
	var translate = answer.translate;
	var word = answer.word;
	
	var lnkParent = lnk.parentNode;
	var lnkParentWidth = lnkParent.offsetWidth;
	var lnkParentHeight = lnkParent.offsetHeight;
	
	var block = document.createElement('div');
	block.id = 'DictBlock_'+lnkPos;
	block.className = 'dict_block';
	block.style.marginTop = -lnkParentHeight+'px';
	block.innerHTML = '\
	<h6 class="dict_title">'+title+': "'+word+'"</h6>\
	<div>\
		<label for="DictTrans_'+lnkPos+'">Ваш вариант перевода:</label>\
		<input type="text" value="'+translate+'" id="DictTrans_'+lnkPos+'" />\
	</div>\
	<div class="dict_buttons">\
		<button type="button" title="Сохранить" id="DictEventSave_'+lnkPos+'">Сохранить</button>\
		<button type="button" title="Закрыть" id="DictEventClose_'+lnkPos+'">Закрыть</button>\
	</div>\
	';
	lnk.parentNode.appendChild(block);
	
	var buttonClose = document.getElementById('DictEventClose_'+lnkPos);
	buttonClose.onclick = function(){
		var translate = document.getElementById('DictTrans_'+lnkPos).value;
		
		DictEventEditClose(obj, translate);
		
	}
	
	var buttonSave = document.getElementById('DictEventSave_'+lnkPos);
	buttonSave.onclick = function(){
		var translate = document.getElementById('DictTrans_'+lnkPos).value;
		
		DictEventEditSave(obj, translate);
		
	}
	
}
// -->


// Функция закрытия окна (в словаре пользователя) -->
function DictEventEditClose(obj, translate) {
	
	/*
	obj          // cсылка на объект вызова и позиция слова
	translate    // вариант перевода от пользователя
	*/
	
	var lnk = obj[0];
	var lnkPos = obj[1];
	
	var block = document.getElementById('DictBlock_'+lnkPos);
	block.parentNode.removeChild(block);
	
	lnk.title = 'Редактировать';
	lnk.innerHTML = '<img src="/pub/img/dict_edit.png" width="16" height="16" alt="Редактировать" />';
	
	lnk.onclick = function(){
		
		this.innerHTML = '<img src="/pub/img/ajax_loader.gif" width="16" height="16" alt="Загрузка..." title="Загрузка..." />';
		var url = this.href+'?ajax=1&cmd=dict_add&data='+encodeURIComponent(this.rel)+'&translate='+encodeURIComponent(translate);
		
		AjaxRequest('GET', url, null, obj, DictEventEditResultLoad); // "Аякс" запрос -->
		
		this.onclick = function(){
			return false;
		}
		
		return false;
		
	}
	
	document.getElementById('DictCellTranslate_'+lnkPos).innerHTML = translate;
	
}
// -->


// Сохранение информации из окна (в словаре пользователя) -->
function DictEventEditSave(obj, translate) {
	
	/*
	obj		     // cсылка на объект вызова и позиция слова
	translate    // вариант перевода от пользователя
	*/
	
	var lnk = obj[0];
	var url = lnk.href+'?ajax=1&cmd=dict_add&data='+encodeURIComponent(lnk.rel)+'&translate='+encodeURIComponent(translate);
	
	AjaxRequest('GET', url, null, obj, DictEventEditResultAdd); // "Аякс" запрос -->
	
}
// -->


// Результат. Ответ сервера на запрос "Обновить" (в словаре пользователя) -->
function DictEventEditResultAdd(obj, data) {
	
	/*
	obj		// cсылка на объект вызова и позиция слова
	data	// данные, полученные от сервера
	*/
	
	var answer = JSON.parse(data);	// Распарсим данные (формата 'json') с помощью специальной библиотеки "json2.js" -->
	
	/*
	answer.res          // 1 или 0
	answer.error        // текст ошибки
	answer.translate    // вариант перевода от пользователя
	answer.word         // само слово
	answer.double       // было отредактировано или нет
	*/
	
	var result = answer.res;
	var error = answer.error;
	var translate = answer.translate;
	
	if (result == '1') {
		DictEventEditClose(obj, translate);
	}
	else {
		alert(error);
	}
	
}
// -->
