// BROWSER DETECTION
function lib_bwcheck(){ //Browsercheck (needed)
	this.ver=navigator.appVersion
	this.agent=navigator.userAgent
	this.dom=document.getElementById?1:0
	this.opera5=this.agent.indexOf("Opera 5")>-1
	this.opera=this.agent.indexOf("Opera")>-1
	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie7=(this.ver.indexOf("MSIE 7")>-1 && this.dom && !this.opera5)?1:0;
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
	this.ie=this.ie4||this.ie5||this.ie6||this.ie7
	this.mac=this.agent.indexOf("Mac")>-1
	this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; 
	this.ns4=(document.layers && !this.dom)?1:0;
	this.webkit=this.agent.indexOf('AppleWebKit/')>-1
	this.bw=(this.ie7 || this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera || this.opera5)
	return this
}
var bw=new lib_bwcheck()

// http://www.quirksmode.org/js/detect.html
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.userAgent,
			subString: "iPhone",
			identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

/* writes flash animation to screen 
 * PARAMS
 * 	src: the path of the flash file
 * 	id: id used for object (id), embed (id + _embed) and map (id + _map)
 * 	width: width of the swf
 * 	height: height of the swf
 * 	alternateSrc: path for alternate image
 * 	redirect: boolean for link to Macromedia
 * 	version: flash player version
 */
 
function writeFlash(src, id, width, height, alternateSrc, redirect, version) {
	if ((flashinstalled == 2) && (flashversion >= version)) {
		document.write('<object style="width: ' + width + '; height: ' + height + '; display: inline" id="' + id + '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + version + ',0,0,0">');
		document.write('<param name="movie" value="' + src + '" />');
		document.write('<param name="allowScriptAccess" value="sameDomain" />');
		document.write('<param name="quality" value="high" />');
		document.write('<param name="wmode" value="transparent" />');
		document.write('<embed id="' + id + '_embed" wmode="transparent" swliveconnect="true" style="width: ' + width + '; height: ' + height + '; display: inline" src="' + src + '" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash"></embed>');
		document.write('</object>');
		return true;
	} else {
	 	if (redirect)
			document.write('<a href="http://www.macromedia.com/go/getflashplayer" target="_blank">');
		if (alternateSrc != "")
			document.write('<img src="' + alternateSrc + '" width="' + width + '" height="' + height + '" id="nav" name="nav" alt="" border="0" usemap="#' + id + '_map">');
	 	if (redirect)
			document.write('</a>');
		return false;
	}
}

// FLASH RESIZE
function setFlashSize(container, id, width, height) {
//	alert(container);
//	alert(id);
//	if (!bw.ie || bw.opera) {
//		id += '_embed';
//	}

//	if (!isNaN(width) && !isNaN(height) && document.getElementById(id)) {
//		document.getElementById(id).style.width		= width;
//		document.getElementById(id).style.height	= height;
//		if (!BrowserDetect.browser && "Explorer" || BrowserDetect.browser == "Chrome") {
//			document.getElementById(container).style.width	= width;
//			document.getElementById(container).style.height	= height;
//		}
//	}
}

// IFRAME RESIZE
function resize(div, top, padding) {
	if (top > -1)
		parent.scrollTo(0, top);
	parent.document.getElementById(div).style.height = padding;
	parent.document.getElementById(div).style.height = window.document.body.scrollHeight + padding;
}

// IFRAME REDIRECT
function redirect(page, doRedirects) {
	if (doRedirects) {
		var urlArray = new String(document.URL).split("/");
		urlArray = new String(urlArray[urlArray.length-1]).split("?");
		currentPage	= urlArray[0];

		if ((parent.frames.length == 0) && (currentPage != page) && (currentPage != "") && (currentPage.charAt(0) != "#")) {
			urlArray = new String(document.URL).split("/");
			str = new String(urlArray[urlArray.length-1]).replace(/\?/, "%3F");
			str = new String(urlArray[urlArray.length-1]).replace(/\&/, "%26");
			document.location = page + "?redirect=" + str;
			return true;
		} else {
			return false;
		}
	}
}

// PRINT IFRAME

function PrintThisPage(id) {
	if (bw.ie) {
		window.frames[id].document.execCommand('print', false, null);
	} else {
		window.frames[id].window.focus();
		window.frames[id].window.print();
	}
}

// CASCADING MENU

var menuArray = new Array();

function resizeDiv(id, mainDiv, top, padding) {
	height = document.getElementById(id).scrollHeight;
	if (!menuArray[id]) {
		menuArray[id] = height;
	} else {
		if (menuArray[id] == 1) {
			menuArray[id] = height;
		} else {
			menuArray[id] = 1;
		}
	}
	document.getElementById(id).style.height = menuArray[id];
	
	resize(mainDiv, top, padding);
}

var classArray = new Array();

function changeClass(id, aClass, bClass) {
	if (!classArray[id]) {
		classArray[id] = aClass;
	} else {
		if (classArray[id] == bClass) {
			classArray[id] = aClass;
		} else {
			classArray[id] = bClass;
		}
	}
	document.getElementById(id).className = classArray[id];
}

// TEXTBOX FOCUS HANDLERS
function clearText(object, val) {
	if (object.value == val)
		object.value = "";
}

function restoreText(object, val) {
	if (object.value == "")
		object.value = val;
}

function setText(object, val) {
	object.value = val;
}

// IMAGE ROLLOVER
var imgArray	= new Array();
var rollArray	= new Array();
var normArray	= new Array();
var setArray	= new Array();

function rollerPics(key, normSrc, rollSrc) {
	normArray[key] = new Image();
	normArray[key].src = normSrc;
	rollArray[key] = new Image();
	rollArray[key].src = rollSrc;
}

function initSet(setName) {
	setArray[setName] = new Array();
}

function addToSet(imageID, setName) {
	setArray[setName].push(imageID);
}

function setOff(setName, key) {
	for (i=0; i<setArray[setName].length; i++) {
		setArray[setName][i].src = normArray[key].src;
	}
}

function roll(imageID, key) {
	if (imageID.src == rollArray[key].src) {
		imageID.src = normArray[key].src;
		return false;
	} else {
		imageID.src = rollArray[key].src
		return true;
	}
}

function rollOn(imageID, key) {
	imageID.src = rollArray[key].src;
}

function rollOff(imageID, key) {
	imageID.src = normArray[key].src;
}

// POPUP WINDOW

function popupWin(url, name, width, height) {
	var left = (screen.width / 2) - width / 2;
	var top = (screen.height / 2) - height / 2;
	if (arguments[4] != "")
		attributes = ',' + arguments[4];
	else
		attributes = "";
	var newPopup = window.open(url, name, "width=" + width + ", height=" + height + ", left=" + left + ", top=" + top + attributes);
	newPopup.focus();
}

function validateForm(url, name, type, div, parent_div, width, height, form, message, fields) {
	fieldArray	= new Array();
	var left = (screen.width / 2) - width / 2;
	var top = (screen.height / 2) - height / 2;
	if (arguments[8] != "")
		attributes = arguments[8];
	else
		attributes = "";
	
	if (type == "alert")
		breakTag = "\n";
	else
		breakTag = "<br><br>";
		
	var message;
	doSubmit = true;
	for (i=0;i<fields.length;i+=4) {
		fieldArray[fields[i]] = fields[i + 1];
		switch (fields[i + 2])
		{ 
		   case "select" :
			 if (form.elements[fields[i]].selectedIndex == 0) {
				message += breakTag + fields[i + 1];
				doSubmit = false;
			 }
		     break; 
		   case "email" :
			 if (form.elements[fields[i]].value == "") {
				message += breakTag + fields[i + 1];
				doSubmit = false;
			 }
			 else {
				var emailCheck = validateEmailAddress(form.elements[fields[i]].value);
				if (emailCheck != "") {
					message += breakTag +  emailCheck;
					doSubmit = false;
				}
			  }
			  break;
		   case "text" :
			 if (form.elements[fields[i]].value == fields[i + 3]) {
				message += breakTag + fields[i + 1];
				doSubmit = false;
			 }
			 break;
		   case "num" :
			 if (form.elements[fields[i]].value == "" || (isNumeric(form.elements[fields[i]].value) == false)) {
				message += breakTag + fields[i + 1] + " must be a number";
				doSubmit = false;
			 }
			 break;
		   case "radio" :
				val = "";
				for(j=0;j<form.elements[fields[i]].length;j++) {
					if (form.elements[fields[i]][j].checked == true) {
						val = form.elements[fields[i]][j].value;
					}
				}
			 if (val == "") {
				message += breakTag + fields[i + 1];
				doSubmit = false;
			 }
			 break;
		   case "checkbox" :
			 if (!form.elements[fields[i]].checked) {
				message += breakTag + fields[i + 1];
				doSubmit = false;
			 }
			 break;			 
		   case "textarea" :
			 if (form.elements[fields[i]].value == "") {
				message += breakTag + fields[i + 1];
				doSubmit = false;
			 }
			 break;
		  default :
		  	if (form.elements[fields[i]].value != form.elements[fields[i + 2]].value) {
				message += breakTag + fields[i + 1] + ' <i>does not match</i> ' + fieldArray[fields[i + 2]];
				doSubmit = false;
			}
		   	break;
		}
	}
	if (doSubmit) {
		return true;
	} else {
		switch (type) {
			case "div":
				hideDiv(document.getElementById(parent_div));
				popupDiv(document.getElementById(div), width, height, html_validate(message, div, parent_div));
				break;
			case "popup":
				url += '&message=' + message + '';
				var newPopup = window.open(url, name, "width=" + width + ", height=" + height + ", left=" + left + ", top=" + top + attributes);
				newPopup.focus();
				break;
			default:
				alert(message);
		}
		return false;
	}
}

function validateEmailAddress(field) {
//	var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
	var emailMessage = "";
	/*
	for (i=0; i<invalidChars.length; i++) {
		if (field.indexOf(invalidChars.charAt(i),0) > -1) {
			emailMessage = "\nEmail address contains invalid characters";
		}
	}
	for (i=0; i<field.length; i++) {
	   if (field.charCodeAt(i)>127) {
			emailMessage = "\nEmail address contains non ascii characters.";
		}
	}
	*/
	var atPos = field.indexOf('@',0);
	if (atPos == -1) {
			emailMessage = "\nEmail address must contain an @";
	}
	if (atPos == 0) {
			emailMessage = "\nEmail address must not start with @";
	}
	if (field.indexOf('@', atPos + 1) > - 1) {
			emailMessage = "\nEmail address must contain only one @";
	}
	if (field.indexOf('.', atPos) == -1) {
			emailMessage = "\nEmail address is incomplete";
	}
	if (field.indexOf('@.',0) != -1) {
			emailMessage = "\nInvalid email address";
	}
	if (field.indexOf('.@',0) != -1){
			emailMessage = "\nInvalid email address";
	}
	if (field.indexOf('..',0) != -1) {
			emailMessage = "\nInvalid email address";
	}
	var suffix = field.substring(field.lastIndexOf('.')+1);
	if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
			emailMessage = "\nInvalid email address";
	}
	return(emailMessage);
}

function isNumeric(val) {
	var validChars = "+0123456789. ";
	var isNumber=true;
	var Char;
	for (j = 0; j < val.length && isNumber == true; j++){ 
		Char = val.charAt(j); 
		if (validChars.indexOf(Char) == -1) {
         isNumber = false;
        }
    }
    return isNumber;
}

// LAYER SWITCHER

function divObject(thediv) {
	e = this;
	e.theDiv = thediv;
}

function showRemote(aDiv, timer) {
	if (window_main.showDiv && document.loaded)
		window_main.showDiv(aDiv, timer);
}

function showDiv(aDiv, timer) {
	if (timer) { closeTimer = setTimeout("closeDiv(" + aDiv + ")", timeout); }
	if (openDiv) {
		divArray[openDiv - 1].theDiv.visibility = "hidden";
	}
	divArray[(aDiv - 1)].theDiv.visibility = "visible";
	openDiv = aDiv;
	special = false;
}

function closeDiv(aDiv) {
	divArray[aDiv - 1].theDiv.visibility = "hidden";
	openDiv = 0;
}

function closeRemote() {
	if (window_main.closeAll && document.loaded)
		window_main.closeAll();
}

function closeAll() {
	if (openDiv) {
		divArray[openDiv - 1].theDiv.visibility = "hidden";
	}
	openDiv = 0;
}

function resetTimer() {
	clearTimeout(closeTimer);
}

function buildDiv(num) {
	temp = document.getElementById("popup"+num);
	tempDiv = temp.style;
	divArray[num-1] = new divObject(tempDiv);
}

function setLoaded(val) {
	parent.document.loaded = val;
}

// BUTTONS

function drawButton(caption, onclickCode, width) {
	newName = new String(caption);
	rExp = / /gi;
	newName = newName.replace(rExp, "_");
	
	document.write('<div name="button_' + newName +  '" type="button" class="button-norm" style="width: ' + width + '" onfocus="this.blur()" onclick="' + onclickCode + '" onmousedown="change(this, \'button-click\')" onmouseup="change(this, \'button-roll\')" onmouseover="change(this, \'button-roll\');" onmouseout="change(this, \'button-norm\');">');
	document.write('	<table width="100%" cellpadding="0" cellspacing="0" border="0">');
	document.write('	<tr>');
	document.write('		<td class="button-lhs"><img src="images/shift.gif" width="1" height="1" alt="" border="0"></td>');
	document.write('		<td class="button-caption" align="center" nowrap>' + caption + '</td>');
	document.write('		<td class="button-rhs"><img src="images/shift.gif" width="1" height="1" alt="" border="0"></td>');
	document.write('	</tr>');
	document.write('	</table>');
	document.write('</div>');
}

function change(id, newClass) {
	id.className = newClass;
}

// DIV COMPONENTS

function popupDiv(div, left, top, content) {
	div.style.visibility = 'visible';
	div.style.left = left;
	div.style.top = top;
	div.innerHTML = content;
}

function hideDiv(div) {
	div.style.visibility = 'hidden';
}

function unhideDiv(div) {
	div.style.visibility = 'visible';
}

// AJAX

var xmlHttp;
var xmlHttpArray = Array();

function getUrl(page, doThis) {
	var url= page;
	xmlHttp = GetXmlHttpObject(doThis);
	xmlHttp.open("GET", url , true);
	xmlHttp.send(null);
}

function getUrlArray(page, doThis, objName) {
	var url = page;
	xmlHttpArray[objName] = GetXmlHttpObject(doThis);
	xmlHttpArray[objName].open("GET", url , true);
	xmlHttpArray[objName].send(null);
}

function postUrl(url, doThis, sendThis) {
	xmlHttp=GetXmlHttpObject(doThis);
	xmlHttp.open("POST", url , true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttp.send(sendThis);
}

function postUrlArray(url, doThis, sendThis, objName) {
	xmlHttpArray[objName]=GetXmlHttpObject(doThis);
	xmlHttpArray[objName].open("POST", url , true);
	xmlHttpArray[objName].setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttpArray[objName].send(sendThis);
}

function getFormData(form) {
	str = '';
	for (i=0; i<form.elements.length; i++) {
		if (i > 0)
			str += '&';
		
		name = form.elements[i].name + '';
		
		switch(form.elements[i].type) {
			case "checkbox":
			case "radio":
				if (!form.elements[i].checked) {
					value	= '';
					break;
				}
			default:
				value	= form.elements[i].value + '';
		}
		
		if (name.charAt(name.length - 1) == ']')
			name = name.substr(0, name.length - 2) + '%5B%5D';
		
		if (value != '')
			str += name + '=' + value;
	}
	return str;
}

function GetXmlHttpObject(handler) {
	var objXmlHttp = null;
	
	if (window.ActiveXObject) { // IE
		try {
			if (!objXmlHttp) {
				objXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			}
		} catch (e) {
			try {
				objXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				try {
					objXmlHttp = new XMLHttpRequest();
				} catch (e) {
					alert(e);
				}
			}
		}
		if (handler)
			objXmlHttp.onreadystatechange = handler;
		
	} else if (window.XMLHttpRequest) { // Mozilla, Safari,...
		objXmlHttp = new XMLHttpRequest();
		if (handler) {
			objXmlHttp.onload = handler;
			objXmlHttp.onerror = handler;
		}
	}
	
	return objXmlHttp;
}
