// Глобальное пространство имен для модулей
var VIBIRAI = {};

$(function () {

    // меняем тип инпута для нативной поисковой строчки в Safari
    // и показываем пригласительное сообщение
    $("input.safari-search").each(function () {
        try {
            var ele = $(this),
                placeholder = ele.metadata().placeholder || "";
            if (navigator.userAgent.indexOf("WebKit/") > -1) {
                this.type = "search";
                this.setAttribute("results", 10);
                this.setAttribute("placeholder", placeholder);
            } else {
                ele.bind("focus", function () {
                    if (ele.val() === placeholder) {
                        ele.removeClass("empty").val("");
                    }
                }).bind("blur", function () {
                    if (ele.val() === "") {
                        ele.addClass("empty").val(placeholder);
                    }
                }).trigger("blur");
            }
        } catch (ex) {}
    });


    // добавляем рамки у редактируемых элементов
    (function () {

        var DELTA_X = 20,
            DELTA_Y = 20,
            COMMON_STYLE = '',
            container = $('<div class="editable-c"></div>'),
            editable = $(".editable"),
            pagePos = $("#page").parent().offset();

        function getAbsolutePosition(ele) {
            var pos = $(ele).offset();

            pos.top = pos.top + parseInt($(ele).css("paddingTop")) - pagePos.top;
            pos.left = pos.left + parseInt($(ele).css("paddingLeft")) - pagePos.left;

            return pos;
        }


        if (editable.length) {
            $('#page').parent().append(container);

            editable.each(function (index) {
                var pos = getAbsolutePosition(this),
                    width = Math.round($(this).width() + DELTA_X),
                    height = Math.round($(this).height() + DELTA_Y),
                    left = Math.round(pos.left - DELTA_X / 2 - 1),
                    top = Math.round(pos.top - DELTA_Y / 2 - 1),
                    frame = [], data;


                frame.push('<div class="editable-f" style="top:' + top + 'px;left:' + left + 'px;width:' + width + 'px;height:1px;"></div>');
                frame.push('<div class="editable-f" style="top:' + top + 'px;left:' + (left + width) + 'px;width:1px;height:' + height + 'px;"></div>');
                frame.push('<div class="editable-f" style="top:' + (top + height) + 'px;left:' + (left + 1) + 'px;width:' + width + 'px;height:1px;"></div>');
                frame.push('<div class="editable-f" style="top:' + (top + 1) + 'px;left:' + left + 'px;width:1px;height:' + height + 'px;"></div>');

                data = $(this).metadata();
                if( data.link )
                {
                    frame.push('<div id="editable-link-' + index + '" class="editable-l"><a href="' + data.link + '">Редактировать</a></div>');
                }

                
                if( data.service_link )
                {
                    frame.push('<div id="service-link-' + index + '" class="service-l"><a href="' + data.service_link + '">Услуги</a></div>');
                }
                if( data.bill_link )
                {
                    frame.push('<div id="bill-link-' + index + '" class="service-l"><a href="' + data.bill_link + '">Счета</a></div>');
                }

                
                if( data.del_link )
                {
                    if( ! data.uri  &&   ! data.url )
                        alert( 'В метаданных не указан uri.' );
                    else
                    {
                        frame.push( '<div id="editable-del_link-' + index + '" class="editable-d"><form method="post" action="' + data.del_link + '">' + ( data.uri ? '<input name="uri" type="hidden" value="' + data.uri + '" />' : '' ) + ( data.url ? '<input name="url" type="hidden" value="' + data.url + '" />' : '' ) + '<span onclick="if( confirm(\'Подтверждаете удаление объекта?\') ) $(this).parents(\'form\').submit()">Удалить</span></form></div>' );
                    }
                }

                container.append(frame.join(''));

                // отдельно позиционируем ссылку
                $("#editable-link-" + index).each(function () {
                    var lw = $(this).width();
                    $(this).css({
                        top: Math.round(pos.top),
                        left: Math.round( pos.left + width - DELTA_X * 2.5 - lw )
                    });
                });
                

                $("#service-link-" + index).each(function () {
                    var lw = $(this).width();
                    $(this).css({
                        top: Math.round( pos.top + $("#editable-link-" + index).outerHeight() + 1 ),
                        left: Math.round( pos.left + width - DELTA_X * 2.5 - lw )
                    });
                });
                $("#bill-link-" + index).each(function () {
                    var lw = $(this).width();
                    $(this).css({
                        top: Math.round( pos.top + 2 * ( $("#editable-link-" + index).outerHeight() + 1 ) ),
                        left: Math.round( pos.left + width - DELTA_X * 2.5 - lw )
                    });
                });


                $("#editable-del_link-" + index).each(function () {
                    var lw = $(this).width();
                    $(this).css({
                        top: Math.round( pos.top ),
                        left: Math.round( pos.left + width - DELTA_X * 2.5 - lw - $("#editable-link-" + index).outerWidth() - 1 )
                    });
                });
            });
        }



    }());


    // декорируем блоки комментариев рамочками
    $("div.decor-frames").each(function () {
        var table = $('<table><tbody><tr><td class="tl"></td><td class="tr">&nbsp;</td></tr><tr><td class="bl">&nbsp;</td><td class="br">&nbsp;</td></tr></tbody></table>');
        $(this).after(table);
        $("td", table).eq(0).append(this);
    });
    

    // управление табами
    $("dl.tabs > dt").bind("click", function () {
        var ele = $(this);

        ele.siblings().removeClass("active").end()
            .next().andSelf().addClass("active");

        ele.find("em:first").width(ele.width());
    }).filter(".active").trigger("click");
    // блокируем ссылки у табов
    $("dl.tabs > dt a").live("click", function () {
        return false;
    });

    // выбор городов
    $("#topper div.city-label").bind("click", function () {
        var sel = $("#topper div.city-selector");

        if (sel.hasClass("hidden")) {
            sel.css("display", "none").removeClass("hidden");
        }
        $("#topper div.city-selector").slideToggle();
    });


    
    
    // галерея фотографий
    $("div.gallery").each(function () {
        var gallery = $(this),
            eles = gallery.find("> div"),
            btnPrev = $("div.nav-prev", this),
            btnNext = $("div.nav-next", this),
            comment = gallery.find("div.comment");

        function getPositionForOffset (base, offset, total) {
            var t = base + offset;
            return t < 0 ? t + total : t >= total ? t - total : t;
        }

        function setGallery (index) {
            eles.removeClass("col-left col-middle col-right").addClass("hidden");
            eles.eq(getPositionForOffset(index, 0, eles.length))
                .addClass("col-left").append(btnPrev).removeClass("hidden");
            eles.eq(getPositionForOffset(index, 1, eles.length))
                .addClass("col-middle").removeClass("hidden").each(function () {
                    var text = $("img", this).attr("title") || "";
                    comment.appendTo(this).removeClass("hidden").find("div.message").html(text);
                    if (text.length === 0) {
                        comment.addClass("hidden");
                    }
                });
            eles.eq(getPositionForOffset(index, 2, eles.length))
                .addClass("col-right").append(btnNext).removeClass("hidden");
        }

        function moveGallery (direction) {
            var first = btnPrev.parent(),
                index = eles.index(first);

            if (index >= 0) {
                setGallery(index + direction);
            }

        }
        // переключение вешается прям на всю колонку
        // можно кликать и по картинке и по ссылке
        $("div.gallery div.col-left").live("click", function () {
            moveGallery(-1);
            return false;
        });
        $("div.gallery div.col-right").live("click", function () {
            moveGallery(1);
            return false;
        });

        function showPack (direction) {
            var packs = $("div.previews div.pack"), next;

            next = packs.not(".hidden").addClass("hidden")[direction === 1 ? "next" : "prev"]("div.pack");
            if (!next || !next.length) {
                if (direction === 1) {
                    next = packs.eq(0)
                } else {
                    next = packs.eq(packs.length - 1);
                }
            }
            next.removeClass("hidden");
        }

        $("span.packs-nav-prev").bind("click", function () {
            showPack(-1);
            return false;
        });
        $("span.packs-nav-next").bind("click", function () {
            showPack(1);
            return false;
        });

        $("div.previews img").bind("click", function () {
            var index = $("div.previews img").removeClass("active").index(this);
            $(this).addClass("active");
            setGallery(index - 1);
        })

    });



    // блок с вакансиями
    $("div.vacancy").each(function () {
        var line = $('<div class="vacancy-line hidden"><div class="vacancy-job"></div></div>').insertBefore(this);

        $("tbody > tr", this).hover(function () {
            var row = $(this);
            row.addClass("over");
            line.width(row.width() + 16).height(row.height())
                    .css("marginTop", row.position().top)
                    .find(".vacancy-job").width(row.find("> td.f").width()).height(row.height())
                    .end().removeClass("hidden");
        }, function () {
            $(this).removeClass("over");
            line.addClass("hidden");
        }).bind("click", function (e) {
            e.stopPropagation();
            var url = $(".job a", this).attr("href");
            if (url) {
                window.location.href = url;
            }
        });
    });



	$(window).load( function(){
		$("div.article div.figures div.figures-wrap").each(
			function ()
			{
				var widget = $(this), widgetWidth = widget.width();
		
				function activateFigure(animated)
				{
					var image = $("> img", this),
						width = image.width(),
						offset = Math.round((widgetWidth - width) / 2);
	
					widget.find("div.figures-nav-prev").stop().animate({left: offset}, animated ? "fast" : 0);
					widget.find("div.figures-nav-next").stop().animate({left: offset + width}, animated ? "fast" : 0);
				}

				if( widget.hasClass('without-widget') )
				{
					if( widget.find('a.prev-item').length )
						widget.append( '<div class="figures-nav figures-nav-prev"><span class="figures-nav-prev"></span></div>' );
						
					if( widget.find('a.next-item').length )
						widget.append( '<div class="figures-nav figures-nav-next"><span class="figures-nav-next"></span></div>' );
				}
				else
				{
					widget.append(
					    '<div class="figures-nav figures-nav-prev"><span class="figures-nav-prev"></span></div>'
					  + '<div class="figures-nav figures-nav-next"><span class="figures-nav-next"></span></div>'
					);
				}
		
				widget.find("div.figures-nav")
					.hover(
						function()
						{
							$(this).addClass("figures-nav-hover");
						},
						function ()
						{
							$(this).removeClass("figures-nav-hover");
						}
					)

					.bind(
						'click',
						function ()
						{
							//код для перехода на др. страницу
							if( widget.hasClass( 'without-widget' ) )
							{
								if( $(this).hasClass("figures-nav-prev") )
								{
									location.href = widget.find( 'a.prev-item' ).attr('href');
								}
								else if( $(this).hasClass("figures-nav-next") )
								{
									location.href = widget.find( 'a.next-item' ).attr('href');
								}
								
								return;
							}
							
							//код для листания
							var active = widget.find("div.figure-active"), target;
				
							if ($(this).hasClass("figures-nav-prev")) {
								target = active.prev("div.figure");
								if (!target.length) {
									target = widget.find("div.figure:last");
								}
							} else if ($(this).hasClass("figures-nav-next")) {
								target = active.next("div.figure");
								if (!target.length) {
									target = widget.find("div.figure:first");
								}
							}
	
							if( target )
							{
								active.fadeOut();
								target.fadeIn(function () {
									active.removeClass("figure-active");
									target.addClass("figure-active");
								}).each(function () {
									activateFigure.call(this, true);
								});
				
							}
						}
					);
	
				widget.find("div.figure-first")
					.addClass("figure-active")
					.each(
						function()
						{
							activateFigure.call( this, false );
						}
					);
			}
		)
	});

});
