// (c) copyright http://www.aleto.ch 2004 christian krebs

var turn=2;
var run=false;

function setEvent(e){
	if(e) return e;
	if(event) return event;
}

function setTarget(e){
	if(e) return e.target;
	if(event) return event.srcElement;
}

function transform ( a ) {
	if ( a > 360 ) a = 360; 
	if ( a < 0 ) ap = 0;
	var rest = a % 60;
	a -= rest;
	rest = Math.floor( 255/60*rest );
	if ( a == 360 ) a=0;
	if( a >= 0  && a < 60 ) return [ 255, rest, 0 ];
	if( a >= 60 && a < 120 ) return [ 255-rest, 255, 0 ];
	if( a >= 120 && a < 180 ) return [ 0, 255, rest ];
	if( a >= 180 && a < 240 ) return [ 0, 255-rest, 255 ];
	if( a >= 240 && a < 300 ) return [ rest, 0, 255 ];
	if( a >= 300 && a < 360 ) return [ 255, 0, 255-rest ];
}

function addjust(fac1,fac2,arr1,arr2){
	var temp0=[0,0,0];
	var temp2=[0,0,0];		
	for(var i=0; i<3; i++) {
		temp0[i]=Math.floor(arr1[i]+fac1/100*(arr2[i]-arr1[i]));		
		temp2[i]=Math.floor(arr1[i]+fac2/100*(arr2[i]-arr1[i]));
	}
	for(var i=0; i<3; i++) {arr1[i]=temp0[i];arr2[i]=temp2[i];}
}


function fragIt (color, colorEnd, iter ) {
	var deltaTot = colorEnd - color;
	var returnData = [color];
	var delta = deltaTot / ( iter + 1 ) ;
	for ( var i=0; i < iter; i++ ) returnData.push( Math.floor (color + ( i + 1 ) * delta ) );
	returnData.push(colorEnd);
	return returnData;
}

function createColor () {
	if(!run) {
		run=true;
		function makeCode (n) {
			var temp=[ Colors[0][n], Colors[1][n], Colors[2][n] ];
			 for (var i=0; i<3; i++ ) {
				temp[i]=temp[i].toString(16).toUpperCase(); 
				if (temp[i].length==1 ) temp[i]='0'+temp[i];
			}
			return temp.join('');
		}
		function getVal(ele, cond, alt) {
			var val=parseInt(document.getElementById(ele).value);
			if(cond) eval('if(val'+cond+') val='+alt );
			return val;
		}
		var Colors=[[],[],[]];
		var cLStart=[0,0,0], cLEnd=[255,255,255], cRStart=[0,0,0], cREnd=transform ( getVal('input0') );		
		var brightStart=getVal('brightStart','<0', 0);
		var brightEnd=getVal('brightEnd','>100', 100);
		var satStart=getVal('satStart','<0',0);
		var satEnd=getVal('satEnd','>100',100);
		var vertIter=getVal('inputY')-2;
		var horizIter=getVal('inputX')-2;
		document.getElementById('position').style.color='rgb('+cREnd+')';
		document.getElementById('position').style.left=( getVal('input0')/3.60 )+'%';
		addjust(brightStart, brightEnd, cLStart, cLEnd);
		addjust(brightStart, brightEnd, cRStart, cREnd);
		addjust(satStart, satEnd, cLStart, cRStart);
		addjust(satStart, satEnd, cLEnd, cREnd);
		for(var zk=0;zk<turn;zk++){
			for ( var i=0; i<3; i++ ) {
				var temp=cRStart[i];cRStart[i]=cREnd[i];cREnd[i]=cLEnd[i];cLEnd[i]=cLStart[i];cLStart[i]=temp;
			}
		}
		for ( var i=0; i<3; i++ ) {
			var ColorsLeft = fragIt ( cLStart[i], cLEnd[i] , vertIter );
			var ColorsRight = fragIt ( cRStart[i], cREnd[i] , vertIter ) ;
			for ( var k = ColorsLeft.length - 1; k >= 0; k-- ) {
				Colors[i] = Colors[i].concat ( fragIt ( ColorsLeft[k], ColorsRight[k] , horizIter ) );
			}
		}
		var ele=document.getElementById('content');
		while(ele.firstChild) ele.removeChild(ele.firstChild);
		ele=ele.appendChild(document.createElement('table'));
		ele.cellSpacing=parseInt(document.getElementById('cellSpace').value);
		ele=ele.appendChild(document.createElement('tbody'));
		var tr='', td='';
		var za=0;
		for(var i=0; i < vertIter+2; i++){
			tr=ele.appendChild(document.createElement('tr'));
			for(var z=0; z < horizIter+2; z++){			
				td=tr.appendChild(document.createElement('td'));
				td.style.backgroundColor=td.title='#'+makeCode (za);
				za++;			
			}
		}
		setTimeout('run=false;',30);
	}
}
function turnIt () {
	turn++;
	if(turn==4) turn=0;
	createColor ();
}
function setborder(ele) {
	document.getElementsByTagName('table')[0].cellSpacing=parseInt(ele.value);
}
function setBackground(ele){
	if(/click/.test(ele.value)){
		document.body.style.backgroundColor=document.getElementById('input1').value;
		var newOp=document.getElementById('backGround').appendChild(document.createElement('option'));
		newOp.appendChild(document.createTextNode(document.getElementById('input1').value));
		newOp.value=document.getElementById('input1').value;
		setTimeout('(tempEle=document.getElementById(\'backGround\')).selectedIndex=tempEle.options.length-1;',100);
	}
	else{document.body.style.backgroundColor=ele.value;}
}
function more() {
	var sheet=document.getElementById('forMore');
	if(sheet.disabled) {
		sheet.disabled=false;
		if(document.documentElement.offsetWidth < 1280 && document.documentElement.offsetWidth > 660) document.getElementById('forMoreWrap2').disabled=false;
		if(document.documentElement.offsetWidth <= 660) document.getElementById('forMoreWrap7').disabled=false;
		document.getElementById('showMore').value='less';
	}
	else{
		sheet.disabled=true;
		document.getElementById('forMoreWrap2').disabled=true;
		document.getElementById('forMoreWrap7').disabled=true;
		document.getElementById('showMore').value='more';
	}
}

/* for Slider */

var isDrag=false;
var ele='';
var currentEvent='';
var leftPos=0;
var currentLeftPos=0;
var eleWidth=0;
function setElement(e){
	currentEvent=setEvent(e);
	ele=setTarget(e);
	if(ele.id=='position' ){
		if(window.opera) document.getElementById('forOpera').focus();
		isDrag=true;
		ele=ele.parentNode;
		eleWidth=ele.offsetWidth;
		leftPos=ele.offsetLeft;
		while(ele.offsetParent){ele=ele.offsetParent;leftPos+=ele.offsetLeft};
		return false;
	}
	else {drag=false}
}
function showPosition(e) {	
	if(isDrag) {
		currentEvent=setEvent(e);
		currentLeftPos=currentEvent.clientX-leftPos;
		if( currentLeftPos < 0 ) currentLeftPos=0;
		if( currentEvent.clientX - leftPos + 20 < 0 ) isDrag=false;
		if( currentLeftPos > eleWidth ) currentLeftPos=eleWidth;
		if( currentEvent.clientX - leftPos > eleWidth + 20 ) isDrag=false;
		document.getElementById('input0').value=(Math.floor(currentLeftPos/eleWidth*360));
		if(!run) createColor ();
		return false;		
	}	
}

function SSR(ele) {
	if(ele.checked){document.documentElement.className='SSR'}
	else{document.documentElement.className=''}
}

var values=['inputX','inputY','cellSpace','backGround','input0','satStart','satEnd','brightStart','brightEnd'];/* turn=2; */
function createCookie(name, value, time) {
	document.cookie = name+"="+escape(value)+
		"; expires="+(new Date(new Date().getTime()+time)).toGMTString()+"; path=/";
}
function readCookie(name) {
	if( new RegExp(name+'\=([^;]*);','').test(document.cookie+';') ) return unescape(RegExp.$1);
	return false;
}
function storeValues() {
	var valStore='',i;
	for(i=0;i<values.length;i++) valStore+=document.getElementById(values[i]).value+';';
	valStore+=turn;
	createCookie('labColorsSettings', valStore, (360*24*60*60*1000));
}

window.onload=function (){
	document.getElementById('forMore').disabled=true;
	document.getElementById('forMoreWrap2').disabled=true;
	document.getElementById('forMoreWrap7').disabled=true;
	var valStore;
	if(valStore=readCookie('labColorsSettings')) {
		valStore=valStore.split(';');
		for(i=0;i<values.length;i++) document.getElementById(values[i]).value=valStore[i];
		turn=valStore.pop();
	};
	document.body.style.backgroundColor=document.getElementById('backGround').value;
	createColor();
	document.onclick=function(e){
		var ele=setTarget(e);
		if(ele.nodeName=='TD') document.getElementById('input1').value=ele.title;
	}
	document.getElementById('slider').onmousedown=setElement;
	document.onmouseup=function (){
		if(isDrag){
			isDrag=false;
			createColor ();
		}
	}
	document.onmousemove=showPosition;
	if(window.opera){
		var eleOpera=document.getElementById('position0').appendChild(document.createElement('div'));			
		eleOpera.innerHTML='<input type=\'text\' id=\'forOpera\' style=\'height:0;width:0;overflow:hidden;\' />';
	}
}