//============================================================================//
// Palette RGB - Sub0 - 02/06/04
//============================================================================//
var iev=document.all;
if(!iev)var mov=document.getElementById;
if(!mov&&!iev)alert("Application incompatible avec votre navigateur!");

var ColoPosX,ColoPosY;
var LumiPosX,LumiPosY;

var MouseButton=false;
var MouseInColo=false;
var MouseInLumi=false;


//============================================================================//
// Supprime le "px" en fin de chaîne -> nombre
//============================================================================//
function nbr(nombrepx){
	if(nombrepx){
		if(nombrepx.length>=3)
			if(nombrepx.substr(nombrepx.length-2,2)=="px")
				return (nombrepx.substr(0,nombrepx.length-2))*1;
		return nombrepx*1;}
	return 0*1;
}


//============================================================================//
// Fonctions de convertions standars DEC <-> HEX
//============================================================================//
function DecToHex(dec){
	return ((hex=dec.toString(16).toUpperCase()).length<2)?"0"+hex:hex; 
}

//============================================================================//
function HexToDec(hex){
	return parseInt(hex,16);
}


//============================================================================//
// Test et ajuste la valeur de l'édition
//============================================================================//
function TestVal(obj,maxval){
	if(obj.value==""||maxval<=0)return false;
	var ishexa=false;
	var objfiltre="#ABCDEF";
	for(var n=0;n<obj.value.length;n++)
		if(InFiltre(obj.value.substr(n,1).toUpperCase(),objfiltre))ishexa=true;
	if(ishexa){
		if(obj.value.substr(0,1)!="#")
			var curval=HexToDec(obj.value);else
			var curval=HexToDec(obj.value.substr(1,obj.value.length-1));	
	}else var curval=obj.value;
	if(curval==""||curval<=0)curval=0;
	if(curval>=maxval)curval=maxval;
	if(ishexa)obj.value="#"+DecToHex(curval);else obj.value=curval;
}


//============================================================================//
// Sous-routine du filtre dynamique -> onkeyup
//============================================================================//
function InFiltre(ch,stfiltre){
	var val=false;
	for(var x=0;x<stfiltre.length;x++)
		if(stfiltre.substr(x,1)==ch){val=true;break;}
	return val; 
}


//============================================================================//
// Filtre dynamique paramètrable pour la saisie au clavier -> onkeyup
//============================================================================//
function FiltreKey(obj,ishexa,maxval){
	var error=false;
	var newtxt="";
	var objfiltre;
	if(ishexa&&obj.value.substr(0,1)!="#")obj.value="#"+obj.value;
	if(ishexa)objfiltre="0123456789ABCDEF";else objfiltre="0123456789";
	if(ishexa)var dep=1;else var dep=0;
	for(n=dep;n<obj.value.length;n++)
		if(InFiltre(obj.value.substr(n,1).toUpperCase(),objfiltre))
			newtxt=newtxt+obj.value.substr(n,1).toUpperCase();else error=true;
	if(error){	
		obj.value=newtxt;	
		if(ishexa&&obj.value.substr(0,1)!="#")obj.value="#"+obj.value;
		TestVal(obj,maxval);
		return false; 
	}
	TestVal(obj,maxval);
	return true;
}


//============================================================================//
// Retourne la valeur du scroll
//============================================================================//
function GetScrollX(){
	if(mov)return nbr(document.body.scrollLeft); 
	if(document.documentElement.scrollLeft)
		return nbr(document.documentElement.scrollLeft);else 
		return nbr(document.body.scrollLeft); 
}

//============================================================================//
function GetScrollY(){
	if(mov)return nbr(document.body.scrollTop);
	if(document.documentElement.scrollTop)
		return nbr(document.documentElement.scrollTop);else 
		return nbr(document.body.scrollTop); 
}


//============================================================================//
// Détection des coordonnées de la souris
//============================================================================//
function MyMousePosX(evenement){
	if(mov)return nbr(evenement.clientX)+GetScrollX();
	return nbr(window.event.x)+GetScrollX()-2;
}

//============================================================================//
function MyMousePosY(evenement){
	if(mov)return nbr(evenement.clientY)+GetScrollY();
	return nbr(window.event.y)+GetScrollY()-2;
}


//============================================================================//
// Souris en mouvement
//============================================================================//
function Position(evenement){

	//========================================================================//
	// Coordonnées de la souris sur la palette (div "colo")
	//========================================================================//
	ColoPosX=nbr(MyMousePosX(evenement))-
		nbr(document.getElementById("base").style.left)-
		nbr(document.getElementById("colo").style.left);
	ColoPosY=nbr(MyMousePosY(evenement))-
		nbr(document.getElementById("base").style.top)-
		nbr(document.getElementById("colo").style.top);

	if(ColoPosX>=0&&ColoPosX<=nbr(document.getElementById("colo").offsetWidth)&&
	   ColoPosY>=0&&ColoPosY<=nbr(document.getElementById("colo").offsetHeight)){		
		if(!MouseInLumi)MouseInColo=true;}else{
		if(!MouseButton)MouseInColo=false;}

	if(MouseInColo){
		if(ColoPosX<=0)ColoPosX=0;
		if(ColoPosX>=nbr(document.getElementById("colo").offsetWidth))
			ColoPosX=nbr(document.getElementById("colo").offsetWidth);
		if(ColoPosY<=0)ColoPosY=0;
		if(ColoPosY>=nbr(document.getElementById("colo").offsetHeight))
			ColoPosY=nbr(document.getElementById("colo").offsetHeight);}

	//========================================================================//
	// Coordonnées de la souris sur la barre de luminosité (div "lumi")   
	//========================================================================//
	LumiPosX=nbr(MyMousePosX(evenement))-
		nbr(document.getElementById("base").style.left)-
		nbr(document.getElementById("lumi").style.left);
	LumiPosY=nbr(MyMousePosY(evenement))-
		nbr(document.getElementById("base").style.top)-
		nbr(document.getElementById("lumi").style.top);  
	
	if(LumiPosX>=0&&LumiPosX<=nbr(document.getElementById("lumi").offsetWidth)&&
	   LumiPosY>=0&&LumiPosY<=nbr(document.getElementById("lumi").offsetHeight)){		
		if(!MouseInColo)MouseInLumi=true;}else{
		if(!MouseButton)MouseInLumi=false;}

	if(MouseInLumi){
		if(LumiPosX<=0)LumiPosX=0;
		if(LumiPosX>=nbr(document.getElementById("lumi").offsetWidth))
			LumiPosX=nbr(document.getElementById("lumi").offsetWidth);
		if(LumiPosY<=0)LumiPosY=0;
		if(LumiPosY>=nbr(document.getElementById("lumi").offsetHeight))
			LumiPosY=nbr(document.getElementById("lumi").offsetHeight);}

	//========================================================================//
	if(MouseButton&&(MouseInColo||MouseInLumi))MouseDown();
}


//============================================================================//
// Bouton gauche de la souris appuyé
//============================================================================//
function MouseDown(){
	MouseButton=true;
	//========================================================================//
	// Souris sur la palette (div "colo")
	//========================================================================//
	if(MouseInColo){
		document.getElementById("edte").value=Math.round(
			(240/nbr(document.getElementById("colo").offsetWidth))*ColoPosX);
		document.getElementById("edsa").value=Math.round(Math.abs(240-
			(240/nbr(document.getElementById("colo").offsetHeight))*ColoPosY));
		toRGB();return true;}

	//========================================================================//
	// Souris sur la barre de luminosité (div "lumi")   
	//========================================================================//
	if(MouseInLumi){
		document.getElementById("edlu").value=Math.round(Math.abs(240-
			(240/nbr(document.getElementById("lumi").offsetHeight))*LumiPosY));
		if(nbr(document.getElementById("edlu").value==119))
			document.getElementById("edlu").value=120;
		toRGB();return true;}

	//========================================================================//
}


//============================================================================//
// Bouton gauche de la souris relaché
//============================================================================//
function MouseUp(){
	MouseButton=false;
	MouseInColo=false;
	MouseInLumi=false;
}


//============================================================================//
// Affichage de la couleur
//============================================================================//
function AffColor(){
	//var colh="#"+DecToHex(document.getElementById("edcr").value*1)+ AFFICHE LE # des la couleur hexa
	var colh=""+DecToHex(document.getElementById("edcr").value*1)+
				 DecToHex(document.getElementById("edcg").value*1)+
				 DecToHex(document.getElementById("edcb").value*1);
	document.getElementById("bloc").style.backgroundColor=colh;
	document.getElementById("edch").value=colh;

	//========================================================================//
	// Positionne la croix en fonction de la teinte et de la saturation
	//========================================================================//
	document.getElementById("cros").style.top=Math.round(
		Math.abs(240-document.getElementById("edsa").value)/240*
		nbr(document.getElementById("colo").offsetHeight)+
		nbr(document.getElementById("colo").style.top)-
		nbr(document.getElementById("cros").offsetHeight)-
		nbr(document.getElementById("cros").offsetHeight)/2-1);
	document.getElementById("cros").style.left=Math.round(
		document.getElementById("edte").value/240*
		nbr(document.getElementById("colo").offsetWidth)+
		nbr(document.getElementById("colo").style.left)-
		nbr(document.getElementById("cros").offsetWidth)-
		nbr(document.getElementById("cros").offsetWidth)/2-1);

	//========================================================================//
	// Positionne le curseur de la luminosité
	//========================================================================//
	document.getElementById("cur2").style.top=Math.round(
		Math.abs(240-document.getElementById("edlu").value)/240*
		nbr(document.getElementById("lumi").offsetHeight)+
		nbr(document.getElementById("lumi").style.top)-5);

	//========================================================================//
}


//============================================================================//
// Affecte la couleur définie dans l'édit hexa
//============================================================================//
function HexColor(colvalue){
	if(!colvalue)var colh=document.getElementById("edch").value;else colh=colvalue;
	if(colh.length<=6)return false;
	document.getElementById("edcr").value=HexToDec(colh.substr(1,2)); 
	document.getElementById("edcg").value=HexToDec(colh.substr(3,2)); 
	document.getElementById("edcb").value=HexToDec(colh.substr(5,2)); 
	toHSL();
}


//============================================================================//
// Code converted from vb --> http://abstractvb.com/code.asp?A=927 
//============================================================================//
function toHSL(){
	var edte,edsa,edlu; 
	var edcr=document.getElementById("edcr").value/255; 
	var edcg=document.getElementById("edcg").value/255; 
	var edcb=document.getElementById("edcb").value/255; 
	var Min=Math.min(edcr,Math.min(edcg,edcb));
	var Max=Math.max(edcr,Math.max(edcg,edcb));
	edlu=(Max+Min)/2; 
	if(Max==Min){edte=0;edsa=0;}else{
		if(edlu<0.5)edsa=(Max-Min)/(Max+Min);else edsa=(Max-Min)/(2-Max-Min);
		switch(Max){
			case edcr:edte=(edcg-edcb)/(Max-Min);break; 
			case edcg:edte=2+(edcb-edcr)/(Max-Min);break; 
			case edcb:edte=4+(edcr-edcg)/(Max-Min);break;}}
	edte=(edte*240)/6;if(edte<0)edte=edte+240;edsa*=240;edlu*=240; 
	document.getElementById("edte").value=Math.round(edte); 
	document.getElementById("edsa").value=Math.round(edsa); 
	document.getElementById("edlu").value=Math.round(edlu); 	 
	AffColor();
}


//============================================================================//
// Code converted from vb --> http://abstractvb.com/code.asp?A=926 
//============================================================================//
function toRGB(){
	var edcr,edcg,edcb,temp1,temp2,temp3=new Array(); 
	var edte=document.getElementById("edte").value/240; 
	var edsa=document.getElementById("edsa").value/240; 
	var edlu=document.getElementById("edlu").value/240; 
	if(edsa==0){edcr=edlu;edcg=edlu;edcb=edlu;}else{
		if(edlu<0.5)temp2=edlu*(1+edsa);else temp2=edlu+edsa-edlu*edsa; 
		temp1=2*edlu-temp2; 
		temp3[0]=edte+1/3; 
		temp3[1]=edte; 
		temp3[2]=edte-1/3;
		for(iLoop=0;iLoop<3;iLoop++){
			if(temp3[iLoop]<0)temp3[iLoop]=temp3[iLoop]+1; 
			if(temp3[iLoop]>1)temp3[iLoop]=temp3[iLoop]-1;
			if(6*temp3[iLoop]<1)temp3[iLoop]=temp1+(temp2-temp1)*6*temp3[iLoop];else 
				if(2*temp3[iLoop]<1)temp3[iLoop]=temp2;else 
					if(3*temp3[iLoop]<2)temp3[iLoop]=temp1+(temp2-temp1)*((2/3)-temp3[iLoop])*6;else 
						temp3[iLoop]=temp1;}
		edcr=temp3[0];edcg=temp3[1];edcb=temp3[2];}
	edcr=edcr*255;edcg=edcg*255;edcb=edcb*255;	 
	document.getElementById("edcr").value=Math.round(edcr); 
	document.getElementById("edcg").value=Math.round(edcg); 
	document.getElementById("edcb").value=Math.round(edcb); 
	AffColor();
}


//============================================================================//
// Ajuste la position verticale (+1) des edits pour IE
//============================================================================//
function AdjustEditTop(){
	if(!iev)return false;
	var edname=new Array("edte","edsa","edlu","edcr","edcg","edcb","edch");
	for(var i=0;i<7;i++)
		document.getElementById(edname[i]).style.top=
			(nbr(document.getElementById(edname[i]).style.top)+1*1)+"px";
}


//============================================================================//
// INITIALISATION
//============================================================================//
document.onmousemove = Position;
document.onmousedown = MouseDown;
document.onmouseup   = MouseUp;


//============================================================================//
