ow_f_AppendLoadEvent(InitTogglers);
//ow_f_AppendLoadEvent(InitAlternators);

function InitTogglers() {
	if (typeof ow_AppendLoadEvent == "undefined") {
		var togglers = GetTogglers();
		for (var i = togglers.length - 1; i >= 0; i--) {
			var togglee = document.getElementById((togglers[i].id).replace("toggler_", "togglee_"));
			if (togglee) {
				ow_f_AddEvent(togglers[i], "click", Toggler, false);
				var c = GetCookie(togglers[i].id);
				if (c != undefined && c == "collapsed")
					Toggle(togglers[i], false);
			}
		}
	}
}

function Toggler(e) {
	var toggler;
	if (!e) var e = window.event;
	if (e.target) toggler = e.target;
	else toggler = e.srcElement;

	Toggle(toggler, true);
	
//	toggler.blur();	
	if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; }
}

function Toggle(toggler, save) {

	var togglee = document.getElementById((toggler.id).replace("toggler_", "togglee_"));
	if (togglee) {
		var classes = togglee.className.split(" ");
		if (classes[0] == "togglee" && (classes[1] == "expanded" || classes[1] == "collapsed")) {
		
			if (classes[1] == "expanded") {
				toggler.className = (toggler.className).replace("expanded", "collapsed");
				togglee.className = (togglee.className).replace("expanded", "collapsed");
				if (save) SaveCookie(toggler.id, "collapsed", 30);
			} else {
				toggler.className = (toggler.className).replace("collapsed", "expanded");
				togglee.className = (togglee.className).replace("collapsed", "expanded");
				if (save) SaveCookie(toggler.id, "expanded", 30);
			}
		}
	}
}

function GetTogglers() { return GetElementsByClassName("toggler", "*"); }

// alternators 
function InitAlternators() {
	if (typeof ow_AppendLoadEvent == "undefined") {
		var alternators = GetAlternators();
		for (var i = alternators.length - 1; i >= 0; i--) {
			var alts = new Array();
			var elm = null;
			for (var j = 1; j <= 26; j++) {
				elm = document.getElementById((alternators[i].id).replace("alternator_", "alternate_") + String.fromCharCode(j+"a".charCodeAt(0)-1));
				if (elm) alts[alts.length] = elm;
			}
			if (alts.length > 1) {
				ow_f_AddEvent(alternators[i], "click", Alternator, false);
				var c = GetCookie(alternators[i].id);
				if (c != undefined && c == "collapsed")
					Alternate(alternators[i], false);
			}
		}
	}
}

function Alternator(e) {
	var alternator;
	if (!e) var e = window.event;
	if (e.target) alternator = e.target;
	else alternator = e.srcElement;

	//Alternate(alternator, true);
	AlternateOnPostback(alternator, true);
	
//	alternator.blur();	
	if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; }
}

function AlternateOnPostback(alternator, save) {
	var classes = alternator.className.split(" ");
	if (classes[1] == "expanded") {
		if (save) SaveCookie(alternator.id, "collapsed", 30);
	} else {
		if (save) SaveCookie(alternator.id, "expanded", 30);
	}
}

function Alternate(alternator, save) {

	// get the various alternates
	var alts = new Array();
	var elm = null;
	for (var i = 1; i <= 26; i++) {
		elm = document.getElementById((alternator.id).replace("alternator_", "alternate_") + String.fromCharCode(i+"a".charCodeAt(0)-1));
		if (elm) alts[alts.length] = elm;
	}

	if (alts.length >= 2) {
		// find the current expanded alternate
		var i = 0;
		for (i = 0; i < alts.length; i++) {
			var classes = alts[i].className.split(" ");
			if (classes[0] == "alternate" && classes[1] == "expanded")
				break;
		}
		
		var j = (i+1) % alts.length;
		while (j != i) {
			if (alts[j].className.split(" ")[1] == "collapsed") {
				alts[i].className = (alts[i].className).replace("expanded", "collapsed");
				alts[j].className = (alts[j].className).replace("collapsed", "expanded");
				break;
			}
			else
				j = (j+1) % alts.length;
		}
		var classes = alternator.className.split(" ");
		if (classes[1] == "expanded") {
			alternator.className = (alternator.className).replace("expanded", "collapsed");
			if (save) SaveCookie(alternator.id, "collapsed", 30);
		} else {
			alternator.className = (alternator.className).replace("collapsed", "expanded");
			if (save) SaveCookie(alternator.id, "expanded", 30);
		}
	}
}

function GetAlternators() {	return GetElementsByClassName("alternator", "*"); }

// --------------------------------------------------------------------------------
// GetElementsByClassName()
// Find all document elements with the specified CSS class attribute.
//	Improved to work for elements with multiple classes.
// --------------------------------------------------------------------------------
// Arguments:
//	- cls: class name to be searched for [string]
//	- tag: searhc for specific tags with givn class, or "*" for all [string]
// Returns:
//	- all elements with the specified class [array]
// --------------------------------------------------------------------------------
function GetElementsByClassName(cls, tag) {
	var arr = new Array();
	var pattern = "(^" + cls + "$|\\s" + cls + "\\s|\\s" + cls + "\\s|^" + cls + "\\s|\\s" + cls + "$)";
	var j = 0;
	var i;
	var elm = document.getElementsByTagName(tag);
	var rex = new RegExp(pattern, "gi");
	for (i = 0; i < elm.length; i++) {
		if (rex.test(elm[i].className)) arr[arr.length] = elm[i];
	}
	return arr;
}


// --------------------------------------------------------------------------------
// SaveCookie()
// Saves a cookie by name
// --------------------------------------------------------------------------------
// Arguments:
//	- name: cookie value name to save
//  - val: value to save
//	- expiry in days
// --------------------------------------------------------------------------------
function SaveCookie(name, val, days) {
	var expiry = "";
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 *60 * 1000));
		expiry = "; expires=" + date.toGMTString();
	}
	document.cookie = name + "=" + val + expiry + "; path=/";
}

// --------------------------------------------------------------------------------
// GetCookie()
// Gets a cookie by name
// --------------------------------------------------------------------------------
// Arguments:
//	- name: cookie value name to look for
// Returns:
//	- cookie value, or undefined if not found
// --------------------------------------------------------------------------------
function GetCookie(name) {          
	if (document.cookie.length > 0) {               
		var search = name + "=";
		var offset = document.cookie.indexOf(search)                     
		if (offset != -1) { 
			offset += search.length;
			var end = document.cookie.indexOf(";", offset);
			if (end == -1) 
				end = document.cookie.length;
			return unescape(document.cookie.substring(offset, end));
		}
		else
			return undefined;
	}
}
