 

 


var curcol;
var hexchars;
var currgb;
var curhsl;
var cursorPos;
var cursorImg;
var curgradient = 0;
var maxgradient = 6;
var isbg = false;
var fav = 0;

function encadre(elem)
{
	deencadre();
	elem.style.border = "5 solid #000000";
		
}

function deencadre()
{
	for(var i = 1; i <= 6; i++)
	{
		document.getElementById("gradient-" + i	).style.border = "";
		
	}
}


function initStuff()
{
	var s = location.toString();
	var h = document.getElementById('header');
	var t = document.getElementById('couleurs-fav');

	
		isbg = true;
	
	
		curgradient = 1;

	if (t.tBodies[0] && t.tBodies[0].rows)
	{
		favarray = getcookie('couleurs-fav', '').split('|');
	
		for (var i = 0; i < t.tBodies[0].rows.length; i++)
		{
			for (var j = 0; j < t.tBodies[0].rows[i].cells.length; j++)
			{
				var c = (t.tBodies[0].rows.length * i) + j;
				
				if (favarray && favarray[c])
					t.tBodies[0].rows[i].cells[j].style.backgroundColor = favarray[c];
				else
				{			
					var r = Math.floor(Math.random() * 255);
					var g = Math.floor(Math.random() * 255);
					var b = Math.floor(Math.random() * 255);
					
					t.tBodies[0].rows[i].cells[j].style.backgroundColor = 'rgb(' + r + ', ' + g + ', ' + b + ')';
				}
			}
		} 
	}

	if (isbg && !curgradient)
		h.firstChild.data = 'Background Text Fading Generator';
	else if (isbg && curgradient)
		h.firstChild.data = 'Background Text Fading Generator';
	else if (!isbg && curgradient)
		h.firstChild.data = 'Text Fading Generator';
	
	curcol    = 'FF0000';
	hexchars  = '0123456789ABCDEF';
	currgb    = [fromhex(curcol.substr(0, 2)), fromhex(curcol.substr(2, 2)), fromhex(curcol.substr(4, 2))];
	curhsl    = RGBtoHSL(currgb[0], currgb[1], currgb[2]);
	cursorPos = 1;
	cursorImg = new Image();
	cursorImg.src = "pics/cursor.gif";
	
	addSlider();
	setCursor(cursorPos);
	setCol(curcol);
	
	document.getElementById('colorpic').onmousedown = setFromImageHack;
	document.getElementById('colorpic').onmouseup   = unsetFromImage;
	document.getElementById('slider').onmousedown   = setFromSliderHack;
	document.getElementById('slider').onmouseup     = unsetFromSlider;
	document.getElementById('htmlcolor').onchange   = setFromHTMLHack;
	
	if (curgradient)
	{
		document.getElementById('gradient').style.display = 'block';
		for (var i = 1; i <= 6; i++)
		{
			var h = document.getElementById('gradient-' + i + '-html');
			var c = document.getElementById('gradient-' + i + '-cell');
			
			if (h && c)
			{
				c.onclick  = selectGradientHack;
				h.onchange = setFromHTMLGradient;
			}			
		}
		var nb = document.getElementById('nb_couleurs');
		chooseGradientType(nb.selectedIndex + 2);
	}
	
}

window.onload = initStuff;

function setFromHTMLGradient(e)
{
	var n = this.id;
	
	n = n.substr(9, 1);
	
	if (n > maxgradient)
		chooseGradientType(n);
	selectGradient(n);
	setFromHTML(this.value);
	
	return false;
}

function setFromHTMLHack(e)
{
	setFromHTML(this.value);
	
	return false;
	
}

function selectGradientHack(e)
{
	var n = this.id;
	
	n = n.substr(9, 1);
	if (n > maxgradient)
		chooseGradientType(n);
	selectGradient(n);
	
	return false;
	
}

function selectGradient(newGradient)
{
	document.getElementById('gradient-' + curgradient + '-cell').className = 'colorcell';
	document.getElementById('gradient-' + curgradient + '-html').className = 'colorinput';
	
	curgradient = newGradient;
	
	
	document.getElementById('gradient-' + curgradient + '-cell').className = 'colorcell active';
	document.getElementById('gradient-' + curgradient + '-html').className = 'colorinput active';
	
}

function setFromImageHack(e)
{
	setFromImage(e);
	document.getElementById('colorpic').onmousemove = setFromImage;
	
	return false;
}

function setFromSliderHack(e)
{
	setFromSlider(e);
	document.getElementById('slider').onmousemove = setFromSlider;

	return false;
}

function unsetFromImage(e)
{
	document.getElementById('colorpic').onmousemove = null;
	setCross();

	return false;
}

function unsetFromSlider(e)
{
	document.getElementById('slider').onmousemove = null;

	/*setCross();*/
	return false;
}

function addSlider()
{
	var s = document.getElementById('slider');

	for (i = 0; i < 192; i++)
	{
		var span = document.createElement('span');
		span.className = 'sc';
		span.id = 'sc' + (i + 1);
		s.appendChild(span);
	}
	
}

function chooseGradientType(n)
{
	maxgradient = n;
	var s = document.getElementById('nb_couleurs').options;
	
	for (var i = 1; i <= 6; i++)
	{
		var r = document.getElementById('gradient-' + i);
		var h = document.getElementById('gradient-' + i + '-html');
		var c = document.getElementById('gradient-' + i + '-cell');		
		
		if (i > 1)
			s[i - 2].selected = false;

		if (!r || !h || !c)
			continue;
		
		if (i > maxgradient)
		{
			r.className = 'disabled';
			h.disabled = true;
			h.readonly = true;
			c.title = '';
			c.className = 'colorcell';
			h.className = 'colorinput';
		}
		else
		{
			r.className = '';
			h.disabled = false;
			h.readonly = false;
			c.title = 'Modifier cette couleur';
		}
	}
	s[maxgradient - 2].selected = true;
	if (curgradient > n)
		curgradient = maxgradient;
	selectGradient(curgradient);

}

function getcookie(name, defaultvalue)
{
	name += "=";
	if (document.cookie.length > 0)
	{
		offset = document.cookie.indexOf(name);
		if (offset != -1)
		{
			offset += name.length;
			end = document.cookie.indexOf(";", offset) 
			return unescape(document.cookie.substring(offset, (end != -1) ? end : document.cookie.length));
		}
	}
	return (defaultvalue);

}

function setcookie(name, value)
{
	var cookie = name + "=" + escape(value);
	var today = new Date();
	var expire = new Date();
	
	expire.setTime(today.getTime() + 1000 * 60 * 60 * 24 * 365);
	cookie += "; expires=" + expire.toGMTString();
	cookie += "; path=/";
	document.cookie = cookie;

}



function enregistrer(e)
{
	saveFavorites();
	if (curgradient)
	{
		var values = new Array();
		
		for (var i = 1; i <= maxgradient; i++)
		{
			// FIXME utiliser la couleur de fond de -cell convertie en #hexa plutot 
			values[i - 1] = document.getElementById('gradient-' + i + '-html').value;
		}
		
		if (parent.getGradientValues)
			parent.getGradientValues(isbg, values);
		else if (self.opener && self.opener.getGradientValues)
			self.opener.getGradientValues(isbg, values);
	}
	

}
	
function fromhex(inval)
{
	var out = 0;
	
	for (a = inval.length - 1; a >= 0; a--) 
		out += Math.pow(16, inval.length - a - 1) * hexchars.indexOf(inval.charAt(a));	
	return out;
	
}

function tohex(inval)
{
	var out = hexchars.charAt(inval / 16);
	out    += hexchars.charAt(inval % 16);
	return out;
}

function HSLtoRGB(h, s, l)
{
	var rm2, rm1;
	
	if (s == 0)
		return [l, l, l]; // achromatic
	h  = h * 360 / 255;
	s /= 255;
	l /= 255;
	if (l <= 0.5)
		rm2 = l + l * s;
	else 
		rm2 = l + s - l * s;
	rm1 = 2.0 * l - rm2;
	return [ToRGB1(rm1, rm2, h + 120.0), ToRGB1(rm1, rm2, h), ToRGB1(rm1, rm2, h - 120.0)];
}

function ToRGB1(rm1, rm2, rh)
{
	if (rh > 360.0)
		rh -= 360.0;
	else if (rh <   0.0)
		rh += 360.0;
	if (rh <  60.0)
		rm1 = rm1 + (rm2 - rm1) * rh / 60.0;
	else if (rh < 180.0)
		rm1 = rm2;
	else if (rh < 240.0)
		rm1 = rm1 + (rm2 - rm1) * (240.0 - rh) / 60.0; 
	return Math.round(rm1 * 255);
}

function RGBtoHSL(r, g, b)
{
	var min = Math.min(r, Math.min(g, b));
	var max = Math.max(r, Math.max(g, b));
	var l   = Math.round((max + min) / 2);
	var h, s;
	
	if (max == min)
	{
		h = 160;
		s = 0;
	}
	else
	{
		if (l < 128)
			s = Math.round(255 * (max - min) / (max + min));
		else
			s = Math.round(255 * (max - min) / (510 - max - min));
		if (r == max)
			h = (g - b) / (max - min);
		else if (g==max)
			h = 2 + (b - r) / (max - min);
		else
			h = 4 + (r - g) / (max - min);
		h *= 60;
		if (h < 0)
			h += 360;
		h = Math.round(h * 255 / 360);
	}
	return [h, s, l];
}

function setCursor(what)
{
//	document.getElementById('preimg' + cursorPos).src = 'blank.gif';
	cursorPos = what;
	
//	document.getElementById('preimg' + cursorPos).src = cursorImg.src;
}

function setCross()
{
	var cross = document.getElementById('cross').style;
	var cp    = document.getElementById('colorpic');
	var xd    = 0;
	var yd    = 0;
	var lr = cp;
	
	while (lr != null)
	{
		xd += lr.offsetLeft;
		yd += lr.offsetTop;
		lr  = lr.offsetParent;
	}
	cross.top  = (yd - 9 + 191 - 191 * curhsl[1] / 255) + 'px';
	cross.left = (xd - 9 + 191 * curhsl[0] / 255) + 'px';
	
}

function update(update_cross)
{
	
	var sa = document.getElementById('sliderarrow').style;
	var sp = document.getElementById('slider');
	var xd = 0;
	var yd = 0;
	var lr = sp;

	document.getElementById('thecell').style.backgroundColor = '#' + curcol;
	document.getElementById('rgb_r').value = currgb[0];
	document.getElementById('rgb_g').value = currgb[1];
	document.getElementById('rgb_b').value = currgb[2];
	document.getElementById('htmlcolor').value = '#' + curcol;
	document.getElementById('hsl_h').value = curhsl[0];
	document.getElementById('hsl_s').value = curhsl[1];
	document.getElementById('hsl_l').value = curhsl[2];
	
	if (curgradient)
	{
		
		document.getElementById('gradient-' + curgradient + '-cell').style.backgroundColor = '#' + curcol;
		document.getElementById('gradient-' + curgradient + '-html').value = '#' + curcol;
	}
	
	if (fav)
	{
		
		document.getElementById('fav-' + fav).style.backgroundColor = '#' + curcol;
	}
	
	setCursor(cursorPos);
	
	if (update_cross)
		setCross();
	
	while (lr != null)
	{
		xd += lr.offsetLeft;
		yd += lr.offsetTop;
		lr = lr.offsetParent;
	}
	sa.top =  (yd + 187 - 191 * curhsl[2] / 255) + 'px';
	sa.left = (xd + 14) + 'px';
	for (var i = 0; i < 192; i++)
	{
		var rgb = HSLtoRGB(curhsl[0], curhsl[1], 255 - 255 * i / 191);
		document.getElementById('sc' + (i + 1)).style.backgroundColor = '#' + tohex(rgb[0]) + tohex(rgb[1]) + tohex(rgb[2]);
	}
	
	enregistrer();
	
}

function saveFavorites()
{	
	var t = document.getElementById('couleurs-fav');
	var favarray = '';
	
	if (t.tBodies[0] && t.tBodies[0].rows)
	{
		for (var i = 0; i < t.tBodies[0].rows.length; i++)
		{
			for (var j = 0; j < t.tBodies[0].rows[i].cells.length; j++)
			{
				var elm = t.tBodies[0].rows[i].cells[j];
				
				favarray += elm.style.backgroundColor + '|';
			}
		}
	}
	setcookie('couleurs-fav', favarray);

}

function setFromMachin(elm)
{	
	if (elm.id && elm.id.indexOf('fav') > -1)
	{
		if (fav)
		{
			document.getElementById('fav-' + fav).className = 'inactive';
		}
		fav = parseInt(elm.id.substr(4));
		document.getElementById('fav-' + fav).className = 'active';
	}
	else if (fav)
	{
		document.getElementById('fav-' + fav).className = 'inactive';
		fav = 0;
	}
	
	setColFromRGB(elm.style.backgroundColor);

}

function setColFromRGB(valeur)
{	
	var j;
	
	if (valeur.indexOf('#') == 0)
		setCol(valeur.substr(1));
	else if (valeur.indexOf('rgb') == 0)
	{
		j = (valeur.substr(4, valeur.indexOf(')') - 4)).split(',');
		setRGB(j[0], j[1], j[2]);
	}	
	
	

}


function setCol(value)
{	
	value = value.toUpperCase();
	if (value.length != 6)
		value = curcol;
	for (var a = 0; a < 6; a++)
	{
		if (hexchars.indexOf(value.charAt(a)) == -1) {
			value = curcol;
			break;
		}
	}
	curcol = value;
	currgb = [fromhex(curcol.substr(0, 2)), fromhex(curcol.substr(2, 2)), fromhex(curcol.substr(4, 2))];
	curhsl = RGBtoHSL(currgb[0], currgb[1], currgb[2]);
	update(true);

}

function setRGB(r, g, b)
{	
	if (r > 255 || r < 0 || g > 255 || g < 0 || g > 255 || g < 0)
	{
		r = currbg[0];
		g = currgb[1];
		b = currgb[2];
	}
	currgb = [r, g, b];
	curcol = tohex(r) + tohex(g) + tohex(b);
	curhsl = RGBtoHSL(r, g, b);
	update(true);

}

function setHSL(h, s, l, update_cross)
{	
	if (h > 255 || h < 0 || s > 255 || s < 0|| l > 255 || l < 0)
	{
		s = curhsl[0];
		s = curhsl[1];
		l = curhsl[2];
	}
	curhsl = [h, s, l];
	currgb = HSLtoRGB(h, s, l);
	curcol = tohex(currgb[0]) + tohex(currgb[1]) + tohex(currgb[2]);
	update(update_cross);

}

function setFromRGB()
{	
	var r = document.getElementById('rgb_r').value;
	var g = document.getElementById('rgb_g').value;
	var b = document.getElementById('rgb_b').value;
	setRGB(r, g, b);

}

function setFromHTML(inval)
{	
	inval = inval.toUpperCase().substr(1);
	if (inval.length != 6)
	{
		setCol(curcol);
		return;
	}
	for (var a = 0; a < 6; a++)
	{
		if (hexchars.indexOf(inval.charAt(a)) == -1)
		{
			setCol(curcol);
			return;
		}
	}
	setCol(inval);

}

function setFromHSL()
{	
	h = document.getElementById("hsl_h").value;
	s = document.getElementById("hsl_s").value;
	l = document.getElementById("hsl_l").value;
	if (h > 255 || h < 0 || s > 255 || s < 0 || l > 255 || l < 0)
	{
		setHSL(curhsl[0], curhsl[1], curhsl[2], true);
		return;
	}
	setHSL(h, s, l, true);

}

function setFromImage(event)
{	
	if (!event)
		event = window.event;
	var x = event.offsetX;
	var y = event.offsetY;
	if (x == null)
	{
		x = 0;
		y = 0;
		lr = document.getElementById('colorpic');
		while (lr != null)
		{
			x += lr.offsetLeft;
			y += lr.offsetTop;
			lr = lr.offsetParent;
		}
		x = event.pageX - x;
		y = event.pageY - y;
	}
	setHSL(Math.round(x * 255 / 191), Math.round(255 - y * 255 / 191), curhsl[2], false);

}

function setFromSlider(event)
{	
	if (!event)
		event = window.event;
	var y = 0;
	var lr = document.getElementById('slider');
	while (lr != null)
	{
		y += lr.offsetTop; 
		lr  = lr.offsetParent;
	}
	y = event.clientY - y;
	setHSL(curhsl[0], curhsl[1], Math.round(255 - y * 255 / 191), true);

}





function getGradientValues(isbg, values)
{
	var str = '';
	
	for (var i = 0; i < values.length; i++)
	{
		str += ',' + values[i];
	}
	str = str.substr(1);
	str = str.replace(/#/g,"");
	document.fColor.tList.value = str;
	fade(document.fColor);
	preview_it(document.fColor.txaResult.value);
	

	return false;
}

















function preview_it(content)
{
	document.getElementById('text_preview').innerHTML = document.fColor.txaResult.value;

}
	
	
	function dyn(elem) {
	
		 enregistrer();
		
	}

function is_valid(color_list)
{
	var colors = (color_list.toLowerCase()).split(',');
	var hex    = '0123456789abcdef';
	var valid  = true;

	for (var i = 0; (i < colors.length) && valid; i++)
	{
		if (colors[i].length != 6) valid = false;

		for (var j = 0; j < colors[i].length; j++)
		{
			if (hex.indexOf(colors[i].charAt(j)) < 0) valid = false;
		}
	}

	return valid;
}

function hex_to_dec(n)
{
	// n will always be passed in as a string

	var c = '0123456789abcdef';

	n = n.toLowerCase();

	return c.indexOf(n.charAt(0)) * 16 + c.indexOf(n.charAt(1));
}

function hex_to_rgb(hex)
{
	// hex will always be passed in as a string

	var srgb = '';

	for (var i = 0; i < 6; i += 2)
		srgb = srgb + hex_to_dec(hex.substring(i, i + 2)) + ',';

	return srgb.substring(0, srgb.length - 1);
}

function two_color_fade(txt, color1, color2)
{
	var htm = '';

	if (txt.length == 0) return htm;

	// color1 and color2 are strings from the comma delimited color_list

	// s1 and s2 are now in form 255,00,33

	var s1 = hex_to_rgb(color1);
	var c1 = s1.split(',');

	var s2 = hex_to_rgb(color2);
	var c2 = s2.split(',');

	for (var i = 0; i < 3; i++)
	{
		c1[i] = parseInt(c1[i]);
		c2[i] = parseInt(c2[i]);
	}

	var inc = new Array(3);

	for (var i = 0; i < 3; i++)
	{
		if (txt.length - 1 > 0)
		{
			inc[i] = (c2[i] - c1[i]) / (txt.length - 1);
		}
		else
			inc[i] = c2[i];
	}

	for (var i = 0; i < txt.length; i++)
	{
	
		htm = htm + '<font color="' + rgb_to_hex(c1[0], c1[1], c1[2]) + '" size="' + document.fColor.text_size.value + '" face="' + document.fColor.text_font.value + '">' + txt.charAt(i).replace(/\n/g, "<br/>") + '<\/font>';
		


		// test print out
		//htm += '<font color="' + rgb_to_hex_wtv(c1[0], c1[1], c1[2]) + '">' +
		//i + ': ' + c1[0] + ',' + c1[1] + ',' + c1[2] + '<\/font><br>';

		for (var j = 0; j < 3; j++) c1[j] += inc[j];
	}
	


	return htm;
}

function multi_color_fade(txt, color_list)
{
	var htm = '';
	var color_count = 0;
	var chunk_count = 0;
	var chunks = new Array();

	var colors = (color_list.toLowerCase()).split(',');

	var num_chunks = colors.length - 1;

	var quotient  = Math.floor(txt.length / num_chunks);
	var remainder = txt.length % num_chunks;

	for (var i = 0; i < num_chunks; i++)
	{
		chunks[i] = quotient;

		if (i >= (num_chunks - remainder)) chunks[i]++;
	}

	for (var i = 0; i < txt.length; i += chunks[chunk_count++])
	{
		// The substr method would be eaiser, but WebTV can't handle substr.
		// str.substr(i, j) is same as str.substring(i, i + j)
		htm += two_color_fade(txt.substring(i, i + chunks[chunk_count]), colors[color_count], colors[color_count + 1]);

		color_count++;

		//alert("chunk_count: " + chunk_count + ", color_count: " + color_count);
	}

	return htm;
}

function fade(frm)
{
	var col_list = '';

	var txt = frm.tText.innerHTML;

		col_list = frm.tList.value;

	if (txt.length == 0)
	{
		alert('You need to enter some text.');
		frm.tText.focus();
		return;
	}

	if (!is_valid(col_list))
	{
		alert('Invalid color list.');
		frm.tList.focus();
		return;
	}

		// which Radio button is checked
		
	for (i=0;i<document.fColor.text_align.length;i++)
{
	if (document.fColor.text_align[i].checked)
	{
		text_align_value = document.fColor.text_align[i].value;
	}
}


	frm.txaResult.value = '';
	frm.txaResult.value += '<p align="' + text_align_value + '">' + multi_color_fade(txt, col_list) + '<\/p>';
	

	
	
}


function rgb_to_hex(r, g, b)
{
	// r, g, and b are numbers, not strings

	// correct function returns 255 if n > 255 and 0 if n < 0

	// The "correct" function doesn't really need to be called, since
	// rgb_to_hex will take care of anything < 256 or > -1, but just
	// to be on the safe (WebTV) side...
	r = correct(r);
	g = correct(g);
	b = correct(b);

	var h = ((r << 16) | (g << 8) | (b)).toString(16);

	while (h.length < 6) h = '0' + h;

	return h;
}

function correct(n){if(n>255)return 255;if(n<0)return 0;return n}

















//Disable right mouse click Script
//By Maximus (maximus@nsimail.com) w/ mods by DynamicDrive
//For full source code, visit http://www.dynamicdrive.com

var message="Function Disabled!";

///////////////////////////////////
function clickIE4(){
if (event.button==2){

return false;
}
}

function clickNS4(e){
if (document.layers||document.getElementById&&!document.all){
if (e.which==2||e.which==3){

return false;
}
}
}

if (document.layers){
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown=clickNS4;
}
else if (document.all&&!document.getElementById){
document.onmousedown=clickIE4;
}

document.oncontextmenu=new Function("return false;")

 
