//CHECKJS  D:\bob\promote\profwork\software\organic\js\data\quiz.js 6/7/02 3:31:56 AM

//copyright 2001,2002 Robert M. Hanson, St. Olaf College
//all code and functionality herein not simply in the
//classification of generally useful stuff is copyrighted.
//all rights reserved
//12:54 PM 3/2/2004 fixed jumpto(); 3:26 PM 5/27/02
//put Prentice-Hall's structure here:

baseref="http://ajax.prenhall.com/~bookbind/books/hanson/book/chapter#/medialib/flash/"

//allows for either directory structure:
//if(document.location.href.indexOf("Chapter")<0)chapterlocation=chapterlocation.replace(/Chapter\_x/,"ch_nn")

function dotopic(){}

function createquiz(A,Found,title,n,nquiz,allowrp){
	var npossible=(allowrp==99?3:(allowrp<1?2:1))
	if(n*npossible<nquiz)nquiz=n*npossible
	Quiz=new Array()
	for (var nj=1;nj<=nquiz;nj++)getquiz(A,nj,nquiz,allowrp,Quiz)
}

function divdoc(name){
	var ds=findlayer(name)
	return (isnn4?ds.document:document)
}

function divwrite(name,sinfo){
	var ds=findlayer(name)
	if(isnn4){
		ds.document.open()
		ds.document.write(sinfo)
		ds.document.close()
	}else{
		ds.innerHTML=sinfo
	}
}

function dochapter(){}

function dofind(){
	var ds=divdoc("infodiv")
	var d=ds.info
	var i=0
	var allowrp=0
	if(d.qtype[0].checked)allowrp=1
	if(d.qtype[1].checked)allowrp=2
	if(d.qtype[2].checked)allowrp=3
	var ich=Topics[parseInt(d.chapter[d.chapter.selectedIndex].value)][0]
	var ich2=ich
	var ich1=ich
	if(ich2<ich1){i=ich2;ich2=ich1;ich1=i}
	var A=new Array()
	var Found=new Array()
	for(var i=0;i<Data.length;i++)Found[i]=-1
	var n=finddata(0,0,ich1,ich2,"",A,Found)
	var title=""
	createquiz(A,Found,title,n,25,allowrp)
	qpt=0
	nextq(true)
}

function findlayer(name){
	if(isnn4)return document.layers[name]
	if(isie4)return document.all[name]
	if(isnn6)return document.getElementById(name)
	return false
}

function getquiz(A,nj,nquiz,allowrp,Quiz){
	//allowrp:
	//0 any re,pr
	//1 sm only
	//2 re only
	//3 pr only
	//-1 not sm
	//-2 not re
	//-3 not pr
	//99 any sm, re, pr
	//A[][0] is data pointer
	//A[][1,2,3] track what's been asked
	if(allowrp==0)allowrp=-1
	var sout=""
	var i=0
	var ia=0
	var ij=0
	var ok=false
	var B=new Array(6)
	var ntry=0
	while(!ok){
		if(ntry++>50)return ""
		ia=Math.floor(Math.random()*A.length)
		j=Math.floor(Math.random()*3)+1
		ij=(A.length>9?1:j)
		ok=(!A[ia][ij] && (allowrp==99 || allowrp==j || allowrp<0 && allowrp!==-j))
		i=A[ia][0]
		ok=(ok&&(Data[i][6]>=0)&&(j!=Data[i][6]))//check for type allowed
	}
	A[ia][ij]=true
	setinfo(i,B)
	sans=fixline(B[j])
	B[j]="&nbsp##?&nbsp##"
	iquiz=(nj==1?1:iquiz+1)
	Quiz[iquiz]=new Array()
	sout="<p>&nbsp;<p><hr>"
	sout+="#"+iquiz+"<blockquote><table><tr><td colspan=3>"
	sout+="<tr><td valign=center align=right>"+B[1]
	sout+="<td align=center>"+B[2]+"<br><img src=../data/"+B[0]+".gif><p>&nbsp;"
	sout+="<td valign=center>"+B[3]+"\n"
	sout+="<tr><td colspan=3>"
	sout=fixline(sout)
	sout+="</table></blockquote>"
	var sbuttons="<p><blockquote><a href=javascript:showanswer()>Answer</a>&nbsp;&nbsp;&nbsp;"
	if(nj<nquiz)sbuttons+="<a href=javascript:nextq(true)>Skip</a>&nbsp;&nbsp;&nbsp;"
	sbuttons+=href(i,"Help!")+"&nbsp;&nbsp;&nbsp;"
	sbuttons+="</blockquote><pre></pre>"
	Quiz[iquiz][0]=sbuttons+sout+"\n<p><blockquote>"+B[4]+"</blockquote>"
	sout=sout.replace(/\&nbsp\;\?\&nbsp\;/,sans)
	sans="\n<table><tr><td valign=top>"+B[4]+"\n<td valign=top>"+B[5]+"</table>"
	sans=fixline(sans)
	sout+="<blockquote>"+sans+"\n</blockquote>"
	var sbuttons="<blockquote><a href=javascript:nextq(false)>I knew that!</a>&nbsp;&nbsp;&nbsp;"
	sbuttons+="<a href=javascript:nextq(true)>Ask again later.</a>&nbsp;&nbsp;&nbsp;"
	sbuttons+=href(i,"Why?")+"&nbsp;&nbsp;&nbsp;"
	sbuttons+="</blockquote><pre></pre>"
	Quiz[iquiz][1]=sbuttons+sout
	Quiz[iquiz][2]=true
	Quiz[iquiz][3]=i
	
}

function gotoq(n){
	setTimeout('divwrite("quizdiv",Quiz['+n+'][0])',200)
	qpt=n
}

function href(datapt,stext){
	return jumpto(Data[datapt][5]+"."+Data[datapt][6],stext)
}

function initdivs(){
	isnn4=(document.layers?true:false)
	isie4=(document.all?true:false)
	isnn6=(!isie4 && document.getElementById?true:false)
	if(!isnn4 && !isie4 && !isnn6)alert("This page will work properly only with browsers capable of supporting layers.")
}

function jumpto(swhere,stext){

	var s=BruiceRef[swhere]
	var i=0
	var sm=""+Math.random()
	sm="q_"+sm.substring(3,10)
	if(!s)return ""
	if(s.charAt(2)=="#")s=s.substring(0,2)+":index"+s.substring(2,s.length)
	i=s.indexOf("#")
	var itopic=parseInt("1"+s)-100
	itopic+=(itopic==1?0:itopic>12?3:1)
	s=baseref.replace(/\#/,itopic)+s.substring(3,i)+".htm"+s.substring(i,s.length)
	return "<a target="+sm+" href="+s+">"+stext+"</a>"
}

function nextq(ikeep){
	if(qpt)Quiz[qpt][2]=ikeep
	qpt=nextquiz(qpt)
	if(qpt)gotoq(qpt)
	var wr=(qpt==0?1:Math.floor(300*nleft()/(Quiz.length-1)))
	var wg=301-wr
	divwrite("scalediv","<img src=../data/green.gif height=10 width="+wg+"><img src=../data/red.gif height=10 width="+wr+"> "+(Quiz.length-1)+" questions ("+nleft()+" left)")	
	if(qpt==0)alert("All done!")
}

function nextquiz(iquiz){
	var j=0
	for(var i=iquiz+1;i<iquiz+Quiz.length;i++){
		j=i%Quiz.length
		if(j>0 && Quiz[j][2])return j
	}
	return 0
}

function nleft(){
	var j=0
	for(var i=1;i<Quiz.length;i++){
		if(Quiz[i][2])j++
	}
	return j
}

function showanswer(){
	setTimeout('divwrite("quizdiv",Quiz[qpt][1])',200)
}


