/* begin: sort and search drop down */

menu_drop_down_opened = new Object();
function menu_drop_down_toggle(link, uid)
{
	//защита от дрюка, как правило даблклика
	if (menu_drop_down_opened[uid])
		return false;
	
	var header = $('.wrapper_container>.header');
	var drop_down = link.closest('.drop_down', header);
	var is_open = drop_down.hasClass('open');
	
	//закрывам другие списки
	$('.drop_down', header).removeClass('open');
	$('.drop_down .popup', header).hide();
	
	if (is_open)
	{
		$('.popup', drop_down).hide();
		drop_down.removeClass('open');
	}
	else
	{
		menu_drop_down_opened[uid] = 1;
		drop_down.addClass('open');
		$('.popup', drop_down).show('fast', function()
		{
			var body = $('.wrapper .wrapper_container');
			var body_width = body.width();
			var body_offset = body.offset();
			var popup_width = $('.popup', drop_down).width();
			var popup_offset = $('.popup', drop_down).offset();
			var is_right_pos = drop_down.hasClass('right_pos');

			//если что-то вылезает, то поправляем
			if (!is_right_pos && (popup_offset.left - body_offset.left + popup_width > body_width))
				drop_down.addClass('right_pos');
			else if (is_right_pos && (popup_offset.left < 0))
				drop_down.removeClass('right_pos');
				
			menu_drop_down_opened[uid] = 0;
		});
	}
	
	return false;
}

/* end: sort and search drop down */



















/* begin: extra drop down */

//для IE задаём правильный z-index relative слоёв
if ($.browser.msie && $.browser.version <= 7)
{
	$(document).ready(function()
	{
		$('.wrapper_container>.header').css('z-index', 3000);
		$('.wrapper_container>.content').css('z-index', 2000);
		//задаём z-index для списка постов
		var posts_list = $('.wrapper_container>.content ul.posts_list>li.item');
		posts_list.each(function(i, obj)
		{
			$(obj).css('z-index', posts_list.length - i);
		});
		
		//задаём z-index для списка медиа объектов на внтренней странице
		var media_objects = $('.wrapper_container>.content .inner_page .media_object .object, .wrapper_container>.content .inner_page .media_object .extra');
		media_objects.each(function(i, obj)
		{
			$(obj).css('z-index', media_objects.length - i);
		});
		
		//задаём z-index для ссылок внутри списка
		var drop_down = $('.wrapper_container>.content ul.posts_list>li.item .extra .drop_down');
		drop_down.each(function(i, obj)
		{
			$(obj).css('z-index', drop_down.length - i);
		});
	});
}


function extra_drop_down_toggle(link, is_inline)
{
	var fade_speed = 100;
	var slide_speed = 100;
	var margin_slide_speed = 300;
	
	var content = $('.wrapper_container>.content');
	var drop_down = link.closest('.drop_down');
	var is_open = drop_down.hasClass('open');
	var drop_down_class = drop_down.attr('class');
	var margin_top = '0.8em';

/*
	if ($.browser.msie && $.browser.version <= 7)
	{
		$('ul.posts_list>li.item', content).css('z-index', 700);
		$('.extra .drop_down', content).css('z-index', 700);
		
	}
*/
	//закрывам другие списки
	$('.extra .drop_down', content).each(function(i, obj)
	{		
		//пропускаем себя
		if (drop_down.attr('class') != $(obj).attr('class'))
		{
			if (is_inline)
				$(obj).css({'position': 'static', 'z-index': '1'});
			
			if ($(obj).hasClass('open'))
				extra_drop_down_close($(obj), is_inline, 0);
		}
	});
	
	
	if (is_open)
	{
		extra_drop_down_close(drop_down, is_inline, 1);
	}
	else
	{
/*
		if ($.browser.msie && $.browser.version <= 7)
		{
			drop_down.css('z-index', 800);
			drop_down.closest('ul.posts_list>li.item').css('z-index', 800);
		}
*/		
		drop_down.addClass('open');
		
		if (is_inline)
		{
			//если ссылки в один ряд, то открытому окну z-index задаём меньше, чем у других, что бы оно не перекрывало соседнюю ссылку
			$('.drop_down', drop_down.parent()).css({'position': 'relative', 'z-index': '1810'});
			drop_down.css({'position': 'relative', 'z-index': '1800'});
		}
		
		//подставляем такой же текст ссылки, что бы не прыгал дизайн во время анимации
		$('div.replacement', drop_down).text(link.text());
	
		if (!is_inline)
		{
			if (!drop_down.is(':first-child'))
				drop_down.css('margin-top', margin_top);
		}
		
		//репорт скрываем
		$('.report', drop_down).hide();


		if ($.browser.msie && $.browser.version <= 7)
		{
			$('.popup .button', drop_down).show();
			$('.popup .data', drop_down).show();
			
			extra_drop_down_correct_position(drop_down);
		}
		else
		{
			$('.popup .button', drop_down).fadeIn(fade_speed, function()
			{
				$('.popup .data', drop_down).slideDown(slide_speed, function()
				{
					extra_drop_down_correct_position(drop_down);
				});
			});
		}
	}
	
	return false;
}



function extra_drop_down_correct_position(drop_down)
{
	var body = $('.wrapper .wrapper_container');
	var body_width = body.width();
	var body_offset = body.offset();
	var popup_width = $('.popup', drop_down).width();
	var popup_offset = $('.popup', drop_down).offset();
	var is_right_pos = drop_down.hasClass('right_pos');

	//если что-то вылезает, то поправляем
	if (!is_right_pos && (popup_offset.left - body_offset.left + popup_width > body_width))
		drop_down.addClass('right_pos');
	else if (is_right_pos && (popup_offset.left < 0))
		drop_down.removeClass('right_pos');
}


function extra_drop_down_close(drop_down, is_inline, is_self)
{
	var margin_top = '0.1em';
	
	if ($.browser.msie && $.browser.version <= 7)
	{
		$('.popup .data', drop_down).hide();
		//$('.popup .button', drop_down).hide();
		//$('.popup .button', drop_down).show(); //показываем ссылку, которую только что скрыли и тут же следом убираем класс open
		drop_down.removeClass('open');
		
		if (is_inline && is_self)
			drop_down.css({'position': 'static', 'z-index': '1'});
		
		if (!is_inline)
		{
			if (!drop_down.is(':first-child'))
				drop_down.css('margin-top', margin_top);
		}
	}
	else
	{
		var fade_speed = 100;
		var slide_speed = 100;
		var margin_slide_speed = 300;
		
		if (!is_inline)
		{
			if (!drop_down.is(':first-child'))
			{
				drop_down.animate({marginTop: '0.1em'}, margin_slide_speed);
			}
		}
			
		$('.popup .data', drop_down).slideUp(slide_speed, function()
		{
			$('.popup .button', drop_down).fadeOut(fade_speed, function()
			{
				$(this).show(); //показываем ссылку, которую только что скрыли и тут же следом убираем класс open
				drop_down.removeClass('open');
				
				if (is_inline && is_self)
					drop_down.css({'position': 'static', 'z-index': '1'});
			});
		});
	}
}


/* end: extra drop down */

















/* begin: zoom image */

function zoom_image(img, type, scale_direction, thumb_url, thumb_width, thumb_height, medium_url, medium_width, medium_height, zoom_more)
{
	//что бы вызов ф-и, прописанный непосредственно у катинки нам больше не мешался
	img.attr('onclick', 'return false;');
	
	if (scale_direction == 'in')
	{
		var container = img.closest('.image_preview');
		
		var medium_img = new Image();
		
		//покрываем thumb img перелой загрузки
		container.addClass('loading');
		//$('.loading_bg', container).fadeIn('fast');
			
		//когда большее (medium) изображение загружится, начнёв плавное увеличение
		medium_img.onload = function()
		{
			zoom_image_in(img, container, type, thumb_url, thumb_width, thumb_height, medium_url, medium_width, medium_height, zoom_more);
		};
		
		//при отмене или ошибке загрузки изображения снимаем возвращает вид и фнкционал thumb img в исходное состояние
		medium_img.onerror = medium_img.onabort = function()
		{
			img.attr('src', thumb_url);
			//снимаем перелу
			container.removeClass('loading');
			//лепим на картинку лупу увеличения
			img.addClass('zoom_in');
			img.removeClass('zoom_out');
			
			//привязываем событие - при клике увеличить изображение
			img.one('click', function(){return zoom_image(img, type, 'out', thumb_url, thumb_width, thumb_height, medium_url, medium_width, medium_height, zoom_more);});
		};
		
		medium_img.src = medium_url;
	}
	else //уменьшаем изображение
	{
		if (zoom_more)
		{
			//убираем ссылку "Увеличить ещё больше" при наведении на картинку
			$('span.zoom_more_bar', img.parent()).removeClass('show');
		}
		
		
		if (type == 'cat_list')
		{
			//для блока extra
			var image_preview = img.closest('.image_preview');
			//возвращаем ширину info блока
			image_preview.siblings('.info').animate({width: '255px'}, 'fast');
			//возвращаем выпадающему списку extra выравнивание по левому краю
			$('.drop_down', image_preview.siblings('.extra')).removeClass('right_pos');
		}
		
		if (type == 'cat_list')
		{
			if ($.browser.msie)
			{
				var left = '0';
				var bottom = '0';
			}
			else
			{
				var left = 'auto';
				var bottom = 'auto';
			}
		}
		else if (type == 'clown')
		{
			var left = 0;
			var bottom = 0;
		}
		
		if (type == 'clown')
			img.parent().animate({width: thumb_width + "px", height: thumb_height + "px", left: left, bottom: bottom}, 'fast');
		img.animate({width: thumb_width + 'px', height: thumb_height + 'px', left: left, bottom: bottom}, 'fast', function()
		{
			if (type == 'clown')
			{
				img.css('position', 'static');
				img.parent().css('position', 'relative');
			}
			
			img.attr('src', thumb_url);
			img.addClass('zoom_in');
			img.removeClass('zoom_out');
			img.one('click', function(){return zoom_image(img, type, 'in', thumb_url, thumb_width, thumb_height, medium_url, medium_width, medium_height, zoom_more);});
		});
	}
	
	return false;
}


function zoom_image_in(img, container, type, thumb_url, thumb_width, thumb_height, medium_url, medium_width, medium_height, zoom_more)
{
	//маленькому изображению перед увеличением задаём URL адрес большого
	img.attr('src', medium_url);
	//снимаем пелену
	container.removeClass('loading');
	//отвязываем загрузку от изображения
	img.unbind();
	//меняем иконки луп
	img.removeClass('zoom_in');
	img.addClass('zoom_out');
	
	if (type == 'cat_list')
	{
		//для блока extra
		var image_preview = img.closest('.image_preview');
		//уменьшаем ширину info блока, что бы уместилась extra
		image_preview.siblings('.info').animate({width: '200px'}, 'fast');
		//задаём выпадающему списку extra выравнивание по правому краю
		$('.drop_down', image_preview.siblings('.extra')).addClass('right_pos');
	}
	

	if (type == 'cat_list')
	{
		var left = "auto";
		var bottom = "auto";
	}
	else if (type == 'clown')
	{
		//задаём числовой тип
		thumb_width = thumb_width * 1;
		medium_width = medium_width * 1;
		var left = -Math.round(medium_width / 2 - thumb_width / 2) + "px";
		
		//задаём числовой тип
		thumb_height = thumb_height * 1;
		medium_height = medium_height * 1;
		var bottom = -Math.round(medium_height / 2 - thumb_height / 2) + "px";
		
		img.css({'position': 'absolute', 'left': 0, 'bottom': 0});
		img.parent().css({'position': 'absolute'});
	}
	
	if (type == 'clown')
		img.parent().animate({width: medium_width + "px", height: medium_height + "px", left: left, bottom: bottom}, 'fast');
	
	img.animate({width: medium_width + "px", height: medium_height + "px"}, 'fast', function()
	{
		if (zoom_more)
		{
			//показывает ссылку "Увеличить ещё больше" при наведении на картинку
			$('span.zoom_more_bar', img.parent()).addClass('show');
		}
		
		img.one('click', function(){return zoom_image(img, type, 'out', thumb_url, thumb_width, thumb_height, medium_url, medium_width, medium_height, zoom_more);});
	});
}

function zoom_image_more(obj, big_url)
{
	return thickbox(obj.parent(), 1, big_url);
}

/* end: zoom image */













/* begin: zoom video */
function zoom_video(video_preview, file, type, player_id, player_div_id)
{
	video_preview.attr('onclick', 'return false;');

	if (type == 'cat_list')
	{
		//уменьшаем ширину info блока, что бы уместилась extra
		video_preview.siblings('.info').animate({width: '200px'}, 'fast');
		//задаём выпадающему списку extra выравнивание по правому краю
		$('.drop_down', video_preview.siblings('.extra')).addClass('right_pos');
	}
	
	if (type == 'cat_list')
	{
		if ($.browser.msie)
		{
			var left = '0';
			var bottom = '0';
		}
		else
		{
			var left = 'auto';
			var bottom = 'auto';
		}
	}
	else if (type == 'clown')
	{
		var left = "-121px";
		var bottom = "-83px";
		video_preview.css({'position': 'absolute', 'left': 0, 'bottom': 0});
	}
	
	if (type == 'cat_list')
		var zoom_out_callback = 'zoom_out_video_for_cat_list';
	else if (type == 'clown')
		var zoom_out_callback = 'zoom_out_video_for_clown';
	
	$('.play_icon', video_preview).hide();
	$('img', video_preview).animate({width: "320px", height: "260px", opacity: 0}, 'fast', function(){ $(this).hide(); });
	video_preview.animate({width: "320px", height: "260px", left: left, bottom: bottom}, 'fast', function()
	{
		$('#' + player_id, video_preview).css({width: "320px", height: "260px"});
		
		//если плеер ещё не создан
		if ($('#' + player_id).length == 0)
		{
			$('#' + player_div_id, video_preview).show();
			$('#' + player_div_id, video_preview).text('Для просмотра видео необходимо включить JavaScript и установить Adobe Flash Player 7.0 и выше');
			
			var params = {
				'wmode': 'transparent',
				'allowfullscreen': 'true',
				'allowscriptaccess': 'always'
			};
			
			var flash_vars = {
				'file': escape(file),
				'dock': 'true'
				//,'autostart': 'true'
			};
			
			var attributes = {
				'id': player_id,
				'name': player_id
			};
			
			
			swfobject.embedSWF(SITE_ROOT + 'lib/media/flv_player.swf', player_div_id, '320', '260', '7.0.0', SITE_ROOT + 'lib/media/expressInstall.swf', flash_vars, params, attributes, function(e)
			{
				if (e.success)
				{
					//alert(e.ref.id);
					register_player_events(swfobject.getObjectById(player_id), zoom_out_callback, 1);
				}
			
			});
		}
		else
		{
			register_player_events(swfobject.getObjectById(player_id), zoom_out_callback, 1);
		}
	});

	return false;
}

i = 0;
function register_player_events(player, zoom_out_callback, register_play_event)
{
	if (typeof(player.addControllerListener) == 'function' || typeof(player.addControllerListener) == 'object')
	{
		player.removeControllerListener('STOP', zoom_out_callback);
		player.addControllerListener('STOP', zoom_out_callback);
		
		if (register_play_event)
			player.sendEvent('PLAY', 'TRUE');
	}
	else
		setTimeout(function(){ register_player_events(player, zoom_out_callback, register_play_event); }, 100);
}


function zoom_out_video_for_cat_list(player)
{
	var video_preview = $('#' + player.id).closest('.video_preview');

	//возвращаем ширину info блока
	video_preview.siblings('.info').animate({width: '255px'}, 'fast');
	//возвращаем выпадающему списку extra выравнивание по левому краю
	$('.drop_down', video_preview.siblings('.extra')).removeClass('right_pos');

	//display: none для <object> использовать нельзя, иначе opera взбесится
	$('#' + player.id).css({width: 0, height: 0});
	
	$('img', video_preview).show();
	$('img', video_preview).animate({width: "150px", height: "95px", opacity: 1}, 'fast');
	video_preview.animate({width: "150px", height: "95px"}, 'fast', function()
	{
		$('.play_icon', video_preview).show();
		
		video_preview.one('click', function()
		{
			return zoom_video(video_preview, '', 'cat_list', player.id);
		});
	});

	return false;
}

function zoom_out_video_for_clown(player)
{
	var video_preview = $('#' + player.id).closest('.video_preview');

	//display: none для <object> использовать нельзя, иначе opera взбесится
	$('#' + player.id).css({width: 0, height: 0});

	$('img', video_preview).show();
	$('img', video_preview).animate({width: "103px", height: "65px", opacity: 1}, 'fast');
	video_preview.animate({width: "77px", height: "65px", left: 0, bottom: 0}, 'fast', function()
	{
		$('.play_icon', video_preview).show();
		
		video_preview.one('click', function()
		{
			return zoom_video(video_preview, '', 'clown', player.id);
		});
	});

	return false;
}

/* end: zoom video */

































/* begin: vote */

function vote(link, post_id, type)
{
	var vote = link.closest('.vote');
	var rating = $('.rating', vote);
	var plus = $('a.plus', vote);
	var minus = $('a.minus', vote);
	var result = $('.result', link);
	var msg = $('.msg', link);
	var hide_result_delay = 2000;
	var many_rating = 5;
	
	//если голосование за пост уже идёт, то повторных запросов для поста не посылаем
	if ($('.result', plus).css('display') != 'none' || $('.result', minus).css('display') != 'none')
		return false;

	link.css('outline-width', '0');	
	plus.css('cursor', 'progress');
	minus.css('cursor', 'progress');
	$('.h, .v', vote).css('cursor', 'progress');
	
	result.removeClass('wait good bad');
	
	result.fadeIn('fast', function()
	{
		if (vote.hasClass('already_voted'))
		{
			result.addClass('bad');
			msg.text('Вы уже голосовали');
			
			vote_hide_result(plus, minus, vote, result, link, hide_result_delay);
		}
		else
		{
			result.addClass('wait');
			msg.text('Идёт отправка Вашего голоса...');
			
			$.ajax({
				type: "GET",
				url: SITE_ROOT + "ajax.php",
				data: {'vote': '', 'post_id': post_id, 'type': type},
				timeout: 30000, //30 сек
				dataType: 'json',
				
				success: function(response)
				{
					result.removeClass('wait');
					
					if (response.code == 'good')
					{
						result.addClass('good');
						vote.addClass('already_voted');
						msg.text('Вы успешно проголосовали!');
						
						var rating_class = ['rating'];
						
						response.rating = response.rating * 1; //преобразуем в число на всякий случай
						
						if (response.rating > 0)
							rating_class.push('good');
						else if (response.rating < 0)
							rating_class.push('bad');

						if ((response.rating >= many_rating && response.rating > 0) || (response.rating <= -many_rating && response.rating < 0))
							rating_class.push('many');
						
						//обновляем css класс рейтинга
						rating.removeClass();
						rating.addClass(rating_class.join(' '));

						//обновляем число голосов
						rating.text(response.rating);
					}
					else if (response.code == 'bad')
					{
						result.addClass('bad');
						msg.text('Ошибка при голосовании');
					}
					else if (response.code == 'already_voted')
					{
						result.addClass('bad');
						msg.text('Вы уже голосовали');
					}
					else if (response.code == 'post_not_exists')
					{
						result.addClass('bad');
						msg.text('Данный пост был удалён');
					}
					else if (response.code == 'no_type')
					{
						result.addClass('bad');
						msg.text('Не указан тип голосования (за или против)');
					}
					else
					{
						result.addClass('bad');
						msg.text('Произошло что-то неладное');
					}
					
					vote_hide_result(plus, minus, vote, result, link, hide_result_delay);
				},
				
				error: function (response)
				{
					result.removeClass('wait');
					result.addClass('bad');
					
					if (response.status == 0)
						msg.text('Превышено время ожидания. Проголосуйте заново.');
					else
						msg.text('Внутренняя ошибка голосования.'); // + response.responseText
						
					vote_hide_result(plus, minus, vote, result, link, hide_result_delay);
				}
			});
		}
	});
	

	return false;
}

function vote_hide_result(plus, minus, vote, result, link, hide_delay)
{
	plus.css('cursor', 'default');
	minus.css('cursor', 'default');
	$('.h, .v', vote).css('cursor', 'default');
	
	//скрываем сообщение, код тот же, что и в success ф-и
	setTimeout(function()
	{
		result.fadeOut('fast', function()
		{
			link.css('outline-width', '1px');
			plus.css('cursor', 'pointer');
			minus.css('cursor', 'pointer');
			$('.h, .v', vote).css('cursor', 'pointer');
		});
	
	}, hide_delay);
}

/* end: vote */









/* begin: comments editor */

$(document).ready(function()
{
	comments_editor_form = $('#comments_bbcode_editor').closest('form');
	var is_gecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
	
	//если поддерживается дизайн мод, то включаем визуальный редактор
	if (document.designMode && false)
	{
		$('#comments_bbcode_editor').after('<iframe frameborder="0" src="#" id="comments_visual_editor" name="comments_visual_editor"></iframe>');
		$('#comments_bbcode_editor').hide();
		var visual_editor = $('#comments_visual_editor');
		
		// Получаем доступ к объектам window & document для ифрейма
		visual_editor_iframe = (is_gecko) ? document.getElementById("comments_visual_editor") : frames["comments_visual_editor"];
		visual_editor_document = (is_gecko) ? visual_editor_iframe.contentDocument : visual_editor_iframe.document;

		comments_editor_form.submit(function()
		{
			alert(visual_editor_document.body.innerHTML);
			return false;
		});

		//заготовка для нашего визального редактора
		var blank_html = '';
		blank_html += '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
		blank_html += '<html xmlns="http://www.w3.org/1999/xhtml">';
		blank_html += '<head>';
		blank_html += '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
		blank_html += '<link rel="stylesheet" href="' + THEME_ROOT + 'css/comments_visual_editor.css" type="text/css" media="all" />';
		blank_html += '<title></title>';
		blank_html += '</head>';
		blank_html += '<body>test test test';
		blank_html += '</body>';
		blank_html += '</html>';
		

		// Добавляем его с помощью методов объекта document
		visual_editor_document.open();
		visual_editor_document.write(blank_html);
		visual_editor_document.close();
		
		visual_editor_document.designMode = (is_gecko) ? "on" : "On";
		$('input[name$=__editor_type]', comments_editor_form).val('visual_html');
	}
});


function comments_editor_insert_strong()
{
	var visual_editor = $('#comments_visual_editor');
	
}



function comments_editor_insert_strong()
{
	var editor_type = $('input[name$=__editor_type]', comments_editor_form).val();
	
	if (editor_type == 'bbcode')
		insert_in_textarea($('#comments_bbcode_editor', comments_editor_form), '', '[b]', '[/b]');
	else if (editor_type == 'visual_html')
	{
		alert('Opa!');
	}

	return false;
}

function comments_editor_insert_em()
{
	var editor_type = $('input[name$=__editor_type]', comments_editor_form).val();

	if (editor_type == 'bbcode')
		insert_in_textarea($('#comments_bbcode_editor', comments_editor_form), '', '[i]', '[/i]');
	else if (editor_type == 'visual_html')
	{
		alert('Opa!');
	}
	
	return false;
}


function comments_editor_insert_link()
{
	var editor_type = $('input[name$=__editor_type]', comments_editor_form).val();

	if (editor_type == 'bbcode')
	{
		var textarea = $('#comments_bbcode_editor', comments_editor_form);

		var url = prompt("Введите URL адрес:", "http://");
		if (!url)
			return false;
		
		url = $.trim(url);
		
		if (url == '' || url == "http://")
			return false;
		
		var selection = textarea.getSelection();
		//если текст выделен
		if (selection.length > 0)
			var link_text = selection.text;
		else
		{
			var link_text = prompt("Введите текст ссылки:", "");
			if (!link_text && typeof(link_text) != 'string')
				return false;
		}
		
		//текщий домен, без www
		var self_domain = $.trim(location.href.replace(/^[^\/]+\/\/(?:[^\@]*\@)?(www\.)?([^\/]+).+$/, '$2'));
		
		var parsed_url = /^(?:([a-z0-9_-]+):(?:\/\/)?)?(?:[^\@]*\@)?([^\/]+\.[^\/\.]+)?([^\?]*)(\?.*)?$/i.exec(url);
		if (parsed_url != null)
		{
			var protocol = $.trim(parsed_url[1]);
			var domain = $.trim(parsed_url[2]);
			var path = $.trim(parsed_url[3]);
			var query_str = $.trim(parsed_url[4]);
			
			if (domain == '' && path == '' && query_str == '')
				return false;
			
			if (url.charAt(0) != '#')
			{
				if ((protocol == 'http' || protocol == '') && (domain == self_domain || domain == 'www.' + self_domain))
					url = path + query_str;
				else if (protocol == '' && url.charAt(0) != '/')
					url = 'http://' + url;
					
				if ($.trim(link_text) == '')
					link_text = domain + path;
			}
			else
			{
				if ($.trim(link_text) == '')
					link_text = url.substr(1);
			}
		}
		
		//вставляем код ссылки в редактор
		insert_in_textarea(textarea, link_text, '[url=' + url + ']', '[/url]')
	}
	else if (editor_type == 'visual_html')
	{
		alert('Opa!');
	}
	
	return false;
}

/* end: comments editor */





























function insert_in_textarea(target_textarea, text, prepend_text, append_text, empty_text_replacement)
{
	if (target_textarea instanceof jQuery)
		target_textarea = target_textarea.get(0);

	if (typeof(text) != 'string' && typeof(text) != 'number')
		text = '';	
	
	if (typeof(prepend_text) != 'string' && typeof(prepend_text) != 'number')
		prepend_text = '';
		
	if (typeof(append_text) != 'string' && typeof(append_text) != 'number')
		append_text = '';
		
	if (typeof(empty_text_replacement) != 'string' && typeof(empty_text_replacement) != 'number')
		empty_text_replacement = '';
	
	
	var selection = $(target_textarea).getSelection();
	//если текст выделен
	if (selection.length > 0)
	{
		if (prepend_text == '' && append_text == '')
		{
			$(target_textarea).replaceSelection(selection.text + text);
		}
		else
		{
			//если текст не задан, то оставляем выделенный
			if (text == '')
				text = selection.text;
			
			$(target_textarea).replaceSelection('' + prepend_text + text + append_text); //пустая строка в начале - на случай, если все параметры - числа (тогда они сложатся)
		}
	}
	else
	{
		if (text == '')
			text = empty_text_replacement;
		
		insert_at_caret(target_textarea, '' + prepend_text + text + append_text); //пустая строка в начале - на случай, если все параметры - числа (тогда они сложатся)
		set_caret_position(target_textarea, get_caret_position(target_textarea) - append_text.length);
	}
}

function insert_at_caret(field, str)
{
	if (field instanceof jQuery)
		field = field[0];
	
	if (document.selection)
	{
		field.focus();
		var selection = document.selection.createRange();
		selection.text = selection.text + str;
		field.focus();
	}
	else if (field.selectionStart || field.selectionStart == "0")
	{
		var end_pos = field.selectionEnd;
		field.value = field.value.substring(0, end_pos) + str + field.value.substring(end_pos);
		
		field.focus();
		field.selectionStart = end_pos + str.length;
		field.selectionEnd = end_pos + str.length;
	}
	else
	{
		field.value = field.value + str;
		field.focus();
	}
}


//устанавливает каретку в текстовом поле на определённоую полицию
function set_caret_position(input_obj, pos)
{
	if (input_obj instanceof jQuery)
		input_obj = input_obj.get(0);
	
	if (input_obj.setSelectionRange)
	{
		input_obj.focus();
		input_obj.setSelectionRange(pos, pos);
	}
	else if (input_obj.createTextRange)
	{
		var range = input_obj.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}

function get_caret_position(nBox)
{
	if (nBox instanceof jQuery)
		nBox = nBox[0];
	var cursorPos = 0;
		if (document.selection)
		{ 
			 nBox.focus();
				 var tmpRange = document.selection.createRange();
			 tmpRange.moveStart('character',-nBox.value.length);
			 cursorPos = tmpRange.text.length;
			}
		else 	{
		 if (nBox.selectionStart || nBox.selectionStart == '0')
			{
			 cursorPos = nBox.selectionEnd;
			}
		}
	//var lineNumber =  parseInt(cursorPos/25) + 1;  // 25 is the number of textarea columns
	
	return cursorPos;
}
/*
function input_checked_onfocus(obj, class_name, value, checkbox_id)
{
	obj.className = class_name;
	document.getElementById(checkbox_id).checked = 'checked';
	
	if (obj.value == value)
		obj.value = '';
}

function input_checked_onblur(obj, class_name, value)
{
	if (obj.value == '')
	{
		obj.className = class_name;
		obj.value = value;
	}
}
*/


function placeholder_onfocus(obj, class_name, value)
{
	obj.className = class_name;
	
	if (obj.value == value)
		obj.value = '';
}

function placeholder_onblur(obj, class_name, value)
{
	if (obj.value == '')
	{
		obj.className = class_name;
		obj.value = value;
	}
}



/* begin: error reporting */

function get_selected_text()
{
	var text = null;
	var w = parent;
	var selection = null;

	var contunit = "word";
	var contlen = 10;

	if (w.getSelection)
		text = w.getSelection();
	else if (w.document.getSelection)
		text = w.document.getSelection();
	else
		selection = w.document.selection;

	var context = null;

	if (selection)
	{
		var r = selection.createRange();
		if (!r)
			return;
		
		text = r.text;
		
		var s = 0; 
		while (text.charAt(s) == " " || text.charAt(s) == "\n")
			s++;
			
		var e = 0; 
		while (text.charAt(text.length - e - 1) == " " || text.charAt(text.length - e - 1) == "\n")
			e++;
			
		var rngA = selection.createRange();
		rngA.moveStart(contunit, -contlen);
		rngA.moveEnd("character", -text.length + s);
		
		var rngB = selection.createRange();
		rngB.moveEnd(contunit, contlen);
		rngB.moveStart("character", text.length - e);
		
		text = text.substring(s, text.length - e);
		//context = [rngA.text, text, rngB.text, 0];
		context = text;
	}
	else
		context = text;
		
	return jQuery.trim('' + context);
}





document.onkeypress = function(e)
{
	var pressed = 0;
	var we = null;
	
	if (window.event)
		we = window.event;
	else if (parent && parent.event)
		we = parent.event;
		
	if (we)
	{
		// IE & Opera
		pressed = we.keyCode==10 ||  // IE
			(we.keyCode == 13 && we.ctrlKey); // Opera 
	}
	else if (e)
	{
		// NN
		pressed = 
			(e.which==10 && e.modifiers==2) || // NN4
			(e.keyCode==0 && e.charCode==106 && e.ctrlKey) ||
			(e.keyCode==13 && e.ctrlKey); // Mozilla
	}
	
	var text = get_selected_text();
	if (pressed && text != '')
	{
		if (confirm('Отправить сообщение об ошибке? Страница не перезагрузится.'))
		{
			$.post(THEME_ROOT + 'error_report.php', {url: location.href, text: text}, function (response)
			{
				if (response == 'good')
					alert('Сообщение об ошибке отправлено. Спасибо!');
				else
					alert('Ошибка при отправке сообщения. Попробуйте ещё раз или обратитесь к администратору сайта.');
			}, 'text');
		}
		
		return false;
	}
}

/* end: error reporting */











/* begin: upload form */


//здесь храним данные обо всех формах отправки
uploads_forms = new Object();
//сохраняем последнюю закачивающуюся форму
last_upload_form_id = '';

function upload_form(form)
{
	var options = {
		//элемент, который будет обновлен по ответу сервера
		target: "",
		beforeSubmit: upload_form_before,
		success: upload_form_success,
		error: upload_form_error,
		timeout: 300000, //300 сек
		dataType: 'json'
	};
	
	//сохраняем в массиве текущую форму
	uploads_forms[form.attr('id')] = new Object();
	$('.report', form).fadeOut('fast');
	form.ajaxSubmit(options);
	
	return false;
}

// вызов перед передачей данных
function upload_form_before(form_data, form, options)
{
	//сохраняем id текущей формы для обработчика ошибок
	last_upload_form_id = form.attr('id');
	
	//сохраняем текст кнопки, что бы потом восстановить его
	uploads_forms[form.attr('id')].old_val = $('input.submit', form).val();

	//выключаем кнопку отправки
	$('input.submit', form).val('Идёт отправка...');
	$('input.submit', form).attr('disabled', 'true');
	form.submit(function(){ return false; });
	
	return true;
}

// вызов после получения ответа 
function upload_form_success(response, status, form)
{
	//восстанавливаем текст кнопки
	$('input.submit', form).val(uploads_forms[form.attr('id')].old_val);
	//включает отправку
	$('input.submit', form).attr('disabled', '');
	form.submit("upload_form(" + form + ")");
	
	$('.report', form).fadeOut('fast', function()
	{
		if (response.code == 'post_not_exists')
		{
			var report_class = 'error';
			var report_text = 'Данный пост был удалён';
		}
		else if (response.code == 'empty_friend_email')
		{
			var report_class = 'error';
			var report_text = 'Не указан e-mail друга';
		}
		else if (response.code == 'bad_friend_email')
		{
			var report_class = 'error';
			var report_text = 'E-mail имеет неверный формат';
		}
		else if (response.code == 'not_exists_post_type')
		{
			var report_class = 'error';
			var report_text = 'Неверный тип поста';
		}
		else if (response.code == 'good')
		{
			var report_class = 'inform';
			var report_text = 'Письмо отправлено';
		}
		else if (response.code == 'bad')
		{
			var report_class = 'error';
			var report_text = 'Ошибка. Письмо не отправлено';
		}
		else
		{
			var report_class = '';
			var report_text = '';
		}


		$('.report', form).removeClass('error warning inform');
		
		$('.report', form).addClass(report_class);
		$('.report', form).text(report_text);
		
		
		$('.report', form).fadeIn('fast', function()
		{
			if (response.code == 'good')
				form.resetForm();
		});
	});
}


function upload_form_error(text)
{
	//т.к. в error ф-е нельзя полчить доступ к форме, ориентируемся на last_upload_form_id
	var form = $('#' + last_upload_form_id);
	
	//восстанавливаем текст кнопки
	$('input.submit', form).val(uploads_forms[form.attr('id')].old_val);
	//включает отправку
	$('input.submit', form).attr('disabled', '');
	form.submit("upload_form(" + form + ")");
	
	$('.report', form).fadeOut('fast', function()
	{
		$('.report', form).removeClass('error warning inform');
		$('.report', form).addClass('error');
		
		var error_msg = 'Ошибка, попробуйте повторить запрос.';
		/*
		if (text.responseText != '')
			error_msg = error_msg + ' Ответ сервера: ' + text.responseText;
		*/
		$('.report', form).text(error_msg);
		$('.report', form).fadeIn('fast');
	});
}


/* end: upload form */










function force_download(obj, url)
{
	var force_url = SITE_ROOT + 'force_download.php?file=' + escape(url);
	//obj.attr('href', force_url);
	location.href = force_url;
	return false;
}











function print_preview(nr)
{
	if (document.getElementsByTagName)
		var x = document.getElementsByTagName('link');
	else if (document.all)
		var x = document.all.tags('link');
	else
	{
		alert('Версия для печати формируется автоматически перед печатью. Вы можете увидеть её, выбрав в меню вашего браузера Файл->Предварительный просмотр.');
		return;
	}
	
	var print_msg = '<p>Версия для печати формируется автоматически при печати или в предварительном просмотре («Файл->Предварительный просмотр» в меню вашего браузера), так что для печати не обязательно переходить на данную страницу.</p><div class="return"><a href="#" onclick="print_preview(0); return false;">&larr; <span>Вернуться к экранной версии</span></a></div><div class="no_print">(данный блок распечатан не будет)</div>';
	
	if (!nr)
	{
		$('#print_msg, #print_msg_bottom').remove();
	}
	else
	{
		$('body').prepend('<div id="print_msg">' + print_msg + '</div>')
		$('body').append('<div id="print_msg_bottom">' + print_msg + '</div>')
	}

	for (var i=0;i<x.length;i++)
	{
		if(x[i].title == 'printview')
			x[i].disabled = !nr;
		
		/*
		if(x[i].title == 'screenview')
			x[i].disabled = nr;
		*/
	}
	
	document.location = "#";
	
	return false;
}
