﻿// ----------
//
//	cssClassTools.js
//
//	Tim Snoots (http://snoots-tech.com), 2008
//
//	A collection of functions to manipulate CSS classes using JavaScript
//
//	----------
//
//	Dependencies: AddLoadEvent.js
//
//	Notes: These functions simply modify the class attributes of DOM nodes.
//			For this to result in anything, CSS styles need to exist to affect the document
//
//	----------
//


function trim(str) {
	// Fast, general-purpose whitespace trim function;
	return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function addClass(e, c) {
	// Adds class c to element e;
	var classes = e.className;
	if (!classes) {
		e.className = c;
	} else {
		if (classes != c) {
			e.className = classes + " " + c;
		}
	}
}

function removeClass(e, c) {
	// Remove class c from element e by replacing with "";
	var classes = e.className;
	if (!classes) return false;
	e.className = classes.replace(new RegExp("\\b"+ c+"\\b\\s*", "g"), "");
}

function hasThisClass(e, c) {
	// Returns true if element e has class c currently;
	var classes = e.className;
	if (!classes) return false;
	if (classes == c) return true;
	return e.className.search("\\b" + c + "\\b") != -1;
	
}

function toggleClassOnClick(parentID, tag, class1, class2) {
	// Toggle between class1 and class2 for all child tag(s) of parent element e;
	
	// Compatibility checks;
	if (!document.getElementById) return false;
	if (!document.getElementsByTagName) return false;
	
	if (!document.getElementById(parentID)) return false;
	var p = document.getElementById(parentID);
	
	if (!p.getElementsByTagName(tag)) return false;
	var t = p.getElementsByTagName(tag);

	// Loop through all children of interest and assign initial class and OnClick event
	for (var i=0; i<t.length; i++) {
		// Set initial class;
		if (!hasThisClass(t[i], class2)) addClass(t[i], class2);
		if (hasThisClass(t[i], class1)) removeClass(t[i], class1);
		// Toggle onClick;
		t[i].onclick = function() {
			if (hasThisClass(this, class1)) {
				removeClass(this, class1);
				addClass(this, class2);
			} else {
				removeClass(this, class2);
				addClass(this, class1);
			}
		}
	}
}


