function openWindow(url, width, height)
{
	var x = (screen.availWidth  - width)  / 2;
	var y = (screen.availHeight - height) / 2;

	var options = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,width='+width+',height='+height+',left='+x+',top='+y;
	popup = window.open(url, '', options);
	popup.focus();
}

function validateContact(form)
{
	var errors = '';
	
	if(trim(form.firstName.value) == '')
	{
		errors += 'First Name\n\n';
		form.firstName.className = form.firstName.className+'_error';
		form.firstName.onblur = checkOnBlur;
	}
	if(trim(form.lastName.value) == '')
	{
		errors += 'Last Name\n\n';
		form.lastName.className = form.lastName.className+'_error';
		form.lastName.onblur = checkOnBlur;
	}
	if(trim(form.email.value) == '' || form.email.value.indexOf('@') == -1)
	{
		errors += 'Email\n\n';
		form.email.className = form.email.className+'_error';
		form.email.onblur = checkOnBlur;
	}
	if(trim(form.phone.value) == '')
	{
		errors += 'Work Phone Number\n\n';
		form.phone.className = form.phone.className+'_error';
		form.phone.onblur = checkOnBlur;
	}
	if(form.departmentID.value == 'SELECT')
	{
		errors += 'Select a product or service you are interested in';
		form.departmentID.className = 'error';
		form.departmentID.onchange = checkOnBlur;
	}
/*	if(trim(form.fax.value) == '')
	{
		errors += 'Fax Number\n\n';
		form.fax.className = form.fax.className+'_error';
		form.fax.onblur = checkOnBlur;
	}
*/	
	if(errors != '')
	{
		alert('Please complete the following fields:\n\n'+errors);
		return false;
	}
	else return true;
	
	function checkOnChange()
	{
		if(this.value != 'NEW')
		{
			this.className = '';
			this.onchange = null;
		}
	}
	function checkOnBlur()
	{
		if(trim(this.value) != '')
		{
			this.className = (this.className.indexOf('short') > -1) ? 'short' : (this.className.indexOf('long') > -1 ? 'long' : '');
			this.onblur = null;
		}
	}
}

/*
function resize()
{
	return;
	var headerHeight     = parse(getStyle('header').height);
	var navigationHeight = parse(getStyle('navigation').height);
	var contentHeight    = parse(getStyle('content').height);
	var footerHeight     = parse(getStyle('footer').height);

	var content_div = document.getElementById('content'); content_div.style.height = '';

	var pageW = (document.documentElement) ? document.documentElement.clientWidth  : document.body.clientWidth;
	var pageH = (document.documentElement) ? document.documentElement.clientHeight : document.body.clientHeight;

	var idealHeight = pageH - headerHeight - navigationHeight - footerHeight - 25;
	if(idealHeight > contentHeight)
		content_div.style.height = idealHeight+'px';

	function getStyle(elementName) { var element = document.getElementById(elementName); return (element.currentStyle) ? element.currentStyle : getComputedStyle(element, null); }
	function parse(field) { return (field == null || field == '' || isNaN(field = parseInt(field.substr(0, field.length - 2)))) ? 0 : field; }
}
*/

function emailDeobviscate(link, inputArray)
{
	link.href = 'mailto:'+inputArray.join('');
}

function showMore(id)
{
	if(div = document.getElementById('hidden_'+id))
	{
		div.style.display = 'block';
		if(link = document.getElementById('show_'+id))
		{
			link.href = 'javascript:hideMore('+id+');';
			link.replaceChild(document.createTextNode('<<Back'), link.firstChild);
		}
	}
}
function hideMore(id, refocus)
{
	if(div = document.getElementById('hidden_'+id))
	{
		div.style.display = 'none';
		if(link = document.getElementById('show_'+id))
		{
			link.href = 'javascript:showMore('+id+');';
			link.replaceChild(document.createTextNode('More>>'), link.firstChild);
		}
		if(refocus)
			window.location.hash = 'product_'+id;
	}
}

function println(str) 
{
	content_div.appendChild(document.createTextNode(str));
	content_div.appendChild(document.createElement("br"));
}

function onError(errorInfo, functionName, scriptName)
{
}

// MouseOver Fading Object
moFade.current = null; // current menu that is displayed
moFade.canFade = null; // whether or not the browser can handle fades
function moFade(mouseOverElementId) 
{
	var ref = this;
	// static vars
	if(moFade.canFade === null)
		moFade.canFade = (browser.isFirefox);

	// public functions
	this.invokeFadeOut = invokeFadeOut;

	// private vars
	var mouseOverObj	= document.getElementById(mouseOverElementId);
	if(mouseOverObj != null && !(browser.isSafari))
	{
		mouseOverObj.onmouseover = beginMouseOver;
		mouseOverObj.onmouseout  = beginMouseOut;
	}
	else onError('Element not found for id: '+mouseOverElementId, 'moFade()', 'init.js');
	
	var fadingObj		= mouseOverObj.getElementsByTagName("ul")[0]; // first and only child
	var fadeLength		= 150; // time it takes to completely fade, *2 when hidding moFade.current
	var fadeInDelay   = 100; // wait time before beginning to appear
	var fadeOutDelay  = 200; // wait time before beginning to fade
	var fadeInterval  = 10;  // smoothness, smaller is smoother
	
	var delayInTimer	= null;
	var delayOutTimer	= null;
	var fadeInInterval	= null;
	var fadeOutInterval	= null;
	var opacityCur		= 0;
	var opacityMin    = 0;
	var opacityMax    = 99; // The 99 is there, because ff flickers from 99% opacity to 100.
	var fadeChange = opacityMax / (fadeLength / fadeInterval);
	
	// private functions
	function clearTimers()
	{
		if(delayInTimer != null)
		{
			window.clearTimeout(delayInTimer);
			delayInTimer = null;
		}
		if(delayOutTimer != null)
		{
			window.clearTimeout(delayOutTimer);
			delayOutTimer = null;
		}
		if(fadeInInterval != null)
		{
			window.clearInterval(fadeInInterval);
			fadeInInterval = null;
		}
		if(fadeOutInterval != null)
		{
			window.clearInterval(fadeOutInterval);
			fadeOutInterval = null;
		}
	}
	
	function beginMouseOver()
	{
		if(delayOutTimer != null)
		{
			window.clearTimeout(delayOutTimer);    
			delayOutTimer = null;
		}

		if(moFade.current != ref)
		{
			if(moFade.current != null)
				moFade.current.invokeFadeOut();
			if(delayInTimer == null)
			{
				if(moFade.canFade)
					delayInTimer = window.setTimeout(startFadeIn, fadeInDelay);
				else delayInTimer = window.setTimeout(showIn, fadeInDelay);
			}
		}
		else if(moFade.canFade && opacityCur < opacityMax)
		{
			if(fadeOutInterval != null)
			{
				window.clearInterval(fadeOutInterval);    
				fadeOutInterval = null;
			}
			delayInTimer = window.setTimeout(startFadeIn, fadeInDelay);
		}
		
		function showIn() // non-fade
		{
			clearTimers();
			moFade.current = ref;
			fadingObj.style.display = 'block';
		}
		
		function startFadeIn()
		{
			clearTimers();

			moFade.current = ref;
			setOpacity(opacityCur);
			fadingObj.style.display = 'block';
			fadeInInterval = window.setInterval(runFadeIn, fadeInterval);
			
			function runFadeIn() 
			{
				opacityCur += fadeChange;
				setOpacity(opacityCur);
				if(opacityCur >= opacityMax)
					window.clearInterval(fadeInInterval);
			}
		}
	}
	
	function beginMouseOut()
	{
		window.clearTimeout(delayInTimer); delayInTimer = null;
		if (delayOutTimer == null) 
		{
			if(moFade.canFade)
				delayOutTimer = window.setTimeout(startFadeOut, fadeOutDelay);
			else delayOutTimer = window.setTimeout(showOut, fadeOutDelay);
		}
		
		function showOut() // non-fade
		{
			clearTimers();
			fadingObj.style.display = 'none';
			moFade.current = null;
		}
		
		function startFadeOut()
		{
			clearTimers();

			fadeOutInterval = window.setInterval(runFadeOut, fadeInterval);
			function runFadeOut() 
			{
				opacityCur -= fadeChange;
				setOpacity(opacityCur);
				if (opacityCur <= opacityMin) 
				{
					fadingObj.style.display = 'none';
					moFade.current = null;
					window.clearInterval(fadeOutInterval);
				}
			}
		}
	}
	
	function invokeFadeOut()
	{
		clearTimers();
		
		if(moFade.canFade)
		{
			setOpacity(opacityCur=75);
			fadeOutInterval = window.setInterval(runFadeOut, fadeInterval);
		}
		else // non-fade
		{
			fadingObj.style.display = 'none'; 
		}
		
		function runFadeOut() 
		{
			opacityCur -= (fadeChange * 2);
			setOpacity(opacityCur);
			if (opacityCur <= opacityMin) 
			{
				fadingObj.style.display = 'none'; 
				window.clearInterval(fadeOutInterval);
			} 
		}
	}

	function setOpacity(opacityCur)
	{
		if (opacityCur > opacityMax)
			opacityCur=opacityMax;
		fadingObj.style['opacity']      = opacityCur / 100;
		fadingObj.style['-moz-opacity'] = opacityCur / 100;
		fadingObj.style['filter']       = 'alpha(opacity='+opacityCur+')';
	}
}

function trim(str)
{
	var strlen = str.length;

	var start = 0;
	var c = str.charAt(start);
	while(start < strlen && (c == ' ' || c == '\n' || c == '\r\n' || c == '\t'))
		c = str.charAt(++start);
		
	var end = strlen;
	var c = str.charAt(end - 1);
	while(end > 0 && (c == ' ' || c == '\n' || c == '\r\n' || c == '\t'))
		c = str.charAt(--end - 1);
	
	if(start > 0 || end < strlen)
		return str.substring(start, end);
	else return str;
}