/**
 * Support JavaScript file
 * @author: Michael Martin (mikemm@u.washington.edu)
 */

/**
 * Call in the Documents onload event to setup the document
 */
function OnBodyLoad()
{
	// Set the input focus for the first form element that is a text or password input
	SetInputFocus();
}

/**
 * Set the focus to the first text entry element in the page
 *
 * @return void
 */
function SetInputFocus()
{
	var done = false;
	for(var j = 0; (j < document.forms.length) && !done; j++)
	{
	    var form = document.forms[j];
		if(form)
		{
			for(var i = 0; (i < form.elements.length) && !done; i++)
			{
				if((form.elements[i].type == "text" || form.elements[i].type == "password" ||
					form.elements[i].type == "textarea") &&
				   !form.elements[i].disabled &&
				   !form.elements[i].readOnly)
				{
					form.elements[i].focus();
					done = true;
				}
			}
		}
	}
}

/**
 * Determine if cookies are enabled which is required for using sessions
 * and therefore most of the website
 */
function CookiesEnabled()
{
	document.cookie = "Enabled=true";
	var cookieValid = document.cookie;
	return (cookieValid.indexOf("Enabled=true") != -1);
}

/**
 * Toggle the display for the given element
 */
function ToggleHide(element)
{
	var elementObj = document.getElementById(element);
	if(elementObj.style.display == 'none')
	{
		if(elementObj.lastDisplay)
		{
			elementObj.style.display = elementObj.lastDisplay;
		}
		else
		{
			elementObj.style.display = '';
		}
	}
	else
	{
		elementObj.lastDisplay = elementObj.style.display;
		elementObj.style.display = 'none';
	}
}

function PrintPage()
{
	if(typeof(window.print) != 'undefined')
	{
		window.print();  
	}
	else
	{
		alert("Sorry, your browser doesn't support this functionality.\nYou will have to print the page using your browsers print capabilities.");
	}
}

/**
 * Create an AJAX XMLHttpRequest Object
 */
function AJAXRequest()
{
	var req = false;
	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		} catch(e) {
			req = false;
		}
	// branch for IE/Windows ActiveX version
	} else if(window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				req = false;
			}
		}
	}
	return req;
}

/**
 * Use AJAX to retrieve the document source for this page and send it to W3C for validation
 */
function ValidateXHTML()
{
	var req = new AJAXRequest();
	if(req) {
		req.onreadystatechange = function()
		{
			// only if req shows "loaded"
			if (req.readyState == 4) {
				
				// only if "OK"
				if (req.status == 200) {
					var fragment = document.getElementById('fragment');
					fragment.value = req.responseText;
					var form = document.getElementById('xhtmlvalidator');
					form.submit();
				} else {
					window.status = "There was a problem retrieving the XML data: " + req.statusText;
				}
			}
		};
		req.open("GET", location.href, true);
		req.send("");
	}
}