var hexbase="0123456789ABCDEF";
var HSL = new Object();
var RGB = new Object();
var tempRGB = new Object();
RGB.R = RGB.G = RGB.B = 0;
tempRGB.R = tempRGB.G = tempRGB.B = 0;
HSL.H = HSL.S = HSL.L = 0;
var HEXCodes = new Array(256);
var k = 0;
var HEX = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
for (i = 0; i < 16; i++) 
{	
	for (j = 0; j < 16; j++) 
	{		
		HEXCodes[k] = HEX[i] + HEX[j];
		k++;
	}
}





function getLighterColor(color,times)
{
  if(!times) times = 1;
  mult = 25 * times;
  getCurrentColor(color);
  RGBtoHSL(RGB.R,RGB.G,RGB.B);
  HSL.L=HSL.L+mult;
  if(HSL.L>100) HSL.L=100;
return HSLtoRGB(HSL.H,HSL.S,HSL.L);
}
function getDarkerColor(color,times)
{
  if(!times) times = 1;
  mult = 25 * times;
  getCurrentColor(color);
  RGBtoHSL(RGB.R,RGB.G,RGB.B);
  HSL.L=HSL.L-mult;
  if(HSL.L<0) HSL.L=0;
  return HSLtoRGB(HSL.H,HSL.S,HSL.L);
 
}

function HSLtoRGB(H,S,L) 
{
	var p1,p2;
  
	L/=100;
	S/=100;
	if (L<=0.5) p2=L*(1+S);
	else p2=L+S-(L*S);
	p1=2*L-p2;
	if (S==0) 
	{
		tempRGB.R=L; 
		tempRGB.G=L;
		tempRGB.B=L;
	} 
	else 
	{
		tempRGB.R=FindRGB(p1,p2,H+120);
		tempRGB.G=FindRGB(p1,p2,H);
		tempRGB.B=FindRGB(p1,p2,H-120);
	}
	tempRGB.R *= 255;
	tempRGB.G *= 255;
	tempRGB.B *= 255;
	tempRGB.R=Math.round(tempRGB.R);
	tempRGB.G=Math.round(tempRGB.G);
	tempRGB.B=Math.round(tempRGB.B);
	return RGBtoHex(tempRGB.R,tempRGB.G,tempRGB.B);
}

function FindRGB(q1,q2,hue) 
{
	if (hue>360) hue=hue-360;
	if (hue<0) hue=hue+360;
	if (hue<60) return (q1+(q2-q1)*hue/60);
	else if (hue<180) return(q2);
	else if (hue<240) return(q1+(q2-q1)*(240-hue)/60);
	else return(q1);
}

function RGBtoHSL(r,g,b)
{
	var Min=0;
	var Max=0;
	r=(eval(r)/51)*.2;
	g=(eval(g)/51)*.2;
	b=(eval(b)/51)*.2;

	if (eval(r)>=eval(g))
		Max=eval(r);
	else
		Max=eval(g);
	if (eval(b)>eval(Max))
		Max=eval(b);
	
	if (eval(r)<=eval(g))
		Min=eval(r);
	else
		Min=eval(g);
	if (eval(b)<eval(Min))
		Min=eval(b);

	HSL.L=(eval(Max)+eval(Min))/2;
	if (eval(Max)==eval(Min)) 
	{
		HSL.S=0;
		HSL.H=0;
	} 
	else 
	{
		if (HSL.L < .5)
			HSL.S=(eval(Max)-eval(Min))/(eval(Max)+eval(Min));
		if (HSL.L >= .5)
			HSL.S=(eval(Max)-eval(Min))/(2-eval(Max)-eval(Min));
		if (r==Max)
			HSL.H = (eval(g)-eval(b))/(eval(Max)-eval(Min));
		if (g==Max)
			HSL.H = 2+((eval(b)-eval(r))/(eval(Max)-eval(Min)));
		if (b==Max)
			HSL.H = 4+((eval(r)-eval(g))/(eval(Max)-eval(Min)));
	}
	HSL.H=Math.round(HSL.H*60);
	if(HSL.H<0) HSL.H += 360;
	if(HSL.H>=360) HSL.H -= 360;
	HSL.S=Math.round(HSL.S*100);
	HSL.L=Math.round(HSL.L*100);
}
function getCurrentColor(color){
	i=0;
	while(HEXCodes[i] != color.substring(0,2).toUpperCase()) i++;
	RGB.R=i;
	i=0;
	while(HEXCodes[i] != color.substring(2,4).toUpperCase()) i++;
	RGB.G=i;
	i=0;
	while(HEXCodes[i] != color.substring(4,6).toUpperCase()) i++;
	RGB.B=i;
}
function RGBtoHex(R,G,B) {return toHex(R)+toHex(G)+toHex(B)}
function toHex(N) {
 if (N==null) return "00";
 N=parseInt(N); if (N==0 || isNaN(N)) return "00";
 N=Math.max(0,N); N=Math.min(N,255); N=Math.round(N);
 return "0123456789ABCDEF".charAt((N-N%16)/16)
      + "0123456789ABCDEF".charAt(N%16);
}

function isDark(color){
	var dark =0;
	var light ='';
	for(i=0;i<color.length; i++){
		if( i%2 ==0){
			if(color.charAt(i)<=3)
				dark++;
			else
				light = i;
		}
	}
	if(dark ==2 && light!=2) return true;
	if(dark==3 ) return true;
	return false;
}


function setColors(titleColor,headerColor,bgColor){
    //for setting the body background color
	document.body.style.backgroundColor="#"+bgColor
	//for setting the header color
	changeClassStyle('headline','color','#'+titleColor);
}
function changeTagStyle(el, style, val){
	
		els = document.getElementsByTagName(el);
		for(i=0;i<els.length;i++){
			eval("els[i].style."+style+"= '"+val+"'");
		}

	
}
function changeTagStyle(el, style, val){
	
		els = document.getElementsByTagName(el);
		for(i=0;i<els.length;i++){
			eval("els[i].style."+style+"= '"+val+"'");
		}

}
function changeClassStyle(obj, style, val){
	
		objs = getElementsByClassName(obj);
		for(i=0;i<objs.length;i++){
				eval("objs[i].style."+style+"= '"+val+"'");   
		}
	
}
function changeClassChildrenStyle(obj, el, style, val){
	
		objs = getElementsByClassName(obj);
		for(i=0;i<objs.length;i++){
			els = objs[i].getElementsByTagName(el);
			for(j=0;j<els.length;j++){
				eval("els[j].style."+style+"= '"+val+"'");
			}
		}
	
}
function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;

	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}
