
var roboguru_stringImages = new Array();
var roboguru_offsetX = 10;
var roboguru_offsetY = 10;
var roboguru_scaleX = 35.0*1.5;
var roboguru_scaleY = 7.5*1.5;

var roboguru_fingers = new Array();
var roboguru_barre = null;


function roboguru_drawFretBoard()
{
	var x;
	for (var i=0; i<16; i++)
	{
		x = roboguru_offsetX + roboguru_getFretX(i)*roboguru_scaleX
		roboguru_drawVerticalLine(x, roboguru_offsetY, 5* roboguru_scaleY + 1);
	}
	var length = x - roboguru_offsetX + 1;
	
	for (var i=0; i<6; i++)
	{
		var y = roboguru_offsetY + i * roboguru_scaleY;
		var im = roboguru_drawHorizontalLine(roboguru_offsetX, y, length);
		roboguru_stringImages[i] = im;
	}
	//roboguru_drawFinger(3,3);

	roboguru_drawChord(roboguruChords['C']['C'][0]);
		
}

function roboguru_drawChord(variant)
{
	for(var i=0; i<6; i++)
		roboguru_removeImage(roboguru_fingers[i]);
	roboguru_removeImage(roboguru_barre);
		
	for (var i=0; i<variant.length; i++)
	{
		if (variant[i] > 0)
			roboguru_fingers[i] = roboguru_drawFinger(i, variant[i]);			
		else 
			roboguru_fingers[i] = null;
			
		if (variant[i] == -1)
			roboguru_makeStringGray(i);			
		else
			roboguru_makeStringBlack(i);
	}
	if (roboguru_isBarre(variant))
	{
		var barreNum = roboguru_getBarreNum(variant);
		roboguru_barre = roboguru_drawBarre(barreNum);
	}
	else
		roboguru_barre = null;
}



function roboguru_isBarre(variant)
{			
	var counter = 0;
	for (var i=0; i<6; i++)
	{
		if (variant[i] > 0)
			counter++;
	}
	if (counter > 4)
		return true;
	else
		return false;
}

function roboguru_getBarreNum(variant)
{
	var min = 100;
	for (var i=0; i<6; i++)
	{
		if (variant[i] > 0 && variant[i] < min)
			min = variant[i];
	}
	return min;
	
}


function roboguru_drawFinger(string, fret)
{
	var x = roboguru_offsetX + roboguru_getFretX(fret)*roboguru_scaleX - 2 - 5;
	var y = roboguru_offsetY + string*roboguru_scaleY - 2;
	var	im = roboguru_createImage(x, y, "/images/finger.gif");	
	return im;
}


function roboguru_drawBarre(i)
{
	var x = roboguru_getFretX(i)*roboguru_scaleX + roboguru_offsetX - 2 - 5;
	var y = roboguru_offsetY;
	var length =  5*roboguru_scaleY + 1;
	var im = roboguru_drawVerticalLine(x, y, length);
	im.width = 5;
	return im;
}

function roboguru_getFretX(i)
{
	return i/Math.sqrt(0.05*i+1);
}

function roboguru_makeStringGray(stringNum)
{
	var im = roboguru_stringImages[stringNum];
	if (!im)
		return;	
	if (im.src == "/images/graypixel.gif")
		return;		
	var width = im.width;
	var height = im.height;
	im.src = "/images/graypixel.gif";
	im.width = width;
	im.height = height;
}

function roboguru_makeStringBlack(stringNum)
{
	var im = roboguru_stringImages[stringNum];
	if (!im)
		return;
	if (im.src == "/images/blackpixel.gif")
		return;
	var width = im.width;
	var height = im.height;
	im.src = "/images/blackpixel.gif";
	im.width = width;
	im.height = height;
}





function roboguru_drawHorizontalLine(x, y, length)
{
	var	im = roboguru_createImage(x, y, "/images/blackpixel.gif");
	im.width = length;
	im.height = 1;
	return im;
}


function roboguru_drawVerticalLine(x, y, length)
{
	var	im = roboguru_createImage(x, y, "/images/blackpixel.gif");
	im.width = 1;
	im.height = length;
	return im;
}




function roboguru_createImage(x, y, src)
{
	var container = document.getElementById('robogurufret');
	var containerX = roboguru_detectXPosition(container);
	var containerY = roboguru_detectYPosition(container);
	
	var	im = new Image();
	im.src = src;
	im.style.left = containerX + x + 'px';
	im.style.top = containerY + y + 'px';	
	im.style.position = 'absolute';
	im.style.zindex = 3;
	container.appendChild(im);
	
	
	return im;	
}


function roboguru_removeImage(im)
{
	var container = document.getElementById('robogurufret');
	if (im)
	{
		container.removeChild(im);
	}
}



function roboguru_detectXPosition(elem)
{
	var pos = elem.offsetLeft;

	while (elem.offsetParent != null) 
	{
		elem = elem.offsetParent;
		pos += elem.offsetLeft;
		if (elem.tagName == 'BODY') 
			break;
	}
	return pos;
}


function roboguru_detectYPosition(elem)
{
	var pos = elem.offsetTop;

	while (elem.offsetParent != null) 
	{
		elem = elem.offsetParent;
		pos += elem.offsetTop;
		if (elem.tagName == 'BODY') 
			break;
	}
	return pos;
}