
var a_nt = Array("A","A#","B","C","C#","D","D#","E","F","F#","G","G#");
var a_fm = Array(1,0,0,1,0,1,0,1,0,1,0,0);
var i_frets = 24;
var root_note = 2; // a
var a_open = Array("E","B","G","D","A","E");
var a_lastScale = Array();
var a_scales =   
  [["2,0,1,0,1,1,0,1,0,1,0,1","Major (Ionian)"],
  ["2,0,1,1,0,1,0,1,0,1,1,0","Dorian - Jazz/Blues"],
  ["2,1,0,1,0,1,0,1,1,0,1,0","Phrygian - Flamenco"],
  ["2,0,1,0,1,0,1,1,0,1,0,1","Lydian - Vai"],
  ["2,0,1,0,1,1,0,1,0,1,1,0","Mixolydian - Blues/Country"],
  ["2,0,1,1,0,1,0,1,1,0,1,0","Natural Minor (Aeolean)"],
  ["2,1,0,1,0,1,1,0,1,0,1,0","Locrian"],
  ["2,0,1,1,0,1,0,1,1,0,0,1","Harmonic Minor"],
  ["2,0,1,1,0,1,0,1,0,1,0,1","Melodic Minor"],
  ["2,0,1,0,1,0,0,1,0,1,0,0","Pentatonic (Major)"],
  ["2,0,0,1,0,1,0,1,0,0,1,0","Pentatonic (Minor)"],
  ["2,0,1,0,1,0,0,1,0,1,0,0","Pentatonic (Major:Ionian / Lydian / Mixolydian)"],
  ["2,0,1,1,0,0,0,1,0,1,0,0","Pentatonic Dorian"],
  ["2,1,0,1,0,0,0,1,1,0,0,0","Pentatonic Phrygian - Indian"],
  ["2,0,1,1,0,0,0,1,1,0,0,0","Pent. Aeolean - Balinese"],
  ["2,1,0,1,0,0,1,0,1,0,0,0","Pent. Locrian - Arabian"],
  ["2,0,0,1,0,1,1,1,0,0,1,0","Blues"],
  ["2,0,1,0,1,1,0,1,1,0,1,0","Hindu"],
  ["2,1,0,1,1,1,1,0,1,0,1,0","Spanish (8 note)"],
  ["2,1,0,1,1,1,0,1,1,0,1,0","Flamenco"],
  ["2,1,0,1,0,0,1,1,1,0,0,1","Indian"],
  ["2,1,0,0,1,1,1,0,1,0,0,1","Persian"],
  ["2,1,0,0,1,1,1,0,0,1,1,0","Oriental"],
  ["2,1,0,0,0,1,0,1,1,0,0,0","Japanese (pent.)"],
  ["2,1,0,1,0,0,0,1,0,0,1,0","Balinese (pent.)"],
  ["2,0,1,0,0,1,0,1,0,0,1,0","Egyptian (pent.)"],
  ["2,0,0,0,1,0,1,1,0,0,0,1","Chinese (pent.)"],
  ["2,1,0,0,1,1,0,1,1,0,0,1","Double Harmonic - Gypsy"],
  ["2,0,1,1,0,1,1,0,1,1,0,1","Diminished"],
  ["2,1,0,1,1,0,1,1,0,1,1,0","Symmetrical"],
  ["2,0,0,1,1,0,0,1,1,0,0,1","Augmented"],
  ["2,0,1,0,1,0,1,0,1,0,1,0","Whole Tone"],
  ["2,1,1,1,1,1,1,1,1,1,1,1","Chromatic"]];
  
var a_chords =  [   
  ["2,0,0,0,3,0,0,3,0,0,0,0","[CHORD] maj"],
  ["2,0,0,3,0,0,0,3,0,0,0,0","[CHORD] min"],
  ["2,0,0,0,3,0,0,3,0,0,3,0","[CHORD] 7"],
  ["2,0,0,3,0,0,0,3,0,0,3,0","[CHORD] min7"],
  ["2,0,0,0,3,0,0,3,0,0,0,3","[CHORD] maj7"],
  ["2,0,0,0,3,0,0,3,0,3,0,0","[CHORD] 6"],
  ["2,0,0,3,0,0,0,3,0,3,0,0","[CHORD] min6"],
  ["2,0,0,0,3,0,0,0,3,0,0,0","[CHORD] aug"],
  ["2,0,0,0,3,0,0,0,3,0,3,0","[CHORD] aug7"],
  ["2,0,0,3,0,0,3,0,0,0,0,0","[CHORD] dim"],
  ["2,0,0,3,0,0,3,0,0,3,0,0","[CHORD] dim7"],
  ["2,0,0,0,3,0,3,0,0,0,3,0","[CHORD] 7b5"],
  ["2,0,0,3,0,0,3,0,0,0,3,0","[CHORD] min7b5"],
  ["2,0,3,0,3,0,0,3,0,0,3,0","[CHORD] 9"],
  ["2,0,3,3,0,0,0,3,0,0,3,0","[CHORD] min9"],
  ["2,0,3,0,3,0,0,3,0,0,0,3","[CHORD] maj9"],
  ["2,0,3,0,3,3,0,3,0,0,3,0","[CHORD] 11"],
  ["2,3,0,0,3,0,0,3,0,0,3,0","[CHORD] dim9"],
  ["2,0,3,0,3,0,0,3,0,0,0,0","[CHORD] add9"],
  ["2,0,0,0,3,3,0,3,0,0,0,0","[CHORD] add4"],
  ["2,0,0,0,0,3,0,3,0,0,0,0","[CHORD] sus"],
  ["2,0,3,0,0,0,0,3,0,0,0,0","[CHORD] sus9"],
  ["2,0,0,0,0,3,0,3,0,0,3,0","[CHORD] 7sus4"],
  ["2,0,3,0,0,0,0,3,0,0,3,0","[CHORD] 7sus9"],
  ["2,0,0,0,0,0,0,3,0,0,0,0","[CHORD] 5"]
  ]


function updateText(id,text)
{
	if (document.getElementById)
	{
		x = document.getElementById(id);
		x.innerHTML = '';
		x.innerHTML = text;
	}
	else if (document.all)
	{
		x = document.all[id];
		x.innerHTML = text;
	}
	else if (document.layers)
	{
		x = document.layers[id];
		text2 = '<P CLASS="testclass">' + text + '</P>';
		x.document.open();
		x.document.write(text2);
		x.document.close();
	}
}
function outputToID(id, s, dis) {
	var x = document.getElementById(id); 
	if (s!=undefined){x.innerHTML = "<p>"+s+"</p>";}
	x.style.display = dis;
}
function showFrets() {
	outputToID("loader", undefined, "block");
	var s = "<div id='g_fret'><div id='key_title'>key</div><div id='scale_title'>scale/chord</div><div class='clear'></div>";
	for (str in a_open) {
		var octave = 0;
		var note = 0;
		var s_fret = "";
		while (a_nt[note]!=a_open[str]) note++;
		for (frets = 0; frets<i_frets; frets++) {
			s_fret = "<div class='f"+note+"'>"+a_nt[note]+"</div>";
			if (frets==0) {
				s+="<div class='fst'>"+s_fret+"</div>";
			} else {
				if (a_fm[frets%a_fm.length]==1) {
					s+="<div class='mrk'>"+s_fret+"</div>";
				} else {
					s+="<div class='frt'>"+s_fret+"</div>";
				}
			}
			note=(++note)%a_nt.length;
		}
		s+="<div class='clear'></div>";
	}
	s+="</div>";
	outputToID("fretbord",s,"block");
	outputToID("loader", undefined, "none");
}
function setClassProperty (className, property, value) {
  if (document.all) {
    var lastStyleSheet = 
      document.styleSheets[1];//document.styleSheets.length - 1
    var selector = '.' + className;
    var css = property + ': ' + value + ';';
    lastStyleSheet.addRule(selector, css);
  }
  else if (document.getElementById) {
    var lastStyleSheet = 
      document.styleSheets[1];//document.styleSheets.length - 1
    var ruleText = '.' + className + ' { ' + property + ': ' + value + '}';
	//document.write("css rules: "+lastStyleSheet.cssRules[0].cssText+"<br />");
    lastStyleSheet.insertRule(ruleText, lastStyleSheet.cssRules.length);
  }
}
function showScale(s_notes, r_note, desc) {
	if (s_notes=="") {
		return;
	}
	if (r_note!=undefined) {
		root_note = r_note;
	}
	a_notes = s_notes.split(",");
	a_lastScale = s_notes;
	a_notes = s_notes.split(" ").join("").split(",");
	
	// change the key...
	// a=0, a#=1... g#=12
	if (root_note > 0) {
		var nt = "";
		for (var r = (root_note); r>0; r--) {
			nt = a_notes.pop();
			a_notes.unshift(nt);
		}
	}
	
	for (var i=0; i<a_notes.length; i++) {
		if (a_notes[i]>0) {
			if (a_nt[i]==a_nt[root_note]) {
				setClassProperty("f"+i,"background-image","url(root_dot.gif)");
			} else {
				setClassProperty("f"+i,"background-image","url(dot.gif)");
			}
			setClassProperty("f"+i,"background-repeat","no-repeat");
			setClassProperty("f"+i,"background-position","center");
		} else {
			setClassProperty("f"+i,"background-image","none");
		}
	}
	outputToID("key_title","KEY: "+a_nt[root_note],"block");
	if (desc!=undefined) {
		outputToID("scale_title","SCALE/CHORD: "+desc,"block");
	}
}
function _link(arr) {
	var s = "<div class='opts'><ul>";
	lu = arr[0][0];
	for (var i=0; i<arr.length; i++) {
		if (lu == "last_used") {
			s+= "<li><a href='javascript:showScale(a_lastScale,"+arr[i][2]+", undefined);'>"+arr[i][1]+"</a></li>";//;
		} else {
			s+= "<li><a href='javascript:showScale(\""+arr[i][0]+"\", undefined, \""+arr[i][1]+"\");'>"+arr[i][1]+"</a></li>";
		}
	}
	s += "<ul></div>";
	if (arr[0].length > 2) {
		root_note = arr[0][2];
	}
	return s;
}
function showLinks() {
	var s = "";
	s += _link(a_scales);
	s += _link(a_chords);
	var note_arr = new Array();
	for (var i=0; i<a_nt.length; i++) {
		note_arr.push(["last_used",a_nt[i],i]);
	}
	s += _link(note_arr);
	var x = document.getElementById("fretbord"); 
	x.innerHTML += "<div class='g_fret'>"+s+"</div>";
}

