/*
	Element selection script. 
	Copyright Mark de Cates, 2007.
	
	Allows display of different HTML elements based on user clicking, by using
	CSS class replacement.
*/

var selectableElements;
var elements;
var showCssClass;
var hideCssClass;
var selectClass;
var unselectClass;

/*
	Setup function - called on initialization. 
	elementIds - an array of the elementIds to be selected between
	shownCssClass - the CSS class given to the element being displayed
	hiddenCssClass - the CSS class given to elements being hidden
*/
function SelectorSetup( selectableElementIds, elementIds, shownCssClass, hiddenCssClass, selectedClass, unselectedClass ) {
	selectableElements = selectableElementIds;
	elements = elementIds;
	showCssClass = shownCssClass;
	hideCssClass = hiddenCssClass;
	selectClass = selectedClass;
	unselectClass = unselectedClass;
}

/*
	Selects the given element, and hides the others.
	selectableElementId - the ID of the clicked element.
	elementId - the ID of the element to be displayed
*/
function SelectElement( selectableElementId, elementId ) {
	//Select the selectable element
	for (var index in selectableElements) {
		if(selectableElements[index] == selectableElementId) {
			SwapCssClass(selectableElements[index], selectClass, unselectClass);
		}
		else {
			SwapCssClass(selectableElements[index], unselectClass, selectClass);
		}
	
	}
	
	// Hide all except the given element
	for (var index in elements) {
		if (elements[index] == elementId) {
			SwapCssClass(elements[index], hideCssClass, showCssClass);
		}
		else {
			SwapCssClass(elements[index], showCssClass, hideCssClass);
		}
	
	}
}

/*
	Applies a new CSS class to a given element, removing an old one if it exists.
	elementId - ID of the element to swap styles for
	old - CSS class name to replace if it's present
	newer - new CSS class name to apply to the given element 
*/
function SwapCssClass(elementId, old, newer)
{
	var element = document.getElementById(elementId);
	var newRegExp = new RegExp('\\b'+newer+'\\b');
	var oldRegExp = new RegExp('\\b'+old+'\\b');
	//if ( (new RegExp('\\b'+old+'\\b').test(element.className)) ) {
	
	var newMatch = element.className.match(newRegExp);
	var oldMatch = element.className.match(oldRegExp);
	if ( element.className.match(oldRegExp) ) {
		element.className = element.className.replace(oldRegExp,newer);
		return;
	}
	else if (element.className.match(newRegExp) ) {
		return;
	}
	else {
		element.className += ' ' + newer;
		return;
	}
}