/**
 * Global variables
 */
archive_path = '/files/static_archive_files';

/**
 * Get elements by class name
 */
function getElementsByClassName(className, node, tag) {
	if (typeof(className) == "string") {
		if (typeof(node) == "undefined") {
			var node = document;
		}
		if (typeof(tag) == "undefined") {
			var tag = '*';
		}
		var elements = [];
		var tags = node.getElementsByTagName(tag);
		for (var i=0; i<tags.length; i++) {
			if (tags[i].className == className) {
				elements.push(tags[i]);
			}
		}
		return elements;
	} else {
		return false;
	}
}

/**
 * Cross-browser event listener
 */
function addEvent(obj, evType, fn) { 
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, false); 
		return true; 
	} else if (obj.attachEvent) { 
		var r = obj.attachEvent("on"+evType, fn); 
		return r; 
	} else { 
		return false; 
	}
}

/**
 * Attach media players to 'media' elements
 */
function attachMediaPlayers() {
	// get all elements with the 'media' class
	var mediaElements = getElementsByClassName("media");
	
	// loop through media elements
	for (var i=0; i<mediaElements.length; i++) {
		
		// get the file path
		var file = getElementsByClassName('downloadLink', mediaElements[i])[0].getElementsByTagName('a')[0].href;
		
		// find the file extension
		var fileParts = file.toLowerCase().split('.');
		var ext = fileParts[fileParts.length-1];
		
		// append a media player based on the extension
		switch(ext) {
			case 'mp3':
				audioPlayer(mediaElements[i], file);
				break;
			case 'm4v':
				videoPlayer(mediaElements[i], file);
				break;
		};
	}
}

/**
 * Make a flash variables string from JSON
 */
function flashVarsToString(flashVars) {
	var output = [];
	for (var key in flashVars) {
		//output.push(key + "=" + encodeURIComponent(flashVars[key]));
		output.push(key + "=" + flashVars[key]);
	}
	return output.join("&");
}

/**
 * generate a unique ID for the player node based on the filename
 */
function mediaFileUniqueID(file) {
	var fileParts = file.split("/");
	return fileParts[fileParts.length-1].replace(/[^A-Za-z0-9]+/g, "");
}

/**
 * Make a flash object
 */
function flashObject(attributes) {
	
	// default attributes
	var defaults = {
		allowfullscreen : true,
		allowscriptaccess : 'always',
		bgcolor : '#ffffff',
		classid : 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
		codebase : 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
		flashvars : {},
		height : 1,
		id : Math.floor(Math.random()*9999999),
		quality : 'high',
		pluginspage : 'http://www.macromedia.com/go/getflashplayer',
		type : 'application/x-shockwave-flash',
		width : 1
	};
	
	// merge defaults with specified attributes
	for (var key in defaults) {
		if (typeof(attributes[key]) == "undefined") {
			attributes[key] = defaults[key];
		}
	}
	
	// create the embed and object elements
	var embed = document.createElement("embed");
	var object = document.createElement("object");
	
	// @todo assign attributes for the object tag
	
	// @todo create params for the object, append
	
	// assign attributes for the embed tag
	embed.setAttribute('allowscriptaccess', attributes.allowscriptaccess);
	embed.setAttribute('allowfullscreen', attributes.allowfullscreen);
	embed.setAttribute('flashvars', flashVarsToString(attributes.flashvars));
	embed.setAttribute('height', attributes.height);
	embed.setAttribute('id', attributes.id);
	embed.setAttribute('name', attributes.id);
	embed.setAttribute('src', attributes.src);
	embed.setAttribute('width', attributes.width);
	
	// append the embed tag as a child of the object
	//object.appendChild(embed);
	
	return embed;
	// return object;
}

/**
 * Audio player
 */
function audioPlayer(node, file) {
	
	// create a Flash object
	var player = flashObject({
		flashvars : {
			autostart : false,
			backcolor : '0x000000',
			file : file,
			height : 20,
			width : 320
		},
		height : 20,
		id : mediaFileUniqueID(file),
		src : archive_path + '/mediaplayer.swf',
		width: 320
	});
	
	// header node
	var header = document.createElement("h3");
	header.appendChild( document.createTextNode("Listen") );
	
	// container node
	var container = document.createElement('div');
	container.setAttribute('class', 'player');
	
	// appened the player to the container
	container.appendChild(player);
	
	// prepend the nodes the the media node
	node.insertBefore(container, node.firstChild);
	node.insertBefore(header, node.firstChild);
}

/**
 * Video player
 */
function videoPlayer(node, file) {
	// create a Flash object
	var player = flashObject({
		flashvars : {
			autostart : false,
			backcolor : '0x000000',
			file : file,
			height : 20,
			width : 320
		},
		height : 260,
		id : mediaFileUniqueID(file),
		src : 'mediaplayer.swf',
		width: 425
	});
	
	// header node
	var header = document.createElement("h3");
	header.appendChild( document.createTextNode("Listen") );
	
	// container node
	var container = document.createElement('div');
	container.setAttribute('class', 'player');
	
	// appened the player to the container
	container.appendChild(player);
	
	// prepend the nodes the the media node
	node.insertBefore(container, node.firstChild);
	node.insertBefore(header, node.firstChild);
}


/**
 * Do stuff on page load
 */
addEvent(window, 'load', function() {
	// @todo fix in IE
	try { attachMediaPlayers(); } catch(e) {}
});
