function Color ( red, green, blue )
{
	this.r = red;
	this.g = green;
	this.b = blue;
}

function toHex(v) { v=Math.round(Math.min(Math.max(0,v),255)); return("0123456789ABCDEF".charAt((v-v%16)/16)+"0123456789ABCDEF".charAt(v%16)); }
function rgb2hex( r, g, b ) 
{ 
	if ( typeof g != "undefined" )	return( toHex( r ) + toHex( g ) + toHex( b ) );
	else							return( toHex( r[ 0 ] ) + toHex( r[ 1 ] ) + toHex( r[ 2 ] ) );
}
function hsv2hex(h) { return(rgb2hex(hsv2rgb(h))); }	

function hsv2rgb(r) { // easyrgb.com/math.php?MATH=M21#text21

    var R,B,G,S=r[1]/100,V=r[2]/100,H=r[0]/360;

    if(S>0) { if(H>=1) H=0;

        H=6*H; F=H-Math.floor(H);
        A=Math.round(255*V*(1.0-S));
        B=Math.round(255*V*(1.0-(S*F)));
        C=Math.round(255*V*(1.0-(S*(1.0-F))));
        V=Math.round(255*V); 

        switch(Math.floor(H)) {

            case 0: R=V; G=C; B=A; break;
            case 1: R=B; G=V; B=A; break;
            case 2: R=A; G=V; B=C; break;
            case 3: R=A; G=B; B=V; break;
            case 4: R=C; G=A; B=V; break;
            case 5: R=V; G=A; B=B; break;

        }

        return([R?R:0,G?G:0,B?B:0]);

    }
    else return([(V=Math.round(V*255)),V,V]);

}



function GetHexaForColor ( r, g, b )
{
	var str_color = "";
	
	// rouge
	if ( r < 16 ) str_color += "0"
	str_color += DecToHex ( r );
	if ( g < 16 ) str_color += "0"
	str_color += DecToHex ( g );
	if ( b < 16 ) str_color += "0"
	str_color += DecToHex ( b );
	
	return str_color;
}


// Fonction qui renvoie une
function SetColorPercentLuminosity ( color , percent_luminosite )
{
	var returnColor = new Color ( 0, 0, 0 );
	
	returnColor.r = parseInt ( color.r * percent_luminosite / 100 )
	returnColor.g = parseInt ( color.g * percent_luminosite / 100 )
	returnColor.b = parseInt ( color.b * percent_luminosite / 100 )
	
	return returnColor;
}

function LightenColor( color, percent_saturation )
{
	var returnColor = new Color ( 0, 0, 0 );
	
	returnColor.r = parseInt ( color.r + (255 * percent_saturation / 100) )
	returnColor.g = parseInt ( color.g + (255 * percent_saturation / 100) )
	returnColor.b = parseInt ( color.b + (255 * percent_saturation / 100) )
	
	return returnColor;
}
