ABBR=new Array()
ABBR["Me"]="CH3"
ABBR["Et"]="C2H5"
ABBR["Pr"]="C3H7"
ABBR["Bu"]="C4H9"
ABBR["Ph"]="C6H5"
ABBR["Ac"]="CH3CO"

function fixparen(sform){
 sform=sform.replace(/\=|\-/g,"")
 var r=new RegExp()
 for(var i in ABBR){
	if(sform.indexOf(i)>=0){
		r=new RegExp(i,"g")
		sform=sform.replace(r,"("+ABBR[i]+")")
	}
 }
 return sform
}

function fixformula(sf){
 sf=fixparen(sf)
 var irt=sf.indexOf(")")
 var ilt=0
 var n=0
 var ns=0
 var snew=""
 var s=""
 while(irt>=0){
	ilt=sf.substring(0,irt).lastIndexOf("(")
	n=parseInt(sf.substring(irt+1,sf.length))
	if(ilt>=0){
		s=sf.substring(ilt+1,irt)
		ns=(n?n:1)
		snew=""
		for(var i=0;i<ns;i++)snew+=s
		sf=sf.substring(0,ilt)+snew+sf.substring(irt+1+(n?(""+n).length:0),sf.length)
	}else{
		alert("missing left parenthesis")
		return ""
	}
	irt=sf.indexOf(")")
 }
 return calcmf(sf)
}

function calcmf(sform){
 var SList="H,He,Li,Be,B,C,N,O,F,Ne,Na,Mg,Al,Si,P,S,Cl,Ar,K,Ca,Sc,Ti,V,Cr,Mn,Fe,Co,Ni,Cu,Zn,Ga,Ge,As,Se,Br,Kr,"
	+"Rb,Sr,Y,Zr,Nb,Mo,Tc,Ru,Rh,Pd,Ag,Cd,In,Sn,Sb,Te,I,Xe,Cs,Ba,La,Ce,Pr,Nd,Pm,Sm,Eu,Gd,Tb,Dy,Ho,Er,Tm,Yb,Lu,"
	+"Hf,Ta,W,Re,Os,Ir,Pt,Au,Hg,Tl,Pb,Bi,Po,At,Rn,Fr,Ra,Ac,Th,Pa,U,Np,Pu,Am,Cm,Bk,Cf,Es,Fm,Md,No,Lr,Db,Jl,Rf,Bh,Hn,Mt"

 SList=SList.split(",").sort()
 var NList=new Array()
 
 var n=0
 var p=0
 var sout=""
 var c=""
 var ic=0
 var ih=0
 for(i=SList.length-1;i>=0;i--){
	c=SList[i]
	if(c=="C")ic=i
	if(c=="H")ih=i
	p=sform.indexOf(c)
	while(p>=0){
		n=parseInt(sform.substring(p+c.length,sform.length))
		if(!NList[i])NList[i]=0
		NList[i]+=(!n?1:n)
		n=(n?n+"":"")
		sform=sform.substring(0,p)+sform.substring(p+c.length+n.length)
		p=sform.indexOf(c)
	}		
 }
 
 n=NList[ic]
 if(n)sout+=SList[ic]+(n>1?n:"")
 n=NList[ih]
 if(n)sout+=SList[ih]+(n>1?n:"")
 for(i=0;i<SList.length;i++){if(i!=ic&&i!=ih){
	n=NList[i]
	if(n)sout+=SList[i]+(n>1?n:"")
 }}
 return sout
}


