/* unified script for bal testing
   condense and modularize later */

/* code from utils.js
--------------------------------------------------------------------------------- */

if (document.getElementById && document.getElementsByTagName) {
	document.write('<link rel="stylesheet" type="text/css" href="assets/css/js.css" />');
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

/* my getElementsByClass function
--------------------------------------------------------------------------------- */
function getElementsByClass( element, elType, theClass, scope ) {	
	var matches = new Array();
	var nodes = new Array()
	var idx = 0;
	
	var context = document;
	
	if (scope && (typeof(scope)=="object")) {
		context = scope;
	} else if (scope) {
		context = document.getElementById( scope );
	}
	
	if ( elType == "tag" ) { 
		nodes = context.getElementsByTagName( element );
	} else if ( elType == "id" ) {
		nodes = context.getElementById( element );
	} else {
		nodes = contect.getElementsByTagName( "*" );
	}

	for ( var i = 0; i < nodes.length; i++ ) {
		if ( nodes[i].className.indexOf(theClass) != -1 ) {
			matches[idx++] = nodes[i];
		}
	}
	return matches;
}

/* Snook's getElementByClassName (will probably replace above)
--------------------------------------------------------------------------------- */
function getElementsByClassName(node, classname)
{
    var a = [];
    var re = new RegExp('(^| )'+classname+'( |$)');
    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;
}

/* table row 'zebra-striper'
--------------------------------------------------------------------------------- */
function altRows () {
	var trs=document.getElementsByTagName('tr');
	if (trs) {
		for (var i=0;i<trs.length;i++){ 
			if (i%2 == 0){} 
			else {trs[i].className="altrow";}
		}
	}
}
addLoadEvent(altRows);

/* build two-column lists
--------------------------------------------------------------------------------- */

function twoColList () {
	var cNode = document.getElementById('content');
	var els=getElementsByClassName(cNode,'twocol');
	if (els) {
		for (var i=0;i<els.length;i++){ 
			if (els[i].className=="twocol"){
				lis = els[i].getElementsByTagName('li');
				for (var j=0; j<lis.length; j++){
					if (j%2 == 0) {lis[j].className="li_l";}
					else {lis[j].className="li_r";}
				}
			}
		}
	}
}

addLoadEvent(twoColList);

/* class-changing utility functions
--------------------------------------------------------------------------------- */
function addClass(obj,cName){ killClass(obj,cName); return obj && (obj.className+=(obj.className.length>0?' ':'')+cName); }
function killClass(obj,cName){ return obj && (obj.className=obj.className.replace(new RegExp("^"+cName+"\\b\\s*|\\s*\\b"+cName+"\\b",'g'),'')); }
function hasClass(obj,cName){ return (!obj || !obj.className)?false:(new RegExp("\\b"+cName+"\\b")).test(obj.className) }

/* code from bal_toggle2.js 
--------------------------------------------------------------------------------- */

var evenColor = "#e5eef7";
var oddColor = "#f2f6fb";

function toggleAll(obj) {
	if (obj.closed) {
		for ( var i = 0; i < obj.subtoggles.length; i++ ) {
		  tgl = obj.subtoggles[i].hs.parent;
			killClass(tgl,"closed"); tgl.closed=false;
			addClass(obj,"closeall");
			obj.closed = false;
		}
	} else {
		for ( var i = 0; i < obj.subtoggles.length; i++ ) {
			tgl = obj.subtoggles[i].hs.parent;
			addClass(tgl,"closed"); tgl.closed=true;
			killClass(obj,"closeall");
			obj.closed = true;
		}
	}
}

 function updateStatus() {
 	if(typeof(mtoggles) != "undefined") {
		for ( var i = 0; i < mtoggles.length; i++ ) {
			var numClosed = 0;
			var numOpen = 0;
			stoggles = mtoggles[i].a.subtoggles;
			for ( var j = 0; j < stoggles.length; j++ ) {
				if (stoggles[j].closed) numClosed++;
				else numOpen++; 
			}
			if (numClosed == stoggles.length) {
				killClass(mtoggles[i].a,"closeall");
				mtoggles[i].a.closed = true;
			} else if (numOpen == stoggles.length) { 
				addClass(mtoggles[i].a,"closeall");
				mtoggles[i].a.closed = false;
			}
		}
	}
} 

function toggle(obj) {
	tgl = obj.parent;
	if (hasClass(tgl,"closed")) { killClass(tgl,"closed"); tgl.closed=false; }
	else { addClass(tgl,"closed"); tgl.closed = true; }
	updateStatus();
}

function initToggles() {
	toggles = getElementsByClass( "div","tag","toggle","primary" );
	hotspots = getElementsByClass( "a","tag","hotspot","primary" );
	
	for (var i=0; i < toggles.length; i++) {
	  toggles[i].hs = toggles[i].getElementsByTagName('a')[0];
		toggles[i].hs.parent = toggles[i];
		toggle(toggles[i].hs);
		toggles[i].closed = true; 
  	toggles[i].hs.onclick = function() { toggle(this); };
	}
}

function initMToggles() {
	mtoggles = getElementsByClass( "div","tag","mtoggle","primary" );
	
	for (var i=0; i < mtoggles.length; i++) {
		mtoggles[i].a = mtoggles[i].getElementsByTagName('a')[0];
		mtoggles[i].a.subtoggles = getElementsByClass( "div","tag","toggle",mtoggles[i] );
		mtoggles[i].a.closed = true;
		mtoggles[i].a.onclick = function() { toggleAll(this); };
		for (var j=0; j< mtoggles[i].a.subtoggles.length; j++) {
			if (j%2 == 0) mtoggles[i].a.subtoggles[j].style.backgroundColor = evenColor;
			else mtoggles[i].a.subtoggles[j].style.backgroundColor = oddColor;
		}
	}
}

addLoadEvent(initToggles);
addLoadEvent(initMToggles); 


/* code from nav3.js 
--------------------------------------------------------------------------------- */


addLoadEvent(initNav);

var curSubNav;		// currently active subNav object
var dcount = 0;		// delay count
var hideMenu = 0;

function initNav() {
	var navEls = document.getElementById("navlist").getElementsByTagName("A");
	for (var i=0; i < navEls.length; i++) {
		if (navEls[i].className=="tl") {
			navEls[i].onmouseover=function(){ showNav(this); }
			navEls[i].onfocus=function(){ showNav(this); }
			
			navEls[i].onmouseout=function() { hideNav(this); }
			navEls[i].onblur=function(){ hideNav(this); }
		}
	}
	
	var sNavEls = document.getElementById("navlist").getElementsByTagName("UL");
	for (var j=0; j < sNavEls.length; j++) {
		sAnchors=sNavEls[j].getElementsByTagName("A");
		for (var k=0; k < sAnchors.length; k++) {
			sAnchors[k].onmouseover=function(){ hideMenu=2 };
			sAnchors[k].onfocus=function(){ hideMenu=2 };
			sAnchors[k].onmouseout=function(){ hideMenu=1; delayHide(); };
			sAnchors[k].onblur=function(){ hideMenu=1; delayHide(); };
		}
	}
}

function showNav(navObj) {
	var subNav=navObj.parentNode.getElementsByTagName("UL")[0];
	hideMenu=2;
	if (navObj.className=="tl") { hideCurrent(); }
	if (subNav) { 
		subNav.className+=" navhover";
		document.getElementById("search").style.visibility = "hidden";
		document.getElementById("user").style.visibility = "hidden";
	}
}

function hideNav(navObj) {
	curSubNav=navObj.parentNode.getElementsByTagName("UL")[0];
	hideMenu=1;
	delayHide();
}

function delayHide() {
	// hideMenu values
	//   0 = hide it now
	//   1 = begin the count
	//   2 = paused due to user activity

	if (hideMenu == 0) { 
		hideCurrent();
		dcount = 0;
		return false;
	}
	
	// exit function if hideMenu = 2 - i.e. paused by mouseover event
	if (hideMenu == 2) {
		dcount = 0;
		return false;
	}

	// hideMenu becomes 0 on 10th pass
	if (hideMenu == 1) {
		dcount = dcount + 1;
		if (dcount >= 10) { hideMenu = 0; }
		if (dcount <= 10) { setTimeout('delayHide(' + hideMenu + ')', 175); }
	}
}

function hideCurrent(){
	if (curSubNav) { 
		curSubNav.className=curSubNav.className.replace(new RegExp(" navhover\\b"), "");
		document.getElementById("search").style.visibility = "visible";
		document.getElementById("user").style.visibility = "visible";
	}
}

/* removed code from fades2.js - 5/11/05 
--------------------------------------------------------------------------------- */


/* new fade functionality using Fadomatic
--------------------------------------------------------------------------------- */

function initFades() {
	var faders = getElementsByClass( "img", "tag", "fader" );
	var f = new Array();
	for ( var i = 0; i < faders.length; i++ ) {
		f[i] = new Fadomatic( faders[i], 3, 0 );
		f[i].fadeIn();
	}
}
addLoadEvent(initFades);


/* search box focus behavior
--------------------------------------------------------------------------------- */

/*function inputSelect() {
	var search = document.getElementById( 'txt-search' );
	// search.onfocus=function(){ this.value=""; }
	search.onfocus=function(){ this.select(); }
}
	
addLoadEvent(inputSelect);*/

/* RIL1.0 :: Random image link -- http://www.brothercake.com/
--------------------------------------------------------------------------------- */
//image link constructor
function imageLink(linkid)
{
	//set link object
	this.link = document.getElementById(linkid);
	
	//create an empty array of possible links
	this.possibles = [];
};

//add a possibility 
imageLink.prototype.addLink = function()
{
	//store arguments in possible links array
	this.possibles[this.possibles.length] = arguments;
};

//select a possibility at random 
imageLink.prototype.selectLink = function()
{
	//if the link exists
	if(this.link != null)
	{
		//get a random item from the array
		this.rnd = this.possibles[Math.floor(Math.random() * this.possibles.length)];
		
		//set new link attributes 
		this.link.href = this.rnd[0];
		this.link.title = this.rnd[1];
		
		//get image object inside it
		this.img = this.link.getElementsByTagName('img')[0];
		
		//if it exists
		if(this.img != null)
		{
			//set new image attributes
			this.img.src = this.rnd[2]; 
			this.img.width = this.rnd[3]; 
			this.img.height = this.rnd[4]; 
			this.img.alt = this.rnd[5]; 
		}
	}
};

