//CHECKJS  D:\bob\promote\profwork\software\organic\js\data\common.js 6/7/02 3:31:51 AM
/////common//////
datadir=(document.location.href.indexOf("data")>0?".":"../../../medialib/data")
nchapmax=40
datatesting=false
iquiz=0
nchapmax=40
endash="&#150##"
Quiz=new Array()
qpt=0
quizflag=4
echapterpt=5
bruicept=7
bookdatapt=7
Topiclist=new Array()
Elist=new Array(0,0)   //Elist[ch#]=Topic#
Tlist=new Array(0,0)   //Tlist[topic#]=selectedIndex
Books=new Array(
	["Bruice","<I>Organic Chemistry, Fourth Edition</i> by Paula Yurkanis Bruice",1,true]
	,
	["Wade","<i>Organic Chemistry, Fifth Edition</i> by L. G. Wade, Jr.",3,true]
)
sdigits=" 0123456789"
//utilities

function chapterof(i,ibook,ip){ //1,2,3
	return Data[i][bookdatapt+ibook][ip][0]
}

function checkfor(subst,swhat){
	var i=swhat.indexOf("|")
	var s=(i>0?swhat.substring(0,i):swhat)
	if(s.indexOf(",")<0)return (subst.indexOf(s)>=0)
	var S=s.split(",")
	for(var j=0;j<S.length;j++){if(subst.indexOf(S[j])>=0)return true}
	return false
}

function chp(i,ibook,ip){
	var ch=chapterof(i,ibook,ip)
	if(ch==0)return ""
	var p=pageof(i,ibook,ip)
	return "<font color=blue>"+Books[ibook][0]+" ch. "+ch+(p?", p. "+p:"")+"</font>"
}

function cleancode(s){
	var st=strsub(s,"@","")
	st=strsub(st,"##","")
	st=strsub(st,"^","")
	st=strsub(st,"_","")
	st=strsub(st,"--","-")
	st=strsub(st,"<I>","")
	st=strsub(st,"</I>","")
	return st
}

function finddata(isubst,iprod,ich1,ich2,sreag,A,Found){
	//if ich1<0 then this is a page range
	//A is the answer array for quizzes
	var iss=true
	var isp=true
	var isr=true
	var ich=0
	var ipage=0
	var s=""
	var subst=""
	var prod=""
	var ipage0=(ich1<0?-ich1:0)
	var ipage1=(ich2<0?-ich2:9999)
	if(isubst){
		s=Groups[isubst][2]
		subst=Groups[isubst][0]+(s.length?","+s:"")
	}
	if(iprod){
		s=Groups[iprod][2]
		prod=Groups[iprod][0]+(s.length?","+s:"")
	}
	for(var i=1;i<Data.length;i++){if(Found[i]<0 && isbooktype(i)){
			ich=Data[i][echapterpt]
			ipage=Data[i][bruicept][0][1]
			if(ipage>=ipage0 && ipage<=ipage1 && (ich2<=0 || ich2>=ich && ich1<=ich)){
				if(isubst)iss=checkfor(subst,Data[i][0])
				if(iss && iprod)isp=checkfor(prod,Data[i][2])
				if(iss && isp){
					if(sreag.length){
						s=cleancode(Data[i].join())
						isr=(s.indexOf(sreag)>=0)
					}
					if(isr){Found[i]=A.length;A[A.length]=new Array(i,0,0,0)}
				}
		}}
	}
	return A.length
}

function fixline(sout){
	var s=strsub(sout,";","<br>")
	s=strsub(s,"##",";")
	return s
}

function getbooklist(){
	var s=""
	var npt=0
	for (var i=0;i<Books.length;i++){
		s+="<br><input type=checkbox name=book value="+i+">"+Books[i][1]
	}
	s=s.substring(4,s.length)
	return s
}sbooklist=getbooklist()

function gettopiclist(){
	
	var itopic=0
	var ilast=-1
	var ilen=0
	var ilena=0
	Topiclist=new Array(["any",0])
	Elist=new Array(0,0)
	Tlist=new Array(0,0)
	for(var i=1;i<Topics.length;i++)Elist[Topics[i][0]]=i
	
	for(var i=1;i<=nchapmax;i++)Topiclist[i]=new Array(0,0)
	for(var i=1;i<Data.length;i++){
		itopic=Elist[Data[i][5]]
		if(itopic){
			Topiclist[itopic][0]=itopic
			Topiclist[itopic][1]++
			Topiclist[0][1]++
		}
	}
	var s="<select name=chapter  onchange=dotopic() onselect=dotopic()><option value=0 selected>All Topics"
	n=0
	for(var i=1;i<Topics.length;i++){
		if(Topiclist[i][1]){
			s+="\n<option value="+i+">"+Topics[i][1]
			n++
			Tlist[i]=n
		}
	}
	s+="</select>"
	return s
}

function isbooktype(idata){
	for(i=0;i<Books.length;i++){
		if(Books[i][3] && chapterof(idata,i,0))return true
	}
	return false
}

function pageof(i,ibook,ip){ //1,2,3
	return Data[i][bookdatapt+ibook][ip][1]
}

function setbookinfo(){
	//for now, just Bruice. This is for the automatic "findreaction" function
	//would be from parent?
	Books[0][3]=true  //bruice
	Books[1][3]=false //wade
}setbookinfo()


function setinfo(i,B){
	//0:arrow 1:sm 2:re 3:pr
	B[1]=strsub(setsubs(Data[i][0]),","," + ")
	var re=setsubs(Data[i][1])
	B[0]=(re.indexOf("==")>=0?"datae":"dataa")
	if(re.indexOf("==")>=0)re=re.substring(0,re.indexOf("=="))
	B[2]=re
	B[3]=strsub(setsubs(Data[i][2]),","," or ")
	B[4]=""
	for(var ib=0;ib<Books.length;ib++){
		if(Books[ib][3]){
			for(var ip=0;ip<Books[ib][2];ip++){
				B[4]+="<br>"+chp(i,ib,ip)
			}
		}
	}
	B[4]=B[4].substring(4,B[4].length)
	B[5]="<font color=red>"+setsubs(Data[i][3])+"</font>"
}

function setsubs(sform)
{
	//generally numbers subscripted and +/- superscripted
	//overridden by _, ^, and @
	//|imagefile overrides entire operation
	//,/, truncates
	var i=sform.indexOf("|")
	if(i>=0)return "<img src="+datadir+"/"+sform.substring(i+1,sform.length)+".gif>"
	var sf=""
	var isnext=false
	var isfirst=true
	sform=strsub(sform,"--","~")
	sform=strsub(sform,"( ","(")
	sform=strsub(sform," )",")")
	i=sform.indexOf(",/,")
	var ilast=(i>=0?i:sform.length)
	for (var i=0;i<ilast;i++)
	{
		s=sform.charAt(i)
		if(isnext){
			sf+=(isnext==1?"<sup>"+s+"</sup>":(isnext==-1?"<sub>"+s+"</sub>":s))
			isnext=0
			continue
		}
		if(s=="_"){isnext=-1;continue}
		if(s=="^"){isnext=1;continue}
		if(s=="@"){isnext=2;continue}
		var isdigit=(sdigits.indexOf(s)>0)
		if(!isfirst && isdigit){
			sf+="<sub>"+s+"</sub>"
		}else{
			if(s=="+"||s=="-")s="<sup>"+s+"</sup>"
			sf+=s
			if(!isdigit)isfirst=false
		}
		if(s==" " || s==";"||s=="~")isfirst=true
	}
	sf=strsub(sf," oC"," <sup>o</sup>C")
	sf=strsub(sf,"alpha","<span style='font-family: symbol'>a</span>")
	sf=strsub(sf,"beta","<span style='font-family: symbol'>b</span>")
	sf=strsub(sf,"<sup>-</sup>","<sup>"+endash+"</sup>")
	sf=strsub(sf,"~",endash)
	return sf
}

function strsub(ssub,ch1,ch2)
{
	if (ch2!=""){if (ch2.indexOf(ch1)>=0) return ssub}
	var s=ssub
	var i=s.indexOf(ch1)
	while (i>=0)
	{
		s=s.substring(0,i)+ch2+s.substring(i+ch1.length,s.length)
		i=s.indexOf(ch1)
	}
	return s
}

