

function baseConverter (number,ob,nb)
	{
	number = number + "";
	number = number.toUpperCase();

	var list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var dec = 0;

	for (var i=0; i<=number.length; i++)
		{
		dec += (list.indexOf(number.charAt(i))) * (Math.pow(ob , (number.length - i - 1)));
		}

	number = "";
	var magnitude = Math.floor((Math.log(dec))/(Math.log(nb)));

	for (var i = magnitude; i >= 0; i--)
		{
		var amount = Math.floor(dec/Math.pow(nb,i));
		number = number + list.charAt(amount); 
		dec -= amount*(Math.pow(nb,i));
		}

	if(number.length==0)number=0;
	return number;
	}




// Converts a RGB color to HSV

function toHSV(rgbColor)
	{
	rgbColor = rgbColor.replace('#','');

	red   = baseConverter(rgbColor.substr(0,2),16,10);
	green = baseConverter(rgbColor.substr(2,2),16,10);
	blue  = baseConverter(rgbColor.substr(4,2),16,10);

	if (red.length  ==0) red  =0;
	if (green.length==0) green=0;
	if (blue.length ==0) blue =0;

	red	  = red  /255;
	green = green/255;
	blue  = blue /255;

	maxValue = Math.max(red,green,blue);
	minValue = Math.min(red,green,blue);

	var hue = 0;

	if(maxValue==minValue)
		{
		hue = 0;
		saturation=0;
		}
	  else
		{
			  if (red   == maxValue)	{hue =	   (green - blue ) / (maxValue-minValue)/1;}
		else  if (green == maxValue)	{hue = 2 + (blue  - red  )/1 / (maxValue-minValue)/1;}
		else  if (blue  == maxValue)	{hue = 4 + (red   - green) / (maxValue-minValue)/1;	}

		saturation = (maxValue-minValue) / maxValue;
		}

	hue = hue * 60; 
	valueBrightness = maxValue;

	if(valueBrightness/1<0.5){
		//saturation = (maxValue - minValue) / (maxValue + minValue);
	}
	if(valueBrightness/1>= 0.5){
		//saturation = (maxValue - minValue) / (2 - maxValue - minValue);
	}

	returnArray = [hue,saturation,valueBrightness];
	return returnArray;
	}




function toRgb(hue,saturation,valueBrightness)
	{
	Hi = Math.floor(hue / 60);

	if(hue==360)Hi=0;

	f = hue/60 - Hi;
	p = (valueBrightness * (1- saturation)).toPrecision(2);
	q = (valueBrightness * (1 - (f * saturation))).toPrecision(2);
	t = (valueBrightness * (1 - ((1-f)*saturation))).toPrecision(2);

	switch(Hi)
		{
		case 0:
			red   = valueBrightness;
			green = t;
			blue  = p;	
			break;
		case 1:
			red   = q;
			green = valueBrightness;
			blue  = p;
			break;
		case 2:
			red   = q;
			green = valueBrightness;
			blue  = t;
			break;
		case 3:
			red   = p;
			green = q;;
			blue  = valueBrightness;
			break;
		case 4:
			red   = t;
			green = p;
			blue  = valueBrightness;
			break;
		case 5:
			red   = valueBrightness;
			green = p;
			blue  = q;
			break;
		}

	if(saturation==0)
		{
		red   = valueBrightness;
		green = valueBrightness;
		blue  = valueBrightness;
		}

	red  *=255;
	green*=255;
	blue *=255;

	red	  = Math.round(red	);
	green = Math.round(green);
	blue  = Math.round(blue	);

	red	  = baseConverter(red  ,10,16);
	green = baseConverter(green,10,16);
	blue  = baseConverter(blue ,10,16);

	red   = red   + "";
	green = green + "";
	blue  = blue  + "";

	while (red.length  <2)	{red   = "0" + red	;}
	while (green.length<2)	{green = "0" + green;}
	while (blue.length <2)	{blue  = "0" + blue	;}

	rgbColor = "#" + red + "" + green + "" + blue;
	return rgbColor.toUpperCase();
}




function findColorByDegrees(rgbColor,degrees)
	{
	rgbColor = rgbColor.replace('#','');
	myArray = toHSV(rgbColor);
	myArray[0]+=degrees;

	if (myArray[0]>=360)	myArray[0]-=360;
	if (myArray[0]<   0)	myArray[0]+=360;

	return toRgb(myArray[0],myArray[1],myArray[2]);
	}




function findColorByBrightness(rgbColor,brightness)
	{
	rgbColor = rgbColor.replace('#','');
	myArray = toHSV(rgbColor);

	myArray[2]+=brightness/100;

	if (myArray[2]>1)	myArray[2]=1;
	if (myArray[2]<0)	myArray[2]=0;

	myArray[1]+=brightness/100;

	if (myArray[1]>1)	myArray[1]=1;
	if (myArray[1]<0)	myArray[1]=0;

	return toRgb(myArray[0],myArray[1],myArray[2]);
	}



