/*------------------------------------------------------------------------------
Function:       footnoteLinks()
Author:         Aaron Gustafson (aaron at easy-designs dot net)
Creation Date:  8 May 2005
Version:        1.3
Homepage:       http://www.easy-designs.net/code/footnoteLinks/
License:        Creative Commons Attribution-ShareAlike 2.0 License
				http://creativecommons.org/licenses/by-sa/2.0/
Note:           This version has reduced functionality as it is a demo of 
				the script's development
------------------------------------------------------------------------------*/
function footnoteLinks(containerID,targetID) {
  if (!document.getElementById || 
	  !document.getElementsByTagName ||
	  !document.createElement) return false;
  if (!document.getElementById(containerID) ||
	  !document.getElementById(targetID)) return false;
  var container = document.getElementById(containerID);
  var target    = document.getElementById(targetID);
  var h2        = document.createElement('h2');
  jsu_addClass.apply(h2,['printOnly']);
  var h2_txt    = document.createTextNode('Links');
  h2.appendChild(h2_txt);
  var coll = container.getElementsByTagName('*');
  var ol   = document.createElement('ol');
  jsu_addClass.apply(ol,['printOnly']);
  var myArr = [];
  var thisLink;
  var num = 1;
  for (var i=0; i<coll.length; i++) {
	var thisClass = coll[i].className;
	if ( coll[i].getAttribute('href') ||
		 coll[i].getAttribute('cite') ) { 
	  thisLink = coll[i].getAttribute('href') ? coll[i].href : coll[i].cite;
	  var note = document.createElement('sup');
	  jsu_addClass.apply(note,['printOnly']);
	  var note_txt;
	  var j = jsu_inArray.apply(myArr,[thisLink]);
	  if ( j || j===0 ) {
		note_txt = document.createTextNode('['+(j+1)+']');
	  } else {
		var li     = document.createElement('li');
		var li_txt = document.createTextNode(thisLink);
		li.appendChild(li_txt);
		ol.appendChild(li);
		myArr.push(thisLink);
		note_txt = document.createTextNode('['+num+']');
		num++;
	  }
	  note.appendChild(note_txt);
	  if (coll[i].tagName.toLowerCase() == 'blockquote') {
		var lastChild = jsu_lastChildContainingText.apply(coll[i]);
		lastChild.appendChild(note);
	  } else {
		coll[i].parentNode.insertBefore(note, coll[i].nextSibling);
	  }
	}
  }
  target.appendChild(h2);
  target.appendChild(ol);
  jsu_addClass.apply(document.getElementsByTagName('html')[0],['js_on']);
  return true;
}
window.onload = function() {
  footnoteLinks('main-content','main-content');
}








/* = DROPDOWN MENU
-------------------------------------------------
	Putting a class of dropdown on an element 
	will make the element show hide when the 
	parent element or its children are hovered 
	over or focused.
-------------------------------------------------*/

function prepDropDownMenu() {
	if(!document.getElementById || !document.getElementById("quicklinks") || !document.getElementById("quicklinks-toggle-link")) return false;
	
	var quicklinks = document.getElementById("quicklinks");
	quicklinks.clicked_open = null;
	
	var quicklinks_toggle_link = document.getElementById("quicklinks-toggle-link");
	
	quicklinks_toggle_link.onclick = function(e)
	{
		// stop event propagation
		if (!e) var e = window.event;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		
		if(quicklinks.clicked_open == null) {
			quicklinks.clicked_open = true;
			
			if(!quicklinks.className.match("hover"))
			{
				if(quicklinks.className) {
					quicklinks.className += " hover";
				}
				else {
					quicklinks.className = "hover";
				}
			}
		}
		else if(!quicklinks.clicked_open && !quicklinks.className.match("hover"))
		{
			if(quicklinks.className) {
				quicklinks.className += " hover";
			}
			else {
				quicklinks.className = "hover";
			}
			quicklinks.clicked_open = true;
		}
		else if(quicklinks.clicked_open || quicklinks.className.match("hover"))
		{
			quicklinks.className = quicklinks.className.replace(/ ?hover ?/g, "");
			quicklinks.clicked_open = false;
		}
		
		return false;
	};
	
	quicklinks_toggle_link.onfocus = function()
	{
		if(quicklinks.clicked_open) return 0;
		
		if(!quicklinks.className.match("hover"))
		{
			if(quicklinks.className) {
				quicklinks.className += " hover";
			}
			else {
				quicklinks.className = "hover";
			}
		}
		
		quicklinks.clicked_open = null;
		
		return 0;
	};
	
	var quicklinks_last_link = quicklinks.getElementsByTagName("A");
	quicklinks_last_link = quicklinks_last_link[quicklinks_last_link.length - 1];
	
	quicklinks_last_link.onblur = function()
	{
		if(quicklinks.className.match("hover"))
		{
			quicklinks.className = quicklinks.className.replace(/ ?hover ?/g, "");
		}
		
		quicklinks.clicked_open = false;
		return 0;
	};
	
	document.onclick = function() {
		quicklinks.className = quicklinks.className.replace(/ ?hover ?/g, "");
		quicklinks.clicked_open = false;
	};
	
	return 0;
}

addLoadEvent(prepDropDownMenu);

function prepDropDownMenuFaculty() {
	if(!document.getElementById || !document.getElementById("app-tools") || !document.getElementById("app-tools-toggle-link")) return false;
	
	var quicklinks = document.getElementById("app-tools");
	quicklinks.clicked_open = null;
	
	var quicklinks_toggle_link = document.getElementById("app-tools-toggle-link");
	
	quicklinks_toggle_link.onclick = function(e)
	{
		// stop event propagation
		if (!e) var e = window.event;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		
		if(quicklinks.clicked_open == null) {
			quicklinks.clicked_open = true;
			
			if(!quicklinks.className.match("hover"))
			{
				if(quicklinks.className) {
					quicklinks.className += " hover";
				}
				else {
					quicklinks.className = "hover";
				}
			}
		}
		else if(!quicklinks.clicked_open && !quicklinks.className.match("hover"))
		{
			if(quicklinks.className) {
				quicklinks.className += " hover";
			}
			else {
				quicklinks.className = "hover";
			}
			quicklinks.clicked_open = true;
		}
		else if(quicklinks.clicked_open || quicklinks.className.match("hover"))
		{
			quicklinks.className = quicklinks.className.replace(/ ?hover ?/g, "");
			quicklinks.clicked_open = false;
		}
		
		return false;
	};
	
	quicklinks_toggle_link.onfocus = function()
	{
		if(quicklinks.clicked_open) return 0;
		
		if(!quicklinks.className.match("hover"))
		{
			if(quicklinks.className) {
				quicklinks.className += " hover";
			}
			else {
				quicklinks.className = "hover";
			}
		}
		
		quicklinks.clicked_open = null;
		
		return 0;
	};
	
	var quicklinks_last_link = quicklinks.getElementsByTagName("A");
	quicklinks_last_link = quicklinks_last_link[quicklinks_last_link.length - 1];
	
	quicklinks_last_link.onblur = function()
	{
		if(quicklinks.className.match("hover"))
		{
			quicklinks.className = quicklinks.className.replace(/ ?hover ?/g, "");
		}
		
		quicklinks.clicked_open = false;
		return 0;
	};
	
	document.onclick = function() {
		quicklinks.className = quicklinks.className.replace(/ ?hover ?/g, "");
		quicklinks.clicked_open = false;
	};
	
	return 0;
}

addLoadEvent(prepDropDownMenuFaculty);

/* = CLEAR FIELD
-------------------------------------------------
	clears the value of any inpu field with the
	class name of clearDefault
-------------------------------------------------*/

function clickClear() {
	if(!document.getElementsByTagName) return false;
	
	var inputs = document.getElementsByTagName("INPUT");
	
	for ( var i = 0; i < inputs.length; i++)
	{
		if(inputs[i].className.match("clear-default"))
		{
			inputs[i].onclick = function() {
				if(this.value == this.defaultValue)
				{
					this.value = "";
				}
				return 0;
			};
			inputs[i].onfocus = function() {
				if(this.value == this.defaultValue)
				{
					this.value = "";
				}
				return 0;
			};
			inputs[i].onblur = function() {
				if(this.value == "")
				{
					this.value = this.defaultValue;
				}
				return 0;
			};
		}
	}
	return 0;
}

addLoadEvent(clickClear);

/* = GET ELEMENTS BY CLASS
-------------------------------------------------
	adds in some much needed functionality to the
	DOM. 
	
	searchClass: class name to search for
	node: (optional) node to search under
	tag: (optional) type of element to search for
-------------------------------------------------*/
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function addClass(ele,cls) {
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}

function removeClass(ele,cls) {
	if (hasClass(ele,cls)) {
    	var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
}

function expandInit () {
	var expandables = getElementsByClass('expandable', document.getElementById('section-nav'), 'li');
	for (var i=0; i < expandables.length; i++) {
		var expand_toggle_link = createExpandToggleLink();
		if(hasClass(expandables[i], "active") || hasClass(expandables[i], "has-active-child"))
		{
			addClass(expandables[i], "expanded");
			expand_toggle_link.setAttribute("title", "");
		}
		expandables[i].insertBefore(expand_toggle_link, expandables[i].childNodes[0]);
	}
	
	return 0;
}

// Creates the toggle link box to hide and show child links

function createExpandToggleLink() {
	if(!document.createElement) return false;
	
	var toggle_link = document.createElement("A");
	toggle_link.className = "toggle-link";
	toggle_link.setAttribute("href", "#");
	toggle_link.setAttribute("title", "Click to Expand");
	
	toggle_link.onclick = function() {
		
		if(hasClass(this.parentNode, "active") || hasClass(this.parentNode, "has-active-child"))
		{
			return false;
		} 
		
		if(hasClass(this.parentNode, "expanded"))
		{
			removeClass(this.parentNode, "expanded");
			this.setAttribute("title", "Click to Expand");
		}
		else
		{
			addClass(this.parentNode, "expanded");
			this.setAttribute("title", "Click to Collapse");
		}
		
		return false;
	};
	
	return toggle_link;
}

/* = TABLE HELPER -------------------------------
	This function parses all the tables in the
	main content area of the page and applies the
	color striping and helper styles for IE.
-------------------------------------------------*/

function table_helper() {
	if(!document.getElementById || !document.getElementById("main-content")) return false;
	
	var main_content = document.getElementById("main-content");
	var tables = main_content.getElementsByTagName("table");
	
	for(var i = 0; i < tables.length; i++) {

		var table_rows = tables[i].getElementsByTagName("tr");
		
		// color stripe the even rows
		for(var j = 0; j < table_rows.length; j++) {

			// mod 2
			if(j % 2) {
				
				if(table_rows[j].className) {
					table_rows[j].className += " even";
				}
				else {
					table_rows[j].className = "even";
				}
			}

			// applying a class to the first node in the table row
			// find first node
			var k = 0;
			while(table_rows[j].childNodes[k].nodeType != 1) {
				k++;
			}
			
			var row_child_node = table_rows[j].childNodes[k];

			if(row_child_node.className) {
				row_child_node.className += " first";
			}
			else {
				row_child_node.className = "first";
			}
		}

		var th_nodes = tables[i].getElementsByTagName("th");
		
		for(var j = 0; j < th_nodes.length; j++) {
			var scope = th_nodes[j].getAttribute("scope");
			
			if(scope == "row") {
				if(th_nodes[j].className) {
					th_nodes[j].className += " scope-row";
				}
				else {
					th_nodes[j].className = "scope-row";
				}
			}
			else if(scope == "col") {
				if(th_nodes[j].className) {
					th_nodes[j].className += " scope-col";
				}
				else {
					th_nodes[j].className = "scope-col";
				}
			}
		}
	}
	
	return 0;
}
addLoadEvent(table_helper);

/* = ADD ON LOAD
-------------------------------------------------
	This adds functions to onload without
	stepping on each other.
-------------------------------------------------*/

function addLoadEvent(func) {
	var oldOnLoad = window.onload;
	if (typeof window.onload != 'function') 
	{
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldOnLoad();
			func();
		};
	}
}






