var prev_comment = 0;

// Ответ на комментарий
function cr(comment_id)
{
	if (prev_comment && prev_comment != comment_id)
	{
		document.getElementById(prev_comment).style.display = 'none';
	}

	var div = document.getElementById(comment_id);

	if (div.style.display != 'block')
	{
		div.style.display = 'block';
	}
	else
	{
		div.style.display = 'none';
	}

	prev_comment = comment_id;
}

var temp_ChildId = '';
var temp_CurrenElementId = '';
var menu_timeout_id = 0;
var filter_timeout_id = 0;

// обработчик наведения мыши на меню
function TopMenuOver(CurrenElementId, ChildId)
{
	clearTimeout(menu_timeout_id);

	if (temp_CurrenElementId != ''
	&& temp_CurrenElementId != CurrenElementId)
	{
		var oTemp_ChildId = document.getElementById(temp_ChildId);

		if (oTemp_ChildId)
		{
			oTemp_ChildId.style.display = "none";
		}
	}

	temp_ChildId = ChildId;
	temp_CurrenElementId = CurrenElementId;

	if (CurrenElementId == undefined)
	{
		return false;
	}

	if (ChildId != '')
	{
		var oChildId = document.getElementById(ChildId);

		if (oChildId)
		{
			oChildId.style.display = "block";
		}
	}
}

// обработчик уведения мыши с меню
function TopMenuOut(CurrenElementId, ChildId)
{
	if (CurrenElementId == undefined)
	{
		return false;
	}

	if (ChildId != '')
	{
		var oChildId = document.getElementById(ChildId);
		if (oChildId)
		{
			menu_timeout_id = setTimeout(function (){oChildId.style.display = "none"}, 300);
		}
	}
}

// Функция обратного вызова для AddIntoCart
function callbackfunction_AddIntoCart(responseJS)
{
	// Результат принят
	sended_request = false;

	if (typeof responseJS != 'undefined')
	{
		// Данные.
		if (typeof responseJS.cart != 'undefined')
		{
			var little_cart = document.getElementById('little_cart');

			if (little_cart)
			{
				// Создадим скрытый SPAN для IE, в который поместим текст + скрипт.
				// Если перед <script> не будет текста, нехороший IE не увидит SCRIPT
				var span = document.createElement("span");
				span.style.display = 'none';
				span.innerHTML = "Stupid IE. " + responseJS.cart;

				runScripts(span.getElementsByTagName('SCRIPT'));

				little_cart.innerHTML = responseJS.cart;
			}
			else
			{
				alert('Ошибка! Краткая корзина не найдена');
			}
		}
	}
}

function AddIntoCart(shop_path, item_id, item_count)
{
	//location.href = shop_path + 'cart/?ajax_add_item_id=' + item_id + '&count=' + item_count;
	cmsrequest = shop_path + 'cart/?ajax_add_item_id=' + item_id + '&count=' + item_count;

	// Отправляем запрос backend-у
	sendRequest(cmsrequest, 'get', callbackfunction_AddIntoCart);

	return false;
}

/**
* Склонение после числительных
* int number числительное
* int nominative Именительный падеж
* int genitive_singular Родительный падеж, единственное число
* int genitive_plural Родительный падеж, множественное число
*/
function declension(number, nominative, genitive_singular, genitive_plural)
{
	var last_digit = number % 10;
	var last_two_digits = number % 100;

	if (last_digit == 1 && last_two_digits != 11)
	{
		var result = nominative;
	}
	else
	{
		if ((last_digit == 2 && last_two_digits != 12) || (last_digit == 3 && last_two_digits != 13) || (last_digit == 4 && last_two_digits != 14))
		{
			var result = genitive_singular;
		}
		else
		{
			var result = genitive_plural;
		}
	}

	return result;
}

// массив для хранения текущих рейтингов звезд
var curr_rate = new Array();

// функция работы со звездами рейтинга
function set_rate(id, new_rate)
{
	// устанавливаем атрибуты
	curr_star = document.getElementById(id);
	parent_id = parseInt(curr_star.parentNode.id);

	// при первом пересчете ставим рейтинг для группы звезд в 0
	if (!curr_rate[parent_id])
	{
		curr_rate[parent_id] = 0;
	}

	// устанавливаем новый рейтинг в массив рейтингов и значение скрытого поля
	if (new_rate != curr_rate[parent_id] && parseInt(new_rate) > 0)
	{
		curr_rate[parent_id] = new_rate;

		/*curr_form = document.getElementById('comment_form_0' + (parent_id != 0 ? parent_id : ''));
		curr_form.comment_grade.value = curr_rate[parent_id].charAt(curr_rate[parent_id].length - 1);*/
		
		var curr_form_id = 'comment_form_0' + (parent_id != 0 ? parent_id : '');
		var comment_grade_value = curr_rate[parent_id].charAt(curr_rate[parent_id].length - 1);
		$("#"+curr_form_id+" input[name=comment_grade]").val(comment_grade_value);
		$("#"+curr_form_id+" input[name=shop_comment_grade]").val(comment_grade_value);
		
	}

	// пересчет стилей для звезд
	for (i = 1; i < 6; i++)
	{
		if (parent_id != 0)
		{
			j = parent_id + '' + i + '_star_' + i;
		}
		else
		{
			j = i + '_star_' + i;
		}

		temp_obj = document.getElementById(j);

		if (new_rate == 0)
		{
			id = curr_rate[parent_id];
		}

		if (parseInt(j) > parseInt(id))
		{
			temp_obj.className = '';
		}
		else
		{
			temp_obj.className = 'curr';
		}
	}
}

// Функция обратного вызова для CheckBlogUrl
function callbackfunction_CheckBlogUrl(responseJS)
{
	// Результат принят
	sended_request = false;

	if (typeof responseJS != 'undefined')
	{
		// Данные.
		if (typeof responseJS.check_url_result != 'undefined')
		{
			var check_url = document.getElementById('check_url');

			if (responseJS.check_url_result == 0)
			{
				check_url.className = 'error';
				html = 'Адрес занят.';
			}
			else
			{
				check_url.className = 'green';
				html = 'Адрес свободен.';
			}

			if (check_url)
			{
				check_url.innerHTML = html;
			}
			else
			{
				alert('Ошибка! Блок для вывода результатов запроса не найден');
			}
		}
	}
}

function CheckBlogUrl(blog_path, blog_url, parent_id, id)
{
	cmsrequest = blog_path + '?ajax_check_blog_url=' + blog_url + '&group_parent_id=' + parent_id + '&group_id=' + id;

	var check_url = document.getElementById('check_url');

	if (check_url)
	{
		check_url.innerHTML = '<img src="/hostcmsfiles/images/ajax_loader_mini.gif"/>';
	}

	// Отправляем запрос backend-у
	sendBackgroundRequest(cmsrequest, 'get', callbackfunction_CheckBlogUrl);

	return false;
}

// Установка или снятие всех флажков для checkbox'ов элементов.
function SelectAllItemsByPrefix(ASelect, prefix)
{
	element_array = document.getElementsByTagName("input");
	if (element_array.length > 0)
	{
		for (var i = 0; i < element_array.length; i++)
		{
			if (element_array[i].name.search(prefix) != -1)
			{
				// Устанавливаем checked
				element_array[i].checked = ASelect;
			}
		}

	}
}

//Проверка ячейки
function FieldCheckEmail(elementId)
{
	return true;
}

/*
 * jQuery Личные сообщения
 */

// список сообщений
$(function () {
	function reload_data (new_data) {
		$("#tmp").html(new_data);
		$("#messages_list").html($("#tmp #messages_list").html());
		x();
	}

	function x ()
	{
		// отправка сообщения 
		$('#send_messages').submit(
			function () {
				$.ajax({
					context: $('#messages_list'),
					data: 'JsHttpRequest=' + Math.round(new Date().getTime() / 1000) + '-xml&add_message=1&' + $('#send_messages').serialize(),
					dataType: 'json',
					success: function (data) {
						reload_data(data.js.content);
					}}
				)
				return false;
			}
		)

		// удаление сообщения 
		$('.delete').click(function () {
				curr_url = $(this).attr('href');

				$.ajax({
					url: curr_url,
					context: $('#messages_list'),
					data: 'JsHttpRequest=' + Math.round(new Date().getTime() / 1000) + '-xml',
					dataType: 'json',
					success: function (data) {
						reload_data(data.js.content);
					}
				})
				return false;
		})

		// отправка формы по Ctrl+Enter
		$('#send_messages textarea').keydown(function (e) {
			if (e.ctrlKey && e.keyCode == 13) {
				$('#send_messages').submit();
			}
		});

		// визуализация формы
		$('.form_msg').click(function () {
			var opt = {speed: 'fast'},
			form_msg = $('#form_msg');

			if(form_msg.is(':visible')) {
				form_msg.fadeOut(opt['speed']);
			}
			else {
				form_msg.fadeIn(opt['speed']);
			}
		});
	}

	x();

	// обновление данных по таймауту
	setInterval(function () {
		if ($('#messages_list').length && !$('#form_msg').is(':visible'))
		{
			$.ajax({
				context: $('#messages_list'),
				data: {'JsHttpRequest': Math.round(new Date().getTime() / 1000) + '-xml'},
				dataType: 'json',
				success: function (data) {
					reload_data(data.js.content);
				}
			})
		}
	}, 10000);
})

// окно переписки
$(function () {
	var temp_data = $('#temp_data'),
		send_message = $('#send_message'), // форма отправки сообщения
		load_messages = $('#load_messages'), // ссылка на подгрузку ранее добавленных сообщений
		messages_block = $('#message_list'), // окно вывода сообщений 
		messages_list = $('#message_list table'), // блок вывода сообщений 
		message_blocks = $('#message_list tr'), // блок вывода сообщения
		messages_list_height = '500', // максимальная высота окна переписки
		messages_update_limit = '10000', // интервал обновления статуса сообщений
		auto_scroll = true,  // автоматическая прокрутка
		status_activity = 0;  // статус активности пользователя

	// изменение статуса активности пользователя
	$('body').mouseover(function () {
		status_activity++;
	});

	// id сообщения в DOM модели 
	function dom_message_id () {
		var msg_obj = $('.unread_to,.unread_from'), // первое не прочитанное сообщение
			dom_msg_id = msg_obj.prev().attr('id'); // id сообщения предшествующее первому не прочитанному

		if (dom_msg_id == undefined) {
			dom_msg_id = msg_obj.first().attr('id');

			if (dom_msg_id == undefined) {
				var last_msg = $('#message_list tr:last');
				dom_msg_id = last_msg.prev().attr('id');

				if (dom_msg_id == undefined) dom_msg_id = last_msg.attr('id');
			}
		}
		return dom_msg_id;
	};

	// id сообщения в формате int
	// используется для отправки запроса на сервер
	function message_id () {
		return dom_message_id().split('_')['1'];
	};

	// замена сообщения в списке
	$.fn.replaceMessage = function () {
		var new_msg = $(this),
			old_msg = messages_list.find('[id="' + new_msg.attr('id') +'"]');

		// есть что менять
		if (old_msg.length) old_msg.replaceWith(new_msg);
	};

	// добавить в начало
	$.fn.addToBefore = function (add_list) {
		$(this).prepend(add_list);
	};

	// добавить в конец
	$.fn.addToAffter = function (add_list) {
		$(this).append(add_list);
	};

	$.fn.maxHeight = function (max_height) {
		var height_block = $(this);

		if (height_block.height() > max_height) height_block.height(max_height + 'px');
		else height_block.height('auto');
	}

	// отправка формы по Ctrl+Enter
	send_message.find('textarea').keydown(function (e) {
		if (e.ctrlKey && e.keyCode == 13) send_message.submit();
	});

	// отправка/обновлене списка сообщений
	function update_messages(type, read_status) 
	{
		// отправка сообщения
		if (type == 'add') {
			var config = {
				data: 'JsHttpRequest=' + Math.round(new Date().getTime() / 1000) + '-xml&add_message=1&' + send_message.serialize() + '&after_message_id=' + message_id() + '&read_status=1'
			};
		}
		// обновдение списка сообщений
		else {
			var config = {
				data: {
					JsHttpRequest: Math.round(new Date().getTime() / 1000) + '-xml',
					after_message_id: message_id(),
					read_status: read_status
				}
			};
		}

		$.ajax ($.extend({
			context: messages_list,
			dataType: 'json',

			success: function (data) {

				// данные во временный блок
				temp_data.html(data.js.content);

				// удаляем первое сообщение из полученных данных, если блок сообщений обновлялся не полностью
				if (messages_block.find('tr:first').attr('id') != dom_message_id()) temp_data.find('tr:first').remove();

				var new_messages = temp_data.find('tr');

				// обновление информации о существующих сообщениях
				new_messages.each(function () {
					$(this).replaceMessage(message_blocks);
				});

				// дописать не существующие сообщения в конец пепериски
				$(this).addToAffter(new_messages);

				// ограничение максимальной высоты окна списка сообщений
				messages_block.maxHeight(messages_list_height);

				// очистка формы
				if (type == 'add') {
					$('#send_message textarea[name=text]').val('');
					// включаем автоматическую прокрутку
					auto_scroll = true;
				}

				// прокрутка списка сообщений в конец
				if (auto_scroll == true) messages_block.scrollTop(messages_block.children(':first').height());
			}
		}, config))
	}

	// ограничение максимальной высоты окна списка сообщений
	messages_block.maxHeight(messages_list_height);
	messages_block.scrollTop(messages_block.children(':first').height());

	// автообновлене списка сообщений
	if (messages_block.length) {
		setInterval(function () {
			if (status_activity > 10 && auto_scroll == true) read_status = 1;
			else read_status = 0;

			// сброс статуса активности пользователя
			status_activity = 0;

			update_messages('update', read_status);
		},messages_update_limit);
	}

	// отправка сообщения
	send_message.submit(function () {
		update_messages('add');
		return false;
	});

	// подгрузка старых сообщений
	load_messages.click(function () {
		$.ajax({
			context: messages_list,
			dataType: 'json',

			data: {
				JsHttpRequest : Math.round(new Date().getTime() / 1000) + '-xml',
				load_messages : 1,
				count_messages : messages_list.find('tr').length - 1
			},

			success: function (data) {
				// данные во временный блок
				temp_data.html(data.js.content);

				var new_messages = temp_data.find('tr');

				// скрываем ссылку на догрузку
				if (new_messages.is('.first_msg') && load_messages.is(':visible')) load_messages.fadeOut('fast');

				// обновление информации о существующих сообщениях
				new_messages.each(function () {
					$(this).replaceMessage(message_blocks);
				});

				// дописать не существующие сообщения в начало пепериски
				$(this).addToBefore(new_messages);

				// ограничение максимальной высоты окна списка сообщений
				messages_block.maxHeight(messages_list_height);
				// прокрутка списка сообщений в начало
				messages_block.scrollTop(0);
			}
		})

		return false;
	});

	// прокрутка чата
	messages_block.scroll(function () { 
		if (messages_block.scrollTop() >= messages_block.children(':first').height() - messages_list_height - 30) auto_scroll = true;
		else auto_scroll = false;
	});
});