/*
* Author: 			Robert Lloyd
* Organisation:		Swinburne University (COHST), VIC
*/


/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/

/*
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};
*/

//document alias
var d = document;

// instead of document.createElement:
function dce(obj) {
	return d.createElement(obj);
}
// called like this:
//eDIV = dce("div");

function dct(str) {
	return d.createTextNode(str);
}
// called like this:
//eTxtNode = dct("Hello World!");

function ac(pNode,cNode) {
	pNode.appendChild(cNode);
}
// called like this:
//ac(eUL,eLI);

function sa(obj,attr,val) {
	obj.setAttribute(attr,val);
}
// called like this:
//sa(eDIV,"id","myDiv");

function ge(objID) {
	return d.getElementById(objID);
}
// called like this:
//ge("mContainer");

//innerHTML alternative
function so_getText(obj) {
	if(obj.textContent) return obj.textContent;
	if (obj.nodeType == 3) return obj.data;
	var txt = new Array(), i=0;
	while(obj.childNodes[i]) {
		txt[txt.length] = so_getText(obj.childNodes[i]);
		i++;
	}
    return txt.join("");
}


function so_clearInnerHTML(obj) {
	// so long as obj has children, remove them
	while(obj.firstChild) obj.removeChild(obj.firstChild);
}

function limitText(limitField, limitCount, limitNum) {
var currLength; 	//object
var currLengthInt; 	//object length
var remainLength;
var eTxtNode;
	if (ge(limitField).value.length > limitNum) {
		ge(limitField).value = ge(limitField).value.substring(0, limitNum);
	} else {
		currLength = ge(limitField).value;
		//currLength = so_getText(ge(limitField));
		currLengthInt = currLength.length;
		//alert('currLengthInt: ' + currLengthInt);
		remainLength = limitNum - currLengthInt;
		//alert('remainLength: ' + remainLength);
		so_clearInnerHTML(document.getElementById(limitCount));
		//append txt to target
		ac(ge(limitCount),dct(remainLength));
	}
}

function jscss(a,o,c1,c2){
	switch (a){
	case 'swap':
		o.className=!jscss('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
	break;
	case 'add':
		if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
	break;
	case 'remove':
		var rep=o.className.match(' '+c1)?' '+c1:c1;
		o.className=o.className.replace(rep,'');
	break;
	case 'check':
		return new RegExp('\\b'+c1+'\\b').test(o.className);
	break;
	}
}


function getElementsByClassName(classname, node) {
	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
	if(re.test(els[i].className))a.push(els[i]);
	return a;
}


function searchByTagName(tagName, node) {
	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + tagName + '\\b');
	var els = node.getElementsByTagName(tagName);
	for(var i=0,j=els.length; i<j; i++)
	if(re.test(els[i].className))a.push(els[i]);
	return a;
}

/*
function addEvent( obj, type, fn, bubbling ){

	bubbling = bubbling || false;
	// IE 6 browser, Opera 9
	if (obj.attachEvent){
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		alert('attachEvent');
	}
	else if (obj.addEventListener){
	// Safari 3.1.2, FF 2
		obj.addEventListener(type, fn, bubbling);
		//alert('attachEventListener');
	}

}
*/
function removeEvent( obj, type, fn ){
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}

function hideControl(event, action, condition)
{
	var items;
	items = getElementsByClassName(action);
	for (i=0; i <items.length; i++) {
		if (event.value == condition || event == '') {
			items[i].style.display = '';
		}
		else {
			items[i].style.display = 'none';
		}
	}
}

function showClass(classObj){
var m;
	find = getElementsByClassName(classObj); 
	for(m=0;m < find.length;m++){
		find[m].style.display='';
	}
}
function hideClass(classObj){
var m;
	find = getElementsByClassName(classObj); 
	for(m=0;m < find.length;m++){
		find[m].style.display='none';
	}
}

function depress(IDname){
	var content;
	var m;
	var selectSession;
	var show = 'Show';
	var hide = 'Hide';
	selectSession = 'session' + IDname.substring(4);
	
	find = getElementsByClassName(selectSession); 
	
	for(m=0;m < find.length;m++){
		var targetParent = find[m].parentNode.parentNode.previousElementSibling;
		jscss('swap',find[m],'hide', 'display');
		jscss('swap',targetParent,'selectTable', 'unselectTable');
	}
	content = so_getText(ge(IDname));

	
	if(content == hide){
		so_clearInnerHTML(ge(IDname));
		ac(ge(IDname),dct(show));
		//alert(content);
	}
	if(content == show){
		so_clearInnerHTML(document.getElementById(IDname));
		ac(ge(IDname),dct(hide));
		//alert(content);
	}
}

/*
function depress(IDname){
	//alert(id);
	var content;
	var m;
	var selectSession;
	var show = 'Show';
	var hide = 'Hide';
	selectSession = 'session' + IDname.substring(4);
	//alert(selectSession);
	find = getElementsByClassName(selectSession); 
	for(m=0;m < find.length;m++){
		//$(find[m]).style.display=($(find[m]).style.display != 'none' ? 'none' : '' );
		var targetParent = find[m].parentNode.parentNode.previousElementSibling;
		jscss('swap',find[m],'hide', 'display');
		jscss('swap',targetParent,'selectTable', 'unselectTable');
	}
	//content = document.getElementById(IDname).innerHTML;
	content = so_getText(ge(IDname));
	
	if(content == hide){
		if(document.getElementById(IDname).innerHTML){
			//document.getElementById(IDname).innerHTML= show;
			so_clearInnerHTML(ge(IDname));
			ac(ge(IDname),dct(show));
		}
	}
	if(content == show){
		if(document.getElementById(IDname).innerHTML){
			//document.getElementById(IDname).innerHTML = hide;
			so_clearInnerHTML(ge(IDname));
			ac(ge(IDname),dct(hide));
			
		}
	}
}
*/

function changeContentClass(classObj, content){
var m;
	find = getElementsByClassName(classObj); 
	for(m=0;m < find.length;m++){
		find[m].innerHTML=content;
	}
}

<!--
function addEvent(obj, type, fn){
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}else{
		obj["on"+type] = obj["e"+type+fn];
	}
}
	
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();

function $(){
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function toggle(classObj){
	var a;
	var m;
	var showAll = 'Show All Sessions';
	var hideAll = 'Hide All Sessions';
	var display;
	var targetParent;
	find = getElementsByClassName('controller'); 
	for(a=0;a < find.length;a++){
		if(find[a].innerHTML == showAll){
			find[a].innerHTML = hideAll;
			display = true;
		}else{
			find[a].innerHTML = showAll;
			display = false;
		}
	}
	find = getElementsByClassName(classObj); 
	if(display == true){
		for(m=0;m < find.length;m++){
			jscss('remove',find[m],'hide');
			jscss('add',find[m],'display');
		}
	}else{
		for(m=0;m < find.length;m++){
			jscss('remove',find[m],'display');
			jscss('add',find[m],'hide');
		}
	}
	//change contents of individual show/hide buttons
	find=getElementsByClassName('sessionButton');
	for(b=0;b<find.length;b++){
		if(display){
			find[b].innerHTML = 'Hide';
			targetParent = find[b].parentNode.parentNode;
			jscss('remove',targetParent,'unselectTable');
			jscss('add',targetParent,'selectTable');
		}else{
			find[b].innerHTML = 'Show';
			targetParent = find[b].parentNode.parentNode;
			jscss('remove',targetParent,'selectTable');
			jscss('add',targetParent,'unselectTable');
		}
	}
}




var togglers = {
	init : function(){
		var items;
		items = getElementsByClassName('controller');
		for (i=0; i <items.length; i++) {
			//items[i].style.display = '';
			addEvent($(items[i]),'click',this.run);
		}
		//addEvent($('controller'),'click',this.run);
	},
	run : function(){
		toggle('sessionTable');
	}
}

function pageLoaders() {
	togglers.init();
	//limitText('question', 'countdown', 500);
	if(ge('question')){
		addEvent(ge('question'), 'KeyDown', limitText('question','countdown',500));
	}
}

addEvent(window,'unload',EventCache.flush);
addEvent(window,'load',pageLoaders);

//window.onload = pageLoaders;
//-->
