function handleError(e) {
	alert('Javascript error. This application is not proceeding correctly, please return to it\'s home page.\nIf it continues to err please contact this applications administrator and report this error: ("' + e + '").');
	return true;
}

if (document.location.href.indexOf('webdev') < 0) {window.onerror = handleError}
var disableMouseOut = false;

function changeImages() {
     if (document.images && !disableMouseOut) {
          for (var i=0; i<changeImages.arguments.length; i+=2) {
               document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
          }
     }
}

function disableSwap() {
	disableMouseOut = true;
}

function enableSwap() {
	disableMouseOut = false;
}

/*
	GLOBAL JS FUNCTIONS
	These are a few simple global functions for use on pages.
*/

function $nSelected(element, boolean) {//Count of elements selected options (or unselected if boolean == false)
	if ($nSelected.arguments.length < 2) {boolean = true}
	element = $(element);
	var result = 0;
	for (var i=0; i<element.options.length; i++) {
		if (element.options[i].selected == boolean) {result++}
	}
	return result;
}

function $select(element, boolean) {//Either select or deselect all options according to boolean
	if ($select.arguments.length < 2) {boolean = true}
	element = $(element);
	for (var i=0; i<element.options.length; i++) {
		element.options[i].selected = boolean;
	}
	return true;	
}

/*
	DOM manipulation
	
	//Application needs to set this for access through TAS to work...
	var WS_UserPreferences = URL to user.preferences.asp
*/

function userPreference(name, value) {
	if (typeof(WS_UserPreferences) != 'undefined') {
		if (name) {
			var XMLHttp = HttpRequest(WS_UserPreferences + '?' + new Date().getTime().toString() + Math.random(), 'name', name, 'value', (value) ? value : '');
			if (XMLHttp) {
				try {
					var value = XMLHttp.responseXML.documentElement.selectSingleNode('value');
					if (value) {return value.text}
				} catch (ex) {}
			}
		}
	}
	return false;
}

function initiateAdvancedElements() {
	//Add a empty stylesheet to end of head to guarantee a safe receptacle for rules
	createStyleSheet();

	var els = $$('advanced');
	for (var i=0; i<els.length; i++) {
		var el = els[i];
		
		el.open = document.createElement('div');
		el.parentNode.insertBefore(el.open, el);		
		el.close = document.createElement('div');
		if (el.firstChild) {
			el.insertBefore(el.close, el.firstChild);
		} else {
			el.appendChild(el.close);
		}		
		
		el.open.advanced = el;
		el.open.id = 'advancedOpen_' + el.id;
		el.open.className = 'advancedOpen ' + el.id;
		el.open.innerHTML = '<a onclick="return advancedOpen(this.parentNode);">+ Advanced</a>';
		el.close.advanced = el;
		el.close.className = 'advancedClose ' + el.id;
		el.close.innerHTML = '<a onclick="return advancedClose(this.parentNode);">- Advanced</a>';		
		
		advancedSet(el.close);
	}

	var els = $$('expanding');
	for (var i=0; i<els.length; i++) {
		var el = els[i];
		Event.add(el, 'click', expandingClick);
		el.open = (userPreference((el.id) ? el.id : 'expanding') != 'open');
		expandingToggle(el);
	}
}

function advancedSet(span, state) {
	var el = span.advanced;

	if (el.id) {
		var value = userPreference((el.id) ? el.id : 'advanced', state);
		if (typeof(value) == 'boolean') {value = 'open'}
		var open = (value.toString() == 'open');
	
		if (open) {
			setCSS('#' + el.id, '');
			setCSS('#advancedOpen_' + el.id, 'display:none');
		} else {
			setCSS('#' + el.id, 'display:none');
			setCSS('#advancedOpen_' + el.id, '');	
		}
	}
	
	return false;	
}

function advancedOpen(span) {
	return advancedSet(span, 'open');
}

function advancedClose(span) {
	return advancedSet(span, 'closed');
}

function expandingClick(ev) {
	expandingToggle(this);
}

function expandingToggle(el) {
	var value = userPreference((el.id) ? el.id : 'expanding', (el.open) ? 'closed' : 'open');
	var open = el.open = (value == 'open');
	
	el.innerHTML = ((open) ? '(-) Close' : '(+) Open') + ' ' + el.innerHTML.toString().replace(/^\([\+-]\) (Close|Open) /m, '');
	
	if (open) {
		setCSS('.' + el.id, '');	
	} else {
		setCSS('.' + el.id, 'display:none');
	}
}

function setOpen(el, open) {
	var el = $(el);
	open = (open != "undefined") ? open : true;
	
	if (el.advanced) {
		advancedOpen(el);
	} else {
		el.open = false;
		expandingToggle(el);
	}
}

Event.onDOMReady(initiateAdvancedElements);
