//****************************** Browser Detection. ******************************	
var detect = navigator.userAgent.toLowerCase();
	var OS,browser,version,total,thestring;
	
	if (checkIt('konqueror'))
	{
		browser = "Konqueror";
		OS = "Linux";
	}
    else if (checkIt('netscape')) browser = "Netscape Navigator";
	else if (checkIt('safari')) browser = "Safari";
	else if (checkIt('omniweb')) browser = "OmniWeb";
	else if (checkIt('opera')) browser = "Opera";
	else if (checkIt('webtv')) browser = "WebTV";
	else if (checkIt('icab')) browser = "iCab";
	else if (checkIt('msie')) browser = "Internet Explorer";
	else if (checkIt('firefox')) browser = "Mozilla Firefox";
	else if (!checkIt('compatible'))
	{
		browser = "Mozilla"
		version = detect.charAt(8);
	}
	else browser = "An unknown browser";
	
	if (!version) version = detect.charAt(place + thestring.length);
	
	if (!OS)
	{
		if (checkIt('linux')) OS = "Linux";
		else if (checkIt('x11')) OS = "Unix";
		else if (checkIt('mac')) OS = "Mac"
		else if (checkIt('win')) OS = "Windows"
		else OS = "an unknown operating system";
	}
	
	function checkIt(string)
	{
		place = detect.indexOf(string) + 1;
		thestring = string;
		return place;
	}


//****************************** Nav Controls ******************************	
function showNav(itemName,itemNum) {	
	showItem = document.getElementById(itemName);
	//define physical nav width for all dropdowns
	var navWidth = 200;
	//how many pages in the root level nav
	//var totalMasterPages = 10;

	if(browser != "Internet Explorer" && OS == "Windows") {
    //Non-IE, PC
	//add a little to the margins
	showItem.style.width = navWidth;	
	showItem.style.marginTop = "2px";
	showItem.style.marginLeft = "-1px";
			/*
			//move the last nav item more to the left
			if(itemNum < totalMasterPages) {
				showItem.style.marginLeft = "-1px";
			} else {
				showItem.style.marginLeft = "-90px";	
			}
			*/
	//show nav
    showItem.style.display = "block";
	//alert("firefox-ish");
    }
	else if(browser == "Safari" && OS =="Mac") {
    //Safari
    //add a little to the margins
	showItem.style.width = navWidth;	
	showItem.style.marginTop = "2px";
	showItem.style.marginLeft = "-1px";
			/*
			//move the last nav item more to the left
			if(itemNum < totalMasterPages) {
				showItem.style.marginLeft = "-1px";
			} else {
				showItem.style.marginLeft = "-90px";	
			}
			*/
	//show nav
    showItem.style.display = "block";
	//alert("safari");		
    } 	
	else if(browser == "Internet Explorer" && OS =="Windows") {
    //IE 6+ in 'standards compliant mode'
	//else do a buncha other stuff 'cuz IE sucks
	//add a little to the margins
	showItem.style.width = navWidth;	
	showItem.style.marginTop = "2px";
	/*
		//move the last nav item more to the left
	if(itemNum > totalMasterPages) {
		showItem.style.marginLeft = "-100px";	
	}
	*/
	//show nav
    showItem.style.display = "block";	
    }

}

//****************************** General Functions ******************************	
//show layer by id
function show(itemName) {		
	showItem = document.getElementById(itemName);
	showItem.style.display="block";
	}

//hide layer by id
function hide(itemName) {
	hideItem = document.getElementById(itemName);
	hideItem.style.display="none";
}

//hides an item on a delay
function hideTimer(itemName) {
	timer = setInterval("hide('"+itemName+"')",350);	
}

//open popup
function openWindow(theURL,winName,features) {
  window.open(theURL,winName,features);
}


//dreamweaver preloader stuff
function preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.p) d.p=new Array();
    var i,j=d.p.length,a=preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.p[j]=new Image; d.p[j++].src=a[i];}}
}

function swapImgRestore() { //v3.0
  var i,x,a=document.sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function 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=findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function swapImage() { //v3.0
  var i,j=0,x,a=swapImage.arguments; document.sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=findObj(a[i]))!=null){document.sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

//****************************** Generic Form Validation ******************************	

function validateForm(formname) {
	
//root vars for the validate, dont move them!
var thisForm = eval('document.'+formname);
var total_items = thisForm.elements.length;
var errors = "";
var prevRadio = "";

//RegEx determines how explicit validation will be based on type
var noRegEx = /^.*$/;
var textRegEx = /^.+$/;
var phoneRegEx = /^[0-9-.\/]+$/;
var emailRegEx = /^([0-9a-zA-Z.])+(@)[0-9a-zA-Z.]+$/;
var webRegEx = /^(http:\/\/)*(www.)[0-9a-zA-Z.]+$/;

	for(i=0;i<total_items;i++) {
		//id
		thisId = thisForm.elements[i].id;	
		//id for output
		thisLabel = thisForm.elements[i].id.substr(2);
		//name for radios
		thisName = thisForm.elements[i].name;
		//value to determine REGEX values where applicable - t for text or select, p for phone, w for web, r for radio
		thisVal = thisForm.elements[i].id.substr(0,1);	
		
		var regEx = "";
		//pull diff RegEx values for diff field types
		switch(thisVal) {
			case "t":
			regEx = textRegEx;
			break;
			
			case "p":
			regEx = phoneRegEx;
			break;
			
			case "w":
			regEx = webRegEx;
			break;
			
			case "e":
			regEx = emailRegEx;
			break;
			
			case "x":
			regEx = noRegEx;
			break;
			
			default:
			regEx = textRegEx;
		}
		
		//text & select fields
		if(thisForm.elements[i].type == "text" || thisForm.elements[i].type == "select") {		
			if(!regEx.test(thisForm.elements[i].value)) {	
				errors += "*Please Enter "+thisLabel+"\n";
			} 	
		//radio buttons
		} else if(thisForm.elements[i].type == "radio") {
			//get total radio btns of this name
		    thisLength = thisForm.elements[thisName].length;	
	
			var numRadios = thisLength;		
			var radioErrors = 0;
									
			for(x=0;x<numRadios;x++) {		
				//get checked properties for each radio btn	in this group
				if(thisForm.elements[thisName][x].checked == false) {
					radioErrors++;
				}
				if(radioErrors == numRadios) {
						//only log errors for each radio group
						if(prevRadio != thisName) {
							prevRadio = thisName;
							errors += "*Please Select "+thisLabel+"\n";
						}
				} 				
			}
		//check boxes
		} else if(thisForm.elements[i].type == "checkbox") {
			if(thisVal == "c") {
				if(!thisForm.elements[i].checked) {
					errors += "*Please Check "+thisLabel+"\n";
				}
			}
		//for any other element
		} else {
			 if(!regEx.test(thisForm.elements[i].value)) {	
				errors += "*Please Enter "+thisLabel+"\n";
			} 	
			
		}
	}
	
	if(errors != "") {
		alert(errors);
		return false;
	} else {
		return true;
	}
}

