function clearOnFocus(box) {
	if (box.value == box.defaultValue) {
		box.value = "";
	}
}

function resetOnBlur(box) {
	if (box.value == "") {
		box.value = box.defaultValue;
	}
}

function stripSpaces(text) {
	return text.replace(/^\s+/, '').replace(/\s+$/, '');
}

function checkQuickSearch() {
	var text = document.getElementById('quickSearchText');
	text.value = stripSpaces(text.value);
	if (text.value == '' || text.value == text.defaultValue) {
		Element.update('quickSearchError', 'Please enter keyword(s) or select Other Search Options.');
		new Effect.Highlight('quickSearchError',
			{startcolor:'#ffffff', endcolor: '#ac1b13'});
		return false;
	} else {
		return true;
	}
}

var advancedState = 0;
function showAdvanced(type) {
	if (advancedState == 0) { // init
		advancedState = 1;
		showSearchSpinner();
		initAdvanced(type);
	} else if (advancedState == 1) { // loading
		return;
	} else { // ready
		showAdvancedReady();
	}
}
var advancedShowing = false;
function showAdvancedReady() {
	if (advancedState < 2) {
		advancedState = 2;
		hideSearchSpinner();
	}
	ShowContent('mask');
	ShowContent('searchContainer');
	advancedShowing = true;
}
function hideAdvanced() {
	HideContent('searchContainer');
	HideContent('mask');
	advancedShowing = false;
}

function showAdvancedTab(tab) {
	var otherTabs = tab.parentNode.getElementsByTagName('div');
	for (var i = 0; i < otherTabs.length; i++) {
		if (otherTabs[i].className == 'on') {
			otherTabs[i].className = 'off';
		}
	}
	tab.className = 'on';
}

function showAdvancedBody(bodyName) {
	var body = document.getElementById(bodyName);
	var bodies = body.parentNode;

	var otherBodies = bodies.getElementsByTagName('div');
	for (var i = 0; i < otherBodies.length; i++) {
		var b = otherBodies[i];
		if (b.parentNode == bodies) {
			b.className = 'hide';
		}
	}
	body.className = 'show';
}

function tabState(bodyName) {
	this.ready    = false;
	this.loading  = false;
	this.stale    = false;
	this.tab      = null;
	this.bodyName = bodyName;
}

var advKeywords	= new tabState('advKeywords');
var advTaxonomy	= new tabState('advTaxonomy');
var advLocation	= new tabState('advLocation');
var advMap	= new tabState('advMap');
var advSystems	= new tabState('advSystems');
var advHabitats	= new tabState('advHabitats');
var advThreats	= new tabState('advThreats');
var advAssessment = new tabState('advAssessment');
var advHistory	= new tabState('advHistory');
var advTabs = [advKeywords, advTaxonomy, advLocation, advMap, advSystems,
    advHabitats, advThreats, advAssessment, advHistory]

advKeywords.ready = true;

function resetAdvancedTabs() {
	if (advancedState < 2) {
		return;
	}
	for (var i = 0; i < advTabs.length; i++) {
		var tab = advTabs[i];
		tab.ready = false;
		tab.stale = false;
		tab.loading = false;
	}

	var kwTab = document.getElementById('advKeywordsTab');
	showAdvTab(kwTab, advKeywords);
}

function showAdvTab(tab, state) {
	showAdvancedTab(tab);
	if (state.loading) {
		return;
	} else if (state.stale) {
		state.loading = true;
		state.tab = tab;

		showAdvancedBody('advancedBodySpinner');
		refreshAdvancedTab(state);
	} else if (state.ready) {
		showAdvancedBody(state.bodyName);
	} else {
		state.loading = true;
		state.tab = tab;

		showAdvancedBody('advancedBodySpinner');
		initAdvancedTab(state);
	}
}

function showAdvTabReady(state) {
	state.loading = false;
	state.ready   = true;
	showAdvTab(state.tab, state);
}

function showAdvTabRefreshed(state) {
	state.loading = false;
	state.stale   = false;
	showAdvTab(state.tab, state);
}

function advTabsStale(except) {
	if (!advancedShowing) {
		return;
	}

	for (var i = 0; i < advTabs.length; i++) {
		if (advTabs[i].ready) {
			advTabs[i].stale = true;
		}
	}
	if (except != null) {
		except.stale = false;
	}
}

function setupRemoteForm(name, attrs) {
	var div  = document.getElementById(name);
	var form = document.createElement('form');

	for (var key in attrs) {
		var value = attrs[key];

		form.setAttribute(key, value);
		if (key == 'onsubmit') {
			eval("form.onsubmit = function () { " + value + " }");
		}
	}

	var html = div.innerHTML;
	div.innerHTML = "";
	form.innerHTML = html;
	div.appendChild(form);
}

function safeFromIEBug() {
	var tester = document.getElementById('ieBugTest');
	if (tester == null) {
		return false;
	}

	try {
		tester.innerHTML = '<form></form>';
	} catch (e) {
		return false;
	}

	return true;
}

var trees = {};

function createTree(name, image_path, xml_url) {
	var box = $(name + 'Box');
	var tree = new dhtmlXTreeObject(box, "100%", "100%", 0);
	tree.setImagePath(image_path);
	tree.enableDragAndDrop(false);
	tree.enableTreeImages(false);
	tree.enableCheckBoxes(true);
	tree.enableThreeStateCheckboxes(true);

	tree.attachEvent('onXLS', function () { box.addClassName('spinner') });
	tree.attachEvent('onXLE', function () { box.removeClassName('spinner') });

	tree.setXMLAutoLoading(xml_url);
	tree.loadXML(xml_url);

	trees[name] = tree;
}

function getTree(name) {
	return trees[name];
}

var spinnerTimers = {};

function spinnerShow(id) {
	spinner = $(id);
	if (spinner.className == 'ready') {
		spinner.className = 'spinner';
	}
}
function spinnerReady(id) {
	$(id).className = 'ready';
}

function spinnerReadySoon(id) {
	timer = spinnerTimers[id];
	if (typeof timer != 'undefined') {
		clearTimeout(timer);
	}
	spinnerTimers[id] = setTimeout('spinnerReady("' + id + '")', 250);
}

function checkAdvancedTaxa(tag) {
	c1 = $('advTaxaSpecies').checked;
	c2 = $('advTaxaSubspecies').checked;
	c3 = $('advTaxaStocks').checked;

	if (c1 || c2 || c3) {
		return true;
	}

	Element.update('advTaxaError', 'Please select at least one taxa.');
	new Effect.Highlight('advTaxaError',
		{startcolor:'#ffffff', endcolor: '#ac1b13'});
	return false;
}

function getAdvancedTaxa() {
	return "species="	+ $('advTaxaSpecies').checked
	     + "&subspecies="	+ $('advTaxaSubspecies').checked
	     + "&stocks="	+ $('advTaxaStocks').checked;
}

function resetAdvancedTaxa() {
	$('advTaxaSpecies').checked    = true;
	$('advTaxaSubspecies').checked = false;
	$('advTaxaStocks').checked     = false;
}
