// Video Feature
// by Tom MacLean III / CCIT
//
// based on Seth Duffey's "A More Accessible Map"
// from A LIST APART
var videoRoll = {
	element: false,
	lastelement: false,
	DLs:     false,
	DTs:     false,
	on:      false,
	/* constructor - sets events */
	init: function(){
		var i=0;
		var ii=0;
		var iinext=0;
		var currentLocation = 0;
		videoRoll.DLs = document.getElementsByTagName('dl');
		videoRoll.DTs = document.getElementsByTagName('dt');
		// only loop thru items once
		if( videoRoll.on == false ){
			//randomly chooses a number between 0 and the number of videos
			var randomVideo = Math.floor( Math.random() * (videoRoll.DTs.length) );
			
			//loop through each DL on page
			while (videoRoll.DLs.length > i) {
				//only affect DLs with a class of 'videos'
				if (videoRoll.DLs[i].className == 'videos'){
					//strip whitespace
					videoRoll.stripWhitespace(videoRoll.DLs[i]);
					videoRoll.stripWhitespace(videoRoll.DTs[i]);
					// loop thru all DT elements
					// loop thru all DT elements again
					while (videoRoll.DTs.length > ii){
						//current Location
						currentLocation = videoRoll.DTs[ii];
						videoRoll.makeNext(currentLocation,ii,randomVideo);
						ii++;
					};					
					ii=0;
				};
				i++;
			};
			videoRoll.on = true;
		};
	},
	/* MAKE THE NEXT LINK */
	makeNext: function(currentElement, ii, theChosenOne) {
		var nextii = ii+1
		if(!videoRoll.DTs[nextii]) nextii = 0;
		nextElement = videoRoll.DTs[nextii];
		nextElementId = "video"+nextii;
		nextElement.setAttribute("id", nextElementId);
		var a = document.createElement('a'); //creates a hyperlink
		var text = document.createTextNode("Next"); //creates the text for the link
		var href = "javascript:videoRoll.showVideo('" + nextElementId + "');";
		
		a.className = 'nextVideo';
		a.setAttribute("href", href);
		a.appendChild(text);
		
		currentElement.nextSibling.appendChild(a);
		if(ii==theChosenOne) videoRoll.showVideo(nextElementId);
		else videoRoll.hideVideo(nextElementId);
	},
	/* SHOW VIDEO */
	showVideo: function(currentelementid) {
		currentelement = document.getElementById(currentelementid);
		currentelement.style.visibility = 'visible'; //shows DT
		currentelement.nextSibling.style.visibility = 'visible'; //shows DD
		
		//this part hides the last element
		videoRoll.element = currentelement.id;//set for hiding
		//begin hide
		if (videoRoll.lastelement) {
			videoRoll.hideVideo(videoRoll.lastelement);
			};
		videoRoll.lastelement = videoRoll.element;//set for next time
	},
	/* HIDE VIDEO */
	hideVideo: function(elementid) {
		var element = document.getElementById(elementid);
		var nextelement = element.nextSibling;
		element.style.visibility = 'hidden'; //hides DT
		nextelement.style.visibility = 'hidden'; //hides DD
	},
	addEvt: function(element, type, handler) {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = videoRoll.addEvt.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			};
		};
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = videoRoll.handleEvent;
	},
	handleEvent: function(event) {
		var returnValue = true;
		// grab the event object (IE uses a global event object)
		event = event || videoRoll.fixEvent(window.event);
		// get a reference to the hash table of event handlers
		var handlers = this.events[event.type];
		// execute each event handler
		for (var i in handlers) {
			this.$$handleEvent = handlers[i];
			if (this.$$handleEvent(event) === false) {
				returnValue = false;
			};
		};
		return returnValue;
	},
	fixEvent: function(event) {
		// add W3C standard event methods
		event.preventDefault = videoRoll.fixEvent.preventDefault;
		event.stopPropagation = videoRoll.fixEvent.stopPropagation;
		return event;
	},
	stripWhitespace: function( el ){
		for(var i = 0; i < el.childNodes.length; i++){
			var node = el.childNodes[i];
			if( node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
				node.parentNode.removeChild(node);
			};
		};
	}
};
videoRoll.fixEvent.preventDefault = function() {this.returnValue = false;};
videoRoll.fixEvent.stopPropagation = function() {this.cancelBubble = true;};
videoRoll.addEvt.guid = 1;


/* LOAD SCRIPT */
	/* for Mozilla */
		if (document.addEventListener) {
			document.addEventListener("DOMContentLoaded", videoRoll.init, null);
		};
		
	/* for Internet Explorer */
		/*@cc_on @*/
		/*@if (@_win32)
			document.write("<script defer src=ie_onload.js><"+"/script>");
		/*@end @*/
		
	/* for other browsers */
		videoRoll.addEvt( window, 'load', videoRoll.init);
