
function playSelected() {
	play(selectedAlbum, selectedTrack);	
}

function play(albumIndex, trackIndex) {
	OMTK_P_play(catalog[albumIndex].tracks[trackIndex].url);	
}

var catalog;
var selectedAlbum = 0;
var selectedTrack = 0;

function showPlaylist() {
	var head = document.getElementsByTagName("head")[0];
	var script = document.createElement("script");
	script.type = "text/javascript";
	script.src = "/ogg/catalog.json";
	head.appendChild(script);
}

function processPlaylist(res) {
	catalog = res.catalog;
	renderAlbums();
	renderTracks();
}

function renderAlbums() {
	var i;
	var albumlist = document.getElementById("albumlist");
	for(i=0; i<catalog.length; i++) {
		var div = document.createElement("div");
		var divt = document.createElement("div");
		var diva = document.createElement("div");
		div.className = (i == selectedAlbum ? "album selected" : "album unselected");
		div.onclick = albumClick;
		div.index = i;
		div.style.cursor = "pointer";
		div.onmouseover = albumMouseOver;
		div.onmouseout = albumMouseOut;
		divt.className = "album_title";
		diva.className = "album_artist";
		divt.appendChild(document.createTextNode(catalog[i].title));
		diva.appendChild(document.createTextNode(catalog[i].artist));
		div.appendChild(divt);
		div.appendChild(diva);
		albumlist.appendChild(div);
	}	
}

function albumClick(event) {
	event = (event) ? event : ((window.event) ? window.event : "");
	var source = (event.target) ? event.target : event.srcElement;
	while(source.index == null) {
		source = source.parentNode;	
	}
	selectedAlbum = source.index;
	var parent = source.parentNode;
	for(var i=0; i<parent.childNodes.length; i++) {
		parent.childNodes[i].className = (i == selectedAlbum ? "album selected" : "album unselected");
	}
	selectedTrack = 0;
	renderTracks();
	playSelected();
}

function albumMouseOver(event) {
	event = (event) ? event : ((window.event) ? window.event : "");
	var source = (event.target) ? event.target : event.srcElement;
	while(source.index == null) {
		source = source.parentNode;	
	}
	source.style.color = "#0000ff";
}

function albumMouseOut(event) {
	event = (event) ? event : ((window.event) ? window.event : "");
	var source = (event.target) ? event.target : event.srcElement;
	while(source.index == null) {
		source = source.parentNode;	
	}
	source.style.color = "#000000";
}

function renderTracks() {
	var i;
	var tracklist = document.getElementById("tracklist");	
	while(tracklist.hasChildNodes()) {
		tracklist.removeChild(tracklist.firstChild);	
	}
	var tbl = document.createElement("table");
	var tbody = document.createElement("tbody");
	for(i=0; i<catalog[selectedAlbum].tracks.length; i++) {
		var track = catalog[selectedAlbum].tracks[i];
		var tr = document.createElement("tr");
		
		tr.className = "track";//(i == selectedTrack ? "track selected" : "track unselected");
		tr.onclick = trackClick;
		tr.index = i;
		tr.style.cursor = "pointer";
		tr.onmouseover = trackMouseOver;
		tr.onmouseout = trackMouseOut;
		
		var tdpi = document.createElement("td");
		var tdtn = document.createElement("td");
		var tddr = document.createElement("td");
		var tdnm = document.createElement("td");
		tdpi.className = "track_playindicator";
		tdtn.className = "track_number";
		tddr.className = "track_duration";
		tdnm.className = "track_title";
		tdpi.innerHTML = (i == selectedTrack ? "<img src='/gfx/play.png' style='width: 7px; height: 10px;'></img>" : "<img src='/gfx/transparent.png' style='width: 1px; height: 10px;'></img>");
		tdtn.appendChild(document.createTextNode(track.trackNumber + "."));
		tddr.appendChild(document.createTextNode(formatDuration(track.duration)));
		tdnm.appendChild(document.createTextNode(track.title));
		tr.appendChild(tdpi);
		tr.appendChild(tdtn);
		tr.appendChild(tddr);
		tr.appendChild(tdnm);
		tbody.appendChild(tr);
	}
	tbl.appendChild(tbody);
	tracklist.appendChild(tbl);
}

function trackClick(event) {
	event = (event) ? event : ((window.event) ? window.event : "");
	var source = (event.target) ? event.target : event.srcElement;
	while(source.index == null) {
		source = source.parentNode;	
	}
	selectedTrack = source.index;
	var parent = source.parentNode;
	for(var i=0; i<parent.childNodes.length; i++) {
		var td = parent.childNodes[i].childNodes[0];
		td.innerHTML = (i == selectedTrack ? "<img src='/gfx/play.png' style='width: 7px; height: 10px;'></img>" : "<img src='/gfx/transparent.png' style='width: 1px; height: 10px;'></img>");
	}
	//renderTracks();
	playSelected();
}

function trackMouseOver(event) {
	event = (event) ? event : ((window.event) ? window.event : "");
	var source = (event.target) ? event.target : event.srcElement;
	while(source.index == null) {
		source = source.parentNode;	
	}
	source.style.color = "#0000ff";
}

function trackMouseOut(event) {
	event = (event) ? event : ((window.event) ? window.event : "");
	var source = (event.target) ? event.target : event.srcElement;
	while(source.index == null) {
		source = source.parentNode;	
	}
	source.style.color = "#000000";
}

function updateAlbumAndTrackSelection() {
	var albumlist = document.getElementById("albumlist");
	for(var i=0; i<albumlist.childNodes.length; i++) {
		albumlist.childNodes[i].className = (i == selectedAlbum ? "album selected" : "album unselected");
	}		
	var tracklist = document.getElementById("tracklist");	
	var tbody = tracklist.childNodes[0].childNodes[0];
	for(var i=0; i<tbody.childNodes.length; i++) {
		var td = tbody.childNodes[i].childNodes[0];
		td.innerHTML = (i == selectedTrack ? "<img src='/gfx/play.png' style='width: 7px; height: 10px;'></img>" : "<img src='/gfx/transparent.png' style='width: 1px; height: 10px;'></img>");
	}			
}

function formatDuration(d) {
	var sec = d%60;
	var min = (d-sec)/60;
	return min + ":" + (sec < 10 ? ("0" + sec) : sec);
}

OMTK_P_addMetadataUpdateListener(updateMetadata);
OMTK_P_addCompleteListener(playerCompleted);
window.setInterval("updatePosition()", 200);

function updatePosition() {
	try {
		var elem = document.getElementById("md_time");
		if(elem) {
			var pos = OMTK_P_getPosition();
			if(pos >= 0) {
				setText(elem, formatDuration(Math.floor(pos/1000)));
			}
		}
	}
	catch(e) {
		// ignore, perhaps not playing right now?	
	}	
}

function updateMetadata() {
	try {
		document.getElementById("md_cover").src = OMTK_P_getMetaData("COVERURL");
		setText(document.getElementById("md_title"), OMTK_P_getMetaData("TITLE"));

		var www = OMTK_P_getMetaData("WWW");
		if(www) {
			setTextWithLink(document.getElementById("md_artist"), OMTK_P_getMetaData("ARTIST"), www);
		}
		else {
			setText(document.getElementById("md_artist"), OMTK_P_getMetaData("ARTIST"));
		}

		setText(document.getElementById("md_album"), OMTK_P_getMetaData("ALBUM"));
		if(catalog) {
			setText(document.getElementById("md_trackNumber"), OMTK_P_getMetaData("TRACKNUMBER") + "/" + catalog[selectedAlbum].tracks.length);
		}
		
		var license = OMTK_P_getMetaData("LICENSE");
		if(license != null) {
			var al = document.getElementById("a_license");
			var il = document.getElementById("img_license");
			al.href = license;
			license = license.substring(36);
			license = license.substring(0, license.indexOf("/"));
			il.src = "/gfx/cc/" + license + ".png";	
		}
	}
	catch(e) {
		alert(e);	
	}
}

function playerCompleted() {
	selectedTrack++;
	if(selectedTrack >= catalog[selectedAlbum].tracks.length) {
		selectedTrack = 0;
		selectedAlbum++;
		if(selectedAlbum >= catalog.length) {
			selectedAlbum = 0;	
		}
		renderTracks();
	}
	updateAlbumAndTrackSelection();
	playSelected();
}

function setText(elem, text) {
	while(elem.hasChildNodes()) {
		elem.removeChild(elem.firstChild);	
	}
	elem.appendChild(document.createTextNode(text));
}

function setTextWithLink(elem, text, href) {
	while(elem.hasChildNodes()) {
		elem.removeChild(elem.firstChild);	
	}
	elem.appendChild(document.createTextNode(text + "\u00a0\u00a0"));
	
	var a = document.createElement("a");
	a.href = href;
	a.target = "_blank";
	var img = document.createElement("img");
	img.src = "/gfx/gion/16x16/apps/internet-web-browser.png";
	img.style.border = "0px";
	a.style.border = "0px";
	a.appendChild(img);
	elem.appendChild(a);	
}

function forceBackend(be) {
	var form = document.createElement("form");
	form.action = "";
	form.method = "post";
	form.style.visibility = "hidden";
	
	var input = document.createElement("input");
	input.name = "be";
	input.value = be;
	form.appendChild(input);
	
	input = document.createElement("input");
	input.name = "a";
	input.value = selectedAlbum;
	form.appendChild(input);
	
	input = document.createElement("input");
	input.name = "t";
	input.value = selectedTrack;
	form.appendChild(input);
	
	document.body.appendChild(form);
	form.submit();
}


function log(txt) {
	var log = document.getElementById("log");
	var div = document.createElement("div");
	div.appendChild(document.createTextNode(txt));
	log.appendChild(div);
}



