//CHECKJS  d:\BOB\PROMOTE\PROFWORK\SOFTWARE\FIRST\JS\acidbase\util.js 6/7/02 2:48:57 AM
//CHECKJS  d:\BOB\PROMOTE\PROFWORK\SOFTWARE\FIRST\JS\acidbase\util.js 6/7/02 2:45:54 AM
/*
utilities by Bob Hanson
*/
//math,string utilities
//form util

function addselect(sname,sarray,sdef,idoit){
	var n=eval(sarray + ".length")
	var s="<select name=_"+sname+" "+(idoit?"onchange=doit(-1)":"")+">"
	var sval=""
	for(var i=0;i<n;i++){
		sval=eval(sarray+"["+i+"]")
		s+="<option value="+sval+(sval==sdef?" selected>":">")+sval
	}
	s+="</select> "
	return s
}

function dowrite(doc,s){
	doc.open()
	doc.write("<html><body>"+s+"</body></html>")
	doc.close()
}

function extractinfo(swhat){
	var i=sinfo.indexOf(swhat)
	if(i<0)i=sinfo.length
	var s=sinfo.substring(0,i)
	sinfo=sinfo.substring(i+swhat.length,sinfo.length)
	return s
}

function getselect(sname){
	c=0;eval("c=document.info._"+sname)
	return c[c.selectedIndex].value
}

function log(x){return Math.LOG10E*Math.log(x)}

function nclean(swhat){
	var s=""
	var ch=""
	var sallowed="0123456789."
	for(var i=0;i<swhat.length;i++){
		ch=swhat.charAt(i)
		if(sallowed.indexOf(ch)>=0)s+=ch
	}
	return (s==""?0:s)
}

function opennewwindow(url,opt){
	var sm=""+Math.random()
	sm=sm.substring(3,10)
	return open(url,"AB_"+sm,opt)
}

function pH(x){return -log(x)}

function roundoff(x,ndec){
	var s=""
	//round x to ndec decimal places (+) fixed; (-) floating
	if(isNaN(x))return 0
	if(x==0)return 0
	if(ndec==0)return Math.round(x)
	var neg=(x<0?"-":"")
	var xs=Math.abs(x)+""
	var i=(xs.indexOf("E") & xs.indexOf("e"))
	if(ndec<0 && i<0){
		xs=roundoff(Math.abs(x)*1e-100,-ndec)
		i=(xs.indexOf("E") & xs.indexOf("e"))
		var e=(eval(xs.substring(i+1,xs.length))+100)
		s=neg+xs.substring(0,i)+(e!=0?"E"+e:"")
		return s
	}
	if (i>0){
		s=roundoff(xs.substring(0,i),Math.abs(ndec)-1)+"E"+xs.substring(i+1,xs.length)
		if(s.indexOf("10.")==0){
			i=(s.indexOf("E") & s.indexOf("e"))
			s="1"+s.substring(2,i+1)+(eval(s.substring(i+1,s.length))+1)
		}
		return neg+s
	}
	i=xs.indexOf(".")
	if (i<0){
		xs=xs+"."
		i=xs.indexOf(".")
	}
	xs=xs+"000000000"
	var s="."+xs.substring(i+1+ndec,xs.length)
	xs=xs.substring(0,i)+xs.substring(i+1,i+1+ndec)
	var add1=(xs.charAt(0)=="0")
	if(add1)xs="1"+xs
	xs=eval(xs)+Math.round(eval(s))+""
	if(add1)xs=xs.substring(1,xs.length)
	xs=xs.substring(0,xs.length-ndec)+"."+xs.substring(xs.length-ndec,xs.length)
	if(xs.indexOf(".")==0)xs="0"+xs
	return neg+xs
}

function sclean(swhat){
	var s=""
	var scaps=swhat.toUpperCase()
	var ch=""
	var sallowed="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890+"
	for(var i=0;i<scaps.length;i++){
		ch=scaps.charAt(i)
		if(sallowed.indexOf(ch)>=0)s+=swhat.charAt(i)
	}
	return s
}

function setselect(c,s){
	var i=0
	while(i<c.length){
		if(c[i].value==s)
		{
			c.selectedIndex=i
			return
		}
		i++
	}
}

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
}

function writeinfo(theframe,s,isrep){
	if(arguments.length==2)isrep=true
	isrep?theframe.document.open("text/html","replace"):theframe.document.open()
	theframe.document.write("<html><body>"+s+"</body></html>")
	theframe.document.close()
}

