// Javascript functions for Guitar Tabs

Tab = new Array( 50);
  
var nTableNdx = 1;

function Update( objTab, objSong, strData)
{

  var nChar;
  var i;
  var strTab = "";
  var strSong = "";
  var strSub = "";
  var nTabNdx = 0;

  // Store Tab Object in Tab Array
  
  Tab[nTableNdx] = objTab;
  
  nTableNdx += 1;
    
  // Remove Tab(s)

  bIn = 0;
  
  for ( i = 0; i < strData.length; i++)
  {
    // Get Char
	
    nChar = strData.charAt( i);
	  
	if ( nChar == '[')
      bIn = 1;

    if ( bIn == 0)
	  strSong += nChar;
		  
	if ( nChar == ']')
	  bIn = 0;
  }

  bIn = 0;
  nNdx = 0;
  
  // Keep Tab Only
    
  for ( i = 0; i < strData.length; i++)
  {
    // Get Char
	
    nChar = strData.charAt( i);
	  
    if ( nChar == '[')
	{
      bIn = 1;
	  strSub = "";
	}
	  
	if ( nChar == ']')
	{
	  bIn = 0;
	  strSub += ']';
	
	  for ( var j = nTabNdx; j < nNdx; j++)
	  {
	    strTab += ' ';
		nTabNdx += 1;
	  }
	  
	  // Copy SubString ( Chord Name)
	  
	  strTab += strSub;
	  nTabNdx += strSub.length;
		
      continue;
    }
	
    if ( bIn == 1)
	  strSub += nChar;
	else
	  nNdx += 1;		  
  }

  objTab.value = strTab;
  objSong.value = strSong;
}

function GetChord( nNdx)
{

  var nChar = 0;
  var nStart = 0;
  var nEnd = 0;
  var strValue = Tab[nNdx].value;
  var nLen = strValue.length; 
  var nMousePos = event.clientX + document.body.scrollLeft;
  var nPos = Math.floor( Math.max( 0, nMousePos - 15) / ( 12 * 0.58));

  // Check for Chord
  
  if (( nPos > nLen) || ( strValue.charAt( nPos) == ' '))
  {
    HideInfo();
	
    return;
  }
   
  // Get Chord Start
     
  do
  {
    nChar = strValue.charAt( nPos);
		 
	if ( nChar == '[')
    {
      nStart = nPos + 1;
		 
      break;
    }
		 
	nPos -= 1;
		 
  } while (( nStart == 0) && ( nPos != -1))

  nPos = nStart;

  // Get Chord End 
  	  
  do
  {
    nChar = strValue.charAt( nPos);
		 
    if ( nChar == ']')
    {
	  nEnd = nPos;
			 
      break;
    }
		 
    nPos += 1;
		 
  } while (( nEnd == 0) && ( nPos < nLen));

  DisplayChord( strValue.substring( nStart, nEnd));
}

// Note: the following line must be added in the body to use
//  the information popup windows. 
// <DIV Id = "Info" STYLE = "position: absolute; "> </DIV>

function DisplayChord( strChord)
{
    strChord = strChord.toLowerCase();
	
    var nPos = strChord.indexOf( "/");
	
	if ( nPos > 0)
	   strChord = strChord.substring( 0, nPos) + '_' + 
	                  strChord.substring( nPos + 1, strChord.length);	   
	   
    var str = "<TABLE Width = '80' Border = '2'";
	str += "bgcolor = '#FFFFFF'><TR><TD>";
	str += "<TABLE Width = '100%' Border = '0'>";
	str += "<TR><TD><IMG SRC = 'chords/" + strChord + ".gif' width ='60'";
	str += " alt = '" + strChord + "' border = '0'>";
	str += "</TD></TR></TABLE></TD></TR></TABLE>";
	
	DisplayInfo( 80, str);
}

// Board Data: R: refrain V: verse B: Break
 
function BuildSongBoard( strBoard)
{

  var str = "<FORM Name = 'Song'>";
  var nNdx = 1;
  
  for ( var i = 0; i < strBoard.length; i++)
  {
    // Get Char
	
    nChar = strBoard.charAt( i);
  
    // Add HTML element accordingly
	
	switch ( nChar)
	{
	  case 'V':
	  
	    str += "<INPUT Name = 'Tab" + nNdx + "' Class = 'TabText' ";
		str += "OnMouseMove = 'GetChord(" + nNdx + ")' ";
		str += "OnMouseOut = 'HideInfo()' Style = 'Width: 100%'><BR>";
		str += "<INPUT Name = 'Song" + nNdx + "' Class = 'SongText' ";
		str += "Style = 'Width: 100%'><BR>";
		
		nNdx += 1;
		
		break;
	
      case 'R':

	    str += "<INPUT Name = 'Tab" + nNdx + "' Class = 'TabText' ";
		str += "OnMouseMove = 'GetChord(" + nNdx + ")' ";
		str += "OnMouseOut = 'HideInfo()' Style = 'Width: 100%'><BR>";
		str += "<INPUT Name = 'Song" + nNdx + "' Class = 'Refrain' ";
		str += "Style = 'Width: 100%'><BR>";
		
		nNdx += 1;
		
		break;

      case 'B':
	  
	    str += "<BR>";
		
		break;
    }
  }

  // Finish Build
	
  str += "</FORM><BR>";
	
  document.write( str);
}

