//load after calculate.js and chemutil.js

//version bh 1:04 PM 7/26/01

//place here all variables for drawing:

ndivs=20	//max number of lines drawn

Parray=new Array() //for later printing in NN
peaklist=""

thecolor=new Array("black","blue","green","red","purple","brown","olive")
ht=240		//image display height in pixels
wd=631		//image display width in pixels
sstart=240	//pixels down from top of page that spectrum gif begins
lstart=10       //pixels from left that spectrum gif begins
Range_ppm=new Array(9.0,6.0)	//spectrum range left, right
marginleft=13*wd/631		//margin left, pixels
marginright=17*wd/631		//margin right, pixels
marginbottom=33*ht/240		//margin bottom, pixels
titleoffset=-50		//title offset above peaks, pixels (not used)
labeloffset=-30		//label offset
maxintensity=ht-marginbottom

specdiv="<img src=spectrum2.gif height="+ht+" width="+wd+">"


pixperppm=(wd-marginleft-marginright)/(Range_ppm[0]-Range_ppm[1])

//points per ppm in display

//the actual lines are calculated from Spectrum[]
//_left and _top convert ppm and height, respectively, to image positions

function _left(ppm){
	return (Range_ppm[0]-ppm)*pixperppm+lstart+marginleft-lw/2
}

function _top(height){
	return(sstart+ht-marginbottom-height)
}

lw=10		//line width, pixels
lw=1
vs=100		//vertical scale -- 1 proton singlet this high, pixels
hwidth=null	//width of an H character


MinInt = 0.01   //the smallest peak height to handle
fminppm=5.6
fmaxppm=9.0
reshz=4	//peak resolution
hzperppm=400 //will be set

title="Benzene"
starttop=100
startleft=500
Places=new Array(50,-15,107,16,105,80,50,108,-6,82,-8,16)


//styles are all set here

function styleof(swhat){
	return "\n#"+swhat+" {position:absolute;left:"+Parray[swhat][0]+";top:"+Parray[swhat][1]+"}"
}

function divof(swhat){
	return "\n<div id="+swhat+">"+Parray[swhat][2]+"</div>"
}

Spectrum=new Array()	//lines for display
Labels=new Array()	//labels for display

function setstyles(){
	Parray["spectrum"]=[lstart,sstart,specdiv]
	Parray["compound"]=[startleft,starttop,"<img src=c6.gif>"]
	for(var i=0;i<6;i++){
		var l=(startleft+Places[2*i])
		var t=(starttop+Places[2*i+1])
		Parray["H"+(i+1)]=[l,t,"H"]
		var s="abcdef".substring(i,i+1)
		Parray["a"+i]=[l,500,s]
	}
	for(var i=0;i<ndivs;i++){
		Spectrum[i]=1
		Parray["l"+i]=[100,550,""]
	}
	return styleinfo()
}

function styleinfo(){
	var s="<style>"
	s+=styleof("spectrum")
	s+=styleof("compound")
	for(var i=0;i<6;i++)s+=styleof("H"+(i+1))
	for(var i=0;i<6;i++)s+=styleof("a"+i)
	for(var i=0;i<Spectrum.length;i++)s+=styleof("l"+i)
	s+="\n</style>"
	return s
}

function divinfo(){
	var s=""
	s+=divof("spectrum")
	s+=divof("compound")
	for(var i=0;i<6;i++)s+=divof("H"+(i+1))
	for(var i=0;i<Spectrum.length;i++)s+=divof("l"+i)
	return s
}

Titles=new Array()	//titles for display


function clearspectrum(){
	for(j=0;j<Spectrum.length;j++)writeDiv("l"+j,"")
	Spectrum=new Array()
	Titles=new Array()
}	

function setHcolors(){
	var s=""
	for(var i=0;i<6;i++){
		if(Substituents[i]==0){
			s=matchcolor(i,Color[i],"H")
			writeDiv("H"+(i+1),s)
			Parray["H"+(i+1)][2]=s
		}
	}
}

function abcdof(j){
	var i=Orderof[Color[j]]
	return " abcdefg".substring(i,i+1)
}

function colorof(j){
	j=Color[j]//Orderof[Color[j]]
	return thecolor[j]
}

function matchcolor(i,j,h){
	var a=abcdof(i)
	var s="<b><font color="+colorof(i)+">"+h+"<sub>"+a+"</sub></font></b>"
	return s
}

function drawspectrum(Molecule){
	clearspectrum()
	createspectrum(Molecule)
	setHcolors()
	writelines()
}

function groupname(i){
	var s=Groups[i][0]
	return s.substring(0,s.indexOf("|"))
}

function grouplist(issimple){
	var s=""
	for(var i=0;i<6;i++){
		var a=groupname(Substituents[i])
		if(issimple){
			s+=a
		}else{
			s+=(i+1)+": "+(a=="H"?"H_"+abcdof(i):a)
		}
		s+="\n"
	}
	return s
}

function drawsub(which,i){
	var ds="H"+which
	var newsub=Groups[i][0]
	var cpoint=newsub.indexOf("|")
	if(hwidth==null)hwidth=divwidth("H1")
	if(which<=4){
		sgroup=newsub.substring(0,cpoint);
	}else{
		sgroup=newsub.substring(cpoint+1,newsub.length);
	}
	if(i>0)sgroup=setsubs(sgroup,Groups[i][1])
	if(sgroup=="H")sgroup="Ha"
	writeDiv(ds,sgroup)
	if(which>4){
		var l=startleft-8+hwidth-divwidth(ds)
		moveDivLeft(ds,l)
		Parray[ds][0]=l
	}
	Parray[ds][2]=sgroup
}

function createspectrum(M){
	//alert("createspectrum " +M)
	title=M[0]
	for (var i=1;i<M.length;i++)addpeak(M[i])
	for (var i=0;i<6;i++)addlabel(Pos[i],i)
}

function addpeak(Peak){
	var s=""
	var i=parseInt(Peak[0].charAt(1))-1
	if(Peak.length<3)return
	if(Peak.length==3){
		eval("_s('"+Peak[0]+"',"+Peak[1]+","+vs*Peak[2]+",0,"+i+")")
		return
	}
	for (j=4;j<Peak.length;j++)s+=","+Peak[j]
	eval("_"+Peak[3]+"('"+Peak[0]+"',"+Peak[1]+","+vs*Peak[2]+s+","+i+")")
}


function _s(s,ppm,ht,j,i){
	addtitle(s,ppm,ht)
	addline(ppm,ht,i)
}

function _d(s,ppm,ht,j,i){
	addtitle(s,ppm,ht)
	addline(ppm-j/hzperppm*0.5,ht/2,i)
	addline(ppm+j/hzperppm*0.5,ht/2,i)
}
function _t(s,ppm,ht,j,i){
	addtitle(s,ppm,ht)
	addline(ppm-j/hzperppm,ht/4,i)
	addline(ppm,ht/2,i)
	addline(ppm+j/hzperppm,ht/4,i)
}
function _q(s,ppm,ht,j,i){
	addtitle(s,ppm,ht)
	addline(ppm-j/hzperppm*1.5,ht/6,i)
	addline(ppm-j/hzperppm*0.5,ht/3,i)
	addline(ppm+j/hzperppm*0.5,ht/3,i)
	addline(ppm+j/hzperppm*1.5,ht/6,i)
}

function addline(ppm,height,i){
	Spectrum[Spectrum.length]=new Array(ppm,height,i)
}

function addlabel(ppm,i){
	Labels[i]=ppm
}

function addtitle(s,ppm,height){
	Titles[Titles.length]=new Array(s,ppm,height-titleoffset)
}


thelines=new Array()
function writelines(){
	var h=0
	for(var j=0;j<Spectrum.length;j++){
		h=Math.min(Spectrum[j][1],maxintensity)
		if(h>0)thelines[j]="<img src="+colorof(Spectrum[j][2])+".gif width="+lw+" height="+h+">"
	}
	showspectrum()
}

function showspectrum(){
	var s=""
	var l=0
	var t=0
	var h=0
	for(var j=0;j<Spectrum.length;j++){
		if(j==ndivs)return
		h=Math.min(Spectrum[j][1],maxintensity)
		l=_left(Spectrum[j][0])
		t=_top(h)
		divMove("l"+j,l,t)
		writeDiv("l"+j,thelines[j])
		Parray["l"+j]=[l,t,thelines[j]]
	}
	for(var i=0;i<6;i++){
		if(Labels[i]){
			l=_left(Labels[i])-4
			s=matchcolor(i,Color[i],"")		
			divMove("a"+i,l,_top(labeloffset))
		}else{
			s=""
		}
		writeDiv("a"+i,s)
	}
}
//------testing only here------

Test=new Array([])
CHCl3=new Array("CHCl3",['H1',7.23,1])
Unknowns=new Array()
Unknowns[0]=new Array("#1",['H1',7.50,2,'d',7.5],['H2',7.80,2,'d',7.5])
Unknowns[1]=new Array("#2",['H1',8.20,2,'t',7.5],['H2',7.60,2,'t',7.5])
Unknowns[2]=new Array("#3",['H1',6.50,2,'s',7.5],['H2',7.50,2,'s',7.5])
Unknowns[3]=new Array("#4",['H1',6.80,2,'t',7.5],['H2',7.20,2,'d',7.5])
Testlines=new Array("testlines"
	,['H1',6.0,1]
	,['H2',6.5,1]
	,['H3',7.0,1]
	,['H4',8.0,1]
	,['H5',8.5,1]
	,['H6',9.0,1]
)
donelist=""    //Unknowns won't be repeated
lastunknown=-1 //last unknown done

function dotest(){
	eval("Test=new Array([],["+document.info.test.value+"])")
	drawspectrum(Test)
}
function dotestlines(){
	drawspectrum(Testlines)
}

function dounknown(){
	if(donelist.indexOf("X")<0){
		donelist=""
		for(var i=0;i<Unknowns.length;i++)donelist+="X"
	}
	if(lastunknown>=0){havedone(lastunknown)}else{lastunknown=0}
	i=lastunknown
	while(donelist.charAt(i)==" ")i=rand(Unknowns.length)
	havedone(i)
	drawspectrum(Unknowns[i])
}

function havedone(i){
	donelist=donelist.substring(0,i)+" "+donelist.substring(i+1,donelist.length)
	lastunknown=i
}


