// -----------------------------------------------------------------------------------
//
//	Hoverbox v1.00
//	http://www.alliancesoftware.com.au
//	Last Modification: 19/1/09
//
// -----------------------------------------------------------------------------------


// --- Configuration ====== ======
hoverCloseImage = URL_CMSROOT+'themes/Zibbet/hoverbox/images/closelabel.gif';



// --- Do not change below this point ====== ======



hoverWaiting = null;
hoverClose = null;

// --- Add hoverbox for display ====== ======
hoverAdd = function(ele) {
	var close = '<img id="hoverboxClose" src="'+hoverCloseImage+'" />';
	var title = $(ele).attr("title");
	var caption = $(ele).attr("alt");
	var link = $(ele).attr("longdesc");
	var src = $(ele).attr("id");

	$("body").append('<div id="hoverbox"><a id="hoverboxLink" href="'+link+'"><img id="hoverboxImage" src="'+src+'" title="'+title+'" alt="'+title+'" /></a><div id="hoverboxCaption">'+caption+'</div>'+close+'</div>');
	$("#hoverboxClose").click(hoverRemove);
	hoverShow(ele);
}

// --- Delay showing hoverbox until image is loaded ====== ======
hoverShow = function(ele) {
	if ($("#hoverboxImage").attr("complete")) { // || $("#hoverboxImage").width() > 0) {
		hoverWaiting = null;
		hoverClose = $(ele).attr("id");

		var xWide = $(window).width();
		var yHeight = $(window).height();

		var xOffset = $(window).scrollLeft();
		var yOffset = $(window).scrollTop();

		// now that image is loaded, determine layout on page
		var xPos = hoverGetOffsetX(ele); //+xOffset;
		var yPos = hoverGetOffsetY(ele); //+yOffset;

		// HACK. Show the elements so we can figure out how big it's going to be
		$("#hoverbox").show();
		$("#hoverboxCaption").show();

		var hWide = $("#hoverbox").width();
		var hHeight = $("#hoverbox").height();

		if (xWide < hWide) {
			$("#hoverboxImage").width($("#hoverboxImage").width() * xWide / (1.1*hWide));
		}
		if (yHeight <= hHeight + 24) {
			$("#hoverboxImage").height($("#hoverboxImage").height() * yHeight / (1.1*hHeight));
			$("#hoverbox").width($("#hoverboxImage").width());
		}

		// determine where the hoverbox should display
		if (xPos < xOffset+24) {
			xPos = xOffset+24;
		} else if (xWide+xOffset < xPos + $("#hoverbox").width() + 24) {
			xPos = xWide+xOffset - $("#hoverbox").width() - 24;
		}
		if (yPos < yOffset+24) {
			yPos = yOffset+24;
		} else if (yHeight+yOffset < yPos + $("#hoverbox").height() + 24) {
			yPos = yHeight+yOffset - $("#hoverbox").height() - 24;
		}

		$("#hoverbox").hide();
		$("#hoverboxCaption").hide();

		$("#hoverbox").css("left",xPos+"px");
		$("#hoverbox").css("top",yPos+"px");
		$("#hoverbox").fadeIn("slow", function(){
			$("#hoverboxCaption").slideDown("normal", function() {
				$("#hoverboxClose")
					.css("position","absolute")
					.css("bottom","5px")
					.css("right","5px")
					.fadeIn("normal");
			});
		});
	} else {
		setTimeout(function() {hoverShow(ele)}, 300);
	}
}

// --- Control to see if / when hover should be drawn ====== ======
hoverDraw = function(ele) {
	if (hoverWaiting == $(ele).attr("id") || hoverClose == $(ele).attr("id")) return;
	hoverWaiting = $(ele).attr("id");
	hoverClose = null;
	if ($("#hoverbox").length == 0) hoverAdd(ele);
	if ($("#hoverbox img").attr("src") != $(ele).attr("id")) {
		hoverRemove();
		hoverAdd(ele);
	}
}

// --- Removal of Hoverbox ====== ======
hoverRemove = function() {
	if ($("#hoverbox").length > 0)
		$("#hoverbox").remove();
}

hoverNull = function() { /* do nothing */ }

// --- Retrieve element position on browser ====== ======
hoverGetOffsetX = function(ele) {
	return $(ele).attr("offsetLeft") + ($(ele).attr("offsetParent")
		? hoverGetOffsetX($(ele).attr("offsetParent"))
		: 0);
}
hoverGetOffsetY = function(ele) {
	return $(ele).attr("offsetTop") + ($(ele).attr("offsetParent")
		? hoverGetOffsetY($(ele).attr("offsetParent"))
		: 0);
}

$(document).ready(function() {
	if ($(".hoverbox")) {
		$(".hoverbox").click(hoverRemove).css("display","block").hover(function(e) {
			hoverDraw($(this));
		},hoverNull);
		$(document).click(hoverRemove);
	}
});

