var POPUP_WINDOW_PADDING = 20;

$("html").addClass("js");

$(init)

function init() {
    $("#welcome").each(initWelcome);
    $("#providers").each(initProviders);
}

function initWelcome() {
    $("#welcome a")
		.mouseover(function() {
		    var $this = $(this);

		    this.oldTitle = this.title;
		    this.title = "";

		    $("#welcome a")
					.addClass("notOver")

		    $this
					.removeClass("notOver")

		    var welcomeMsg = $("#welcomeMsg");

		    if (welcomeMsg.length <= 0) {
		        welcomeMsg = $('<div id="welcomeMsg"></div>').appendTo("body");
		    }

		    var offset = $this.offset();

		    welcomeMsg
					.text(this.oldTitle)
					.css("left", offset.left + parseInt($this.css("paddingLeft")))
					.css("top", offset.top + $this.height() + 10)
					.css("display", "block")

		    if ($(window).width() < parseInt(welcomeMsg.css("left")) + welcomeMsg.width() + POPUP_WINDOW_PADDING) {
		        welcomeMsg.css("left", $(window).width() - welcomeMsg.width() - POPUP_WINDOW_PADDING);
		    }

		    return false;
		}
		)
		.mouseout(function() {
		    this.title = this.oldTitle;

		    $("#welcome a")
					.removeClass("notOver")

		    $("#welcomeMsg")
					.css("display", "none")
		}
		)
}

function initProviders() {
    $("td > .inner", $("#providers"))
		.each(function() {
		    var inner = $(this);
		    var extra = $(".extra", inner);
		    var description = $(".description", extra);

		    if (description.length <= 0) {
		        description = $('<div class="description"></div>');

		        description
						.append($("> h3, > p:not(.submit)", inner).clone())
						.insertBefore($(".providerInfo", extra))
		    }

		    var descriptionOriginal = $("> p:not(.submit)", inner);
		    var text = descriptionOriginal.text();

		    if (text.length > 200) {
		        text = text.replace(/^(.{200}).+$/gim, "$1");
		    }

		    text += '<a class="providerMoreLink" href="#">...&nbsp;[&nbsp;+&nbsp;]</a>';

		    descriptionOriginal.html(text);

		    $(".providerMoreLink", inner)
					.click(function() {
					    return false;
					}
					)
					.mousemove(function(event) {
					    var inner = $(this).parents(".inner");
					    var extra = $(".extra", inner);
					    var description = $(".description", extra);

					    if (description.length <= 0) {
					        description = $('<div class="description"></div>');

					        description
									.append($("> h3, > p:not(.submit)", inner).clone())
									.appendTo($(".extraInner", extra))
					    }

					    extra
								.css("left", event.clientX + POPUP_WINDOW_PADDING)
								.css("top", $(window).scrollTop() + event.clientY - extra.height() - POPUP_WINDOW_PADDING)

					    if ($(window).width() < parseInt(extra.css("left")) + extra.width() + POPUP_WINDOW_PADDING) {
					        extra.css("left", $(window).width() - extra.width() - POPUP_WINDOW_PADDING);
					    }

					    var scrollTop = $(window).scrollTop();

					    if (scrollTop > parseInt(extra.css("top")) - POPUP_WINDOW_PADDING) {
					        extra.css("top", scrollTop + POPUP_WINDOW_PADDING)

					        if (parseInt(extra.css("top")) < scrollTop + event.clientY && parseInt(extra.css("top")) + extra.height() > scrollTop + event.clientY && parseInt(extra.css("left")) < event.clientX && parseInt(extra.css("left")) + extra.width() > event.clientX) {
					            extra.css("left", event.clientX - extra.width() - POPUP_WINDOW_PADDING);
					        }
					    }
					}
					)
					.mouseout(function() {
					    var inner = $(this).parents(".inner");
					    var extra = $(".extra", inner);

					    extra
								.css("left", -9999)
								.css("top", -9999)
					}
					)
		}
		)
}

