function loadScript(script_url, script_id) {
	var head = document.getElementsByTagName("head")[0];
	script = document.createElement("script");
	script.id = script_id;
	script.type = "text/javascript";
	script.src = script_url;
	head.appendChild(script);
}

function unloadScript(script_id) {
	//var script = document.getElementById(script_id);
	//if (script != null) {
	if (document.getElementById(script_id)) {
		var script = document.getElementById(script_id);
		script.parentNode.removeChild(script);
		delete script;
	}
}

function clearOutput() {
	if (document.getElementById("output")) document.getElementById("output").innerHTML = "";
}

function writeOutput(new_text) {
	if (document.getElementById("output")) {
		var output_text = document.getElementById("output").innerHTML;
		document.getElementById("output").innerHTML = output_text + new_text + "<br>";
	} else {
		var output_div = document.createElement("div");
		output_div.setAttribute("id", "output");
		output_div.innerHTML = new_text + "<br>";
		document.body.insertBefore(output_div, document.body.firstChild);
	}
}

function getURLDomain() {
	var url_domain = document.domain;
	//url_domain = "www.nanoos.org"; //override domain
	
	return url_domain;
}

function getDocumentRoot() {
	var document_root = (getURLDomain() == "www.nanoos.org")? "/var/www/live/nanoos/": "/var/www/staging/nanoos/";
	return document_root;
}

function getPortalMode() {
	var portal_mode = (getURLDomain() == "www.nanoos.org" || getURLDomain() == "nanoos.org")? "live": "staging";
	return portal_mode;
}

function getFilenameFromURL(url) {
	var filename = "";
	if (!isEmpty(url)) {
		var url_pieces = url.split("/");
		filename = url_pieces[url_pieces.length - 1];
	}
	return filename;
}

function graphicServerURL() {
	var url = "";
	
	switch (getURLDomain()) {
		case "www.nanoos.org":
		case "nanoos.org":
			//url = "www.urutu.apl.washington.edu";
			url = "boa.apl.washington.edu";
			break;
		case "www2.nanoos.org":
			//url = "www2.urutu.apl.washington.edu";
			url = "boa2.apl.washington.edu";
			break;
		default:
			//url = "www.urutu.apl.washington.edu";
			url = "boa.apl.washington.edu";
	}
	
	//url = "www.urutu.apl.washington.edu"; //override nvs mode
	
	return url;
}

function tileServerURL() {
	var url = "";
	
	switch (getURLDomain()) {
		case "www.nanoos.org":
		case "nanoos.org":
			url = "http://www.urutu.apl.washington.edu:8080/eis-live/";
			//url = "http://cobra.apl.washington.edu:8080/eis-live/";
			break;
		case "www2.nanoos.org":
			url = "http://www.urutu.apl.washington.edu:8080/eis-staging/";
			//url = "http://cobra.apl.washington.edu:8080/eis-staging/";
			break;
		default:
			url = "http://www.urutu.apl.washington.edu:8080/eis-live/";
			//url = "http://cobra.apl.washington.edu:8080/eis-live/";
	}
	
	//url = "http://urutu.apl.washington.edu:8080/eis-live/"; //override nvs mode
	
	return url;
}

function trim(strText) {
	strText = strText.toString();
	// this will get rid of leading spaces 
	while (strText.substring(0,1) == ' ') 
			strText = strText.substring(1, strText.length);
	// this will get rid of trailing spaces 
	while (strText.substring(strText.length-1,strText.length) == ' ')
			strText = strText.substring(0, strText.length-1);
 return strText;
}

function capitalizeString(str) {
	var words = str.split(' ');
	
	// Make the first character of each word uppercase
	for (var i = 0; i < words.length; i++) {
		words[i] = words[i].charAt(0).toUpperCase() + words[i].substring(1);
	}
	return words.join(' ');
}

function pad(value, padChar, strLength) {
	var newValue = value.toString();

	for (var i = value.length; i < strLength; i++) {
		newValue = padChar + newValue;
	}

	return newValue;
}

function calPad(value) { //2 digit left pad, 7 > "07"
	var newValue = value.toString();
	var valueLength = newValue.length;

	for (var i = valueLength; i < 2; i++) {
		newValue = "0" + newValue;
	}

	return newValue;
}

function getWindowSize() {
	var theWidth, theHeight;
	if (window.innerWidth) {
		theWidth = window.innerWidth - 16; //compensate for vertical scrollbar in FF
	} else if (document.documentElement && document.documentElement.clientWidth) {
		theWidth = document.documentElement.clientWidth;
	} else if (document.body) {
		theWidth = document.body.clientWidth;
	}
	if (window.innerHeight) {
		theHeight = window.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		theHeight = document.documentElement.clientHeight;
	} else if (document.body) {
		theHeight = document.body.clientHeight;
	}
	return {width: theWidth, height: theHeight};
}

function getWindowDimensions() {
	var myWidth = 0 //width of window
	var myHeight = 0; //height of window
	var myScrollX = 0; //current scroll distance from left
	var myScrollY = 0 //current scroll distance from top
	var myScrollWidth = 0; //height of page content
	var myScrollHeight = 0; //height of page content
	
	if (typeof(window.innerWidth) == 'number') {
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
    myScrollX = document.body.scrollLeft;
    myScrollY = document.body.scrollTop;
    myScrollWidth = document.body.scrollWidth;
    myScrollHeight = document.body.scrollHeight;
//window.alert(myHeight);

	} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
    //DOM
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
    myScrollX = document.body.scrollLeft;
    myScrollY = document.body.scrollTop;
    myScrollWidth = document.body.scrollWidth;
    myScrollHeight = document.body.scrollHeight;
   
  } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
    //IE 6 in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
    myScrollX = document.documentElement.scrollLeft;
    myScrollY = document.documentElement.scrollTop;
    myScrollWidth = document.documentElement.scrollWidth;
    myScrollHeight = document.documentElement.scrollHeight;
    
  } else if (typeof(window.innerWidth) == 'number' && typeof(window.scrollWidth) == 'number') {
    //Netscape
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
    myScrollX = window.pageXOffset;
    myScrollY = window.pageYOffset;
    myScrollWidth = window.scrollWidth;
    myScrollHeight = window.scrollHeight;
  }
  
  var myPageWidth = (myScrollWidth > myWidth)? myScrollWidth: myWidth;
  var myPageHeight = (myScrollHeight >  myHeight)? myScrollHeight: myHeight;
  
	return {width: myWidth, height: myHeight, scrollX: myScrollX, scrollY: myScrollY, pageWidth: myPageWidth, pageHeight: myPageHeight};
}

function getPosOffset(what, offsettype){ //offsettype = left or top
	var totaloffset = (offsettype == "left")? what.offsetLeft : what.offsetTop;
	var parentEl = what.offsetParent;
	while (parentEl != null){
		totaloffset = (offsettype == "left")? totaloffset + parentEl.offsetLeft : totaloffset + parentEl.offsetTop;
		parentEl = parentEl.offsetParent;
	}
	return totaloffset;
}

function getObjOffset(obj) {
	var total_offset = {left: obj.offsetLeft, top: obj.offsetTop};
	var parentEl = obj.offsetParent;
	while (parentEl != null){
		total_offset.left = total_offset.left + parentEl.offsetLeft;
		total_offset.top = total_offset.top + parentEl.offsetTop;
		parentEl = parentEl.offsetParent;
	}
	return total_offset;
}

function isEven(value){
	if (value % 2 == 0) {
		return true;
	} else {
		return false;
	}
}

function isArray(obj) {
	return obj.constructor == Array;
}

function inArray(value, array) {
	var match = false;
	for (var i in array) {
		if (array[i] == value) {
			match = true
			break;
		}
	}
	return match;
}

function trim(strText) {
	if (strText && strText.length > 0) {
		// this will get rid of leading spaces 
		while (strText.substring(0,1) == ' ') 
				strText = strText.substring(1, strText.length);
		// this will get rid of trailing spaces 
		while (strText.substring(strText.length-1,strText.length) == ' ')
				strText = strText.substring(0, strText.length-1);
	}
	return strText; 
}

function isEmpty(value) {
	if ((value && trim(value) != "") || value === 0) { //is this right?
		return false;
	} else {
		return true;
	}
}

function enterSubmitForm(e) { //for most text fields in PR form pages
	if (is_ie) {
		if (e.keyCode == 13) {
			submitForm();
			return false;
		}
	} else {
		if (e.which == 13) {
			submitForm();
			return false;
		}
	}
}

function isEnterKey(e) { //for most text fields in PR form pages
	if (is_ie) {
		if (e.keyCode == 13) {
			return true;
		}
	} else {
		if (e.which == 13) {
			return true;
		}
	}
	return false;
}

function verifyIsValidContent(type, obj, class_norm, class_alert) {
	var is_valid;

	switch(type) {
		case "text":
			is_valid = (trim(obj.value) != "")? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		case "integer":
			var filter = /^([0-9])*$/;
			is_valid = (filter.test(obj.value))? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		case "integerOrBlank":
			var filter = /^([0-9])*$/;
			is_valid = (filter.test(obj.value) || trim(obj.value) == "")? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		case "image_file":
			//nothing - .jpg, .jpeg, .gif, .png
			break;
		case "decimalLatLon":
			var filter = /^([1-9]{1}[0-9]{0,2})(\.([0-9])+)*$/;
			is_valid = (filter.test(obj.value) || trim(obj.value) == "")? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		case "string":
			var filter = /^([a-zA-Z])+.*$/;
			is_valid = (filter.test(obj.value))? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		case "stringOrBlank":
			var filter = /^([a-zA-Z])+.*$/;
			is_valid = (filter.test(obj.value) || trim(obj.value) == "")? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		case "email":
			//var filter = /^[a-z]+[a-z0-9]*[\.|\-|_]?[a-z0-9]+@([a-z]+[a-z0-9]*[\.|\-]?[a-z]+[a-z0-9]*[a-z0-9]+){1,4}\.[a-z]{2,4}$/;
			//var filter = /^[a-zA-Z]+([_\-\.]{0,1}[a-zA-Z0-9]+)*@([a-z]+[a-z0-9]*[\.|\-]?[a-z]+[a-z0-9]*[a-z0-9]+){1,4}\.[a-z]{2,4}$/;
			var filter = /^[a-zA-Z]+([_\-\.]{0,1}[a-zA-Z0-9]+)*@([a-z]+[a-z0-9]*[\.|\-]?[a-z]+[a-z0-9]*){1,4}\.[a-z]{2,4}$/;
			is_valid = (filter.test(obj.value))? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		case "username":
			var filter = /^[a-zA-Z]+[a-zA-Z0-9_\-\.]{2,15}?$/;
			is_valid = (filter.test(obj.value))? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		case "password":
			var filter = /^[a-zA-Z0-9~!@#_\$\*\+\?\-]{5,24}$/;
			is_valid = (filter.test(obj.value))? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		case "passwordOrBlank":
			var filter = /^[a-zA-Z0-9~!@#_\$\*\+\?\-]{5,24}$/;
			is_valid = (filter.test(obj.value) || trim(obj.value) == "")? true: false;
			obj.className = (is_valid)? class_norm: class_alert;
			break;
		default:
			//nothing
	}

	return is_valid;
}

function verifyIsValidChar(type, e, value) {
	var key_pressed = (is_ie)? e.keyCode : e.which; //var key_pressed = (is_ie)? event.keyCode : e.which;
	
	var valid_key = false;

	var evt = (is_ie)? window.event: e;
	var ctrlPressed = false;
	if (evt.ctrlKey || evt.metaKey) ctrlPressed = true;

	switch(type) {
		case "text":
			valid_key = true;
			break;
		case "integer":
			valid_key = (key_pressed == 0 || key_pressed == 8 || (key_pressed >= 48 && key_pressed <= 57))? true: false;
			break;
		case "decimal":
			valid_key = (key_pressed == 0 || key_pressed == 8 || (key_pressed >= 48 && key_pressed <= 57) || key_pressed == 46)? true: false;
			break;
		default:
			//nothing
	}

	if ((key_pressed == 67 || key_pressed == 99) && ctrlPressed) valid_key = true; //copy
	if ((key_pressed == 86 || key_pressed == 118) && ctrlPressed) valid_key = true; //paste

	if (!valid_key) {
		if (is_ie) {
			event.returnValue = false;
			return false;
		} else {
			return false;
		}
	}
}

function imageFileValid(filename) {
	if (filename.length == 0) {
		return true;
	} else { //only check file extension validity if a filename has been specified
		var valid_image = false;
		var valid_img_arr = new Array(".jpg", ".jpeg", ".gif", ".png");
		var file_arr = filename.split(".");
		var ext = "." + (file_arr[file_arr.length - 1]).toLowerCase();
		for (i = 0; i < valid_img_arr.length; i++) {
			if (ext == valid_img_arr[i]) valid_image = true;
		}
		return valid_image;
	}
}

function formatForTextCompare(text) {
	text = text.replace(/\'/g, "&#39;");
	text = text.replace(/\"/g, "&#34;");
	return text;
}

function resizeWindow(width, height) {
	if (is_ie) {
		self.resizeTo(width, height);
	} else {
		window.outerWidth = width;
		window.outerHeight = height;
	}
}

function changeImage(img_obj, new_image_url) {
	img_obj.src = new_image_url;
}

function getWindowXLoc() {
	if (is_ie) {
		return window.screenLeft;
	} else {
		return window.screenX;
	}
}

function getWindowYLoc() {
	if (is_ie) {
		return window.screenTop;
	} else {
		return window.screenY;
	}
}

function hideObj(name) {
	document.getElementById(name).style.display = "none";
}

function showObjInline(name) {
	document.getElementById(name).style.display = "inline";
}

function showObjBlock(name) {
	document.getElementById(name).style.display = "block";
}

function setToVis(obj) {
	document.getElementById(obj).style.visibility = "visible";
}

function setToInVis(obj) {
	document.getElementById(obj).style.visibility = "hidden";
}

function hideShowPDSet(obj, set) { //PD = PUllDown Menu
	for (var i = 0; i < obj.length; i++) {
		if (document.getElementById(set+obj[i].value)) document.getElementById(set+obj[i].value).style.display = "none";
	}
	if (document.getElementById(set+obj.value)) document.getElementById(set+obj.value).style.display = "block";
}

function changeImage(obj, image) {
	obj.src = image;
}

function changeImageN(a_obj, img_obj, img_url) {
	if (document.getElementById(a_obj).href != "" && document.getElementById(a_obj).href != "javascript:;") {
		if (document.getElementById(img_obj)) document.getElementById(img_obj).src = img_url;
	}
}

function isArray(obj) {
	if (obj.constructor.toString().indexOf("Array") == -1) {
		return false;
	} else {
		return true;
	}
}

function addslashes(str) {
	return str.replace('/(["\'\])/g', "\\$1").replace('/\0/g', "\\0");
}

function stripslashes(str) {
	return str.replace('/\0/g', '0').replace('/\(.)/g', '$1');
}

function htmlSafeName(name) {
	if (name) {
		var reg = new RegExp("[^a-zA-Z0-9%\-]", "g"); // "%" left in for use with O2%
		var safe_name = name.replace(reg, "_");
		return safe_name;
	} else {
		return name;
	}
}

function stripDecimals(str) {
	var reg = new RegExp("[\.]", "g");
	var result = str.replace(reg, "_");
	return result;
}

function selectObjectText(obj_id_string) {
	var obj = document.getElementById(obj_id_string);
	if (window.getSelection) {
		var selection = window.getSelection();
		if (selection.setBaseAndExtent) { /* for Safari */
			selection.setBaseAndExtent(obj, 0, obj, 1);
		} else { /* for FF, Opera */
			var range = document.createRange();
			range.selectNodeContents(obj);
			selection.removeAllRanges();
			selection.addRange(range);
		}
	} else { /* for IE */
		var range = document.body.createTextRange();
		range.moveToElementText(obj);
		range.select();
	}
}

function exists(obj_name) {
	if (document.getElementById(obj_name)) {
		return true;
	} else {
		return false;
	}
}

function classExists(class_name) {
   return (typeof(class_name) == "function" && typeof(class_name.prototype) == "object")? true : false;
} 

function functionExists(function_name) {
	if (function_name) {
		return true;
	} else {
		return false;
	}
}

function setFocus(obj_name) {
	if (document.getElementById(obj_name)) document.getElementById(obj_name).focus();
}

function getObjById(obj_id) {
	return (document.getElementById(obj_id))? document.getElementById(obj_id): null;
}

function getInnerHTML(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).innerHTML: "";
}

function setInnerHTML(obj_name, value) {
	if (document.getElementById(obj_name)) document.getElementById(obj_name).innerHTML = value; //formatForWeb(value);
}

function getValue(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).value: "";
}

function setValue(obj_name, value) {
	if (document.getElementById(obj_name)) document.getElementById(obj_name).value = value;
}

function getPullDownValue(menu_id) {
	if (document.getElementById(menu_id)) {
		var menu_obj = document.getElementById(menu_id);
		return menu_obj.options[menu_obj.selectedIndex].value;
	} else {
	 return null;
	}
}

function getPullDownValueForIndex(menu_id, index) {
	if (document.getElementById(menu_id)) {
		return document.getElementById(menu_id).options[index].value;
	} else {
	 return null;
	}
}

function getPullDownLength(menu_id) {
	if (document.getElementById(menu_id)) {
		return document.getElementById(menu_id).options.length;
	} else {
	 return null;
	}
}

function getPullDownIndex(menu_id) {
	if (document.getElementById(menu_id)) {
		return document.getElementById(menu_id).selectedIndex;
	} else {
	 return null;
	}
}

function getPullDownLabel(menu_id) {
	if (document.getElementById(menu_id)) {
		var menu_obj = document.getElementById(menu_id);
		return menu_obj.options[menu_obj.selectedIndex].text;
	} else {
	 return null;
	}
}

function setPullDownIndex(menu_id, index) {
	if (document.getElementById(menu_id)) {
		var menu_obj = document.getElementById(menu_id);
		menu_obj.selectedIndex = index;
	} else {
		return null;
	}
}

function setPullDownValue(menu_id, value) {
	if (document.getElementById(menu_id)) {
		var menu_obj = document.getElementById(menu_id);
		for (var i = 0; i < menu_obj.options.length; i++) {
			if (menu_obj.options[i].value == value) {
				menu_obj.selectedIndex = i;
				break;
			}
		}
	} else {
		return null;
	}
}

function setClassName(obj_name, class_name) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).className = class_name;
	}
}

function getVisibility(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).visibility: "";
}

function setVisibility(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).style.visibility = value;
	}
}

function getDisplay(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).style.display: "";
}

function setDisplay(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).style.display = value;
	}
}

function setStyleTop(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).style.top = value+"px";
	}
}

function setStyleLeft(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).style.left = value+"px";
	}
}

function setTitle(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).title = value;
	}
}

function getSrc(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).src: "";
}

function setSrc(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).src = value;
	}
}

function getHREF(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).href: "";
}

function setHREF(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).href = value;
	}
}

function setHREFTarget(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).target = value;
	}
}

function getStyleWidth(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).style.width.replace(/px/g, ""): 0;
}

function setStyleWidth(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).style.width = value+"px";
	}
}

function getStyleHeight(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).style.height.replace(/px/g, ""): 0;
}

function setStyleHeight(obj_name, value) {
	if (document.getElementById(obj_name)) {
		document.getElementById(obj_name).style.height = value+"px";
	}
}

function getObjWidth(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).offsetWidth: 0;
}

function getObjHeight(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).offsetHeight: 0;
}

function setStyleTop(obj_name, value) {
	if (document.getElementById(obj_name)) document.getElementById(obj_name).style.top = value+"px";
}

function getObjClientHeight(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).clientHeight: 0;
}

function getObjClientWidth(obj_name) {
	return (document.getElementById(obj_name))? document.getElementById(obj_name).clientWidth: 0;
}

/*
function checkIfEmpty(obj) {
	if (obj.value == "") obj.value = "Required";
}
*/
