// -- Shade
var defaultOpacity = 0.75;

function createShade(id, container) {
	var html_doc = document.body;

	var shade = document.createElement('div');
	shade.setAttribute('id', 'shadowPopupShade'+id);
	html_doc.appendChild(shade);
	Element.hide(shade);
// Need an IFRame Blocker
	shade.style.position = 'absolute';
	shade.style.backgroundColor = 'black';
	shade.style.zIndex = '10000';
	Position.clone(container, shade);
}

function destroyShade(id) {
	Element.remove('shadowPopupShade'+id);
	// destroy ifram blocker
}

function shade(id, opacity, container) {
	if (!opacity) opacity = defaultOpacity;
	if (!container) container = document.body;

	createShade(id, container);

	new Effect.Appear('shadowPopupShade'+id, {to:opacity});
}

function unshade(id) {
	var shade = $('shadowPopupShade'+id);

	if (shade) {
		new Effect.Fade(shade, {afterFinish:function(){destroyShade(id);}});
	}
}

// -- Pane
function createPane(id, width, height) {
	var shade = document.body;
	var container = document.createElement('div');
	container.setAttribute('id', 'shadowPopupPane'+id);
	shade.appendChild(container);

	var shadePosition = Position.cumulativeOffset('shadowPopupShade'+id);
	var shadeDimensions = Element.getDimensions('shadowPopupShade'+id);

	Element.hide(container);
	container.style.position = 'absolute';
	container.style.backgroundColor = 'white';
	container.style.zIndex = '10001';
	container.style.border = '1px solid black';
	container.style.width = width;
	container.style.height = height;
	var left = Math.floor((shadePosition[0]+(shadeDimensions.width-width))/2);
	var top = Math.floor((shadePosition[1]+(shadeDimensions.height-height))/2);
	if (left<0) left = 0;
	if (top<0) top = 0;
	container.style.left = left+'px';
	container.style.top = top+'px';
}

function destroyPane(id) {
	Element.remove('shadowPopupPane'+id);
}

function showPane(id, width, height) {
	shade(id);
	createPane(id, width, height);

	new Effect.Grow('shadowPopupPane'+id);
}

function hidePane(id, redirect) {
	var pane = $('shadowPopupPane'+id);

	if (pane) {
		unshade(id);
		new Effect.Shrink(pane, {afterFinish:function(){destroyPane(id);shadowRedirect(redirect);}});
	}
}

function shadowRedirect(redirect) {
	if (redirect) {
		if (redirect == '#' || redirect === true) window.location=window.location;
		else {
			window.location=redirect;
		}
	}
}

// -- Frame based calls
function openShadowWindow(id, width, height, url) {
	showPane(id, width, height);
	new Insertion.Top('shadowPopupPane'+id, '<iframe class="shadowWindow" id="shadowPopupFrame'+id+'" width="100%" height="100%" allowtransparency="true" frameBorder="0px" src="'+url+'" style="width:100%;height:100%;border:none;background-color:transparent;"></iframe>');
	var shadowFrame = $('shadowPopupFrame'+id);
	return false;
}

function closeShadowWindow(id, redirect) {
	hidePane(id, redirect);

	return false;
}

// -- dialog based calls
function openShadowDialog(id, width, height) {
	showPane(id, width, height);
	new Insertion.Top('shadowPopupPane'+id, '<div id="'+id+'" class="shadowDialogue" style="width:100%;height:100%;border:none;background-color:transparent;"></div>');
	var shadowFrame = $('shadowPopupFrame'+id);
	return false;
}

function closeShadowDialog(id, redirect) {
	hidePane(id, redirect);

	return false;
}