/* Gitarren akkorde darstellen - von Heiner Sextro copyright 2001 */

/*
Hauptvariablen
*/
var background = "#000000";

var barcolors = new Array();
barcolors[barcolors.length] = "#000000";
barcolors[barcolors.length] = "#000000";
barcolors[barcolors.length] = "#000000";
barcolors[barcolors.length] = "#000000";
barcolors[barcolors.length] = "#000000";
barcolors[barcolors.length] = "#000000";
barcolors[barcolors.length] = "#000000";
barcolors[barcolors.length] = "#000000";
barcolors[barcolors.length] = "#000000";
barcolors[barcolors.length] = "#000000";

var bilder = new Array();
var fingermenue = new Array();
var topbild = "system/grafx/gitarrengriffe/top.jpg";
bilder[bilder.length] = "system/grafx/gitarrengriffe/leer.jpg";
fingermenue[fingermenue.length] = "Leer";
bilder[bilder.length] = "system/grafx/gitarrengriffe/punkt.jpg";
fingermenue[fingermenue.length] = "Punkt";
bilder[bilder.length] = "system/grafx/gitarrengriffe/zeigefinger.jpg";
fingermenue[fingermenue.length] = "Zeigefinger";
bilder[bilder.length] = "system/grafx/gitarrengriffe/mittelfinger.jpg";
fingermenue[fingermenue.length] = "Mittelfinger";
bilder[bilder.length] = "system/grafx/gitarrengriffe/ringfinger.jpg";
fingermenue[fingermenue.length] = "Ringfinger";
bilder[bilder.length] = "system/grafx/gitarrengriffe/kleinerfinger.jpg";
fingermenue[fingermenue.length] = "Kleinerfinger";
bilder[bilder.length] = "system/grafx/gitarrengriffe/daumen.jpg";
fingermenue[fingermenue.length] = "Daumen";
bilder[bilder.length] = "system/grafx/gitarrengriffe/nicht.jpg";
fingermenue[fingermenue.length] = "nicht spielen";
bilder[bilder.length] = "system/grafx/gitarrengriffe/top.jpg";
fingermenue[fingermenue.length] = "top";
var notennamen = new Array();
notennamen[notennamen.length] = "C";
notennamen[notennamen.length] = "C#";
notennamen[notennamen.length] = "D";
notennamen[notennamen.length] = "D#";
notennamen[notennamen.length] = "E";
notennamen[notennamen.length] = "F";
notennamen[notennamen.length] = "F#";
notennamen[notennamen.length] = "G";
notennamen[notennamen.length] = "G#";
notennamen[notennamen.length] = "A";
notennamen[notennamen.length] = "A#";
notennamen[notennamen.length] = "B";
var modusnamen = new Array();
modusnamen[modusnamen.length] = "major";
modusnamen[modusnamen.length] = "minor";
modusnamen[modusnamen.length] = "maj7";
modusnamen[modusnamen.length] = "-maj7";
modusnamen[modusnamen.length] = "add";
modusnamen[modusnamen.length] = "sus2";
modusnamen[modusnamen.length] = "sus4";
var modusnummern = new Array();
modusnummern[modusnummern.length] = "";
modusnummern[modusnummern.length] = "b5";
modusnummern[modusnummern.length] = "#5";
modusnummern[modusnummern.length] = "b6";
modusnummern[modusnummern.length] = "6";
modusnummern[modusnummern.length] = "7";
modusnummern[modusnummern.length] = "b9";
modusnummern[modusnummern.length] = "9";
modusnummern[modusnummern.length] = "#9";
modusnummern[modusnummern.length] = "b11";
modusnummern[modusnummern.length] = "11";
modusnummern[modusnummern.length] = "#11";
modusnummern[modusnummern.length] = "b13";
modusnummern[modusnummern.length] = "13";
var griffart = new Array();
griffart[griffart.length] = "standard";
griffart[griffart.length] = "a-major pattern";
griffart[griffart.length] = "a-minor pattern";
griffart[griffart.length] = "e-major pattern";
griffart[griffart.length] = "e-minor pattern";
griffart[griffart.length] = "c-major pattern";
griffart[griffart.length] = "c-minor pattern";
var griffbrett = new Array();
var griff = new Array();
var letzter = -1;
var dieser = 0;
var animate = false;
var saite = 0;
var text = "Leersaite";
var lefthand = 0;
var animate_speed = 1000;


/* Tastaturabfrage */
document.onkeypress = keyscript;
/*
Ab hier Funktionen
*/
function finger_info(id)
{
var myID = "pic" + id;
document.getElementById(myID).src = bilder[griffbrett[dieser][id].status];
var name = notennamen[griff[dieser].grundton] +'&nbsp;' + modusnamen[griff[dieser].modus + '<br>' ];
/*
writeHtml('preset_menue',name + dieser + '<br>' + griffbrett[dieser][id].note + '<br>' + griffbrett[dieser][id].midi + '<br>' + griffbrett[dieser][id].saite + '<br>' + bilder[griffbrett[dieser][id].status]);
*/
writeHtml( 'preset_menue' , griffbrett[dieser][id].note  );

}


function finger(id)
{
if (letzter == id)
  {
  griffbrett[dieser][id].skipfinger();
  writeHtml( 'preset_menue' , griffbrett[dieser][id].note + '<br /> changed to <img src="' + bilder[griffbrett[dieser][id].status] + '" height="40" width="40" />');
  }
else
  {
  writeHtml( 'preset_menue' , 'you can change the finger now for note ' + griffbrett[dieser][id].note  );
  }
var myID = "pic" + id;
document.getElementById(myID).src = bilder[griffbrett[dieser][id].status];
var name = notennamen[griff[dieser].grundton] +'&nbsp;' + modusnamen[griff[dieser].modus + '<br>' ];
/*
writeHtml('preset_menue',name + dieser + '<br>' + griffbrett[dieser][id].note + '<br>' + griffbrett[dieser][id].midi + '<br>' + griffbrett[dieser][id].saite + '<br>' + bilder[griffbrett[dieser][id].status]);
*/


letzter = id;
}
function initGuitarScales()
{

dieser = 0;
neue_tabulatur(0);
var tabulatur = init_tab(12,lefthand);
writeHtml('chord_tab',tabulatur);
griff[griff.length] = new init_set();

return true;
}



function refresh(id)
{
for (i=0;i < griffbrett[dieser].length;i++)
  {
  if (griffbrett[dieser][i].status != 0)
    {
	if (griff[dieser].tabmode)
	  {
	  if (griffbrett[dieser][i].saite ==  griffbrett[dieser][id].saite)
	    {
	    if (i != id)
	      {
		  griffbrett[dieser][i].reset();
		  var myID = "pic" + id;
		  document.getElementById(myID).src = bilder[griffbrett[dieser][i].status];
		  /*eval('document.getElementById("bar' + i + '").style.background = "url(' + bilder[griffbrett[dieser][i].status] + ')"');*/
	      }
	    }
	  }
	else
	  {
	  		  var myID = "pic" + id;
		  document.getElementById(myID).src = bilder[0];
	  /*eval('document.getElementById("bar' + i + '").style.background = "url(' + bilder[griffbrett[dieser][i].status] + ')"');*/
	  }
	}
  }
}
function init_tab(limit,modus)
{
var h = 40;
var w = 20;
var temp = "";
var bundnummer = 0;
var saite = 0;
var text = "";
var c = limit * 6 - 1;
var offset = 0;
var index;
for (i=0;i<=c;i++)
   {
   saite = (i % 6) + 1;
   if (modus == 1)
      {
	  switch (saite)
	    {
		case 1:
		offset = 5;
		break;
		case 2:
		offset = 3;
		break;
		case 3:
		offset = 1;
		break;
		case 4:
		offset = -1;
		break;
		case 5:
		offset = -3;
		break;
		case 6:
		offset = -5;
		break;
		}
	  }
   index = (i + offset);
   if (bundnummer > 0)
      {
      text = bundnummer + ". ";
	  h = 40;
      }
   else
      {
	  h = 20;
	  }
   if ((i % 6 == 0) && (i != 0))
      {
	  h = 40;
	  bundnummer++;
      temp = temp + text;
	  temp = temp + '<div>';
	  
	  temp = temp + '</div>';
	  temp = temp + "<span id='bar" + index + "' onmouseover='finger_info(" + index + ")' onclick='finger(" + index + ")'><img src='system/grafx/gitarrengriffe/leer.jpg' id='pic" + index + "' height='" + h + "' width='" + w + "'></span>";
	  }
   else
      {
      temp = temp + "<span id='bar" + index + "' onmouseover='finger_info(" + index + ")'  onclick='finger(" + index + ")'><img src='system/grafx/gitarrengriffe/leer.jpg' id='pic" + index + "'  height='" + h + "' width='" + w + "'></span>";
      }
      
   }
return temp;
}


function neue_tabulatur(id)
{

var id = id;
var bundnummer = 0;
var midi = new Array();
midi[midi.length] = 0;
midi[midi.length] = 64;
midi[midi.length] = 69;
midi[midi.length] = 74;
midi[midi.length] = 79;
midi[midi.length] = 83;
midi[midi.length] = 88;
griffbrett[griffbrett.length] = new Array();
for (i=0;i<=71;i++)
   {
   saite = (i % 6) + 1;
   if ((i % 6 == 0) && (i != 0))
      {
      bundnummer++;
      }
   if (bundnummer > 0)
      {
      text = bundnummer + ". Bund";
      }
   else
      {
	  text = "Leersaite";
	  }
   var temp = ((midi[saite] - 0) % 12);

   griffbrett[(griffbrett.length-1)][i] = new init_bar(i,saite,bundnummer,midi[saite],notennamen[temp],text);
   midi[saite]++;
   }
   
dieser = (griffbrett.length - 1);
}

function init_bar(id,saite,bund,midi,note,text)
{
this.id = id;
this.saite = saite;
this.bund = bund;
this.midi = midi;
this.note = note;
this.text = text;
this.status = 0;
this.skipfinger = skipfinger;
this.setfinger = setfinger;
this.reset = reset;
return this;
}
function setfinger(id)
{
this.status = id;
}
function skipfinger()
{
if (this.id < 6)
   {
   this.status = bilder.length-1;
   }
else
   {
   if (this.status < (bilder.length - 2))
      {
	  this.status++;
	  }
   else
	  {
	  this.status = 0;
	  }
   }
}

function reset()
{
this.status = 0;
}


function init_set()
{
this.bars = new Array();
this.indices = new Array();
this.id = -1;
this.tabmode = true;
this.grundton = -1;
this.modus = -1;
this.zusatz = -1;
this.griffart = -1;
this.tabmode_toggle = tabmode_toggle;
return this;
}

function tabmode_toggle()
{
this.tabmode = !this.tabmode;
}


/*  change_tab */
function change_tab(current)
{
dieser = current;
erstelle_griffmenu();
var notenversatz = -12;
writeHtml('preset_menue', ' <h1>basic chord</h1> ' + griffart[ griff[ dieser ].griffart ]);
/* 
var tabulatur = init_tab(12,lefthand);
writeHtml('chord_tab',tabulatur);
*/
for (id=0;id < griffbrett[dieser].length;id++)
  {
  var myID = "pic" + id;
  document.getElementById(myID).src = bilder[griffbrett[dieser][id].status];
    if (griffbrett[dieser][id].status > 0)
     {
	 if (document.applets.midia6)
	    {
		
        note = griffbrett[dieser][id].midi + notenversatz;
		/* sends note to java applet */
		document.applets.midia6.note(note,1);
        window.setTimeout("document.applets.midia6.note(note,0)",200);
		
	    }
	 }
  }
}



function mirror()
{

if (lefthand == 0)
   {
   lefthand = 1;
   }
else
   {
   lefthand = 0;
   }
var tabulatur = init_tab(12,lefthand);
writeHtml('chord_tab',tabulatur);
change_tab(dieser);
erstelle_griffmenu();
}

function animatePresetList()
{
var aktiv;
if (animate) {
   animate = false;
   window.clearInterval(aktiv);

   writeHtml('bereich_1', 'stopped' );
   }
else {
   animate = true;
   window.setTimeout("animateChords()", animate_speed );
   writeHtml('bereich_1', 'playing <br /><a href="javascript:changeSpeed(1)">faster</a><br /><a href="javascript:changeSpeed(0)">slower</a>' );
   
   }

}
function changeSpeed( temp )
{
if ( temp == 1 ) {
   animate_speed = animate_speed - 100;
   }
else {
   animate_speed = animate_speed + 100;
   }
}
function animateChords()
{
if (animate) {
   dieser++;
   id = dieser % griff.length;
   change_tab(id);
   window.setTimeout("animateChords()", animate_speed );
   }
/*

writeHtml('chord_tab', 'griff.length' + griff.length + 'rechnung' + rechnung);
*/
}
function deletePresetList()
{
griffbrett = new Array();
griff = new Array();
var tabulatur = init_tab(12,lefthand);
writeHtml('chord_tab',tabulatur);
change_tab(dieser);
erstelle_griffmenu();
}
function erstelle_griffmenu()
{
var klasse = 'do';
var temp = '';
if (lefthand == 1)
   {
   temp = temp + '<img src="system/grafx/gitarrengriffe/l_hand.jpg" /><br /><a href="javascript:mirror()" onclick="this.blur()" class="menu">Change to Standard View</a>';
   }
else
   {
   temp = temp + '<img src="system/grafx/gitarrengriffe/r_hand.jpg" /><br /><a href="javascript:mirror()" onclick="this.blur()" class="menu">Change to Hendrix View</a>';
   }
temp = temp + '<br /><a href="javascript:deletePresetList()" onclick="this.blur()" class="menu">delete Preset List</a>';
temp = temp + '<br /><a href="javascript:animatePresetList()" onclick="this.blur()" class="menu">animate Preset List</a>';
temp = temp + '<ul>';
for (i=0;i<griffbrett.length;i++)
   {
   
   if (i == dieser)
	  {
      klasse = 'aktuell';
      }
   else
      {
      klasse = 'do';
      }
   temp = temp + '<li class="' + klasse + '">';
   if ((notennamen[griff[i].modus])&&(notennamen[griff[i].grundton]))
     {
	 if (modusnummern[griff[i].zusatz])
	    {
		temp = temp + '<a href="javascript:change_tab(' + i + ')" onclick="this.blur()" class="' + klasse + '">' + notennamen[griff[i].grundton] +'&nbsp;' + modusnamen[griff[i].modus] +'&nbsp;' + modusnummern[griff[i].zusatz] + '</a>';
	
		}
	 else
	    {
		temp = temp + '<a href="javascript:change_tab(' + i + ')" onclick="this.blur()" class="' + klasse + '">' + notennamen[griff[i].grundton] +'&nbsp;' + modusnamen[griff[i].modus] + '</a>';
	
		}
	  }
   else
     {
     temp = temp + '<a href="javascript:change_tab(' + i + ')" onclick="this.blur()" class="' + klasse + '">leer</a>';
	 }
   temp = temp + '</li>';
   }
temp = temp + '<ul>';
document.getElementById("chord_con").innerHTML = temp;
document.getElementById("chord_con").style.visibility = "visible";
}

/* Admin Things */
/**********************/
function transposeChord()
{
writeHtml( 'preset_menue' , 'dieser: ' + griff[1].id  );
}
function presetMenue() {
doAjaxRequest('index.php?ajax=1&com=start_guitar&command=preset_menue'  , 'bereich_1', true );
}
function savePreset(presetname)
{
writeHtml( 'preset_menue' , presetname  + presetname.length);
if ( presetname.length > 3 ) {
   temp = '';  
   for ( i = 1 ; i < griff.length ; i++ )
     {
     temp = temp + griff[ i ].id + '_';
     }
   writeHtml( 'preset_menue' , temp );
   doAjaxRequest('index.php?ajax=1&com=start_guitar&command=savePreset&presetname=' + presetname + '&temp=' + temp , 'siteedit', false );
   }
else {
   writeHtml( 'preset_menue' , 'try a longer name please' );
   }
return false;
}
function saveChord( transpose )
{
id = dieser;
writeHtml( 'preset_menue' , 'dieser: ' + id  );

griff[dieser].bars = [];
griff[dieser].indices = [];

for (i=0;i < griffbrett[dieser].length;i++)
  {
  if (griffbrett[dieser][i].status != 0)
    {
	griff[dieser].bars[griff[dieser].bars.length] = griffbrett[dieser][i].status;
	if ( transpose == 1 ) {
	   griff[dieser].indices[griff[dieser].indices.length] = griffbrett[dieser][i].id + 6;
	   }
	else {
	   griff[dieser].indices[griff[dieser].indices.length] = griffbrett[dieser][i].id;
	   }
	}
  }
var cgi_url = 'admin=user&com=start_guitar&command=saveChord&id=' + id;
var cgi_bars = '&bars=';
var cgi_indices = '&indices=';
if ( transpose == 1 ) {
   griff[id].grundton++;
   if (griff[id].grundton > 11 ) {
      griff[id].grundton = 0;
      }
   }
cgi_url = cgi_url + '&tabmode=' + griff[id].tabmode + '&grundton=' + griff[id].grundton +'&modus=' + griff[id].modus +'&zusatz=' + griff[id].zusatz +'&griffart=' + griff[id].griffart;
for (i=0;i < griff[dieser].indices.length;i++)
  {
  cgi_bars = cgi_bars + griff[dieser].bars[i] + '_';
  cgi_indices = cgi_indices + griff[dieser].indices[i] + '_';
  }
cgi_url = cgi_url + cgi_bars + cgi_indices;
window.location.href = '?' + cgi_url;

/*
writeHtml( 'siteedit' , 'cgi_url: ' + cgi_url  );
*/
}



/*   ** */
function adminMenue() {

for (i=0;i < griffbrett[dieser].length;i++)
  {
  if (griffbrett[dieser][i].status != 0)
    {
	griff[dieser].bars[griff[dieser].bars.length] = griffbrett[dieser][i].status;
	griff[dieser].indices[griff[dieser].indices.length] = griffbrett[dieser][i].id;
	}
  }
griff[0] = griff[dieser];
griffbrett[0] = griffbrett[dieser];
griff[0].bars = griff[dieser].bars;
griff[0].indices = griff[dieser].indices;
writeHtml( 'preset_menue' , 'dieser' + dieser + ':::' + griffbrett.length  );

var temp = 'Admin';
document.getElementById("bereich_1").innerHTML = temp;

document.getElementById("bereich_1").style.visibility = "hidden";

temp = '<form>';
temp = temp + '<select name="noten" size="1" onchange="vergebe_note(this.selectedIndex)">';
if (griff[dieser].grundton == -1)
   {
   temp = temp + '<option selected>Grundton</option>';
   }
else
   {
   temp = temp + '<option>Grundton</option>';
   }
for (i=0;i < notennamen.length;i++)
  {
  if (griff[dieser].grundton == i)
    {
	temp = temp + '<option selected>' + notennamen[i] + '</option>';
	}
  else
    {
	temp = temp + '<option>' + notennamen[i] + '</option>';
	}
  }
temp = temp + '</select>';
temp = temp + '</form>';

temp = temp + '<form>';
temp = temp + '<select name="noten" size="1" onchange="vergebe_modus(this.selectedIndex)">';
if (griff[dieser].modus == -1)
   {
   temp = temp + '<option selected>Modus</option>';
   }
else
   {
   temp = temp + '<option>Modus</option>';
   }
for (i=0;i < modusnamen.length;i++)
  {
  if (griff[dieser].modus == i)
    {
	temp = temp + '<option selected>' + modusnamen[i] + '</option>';
	}
  else
    {
	temp = temp + '<option>' + modusnamen[i] + '</option>';
	}
  }
temp = temp + '</select>';
temp = temp + '</form>';

temp = temp + '<form>';
temp = temp + '<select name="noten" size="1" onchange="vergebe_zusatz(this.selectedIndex)">';
if (griff[dieser].zusatz == -1)
   {
   temp = temp + '<option selected>Zusatz</option>';
   }
else
   {
   temp = temp + '<option>Zusatz</option>';
   }
for (i=0;i < modusnummern.length;i++)
  {
  if (griff[dieser].zusatz == i)
    {
	temp = temp + '<option selected>' + modusnummern[i] + '</option>';
	}
  else
    {
	temp = temp + '<option>' + modusnummern[i] + '</option>';
	}
  }
temp = temp + '</select>';
temp = temp + '</form>';
temp = temp + '<form>';
temp = temp + '<select name="griffart" size="1" onchange="vergebe_griffart(this.selectedIndex)">';
if (griff[dieser].zusatz == -1)
   {
   temp = temp + '<option selected>Griffart</option>';
   }
else
   {
   temp = temp + '<option>Griffart</option>';
   }
for (i=0;i < griffart.length;i++)
  {
  if (griff[dieser].griffart == i)
    {
	temp = temp + '<option selected>' + griffart[i] + '</option>';
	}
  else
    {
	temp = temp + '<option>' + griffart[i] + '</option>';
	}
  }
temp = temp + '</select>';
temp = temp + '</form>';
temp = temp + '<hr /><a href="javascript:saveChord( 0 )">save chord to database</a><hr />';
temp = temp + '<hr /><a href="javascript:saveChord( 1 )">save transposed chord ( + 1 )</a><hr />';
temp = temp + '</form>';
temp = temp + '<p>Aktuelle Liste als Preset speichern</p>';
temp = temp + '<form name="preset_create" action="index.php" method="post" onsubmit="return savePreset( this.presetname.value ) ">';
temp = temp + '<input type="text" name="presetname">';
temp = temp + '<input type="submit" value="ok" />';
temp = temp + '</form>';
/*
*/
document.getElementById("bereich_1").innerHTML = temp;
document.getElementById("bereich_1").style.visibility = "visible";
erstelle_fingermenu(0);
change_tab(0);
}

/*
Vergabe Methoden
*/
function vergebe_note(index)
{
griff[dieser].grundton = index - 1;

erstelle_griffmenu();

}
function vergebe_modus(index)
{
griff[dieser].modus = index - 1;
erstelle_griffmenu();
}
function vergebe_zusatz(index)
{
griff[dieser].zusatz = index - 1;
erstelle_griffmenu();
}
function vergebe_griffart(index)
{
griff[dieser].griffart = index - 1;
erstelle_griffmenu();
}

function erstelle_fingermenu(id)
{
/**/
document.getElementById("bereich_0").style.visibility = "hidden";
var temp = '<span class="spaltentext">' + griffbrett[dieser][id].note + '<br>' + griffbrett[dieser][id].midi + '<br>' + griffbrett[dieser][id].text + '<br>' + griffbrett[dieser][id].saite + '. Saite<br><a href="javascript:clear(' + id + ')" class="menu">reset</a><a href="javascript:resetall(' + id + ')" class="menu">resetall</a></span>';
for (i=0;i < bilder.length-1;i++)
  {
  temp = temp + '<a href="javascript:switch_finger(' + id + ',' + i + ')" onclick="this.blur()" class="menu">' + fingermenue[i] + ' </A><br>';
  }
document.getElementById("bereich_0").innerHTML = temp;
document.getElementById("bereich_0").style.visibility = "visible";
}

function switch_finger(i,id)
{
griffbrett[dieser][i].setfinger(id);
eval('document.getElementById("bar' + i + '").style.background = "url(' + bilder[griffbrett[dieser][i].status] + ')"');
}


function keyscript(e) 
{

if (letzter != -1)
   {
	  switch (e.which)
	    {
		case 97:
		griffbrett[dieser][letzter].status = 5;
		break;
		case 115:
		griffbrett[dieser][letzter].status = 4;
		break;
		case 100:
		griffbrett[dieser][letzter].status = 3;
		break;
		case 102:
		griffbrett[dieser][letzter].status = 2;
		break;
		}
   


   change_tab(0);
   }
/*
   erstelle_griff();
   erstelle_menu(letzter);
   refresh(letzter);
   eval('document.getElementById("bar' + letzter + '").style.background = "url(' + bilder[griffbrett[dieser][letzter].status] + ')"');
alert(window.event.keyCode);   erstelle_menu(letzter);erstelle_griff();
   refresh(letzter);
*/  
}
function Tastendruck (Ereignis) {
  if (!Ereignis)
    Ereignis = window.event;
  alert(Ereignis.keyCode);
}


