﻿
//////////////////////////////////////////////////////
// Guitar tones generator in JAVASCRIPT Version 4.01 
// by Jim Cranwell  (cranwell@yahoo.com) 
// This program is Copyright 2004 by Jim Cranwell.
// You may not reprint or redistribute this code.
////////////////////////////////////////////////////

var capolist = "zero,one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen,twenty,twentyone,twentytwo,blank,fret,xx,xxf,blue,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r1,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s1,xxx" 
var capo = capolist.split(",")
var imageDB = new Array()
for (i = 0; i < capo.length; i++) {
	imageDB[i]=new Image
	imageDB[i].src= "../gen/" + capo[i] + ".gif"	}

var nameit="";
var titleit="";

function titler(){titleit=window.prompt("name or title?",titleit);}

function newin(num,pr){
var wingen = window.open("", "wingen", "scrollbars=yes,toolbar=no,menubar=yes,resizable=yes,top=5,left=5,width=750,height=450"); 
var gen = wingen.document; 
gen.open("text/html", "replace");wingen.focus();
if (titleit.length>0){gen.write("<html><head><title>" +titleit+ "</title>");}
else{gen.write("<html><head><title>" +chordname[0]+"</title>");}
gen.write("<style>body,p,td{font-family:verdana,Lucida Console,monospace,courier;font-size:80%;}</style>");
gen.write("<style>u,br{font-family:monospace,Lucida Console,courier;font-size:160%;}</style>");

gen.write("<style>a:visited{text-decoration:none} a:link{text-decoration:none}</style>");
gen.write("</head><body bgcolor='#ffffff'>");
gen.writeln("&nbsp;<a href='http://www.gravityboy.com'>http://www.gootar.com</a> ~~~ " + titleit + " ~~~ ");
gen.write("<table width='100%'><tr><td bgcolor='#ccddcc'>");

gen.writeln("&nbsp;custom chord chart");
gen.writeln(" || " + toon + " tuning || " + lefty + "");
gen.writeln("</td></tr></table>|  by jim cranwell " + nameit + " | &copy " +Date()+ " | goddess 4Ø1 | <a href='http://www.gravityboy.com'>www.gravityboy.com</a>");
gen.writeln("<hr noshade size=1 color=#000088> ");
gen.writeln("<table border cellspacing='09' cellpadding='9'> ");
gen.writeln("<tr>");

for (a=0;a<pr;a++) {
if((a%5==0)&&(a!=0)){gen.writeln("</tr></table><table border cellspacing='09' cellpadding='9'><tr>");}//**ifpr
gen.writeln("<td valign=top nowrap><center>");
gen.write(chordname[a]);
gen.writeln("<br>");
gen.write(chordnotes[a]);

if(chordnotes[a]!="scale"){gen.write("<u>");}
else { gen.write("</center><u>");}

for (j=0;j<prst[a];j++) {
if(j%4==0){gen.writeln("<br>");}//**ifj
gen.write(num[a][j]);}//**forj

gen.write("</u></td>");	}//**fora

gen.writeln("</tr>");
gen.writeln("</table>");
gen.writeln("<center><hr noshade size=1 color=#000088> ");
gen.writeln(" zero slash  Ø ¦  dash, means play an open string, no matter what the fret, ...babette. <br>");

gen.writeln("| tb vb ds kl enk jz no msg " +Date()+ "  |");
gen.writeln(" <a href=javascript:void('') onClick='window.print()'>print this page</a>");
gen.write("</body></html>");
gen.close();

}

	function tunit(){
	var form = document.forms.dym;
	var tuner = form.tuning.selectedIndex;
	var tutext = form.tuning.options[tuner].text;
		toon = tutext;
	//RIGHT = form.hand.selectedIndex;
	
	var tuner   = form.tuning.selectedIndex
	var tutext = form.tuning.options[tuner].text
	toon = tutext
	if (tutext=="GCEA")  { MMM = new Array(7, 0, 4,  9 )};
	if (tutext=="ADF#B") { MMM = new Array(9, 2, 6,  11)};
	if (tutext=="DGBE")  { MMM = new Array(2, 7, 11, 4 )};
	if (tutext=="GDAE")  { MMM = new Array(7, 2, 9,  4 )};
	if (tutext=="CGBD")  { MMM = new Array(0, 7, 11, 2 )};
	if (tutext=="DGBD")  { MMM = new Array(2, 7, 11, 2 )};
	if (tutext=="CGDA")  { MMM = new Array(0, 7, 2,  9 )};
        if (tutext=="CGCD")  { MMM = new Array(0, 7, 0,  2 )};
	if (tutext=="EADG")  { MMM = new Array(4, 9, 2,  7 )}; 

	if (tutext=="ADEA")  { MMM = new Array(9, 2, 4,  9)};
	if (tutext=="CFAD")  { MMM = new Array(0, 5, 9,  2 )};
	if (tutext=="GDAD")  { MMM = new Array(7, 2, 9,  2 )}; 


	//was (RIGHT) enk serious lefty bug

	if((RIGHT % 2)!=0){MMM.reverse();} setune=" "
		for(d=0;d<(4);d++){setune=setune+P[MMM[d]];}
	//document.forms.primax.result8.value =setune;
	GUITAR(); }

	function rever(){MMM.reverse(); setune=" ";lefty = " ";
	RIGHT += 1; 
	if ((RIGHT % 2)!=0){lefty = "lefty"}
		for(d=0;d<(xxx);d++){setune=setune+P[MMM[d]];}
	//document.forms.primax.result8.value =setune;
	GUITAR();}

function whatchord(){tsave=0;
T=new Array(1,0,0,0,1,0,0,1,0,0,0,0);
var form = document.forms.dym;
chrd=form.chords.selectedIndex;
chtext=form.chords.options[chrd].text;

	if (chtext=="maj")  {T[0] = 1; T[4] = 1; T[7]= 1}
	if (chtext=="min")  {T[3] = 1; T[4] = 0}
	if (chtext=="7th" ) {T[10]= 1}
	if (chtext=="m7")   {T[3] = 1; T[10]= 1; T[4]= 0}
	if (chtext=="maj7") {T[11]= 1}
	if (chtext=="6th")  {T[9] = 1}
	if (chtext=="m6th") {T[3] = 1; T[4] = 0; T[9] = 1}
	if (chtext=="aug")  {T[8] = 1; T[7] = 0}
	if (chtext=="dim")  {T[9] =1 ; T[6] =1 ; T[7] =0 ;T[4]=0 ;T[3]=1}
	if (chtext=="sus4") {T[5] = 1; T[4] = 0}
	if (chtext=="7sus4"){T[5] = 1; T[4] = 0; T[10]= 1}
	if (chtext=="9")    {T[0] = 0; T[2] = 1; T[10]= 1}
	if (chtext=="9th")  {T[2] = 1;}
	if (chtext=="m9th") {T[2] = 1;  T[3] = 1; T[4] = 0}
	
	if (chtext=="sus2") {T[2] = 1; T[4] = 0}
	if (chtext=="7sus2"){T[2] = 1; T[4] = 0; T[10]= 1}
	if (chtext=="11th") {T[4] = 0; T[5] = 1; T[10]= 1}
	if (chtext=="13th") { T[7] = 0; T[9] = 1; T[10]= 1}
	
	if (chtext=="flat5")   {T[7] = 0; T[6] = 1}
	if (chtext=="7#9")  {T[7] = 0; T[10] = 1;T[3] = 1}
	if (chtext=="m7b5") {T[3] = 1; T[10]= 1; T[4]= 0;T[7]=0; T[6]= 1}
	if (chtext=="5")    {T[4]= 0}
	
	if (document.forms.dym.xroot.checked==1){T[0]= 0}
	
	if(chtext=="****"){chordx=chtext=sdx; 	T = TT }//user
  chordx=chtext; TT = T; GUITAR(); return T;}


	function rand() {var form = document.forms.dym;
	form.varyL.selectedIndex  = Math.floor ((Math.random() * 24));
	form.notes.selectedIndex  = Math.floor ((Math.random() * 12));
	form.bassnotes.selectedIndex  = Math.floor ((Math.random() * 12));
	form.chords.selectedIndex = Math.floor ((Math.random() * 20)+1);
	form.frets.selectedIndex  = Math.floor ((Math.random() * 16));
	form.openit.checked = 1; whatchord(); }//rnd
	
	function clearitx(){pr=0; titleit="";	num = new Array(); number(-1,4);}

	function savit(){ // chordname[pr]=document.forms.prima.result.value
	QQ = Q;
	if (y != 7){QQ = y -1 };
	num[pr] = new Array();  prst[pr]  = (QQ+1)*4  
	
	if(flagit==1){
	for(b=0; b<((QQ+1)*4) ; b++ ){	
	num[pr][b] = "|";
	if(savirt[b%4]==199){num[pr][b%4] = "×"; }; 
	if((b<4)&&(!G))	{    num[pr][b] = "_"  }
	num[pr][savirt[b%4]]="o";
	if((num2[b%4]==MMM[b%4])&&(G)){  num[pr][b]="¦" ; num[pr][b%4]="ø"  };
		}  //forb
		 } //if flag1
	if(flagit==2){
	for(b=0; b<((QQ+1)*4) ; b++ ){	
	num[pr][b] = "| ";
	if((b<4)&&(!G))	{    num[pr][b] = "__"  }
	if(notal[b]!=199 && document.forms.dym.shownote.checked==1){num[pr][b]=P[notal[b]]; }; 
	if(notal[b]!=199 && document.forms.dym.shownote.checked==0)
	{num[pr][b]=Math.floor(b/4)+FRT; if(Math.floor(b/4)+ FRT < 10){num[pr][b]+= " " } };	
		 } //forb
		 } //if flag2
	if(chordname[pr]){pr = pr + 1;} 
				} // savit

	function fs(fff){rrr=0; if (document.all){document.all.a1.bgColor='#ffffff'}
	if (document.forms.dym.shownote.checked==1){rrr=28; if (document.all){document.all.a1.bgColor='#f7f7f7'}}
	if (fff=='1'){P=new Array("C ","C#","D ","D#","E ","F ","F#","G ","G#","A ","A#","B ","C ","x ")}
	if (fff=='0'){P=new Array("C ","Db","D ","Eb","E ","F ","Gb","G ","Ab","A ","Bb","B ","C ","x ")}
	 P[20] = "x ";  //binaar(ttt); 
				GUITAR(); 
					}




function vboy(V){
ffr=4;eig=8; xxx=4
if(V==0) {L=1;    Y=ffr;    Z=1;}
if(V==1) {L=1;    Y=ffr;    Z=7;}
if(V==2) {L=1;    Y=ffr;    Z=11;}
if(V==3) {L=xxx-1;Y=ffr;    Z=1;}
if(V==4) {L=xxx-1;Y=ffr;    Z=7;}
if(V==5) {L=xxx-1;Y=ffr;    Z=11;}
if(V==6) {L=1;    Y=xxx*eig;Z=1;}
if(V==7) {L=1;    Y=xxx*eig;Z=7;}
if(V==8) {L=1;    Y=xxx*eig;Z=11;}
if(V==9) {L=xxx-1;Y=xxx*eig;Z=1;}
if(V==10){L=xxx-1;Y=xxx*eig;Z=7;}
if(V==11){L=xxx-1;Y=xxx*eig;Z=11;}
if(V==12){L=1;    Y=ffr;    Z=1;}
if(V==13){L=1;    Y=ffr;    Z=7;}
if(V==14){L=1;    Y=ffr;    Z=11;}
if(V==15){L=xxx-1;Y=ffr;    Z=1;}
if(V==16){L=xxx-1;Y=ffr;    Z=7;}
if(V==17){L=xxx-1;Y=ffr;    Z=11;}
if(V==18){L=1;    Y=xxx*eig;Z=1;}
if(V==19){L=1;    Y=xxx*eig;Z=7;}
if(V==20){L=1;    Y=xxx*eig;Z=11;}
if(V==21){L=xxx-1;Y=xxx*eig;Z=1;}
if(V==22){L=xxx-1;Y=xxx*eig;Z=7;}
if(V==23){L=xxx-1;Y=xxx*eig;Z=11;}
VM=1; if(V>11){VM=-1}
return L;Y;Z;VM ;}
			
	function varyit(V) { pxx = chordnotes[pr];
		for(ii=0; ii<13; ii++ ){	//alert("varyit(V)= "+ X) 
		V=document.forms.dym.varyL.selectedIndex;
		V=(V+1)%24; 
		document.forms.dym.varyL.selectedIndex=V;
		GUITAR();  
		if( pxx != chordnotes[pr]){pxx = chordnotes[pr]; ii=25; break};
				}}//varyit    


function GUITAR(){ flagit=1;   // alert("guitar")
	var form = document.forms.dym;
	DDD = D = form.notes.selectedIndex  ;
	var Dtext = form.notes.options[D].text;
	Q = form.varyQ.selectedIndex;
	Q = Q+2  ;
	op = form.openit.checked;
	FRT = form.frets.selectedIndex;
	FRtext = form.frets.options[FRT].text;
	   G      = 0;
	var A      = 0;
	if(FRT)  {G = 1 };	
	if(form.chords.selectedIndex ==0){form.force.checked= 0; form.bass.checked= 0}//user	

	L=1; Y=1; Z=1;
	V = form.varyL.selectedIndex;
	vboy(V);
	Y = Y + Q;  K = 0; W = D-Z; H= 0-Z; 
	savirt = new Array(199,199,199,199); 
	num2   = new Array(88,88,88,88);	
	BA  = new Array(0,0,0,0);	
	var BN  =  form.bassnotes.selectedIndex;
	BN = BN%12
	var BNN    = 0;
	var btext = "";
	TCK    = new Array(0,0,0,0,0,0,0,0,0,0,0,0);
	E = 0 ; //E= E-VM; 
	X=0;
			
  for(jj=0; jj<21; jj++ ){A = 0;   
	for(bb=0; bb<4; bb++ ){	if(savirt[bb]!=199 || BA[bb]==1)  {A = A+1;}}//forbbb	
	
	if((A==4)||(jj>19)){ // alert(TCK + "\n" +T)
		//document.forms.primax.result7.value =jj;
	if (TCK.toString()==T.toString()){
		ttt = new Array(0,0,0,0,0,0,0,0,0,0,0,0);
		for (jc=0;jc<4;jc++) { if (num2[jc]!=88){ttt[num2[jc]] =1 }} ;
		//clearit();  binaar(ttt); 
		//document.forms.primax.res99.value =TT;
					jj=401;  }//mega();
	else {jj=0; //alert("else "+ X)
		savirt = new Array(199,199,199,199); 
		num2   = new Array(88,88,88,88);	
		TCK    = new Array(0,0,0,0,0,0,0,0,0,0,0,0);
		BA = new Array(0,0,0,0); BNN =0; docitx();
		V=document.forms.dym.varyL.selectedIndex;
		V=(V+1)%24; ii=ii+1
		document.forms.dym.varyL.selectedIndex=V;
		vboy(V);	X = X+1; 	
		if( X>18){ BA = new Array(1,1,1,1); jj=401; ii=25; break} 
				}//else
				}//ifA

		S = 0; W=(W+Z)%12; H=(H+Z)%12;  rrr=0;ddd=0
	if (form.shownote.checked==1){rrr=28;ddd=W}

    	 while(S<Y){S=S+1; 
			if(E>Q){E= 0; K=(K+L)%4 }
			if(E<0){E= Q; K=(K+L)%4 }
		
		 if((T[H]==0)){
		  for(c=0; c<12 ; c++ ){
		  W=(W+Z)%12; H=(H+Z)%12; 
		  	if(T[H]==1){c= 401; if(rrr){ddd=W;} }
     				  }} //if[th]==0
		
		 if(savirt[K] != 199 || BA[K]==1){ 
		 for(b=0; b<4; b++ ){K=(K+L)%4;
		 if(savirt[K] == 199 && BA[K]==0){b= 401;} 
		 if(b==5) {S= 401}}}
		
		var F = (MMM[K]+E+FRT)%12 ; 	//**j¤øº°©®¦¡¡·  alert(BA)
	
	if ((form.force.checked==1 || form.bass.checked==1) && BNN==0){
	if (form.force.checked){form.bassnotes.selectedIndex=BN=D%12}//
	E=0; K=0; pm=1;
	if ((RIGHT % 2)!=0){K=3; pm=-1}
	BA[K]=1;
	if (op){
	while (BN != (MMM[K])%12 && BN != (MMM[K]+E+FRT)%12 && K<4){E++;
	if(E>Q){E=0; notead[K]=P[13]; BA[K]=1; K=K+pm;}	}}//while
	else{
	while (BN != (MMM[K]+E+FRT)%12 && K<4){E++; 
	if(E>Q){E=0; notead[K]=P[13]; BA[K]=1; K=K+pm;}	}//while
	}//else
	if (K<4){
	for(c=0; c<15; c++ ){
	if (BN==(W+c)%12){W=(W+c)%12; H=(H+c)%12; c=401; }  }//for
	BA[K]=1;
	if (BN!=D%12){btext = "/"+P[W]}; F = W }//ifK
	//document.forms.primax.res6.value =BA	;	
			BNN = 1;   }//bass
	
	if((W==MMM[K])&&(savirt[K]==199 )&&(op)){
	for(d=0; d<(y); d++){document.images[d*4+K+fix].src = imageDB[27].src;};
	notead[K] = P[W];    
					// H was ddd -new
	if (form.shownote.checked==1){document.images[K+fix].src = imageDB[rrr+H+13].src}
	if (form.shownote.checked==0){document.images[K+fix].src = imageDB[0].src}
	
	savirt[K]=K; num2[K]=W ; 
	if (T[H]==1){TCK[H]=1} ;  S=401  }//
 	
	if((W==F)&&(savirt[K]==199)){ docitjen(); 
	savirt[K]=((E)*4+K); num2[K]=W; notead[K]= P[W];
	if (T[H]==1){TCK[H]=1} ; S=401} //ifw==f 
		E= E+VM;}//while S
				}//forj
	
	if(chtext=="maj"){chtext=""};	prr=" "
	for(d=0; d<4 ; d++ ){prr = prr + notead[d]+ " " }
	
	//document.forms.primax.pichord.value = 
	chordname[pr] = document.forms.prima.result.value =" "+P[D]+""+chtext+btext+" "+"fr-"+ FRtext ;
	chordnotes[pr]= document.forms.duece.result2.value = prr;
	 docitx();	
				}//**guitar

		//   23=blank  24=fret  25=xxx  26=xxxf  27=blue	

	function docitx(){
	for(d=0; d<4; d++){ notead[d] = P[13]; 
		if(savirt[d]==199){ // num2[d]==88;
	for(ee=0; ee<y; ee++){
		if(ee<y){document.images[ee*4+d+fix].src = imageDB[54].src }
	   	// if(ee>y){document.images[ee*4+d+fix].src = imageDB[23].src}
		}//foree
		document.images[d+fix].src  = imageDB[25].src;	
		if(G){document.images[d+fix].src  = imageDB[26].src;	}
		}//if
		}//for
		}//doc

	function docitjen(){   //alert()
		for(d=0; d<(y); d++ ){
	if ((d>0 || G)&&(d<y)){document.images[d*4+K+fix].src = imageDB[24].src;}
		// if(DDD>y+1){document.images[d*4+K+fix].src = imageDB[23].src;}
		}//ford
	if (!G)  {document.images[K+fix].src   = imageDB[23].src;}
	
	//rrr equals shownotes
	//if (!rrr && E==0){document.images[(E)*4+K+fix].src = imageDB[H+38].src;}
		
	//if (rrr) {document.images[(E)*4+K+fix].src = imageDB[(MMM[K]+E+FRT)%12+rrr].src;}
	if (rrr && E == 0) {document.images[(E)*4+K+fix].src = imageDB[(H)%12+rrr+13].src;}
	if (rrr && E > 0 || G)  {document.images[(E)*4+K+fix].src = imageDB[(H)%12+rrr].src;}
	
	if (!rrr){document.images[(E)*4+K+fix].src = imageDB[E+FRT].src;}
		notead[K]= P[W];		}//docitjen
	

function number(z,FRT) {
	FR = Math.floor(z/4) + FRT;
	//document.forms.primax.result7.value =P[(MMM[z%4]+FR)%12];
		}//number
