function makeplayer(pieceno, trackno) {
	if (trackno>0) filename = pieces[pieceno].filenames[trackno-1];
	else filename = pieces[pieceno].filenames;

	href = httpdir + filename;
	
	playertitle = $('title');
	pn = $('piecenum');
	tn = $('tracknum');
	playerbox = $('Layer1');
	if (!$('transport').visible()) {
//		$('player').show();
		$('transport').show();
	}
	
	if (pn.value!=pieceno || tn.value!=trackno) {
		if (pn.value!=-1) {
			oldlink = $('link['+pn.value+']['+tn.value+']');
			oldlink.innerHTML = writeLink(pn.value,tn.value,false);
		}
		pn.value = pieceno;
		tn.value = trackno;
		
		if (!filename) {
			playNext();
			return;
		}
		else {
//			$('cdtrack').innerHTML = $('tnum['+pieceno+']['+trackno+']').value;
			playertitle.innerHTML = '<B>' + pieces[pieceno].composer + '</B><BR><I>' + pieces[pieceno].title  + '</I>';
			if (trackno) playertitle.innerHTML += '<BLOCKQUOTE STYLE="margin-top:0px;">' + pieces[pieceno].movements[trackno-1] + '</BLOCKQUOTE>';
			else playertitle.innerHTML += '<BR><BR>';
	
			alink = $('link['+pieceno+']['+trackno+']');
			alink.innerHTML = writeLink(pieceno,trackno,true);

//			plugin.SetURL(href);
//			plugin.src = href;
			start_p = pieceno;
			start_t = trackno;
			if (typeof(plugin.SetURL)!="undefined") plugin.SetURL(href);
			if (plugin_id=="embid") plugin.src = href;
//			else plugin.setAttribute("src") = href;
		}
	}
}

var plugin='';
var plugin_id = '';

function myHandler(e) {
	if (!e) var e = window.event;
//	$('events').show();	
//	$('events').innerHTML += 'Event: ' + e.type + '<BR>\n';
	switch (e.type) {
		case 'qt_loadedmetadata':
			showInfo(e);
			break;
		
		case 'qt_play':
			showClock(e);
			break;
			
		case 'qt_begin':
			if (''==plugin) {
				plugin = $(e).findElement();
				plugin_id = plugin.id;
				startPage();
			}
			break;		
	}
}

function showClock(e) {
	interval = window.setInterval("setClock()",1000);
}

function setClock() {
	t = plugin.GetTime();
	d = plugin.GetDuration();
	scale = plugin.GetTimeScale();
	$('time').innerHTML = makeTimeString(t,scale);
	$('remaining').innerHTML = '-' + makeTimeString(d-t,scale);
	if (d && t==d) playNext();
}

function showInfo(e) {
	bytes = plugin.GetMovieSize();
	duration = makeTimeString(plugin.GetDuration(),plugin.GetTimeScale());	
	$('size').innerHTML = '<BR><B>Duration</B>: ' + duration + ' <B>File Size</B>: ' + Math.floor(10*bytes/(1024*1024))/10.0 +' MB';
}

function playNext() {
	pieceno = 1*$('piecenum').value;
	trackno = 1*$('tracknum').value;
	if (trackno==0 || trackno==pieces[pieceno].movements.length) {
		nextpiece = (pieceno+1)%pieces.length;
		nexttrack = (pieces[nextpiece].movements.length ? 1:0);
	} 
	else {
		nextpiece = pieceno;
		nexttrack = trackno+1;
	}
	if (pieces[nextpiece].movements.length) showobj($('movs['+nextpiece+']'));
	if (nextpiece!=pieceno && pieces[pieceno].movements.length) hideobj($('movs['+pieceno+']'));
	makeplayer(nextpiece,nexttrack);
}
function playPrev(e) {
	pieceno = 1*$('piecenum').value;
	trackno = 1*$('tracknum').value;
	if (trackno==0 || trackno==1) {
		prevpiece = (pieceno+pieces.length-1)%pieces.length;
		prevtrack = (pieces[prevpiece].movements.length ? pieces[prevpiece].movements.length:0);
	} 
	else {
		prevpiece = pieceno;
		prevtrack = trackno-1;
	}
	makeplayer(prevpiece,prevtrack);
	if (pieces[prevpiece].movements.length) showobj($('movs['+prevpiece+']'));
	if (prevpiece!=pieceno && pieces[pieceno].movements.length) hideobj($('movs['+pieceno+']'));
}

function hideobj(o) {
	o.style.display = "none";
}
function showobj(o) {
	o.style.display = "inline";
}
function objopen(o) {
	return o.style.display=="inline";
}
function toggleObj(o) {
	if (objopen(o)) hideobj(o);
	else showobj(o);
}
function toggleObjID(id) {
	obj = $(id);
	toggleObj(obj);
}
function sleep(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
		return;
	}
}
 
function makeTimeString(t,scale) {
	mytime = Math.round(t/scale);
	mins = Math.floor(mytime/60);
	secs = mytime % 60;
	if (secs<10) secs = '0'+secs;
	return mins+':'+secs;
}

function gettarget(e) {
	if (e.target) targ=e.target;
	else if (e.srcElement) targ=e.srcElement;
	if (targ.nodeType==3) targ=targ.parentNode;
	return targ;
}

function piece(composer,playertitle,movements,filenames) {
	this.composer = composer;
	this.title = playertitle;
	this.movements = movements;
	this.filenames = filenames;
}

function addinfo(s) {
	htmlarea += s;
}
function addinfoln(s) {
	htmlarea += s + "\n";
}

var start_p=false;
var start_t=false;
function writeHTML(query) {
	for (i=0; i<pieces.length; i++) {
		if (l=pieces[i].movements.length)
			for (j=0; j<l; j++) pieces[i].filenames[j] = escape(pieces[i].filenames[j]);
		else pieces[i].filenames = escape(pieces[i].filenames);			
	}
	htmlarea = $('area').innerHTML;
	if (head1) addinfoln('<h1>'+head1+'</h1>');
	if (head2) addinfoln('<h2>'+head2+'</h2>');
	tnum = 1;
	for (i=0; i<pieces.length; i++) {
		ntracks = (pieces[i].movements.length ? pieces[i].movements.length:1);
		addinfo('<DIV STYLE="margin-bottom:0px; margin-top:6px; font-size: 14px; line-height:16px;">');
//		addinfo('<SPAN STYLE="font-size:12px; font-weight:bold; color:red;">'+tnum);
//		if (ntracks>1) addinfo('-'+(tnum+ntracks-1));
//		addinfoln('</SPAN>');
		addinfoln('<SPAN STYLE="font-weight:bold; color:black;">'+pieces[i].composer+'</SPAN> ');

		if (pieces[i].movements.length) addMovementHREFs(i,tnum);
		else addPieceHREF(i,tnum);

		tnum += ntracks;
	}
	$('area').innerHTML = htmlarea;
	if (file = getFirstTrack()) {
		obj = $('objid');
		emb = $('embid');
		obj.observe('qt_begin',myHandler);
		obj.observe('qt_loadedmetadata',myHandler);
		obj.observe('qt_play',myHandler);
		
		if (obj.src) obj.src = httpdir+file;
		else obj.setAttribute("src",httpdir+file);
		if (typeof(obj.SetURL)!=="unknown") obj.SetURL(httpdir+file);
		if (emb!=null) {
			if (typeof(emb.SetURL)!=="unknown") emb.SetURL(httpdir+file);
			emb.src = httpdir+file;
		}
	}
}

function myAddListener(obj, evt, handler, captures)
{
	if ( document.addEventListener )
		obj.addEventListener(evt, handler, captures);
	else
		obj.attachEvent('on' + evt, handler); // IE requires this form
}

function alertprops(obj) {
	msg='';
	for (p in obj) msg += p+', ';
	alert(msg);
}
function getFirstTrack() {
	var file = false;
	if (start_p===false) {
		for (i=0; i<pieces.length&&!file; i++) {
			if (pieces[i].movements.length)
				for (j=0; j<pieces[i].movements.length&&!file; j++)
					file=pieces[i].filenames[j];
			else file=pieces[i].filenames;
		}
		start_p = i-1;
		start_t = j;
	}
	else if (!start_t) file = pieces[start_p].filenames;
	else file = pieces[start_p].filenames[start_t-1];
	return file;
}
function startPage() {
	if (start_t) showobj($('movs['+start_p+']'));
	makeplayer (start_p, start_t);
}
function addMovementHREFs(i,tnum) {
	p = pieces[i];
	addinfoln('<A HREF="#" onClick="toggleObjID(\'movs['+i+']\'); return false;"><I>'+p.title+'</I></A><BR>');
	addinfoln('<DIV ID="movs['+i+']" STYLE="display:none;"><BLOCKQUOTE STYLE="margin-top:0px; margin-bottom:0px;">');
	for (j=0; j<p.movements.length; j++) {
		addinfoln('<DIV STYLE="display:inline;" ID="link['+i+']['+(j+1)+']">' + writeLink(i,j+1,false) + '</DIV><BR>');
		addinfoln('<INPUT TYPE="HIDDEN" ID="tnum['+i+']['+(j+1)+']" VALUE="'+(tnum+j)+'">');
	}
	addinfoln('</BLOCKQUOTE></DIV></DIV>');
}
function addPieceHREF(i,tnum) {
	addinfoln('<DIV STYLE="display:inline;" ID="link['+i+'][0]">' + writeLink(i,0,false) + '</DIV>');
	addinfoln('<INPUT TYPE="HIDDEN" ID="tnum['+i+'][0]" VALUE="'+tnum+'">');
}
function writeLink(i,j,selected) {
	p = pieces[i];
	if (!selected)
		if (j>0)
			if (p.filenames[j-1])
				return '<A ID="a['+i+']['+j+']" HREF="' + httpdir + p.filenames[j-1] + '" onClick="makeplayer(' + i + ',' + j + '); return false;">' + p.movements[j-1] + '</A>';
			else
				return p.movements[j-1];
		else
			if (p.filenames)
				return '<A HREF="' + httpdir + p.filenames + '" onClick="makeplayer(' + i + ', 0); return false;"><I>' + p.title + '</I></A>';
			else
				return '<I>' + p.title + '</I>';
	else
		if (j>0)
			if (p.filenames[j-1])
				return '<SPAN STYLE="color:red;">&gt;&gt;'+p.movements[j-1]+'</SPAN>';
			else
				return false;
		else
			if (p.filenames)
				return '<SPAN STYLE="color:red;">&gt;&gt;<I>' + p.title + '</I></SPAN>';
			else
				return false;	
}

function toggleBigPic() {
	bpd = $('bigpicdiv');
	bp = $('bigpic');
	if (!bpd.visible()) bpd.show();
	else (bpd.hide());
}

//
// Global variables
//
var interval=false;
var pieces = new Array();
var htmlarea;
var head1;
var head2;
var httpdir = 'http://ongaku-records.com/clips/';
