// scritp5.js
// this script is loaded by clip,html so it refers to variables in 7H using the "parent" prefix.
var strips = 1;		// number of strips
var TimePerMeasure;
var WidthPerMeasure = 0;
var Xstart = -1;	// the whole thing will likely be put into a centered table
var Xincr;
var i, m, k, b, p, kk, bb;	// image, measure counters
var Playing = false;
var Cnum, lastm = -1, lastk = -1;
var Clip, clipnum = -1;
var lastchord = 0;
var Xposition;
//var ScreenWidth;
var nPrelimImages = 1;		// number of images that get loaded before the table
var strip, paused, fudgefactor;
var t, dt, plt;
var romantext = false;
var ScreenHite, ScreenWidth=0;
var TableWidth = 448;	
var dotname;
Pauses = new Array(0,0,0,0,0,0,0,0);	// up to 8 pauses in a tune
PauseTime = new Array(0,0,0,0,0,0,0,0);

var TuneTime, halfseconds;
var Measures, Lmeasures;
var MPS, Lbarsperstrip;		// measures per strip
var Delay, timeoffset;		// millisec
var Ctitle;
var Track;
var PageIsLoaded = false;
 var literaltext = parent.literalmode;
//var literaltext = literalmode;
var keyindex = 0; //temp
var Gdemo, Key;
var Gtable, Btable, Dot, PlsWait, popup, Btnplay;
//var ClipReady = false;
var Size = 100;
var loadseconds;
var IEbrowser;

function ReopenClip(demo) {		// re-open Clip.html
 /*
  if (demo)
	window.open("DemoClip.html", "_self", "toolbar=no, directories=no, status=no, scrollbars=no, resizable=no, menubar=no");
  else
	window.open("Clip.html", "_self", "toolbar=no, directories=no, status=no, scrollbars=no, resizable=no, menubar=no");
*/
}

function PageLoaded() {
//alert("clip page loaded");
	PageIsLoaded = true;
//	Bplay = document.getElementById("PlayBtn");
//	if (Bplay) Bplay.style.visibility = "visible";
}

function SelectClip(num) {
	TrackData(num);
}

function GetKeyNumber(boxindex) {
//alert("boxindex " + boxindex);
//alert("parent.ikey " + parent.ikey);
	switch(boxindex) {
		case 0: return 0;	//C
		case 1: return 2;	//D
		case 2: return 4;	//E
		case 3: return 5;	//F
		case 4: return 7;	//G
		case 5: return 9;	//A
		case 6: return 11; //B
		case 7: return 10; //Bb
		case 8: return 3; //Eb
		case 9: return 1; //Db
		case 10: return 8; //Ab
		case 11: return 6; //Gb
		default: return 0;
	}
}

function GetIndex(k) {	// inverse of GetKeyNumber
//window.alert("GetIndex");
	switch(k) {
		case 0: return 0;
		case 1: return 9;
		case 2: return 1;
		case 3: return 8;
		case 4: return 2;
		case 5: return 3;
		case 6: return 11; 
		case 7: return 4; 
		case 8: return 10; 
		case 9: return 5; 
		case 10: return 7;
		case 11: return 6;
		default: return 0;
	}
//window.alert("end GetIndex");
}
/*
function PlayNotify(evt)
{
window.alert("Im playing");
}
*/
function SetSound() {		// called in the <head> section
clipnum = parent.Jnum;
if (clipnum < 0) clipnum = 9;
PageIsLoaded = false;
Tuneinit = false;
//return;	//TEMP
if (document.all) IEbrowser = true; else IEbrowser = false;

//if (IEbrowser) window.alert("IE"); else window.alert("non IE");
//window.alert("clipnum in SetSound " + clipnum);
   if (clipnum >= 0) 
   {
//		Track = "../Flash/mp3/T" + clipnum + ".mp3";
		Track = "wav2/T" + clipnum + ".adpcm.wav";
// doesn't go hidden
/*
		if (IEbrowser)			// internet explorer
		{	
			document.write("<embed src='");
			document.write(Track);
//			document.write("' name='cliptrack' hidden='true' autostart='false'>");
			document.write("' name='cliptrack' width='0' height='0' autostart='false' cache='true' enablejavascript='true'>");
			document.write("</embed>");
		}	
		else     // this works only in Netscape
		{ 

// Replace my start/stop buttons with the quicktime control, width about 100 or so  BUT THERE'S NO STOP BUTTON, ONLY PAUSE
//document.write("<object type='audio/x-wav' name='clipobject' width='200' height='16'>");		// windows media player
			//NOTE the classid doesnt seem to do anything
			// quicktime and Media Player code both work in Netscape and Firefox but its probably using quicktime in both cases
			// ...but IE 6 & 7 report "no audio track" and the control doesnt show
			document.write("<object classid='clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b'"); // Quicktime
			document.write("  type='audio/x-wav' width='300' height='16' id='cliptrack' >");	
//			document.write("<object classid='clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95' type='audio/x-wav' name='cliptrackob' >");	// Media Player
			document.write("<param name='hidden' value='true'>");	// normally true    the <embed> must also contain "hidden"
// seems to not matter		document.write("<param name='autostart' value='false'>");
//	document.write("<param name='onClick' value='PlayNotify()'>");
//? document.write("<param name='standby' value='clip is loading...'>");	// assumes this is inside an <object>
//document.write("<param name='src' value='");	// assumes this is inside an <object>
// put the following line in for IE and take it out below
//--		document.write("</object>");
// NOTE putting the <embed> inside the <object> tags fails in IE. - says "no audio track"
// NOTE width and height of the <embed> must match width and height of the <object>
			document.write("<embed src='");
			document.write(Track);
			document.write("' name='cliptrack' width='300' height='16' autostart='false' hidden cache='true' enablejavascript='true'>");
			document.write("</embed>");

			document.write("</object>");
		}
*/	
		// this way works in all browsers
		document.write("<embed src='");
		document.write(Track);
//		document.write("' name='cliptrack' hidden='true' autostart='false'>");
		document.write("' name='cliptrack' width='0' height='0' autostart='false' cache='true' enablejavascript='true'>");
		document.write("</embed>");
	}
//else window.status = "no clip number";

//	if (document.layers) document.captureEvents(Event.MOUSEDOWN);
//	if (document.layers) document.cliptrackob.captureEvents(Event.MOUSEDOWN);
//	if (document.layers) document.plugins[0].captureEvents(Event.MOUSEDOWN);
//	document.onmousedown = PlayNotify;
//	plugins[0].onmousedown = "PlayNotify";
//	document.plugins[0].onmousedown = "PlayNotify";
//	document.cliptrackob.onmousedown = "PlayNotify";
//	document.cliptrack.onmousedown = "PlayNotify";
}

function InitTune(demo) {		// (not called by the Play button)
//demo=false;
// var tablerows, Bplay;
//window.alert("clipnum in InitTune " + clipnum);
/*
var dotobj;
	dotobj = document.getElementById("dot0");
//	dotobj =  document.all("dot0").style;
//	dotobj =  document.layers["dot0"];
if (dotobj) dotobj.left = 222;
else window.alert("no dotob");
*/
//return;
  popup = null;
  Gdemo = demo;			// not used now
  if (clipnum >= 0) {
	ScreenHite = window.screen.height;
	ScreenWidth = window.screen.width;
//window.alert(navigator.appName);	
//window.alert(navigator.userAgent);	
//window.alert("ScreenWidth "+ScreenWidth);	
	SelectClip(clipnum);		// sets MPS, Measures, delay, Key
//window.alert("return from SelectClip");
//	parent.InitialKey = Key;
//	loadseconds = Size/56;  // KB/KB
	loadseconds = Size/3.5;  //  (for dialup)
//	loadseconds = Size/40;  //  guess (high speed)     also set timer interval to 10 ms instead of 500 and open popup at the bottom of InitTune()
// window.alert("InitialKey " + InitialKey);
//window.alert("Key " + Key);
	if (parent.newclip) parent.keyboxindex = GetIndex(Key);		// don't reset it on a Stop
//	if (newclip) keyboxindex = GetIndex(Key);		// don't reset it on a Stop
//window.alert("after GetIndex");
	newclip = false;
/*	
	if (!demo) {
		document.write("<h2 align=center>");
//window.alert("write Ctitle");
		document.write(Ctitle);
		document.write("</h2>");
	}
*/
//window.alert("TimePerMeasure");
//window.alert("second MPS in InitTune " + MPS);
	TimePerMeasure = TuneTime/Measures;
	if (MPS > 0) strips = 1 + Math.floor( (Measures-1)/MPS ) ;
	if (strips > 4) strips = 4;
//window.alert("strips " + strips);
   Xstart = 0;					// with relative positioning
	kk = 0;  bb = 0;
/*
	for (i = 0; i < 64; i++)
	{
		parent.CellColors[i] = "#EE88EE";
	}
*/	
/*
document.write("<div ID='dotx' style='position:relative;width:10;height:10;'>"); 
document.write("<img src='ballcursor6.gif' alt='' border='0' width='6' height='6' ></div>");
dotob = document.getElementById("dotx");
if (dotob) dotob.style.left = 222;
else window.alert("no dotob");
*/
//return;

	if (demo) {
//window.alert("demo");
//		TableWidth = 272; 
//		MakeTable12low(strips, true);		// clip # 163
		TableWidth = 336;		// should match the width in the style spec.  iframe width in index.html needs to be significanlty larger than the table width
		CreateStrips(strips, 0);
	}
	else if (ScreenHite < 660) {
//window.alert("low res");	
	 TableWidth = 352;			// should match the width in the style spec for .smalltable
	 CreateStrips(strips, 1);
//	 if (MPS == 8) MakeTable8low(strips);
// 	 else if (MPS == 12) MakeTable12low(strips, demo);
//	 else if (MPS == 16) MakeTable16low(strips);
	}
	else {
	 TableWidth = 448;			// should match the width in the style spec for .bigtable
	 CreateStrips(strips, 2);
//alert("MPS " + MPS);	 
//	 if (MPS == 8) MakeTable8(strips);
// 	 else if (MPS == 12) MakeTable12(strips);
//	 else if (MPS == 16) MakeTable16(strips);
	}
//--	if (parent.pagenum >= 3) Buttons();

//-	Bplay = document.getElementById("PlayBtn");
/* the button has not been placed yet.
	Bplay = document.getElementById("PlayBtn");
	if (Bplay) Bplay.style.visibility = "hidden";
*/
//else alert("no Bplay");
//window.alert("strips " + strips);
	if (MPS > 0) WidthPerMeasure = TableWidth/MPS;
//?	Xincr = (1.55*Measures*WidthPerMeasure*20)/TuneTime;	// distance corresponding to 20 millisec
	Xincr = (Measures*WidthPerMeasure*20)/TuneTime;	// distance corresponding to 20 millisec
//if (IEbrowser) Xincr *= 1.15;
if (IEbrowser) Xincr = (11*Xincr)/7;
// it's set in SetChordText()	romantext = parent.ChordTxtMode;		// 0 => ordinary  1 => roman
//	romantext = ChordTxtMode;		// 0 => ordinary  1 => roman

	kk = 0;  bb = 0;
//window.alert("InitGraphics");
	InitGraphics();
//window.alert("past InitGraphics");

	paused = false;
	// wait for PageIsLoaded, for 30 seconds
	// disable Play until PageIsLoaded.
	halfseconds = 0;
	plt = setInterval("CheckLoadFlag();", 500);		// half sec intervals    //was 500
// (!Gdemo) popup = window.open("wait.html", "_blank", "width=250, height=100, left=550, top=330");//TEMP
//PageIsLoaded=true;
	document.write("</font>");
  }
}
/*
function StartTimer() {
	plt = setInterval("CheckLoadFlag();", 500);		// half sec intervals
}
*/
function CreateStrips(numrows, tsize)
{
var bars;
//str = "'></td><td class='cell' ID='R" + m + "' bgcolor='";
//window.alert("CreateStrips " + numrows);
	Cnum = 1;
	bars = Measures;
	if (bars > 64) bars = 64;
document.write("<font size=4>");	// works here...
	if (IEbrowser)
	{
		if (tsize == 0)
			document.write("<table class='demotable' id='grtable' border='0' cellspacing=0 cellpadding=0 align=left rules='cols'> ");
		else if (tsize == 1)
			document.write("<table class='smalltable' id='grtable' border='0' cellspacing=0 cellpadding=0 align=left rules='cols'> ");
		else
			document.write("<table class='bigtable' id='grtable' border='0' cellspacing=0 cellpadding=0 align=left rules='cols'> ");
	}
	else
	{
		if (tsize == 0)
			document.write("<table class='demotable' id='grtable' border='0' cellspacing=0 cellpadding=0 align=left> ");
		else if (tsize == 1)
			document.write("<table class='smalltable' id='grtable' border='0' cellspacing=0 cellpadding=0 align=left> ");
		else
			document.write("<table class='bigtable' id='grtable' border='0' cellspacing=0 cellpadding=0 align=left> ");
	}
	// first row is for the clip name
//alert("MPS " + MPS);	 
	document.write("<tr><td colspan=");		// colspan=MPS
	document.write(MPS);
	document.write(" align='center'><h3>");
	document.write(Ctitle);
	document.write("</h3></td></tr>");
	
	bb = 0; kk = 0;
	for (r = 0; r < numrows; r++)
	{
		DrawStrip(r);
	}
	document.write("</table><br><br>");

	document.getElementById("grtable").style.position = "absolute";
//----	document.getElementById("grtable").style.left = ScreenWidth/2;
	document.getElementById("grtable").style.left = "50px";
//	document.getElementById("grtable").style.left = 0;
	document.getElementById("grtable").style.top = "0px";				// relative to top of the iframe
//document.getElementById("R2").style.border = 1;
//document.getElementById("R2").style.borderColor = 0;
}

function DrawStrip(row)
{	
   var Ccolor, mChange;
	str0 = "<td class='firstcell' ID='R";
	str1 = "'></td><td class='cell' ID='R";
	str2 = "' bgcolor='";
	strend = "'></td>";
//	Cnum = 1;	// chord number
	Ccolor = ChordColor(Cnum);
//window.alert("DrawStrip "+row);
//document.write("<img src='ballcursor6.gif' alt='' border='0' id='dot0'>");
	// this row is the space between strips (or above the first strip) and it holds the dot cursor
	if (row == 0)
		document.write("<tr height = 12><td colspan=8 valign='bottom'>"); 	// this is the blank space between strips
	else
		document.write("<tr height = 30><td colspan=8 valign='bottom'>"); 	// this is the blank space between strips
	// dot cursor
	document.write("<div ID='dot");
	document.write(row);	// 0 to 3
	document.write("' style='position:relative;width:6;height:6;'>"); 
//	<img src='ballcursor6.gif' alt='' border='0'></div>");
	document.write("<img src='ballcursor6.gif' alt='' border='0' width='6' height='6' ></div>");
	document.write("</td></tr><tr height = 3></tr>");	// space between the dot and the strip

	document.write("<tr name='strip' height=36>");
	for (m = 0; m < MPS; m++)						// make 1 strip 
	{
//window.alert( "m, kk  " + m +"  "+ kk);
		mChange = chordmeasures[kk] - 1;
		if (bb == mChange) Cnum = chordIDs[kk]; 	// persists until the next change
		if ( ((m % MPS) == 0) 						// MPS = 8, 12 or 16
				|| ((m > 0) && (bb == mChange)) )  
		{
			Ccolor = ChordColor(Cnum);
		}	// else Ccolor stays the same

		if ((m % MPS) == 0) 
			document.write(str0 + (row*MPS) + str2 + Ccolor);			// create the td tag (first cell in row)
		else 
			document.write(str1 + ((row*MPS)+m) + str2 + Ccolor);		// create the td tag (all others)

		if ((m % MPS) == (MPS-1)) document.write(strend);				//finish the td tag (last cell in row)
//window.alert(str1 + ((row*MPS)+m) + str2 + Ccolor);
		if (bb == mChange) kk++;
		bb++;	// measure counter that doesnt go back to zero on a page increment
	}			// m loop
	document.write("</tr>");
}

function InitGraphics() {				// write text in the cells of the strips
//window.alert("InitGraphics/romantext " + romantext);
   var temp, tcell, mChange, bars, flatkey;
   var edot0, edot1, edot2, edot3;
//   var newstrip;
//   if (m == 0 || m == 8 || m == 16 || m == 32) newstrip = true; else newstrip = false;
	Cnum = 1;
	keyindex = GetKeyNumber(parent.keyboxindex);
//	keyindex = GetKeyNumber(.keyboxindex);
	if (parent.keyboxindex >= 7 || parent.keyboxindex == 3) flatkey = true; else flatkey = false;  // F is a flat key
	bars = Measures;
	if (bars > 64) bars = 64;
//window.alert("bars " + bars);	
////	document.write("<font size=4>");	// KILLS THE STRIP TABLE!!
//window.alert("m loop " + bars);	
  for (m = 0; m < bars; m++) {
//window.alert("m, k  " + m +"  "+ kk);
	  mChange = chordmeasures[kk] - 1;
	  if (bb == mChange) Cnum = chordIDs[kk]; 	// persists until the next change
//window.alert("m,kk,Cnum " + m +" "+ kk +" "+ Cnum);
//----------------------      Ccolor = ChordColor(Cnum);
	  tcell = document.getElementById("R"+m);	//CAN ONLY GET IT ONCE?   ok more than once if the    document.write("<font size=4>");    is out above
// if (tcell) window.alert("tcell ok"); else window.alert("tcell not ok");
//      tcell.style.backgroundColor = Ccolor;		// fails in Firefox
//      tcell.style.backgroundImage = "cell1.gif";	// WORKS
//tcell.style.fontFamily = "arial, Lucida Sans, Lucida Sans Unicode";
//tcell.style.fontSize = "32"; 

if (tcell) {
      if ( ((m % MPS) == 0) 
				|| ((m > 0) && (bb == mChange)) )  {
		  tcell.style.fontFamily = "arial, Lucida Sans, Lucida Sans Unicode";
//fails		  tcell.style.fontSize = "12"; //was 26
//fails here	document.write("</font><font size=4>");
		  tcell.style.fontWeight = "bold";
		  tcell.style.color = "white";
		  tcell.style.textIndent = "6px";
		if ( (WidthPerMeasure < 30) || (romantext && WidthPerMeasure < 55 || (Cnum == 13)) ) {
			tcell.style.fontFamily = "Arial Narrow, Lucida sans unicode";
//			tcell.style.fontSize = "3"; // 22
//	document.write("</font><font size=3>");
			tcell.style.textIndent = "4px";
		}
		else if (!romantext && WidthPerMeasure < 40) tcell.style.fontSize = "20";
		if ( (WidthPerMeasure < 30) && Cnum >= 8 ) {
//			tcell.style.fontSize = "3"; //18
//	document.write("</font><font size=2>");
			tcell.style.textIndent = "1px";
		}

		if (!romantext && !literaltext && Cnum < 8) tcell.style.textDecoration = "underline";
		else  tcell.style.textDecoration = "none";
//tcell.style.cssText="bill";
//tcell.style.text.value="P";		
//document.write("</font><font size=5>");
		if (literaltext) tcell.innerHTML = LiteralChordText(Cnum, keyindex, flatkey);		// kills the background image!
		else tcell.innerHTML = TuneChordText(Cnum, romantext);
//window.status = tcell.innerHTML;		
//window.alert(tcell.innerHTML);		
      }			// if a new chord is here
// TO HERE
	  else {	// if no new chord here
//-		tcell.style.color = Ccolor;		// make the '8' invisible
	  }  
 }		// if (tcell)	

	  if (bb == mChange) kk++;
	  bb++;	// measure counter that doesnt go back to zero on a page increment
   }			// m loop
//window.alert("past m loop ");
   
//	document.write("</font>");

   if (bars < strips*MPS) {		// if there are empty cells on the last row, hide them
	   for (m = bars; m < strips*MPS; m++) {
		  tcell = document.getElementById("R"+m);
		  if (tcell)
		  {
			tcell.style.borderWidth = "0";
			tcell.style.color = "#eaeae7";		// make the '8' invisible
			tcell.style.backgroundColor = "#eaeae7";
		  }
	   }
   }  

//window.alert("hide dot elements");
   edot0 = document.getElementById("dot0");
		if (edot0) 
		{
		edot0.style.left = Xstart + "px";
		edot0.style.visibility = "visible";
		}
//else window.alert("no edot0");
   if (strips > 1) {
		edot1 = document.getElementById("dot1");
		if (edot1)
		{
			edot1.style.left = Xstart + "px";
			edot1.style.visibility = "hidden";
		}
   }
   if (strips > 2) {
		edot2 = document.getElementById("dot2");
		if (edot2)
		{
			edot2.style.left = Xstart + "px";
			edot2.style.visibility = "hidden";
		}
   }
   if (strips > 3) {
		edot3 = document.getElementById("dot3");
		if (edot3)
		{
			edot3.style.left = Xstart + "px";
			edot3.style.visibility = "hidden";
		}
	}
	
}

function MeasureHandler() {				// turns the chord number black at the right time
   var mChange;
	if (m >= Measures) { 
// if (lasti > 0) document.images[lasti].src = lastrect;		// restore normal to the last hilited one 
		Stop(); 
		return; 
	}
	if (m == 64 && Measures > 64) {		// new page
		Measures = Measures - 64;
		InitGraphics();
        Xposition = 0;
		m = 0; strip = 0;
	}
/* Pause Button  -   doesn't work cleanly
   if (paused) {
      document.embeds[0].pause();
      Playing = false;
      return;
   }
*/   
   if (Playing) {
//window.status = 'm, k: ' + m + '   ' + k;
	  if (m < Measures) {
		if (m > 0 && b == Pauses[p] && !paused) {
//window.status = "pause at " + m + " " + p;
		   clearInterval(dt);
		   setTimeout('Continue();', PauseTime[p]);	// ms	// example: J30.html
		   p++;
		   return;
		}

		paused = false;
//window.status = 'm,k ' + m + '  ' + i;
	      t = setTimeout('MeasureHandler();', TimePerMeasure);	// ms
	  }
//window.alert("m,k, mChange " + m +" "+ k +" "+ (chordmeasures[k]-1));
	  mChange = chordmeasures[k] - 1;
	  if (((m % MPS) == 0) || (b == mChange)) {

	     if (lastm >= 0 && lastchord > 0) 
			 document.getElementById("R"+lastm).style.color = 'white';	// restore it to white

	     document.getElementById("R"+m).style.color = 'black';
	     lastm = m;
	     lastchord = chordIDs[k];
	     if (b == mChange) k++;
	  }				// if there was a chord change
      m++; b++;//i++; 
      if (m > 1) {
         if ((m % MPS) == 0) i++;	// skip over the dot
         if ((m % MPS) == 1)  { 	// go to next strip
	        Xposition = 0;
 	        strip++;
			if (strip == 1) {
		        document.getElementById("dot0").style.visibility = 'hidden';
				document.getElementById("dot1").style.visibility = 'visible';
			}
			if (strip == 2) {
				document.getElementById("dot1").style.visibility = 'hidden';
				document.getElementById("dot2").style.visibility = 'visible';
			}
			if (strip == 3) {
				document.getElementById("dot2").style.visibility = 'hidden';
				document.getElementById("dot3").style.visibility = 'visible';
			}
	     }
      }
   }
}

function Continue() {
    paused = true;
	dt = window.setInterval("MoveDot();", 20);	// 20 ms intervals
	MeasureHandler();
}

function MoveDot() {
//window.status = "MoveDot";
//window.alert(Xposition);
//window.alert("MoveDot 1");
var x;
	if (Playing) 
	{
//window.alert("Move  Dot");
      Xposition += Xincr; 
	  x = Xstart + Xposition;
//build = parent.getElementById("cwindow");	
	  dotname =  "dot" + strip;
/*	
      if (strip == 0) document.getElementById("dot0").style.left = x + "px";
      else if (strip == 1) document.getElementById("dot1").style.left = x + "px";
      else if (strip == 2) document.getElementById("dot2").style.left = x + "px";
      else if (strip == 3) document.getElementById("dot3").style.left = x + "px";
*/	
      if (document.getElementById)
		document.getElementById(dotname).style.left = x + "px";
   }
}

function Play() {
//window.alert("Play");
var track;
var dleft,dtop;
	if (PageIsLoaded && !Playing) 
//	if (!Playing) 
	{
		if (!paused) 
		{
			m = 0; b = 0;//i = nPrelimImages;	// i is no longer used
			k = 0; p = 0;
			lastk = -1;
			strip = 0;
			Xposition = 0;
		}
//window.alert("Now Playing");
		Playing = true;
		paused = false;
//window.setInterval("MoveDot();", 20);	// call MoveDot() at 20 ms intervals
		window.setTimeout("StartGraphics();", Delay);	// graphics delay (dot etc) should match the sound startup delay
/*   
   if (paused) {
      document.embeds[0].resume();	// doesnt resume where it stopped
      MoveDot();
      MeasureHandler();
   }
   else 
*/  
// either one of these works-
//		document.embeds[0].play();
		if (!document.cliptrack) alert("no audio track");
		else
		{
//window.alert("playing");
				document.cliptrack.Play();		// Netscape requires 'Play' not 'play'
//?		cliptrack.Play();
//				track = document.getElementByID("cliptrack");
//				track.play();
//				track.start();
//document.embeds[0].play();	// fails also
//document.plugins[0].play();	// fails also
		}
	}
}

function InitButtons() {
//	Gtable = document.getElementById("grtable");
	Btable = document.getElementById("buttontable");
/*
	document.getElementById("buttontable").style.left = ScreenWidth/2;
//	document.getElementById("buttontable").style.left = window.screen.width/2;
	document.getElementById("buttontable").style.top = 110 + strips*46 + 70;		// below the strip table    46 = row height + row space height
*/	
//----	Btable.style.left = ScreenWidth/2;
	Btable.style.left = "50px";
	Btable.style.top = (strips*72 + 45)  + "px";		// below the strip table    46 = row height + row space height

SetChordText(romantext);	//set the button states
	
//	Dot = document.getElementById("Dot1");
//	PlsWait = document.getElementById("pleasewait");
	Btnplay = document.getElementById("PlayBtn");
	if (Btnplay) Btnplay.style.visibility = "hidden";
/*
	if (!Gdemo) {
//==		if (Gtable) Gtable.style.visibility = "hidden";
//==		if (Btable) Btable.style.visibility = "hidden";
//==		if (Dot) Dot.style.visibility = "hidden";
//if (PlsWait) PlsWait.style.visibility = "visible";
	}
*/
}

function CheckLoadFlag() {
//	Btnplay = document.getElementById("PlayBtn");
//already called	Gtable = document.getElementById("grtable");
//already called	Btable = document.getElementById("buttontable");
	halfseconds++;
//window.status = "halfseconds " + halfseconds;
	if (popup && halfseconds > 10 && loadseconds > 0 && popup.MoveBar) 
	{
//window.status = 0.2*halfseconds/loadseconds;
		popup.MoveBar(0.2*halfseconds/loadseconds);
	}
//window.status = loadseconds;
//if (loadseconds > 0) popup.MoveBar(1.0);

//-	if (PageIsLoaded && document.cliptrack) {
	if (PageIsLoaded) {
//		if (document.cliptrack.IsReady ) {		// NEVER HAPPENS
		clearInterval(plt);
		if (Btnplay) Btnplay.style.visibility = "visible";
//==		if (Gtable)	Gtable.style.visibility = "visible";
//==		if (Btable) Btable.style.visibility = "visible";
//		if (Dot) Dot.style.visibility = "visible";
// close the popup
//		if (popup) popup.hide();		// if opened with createPopup()   which requires IE 5
		if (popup) popup.close();
		popup = null;
		// play the demo example from the tutorials page
//		if (Gdemo && parent.playdemo && parent.loops == 1) Play();	// keep it from restarting		// Gdemo not really needed here.
		if (parent.playdemo && parent.loops == 1) Play();	// keep it from restarting
//		if (playdemo && loops == 1) Play();	// keep it from restarting
//		}
	}
/*TEMPPPPPPPPPPPPPPPPPPPPPPPP	
	else if (halfseconds == 12) {		// wait 6 seconds before opening it
	//put up a popup window or a progress bar here (with a Close button or close gadget)
	if (!Gdemo) popup = window.open("wait.html", "_blank", "width=250, height=100, left=550, top=330");	// min height is 100
	}
*/	
}

function StartGraphics() {
//window.alert("StartGraphics");
   dt = window.setInterval("MoveDot();", 20);	// call MoveDot() at 20 ms intervals
   MeasureHandler();
}
   
function Stop() {
//window.alert('Stop');
//var sound;
	var Bstop;
   if (Playing) {
	clearTimeout(t);	// needed in case there is a quick restart
	clearInterval(dt);
	document.cliptrack.Stop();	// calling this without a prior .play() sometimes causes an error
	document.cliptrack.Rewind();
//	document.cliptrack.stop();	// calling this without a prior .play() sometimes causes an error
// All of these things fail to rewind it:
//	document.embeds[0].pause();	// calling this without a prior .play() sometimes causes an error
//	document.embeds[0].stop();	// calling this without a prior .play() sometimes causes an error
//	document.embeds[0].stop();	// calling this without a prior .play() sometimes causes an error
//	document.embeds[0].rewind();
//SetSound();			// this causes problems in the InitGraphics call below.
//PageIsLoaded = true;
//sound = document.cliptrack;
//sound.Stop();
//sound.Rewind();
//sound.Load();
	Playing = false;
	paused = false;
//self.Refresh();
//	if (redraw) InitGraphics();	// restore starting appearance
//	else 
//	if (redraw) {
//		Bstop = document.getElementById("StopBtn");
//		if (Bstop) Bstop.click();	// simulate a click of StopBtn
	ReopenClip(Gdemo);

// put the last dot moved back to the beginning-
    if (document.getElementById)
	{	
		document.getElementById(dotname).style.visibility = "hidden";
		edot0 = document.getElementById("dot0");
		if (edot0) 
		{
		edot0.style.left = Xstart + "px";
		edot0.style.visibility = "visible";
		}
	}
//alert("pause");
//SetSound();			// erases everything if called here.
//PageIsLoaded = true;
   }
}

function Pause() {
//   Playing = false;
   paused = true;
}
/*
function NewClip6()
{
//window.alert("NewClip6");
Jnum=0;
clipnum = 0;
//SetSound();
window.alert("NewClip6 2");
//InitTune();
}
*/
function SetChordText(mode) {	// called in the parent after drawing the buttons
//window.alert("SetChordText");
//	var Scrwid = window.screen.width;
/*
	document.getElementById("buttontable").style.left = ScreenWidth/2;
//	document.getElementById("buttontable").style.left = window.screen.width/2;
	document.getElementById("buttontable").style.top = 110 + strips*46 + 70;		// below the strip table    46 = row height + row space height
*/
	romantext = mode;
	parent.Promantext = mode;
	ChordTxtMode = mode;
/*   moved to SetChordTextInParent  in examples2.html
	if (document.getElementById)
	{
		parent.document.getElementById("chordtext0").checked = !mode;
		parent.document.getElementById("chordtext1").checked = mode;
	}
	// redraw clist.html with the correct font (regular or Roman)
	if (mode) {
	window.open("Clist4roman.html", "clinks", "toolbar=no, directories=no, status=no, resizable=no, menubar=no");
	}
	else {
	window.open("Clist4.html", "clinks", "toolbar=no, directories=no, status=no, resizable=no, menubar=no");
	}
*/	
	SetMode(mode);	//added 9-13-07   sets the button states
}

function LiteralChordText(chord, key, flatkey) {
	var major, dim, aug, sev, sixth, flat, sharp, root, offset, index, flatkey;
	var s = "";
	
	major = true; dim = false; aug = false; sev = false; sixth = false; flat = false; sharp = false;
	if (chord > 7)
	{
		switch (chord)
		{
			case 8:  root = 2;  	break;
			case 9:  root = 3;  	break;
			case 10: root = 6;  	break;
			case 11: root = 7;  	break;
			case 12: root = 1; sev = true; 	break;
			case 13: root = 7; flat = true;	break;
			case 14: root = 5; sev = true; 	break;
			case 15: root = 2; sev = true; 	break;
			case 16: root = 6;  	break;
			case 17: root = 1; sev = true; 	break;
			case 18: root = 6; sev = true; 	break;
			case 19: root = 6; flat = true; 	break;
			case 20: root = 4; sharp = true; dim = true; 	break;
			case 21: root = 6; sev = true; 	break;
			case 22: root = 2; sev = true; 	break;
			case 23: root = 1; sixth = true; 	break;
			case 24: root = 6;  	break;
			case 25: root = 5; sixth = true; 	break;
			case 26: root = 4; major = false; 	break;
			case 27: root = 1; dim = true; 	break;
			case 28: root = 5; dim = true; 	break;
			case 29: root = 3;  	break;
			case 30: root = 1; major = false; 	break;
			case 31: root = 1; aug = true; 	break;
			case 32: root = 5; aug = true; 	break;
			case 33: root = 4; aug = true; 	break;
			default: root = 5; break;
		}
	}		// if (chord > 7)
	
	else
	{
		root = chord;
		if (chord == 7) dim = true;
		else if (chord == 1 || chord == 4 || chord == 5)	major = true;
		else major = false;
	}
//alert("root " + root);
	switch (root)	// convert to half-tone (base 12) system
	{
		case 1: offset = 0; break;
		case 2: offset = 2; break;
		case 3: offset = 4; break;
		case 4: offset = 5; break;
		case 5: offset = 7; break;
		case 6: offset = 9; break;
		case 7: offset = 11; break;
		default: offset = 0;
	}
//alert("key " + key);
	index = offset + key;				// key = 0 for C, 2 for D etc.
//index = root;
	if (index >= 12) index = index % 12;
//alert("index " + index);
	if (major)
	{
		if (flatkey)
		{
			switch(index)
			{
				case 0: s = "C"; break;
				case 1: s = "D"; flat = true; break;
				case 2: s = "D"; break;
				case 3: s = "E"; flat = true; break;
				case 4: s = "E"; break;
				case 5: s = "F"; break;
				case 6: s = "G"; flat = true; break;
				case 7: s = "G"; break;
				case 8: s = "A"; flat = true; break;
				case 9: s = "A"; break;
				case 10: s = "B"; flat = true;break;
				case 11: s = "B"; break;
			}
		}
		else
		{		// sharp key
			switch(index)
			{
				case 0: s = "C"; break;
				case 1: s = "C"; sharp = true; break;
				case 2: s = "D"; break;
				case 3: s = "D"; sharp = true; break;
				case 4: s = "E"; break;
				case 5: s = "F"; break;
				case 6: s = "F"; sharp = true; break;
				case 7: s = "G"; break;
				case 8: s = "G"; sharp = true; break;
				case 9: s = "A"; break;
				case 10: s = "A"; sharp = true;break;
				case 11: s = "B"; break;
			}
		}
	}
	else						// minor
	{
		if (flatkey)
		{
			switch(index)
			{
				case 0: s = "c"; break;
				case 1: s = "d"; flat = true; break;
				case 2: s = "d"; break;
				case 3: s = "e"; flat = true; break;
				case 4: s = "e"; break;
				case 5: s = "f"; break;
				case 6: s = "g"; flat = true; break;
				case 7: s = "g"; break;
				case 8: s = "a"; flat = true; break;
				case 9: s = "a"; break;
				case 10: s = "b"; flat = true;break;
				case 11: s = "b"; break;
			}
		}
		else
		{		// sharp key
			switch(index)
			{
				case 0: s = "c"; break;
				case 1: s = "c"; sharp = true; break;
				case 2: s = "d"; break;
				case 3: s = "d"; sharp = true; break;
				case 4: s = "e"; break;
				case 5: s = "f"; break;
				case 6: s = "f"; sharp = true; break;
				case 7: s = "g"; break;
				case 8: s = "g"; sharp = true; break;
				case 9: s = "a"; break;
				case 10: s = "a"; sharp = true;break;
				case 11: s = "b"; break;
			}
		}
	}
//alert("s " + s);	
	if (flat) 
	{
		if (parent.useletterb) s = s + "b";
		else s = s + "&#9837";
	}
	else if (sharp) s = s + "#";
	if (sev) s = s + "<sup>7</sup>";
	else if (sixth) s = s + "<sup>6</sup>";
	if (dim) s = s + "&#176";
	else if (aug) s = s + "+";
	return s;
}
  
function TuneChordText(chord, roman) 
{
	if (roman) 
	{
		switch(chord) 
		{
			case 1: return "I"; break;
			case 2: return "ii"; break;
			case 3: return "iii"; break;
			case 4: return "IV"; break;
			case 5: return "V"; break;
			case 6: return "vi"; break;
			case 7: return "vii"; break;
			case 8: return "V/V"; break;
			case 9: return "V/vi"; break;
			case 10: return "V/ii"; break;
			case 11: return "V/iii"; break;
			case 12: return "V<sup><font size=4>7</font></sup>/4"; break;
			case 13: return "IV/IV"; break;
			case 14: return "V<sup><font size=4>7</font></sup>"; break;
			case 15: return "V<sup><font size=4>7</font></sup>/V"; break;
			case 16: return "<font size=3>V/V/V</font>"; break;
			case 17: return "I<sup><font size=4>7</font></sup>"; break;
			case 18: return "vi<sup><font size=4>7</font></sup>"; break;
			case 19: return "bvi"; break;
			case 20: return "vii/V"; break;
			case 21: return "ii<sup><font size=4>7</font></sup>/V"; break;
			case 22: return "ii<sup><font size=4>7</font></sup>"; break;
			case 23: return "I<sup><font size=4>6</font></sup>"; break;
			case 24: return "<font size=3>V<sup><font size=2>7</font></sup>/V/V"; break;
			case 25: return "V<sup><font size=4>6</font></sup>"; break;
			case 26: return "iv"; break;
			case 27: return "I&#176"; break;
			case 28: return "V&#176"; break;
			case 29: return "III"; break;
			case 30: return "i"; break;			// 1m
			case 31: return "I+"; break;			// 1+
			case 32: return "V+"; break;			// 5+
			case 33: return "IV+"; break;			// 4+
			default: return ""; break;
		}
	}
	else 
	{		
		switch(chord) 
		{
			case 1: return "1"; break;
			case 2: return "2"; break;
			case 3: return "3"; break;
			case 4: return "4"; break;
			case 5: return "5"; break;
			case 6: return "6"; break;
			case 7: return "7"; break;
			case 8: return "<u>5</u>/<u>5</u>"; break;
			case 9: return "<u>5</u>/<u>6</u>"; break;
			case 10: return "<u>5</u>/<u>2</u>"; break;
			case 11: return "<u>5</u>/<u>3</u>"; break;
			case 12: return "<u>5</u><sup><font size=4>7</font></sup>/<u>4</u>"; break;
			case 13: return "<u>4</u>/<u>4</u>"; break;
			case 14: return "<u>5</u><sup><font size=4>7</font></sup>"; break;
			case 15: return "<u>5</u><sup><font size=4>7</font></sup>/<u>5</u>"; break;
			case 16: return "<font size=3><u>5</u>/<u>5</u>/<u>5</u></font>"; break;		// 5/5/5
			case 17: return "<u>1</u><sup><font size=4>7</font></sup>"; break;
			case 18: return "<u>6</u><sup><font size=4>7</font></sup>"; break;
			case 19: return "<u>b6</u>"; break;
			case 20: return "<u>7</u>/<u>5</u>"; break;
			case 21: return "<u>2</u><sup><font size=4>7</font></sup>/<u>5</u>"; break;
			case 22: return "<u>2</u><sup><font size=4>7</font></sup>"; break;
			case 23: return "<u>1</u><sup><font size=4>6</font></sup>"; break;
			case 24: return "<font size=3><u>5</u><sup><font size=2>7</font></sup>/<u>5</u>/<u>5</u>"; break;  // 5^7 / 5
			case 25: return "<u>5</u><sup><font size=4>6</font></sup>"; break;	// 5^6
			case 26: return "<u>4m</u>"; break;			// 4m
			case 27: return "<u>1</u>&#176"; break;		// 1 dim
			case 28: return "<u>5</u>&#176"; break;		// 5 dim
			case 29: return "<u>3M</u>"; break;			// 3M
			case 30: return "<u>1m</u>"; break;			// 1m
			case 31: return "<u>1</u>+"; break;			// 1+
			case 32: return "<u>5</u>+"; break;			// 5+
			case 33: return "<u>4</u>+"; break;			// 4+
			default: return ""; break;
		}
	}		
}

function ChordColor(chord) {
//window.alert("ChordColor chord " + chord);
   switch(chord) {
	case 1:
	  return "#e2df02";     break;	//yellow
	case 2:
	  return "#ffcc33";     break; //orange
	case 3:
	  return "#cccccc";     break; //gray
	case 4:
	  return "#ff99ff";     break; //pink
	case 5:
	  return "#9bb6fe";     break; //blue
	case 6:
	  return "#99ff00";     break; //green
	case 7:
	  return "#cc99ff";     break; //violet
	case 8:
		  return "#DD20DD"; break; //5/5
	case 9:
		  return "#DDAA00"; break; //5/6
	case 10:
		  return "#A0A0FF"; break; //5/2
	case 11:
		  return "#C060E0"; break; //5/3
	case 12:
		 return  "#FF66FF"; break; //57/4
	case 13:
		  return "#C0C0C0"; break; //4/4
	case 14:
		  return "#B0C0FF"; break; //5^7
	case 15:
		  return "#DD20DD"; break; //5^7/5
	case 16: 
		 return  "#FF4466"; break; //5/5/5
	case 17:
		 return "#e2df02";     break;	//yellow
	case 18:
		 return  "#40FF40"; break; //6^7
	case 19:
		  return "#40DD40"; break; //b6
	case 20:
		  return "#EE20EE"; break; //7/5
	case 21:
		  return "#EECC00"; break; //2^7/5
	case 22:
		  return "#FFDD00"; break; //2^7
	case 23:
		  return "#E0E040"; break; //1^6
	case 24:
		  return "#FF4466"; break; //5^7/5/5
	case 25:
		  return "#B0C0FF"; break; //5^6
	case 26:
		return "#ff99ff";   break; //4m
	case 27:
	  return "#e2df02";     break; //1 dim
	case 28:
	  return "#9bb6fe";     break; //5 dim
	case 29:
	  return "#cccccc";     break; //3M
	case 30:
	  return "#e2df02";     break; //1m
	case 31:
	  return "#e2df02";     break;	//yellow
	case 32:
	  return "#9bb6fe";     break; //blue
	case 33:
	  return "#ff99ff";     break; //pink

	default:
	  return 0;     break;
   }
}

function SetMode(mode) {	// called on a click of a font mode button	// mode == true => roman 
//window.alert('SetMode ' + mode);
//   if (Playing) Stop();
var b0, b1, b2;
   if (!Playing) {
	romantext = mode;
	parent.ChordTxtMode = mode;	// save it in the left frame
	parent.literalmode = false;
//	ChordTxtMode = mode;	// save it in the left frame
//	literalmode = false;
	literaltext = false;

	// redo the strip numerals in the new font
//	CreateStrips(strips);
	kk = 0; bb = 0;
//window.alert("InitGraphics");
	InitGraphics();		// ERASES THE STRIPS -> it's the <font> tag being written that does it
//window.alert("done InitGraphics");
	b0 = document.modebuttons.radio1[0];
	if (b0) b0.checked = !mode;
else window.alert("no modebuttons");
	b1 = document.modebuttons.radio1[1];
	if (b1) b1.checked = mode;
	b2 = document.modebuttons.radio1[2];
	if (b2) b2.checked = false;

   }
//window.alert("exit SetMode");
}
function SetLiteralMode() {
   if (!Playing) {
//alert("SetLiteralMode()");   
	literaltext = true;
	parent.literalmode = true; // might not be needed
	parent.keyboxindex = document.getElementById("keybox").selectedIndex;
//	literalmode = true; // might not be needed
//	keyboxindex = document.getElementById("keybox").selectedIndex;
//	CreateStrips(strips);
	kk = 0; bb = 0;
	InitGraphics();
	document.modebuttons.radio1[0].checked = false;
	document.modebuttons.radio1[1].checked = false;
	document.modebuttons.radio1[2].checked = true;
	}
}
/*
  if (mode) 
  {
   document.modebuttons.arabic.checked = false;
   document.modebuttons.roman.checked = true;
  }
  else
  {
   document.modebuttons.arabic.checked = true;
   document.modebuttons.roman.checked = false;
  }
*/



/* Flash colors
		  0xE0E040,	// 1  yellow
		  0xFFDD00,	// 2  light orange
//		  0xFFCCFF,	// 3  lavender
		  0xBBDDFF,	// 3  lavender
		  0xFFAAFF,	// 4  rose
		  0xB0C0FF,	// 5  blue
		  0x40FF40,	// 6   green
		  0xC080F0,	// 7   suppposed to be beige
		  0xDD20DD,	// 5/5 violet 	8
		  0xDDAA00,	// 5/6  orange	9	
		  0xA0A0FF,	// 5/2  lt blue	10
		  0xC060E0,	// 5/3  violet	11
		  0xFF66FF,	// 57/4		12
		  0xC0C0C0,	// 4/4		13
		  0xB0C0FF,	// 5^7		14
		  0xDD20DD,	// 5^7/5 violet 	15
		  0xFF4466,	// 5/5/5		16
		  0xD0D040,	// 1^7		17
		  0x40FF40,	// 6^7		18
		  0x40DD40,	// b6			19
		  0xEE20EE, // 7/5		20
		  0xEECC00, // 2^7/5		21
		  0xFFDD00,	// 2^7  		22
		  0xE0E040,	// 1^6		23  
		  0xFF4466,	// 5^7/5/5		24
		  0xB0C0FF	// 5^6		25
*/
