//11/18/02-updated netscape 7
thepage="Buffers props.(78)"
refnumber=120
pK=0
pH=0
theacid=""
thebase=""
acidconc=0
baseconc=0
ratio=0
askit=""
newratio=0
which=0
vbuffer=0
vadd=0
newone=""
attempts=0
totl=0
corrt=0
adsymbol=""
moles=new Array()
henderson="pH=pKa+log([base]/[acid])"
pHend=""
function dataset(acid,base,Ka,formacid,formbase){
	this.acid=acid
	this.base=base
	this.Ka=Ka
	this.formacid=formacid
	this.formbase=formbase
}
function question(p1,p2,p3,p4,p5,p6,p7){
	this.p1=p1
	this.p2=p2
	this.p3=p3
	this.p4=p4
	this.p5=p5
	this.p6=p6
	this.p7=p7
}
quest=new Array(10)
quest[1]=new question("A "," buffer solution has the following concentrations:<br> ","If "," mL of "," is added to "," mL of the buffer, what is the resultant pH?")
species=new Array(50)
species[1]=new dataset("acetic acid","acetate",1.75e-5,"CH<SUB>3</SUB>COOH","CH<SUB>3</SUB>COO<SUP>-</SUP>")
species[2]=new dataset("acrylic acid","acrylate",5.5e-5,"C<SUB>3</SUB>H<SUB>4</SUB>O<SUB>2</SUB>","C<SUB>3</SUB>H<SUB>3</SUB>O<SUB>2</SUB><SUP>-</SUP>")
species[3]=new dataset("arsenous acid","arsenate",6.6e-10,"H<SUB>3</SUB>AsO<SUB>3</SUB>","H<SUB>2</SUB>AsO<SUB>3</SUB><SUP>-</SUP>")
species[4]=new dataset("benzoic acid","benzoate",6.3e-5,"C<SUB>7</SUB>H<SUB>5</SUB>O<SUB>2</SUB>","C<SUB>7</SUB>H<SUB>4</SUB>O<SUB>2</SUB><SUP>-</SUP>")
species[5]=new dataset("bromoacetic acid","bromoacetate",1.3e-3,"C<SUB>2</SUB>H<SUB>3</SUB>BrO<SUB>2</SUB>","C<SUB>2</SUB>H<SUB>2</SUB>BrO<SUB>2</SUB><SUP>-</SUP>")
species[6]=new dataset("butyric acid","butyrate",1.5e-5,"C<SUB>4</SUB>H<SUB>8</SUB>O<SUB>2</SUB>","C<SUB>2</SUB>H<SUB>7</SUB>O<SUB>2</SUB><SUP>-</SUP>")
species[7]=new dataset("chloroacetic acid","chloroacetate",1.4e-3,"C<SUB>2</SUB>H<SUB>3</SUB>ClO<SUB>2</SUB>","C<SUB>2</SUB>H<SUB>2</SUB>ClO<SUB>2</SUB><SUP>-</SUP>")
species[8]=new dataset("cyanic acid","cyanate",3.5e-4,"HOCN","OCN<SUP>-</SUP>")
species[9]=new dataset("formic","formate",1.8e-4,"H<SUB>2</SUB>CO<SUB>2</SUB>","HCO<SUB>2</SUB><SUP>-</SUP>")
species[10]=new dataset("hydrofluoric acid","fluoride",6.6e-4,"HF","F-")
species[11]=new dataset("nitrous acid","nitrite",7.2e-4,"HNO<SUB>2</SUB>","NO<SUB>2</SUB><SUP>-</SUP>")
species[12]=new dataset("propionic acid","propionate",1.3e-5,"C<SUB>3</SUB>H<SUB>6</SUB>O<SUB>2</SUB>","C<SUB>3</SUB>H<SUB>5</SUB>O<SUB>2</SUB><SUP>-</SUP>")
option=new Array("Since a base was added, the acid moles decrease and the base moles increase.","Since an acid was added, the base moles decrease and the acid moles increase.")
function startit(){
	clear()
	totl++
	document.forms[0].total.value=totl
	which=Math.ceil(12*Math.random())
	theacid=species[which]['acid']
	thebase=species[which]['base']
	which=Math.ceil(12*Math.random())
	theacid=species[which]['acid']
	thebase=species[which]['base']
	ratio=0
	while(ratio<.5 || ratio>5){ratio=10*Math.random()}
	ratio=number(ratio,3,3)
	acidconc=0
	while(acidconc<.1)acidconc=Math.random()
	baseconc=acidconc*ratio
	acidconc=number(acidconc,2,3)
	baseconc=number(baseconc,2,3)
	vbuffer=getvbuffer()
	moles[0]=.001*vbuffer*acidconc
	moles[1]=.001*vbuffer*baseconc
	pK=-Math.log(1*species[which]['Ka'])/2.303
	pK=number(pK,3,3)
	pH=1*pK+Math.log(1*ratio)/2.303
	pH=number(pH,3,3)
	choice=Math.floor(2*Math.random())
	changeit(choice)
	pHend=1*pK+Math.log(newratio)/2.303
	pHend=Math.round(100*pHend)/100
	//whichask=Math.ceil(4*Math.random())
	makequestion(1)
}
function changeit(choice){
	vadd=getvadded()
	addconc=concadd()
	if(choice==0){
		adsymbol="NaOH"	
		moles[2]=.001*vadd*addconc
		newbaseconc=moles[1]+moles[2]
		newacidconc=moles[0]-moles[2]
	}
	else{
		adsymbol="HCl"	
		moles[2]=.001*vadd*addconc
		newbaseconc=moles[1]-moles[2]
		newacidconc=moles[0]+moles[2]
	}
	newratio=newbaseconc/newacidconc
	return newratio
}
function concadd(){
	h=Math.ceil(5*Math.random())
	if(h==1){addconc=.10}
	if(h==2){addconc=.15}
	if(h==3){addconc=.20}
	if(h==4){addconc=.25}
	if(h==5){addconc=.30}
	return addconc
}
function getacidsym(){
	acidsym="["+species[which]['formacid']+"]="+acidconc+"<b>M</b><br>"
	return acidsym
}
function getbasesym(){
	basesym="["+species[which]['formbase']+"]="+baseconc+"<b>M</b><br>"
	return basesym
}

function makequestion(f){
	acidsym=getacidsym()
	basesym=getbasesym()
	if(f==1){thequest=quest[1]['p1']+theacid+quest[1]['p2']+acidsym+basesym+quest[1]['p3']+vadd+	quest[1]['p4']+addconc+"<b>M</b> "+adsymbol+quest[1]['p5']+vbuffer+quest[1]['p6'];theanswer=pHend}
	thequest+=("(pKa="+pK+")")
	showquest(thequest)
	buildanswer()
}
function buildanswer(f){
	for(var k=0;k<3;k++)moles[k]=number(moles[k],3,3);
	thetable="<b>moles:</b><br>"+theacid+"="+moles[0]+"<br>"+thebase+"="+moles[1]+"<br>"+adsymbol+"="+moles[2]
	theanswer="First, convert all of the quantities to moles by multiplying the concentration times the volume in L:<br>"+thetable+"<br>Now, recalculate the concentrations."+option[choice]+"<br>"
	choice==0?(line1="<B>acid:</B>"+moles[0]+"-"+moles[2]+"="):(line1="<B>acid:</B>"+moles[0]+"+"+moles[2]+"=")
	choice==0?(line2="<B>base:</B>"+moles[1]+"+"+moles[2]+"="):(line2="<B>base:</B>"+moles[1]+"-"+moles[2]+"=")
	line1+=number(newacidconc,3,3)
	line2+=number(newbaseconc,3,3)
	theanswer+=(line1+"<br>"+line2+"<br>Using the Henderson-Hasselbach Equation<br>"+henderson+"<br>Substituting:<br>")
	theanswer+="pH="+pK+"+log("+number(newbaseconc,3,3)+"/"+number(newacidconc,3,3)+")="+pHend
	}
function getvbuffer(){
	vbuffer=0
	while(vbuffer<100)vbuffer=Math.round(500*Math.random())
	return vbuffer
}
function getvadded(){
	vadd=10+5*Math.round(10*Math.random())
	return vadd
}
function answer(ans){
	ansr=pHend
	if(tried==1)alert("You've done this one. Get a new problem!");
	else{
	if(tried==2){totl++;document.forms[0].total.value=totl};
	if(ans>.95*ansr & ans<1.05*ansr){
		document.forms[0].results.value="Correct"
		corrt++
		document.forms[0].correct.value=corrt
		tried=1
	}
	else{
		document.forms[0].results.value="Incorrect"
		tried=2
		}
	}
}
