/*
FreeFoodPlayer

Depends on MochiKit v1.4+ (www.mochikit.com)

options:
 url
 width
 height
 params (object)
 
example:

{
	url: "myvideotoplay.wmv",
	width: 100,
	height: 200,
	params: {
		autoStart: true
		// any valid name/value pair
		// that can be used with a <param>
		// tag is valid here 
	}
}
*/

// Create namespace if necessary
var Brown;

if (Brown === undefined) {
	Brown = {};
}

Brown.FreeFoodPlayer = {};

Brown.FreeFoodPlayer.Player = function(element, options) {
	this.container = element;
	this.options = options || {};
	
	if (isUndefinedOrNull(this.options.params)) {
		this.options.params = {};
	}
	
	return this;
}

Brown.FreeFoodPlayer.Player.prototype.play = function(url, pos) {
	if (url) {
		this.options.url = url;
	}
	
	if (pos) { 
		this.options.params.currentPosition = pos;
	}
	
	var player = $(this.options.id);
	
	if (player && player.URL && player.controls.currentPosition) {
		player.stretchToFit = false;
		player.URL = this.options.url;
		player.controls.currentPosition = this.convertTimeToSeconds(this.options.params.currentPosition);
	} else {
		try {
			replaceChildNodes(this.container, this.buildPlayer());
		} catch(e) {
			alert(e);
		}
	}
}

/*
Returns a DOM node for embedding a cross-platform Windows Media Player control.
*/
Brown.FreeFoodPlayer.Player.prototype.buildPlayer = function() {
	var objectOptions = merge({}, this.options);
	
	if (objectOptions.params instanceof Object) {
		var paramOptions = merge({}, objectOptions.params);
		delete objectOptions.params;
	}
	
	if (objectOptions.url) {
		objectOptions.data = objectOptions.url;
		paramOptions.src = objectOptions.url;
		
		delete objectOptions.url;
	}
	
	var paramNodes = [];
	
	for (var attr in paramOptions) {
		if (attr != "currentPosition") {
			paramNodes.push(createDOM("param", {name: attr, value: paramOptions[attr]}));
		} else {
			paramNodes.push(createDOM("param", {name: attr, value: this.convertTimeToSeconds(paramOptions[attr])}));
		}
	}	

	var result = createDOM("object", objectOptions, paramNodes);
	
	return result;
}

/*
Returns an the total number of seconds a time code is equal to.
*/
Brown.FreeFoodPlayer.Player.prototype.convertTimeToSeconds = function(time) {
	if (!time) {
		return 0;
	}
	
	var result = 0;
	var parts = time.split(":");
	
	if (parts.length > 3) {
		throw new Error("convertTimeToSeconds() : Invalid time code (" + time + ")");
	}
	
	parts.reverse();
	
	for(var i = 0; i < parts.length; i++) {
		result += parseInt(parts[i], 10) * Math.pow(60, i);
		
		// make sure result isn't tainted by an invalid time code
		if (isNaN(result)) {
			result = 0;
			break;
		}
	}
	
	return result;
}