
function ContentPlayer (url, target, controls, autoPlay, loop, randomized) {
	
	this.url = url;
	this.controls = controls;
	this.getControls();
	this.target = (typeof target == "object") ? target : document.getElementById(target);
	this.autoPlay = (autoPlay == undefined) ? true : autoPlay;
	this.loop = (loop == undefined) ? true : loop;
	this.randomized = (randomized == undefined) ? false : randomized;
	
	var isURL = new RegExp(/[.](?=\w{5,})/gi).test(this.url);
	
	this._listeners = new Array();
	this.addListener(this);
	
	var request = new URLRequest(this.url);
	request.requestHeaders.push(new URLRequestHeader("content-type", "text/xml"));
	
	var loader = new URLLoader(this.data, {name: this.build, scope: this});
	loader.load(request);
	
}

Class(ContentPlayer);

Broadcaster.initialize(ContentPlayer.prototype, true);

ContentPlayer.prototype.onChange = new Function;
ContentPlayer.prototype.onChanged = new Function;
ContentPlayer.prototype.onStarted = new Function;
ContentPlayer.prototype.started = false;
ContentPlayer.prototype.onStopped = new Function;

ContentPlayer.prototype.url = new String();
ContentPlayer.prototype.controls = new Object();
ContentPlayer.prototype.target;
ContentPlayer.prototype.autoPlay = true;
ContentPlayer.prototype.loop = true;
ContentPlayer.prototype.randomized = false;
ContentPlayer.prototype.truncate = true;

ContentPlayer.prototype.data = new Object();
ContentPlayer.prototype.list = new Array();
ContentPlayer.prototype.isPlaying = false;
ContentPlayer.prototype.active = 0;
ContentPlayer.prototype.duration = 5000;
ContentPlayer.prototype.timedEvent = 0;
ContentPlayer.prototype.userAgent = new UADetector();

ContentPlayer.prototype.build = function () {
	
	var xml = this.data.xml;
	var text = this.data.text;
	/*
	var container;
	//container = document.createElement("div");
	if (this.userAgent.isIEStrict()) {
		container = xml;
		//container.innerHTML = "<xml/>" + text;
		//container.removeChild(container.firstChild);
	} else {
		container = document.createElement("div");
		container.innerHTML = text;
	}
	*/
	if (window.XMLSerializer) var xs = new XMLSerializer();
	var name, group, image, data;
	
	var itemList = xml.getElementsByTagName("item");
	//var itemList = container.getElementsByTagName("item");
	
	for (var index = 0; index < itemList.length; index++) {
		
		var nameElement = itemList.item(index).getElementsByTagName("name")[0];
		var groupElement = itemList.item(index).getElementsByTagName("group")[0];
		var imageElement = itemList.item(index).getElementsByTagName("image")[0];
		var htmlElement = itemList.item(index).getElementsByTagName("div")[0];
		
		name = (nameElement == undefined) ? "" : (nameElement.xml != undefined) ? nameElement.xml : xs.serializeToString(nameElement);
		group = (groupElement == undefined) ? "" : (groupElement.xml != undefined) ? groupElement.xml : xs.serializeToString(groupElement);
		image = (imageElement == undefined) ? "" : (imageElement.xml != undefined) ? imageElement.text : xs.serializeToString(imageElement.firstChild);
		data = (htmlElement == undefined) ? "" : (htmlElement.xml != undefined) ? htmlElement.xml : xs.serializeToString(htmlElement);
		/*
		name = (nameElement == undefined) ? "" : (nameElement.xml != undefined) ? nameElement.xml : nameElement.innerHTML;
		group = (groupElement == undefined) ? "" : (groupElement.xml != undefined) ? groupElement.xml : groupElement.innerHTML;
		image = (imageElement == undefined) ? "" : (imageElement.xml != undefined) ? imageElement.text : imageElement.innerHTML;
		data = (htmlElement == undefined) ? "" : (htmlElement.xml != undefined) ? htmlElement.xml : htmlElement.innerHTML;
		*/
		this.list.push({name: name, group: group, image: image, data: data});
		
	}
	
	if (this.randomized) this.active = this.randomize();
	if (this.autoPlay) this.play();
	else this.setControls();
	
}

ContentPlayer.prototype.play = function () {
	
	if (!this.started) {
		this.broadcastMessage("onStarted", this);
		this.started = true;
	}
	
	clearTimeout(this.timedEvent);
	
	this.isPlaying = true;
	this.setControls();
	
	if (this.active < this.list.length || this.loop) {
		
		if (this.loop && this.active == this.list.length) this.active = 0;
		
		this.setContent(this.list[this.active].data);
		
		this.active++;
		
		var classPointer = this;
		this.timedEvent = setTimeout(function() { classPointer.play.apply(classPointer); }, this.duration);
		
	} else {
		this.stop();
	}
	
}

ContentPlayer.prototype.stop = function () {
	
	this.isPlaying = false;
	this.setControls();
	
	clearTimeout(this.timedEvent);
	this.broadcastMessage("onStopped", this);
	
}

ContentPlayer.prototype.next = function () {
	
	var check = this.active;
	if ((check + 1) < this.list.length && !this.autoPlay) {
		this.stop();
		this.active++;
		this.play();
	} else {
		this.stop();
		this.play();
	}
	
}

ContentPlayer.prototype.back = function () {
	
	var check = this.active;
	if ((check - 1) >= 0 && !this.autoPlay) {
		this.stop();
		this.active--;
		this.play();
	} else {
		this.stop();
		this.active = ((this.active - 2) < 0) ? this.list.length - 1 : this.active - 2;
		this.play();
	}
	
}

ContentPlayer.prototype.setContent = function (string) {
	
	this.target.style.display = "none";
	this.broadcastMessage("onChange", this);
	
	this.target.style.backgroundImage = "url('" + this.list[this.active].image + "')";
	this.target.style.backgroundRepeat = "no-repeat";
	this.target.innerHTML = string;
	
	this.broadcastMessage("onChanged", this);
	this.target.style.display = "block";
	
	if (this.userAgent.getIEVer() < 7) {
		if (new RegExp(/[.png]/).test(this.list[this.active].image)) {
			
		}
		new iePNGFix();
	}
	
}

ContentPlayer.prototype.getControls = function () {
	
	for (var items in this.controls) {
		this.controls[items] = document.getElementById(this.controls[items]);
	}
	
}

ContentPlayer.prototype.setControls = function () {
	
	if (this.controls != null) {
		if (this.isPlaying) {
			if (this.controls.pause.style.display == "none" || this.controls.pause.style.display == "") this.controls.pause.style.display = "block";
			if (this.controls.play.style.display == "block" || this.controls.play.style.display == "") this.controls.play.style.display = "none";
		} else {
			this.controls.pause.style.display = "none";
			this.controls.play.style.display = "block";
		}
	}
	
}

ContentPlayer.prototype.randomize = function (minValue, maxValue) {
	
	var minValue = (minValue == undefined) ? 0 : minValue;
	var maxValue = (maxValue == undefined) ? this.list.length - 1 : maxValue;
	var value = Math.floor(Math.random() * (maxValue - minValue + 1)) + minValue;
	
	return (value == this.active && value > 0) ? this.randomize() : value;
	
}
