var hs=new Object();
var rg=new Object();
function c2r(d)
{
	ctrl='rgb' /*sets up for changing rgb sliders */	
	k=document.getElementById(d).style.backgroundColor;
	j=(k.substr(4,k.indexOf(")")-4)).split(",");
	r.setValue(j[0]);
	g.setValue(j[1]);
	b.setValue(j[2]);
}
function load_theme()
{
	sel = document.getElementById("coltheme");
	var d = sel.options[sel.selectedIndex].value;
	j=d.split(",");
	r.setValue(j[0]);
	g.setValue(j[1]);
	b.setValue(j[2]);
}

function ud(x,c)
{
	document.getElementById("sw"+x).style.backgroundColor="rgb("+c.r+","+c.g+","+c.b+")";
	document.getElementById("hc"+x).innerHTML='#'+rg2html(c) + "<br />R: "+c.r+"<br />G: "+c.g+"<br />B: "+c.b;
	document.getElementById("col"+x).value="#"+rg2html(c)
}
function rg2html(z)
{
	return d2h(z.r)+d2h(z.g)+d2h(z.b);
}
function d2h(d)
{
	hch="0123456789ABCDEF";
	a=d%16;
	q=(d-a)/16;
	return hch.charAt(q)+hch.charAt(a);
}
function h2r(hs)
{
	var rg=new Object();
	if(hs.s==0)
	{
		rg.r=rg.g=rg.b=Math.round(hs.v*2.55);
		return rg;
	}
	hs.s=hs.s/100;
	hs.v=hs.v/100;
	hs.h/=60;
	i=Math.floor(hs.h);
	f=hs.h-i;
	p=hs.v*(1-hs.s);
	q=hs.v*(1-hs.s*f);
	t=hs.v*(1-hs.s*(1-f));
	switch(i)
	{
		case 0:rg.r=hs.v;
		rg.g=t;
		rg.b=p;
		break;
		case 1:rg.r=q;
		rg.g=hs.v;
		rg.b=p;
		break;
		case 2:rg.r=p;
		rg.g=hs.v;
		rg.b=t;
		break;
		case 3:rg.r=p;
		rg.g=q;
		rg.b=hs.v;
		break;
		case 4:rg.r=t;
		rg.g=p;
		rg.b=hs.v;
		break;
		default:rg.r=hs.v;
		rg.g=p;
		rg.b=q;
	}
	rg.r=Math.round(rg.r*255);
	rg.g=Math.round(rg.g*255);
	rg.b=Math.round(rg.b*255);
	return rg;
}
function rc(x,m)
{
	if(x>m)
	{
		return m
	}
	if(x<0)
	{
		return 0
	}
	else
	{
		return x
	}
}
function rg2hs(rg)
{
	m=rg.r;
	if(rg.g<m)
	{
		m=rg.g
	};
	if(rg.b<m)
	{
		m=rg.b
	};
	v=rg.r;
	if(rg.g>v)
	{
		v=rg.g
	};
	if(rg.b>v)
	{
		v=rg.b
	};
	value=100*v/255;
	delta=v-m;
	if(v==0.0)
	{
		hs.s=0
	}
	else
	{
		hs.s=100*delta/v
	};
	if(hs.s==0)
	{
		hs.h=0
	}
	else
	{
		if(rg.r==v)
		{
			hs.h=60.0*(rg.g-rg.b)/delta
		}
		else if(rg.g==v)
		{
			hs.h=120.0+60.0*(rg.b-rg.r)/delta
		}
		else if(rg.b=v)
		{
			hs.h=240.0+60.0*(rg.r-rg.g)/delta
		}
		if(hs.h<0.0)
		{
			hs.h=hs.h+360.0
		}
	}
	hs.v=Math.round(value);
	hs.h=Math.round(hs.h);
	hs.s=Math.round(hs.s);
	return(true);
}

/*mmd is the match mode*/
/*tnt is tint value*/
function dom(mmd,tnt)
{
	//hs.h=cc.h
	//hs.s=cc.s
	//hh.v=cc.v
	z=new Object();
	y=new Object();
	yx=new Object();
	ya=new Object();
	yb=new Object();
	yc=new Object();
	yd=new Object();
	ye=new Object();
	yf=new Object();
	yg=new Object();
	p=new Object();
	pr=new Object();
	p.s=y.s=cc.s;
	p.h=y.h=cc.h;
	
	switch(mmd){
		case 'ct': //complementary tones
		y.v=cc.v
		yx.v=cc.v
		compH=cc.h+180-(cc.h+180>=360?360:0)

		y.h=cc.h*.8+compH*.2 //20% comp
		y.s=cc.s*0.6
		z=h2r(y);
		ud("1",z);
		

		yx.h=cc.h*.6+compH*.4 //40% comp
		yx.s=cc.s*0.2
		z=h2r(yx);
		ud("2",z);

		pr.h=cc.h*.5+compH*.5 //50% comp
		pr.s=0
		pr.v=cc.v
		z=h2r(pr);
		ud("3",z);

		ya.h=cc.h*.4+compH*.6 //60% comp
		ya.s=cc.s*0.2
		ya.v=cc.v
		z=h2r(ya);
		ud("4",z);

		yb.h=cc.h*.2+compH*.8 //80% comp
		yb.s=cc.s*0.6
		yb.v=cc.v
		z=h2r(yb);
		ud("5",z);

		yc.h=compH //100% comp
		yc.s=cc.s
		yc.v=cc.v
		z=h2r(yc);
		ud("6",z);
		
		y.h=0;
		y.s=0;
		y.v=cc.v;
		z=h2r(y);
		ud("7",z);
		
		if(cc.v >= 50) { pr.v = 0 } else { pr.v = 100 } 
		pr.h=pr.s=0;
		z=h2r(pr);
		ud("8",z)

		break;


		case 'sh':  //shades
		y.h=ya.h=ya.h=yb.h=yc.h=yd.h=ye.h=yf.h=yg.h=cc.h
		y.s=ya.s=ya.s=yb.s=yc.s=yd.s=ye.s=yf.s=yg.s=cc.s
		var shvt=(cc.v<=10?'s':cc.v>=90?'b':'m')			

		switch(shvt){
			case 's':
			y.v=(cc.v-(tnt)<0?0:cc.v-(tnt))
			ya.v=(cc.v+(tnt)>=100?100:cc.v+(tnt))
			yb.v=(cc.v+(tnt*2)>=100?100:cc.v+(tnt*2))
			yc.v=(cc.v+(tnt*3)>=100?100:cc.v+(tnt*3))
			yd.v=(cc.v+(tnt*4)>=100?100:cc.v+(tnt*4))
			ye.v=(cc.v+(tnt*5)>=100?100:cc.v+(tnt*5))
			yf.v=(cc.v+(tnt*6)>=100?100:cc.v+(tnt*6))
			break;

			case 'b':
			y.v=(cc.v-(tnt)<0?0:cc.v-(tnt))
			ya.v=(cc.v-(tnt*2)<0?0:cc.v-(tnt*2))
			yb.v=(cc.v-(tnt*3)<0?0:cc.v-(tnt*3))
			yc.v=(cc.v-(tnt*4)<0?0:cc.v-(tnt*4))
			yd.v=(cc.v-(tnt*5)<0?0:cc.v-(tnt*5))
			ye.v=(cc.v-(tnt*6)<0?0:cc.v-(tnt*6))
			yf.v=(cc.v-(tnt*7)<0?0:cc.v-(tnt*7))
			break;

			default:
			y.v=(cc.v-(tnt)<0?0:cc.v-(tnt))
			ya.v=(cc.v-(tnt*2)<0?0:cc.v-(tnt*2))
			yb.v=(cc.v-(tnt*3)<0?0:cc.v-(tnt*3))
			yc.v=(cc.v+(tnt)>=100?100:cc.v+(tnt))
			yd.v=(cc.v+(tnt*2)>=100?100:cc.v+(tnt*2))
			ye.v=(cc.v+(tnt*3)>=100?100:cc.v+(tnt*3))
			yf.v=(cc.v+(tnt*4)>=100?100:cc.v+(tnt*4))
			}
		z=h2r(y);
		ud("1",z)
		z=h2r(ya);
		ud("2",z)
		z=h2r(yb);
		ud("3",z)
		z=h2r(yc);
		ud("4",z)
		z=h2r(yd);
		ud("5",z)
		z=h2r(ye);
		ud("6",z)
		z=h2r(yf);
		ud("7",z)

		if(cc.v >= 50) { pr.v = 0 } else { pr.v = 100 } 
		pr.h=pr.s=0;
		z=h2r(pr);
		ud("8",z)
		break;
		
		case 'an': //analogous
		y.s=ya.s=cc.s
		y.v=ya.v=ye.v=yf.v=cc.v
		yb.v=yc.v=yd.v=(cc.v+25>100?cc.v-25:cc.v+25)
		y.h=(cc.h-30)<0?360+(cc.h-30):cc.h-30
		z=h2r(y);
		ud("1",z)

		ya.h=(cc.h+30)>=360?(cc.h+30)-360:cc.h+30
		z=h2r(ya);
		ud("2",z)
		
		yb.h=cc.h
		yb.s=cc.s
		z=h2r(yb);
		ud("3",z)

		yc.h=(cc.h-30)<0?360+(cc.h-30):cc.h-30
		yc.s=cc.s
		z=h2r(yc);
		ud("4",z)

		yd.h=(cc.h+30)>=360?(cc.h+30)-360:cc.h+30
		yd.s=cc.s
		z=h2r(yd);
		ud("5",z)

		ye.h=0
		ye.s=0
		z=h2r(ye);
		ud("6",z)
		
		if(cc.v >= 50) { pr.v = 0 } else { pr.v = 100 } 
		pr.h=pr.s=0;
		z=h2r(pr);
		ud("7",z)

		yf.h=0
		yf.s=0
		yf.v=100
		z=h2r(yf);
		ud("8",z)

		break;

		case 'sc': //split complement
		y.s=ya.s=yb.s=cc.s
		y.v=ya.v=yb.v=yc.v=yd.v=ye.v=yf.v=cc.v
		y.v=ya.v=yb.v=cc.v
		y.h=(cc.h-150)<0?360+(cc.h-150):cc.h-150
		z=h2r(y);
		ud("1",z)

		ya.h=(cc.h+150)>=360?(cc.h+150)-360:cc.h+150
		z=h2r(ya);
		ud("2",z)
		
		yb.h=cc.h
		yb.s=cc.s>66?cc.s-33:cc.s+33
		yb.v=(100-cc.v)+(cc.v>=66?33:0)
		z=h2r(yb);
		ud("3",z)

		yc.h=(cc.h-150)<0?360+(cc.h-150):cc.h-150
		yc.s=cc.s>66?cc.s-33:cc.s+33
		yc.v=(100-cc.v)+(cc.v>=66?33:0)
		z=h2r(yc);
		ud("4",z)

		yd.h=(cc.h+150)>=360?(cc.h+150)-360:cc.h+150
		yd.s=cc.s>66?cc.s-33:cc.s+33
		yd.v=(100-cc.v)+(cc.v>=66?33:0)
		z=h2r(yd);
		ud("5",z)

		ye.h=cc.h
		ye.s=(100-cc.s)+(cc.s>=66?33:0)
		ye.v=cc.v>66?cc.v-33:cc.v+33
		z=h2r(ye);
		ud("6",z)
		
		pr.h=(cc.h-150)<0?360+(cc.h-150):cc.h-150
		pr.s=(100-cc.s)+(cc.s>=66?33:0)
		pr.v=cc.v>66?cc.v-33:cc.v+33
		z=h2r(pr);
		ud("7",z)

		yf.h=(cc.h+150)>=360?(cc.h+150)-360:cc.h+150
		yf.s=(100-cc.s)+(cc.s>=66?33:0)
		yf.v=cc.v>66?cc.v-33:cc.v+33
		z=h2r(yf);
		ud("8",z)

		break;

		case 'dc': //double complement
		y.s=ya.s=yb.s=yc.s=cc.s
		y.v=ya.v=yb.v=yc.v=cc.v
		y.h=(cc.h-180)<0?360+(cc.h-180):cc.h-180
		z=h2r(y);
		ud("1",z)

		ya.h=(cc.h+60)>=360?(cc.h+60)-360:cc.h+60
		z=h2r(ya);
		ud("2",z)
		
		yb.h=(cc.h+240)>=360?(cc.h+240)-360:cc.h+240
		yb.s=cc.s
		z=h2r(yb);
		ud("3",z)

		yc.h=(cc.h)
		/*yc.s=cc.s>50?cc.s/2:cc.s*1.5
		yc.v=cc.v*/
		yc.s=cc.s>66?cc.s-33:cc.s+33
		yc.v=(100-cc.v)+(cc.v>=66?33:0)
		z=h2r(yc);
		ud("4",z)

		yd.h=(cc.h+180)>=360?(cc.h+180)-360:cc.h+180
		/*yd.s=cc.s>50?cc.s/2:cc.s*1.5
		yd.v=cc.v*/
		yd.s=cc.s>66?cc.s-33:cc.s+33
		yd.v=(100-cc.v)+(cc.v>=66?33:0)
		z=h2r(yd);
		ud("5",z)

		ye.h=(cc.h+60)>=360?(cc.h+60)-360:cc.h+60
		/*ye.s=cc.s>50?cc.s/2:cc.s*1.5
		ye.v=cc.v*/
		ye.s=cc.s>66?cc.s-33:cc.s+33
		ye.v=(100-cc.v)+(cc.v>=66?33:0)
		z=h2r(ye);
		ud("6",z)
		
		pr.h=(cc.h+240)>=360?(cc.h+240)-360:cc.h+240
		/*pr.s=cc.s>50?cc.s/2:cc.s*1.5
		pr.v=cc.v*/
		pr.s=cc.s>66?cc.s-33:cc.s+33
		pr.v=(100-cc.v)+(cc.v>=66?33:0)
		z=h2r(pr);
		ud("7",z)

		yf.h=0
		yf.s=0
		yf.v=cc.v>=75?0:100
		z=h2r(yf);
		ud("8",z)

		break;

		case 'tr': //triadic
		y.s=ya.s=cc.s
		y.v=ya.v=yb.v=yc.v=yd.v=ye.v=yf.v=cc.v
		yb.v=yc.v=yd.v=(cc.v+25>100?cc.v-25:cc.v+25)
		y.h=(cc.h-120)<0?360+(cc.h-120):cc.h-120
		z=h2r(y);
		ud("1",z)

		ya.h=(cc.h+120)>=360?(cc.h+120)-360:cc.h+120
		z=h2r(ya);
		ud("2",z)
		
		yb.h=cc.h
		yb.s=cc.s
		z=h2r(yb);
		ud("3",z)

		yc.h=(cc.h-120)<0?360+(cc.h-120):cc.h-120
		yc.s=cc.s
		z=h2r(yc);
		ud("4",z)

		yd.h=(cc.h+120)>=360?(cc.h+120)-360:cc.h+120
		yd.s=cc.s
		z=h2r(yd);
		ud("5",z)

		ye.h=0
		ye.s=0
		z=h2r(ye);
		ud("6",z)
		
		if(cc.v >= 50) { pr.v = 0 } else { pr.v = 100 } 
		pr.h=pr.s=0;
		z=h2r(pr);
		ud("7",z)

		yf.h=0
		yf.s=0
		yf.v=100
		z=h2r(yf);
		ud("8",z)

		break;

		default:
	
		if(cc.v>70)
		{
			y.v=cc.v-30
			p.v=y.v +15
			z=h2r(p);
			ud("1",z);
			

		}
		else
		{
			y.v=cc.v+30
			p.v=y.v-15
			z=h2r(p);
			ud("1",z);
			
		};
		z=h2r(y);
		ud("2",z);
		if((cc.h>=0)&&(cc.h<30))
		{
			pr.h=yx.h=y.h=cc.h+20;
			pr.s=yx.s=y.s=cc.s;
			y.v=cc.v;
			if(cc.v>70)
			{
				yx.v=cc.v-30
				pr.v = yx.v +15
			}
			else
			{
				yx.v=cc.v+30
				pr.v = yx.v -15
			}
		}
		if((cc.h>=30)&&(cc.h<60))
		{
			pr.h=yx.h=y.h=cc.h+150;
			y.s=rc(cc.s-30,100);
			y.v=rc(cc.v-20,100);
			pr.s=yx.s=rc(cc.s-70,100);
			yx.v=rc(cc.v+20,100);
			pr.v=cc.v
		}
		if((cc.h>=60)&&(cc.h<180))
		{
			pr.h=yx.h=y.h=cc.h-40;
			pr.s=y.s=yx.s=cc.s;
			y.v=cc.v;
			if(cc.v>70)
			{
				yx.v=cc.v-30
				pr.v = yx.v +15
			}
			else
			{
				yx.v=cc.v+30
				pr.v = yx.v -15
			}
		}
		if((cc.h>=180)&&(cc.h<220))
		{
			pr.h=yx.h=cc.h-170;
			y.h=cc.h-160;
			pr.s=yx.s=y.s=cc.s;
			y.v=cc.v;
			if(cc.v>70)
			{
				yx.v=cc.v-30
				pr.v = yx.v +15
			}
			else
			{
				yx.v=cc.v+30
				pr.v = yx.v -15
			}
		}
		if((cc.h>=220)&&(cc.h<300))
		{
			pr.h=yx.h=y.h=cc.h;
			pr.s=yx.s=y.s=rc(cc.s-60,100);
			y.v=cc.v;
			if(cc.v>70)
			{
				yx.v=cc.v-30
				pr.v = yx.v +15
			}
			else
			{
				yx.v=cc.v+30
				pr.v = yx.v -15
			}
		}
		if(cc.h>=300)
		{
			if(cc.s>50)
			{
				pr.s=y.s=yx.s=cc.s-40
			}
			else
			{
				pr.s=y.s=yx.s=cc.s+40
			}
			pr.h=yx.h=y.h=(cc.h+20)%360;
			y.v=cc.v;
			if(cc.v>70)
			{
				yx.v=cc.v-30
				pr.v = yx.v +15
			}
			else
			{
				yx.v=cc.v+30
				pr.v = yx.v -15
			}
		}
		z=h2r(y);
		ud("3",z);
		z=h2r(yx);
		ud("5",z);
		y.h=0;
		y.s=0;
		y.v=100-cc.v;
		z=h2r(y);
		ud("6",z);
		y.h=0;
		y.s=0;
		y.v=cc.v;
		z=h2r(y);
		ud("7",z);
		z=h2r(pr);
		ud("4",z);
		if(cc.v >= 50) { pr.v = 0 } else { pr.v = 100 } 
		pr.h=pr.s=0;
		z=h2r(pr);
		ud("8",z)
		break;
	}
}
