

var overlaypreloadholder = null;
var overlaypreloadidval = 1;

$(document).ready(function() {

	initializeOverlayObject(false);
	initializeOverlayObject(true);

	var shadowelem = $("<div id='overlay-shadow' style='background:#000;filter: alpha(opacity=65); -moz-opacity: 0.65; opacity: 0.65;' class='closeall'>&nbsp;</div>");
	$(document.body).append(shadowelem);
	shadowelem.click(closeOverlays);
	preload_image = new Image(); 
	preload_image.src="overlay-background.png";
	preload_image2 = new Image(); 
	preload_image2.src="overlay-background.gif";

	$("div[overlayContentId],a[overlayContentId]").each(function() {
		var thislink = $(this);
		var overlaycontent = $("#"+thislink.attr("overlayContentId"));
		overlaycontent.hide();

		thislink.click(function(){
			handleOverlayLinkClick($(this));
			return false;
		});
	});

	$("div[overlayTarget],a[overlayTarget]").each(function() {										   
		var thislink = $(this);
		var targetstr = thislink.attr("overlayTarget");
		
		thislink.click(function(){
			handleOverlayLinkClick($(this));
			return false;
		});

		if (!overlaypreloadholder)
			overlaypreloadholder = $("<div id='overlaypreloadholder'></div>").appendTo("body");
		
		if (overlaypreloadholder.children("[overlaypreloadtarget='"+targetstr+"']").length==0)
			overlaypreloadholder.append("<div class='overlaypreloaddiv' id='overlaypreloaddiv"+(overlaypreloadidval++)+"' overlaypreloadtarget='"+targetstr+"'></div>");
	});


	setTimeout(preloadAjaxContent, 10);
});


function handleOverlayLinkClick(link)
{
	var idstr = link.attr("overlayContentId");
	var targetstr = link.attr("overlayTarget");
	var overlaytitle = link.attr("overlayTitle");
	if (idstr && idstr.length>0){
		openElementOverlay(idstr, overlaytitle);
	}
	else if (targetstr && targetstr.length>0) {
		openAjaxOverlay(targetstr, overlaytitle);
	}
}




function preloadAjaxContent()
{
	if (!overlaypreloadholder)
		return;
		
	var nextpreload = overlaypreloadholder.children(".overlaypreloaddiv:empty:first");
	if (nextpreload.length>0)
	{
		nextpreload.eq(0).load(nextpreload.attr('overlaypreloadtarget'), null, overlayPreloadComplete);
	}
}

function overlayPreloadComplete()
{
	//
	// thisholder holds the preloaded content.  append it to the document body.
	//
	var thisholder = $(this).appendTo("body");
	
	//
	// now find all links that refer to this content.  change their attribute from ajax url to content id
	//
	var preloadtarget = thisholder.attr('overlaypreloadtarget');
	$("div[overlayTarget='"+preloadtarget+"'],a[overlayTarget='"+preloadtarget+"']").each(function() {
		var thislink = $(this);
		thislink.removeAttr('overlayTarget');
		thislink.attr('overlayContentId',thisholder.attr('id'));
	});
	
	//
	// see if there are any more content to preload
	//
	preloadAjaxContent();
}



function openElementOverlay(idelement, linktitle)
{
	var overlaydialog;
		
	var overlaycontentnode = $("#"+idelement);
	if(browser) {
		if(browser.isIE6x) {
			$("select").hide();
		}
	}
	if (!isNaN(parseInt(overlaycontentnode.css("width"))) && !overlaycontentnode.attr("overlayContentWidth"))
		overlaycontentnode.attr("overlayContentWidth", overlaycontentnode.css("width")).css("width", "auto");
	
	if (overlaycontentnode.attr("noscroll")!=undefined)
		overlaydialog = $('#overlaydialognoscroll');
	else
		overlaydialog = $('#overlaydialog');
	$('.overlay-contents', overlaydialog).empty().append(overlaycontentnode);
	overlaycontentnode.show();	// we show this because it is hidden
	overlaydialog.attr("keepoverlaycontent", "1");
			
	// now open overlay
	openOverlay(overlaydialog, overlaycontentnode, linktitle);

}


function openAjaxOverlay(strUrl, linktitle)
{
	strUrl = strUrl.replace(" ", "%20");
	//
	// always use scrolling overlay dialog
	//
	var overlaydialog = $('#overlaydialog');
	if(browser) {
		if(browser.isIE6x) {
			$("select").hide();
		}
	}


	$('.overlay-contents', overlaydialog)
		.empty()
		.append("<div id='placeholderdiv'>&nbsp;</div>")
		.load(strUrl, null, overlayContentLoadComplete);

	//
	// we open overlay now, otherwise there might be a delay while the AJAX content loads.
	//				
	openOverlay(overlaydialog, null, linktitle);

}


function overlayContentLoadComplete(responseText, textStatus, XMLHttpRequest) {
	//
	// callback function that runs when the AJAX content is done loading
	//
	var overlaydialog = $(".overlay-dialog:visible");
	$("#placeholderdiv", overlaydialog).remove();		// get rid of placeholder

	setOverlayWidth(overlaydialog);						// extract the width from the div
	setOverlayTitle(overlaydialog);						// extract title from content
	positionOverlay(overlaydialog);

		//
		// this runs if there is still content to load (images, etc) in the overlay
		// it makes sure that after all the images load, the scrollbar is set up correctly
		//	
	$(".overlay-contents", overlaydialog).load(function(){ positionOverlay($(".overlay-dialog:visible")); });
	setTimeout('positionOverlay($(".overlay-dialog:visible"));', 1000);
	
}

var overlayCloseButtonLabel = "Close";

function initializeOverlayObject(bhasscroll)
{
	//
	// this sets up one of the two top-level overlay dialog holders.  This is a structure
	// that presents the nice rounded border, keeps the dialog on top of everything, and
	// allows content to be added.
	//
	var overlaydialog;
	var contentelem;

	if (bhasscroll)
	{
		overlaydialog = $("<div id='overlaydialog' class='overlay-dialog'><div class='overlay-holder orange-bar'><div class='scroll-pane'><div class='overlay-contents'></div></div></div></div>");
		contentelem = $(".scroll-pane", overlaydialog);
	}
	else
	{
		overlaydialog = $("<div id='overlaydialognoscroll' class='overlay-dialog' noscroll='true'><div class='overlay-holder orange-bar'><div class='overlay-contents'></div></div></div>");
		contentelem = $(".overlay-contents", overlaydialog);
	}


	contentelem.before("<div class='overlay-t'></div>"+
				"<div class='overlay-head-wrapper'>"+
					"<div class='overlay-head-outer'><div class='overlay-closebutton'>[ <a href='#' class='overlay-closelink'>"+overlayCloseButtonLabel+"</a> ]</div>"+
						"<div class='overlay-head-inner'></div></div>"+
				"</div>"
				);

	contentelem.parent().after("<div class='overlay-b'><div></div></div>");

	$(".overlay-closelink:first", overlaydialog).click(closeOverlays);
	


	overlaydialog.appendTo("body");

	//
	// get the overlay default width from the css settings and store it in an attribute
	// (since when we need to size differently, we will need to reset later)
	//
	overlaydialog.attr("overlayWidthDefault", overlaydialog.css("width"));
}


var overlayOpenCallback = null;
var overlayCloseCallback = null;

function initializeOverlayCallbacks(openCallback, closeCallback)
{
	//
	// this is a dumb architecture, but necessary to integrate this new overlay architecture
	// into the pages that exist.   these callbacks are utilized when dialogs are opened or closed.
	//
	overlayOpenCallback = openCallback;
	overlayCloseCallback = closeCallback;
}

var overlayDifferenceOuterInnerWidth = 24;
var overlayDifferenceOuterInnerHeight = 42+17+20+24;  // header+printarea+margin+bottom

function setOverlayWidth(overlaydialog)
{
	var overlaycontents = $('.overlay-contents', overlaydialog);
	var overlaycontentnode = overlaycontents.children(":first");
	if (overlaycontentnode.attr("overlayContentWidth"))
	{
		overlaydialog.css("width", parseInt(overlaycontentnode.attr("overlayContentWidth"))+overlayDifferenceOuterInnerWidth);		
	}
	overlaycontents.width(overlaydialog.width()-overlayDifferenceOuterInnerWidth);

	if (overlaycontentnode.attr('noheader')!=undefined)
	{
		$('.overlay-head-wrapper,.overlay-head-outer,.overlay-t,.overlay-b', overlaydialog).hide();
	}
	else
	{
		$('.overlay-head-wrapper,.overlay-head-outer,.overlay-t,.overlay-b', overlaydialog).show();
	}
	
	//
	// also check for noprint class here
	//
	if (overlaycontentnode.attr('noprint')!=undefined)
	{
		$('.overlay-printheader', overlaydialog).hide();
//		$('.overlay-head-outer', overlaydialog).css("margin-bottom", "20px");
	}
	else
	{
		$('.overlay-printheader', overlaydialog).show();
//		$('.overlay-head-outer', overlaydialog).css("margin-bottom", "0px");
	}
}

function openOverlay(overlaydialog, overlaycontentnode, linktitle) {

	positionShadow();
	$("#overlay-shadow").ready(function(){
$("#overlay-shadow").fadeIn(300); 
});

	setOverlayWidth(overlaydialog);
	overlaydialog.fadeIn(400).css();
	setOverlayTitle(overlaydialog, linktitle);

	$(".jScrollPaneContainer", overlaydialog).height("100px");
	var scrollpane = $(".scroll-pane", overlaydialog);
	scrollpane.jScrollPane({showArrows:true,scrollbarMargin:0});
	if (scrollpane.length>0 && scrollpane[0].scrollTo)
		scrollpane[0].scrollTo(0);

	positionOverlay(overlaydialog);
	$(window).bind("resize", overlayHandleResize);

	if (overlayOpenCallback)
		overlayOpenCallback();

}


function positionOverlay(overlaydialog) {
	var wnd = $(window);

	var overlaycontents = $(".overlay-contents", overlaydialog);
	
	if (overlaydialog.attr('noscroll')==undefined) {

		var targheight = Math.max(150, Math.round(wnd.height()*0.8));	
		var contentheight = overlaycontents.height();

		$(".jScrollPaneContainer", overlaydialog).height(Math.min(contentheight, targheight-overlayDifferenceOuterInnerHeight)).width("auto");
		$(".scroll-pane", overlaydialog).jScrollPane({showArrows:true,scrollbarMargin:0});
	}
	var pLeft = Math.max((wnd.width() - overlaydialog.width()) / 2 + wnd.scrollLeft());
	overlaydialog.css({left: pLeft});
}


function setOverlayTitle(overlaydialog, linktitle) {
	var overlayheadinner = $(".overlay-head-inner",overlaydialog);
	if (linktitle) {
		overlayheadinner.empty().append(linktitle);
		return;
	}
	var overlaycontents = $(".overlay-contents", overlaydialog);
	var overlaycontentnode = overlaycontents.children();
	if (overlaycontentnode.attr("overlayTitle")) {
		overlayheadinner.empty().append(overlaycontentnode.attr("overlayTitle"));
		return;
	}
	var header = $(".overlay-head", overlaycontents);
	if (header.length>0) {
		overlayheadinner.empty().append(header.clone());
		return;
	}
}
function closeOverlays() {
	var overlaydialog;
	var opendialogs = $(".overlay-dialog:visible");
	var overlaycontents = $('.overlay-contents', overlaydialog);
	var overlaycontentnode = overlaycontents.children(":first");

	if (overlaycontentnode.attr("noscroll")!=undefined)
		overlaydialog = $('#overlaydialognoscroll');
	else
		overlaydialog = $('#overlaydialog');

	if (overlaycontentnode.attr('removeDom') != undefined) {

		$(".overlay-contents", opendialogs).empty();
	}
	opendialogs.hide();
	$(".overlay-contents", opendialogs.filter("[keepoverlaycontent]")).children().fadeOut(300).hide().appendTo("body");
	
	opendialogs.removeAttr("keepoverlaycontent");

	opendialogs.each(function() { 
		var thisobj = $(this);
		//alert("setting "+this.id+" width to "+thisobj.attr("overlayWidthDefault"));
		thisobj.css("width", parseInt(thisobj.attr("overlayWidthDefault")));
	});
	
	
	$(window).unbind("scroll", overlayHandleScroll);
	$(window).unbind("resize", overlayHandleResize);
	$("#overlay-shadow:visible").fadeOut(500);
	if(browser) {
		if(browser.isIE6x) {
			$("select").show();
		}
	}

	if (overlayCloseCallback)
		overlayCloseCallback();
		
}


function positionShadow()
{
	var doc = $(document);
	$("#overlay-shadow").width(doc.width()).height(doc.height());
}


function overlayHandleScroll()
{
	positionOverlay($(".overlay-dialog:visible"));
}
function overlayHandleResize()
{
	positionOverlay($(".overlay-dialog:visible"));
	positionShadow();
}
