function max(a, b, c)
{
	if( a > b && a > c )
		return a;
	else if( b > a && b > c )
		return b;
	else
		return c;
}
function min(a, b, c)
{
	if( a < b && a < c )
		return a;
	else if( b < a && b < c )
		return b;
	else
		return c;
}



function rgb2hsv(c) {
var r = c[0] / 255;
var g = c[1] / 255;
var b = c[2] / 255;

var v = max(r,g,b);
var t = min(r,g,b);
var s = ( v == 0 ) ? 0 : (v-t)/v;
if ( s == 0 )
	var h=-1;
 else {
  var a = v-t;
  var cr=(v-r)/a;
  var cg=(v-g)/a;
  var cb=(v-b)/a;
  var  h=(r==v)?cb-cg:((g==v)?2+cr-cb:((b==v)?h=4+cg-cr:0));
  h=60*h;
 }
 h=(h<0)?h+360:h;
 return new Array(Math.round(h),Math.round(s*100),Math.round(v*100));
}

function hsv2rgb(c)
{
    var h = c[0];
    var s = c[1] / 100;
    var v = c[2] / 100;

    if (s == 0) {
        var r = g = b = v;
     return new Array(Math.round(r*255), Math.round(g*255), Math.round(b*255));
    } else {
        h = h / 360 * 6;
        var i = Math.floor(h);
        var f = h - i;
        v *= 255;
        var p = Math.floor(v * (1 - s));
        var q = Math.floor(v * (1 - s * f));
        var t = Math.floor(v * (1 - s * (1 - f)));
        switch(i) {
            case 0:
                r = v;
                g = t;
                b = p;
                break;

            case 1:
                r = q;
                g = v;
                b = p;
                break;

            case 2:
                r = p;
                g = v;
                b = t;
                break;

            case 3:
                r = p;
                g = q;
                b = v;
                break;

            case 4:
                r = t;
                g = p;
                b = v;
                break;

            default:
                r = v;
                g = p;
                b = q;
                break;
        }
    }
    return new Array(Math.round(r), Math.round(g), Math.round(b));
}

function hex2rgb(hex)
{
 return new Array(
  parseInt(hex.substr(0,2),16),
  parseInt(hex.substr(2,2),16),
  parseInt(hex.substr(4,2),16));
}

function rgb2hex(c)
{
 var h = new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
 return h[Math.floor(c[0] / 16)] + h[c[0] % 16]
 		+ h[Math.floor(c[1] / 16)] + h[c[1] % 16]
 		+ h[Math.floor(c[2] / 16)] + h[c[2] % 16];
}

function calcbackcolor(hex)
{
  a = rgb2hsv(hex2rgb(hex));
  a[1]=a[1] == 0 ? a[1] : Math.max(0,a[1]-20);
  a[2]=Math.min(100,a[2]+20);
  return rgb2hex(hsv2rgb(a));
}
function calcbordercolor(hex)
{
  a = rgb2hsv(hex2rgb(hex));
  a[1]=a[1] == 0 ? a[1] : Math.min(100,a[1]+20);
  a[2]=a[2] < 30 ? Math.min(100,a[2]+30) : Math.max(0,a[2]-20);
  return rgb2hex(hsv2rgb(a));
}
