function hideOverlay(id, effect)
{
	if (effect == "fade") {
		new Effect.Fade(id);
	} else if (effect == "slideUp") {
		new Effect.SlideUp(id, { duration: 3.0 });
	} else if (effect == "switchOff") {
		new Effect.SwitchOff(id);
	} else if (effect == "dropOut") {
		new Effect.DropOut(id);
	} else {
		new Effect.BlindUp(id);
	}
}


function showOverlay(id, effect, alpha)
{
	if (effect == "fade") {
		if (alpha && alpha != undefined) {
			//0.75
			new Effect.Appear(id, {to:alpha});
		} else {
			new Effect.Appear(id);
		}
	} else if (effect == "puff") {
		new Effect.Puff(id);
	} else if (effect == "slideDown") {
		new Effect.SlideDown(id, { duration: 3.0 });
	
	} else {
		new Effect.BlindDown(id);
	}
}


function positionOverlay(id, click_loc, xShift, yShift)
{
	var overlay = document.getElementById(id);
	var xPos = 0;
	var yPos = 0;
		
	if (click_loc != undefined) {
		xPos = click_loc.clientX;
		
		if (xShift != undefined) {
			xPos += xShift;
		}
		
		xPos = Math.ceil(xPos);
		yPos = click_loc.clientY;
		
		if (yShift != undefined) {
			yPos += yShift;
		}
		
		yPos = Math.ceil(yPos);
	} else {
		xPos = overlay.style.left;
		yPos = overlay.style.top;
		
		if (xShift != undefined) {
			xPos += xShift;
		}
		
		if (yShift != undefined) {
			yPos += yShift;
		}
	}
	
	overlay.style.left = xPos;
	overlay.style.top = yPos;
}


function populateOverlayAjax(id, content_page, vars, loadingMessage)
{
	var postVars = "";
	var sendToPage = null;
	var overlay = document.getElementById(id);
	
	if (vars && vars != undefined) {
		postVars = vars;
	}
	
	//overlay.innerHTML = "Refreshing...";
	
	var opt = {
	    method: 'post',
	    postBody: postVars,
	    onSuccess: function(t) {
	        overlay.innerHTML = t.responseText;
	    },
	    on404: function(t) {
	        alert('Error 404: location "' + t.statusText + '" was not found.');
	    },
	    onFailure: function(t) {
	        alert('Error ' + t.status + ' -- ' + t.statusText);
	    }
	}

	if (content_page) {
		new Ajax.Request(content_page, opt);
	}
}


function populateOverlay(id, content)
{
	var overlay = document.getElementById(id);
	overlay.innerHTML = content;
}

function populateOverlayAdsAjax(id, content_page)
{
	var postVars = "";
	var sendToPage = null;
	var overlay = document.getElementById(id);
	
	if (overlay.innerHTML == "" && overlay != undefined) {
		//get content for overlay
		postVars = '';
		overlay.innerHTML = "Loading...";
		
		var opt = {
		    method: 'post',
		    postBody: postVars,
		    onSuccess: function(t) {
		        overlay.innerHTML = t.responseText;
		    },
		    on404: function(t) {
		        alert('Error 404: location "' + t.statusText + '" was not found.');
		    },
		    onFailure: function(t) {
		        alert('Error ' + t.status + ' -- ' + t.statusText);
		    }
		}
	
		if (content_page) {
			new Ajax.Request(content_page, opt);
		}
	}
}

function getWindowHeight() {
	var windowHeight = 0;
	
	if (typeof(window.innerHeight) == 'number') {
		windowHeight = window.innerHeight;
	} else {
		if (document.documentElement && document.documentElement.clientHeight) {
			windowHeight = document.documentElement.clientHeight;
		} else {
			if (document.body && document.body.clientHeight) {
				windowHeight = document.body.clientHeight;
			}
		}
	}
	
	return windowHeight;
}

function getWindowWidth() {
	var windowWidth = 0;
	
	if (typeof(window.innerWidth) == 'number') {
		windowWidth = window.innerWidth;
	} else {
		if (document.documentElement && document.documentElement.clientWidth) {
			windowWidth = document.documentElement.clientWidth;
		} else {
			if (document.body && document.body.clientWidth) {
				windowWidth = document.body.clientWidth;
			}
		}
	}
	
	return windowWidth;
}

function centerLayerOnPage(layer_id, vertical_shift)
{
	if (document.getElementById) {
		var windowHeight = getWindowHeight();
		var windowWidth = getWindowWidth();
		
		if (windowHeight > 0) {
			var contentElement = document.getElementById(layer_id);
			var contentHeight = contentElement.offsetHeight;
			var contentWidth = contentElement.offsetWidth;
			var contentLeft = contentElement.offsetLeft;
			
			if (windowHeight - contentHeight > 0) {
				top = ((windowHeight/2) - (contentHeight/2));
				left = ((windowWidth/2) - (contentWidth/2));
				
				if (vertical_shift && vertical_shift != undefined) {
					top += vertical_shift;
				}
				
				contentElement.style.position = 'absolute';
				contentElement.style.top = Math.floor(top) + 'px';
				contentElement.style.left = Math.floor(left) + 'px';
			} else {
				contentElement.style.position = 'static';
			}
		}
	}
}

function expandDescriptionBox()
{
	box = document.getElementById("profileDescriptionBox");
	trigger = document.getElementById("expandProfileDescriptionTrigger");
	
	if (trigger.innerHTML == "+ Expand Description") {
		if (box.offsetHeight < box.scrollHeight) {
			box.style.maxHeight = "";
		}
		
		trigger.innerHTML = "- Minimize Description";
	} else {
		box.style.maxHeight = "400px";
		trigger.innerHTML = "+ Expand Description";
	}
}

function doBookmarkFavoritesLink(url, title)
{
	title.replace(/[\+]+/, " ");
	
	if (window.sidebar) { // Firefox
		window.sidebar.addPanel(unescape(title), unescape(url), "");
	} else if (window.opera && window.print) { // Opera
		var elem = document.createElement('a');
		elem.setAttribute('href', unescape(url));
		elem.setAttribute('title', unescape(title));
		elem.setAttribute('rel', 'sidebar');
		elem.click();
	} else if (document.all) { // Explorer
		window.external.AddFavorite(unescape(url), unescape(title));
	}
 }
 
 
 function showBookmarks(trigger, id, event, links)
 {
 	var marks = document.getElementById(id);
 	var trigger = document.getElementById(trigger);
 	var trigger_pos = getElementBounds(trigger);
 	var header = document.getElementById('template_page_header');
 	var header_pos = getElementBounds(header);
 	
 	if (marks.id != undefined) {
 		if (marks.style.display == "none") {
 			var xAdjust = 0;
 			
 			if ((event.clientX + 200) > header_pos.Right) {
 				xAdjust = header_pos.Right-(event.clientX + 200);
 			}
 			
 			links = urldecode(links);
 			populateOverlay(id, links);
 			positionOverlay(id, event, xAdjust, -25);
	 		showOverlay(id, "fade", .95);
 		} else {
 			hideOverlay(id, "fade");
 		}
 	}
 }
 
 function autoHideBookmarksBox(mouse_loc)
 {
 	//hideOverlay('page_blackout_screen', 'fade')
 	setTimeout("hideOverlay('social_bookmarks_box', 'fade')", 8500);
 }
 
function getElementBounds(elm)
{
	var t, r, b, l = 0;
	
	t = elm.offsetTop;
	r = elm.offsetWidth;
	b = elm.offsetHeight;
	l = elm.offsetLeft;
	
	elm = elm.offsetParent;
	
	while(elm != null) {
		t = parseInt(t) + parseInt(elm.offsetTop);
		r = parseInt(r) + parseInt(elm.offsetTop);
		b = parseInt(b) + parseInt(elm.offsetLeft);
		l = parseInt(l) + parseInt(elm.offsetLeft);
		elm = elm.offsetParent;
	}
	
	return {Top:t, Right: r, Bottom: b, Left: l};
}

function urldecode(str)
{
	// http://kevin.vanzonneveld.net
	// +   original by: Philip Peterson
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// *     example 1: urldecode('Kevin+van+Zonneveld%21');
	// *     returns 1: 'Kevin van Zonneveld!'
    
	var ret = str;
	ret = ret.replace(/\+/g, '%20');
	ret = decodeURIComponent(ret);
	ret = ret.toString();
	return ret;
}

var activeNavigation = "";
var destinationUrl = "";

function showNavigation(url, destUrl)
{
	var nav = document.getElementById('primary_nav_overlay');
	
	if (nav.style.display == "none") {
		showOverlay('primary_nav_overlay', 'fade', .93);
		populateOverlayAjax('primary_nav_overlay', url);
		showOverlay('primary_search_form', 'fade', .93);
		destinationUrl = destUrl;
		setTimeout('showLinksOnNavFailure()', 3000);
	} else if (url != activeNavigation) {
		populateOverlayAjax('primary_nav_overlay', url);
	} else {
		hideOverlay('primary_nav_overlay', "fade", .93);
	}
	
	activeNavigation = url;
}

function showLinksOnNavFailure()
{
	var nav = document.getElementById('primary_nav_overlay');
	
	//see if target is still empty and send to destUrl if it is
	if (nav.innerHTML == "") {
		nav.innerHTML = "<div style=\"padding:12px;\">One moment please...</div>";
		document.location.href = destinationUrl;
	}
}