// JavaScript Document
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;">' + createNumeral(trackno) + '. ' + pieces[pieceno].movements[trackno-1] + '</BLOCKQUOTE>';
			else playertitle.innerHTML += '<BR><BR>';
	
			alink = $('link['+pieceno+']['+trackno+']');
			alink.innerHTML = writeLink(pieceno,trackno,true);
			e = $('embid');
//			e.autoplay = 'TRUE';
			if (!isSafari()) e.src = href;
			else e.SetURL(href);
//			e.Play();

		}
	}
}
function myHandler(e) {
	if (!e) var e = window.event;
//	evts = $('events');
//	evts.innerHTML += 'Event: ' + e.type + '<BR>';
	switch (e.type) {
		case 'qt_loadedmetadata':
			showInfo(e);
			break;
		
		case 'qt_play':
			showClock(e);
			break;
		
	}
}

function isSafari() {
	n = navigator;
	nua = n.userAgent;	
	saf = ( nua.indexOf( 'Safari' ) != -1 );
	return saf;
}
function showClock(e) {
	interval = window.setInterval(setClock,1000);
}

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

function showInfo(e) {
	embed = $('embid');
	bytes = embed.GetMovieSize();
	duration = makeTimeString(embed.GetDuration(),embed.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) {
	time = Math.round(t/scale);
	mins = Math.floor(time/60);
	secs = time % 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";
}

function writeHTML() {
	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:0px; line-height:12px;"><SPAN STYLE="font-size:12px; font-weight:bold; color:red;">'+tnum);
		if (ntracks>1) addinfo('-'+(tnum+ntracks-1));
		addinfoln('</SPAN> <SPAN STYLE="font-size:11px; 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()) {
		$('player').innerHTML = QT_GenerateOBJECTText(httpdir+file,'250','14','',
							'EnableJavaScript','TRUE',
							'postdomevents','TRUE',
							'name','embid',
							'id','embid',
							'obj#style','behavior:url(#qt_event_source)');
							
		e = $('embid');
		Element.observe(e,'qt_loadedmetadata',myHandler);
		Element.observe(e,'qt_play',myHandler);
		startPage();
	}
}
function getFirstTrack() {
	var file = 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;
	}
	return file;
}
function startPage() {
	tn = (pieces[0].movements.length ? 1:0);
	if (tn) showobj($('movs[0]'));
	makeplayer (0, tn);
}
function addMovementHREFs(i,tnum) {
	p = pieces[i];
	addinfoln('<A HREF="#" onClick="toggleObjID(\'movs['+i+']\'); return false;" STYLE="font-size:11px;"><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; font-size:11px;" 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; font-size:11px;" 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/';