var OPENFLAGS_NEWWINDOW = 1;
var OPENFLAGS_BACKGROUND = 2;

function openUrl( url, flags )
{
	if(flags & OPENFLAGS_NEWWINDOW)
	{
		var w = window.open(url);

		if(flags & OPENFLAGS_BACKGROUND)
			w.blur();
		else
			w.focus();
	}
	else
		document.location = url;
}


/* Check whether the js engine supports all the functions, methods and
 * objects required to implement the Ajax embedded form of the messenger.
 */
function browserIsMessengerCapable()
{
	/* check whether some key functions are available */
	if(!$ || !Element || !document.body || !document.body.appendChild || !document.body.removeChild || !Ajax || !Ajax.Updater)
	{
		//alert("required function or method not available");
		return false;
	}

	/* check whether the "div" element has succussfully been extended by prototype with the "update" method */
	var d = new Element("div");//document.createElement("div");

	if(!d.update)
	{
		//alert("div does not support the update method");
		return false;
	}

	/* check whether the "form" element has succussfully been extended by prototype with the "serialize" method */
	var f = new Element("form");
	if(!f.serialize)
	{
		//alert("form does not support the serialize method");
		return false;
	}

	return true;
}


/* Centre the messenger overlay. If the browser can do fixed positioning
 * (assumed from whether or not it can produce viable viewport coordinates
 * and dimensions) the messenger is moved so that its centre is right in
 * the centre of the viewport. Otherwise it is left wherever it is.
 */
function centreMessenger()
{
	var viewportDimensions = document.viewport.getDimensions();

	/* if browser doesn't support viewport dimensions, don't try to reposition */
	if(viewportDimensions.width == 0 || viewportDimensions.height == 0)
		return;

	var messengerContainer = $("nomadsuite_messenger_container");
	if(!messengerContainer) return;
	var messengerDimensions = messengerContainer.getDimensions();

	/* this assumes that if the browser knows where the viewport is it can do fixed positioning properly */
	messengerContainer.style.position = "fixed";
	messengerContainer.style.left = ((viewportDimensions.width / 2) - (messengerDimensions.width / 2)) + "px";
	messengerContainer.style.top = ((viewportDimensions.height / 2) - (messengerDimensions.height / 2)) + "px";
}


/* Show the messenger overlay. The messenger container is created if it does not
 * already exist. If the browser can do fixed positioning (assumed from whether
 * or not it can produce viable viewport coordinates and dimensions) the messenger
 * is fixed in the centre of the viewport. Otherwise, it is absolutely positioned
 * 10% from left and 10% from top of page.
 */
function showMessenger( who, id, lex, subject )
{
	if(!browserIsMessengerCapable())
	{
		//alert("Your browser does not support embedding of the messenger. It will be opened in a new window.");
		openUrl("pheidippides.php5?Type=" + who + "&Id=" + id + "&Lexicon=" + lex + "&Subject=" + subject, OPENFLAGS_NEWWINDOW);
		return;
	}

	var messengerContainer = $("nomadsuite_messenger_container");

	if(!messengerContainer)
	{
		messengerContainer = document.createElement("div");
		messengerContainer.id="nomadsuite_messenger_container";
		messengerContainer.style.display = "none";
		
		document.body.appendChild(messengerContainer);
	}
		
	if(!messengerContainer)
	{
		openUrl("pheidippides.php5?Type=" + who + "&Id=" + id + "&Lexicon=" + lex + "&Subject=" + subject, OPENFLAGS_NEWWINDOW);
		return;
	}

	if(messengerContainer.style.display != "none")
	{
		alert("The messenger is already open. You must close it before you can open another.");
		return;
	}

	var bodyCover = document.createElement("div");
	bodyCover.id = "nomadsuite_messenger_bodycover";
	bodyCover.style.left = "0";
	bodyCover.style.top = "0";
	bodyCover.style.width = "100%";
	bodyCover.style.height = "100%";
	bodyCover.style.background = "RGB(175,175,175)";
	bodyCover.style.opacity = "0.66";
	bodyCover.style.filter = "alpha(opacity = 66)";	/* keep IE happy! */
	bodyCover.style.MozOpacity = "0.66";			/* keep old versions of Moz, NN and FF happy */
	bodyCover.style.KhtmlOpacity = "0.66";			/* keep old versions of Konq happy */
	bodyCover.style.display = "block";
	bodyCover.style.position = "fixed";				/* IE6 places this at the bottom of the page - no biggie */
	bodyCover.style.zIndex = "1";
	bodyCover.style.cursor = "wait";
	document.body.appendChild(bodyCover);

	//alert("Starting Ajax request.");
	new Ajax.Request("pheidippides.php5?Fragment&Type=" + who + "&Id=" + id + "&Lexicon=" + lex + "&Subject=" + subject,
		{
			method: "get",
			onFailure:	function(response)
						{
							alert("The contact form failed to load. Please try again.");
							messengerClose();
						},
			onCreate:	function(response)
						{
							$("nomadsuite_messenger_container").update("<img src=\"images/loading.gif\" alt=\"\" />Loading...");
							centreMessenger();
						},
			onSuccess:	function(response)
						{
							$("nomadsuite_messenger_container").update(response.responseText);
							centreMessenger();
						}
		});
	
	var viewportDimensions = document.viewport.getDimensions();

	if(viewportDimensions.width == 0 || viewportDimensions.height == 0)
	{
		/* 0 width or height likely means the browser doesn't support viewport location and dimensions
		 * so we assume it doesn't do fixed positioning properly - looking at you, IE6! */
		messengerContainer.style.position = "absolute";
		messengerContainer.style.left = "10%";
		messengerContainer.style.top = "10%";
	}

	messengerContainer.style.zIndex = "2";
	messengerContainer.style.display = "block";
	return;
}


function messengerSubmit()
{
	if(!browserIsMessengerCapable())
		return;

	var messengerForm = $("nomadsuite_messenger_form");

	if(!messengerForm)
	{
		//alert("Failed to find the messenger form.");
		return;
	}

	$("nomadsuite_messenger_container").style.cursor = "wait";

	messengerForm.request(
		{
			onSuccess:	function(response)
						{
							var messengerContainer =  $("nomadsuite_messenger_container")
							messengerContainer.update(response.responseText);
							messengerContainer.style.cursor = "default";
							centreMessenger();
						},
			
			onCreate:	function(response)
						{
							$("nomadsuite_messenger_container").update("<img src=\"images/loading.gif\" alt=\"\" />Sending...");
							centreMessenger();
						},

			onFailure: function(response)
						{
							$("nomadsuite_messenger_container").update("Sending failed.");
							centreMessenger();
						}
		});
}


function closeMessenger()
{
	if(!browserIsMessengerCapable())
		return;

	var messengerContainer = $("nomadsuite_messenger_container");
	if(messengerContainer)
	{
		/* leave the container for future use */
		messengerContainer.style.display = "none";
		messengerContainer.innerHTML = "";
	}

	var bodyCover = $("nomadsuite_messenger_bodycover");
	if(bodyCover)
	{
		document.body.removeChild(bodyCover);
	}
}

