var trackNumber = 0;
var trackUrls = Array();
var trackTypes = Array();
var trackFileIds = Array();

function add_track(id, type)
{
	if (!type)
	{
		type = 'track';
	}

	trackUrls[trackNumber] = id;
	trackTypes[trackNumber] = type;
	trackNumber++;
}

var playerListener = new Object();
playerListener.hasPlayed = false;
playerListener.isStopped = true;
playerListener.currentTrack = -1;
playerListener.lastAutoChange = -1;                
playerListener.timeout = 7000;

/**
 * Initialisation
 */
playerListener.onInit = function()
{
    this.position = 0;
};

/**
 * Update
 */
playerListener.onUpdate = function()	
{
    playerListener.hasPlayed = playerListener.hasPlayed || (this.position > 0);
	
	if (playerListener.hasPlayed && !playerListener.isStopped)
		setStopButton(this.currentTrack);
		
    if (this.lastAutoChange + this.timeout < new Date().getTime()
		 && this.position == 0
		 && !this.isStopped)
    {
		 	if (!this.hasPlayed)
		 	{
		 		badCheck(this.currentTrack);
		 	}
			else if ((this.currentTrack + 1 < trackNumber) && (trackType(this.currentTrack)=='track'))
			{
				play(this.currentTrack + 1);
			}
			else
			{
				this.isStopped = true;
				setPlayButton(this.currentTrack);
			}
    }
};

function trackType(id)
{
	if ((typeof(trackTypes) != 'undefined') && trackTypes[id])
	{
		return trackTypes[id];
	}
	else
	{
		return 'track';
	}
}

function getFlashObject()
{
    return document.getElementById("flashPlayer");
}

function play(id)	
{
	playerListener.hasPlayed = false;
    playerListener.isStopped = false;
    playerListener.lastAutoChange = new Date().getTime();
    trackFileIds = Array();
    for (var i=0; i<trackNumber; i++)
		setPlayButton(i);
    setLoadingButton(id);
    
    var url;
    switch (trackType(id))
    {
    	case 'file':	    	
    		url = '/file/play/' + trackUrls[id];	    		
    		break;
    	case 'sample':
    		url = '/file/play/sample/' + trackUrls[id];
    		break;
    	default:
    		url = '/file/play/track/' + trackUrls[id] + '/' + Math.random();	    		
    }

    if (playerListener.currentTrack != id) {
		getFlashObject().SetVariable("method:setUrl", url);
    }
    playerListener.currentTrack = id;

    getFlashObject().SetVariable("method:play", "");
    getFlashObject().SetVariable("enabled", "true");
}
function pause(id)
{
    playerListener.isStopped = true;
    setPlayButton(id);
   
    getFlashObject().SetVariable("method:pause", "");
}
function stop(id)
{
    playerListener.isStopped=true;
    setPlayButton(id);

    getFlashObject().SetVariable("method:stop", "");
}
function setLoadingButton(id)
{
    document.getElementById("playerplay" + id).style.display = "none";
    document.getElementById("playerloading" + id).style.display = "block";
    document.getElementById("playerpause" + id).style.display = "none";
}
function setPlayButton(id)
{
    document.getElementById("playerplay" + id).style.display = "block";
    document.getElementById("playerloading" + id).style.display = "none";
    document.getElementById("playerpause" + id).style.display = "none";
}
function setStopButton(id)
{
    document.getElementById("playerplay" + id).style.display = "none";
    document.getElementById("playerloading" + id).style.display = "none";
    document.getElementById("playerpause" + id).style.display = "block";
}

function badCheck(id)
{
	playerListener.isStopped = true;
    getFlashObject().SetVariable("method:stop", "");
	setLoadingButton(id);
	
	var url;
	switch (trackType(id))
	{
		case 'file':
			url = "/file/badcheck/" + trackUrls[id];
			break;
		case 'track':
			url = "/file/badcheck-track/" + trackUrls[id];
			break;
		default:
			url = false;
	}

	if (url)
	{
		var xmlhttp;
		if (window.XMLHttpRequest)
		{
			// code for IE7+, Firefox, Chrome, Opera, Safari
			xmlhttp=new XMLHttpRequest();
		}
		else if (window.ActiveXObject)
		{
			// code for IE6, IE5
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
		else
		{
			//alert("Your browser does not support XMLHTTP!");
		}

		if (trackType(id) == 'track')
		{
			xmlhttp.onreadystatechange = function()
			{
				if (xmlhttp.readyState == 4)
				{
					switch (xmlhttp.responseText)
					{
						case 'next':
							playerListener.currentTrack = -1;
							play(id);
							break;
						case 'sample':								
							playerListener.currentTrack = -1;
							play(id);
							trackTypes[id] = 'track_sample';
							break;
						default:
							setPlayButton(playerListener.currentTrack);
							if (id+1 < trackNumber)
								play(id + 1);
					}
				}
			}
		}
		else
		{
			setPlayButton(playerListener.currentTrack);
		}

		xmlhttp.open("GET", url ,true);
		xmlhttp.send(null);
	}
}

