// Отправка формы методом Get или Post
// AAction - относительный адрес файла, который будет запрошен
// AAdditionalParams - внешние переметры, передаваемые в строку запроса. Должны начинаться с &
// ButtonObject - Объект нажатой кнопки
// AAdminFromsId - идентификатор формы центра администрирования
function doSendForm(AAction, AAdditionalParams, ButtonObject, AAdminFromsId, AOperation, ALimit, AOnPage, callback_function)
{
	// Объект родительской формы по умолчанию
	var FormNode = ButtonObject.parentNode;

	// Пока родительская форма не является формой
	while (FormNode.nodeName.toLowerCase() != 'form')
	{
		var FormNode = FormNode.parentNode;
	}

	// Получим ID формы (не путать с ID формы центра администрирования)
	FormID = FormNode.id;

	//alert('FormID = ' + FormID);
	//alert('AAdminFromsId = ' + AAdminFromsId);
	//alert('doSendForm');

	// Пытаемся получить скрытый объект для input-а
	var HiddenInput = document.getElementById(ButtonObject.name);

	// Элемента нет, добавим его
	if (null == HiddenInput && undefined == HiddenInput || HiddenInput.type != 'hidden')
	{
		// Создадим скрытй input, т.к. нажатый не передается в форму
		var ElementInput = document.createElement("input");
		ElementInput.setAttribute("type", "hidden");
		ElementInput.setAttribute("id", ButtonObject.name);
		ElementInput.setAttribute("name", ButtonObject.name);

		// Добавим скрытый Input к форме
		var InputNode = FormNode.appendChild(ElementInput);
	}

	// Сохраним из визуальных редакторов данные
	if (typeof tinyMCE != 'undefined')
	{
		tinyMCE.triggerSave();
	}

	var JsHttpRequestSendForm = new JsHttpRequest();

	// Код вызывается, когда загрузка завершена
	JsHttpRequestSendForm.onreadystatechange = function ()
	{
		//alert(JsHttpRequestSendForm.readyState);

		if (JsHttpRequestSendForm.readyState == 4)
		{
			//alert ('4 - doSendForm');

			// Возвращаем обычный курсор
			document.body.style.cursor = '';

			// Убираем затемнение.
			HideLoadingScreen();

			if (typeof JsHttpRequestSendForm.responseJS != 'undefined')
			{
				if (callback_function != undefined)
				{
					callback_function(JsHttpRequestSendForm.responseJS);
				}
				else
				{

					// Выводим результат ошибки в переменную.
					if (typeof JsHttpRequestSendForm.responseJS.error != 'undefined')
					{
						var div_id_message = document.getElementById('id_message');

						if (div_id_message)
						{
							div_id_message.innerHTML = JsHttpRequestSendForm.responseJS.error;
							runScripts(div_id_message.getElementsByTagName('SCRIPT'));
						}

					}

					// Title.
					if (typeof JsHttpRequestSendForm.responseJS.title != 'undefined' && JsHttpRequestSendForm.responseJS.title != '')
					{
						document.title = JsHttpRequestSendForm.responseJS.title;
					}

					// Данные записываем только тогда, если они есть и не пустые.
					if (typeof JsHttpRequestSendForm.responseJS.form_html != 'undefined' && JsHttpRequestSendForm.responseJS.form_html != '')
					{
						// Отключаем связь с редакторами
						DisableTinyMCE();

						html = JsHttpRequestSendForm.responseJS.form_html;
						//html = appendData(html, document.getElementById('id_form_' + AAdminFromsId), 'rewrite');

						//document.getElementById('id_form_' + AAdminFromsId).innerHTML = html;
						document.getElementById('id_content').innerHTML = html;

						// Выполняем скрипты из полученного с сервера HTML-а
						//runScripts(document.getElementById('id_form_' + AAdminFromsId).getElementsByTagName('SCRIPT'));
						runScripts(document.getElementById('id_content').getElementsByTagName('SCRIPT'));
					}
				}
			}
			return true;
		}
	}

	// Определим action у формы
	var FormAction = FormNode.getAttribute('action');

	// Определим метод формы
	var FormMethod = FormNode.getAttribute('method');

	// Добавим обязательно передаваемые данные, конкатенация через ? или &
	/*
	FormAction += (FormAction.indexOf('?') >= 0 ? '&' : '?') + 'hostcmsAAction=' + escape(AAction) +
	'&hostcmsAAdditionalParams=' + escape(AAdditionalParams);
	*/

	if (AOnPage)
	{
		sOnPage = '&admin_forms_on_page=' + AOnPage;
	}
	else
	{
		sOnPage = '';
	}

	// Текущая страница.
	if (ALimit == 0)
	{
		ALimit = '';
	}
	else
	{
		ALimit = '&limit=' + ALimit;
	}

	// передача параметров AAdditionalParams сделана явно, а не через hostcmsAAdditionalParams
	// 20-12-2007
	FormAction += (FormAction.indexOf('?') >= 0 ? '&' : '?') + 'hostcmsAAction=' + escape(AAction) +
	'&hostcmsAAdditionalParams=' + escape(AAdditionalParams) + AAdditionalParams +
	'&operation=' + AOperation + ALimit + sOnPage;

	// Prepare request object (automatically choose GET or POST).
	//req.open(null, FormAction, true);
	JsHttpRequestSendForm.open(FormMethod, FormAction, true);

	// Отправляем запрос в backend.
	JsHttpRequestSendForm.send( { query: FormNode } );

	// Очистим поле для сообщений
	var div_id_message = document.getElementById('id_message');

	if (div_id_message)
	{
		div_id_message.innerHTML = '';
	}

	// Курсор ставим на часики.
	document.body.style.cursor = "wait";

	// Отображаем экран загрузки
	ShowLoadingScreen();

	return false;
}

// Отображает/скрывает окно
function SlideWindow(windowId)
{
	if ($("#"+windowId).css("display") == "block")
	{
		HideWindow(windowId);
	}
	else
	{
		ShowWindow(windowId);
	}
}

var prev_window = 0;


function ShowWindow(windowId)
{
	var windowDiv = document.getElementById(windowId);

	if (windowDiv == undefined)
	{
		return false;
	}

	if (prev_window && prev_window != windowId)
	{
		HideWindow(prev_window);
	}

	prev_window = windowId;

	// 0 - pageWidth, 1 - pageHeight, 2 - windowWidth, 3 - windowHeight
	var arrayPageSize = getPageSize();

	// 0 - scrOfX, 1 - scrOfY
	var arrayScrollXY = getScrollXY();

	// Отображаем до определения размеров div-а
	windowDiv.style.display = 'block';

	var clientHeight = windowDiv.clientHeight;
	var clientWidth = windowDiv.clientWidth;
	
	// Если высота div-а больше высоты окна
	if (clientHeight > arrayPageSize[3])
	{
		// Положим высоту равной 90% высоты окна
		clientHeight = Math.round(arrayPageSize[3] * 0.9);
	}
	
	// Если ширина div-а больше ширины окна
	if (clientWidth > arrayPageSize[2])
	{
		// Положим ширину равной 90% высоты окна
		clientWidth = Math.round(arrayPageSize[2] * 0.9);
	}
	
	windowDiv.style.top = ((arrayPageSize[3] - clientHeight) / 2 + arrayScrollXY[1]) + 'px';
	windowDiv.style.left = ((arrayPageSize[2] - clientWidth) / 2 + arrayScrollXY[0]) + 'px';
}


// Кроссбраузерная функция получения размеров экрана,
// используется в функции ShowLoadingScreen.
function getPageSize()
{
	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY)
	{
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	}
	else if (document.body.scrollHeight > document.body.offsetHeight)
	{ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	}
	else
	{ // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and
		// Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;
	if (self.innerHeight)
	{	// all except Explorer
		if(document.documentElement.clientWidth)
		{
			windowWidth = document.documentElement.clientWidth;
		}
		else
		{
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
	{ // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	}
	else if (document.body)
	{ // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight)
	{
		pageHeight = windowHeight;
	}
	else
	{
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth)
	{
		pageWidth = xScroll;
	}
	else
	{
		pageWidth = windowWidth;
	}

	arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
	return arrayPageSize;

}

// Получение информации о позиции скрола
function getScrollXY()
{
	var scrOfX = 0, scrOfY = 0;

	if (typeof(window.pageYOffset ) == 'number' )
	{
		// Netscape
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	}
	else if (document.body && (document.body.scrollLeft || document.body.scrollTop))
	{
		// DOM
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	}
	else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
	{
		// IE6
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}

	return [ scrOfX, scrOfY ];
}

// Скрытие div-а
function HideObject(obj)
{
	obj.css('zoom', 1)
		.css('width', 0)
		.css('height', 0)
		.css('visibility', 'hidden')
		.css('overflow', 'hidden');
}

// Показ div-а
function ShowObject(obj)
{
	obj.css('zoom', 1)
		.css('width', 'auto')
		.css('height', 'auto')
		.css('visibility', 'visible')
		.css('overflow', 'visible');
}


function HideWindow(windowId)
{
	$("#"+windowId).css('display', 'none');
}


/**
 * Создание окна
 * 
 * @param windowId идентификатор окна
 * @param windowTitle заголовок окна
 * @param windowWidth ширина окна
 * @param windowHeight высота окна
 * @param type тип закрытия окна, 0 - скрыть, 1 - уничтожить
 */
function CreateWindow(windowId, windowTitle, windowWidth, windowHeight, typeClose)
{
	var removeWindow = (typeof typeClose != 'undefined' && typeClose == 1);
		
	var windowDiv = document.getElementById(windowId);

	if (windowDiv == undefined)
	{
		// Создаем div для окна
		var fade_div = document.createElement("div");
		fade_div.setAttribute("id", windowId);
		var body = document.getElementsByTagName("body")[0];
		windowDiv = body.appendChild(fade_div);
	}

	// Тень
	windowDiv.className = "shadowed";

	if (windowWidth == '')
	{
		windowWidth = '300px';
	}

	windowDiv.style.width = windowWidth;

	if (windowHeight != '')
	{
		windowDiv.style.height = windowHeight;
	}

	$(windowDiv).applyShadow();

	// Верхняя полосочка(для отображения пустого заголовка передать пробел)
	if(windowTitle != '')
	{
		var topbar = document.createElement("div");
		topbar.className = "topbar";
		windowDiv.insertBefore(topbar, windowDiv.childNodes[0]);
	}

	windowDiv.style.display = "none";

	// Закрыть
	var wclose_img = document.createElement("img");
	wclose_img.src = '/admin/images/wclose.gif';

	if (removeWindow)
	{
		wclose_img.onclick = function() { $("#"+windowId).remove(); };
	}
	else
	{
		wclose_img.onclick = function() {HideWindow(windowId); };
	}

	if(windowTitle != '')
	{
		topbar.appendChild(wclose_img);

		// Заголовок окна
		var textNode = document.createTextNode(windowTitle);
		topbar.appendChild(textNode);
	}
}


function DoLoadSynonym(AAction, AAdditionalParams, ADivId)
{
	var req = new JsHttpRequest();

	// Отображаем экран загрузки
	ShowLoadingScreen();

	// Этот код вызовется автоматически, когда загрузка данных завершится.
	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			document.getElementById(ADivId).removeAttribute('disabled');

			// Возвращаем обычный курсор
			document.body.style.cursor = '';

			// Убираем затемнение.
			HideLoadingScreen();

			if (req.responseJS != undefined)
			{
				// Выводим результат ошибки в переменную.

				// Данные.
				if (req.responseJS.result != undefined)
				{
					oInput = document.getElementById('original_word');

					var content = '<ul>';

					for (var key in req.responseJS.result)
					{
						content += '<li>' +  '<a href="javascript:DeleteSynonym(\'' + oInput.value + '\', '+ key +')" alt="Удалить"><img src="/admin/images/delete.gif"></a> ' + req.responseJS.result[key] + "</li>";
					}

					content += '</ul>';

					document.getElementById(ADivId).innerHTML = content;
				}
			}
			return true;
		}
	}

	req.open('get', AAction + AAdditionalParams, true);

	// Отсылаем данные в обработчик.
	req.send(null);

	// Курсор ставим на часики.
	document.body.style.cursor = "wait";
}


function DeleteSynonym(Word, SynonymID)
{
	var req = new JsHttpRequest();

	// Отображаем экран загрузки
	ShowLoadingScreen();

	// Этот код вызовется автоматически, когда загрузка данных завершится.
	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			// Возвращаем обычный курсор
			document.body.style.cursor = '';

			// Убираем затемнение.
			HideLoadingScreen();

			if (req.responseJS != undefined)
			{
				// Выводим результат ошибки в переменную.

				// Данные.
				if (req.responseJS.result != undefined)
				{
					// Обновляем список синонимов
					DoLoadSynonym( "/rewriter/", "?get_synonym=" + escape(oInput.value), "synonym_div_id");
				}
			}
			return true;
		}
	}

	req.open('get', '/rewriter/?word=' + escape(Word) + '&delete_synonym=' + SynonymID, true);

	// Отсылаем данные в обработчик.
	req.send(null);

	// Курсор ставим на часики.
	document.body.style.cursor = "wait";
}

timer = false;

function StartGetSysonym(oInput)
{
	//oInput.setAttribute('disabled', true);

	if (timer)
	{
		clearTimeout(timer);
	}

	oInput = document.getElementById('original_word');

	if (oInput.value.length > 0)
	{
		timer = setTimeout( 'DoLoadSynonym( "/rewriter/", "?get_synonym=' + escape(oInput.value) + '", "synonym_div_id" )', 500);
	}
}

function my_callback_function(responseText) {
	var target_text = document.getElementById('target_text');
	target_text.innerHTML = responseText.target_text;
	
	runScripts(target_text.getElementsByTagName('script'));

	document.getElementById('source_text_length').innerHTML = responseText.source_text_length;
	document.getElementById('source_text_length_without_space').innerHTML = responseText.source_text_length_without_space;
	/*
	document.getElementById('count_replace').innerHTML = responseText.count_replace;
	*/
	document.getElementById('time').innerHTML = responseText.time;
	document.getElementById('debug').innerHTML = responseText.error;
	document.getElementById('user_account_sum').innerHTML = responseText.user_account_sum;
}

function onclick_li(span_id, id)
{
	var span = document.getElementById(span_id);
	var span_li = document.getElementById(id);

	span.innerHTML = span_li.innerHTML;
	SlideWindow("w_" + span_id);
}

// Добавляет значение в SPAN и
function addspansyn(span_id, synonym_array)
{
	var span = document.getElementById(span_id);

	var div = document.getElementById("w_" + span_id);

	if (div == undefined)
	{
		// Создаем всплывающее окно
		var div = document.createElement("div");
		var body = document.getElementsByTagName("body")[0];
		body.appendChild(div);

		div.id = "w_" + span_id;
	}
	else
	{
		deleteChildNodes("w_" + span_id);
	}

	CreateWindow(div.id, 'Варианты замены');

	var ul = document.createElement("ul");
	div.appendChild(ul);

	for (var x in synonym_array)
	{
		if (x == 1)
		{
			//span.innerText = synonym_array[x];
			span.textContent = synonym_array[x];
			span.innerHTML = synonym_array[x];
		}

		var li = document.createElement('li');

		var li_span = document.createElement("span");
		li_span.id = 'syn_' + span_id + '_' + x;
		li_span.style.cursor = 'pointer';

		if (x == 0)
		{
			li_span.style.color = 'gray';
		}

		li_span.innerHTML = synonym_array[x];
		li.appendChild(li_span);

		ul.appendChild(li);

		li_span.onclick = function() { onclick_li(span_id, this.id); };
	}

	span.style.cursor = 'pointer';

	span.onclick = function()
	{
		SlideWindow("w_" + this.id);
	};
}
