// main.js functions for Published literature copyright (c) K.J. Petrie 2003
//N.B. These functions are not compatible with Colour Matching page

//Controls
BackgroundColour='rgb(0,0,64)';
//CheckUSA();
CoarseStep=5;
CRightYear='2003, 2006';
FineStep=1;
CoarseInterval=10;
FineInterval=100;
//KeepColours();
TextColour='rbg(0,255,255)';
URLPath=(location.protocol=='http:')?'/ownwork':'/';

//Globals
Action='';
Attrib='';
Blue=255;
CF='';
Enable=true;
Green=255;
Red=255;
NavName=navigator.appName.toLowerCase();
NavVer=navigator.appVersion;
NavNum=parseInt((NavName=='microsoft internet explorer')?NavVer.substring(NavVer.indexOf('MSIE')+5):NavVer);
Nav=(NavName=='netscape')?((NavNum>4)?'moz':'net'):(NavName=='microsoft internet explorer')?'ie':'other';

function AdjustColours(){
/*	if(NavNum>4){
		OutNow('self.document.body,\'background\');">Background</a></span>',';">Text</a></span></p>','<p>Adjust colours: <span class="linkbutton"><a href="javascript:edthis(','\n<span class="linkbutton"><a href="javascript:edthis(self.document.body,\'text\')');
		KeepColours();
	}
*/}

function CantParse(){//alert(arguments[0]);
	alert('NON-STANDARD BROWSER\n\nSorry, we cannot understand your browser\'s Document Object Model.\n\nThis page requires a DOM level one capable browser in order to set colours.');
	return false;
}

function CheckUSA(){
	if(USDate>Today()){
		if(!confirm('COPYRIGHT DECLARATION\n\nFor copyright reasons, '+document.title+' will not be published in the United States of America until '+RetDate(USDate,0).replace(/<.{1,5}>/g,"")+'.\n\nBy clicking \'OK\' you warrant and declare that you are not in the USA. If you are in the USA you must click \'Cancel\'.')){
			location.replace('index.htm');
		}
	}
}

function Clip(colarray){
	for(var i=0;i<3;i++){
		colarray[i]=(colarray[i]<0)?0:colarray[i];
		colarray[i]=(colarray[i]>255)?255:colarray[i];;
	}
	return colarray;
}

function Cool(box,cf,attrib){
	var col=(attrib=='background')?ParseColour(box.style.backgroundColor):ParseColour(box.style.color);
	var step=(cf=='coarse')?CoarseStep:FineStep;
	if(!col[9]){
		if(!col[10]){
			col[(col[7]+1)%3]-=step;
			col[(col[7]+2)%3]+step;
		}
		else{
			col[col[6]]-=step;
			col[(col[6]+1)%3]+=step;
		}
		col=Clip(col);
		SetColour(box,col[0],col[1],col[2],attrib);
	}
	Controls.Box=box;
	Attrib=attrib;
	CF=cf;
	Action=setTimeout('Run("Cool",Controls.Box,CF,Attrib);',(cf=='coarse')?CoarseInterval:FineInterval);
}

function Dark(box,cf,attrib){
	var col=(attrib=='background')?ParseColour(box.style.backgroundColor):ParseColour(box.style.color);
	var step=(cf=='coarse')?CoarseStep:FineStep;
	col[0]-=step;
	col[1]-=step;
	col[2]-=step;
	col=Clip(col);
	SetColour(box,col[0],col[1],col[2],attrib);
	Controls.Box=box;
	Attrib=attrib;
	CF=cf;
	Action=setTimeout('Run("Dark",Controls.Box,CF,Attrib);',(cf=='coarse')?CoarseInterval:FineInterval);
}

function edthis(box,attribute){
	InitStyle(box);
	Controls=window.open('','Controls','titlebar,width=320,height=220');
	if(Controls){
		Controls.document.open();
		Controls.document.writeln('<html>\n<head>\n<title>Adjust Colour</title>\n<style type="text/css"><!--\nbody{background-color:#000040}\ntd, th, p, .button{color:#5BE;font:normal 8pt/10pt arial,helvetica,sans-serif}\nth{text-align:center}\n.dedication{font-style:italic}\n.button {color:#FFFFFF;background-color:#38A;border:2px solid ;border-color:#60C7E0 #002070 #002070 #60C7E0;height:20px;width:50px;vertical-align:middle}\n-->\n</style>\n</head>');
		Controls.document.writeln('<body>\n<p>Adjust the '+attribute+' colour using the buttons below.</p><form name="ConForm" id="ConForm">');
		Controls.document.writeln('<table>\n<tr>\n<td></td><th colspan=2>&#0150;&#0150;&#0150; Coarse &#0150;&#0150;&#0150;</th><th colspan=2>&#0150;&#0150;&#0150;&#0150; Fine &#0150;&#0150;&#0150;&#0150;</th></tr>');
		Controls.document.writeln('<tr>\n<td>Hue:</td><td><input type="button" class="button" name="hot" value="Warmer" onMouseDown="opener.Warm(Box,\'coarse\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td><td><input type="button" class="button" name="cold" value="Cooler" onMouseDown="opener.Cool(Box,\'coarse\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td><td><input type="button" class="button" name="warm" value="Warmer" onMouseDown="opener.Warm(Box,\'fine\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td><td><input type="button" class="button" name="cool" value="Cooler" onMouseDown="opener.Cool(Box,\'fine\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td></tr>');
		Controls.document.writeln('<tr>\n<td>Luminance:</td><td><input type="button" class="button" name="dark" value="Darker" onMouseDown="opener.Dark(Box,\'coarse\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td><td><input type="button" class="button" name="dazzling" value="Lighter" onMouseDown="opener.Light(Box,\'coarse\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td><td><input type="button" class="button" name="dim" value="Darker" onMouseDown="opener.Dark(Box,\'fine\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td><td><input type="button" class="button" name="light" value="Lighter" onMouseDown="opener.Light(Box,\'fine\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td></tr>');
		Controls.document.writeln('<tr>\n<td>Saturation:</td><td><input type="button" class="button" name="herculean" value="Stronger" onMouseDown="opener.Strong(Box,\'coarse\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td><td><input type="button" class="button" name="thin" value="Paler" onMouseDown="opener.Pale(Box,\'coarse\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td><td><input type="button" class="button" name="strong" value="Stronger" onMouseDown="opener.Strong(Box,\'fine\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td><td><input type="button" class="button" name="pale" value="Paler" onMouseDown="opener.Pale(Box,\'fine\',\''+attribute+'\');" onMouseUp="opener.Stop();"></td></tr>');
		Controls.document.writeln('<tr>\n<td colspan=4>&nbsp;</td><td><input type="button" class="button" name="close" value="Finished" onClick="opener.StoreCookie();self.close();"></td>\n</tr></table>\n</form>\n</body>\n</html>');
		Controls.document.close();
		Controls.Box=box;
		Controls.focus();
	}
	else{
		alert('To display the controls your browser needs to be able to open windows automatically. It is currently unable to do so. Please review your browser settings and try again.');
	}
}

function Finished(box){
//	box.style.borderColor="rgb(128,128,128)";
}

function InitStyle(box){
	box.style.color=box.style.borderColor=(box.style.borderColor)?box.style.borderColor:"rgb(0,255,255)";
	box.style.scrollbarBaseColor=box.style.backgroundColor=(box.style.backgroundColor)?box.style.backgroundColor:"rgb(0,0,64)";
}

function KeepColours(){
	if(self.document.cookie){
		var parts=self.self.document.cookie.split(/; /);
		for(var i=0;i<parts.length;i++){
			parts[i]=parts[i].split(/=|;/);
			parts[i][1]=unescape(parts[i][1]);
		}
		SetColour(self.document.body,ParseColour(parts[0][1])[0],ParseColour(parts[0][1])[1],ParseColour(parts[0][1])[2],'text');
		SetColour(self.document.body,ParseColour(parts[1][1])[0],ParseColour(parts[1][1])[1],ParseColour(parts[1][1])[2],'background');
	}
	else{
		self.document.cookie='Text='+escape(TextColour)+';PATH='+URLPath;
		self.document.cookie='Background='+escape(BackgroundColour)+';PATH='+URLPath;
	}
}

function Light(box,cf,attrib){
	var col=(attrib=='background')?ParseColour(box.style.backgroundColor):ParseColour(box.style.color);
	var step=(cf=='coarse')?CoarseStep:FineStep;
	col[0]+=step;
	col[1]+=step;
	col[2]+=step;//alert(col);
	col=Clip(col);
	SetColour(box,col[0],col[1],col[2],attrib);
	Controls.Box=box;
	Attrib=attrib;
	CF=cf;
	Action=setTimeout('Run("Light",Controls.Box,CF,Attrib);',(cf=='coarse')?CoarseInterval:FineInterval);
}

function NewPage(box,page){/*
	InitStyle(box);
	location.href=page+'?Text='+box.style.color+'&Background='+box.style.backgroundColor;
*/}

function Pale(box,cf,attrib){
	var col=(attrib=='background')?ParseColour(box.style.backgroundColor):ParseColour(box.style.color);
	var step=(cf=='coarse')?CoarseStep:FineStep;
	if(!col[9]){
		if(col[8]){
			col[col[7]]+=step;
			col[(col[7]+1)%3]=col[(col[7]+2)%3]-=step;
		}
		else{
			if(col[10]){
				col[col[6]]-=step;
				col[(col[6]+1)%3]=col[(col[6]+2)%3]+=step;
			}
			else{
				col[col[6]]-=step;
				col[col[7]]+=step;
			}
		}
		SetColour(box,col[0],col[1],col[2],attrib);
	}
	Controls.Box=box;
	Attrib=attrib;
	CF=cf;
	Action=setTimeout('Run("Pale",Controls.Box,CF,Attrib);',(cf=='coarse')?CoarseInterval:FineInterval);
}

function ParseColour(colour){
	var colarray=[];
	if((colour.charAt(0).toLowerCase()=='r')){//alert(colour.substring(4).split(/,/));
		colarray=colour.substring(colour.indexOf('(')+1,colour.lastIndexOf(')')).split(/,/);
		for(var i=0;i<3;i++){
			colarray[i]=parseInt(colarray[i],10);
		}
	}
	else{
		if((colour.length==7)||(colour.length==4)){
			colour=colour.substr(1);
		}
		if(colour.length==3){
			colarray=[parseInt(colour.substr(0,1)+colour.substr(0,1),16),parseInt(colour.substr(1,1)+colour.substr(1,1),16),parseInt(colour.substr(2,1)+colour.substr(2,1),16)];
		}
		else{
			if(colour.length==6){
				colarray=[parseInt(colour.substr(0,2),16),parseInt(colour.substr(2,2),16),parseInt(colour.substr(4,2),16)];
			}
			else{
				colarray=[255,255,255];
				CantParse(2);
			}
		}
	}
	var size=colarray.slice(0);
	size.sort(SortMethod);
	colarray[3]=size[0];
	colarray[4]=colarray[0]+colarray[1]+colarray[2];
	colarray[5]=size[2];
	colarray[8]=(size[1]==size[2])?true:false;
	colarray[9]=(colarray[8]&&(size[0]==size[2]))?true:false;
	colarray[10]=(size[0]==size[1])?true:false;
	colarray[6]=(colarray[9])?1:SearchPrimary(colarray,colarray[5]);
	colarray[7]=(colarray[9])?0:SearchPrimary(colarray,colarray[3]);
	
	return colarray;//[r,g,b,min,totlum,max,highprim,lowprim,heq2flag,eq3flag,leq2flag]
}

function RestoreCookie(){//IE 5.5 cookie path changed by closing window which initiated it
	for(var i=0;i<document.cookiestore.length;i++){
		document.cookie=document.cookiestore[i]+';PATH='+URLPath;
	}
}

function Run(func,box,cf,attrib){
	if(Enable){//alert(func+'(box,cf)');
		eval(func+'(box,cf,attrib)');
	}
}

function SearchPrimary(colarray,val){
	for(var i=0;(colarray[i]!=val)&&(i<3);i++){}
	return i;
}

function SetColour(box,r,g,b,attrib){
	with(box.style){
		if(attrib=='background'){
			scrollbarBaseColor=backgroundColor='rgb('+r+','+g+','+b+')';
			self.document.cookie='Background='+escape('rgb('+r+','+g+','+b+')')+';PATH='+URLPath;
		}
		else{
			borderColor=color='rgb('+r+','+g+','+b+')';
			self.document.cookie='Text='+escape('rgb('+r+','+g+','+b+')')+';PATH='+URLPath;
		}
	}
}

function SortMethod(a,b){
	return a-b;
}

function Stop(){//alert('Stop called')
	clearTimeout(Action);
	Enable=false;
	setTimeout("Enable=true",300);
}

function StoreCookie(){//IE 5.5 window close problem
	document.cookiestore=document.cookie.split(/; /);
	setTimeout('RestoreCookie()',1000);
}

function Strong(box,cf,attrib){
	var col=(attrib=='background')?ParseColour(box.style.backgroundColor):ParseColour(box.style.color);
	var step=(cf=='coarse')?CoarseStep:FineStep;
//[r,g,b,min,totlum,max,highprim,lowprim,heq2flag,eq3flag,leq2flag]
	if(col[9]){
		col[6]=1;
		col[7]=0;
		col[9]=col[8]=false;
		col[10]=true;
	}
	if(col[8]){
		col[col[7]]-=step;
		col[(col[7]+1)%3]=col[(col[7]+2)%3]+=step;
	}
	else{
		if(col[10]){
			col[col[6]]+=step;
			col[(col[6]+1)%3]=col[(col[6]+2)%3]-=step;
		}
		else{
			col[col[6]]+=step;
			col[col[7]]-=step;
		}
	}
	SetColour(box,col[0],col[1],col[2],attrib);
	Controls.Box=box;
	Attrib=attrib;
	CF=cf;
	Action=setTimeout('Run("Strong",Controls.Box,CF,Attrib);',(cf=='coarse')?CoarseInterval:FineInterval);
}

function Warm(box,cf,attrib){//alert(box+'\n'+cf+'\n'+attrib);
	var col=(attrib=='background')?ParseColour(box.style.backgroundColor):ParseColour(box.style.color);
	var step=(cf=='coarse')?CoarseStep:FineStep;
	if(!col[9]){
		if(!col[10]){
			col[(col[7]+2)%3]-=step;
			col[(col[7]+1)%3]+=step;
		}
		else{
			col[col[6]]-=step;
			col[(col[6]+2)%3]+=step;
		}
		col=Clip(col);
		SetColour(box,col[0],col[1],col[2],attrib);
	}
	Controls.Box=box;
	Attrib=attrib;
	CF=cf;
	Arg=[box,attrib,cf];
	Action=setTimeout('Run("Warm",Controls.Box,CF,Attrib);',(cf=='coarse')?CoarseInterval:FineInterval);
//	Action=setTimeout('Run("Warm"',(cf=='coarse')?CoarseInterval:FineInterval),Arg);;
}

