var dd_shown = false; // handles currently open dropdown
var dd_shown_trigger = false; // handles currently open dropdown trigger
formElements  = new Array("input", "select", "textarea", "button");

/**
 * 
 */

function init_handlers(){
	$(document).click(document_click); // Ловит любой щелчок на странице. Левая и правая кнопки мыши.
	$(document).keydown(document_keydown); // Триггер продублирован в теле странице, сразу за тамбнейлами
}


/*
 * Форма авторизации
 */
function authorize(){
	$("#s-auth-show-click").click(function(){
		$("#s-user-auth").show();
		$("#s-user-links").hide();
		return false;
	});
}


/*
 * Расставляем обработчики фокуса/блюра для элементов формы.
 * Это нужно для того, чтобы шоткаты на листалку фотографий не срабатывали при фокусе на формовых элементах (textarea, например)
 */
function add_focus_events(){
	for (i in formElements) {
		$(formElements[i]).focus(function(){
			$(this).data("focused", 1);
		});
		$(formElements[i]).blur(function(){
			$(this).data("focused", 0);
		});
		i++;
	}
}
/*
 * Функции для листалки Вперед-назад
 */
function next_photo(){
	var link = $("a[rel='next']", ".b-thumbs-gallery");
	if (link.length) {
		location.href = link.attr("href");
	}
}


function prev_photo(){
	var link = $("a[rel='prev']", ".b-thumbs-gallery");
	if (link.length) {
		location.href = link.attr("href");
	}
}


/*
 * Проверяем где находится фокус. Не на элементе формы случайно?
 */
function check_focused_els() {
	no_focused_form_els = true; 
	for(i in formElements){
		$(formElements[i]).each(function(){
			if ($(this).data("focused")) {
				no_focused_form_els = false; 
			}
		});
		i++;
	}
	return no_focused_form_els;
} 

/*
 * Комбинации клавиш для листалки фотографий
 */
function document_keydown(e){
	if (check_focused_els()) {
		if (e.which == 32) {
			next_photo();
		}
		else if (e.ctrlKey) {
			switch (e.keyCode) {
				case 37:
					prev_photo();
					break;
				case 39:
					next_photo();
					break;
			}
		}
	}
}


/*
 * Обработчик кликов мыши
 */

function document_click(e) {
	if (e.button == 0) { // Только щелчки левой кнопкой.
		hide_dropdown();
	}
}


/*
 * Функции для выпадушек
 */

function dropdown_trigger_click(e){
	if ($(e.target).get(0) != dd_shown_trigger) {
		hide_dropdown();
		show_dropdown(e);
	} else { // already opened trigger clicked
		hide_dropdown();
	}

	e.stopPropagation();
	return false;
}


function dropdown_click(e){
	var pass_click = false;
	if (
	(e.target.tagName == "A") ||
	((e.target.tagName == "INPUT") && (($(e.target).attr("type") == "button") || ($(e.target).attr("type") == "submit"))) ||
	(e.target.tagName == "BUTTON")
	) { // prevent from dropdown collapsing on clicking it, exept of nested links and buttons
		pass_click = true;
	}
	if (!pass_click) {
		e.stopPropagation();
		return false;
	}
}


function show_dropdown(e){
	var cur_trigger = $(e.target);
	var dd = $(".s-dropdown",cur_trigger.parents(".b-dropdown-container"));
	var dd_full_height = dd.height() + parseInt(dd.css("paddingTop")) + parseInt(dd.css("paddingBottom")) + parseInt(dd.css("borderTopWidth")) + parseInt(dd.css("borderBottomWidth"));
	var trigger_full_height = cur_trigger.height() + parseInt(cur_trigger.css("paddingTop")) + parseInt(cur_trigger.css("paddingBottom")) + parseInt(cur_trigger.css("borderTopWidth")) + parseInt(cur_trigger.css("borderBottomWidth"));
	var scroll_padding = 11; // padding from top or bottom of dropdown when scrolling
	var viewport_height = $.browser.msie ? $(window).height() : window.innerHeight;
	var scroll_top = $.browser.msie ? document.documentElement.scrollTop : window.pageYOffset;
	var top_element = $.browser.safari ? $("body") : $("html"); // Safari have scrollTop on <body> instead of <html> in other browsers
        	
	if ((viewport_height + scroll_top) < (cur_trigger.offset().top + trigger_full_height + dd_full_height + scroll_padding)) {
		if (trigger_full_height + dd_full_height > viewport_height) { // dropdown height is greater than viewport height
			var scroll_to = cur_trigger.offset().top - scroll_padding; // scroll to top of trigger
		} else {
			var scroll_to = cur_trigger.offset().top + trigger_full_height + dd_full_height - viewport_height + scroll_padding + 50;
		}
		
		top_element.animate({ scrollTop: scroll_to }, "slow");
	}
	
	dd.parent().css("zIndex","100"); // IE z-index bug fix
	
	dd.show();
	dd_shown = dd;
	dd_shown_trigger = cur_trigger.get(0);

	if (cur_trigger.is(".show-arrow")) {
		cur_trigger.removeClass("show-arrow");
		cur_trigger.addClass("hide-arrow");
	}
	
	// If '.show-arrow' is placed inside '.s-dropdown-trigger' 
	cur_trigger.find(".show-arrow").removeClass("show-arrow").addClass("hide-arrow");
	
	
	if (cur_trigger.is(".s-bind-dropdown")){
	    dd.css("top",cur_trigger.offset().top-cur_trigger.parents(".b-dropdown-container").offset().top-dd_full_height/2+"px");	    
	    if (dd.offset().top<scroll_top) //dropdown top may be less than scrollTop because of dd_full_height/2 shift 
	        top_element.animate({ scrollTop: dd.offset().top }, "slow"); 
	}	
}


function hide_dropdown(){
	if (dd_shown) {
		dd_shown.hide();
		//if ($.browser.msie)					in FF we need it too
		dd_shown.parent().css("zIndex","0"); // IE z-index bug fix
		var cur_trigger = $(dd_shown_trigger);
		if (cur_trigger.is(".hide-arrow")) {
			cur_trigger.removeClass("hide-arrow");
			cur_trigger.addClass("show-arrow");
		}
        // If '.show-arrow' is placed inside '.s-dropdown-trigger' 
        cur_trigger.find(".hide-arrow").removeClass("hide-arrow").addClass("show-arrow");
		dd_shown = false;
		dd_shown_trigger = false;
	}
}

/**
 * Биндим ивенты для выпадушек
 */

$(".s-dropdown-trigger").bind("click.dropdown",dropdown_trigger_click);
$(".s-dropdown").bind("click.dropdown",dropdown_click);
$(".s-dropdown .s-btn-cancel").bind("click.dropdown",hide_dropdown);


/**
 * Показывает и скрывает в зависимости от аяксового ответа тот или иной вариант.
 * Работает или с POST, или c GET
 */
function ajax_switching(e){
	var clicked = $(e.target);
	var parent = clicked.closest(".s-ajax-switcher");
	if (clicked.get(0).tagName.toLowerCase() == "input"){
		var url = parent.attr("action");
	} else {			
		var url = clicked.attr("href");
	}
	if (parent.hasClass("ajax-post")) {
		var data = $(".data", parent).val();
		var name = $(".data", parent).attr("name");
		data = name + '=' + data;
		$.ajax({
			type: "POST",
			url: url,
			data: data,
			success: function(msg){
				for (var n=0;n<=4;n++) {
					var variant = ".case-" + n; 
					$(variant, parent).hide();
				}
				var cur_case = ".case-" + msg;
				$(cur_case, parent).show();
			}
		})
	} else {
		$.ajax({
			type: "GET",
			url: url,
			success: function(msg){
				for (var n=0;n<=2;n++) {
					var variant = ".case-" + n; 
					$(variant, parent).hide();
				}
				var cur_case = ".case-" + msg;
				$(cur_case, parent).show();
			}
		})
	}
	return false;
};


function b_we_go_scroll_init(){
	var container = $(".b-we-go"); 
	if(container.height() < $("table", container).height()){
		container.addClass("m-we-go-scroll");
	}
}


/*
 * Функция показывающая обёртывающий наш див, если пришла какая-то реклама
 */
function check_banner_init() {
	var recipients = $("div[id*='ad_ph_']",".s-banner");
	$(recipients).each(function(){
		if($(this).html() != 0) {
			$(this).closest(".s-banner-wrapper").show();
		}
	})
}


$(document).ready(function(){
	init_handlers();
	/**
	 * Биндим ивент для аяксового мегасвитчера.
	 * Для ускорения мы ещё в теле страницы их забиндим.
	 */
	$(".link", ".s-ajax-switcher").bind("click",ajax_switching);

	
	/*
	 * Answer for the comment
	 */
	$(".s-msg-reply").click(function(){
		var parent = $(this).parents("div.msg").get(0);
		var parent_id = '#' + $(parent).attr("id");
		var action_value = $(this).attr("href");
		$("#form-comment-add").children("form").attr("action", action_value);
		$("#form-comment-add").insertAfter(parent_id);
		$("#form-comment-add").show();
		var textarea_width = $("#form-comment-add").width();
		if ($.browser.msie) {textarea_width -= 4};
		$("textarea", "#form-comment-add").width(textarea_width);
		return false;
	});
	
	
	/*
	 * Hide comment form
	 */
	$(".s-comment-form-hide").click(function(){
		$("#form-comment-add").hide();
		return false;
	});
	
	
})


$(window).load(function(){
	check_banner_init();
})


/**
 * Insert content at caret position (converted to jquery function)
 * @link http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript
 */
;(function($) {
$.fn.insertAtCaret = function (myValue) {
	return this.each(function(){
		//IE support
		if (document.selection) {
			this.focus();
			sel = document.selection.createRange();
			sel.text = myValue;
			this.focus();
		}
		//MOZILLA/NETSCAPE support
		else if (this.selectionStart || this.selectionStart == '0') {
			var startPos = this.selectionStart;
			var endPos = this.selectionEnd;
			var scrollTop = this.scrollTop;
			this.value = this.value.substring(0, startPos) + myValue + this.value.substring(endPos,
			this.value.length);
			this.focus();
			this.selectionStart = startPos + myValue.length;
			this.selectionEnd = startPos + myValue.length;
			this.scrollTop = scrollTop;
		} else {
			this.value += myValue;
			this.focus();
		}
	});
};


/* микро-плагинчик для показа краткого и полного списка
 * вызывается так:
 * 	$(".s-list-container").listTrigger() uses default options  	
	$(".s-list-container2").listTrigger({shortModeSize:2,list:".my-list-item-class", modeTrigger:".my-link-class"}) uses custom options	
	
 */
	$.fn.listTrigger = function(o){
		//default options
		var o = $.extend({
			shortModeSize : 5,
			list : ".s-list-item",
			modeTrigger : ".s-list-mode-trigger"
		},o||{});			
		
		return this.each(function(){				
			var $list = $(o.list, this);
			var $modeTrigger = $(o.modeTrigger, this).click(modeTrigger);
			function modeTrigger(){
				$list.filter(":gt("+(o.shortModeSize-1)+")").toggle();
				return false
			}
			if ($list.size()>o.shortModeSize){
				$modeTrigger.click();
			}else{
				$modeTrigger.hide();	
			}				
		}) 
	};
;})(jQuery);	