//CHECKJS  d:\BOB\PROMOTE\PROFWORK\SOFTWARE\FIRST\JS\acidbase\const.js 6/7/02 2:45:00 AM
ismac=false//if(_sdata.indexOf("\n")<0)
maxtitrationpts=100
nl="\n"
//initial info
//var mL1=new Array("1","5","10","20","25","40","50")
var mL2=new Array("0","1","2","3","4","5","6","7","8","9","10","11","15","20","24","25","26","30","40","50","60","70","80","90","100")
var mL1=new Array("0","1","2","3","4","5","6","7","8","9","10","11","15","20","24","25","26","30","40","50","60","70","80","90","100")
Kw=1.0e-14
//add acid to this list and also add Kainfo for that acid
var weakacids=new Array(
	"HC2H3O2",
	"HCN",
	"H2SO4",
	"H2CO3",
	"H2C2O4",
	"H3PO4",
	"H3Cit",
	"NH4+"
)
var Kainfo=new Array()
Kainfo["HC2H3O2"]=new Array(1.8e-5,"C2H3O2-")
Kainfo["NH4+"]=new Array(Kw/1.8e-5,"NH3")
Kainfo["HCN"]=new Array(4.9e-10,"CN-")
Kainfo["H3PO4"]=new Array(7.5e-3,"H2PO4-",6.2e-8,"HPO4-2",4.2e-13,"PO4-3")
Kainfo["H3Cit"]=new Array(7.4e-4,"H2Cit-",1.7e-5,"HCit-2",4.0e-7,"Cit-3")
Kainfo["H2SO4"]=new Array(1e100,"HSO4-",1.2e-2,"SO4-2")
Kainfo["H2C2O4"]=new Array(5.9e-2,"HC2O4-",6.4e-5,"C2O4-2")
Kainfo["H2CO3"]=new Array(4.3e-7,"HCO3-",5.6e-11,"CO3-2")
WHITE="FFFFFF"
GRAY="F0F0F0"
RED="FF0000"
ORANGE="FFA000"
DKORANGE="A0A000"
YELLOW="FFFF00"
DKYELLOW="A0FF00"
LTGREEN="A0FFA0"
DKGREEN="00FF00"
LTAQUA="00FFFF"
DKAQUA="00A0A0"
DKBLUE="A0A0F0"
LTBLUE="C0C0FF"
var morecolors=new Array(DKORANGE,ORANGE,DKYELLOW,YELLOW,DKGREEN,LTGREEN,DKAQUA,LTAQUA)
var subs=new Array("H2O","HCl","NaOH")
var speciescolor= new Array(GRAY,RED,DKBLUE,GRAY)
var speciesname=  new Array("Na+","H+","OH-" ,"Cl-")
Na=0;H=1;OH=2;X=3;HA=0;A=0
var speciesinfo=new Array()
//                              Na H  OH X
//                              0  1  2  3
Order=                new Array(1, 2, 0, 3)
Charge=               new Array(1, 1,-1,-1)
weaktype=             new Array(0, 0, 0, 0)
weakpoly=             new Array(0, 0, 0, 0)
issalt=               new Array(0, 0, 0, 0)
Ntype=                new Array(0, 0, 0, 0)
ABtype=               new Array(0, 1, 2, 0)
AConj=                new Array(0, 0, 0, 0)
BConj=                new Array(0, 0, 0, 0)
Kaval=                new Array(0, 0, 0, 0)
Kanew=                new Array(0, 0, 0, 0)
B_HAratio=            new Array(0, 0, 0, 0)
mmolweak=             new Array(0, 0, 0, 0)
speciesinfo["H2O"]=   new Array(0, 0, 0, 0)
speciesinfo["HCl"]=   new Array(0, 1, 0, 1)
speciesinfo["NaOH"]=  new Array(1, 0, 1, 0)
nspecies=Order.length
acidindex=new Array()
acidlist=""
speciesinfolist=""
//variables
icolor=0
iweakfirst=0
iweaklast=0
titrationtimer=0
titrationend=0
titrationstep=0
deftitrationend=deftitrationpts=titrationpts=50
deftitrationstep=1
titrationdata=""
sexplain=""
salert=""
sexplain0=""
stitle=""
sxlabel=""
slastsub="HCl"
var mmol=new Array()
var mmol0=new Array()
mLtotal=0
mLtotal2=0
totalcharge=0
mLthis=0
thepH=0
pHround=0
isbruteforce=false
npts=0
var soln=new Array("","","")
sacid=""
titrationcommand=""
ithissoln=0
var ithiscomponent=new Array(2)
showingonesoln=false
showingsolns=false
showingspecial=false
showingequil=false
showingmix=false
titrating=false
havesetratios=false
haveinitialized=false
titrationdelay=256
woptionsburet="alwaysRaised,width=120,height=283,left=0,top=140"
buretwin=new Array()
buretwin.closed=true
Display=new Array()
//this next function is executed immediately while loading

function getspeciescharge(species){
	var icharge=0
	var i=species.indexOf("+")
	if(i>=0){
		icharge=(i==species.length-1?1:parseInt(species.substring(i+1,species.length)))
	}
	var i=species.indexOf("-")
	if(icharge==0 && i>=0){
		icharge=(i==species.length-1?-1:parseInt(species.substring(i,species.length)))
	}
	if(isNaN(icharge))icharge=0
	return icharge
}

function getspeciesname(aname,icharge){
	if(icharge==null)icharge=getspeciescharge(aname)
	var ipt=0
	var sname=aname
	ipt=sname.indexOf("+")
	if(ipt>=0)sname=sname.substring(0,ipt)
	ipt=sname.indexOf("-")
	if(ipt>=0)sname=sname.substring(0,ipt)
	sname=sname+(icharge<-1?icharge:icharge==-1?"-":icharge==0?"":icharge==1?"+":"+"+icharge)
	return sname
}

function getsubstancename(aname,icharge){
	var ipt=0
	var sname=aname
	ipt=sname.indexOf("+")
	if(ipt>=0)sname=sname.substring(0,ipt)
	ipt=sname.indexOf("-")
	if(ipt>=0)sname=sname.substring(0,ipt)
	sname=(icharge<0?"Na"+(icharge<-1?-icharge:""):"")+sname
	sname+=(icharge>0?"Cl"+(icharge>1?icharge:""):"")
	return sname
}

function loadallspecies()
{
	for(var i=0;i<weakacids.length;i++)setspeciesinfo(weakacids[i])
	haveinitialized=true
}loadallspecies()

function newspecies(aname,icharge,itype)
{
	var sinfo=""
	var ipt=0
	var sname=getspeciesname(aname,icharge)
	var sinfo=""
	nspecies=Order.length
	speciesname[nspecies]=sname
	speciescolor[nspecies]=morecolors[icolor]
	icolor=((icolor+1) % morecolors.length)
	Charge[nspecies]=icharge
	B_HAratio[nspecies]=0
	mmolweak[nspecies]=0
	Kanew[nspecies]=haveinitialized
	ABtype[nspecies]=itype  //1 acid 2 base 3 amphoteric
	Order[nspecies]=nspecies
	BConj[nspecies]=(itype&1?nspecies+1:0)
	AConj[nspecies]=(itype&2?nspecies-1:0)
	if(itype==1)
	{
		HA=nspecies
		weakpoly[HA]=-1
	}
	weaktype[nspecies]=HA
	weakpoly[HA]++
	Ntype[nspecies]=(sname.indexOf("+")>0)
	issalt[nspecies]=(sname.indexOf("+")>0||sname.indexOf("-")>0)
	nspecies++
	//now for substance info
	sname=getsubstancename(sname,icharge)
	i=subs.length
	subs[i]=sname
	if(haveinitialized)
	{
		var c=document.info._subs1
		var o=new Option(sname,sname)
		c.options[c.options.length]=o
		var c=document.info._subs2
		var o=new Option(sname,sname)
		c.options[c.options.length]=o
	}
	//setting up the speciesinfo here..only interested in Cl- and Na+
	
	sinfo=(icharge<0?-icharge:0)+",0,0,"+(icharge>0?icharge:0)
	sinfo+=","+speciesinfolist+"1"
	speciesinfo[sname]=sinfo.split(",")
	speciesinfolist+="0,"
}

function nextspecies(species){
	var icharge=getspeciescharge(species)
	var sroot=getspeciesname(species,0)
	var s=""
	var i=0
	if(species=="NH4+")return "NH3"
	if(species.charAt(0)!="H")return ""
	s=species
	if(isNaN(parseInt(s.charAt(1))))s="H1"+s.substring(1,s.length)
	i=parseInt(s.charAt(1))-1
	s=getspeciesname((i>1?"H"+i:i==1?"H":"")+s.substring(2,s.length),icharge-1)
	return s
}

function setspeciesinfo(acidname)
{
	var i=0
	var s=acidname+"|"
	var aname=""
	var sname=""
	var icharge=0
	var itype=0
	var l=0
	var ka=0
	if(acidlist.indexOf(s)>=0)return
	acidlist+=s
	nspecies=speciesname.length
	icharge=getspeciescharge(acidname)
	sname=getsubstancename(acidname,icharge)
	acidindex[acidname]=nspecies
	newspecies(acidname,icharge,1)
	l=Kainfo[acidname].length
	if(l%2==1)alert("Ka information for "+acidname+" is incomplete. It should read \"Ka1,species1,Ka2,species2,...\" but instead reads:\n\n"+Kainfo[acidname])
	for(var i=0;i<l-1;i+=2)
	{
		ka=Kainfo[acidname][i]
		Kaval[nspecies-1]=(ka<=0?1e99:ka)
		aname=Kainfo[acidname][i+1]
		icharge--
		itype=(i>=l-3?2:3)
		newspecies(aname,icharge,itype)
	}
	Kaval[nspecies-1]=0
	if(Kaval[HA]>100)
	{
		speciesinfo[sname][H]=1
		speciesinfo[sname][HA]=0
		speciesinfo[sname][HA+1]=1
		ABtype[HA+1]-=2
	}
}

