// JavaScript Document

var layerobject = ((document.layers) ? (true) : (false));
var dom = ((document.getElementById) ? (true) : (false));
var allobject = ((document.all) ? (true) : (false));
var opera = navigator.userAgent.toLowerCase().indexOf('opera') != -1;

function getElement(layerName, parentLayer) // Expanded function for getting element by ID (layerName)
{
  if(layerobject)
  {
	parentLayer = (parentLayer) ? parentLayer : self;
	layerCollection = parentLayer.document.layers;
	if (layerCollection[layerName]) return layerCollection[layerName];
	/* Look through nested layers */
	for(i = 0; i < layerCollection.length;)
	  return(getElement(layerName, layerCollection[i++]));
  }
  if(allobject) return document.all[layerName];
  if(dom) return document.getElementById(layerName);
}

function show(layerName) // Show an element that is currently hidden
{
  var theLayer = getElement(layerName);
  if(layerobject) theLayer.visibility = 'show';
  else theLayer.style.visibility = 'visible';
}

function hide(layerName) // Hide an element from view
{
  var theLayer = getElement(layerName);
  if(layerobject) theLayer.visibility = 'hide';
  else theLayer.style.visibility = 'hidden';
}

function setX(layerName, x) // Set the horiaontal positioning of an absolutely positioned element
{
  var theLayer 	= getElement(layerName);
  if(layerobject) theLayer.left = x;
  else if(opera) theLayer.style.pixelLeft = x;
  else theLayer.style.left = x + 'px';
}

function setY(layerName, y) // Set the horiaontal positioning of an absolutely positioned element
{
  var theLayer 	= getElement(layerName);
  if(layerobject) theLayer.top = y;
  else if(opera) theLayer.style.pixelTop = y;
  else theLayer.style.top = y + 'px';
}

function getScrollXY() // Get scroll values for left and top coordinates in all browsers
{
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' )
  {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  }
  else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
  {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  }
  else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) )
  {
    //IE6+ standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function displayLayer(layerName, x, y) // Display and set absolute position coordinates for an element (with x and y as desired offsets)
{
  var hScroll = getScrollXY()[0];
  var vScroll = getScrollXY()[1];
  if(navigator.appName == 'Microsoft Internet Explorer' && /Windows/.test(navigator.userAgent)) hScroll = hScroll - 175; // Hack for MSIE on Windows
  setX(layerName, x + hScroll); // Add desired offsets to user's scroll location, set coordinates for element to be displayed
  setY(layerName, y + vScroll);
  show(layerName); 
}

function dispPopLinks(navmenuID) // Show normal colors (background & border) for popdowns when rolling over menu
{																 // header (workaround for minor display issue before rolling over popdown links)
	var navMenuLgth = navmenuID.length;
	var navMenuNo = navmenuID.charAt(navMenuLgth-1); // Get number at end of navigation menu ID
	var popBase = 'poplink' + navMenuNo; // Base of popdown item names for this menu
	var i = 0;
	var liEl = getElement(popBase + '0'); // Get first <li> element
	while(liEl)
	{
		popLinkNorm(liEl); // Display colors for each <li> element
		i++;
		liEl = getElement(popBase + i); // Get next <li> element, if any
	}
}

function popLinkRoll(obj) // Switch to rollover color for navigation popdown links (background & border colors)
{
	obj.style.backgroundColor = '#e6edf8';
	obj.style.borderColor = '#e0ffff';
}

function popLinkNorm(obj) // Revert to normal color for navigation popdown links (background & border colors)
{
	obj.style.backgroundColor = '#b2c3df';
	obj.style.borderColor = '#ccccff';
}

function posMacIE() // Hack for positioning in IE for Mac
{
  if(/MSIE/.test(navigator.userAgent) && /Mac/.test(navigator.userAgent))
  {
	getElement('linktable').style.marginLeft = '35px';
	var rowEl = getElement('linkdiv1');
	rowEl.style.paddingTop = '2px';
	rowEl.align = 'left';
	setX('navmenu1',-28);
	setY('navmenu1',0);
	rowEl = getElement('linkdiv2');
	rowEl.style.paddingTop = '2px';
	rowEl.align = 'right';
	setX('navmenu2',18);
	setY('navmenu2',0);
	rowEl = getElement('linkdiv3');
	rowEl.style.paddingTop = '2px';
	rowEl.align = 'right';
	setX('navmenu3',25);
	setY('navmenu3',0);
	rowEl = getElement('linkdiv4');
	rowEl.style.paddingTop = '6px';
	rowEl.align = 'right';
	rowEl = getElement('homephoto');
	rowEl.style.marginLeft = '74px';
  }
}

function phoneConvert(fieldName) // Convert format of phone numbers entered into submitted forms, so that the
{																	 // different sections are separated by hyphens (not parentheses, spaces, etc.)
  var strObj = new Object();     // Place value of field entry into an object to be modified in the
  strObj.phNo = fieldName.value;  // cullExtension subroutine if an extension is found; initialize extension 
  strObj.ext = '';				  // string to blank
  cullExtension(strObj);  // Separate into two strings if a phone extension is added
  var phoneNo = new String();
  phoneNo = strObj.phNo;
  var exten = new String();
  exten = strObj.ext;
  if(phoneNo.length > 0)  // Leave alone if no field entry
  {
		var delim = /[^a-zA-Z0-9]+/;  // Cull out numerals and any letters from input phone number
		var phoneArray = new Array();
		phoneArray = phoneNo.split(delim);  // Array of number/letter clusters with any other characters removed
		var phArLength = phoneArray.length;
		if(phoneArray[phArLength - 1] == '') phArLength--;  // Split method will add an empty cluster at end of array
		var convPhoneNo = new String();					 // if any non-numbers/letters are entered at end of string
		convPhoneNo = '';  // Converted phone number, initialized as a blank character string
		for(var i = 0; i < phArLength; i++)  // Add number/letter clusters into convPhoneNo, with hyphens in between
		{
			if(convPhoneNo != '') convPhoneNo += '-';  // Add hyphen, except before beginning of number
			if(i > 0 || phoneArray[0] != '1')  // Add next cluster, unless it is the country code "1" for US or Canada
				convPhoneNo += phoneArray[i];
		}
		if(phArLength == 2) // If only 2 sections of number, merge into one string to be handled in next section for
		{										// number/letter strings with no other characters
			delim = /[^a-zA-Z0-9]+/g;
			phoneArray[0] = phoneNo.replace(delim,'');
			phArLength = 1;
		}
		if(phArLength == 1)  // Handle case in which user enters only numbers/letters, no spaces or other characters
		{
			var arrayString = new String();
			var arrayString2 = new String();
			arrayString2 = phoneArray[0];
		 if(arrayString2.length == 11 && arrayString2.charAt(0) == '1')  // Delete country code '1' for US or Canada
				arrayString = arrayString2.substring(1)
		 else arrayString = arrayString2;
		 if(arrayString.length == 10)  // Insert hyphens into a US or Canadian number entered with no delimiters
				convPhoneNo = arrayString.substring(0,3) + '-' + arrayString.substring(3,6) + '-' +
				arrayString.substring(6);
		}
		fieldName.value = convPhoneNo + exten;
  }
}

function cullExtension(stOb)  // Search for any extension entered at end of phone number
{
  var xLoc = stOb.phNo.search(/e*x/i);
  if(xLoc >= 10)  // Assume at least 10 digits appear before extension
  {
    stOb.ext = stOb.phNo.substring(xLoc);  // Extension is now stored in variable ext
	stOb.phNo = stOb.phNo.substring(0,xLoc);  // Truncate extension from main phone number string
    stOb.ext = stOb.ext.replace(/[ex]+t*e*n*s*i*o*n*/g,'x')  // Convert any strings obviously meaning "extension"
															// to simply "x"
	stOb.ext = stOb.ext.replace(/[^a-zA-Z0-9]/g,'');  // Delete any periods, spaces, etc.
  }
}

/* Standard rollover functions */
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

