
var iVersion=1
var iTotalPages=37
var iWordsOnLastPage=2

var iWordsPerPage=10// >9
//array keeping lengths in bits of infos contained in sAll 
var ipa= new Array(1,10,10,11,6,6,1,1,1,10,16,4,7,6,5,6,6,5,4,6,7,10,6,5,4,6,7,10,6)//for main
var ipap=new Array( 5,5,8,1,3,10)//per page 
var ipaw=new Array(1,1,3,1,1,1,1,1)//per word

var sColorOK=  "green"
var sColorOK2= "limegreen"
var sColorErr= "firebrick"
var sColorNo=  "navy"
var sColorSeen="plum"
var sColorHint="fuchsia"

var sQA_Q='_'; var sQA_A='-'
var iTotalWords=(iTotalPages-1)*iWordsPerPage+iWordsOnLastPage
var sWordPage='helmond'; var iDefaultNumLength=3;  var sHTML='.html' // example question file name: helmond_013.html  
var sScoreFile='score'
var sMidFile=sWordPage+sQA_Q+'mid'+sHTML
var sIntroFile=sWordPage+sQA_Q+'intro'+sHTML
var sEndFile=sWordPage+sQA_Q+'end'+sHTML
var i,j //counters
var mNotOK=1
var mOK=2
var mErr=3
var mSeen=4
var mHint=5; 
var mPageNr=6//at page level
var mSound=6//at total level
var mFB=7
var mHear=8
var mLastVisit=16
var mFirstVisit=22
var dMonth=31 * 24 * 60 * 60 * 1000
var iDefaultNumLength=3
var iScreenSize=((screen.width<1024)?1:(screen.width>1279?3:2))
var sScoreFile=sWordPage+sQA_Q+sScoreFile+sHTML
var sLeftFile=sWordPage+sQA_Q+'left'+sHTML
var sRightFile=sWordPage+sQA_Q+'right'+sHTML
//=====================================================================================================================

document.write('<link rel=stylesheet type="text/css" href="n'+iScreenSize+'.css">');
var mymessage = "Gebruik linker muisknop";
if (document.layers){document.captureEvents(Event.MOUSEDOWN);}
document.onmousedown = rtclickcheck
//========================= g e n e r a l   u t i l s   (conversion etc)================================================================================
function rtclickcheck(keyp){
  if (document.layers && keyp.which != 1) {    alert(mymessage);    return false;  }
  if (document.all && event.button != 1) {     alert(mymessage);    return false;  }
}

function sPercent(i1,i2,iDec){
//alert(i1+" "+i2+" - "+iDec+" %")
	if (iDec==null)iDec=0
	if(i2==null||i2==0)i2=0.0000000000001
	var x=Math.round(i1/i2*Math.pow(10,iDec+2))/Math.pow(10,iDec)
	if(iDec==0){return String(Math.floor(x))+"%" }else{return String(Math.floor(x))+"."+String(eval(x-Math.floor(x))+"000000000000").substring(2,iDec+2)+"%"}
}
function sLS(i,iL){// add leading space to total l
	var s=String(i)
	if (iL==null)l=iDefaultNumLength
	if(s.length<iL)s=sRepeat("&nbsp;",+iL-s.length+1)+s
return s
}
function sRepeat(c,iRpt){var s="";for (var i=1;i<iRpt+1;i++){s+=c};return s}// 						Last revision: 20041214
function sString(s,iPos){return unescape(s.substr(iPos-1,1))}//									 		  Last revision: 20041208
function iString(s,iPos){return s.charCodeAt(iPos-1)}//					 										Last revision: 20041208
function i_char(c){return(c==null?String.fromCharCode(0):c).charCodeAt(0)}// 					Last revision: 200500308
function s_code(i) {return unescape(String.fromCharCode(i))}//					 						Last revision: 20050222

function sNumFormat(iNum,iLen){//																					Last revision: 20050228	
	if (iLen==null)iLen=iDefaultNumLength
	iNum=sRepeat("0",15)+iNum
	return iNum.substring(iNum.length-iLen)	
}
function PlaySound(sMP3,f){if (fSoundOn()||f==null){document.all['idMP3'].src ="sound/"+sMP3+".mp3";}}

// ============================= 1 6   b i t s   f u n c t i o n s ============================================================================================
var i16=16				  // max number of bits used 
var iabv=new Array  // n'th element contains 2^(16-n) value
var sAll=""//the string containing all infos as 16-bits characters
var l_ipa=ipa.length-1;var l_ipap=ipap.length;var l_ipaw=ipaw.length
for (i=0;i<iWordsPerPage;i++){for (j=0;j<l_ipaw;j++){ipap[ipap.length]=ipaw[j]}}
for (i=0;i<iTotalPages;i++){for (j=0;j<ipap.length;j++){ipa[ipa.length]=ipap[j]}}
var pa=new Array//array of pointers to position of infos in sAll constructed from ipa
iabv[i16]=1;for(j=i16;j>0;j--)iabv[j-1]=2*iabv[j] 
pa[0]=0;for (j=1;j<ipa.length;j++){pa[j]=pa[j-1]+(ipa[j]==null?1:(ipa[j-1]>i16?i16:ipa[j-1]));if(ipa[j+1]==null||ipa[j+1]<1){break}} // fill pointer array
for (i=0;i<(2*(j+i16)/i16+44);i++)sAll=sAll+"+"//??
var iBonusCode=iabv[i16-ipa[l_ipa+l_ipap+3]]-1
var iMaxErrPerWord=iabv[i16-ipa[l_ipa+l_ipap+3]]-2
function iaf(p1,p2){return (iabv[p1]-iabv[p2])}//filter for info between p1 and p2					Last revision: 200500308


//===============================  c o o k i e   s t u f f  ===============================================================================
var sCID='Data1'; var sCID_oldData=	'Data2'
function sCookie() {//																Last revision: 200500313									
        var iStart = document.cookie.indexOf(sCID+"=");
        var iLength = iStart+sCID.length+1;
        var iEnd = document.cookie.indexOf(";",iLength);
        if (iEnd == -1) iEnd = document.cookie.length;
		sAll=unescape(document.cookie.substring(iLength,iEnd));
        return sAll
}
function sOldCookie() {//																Last revision: 200500313									
        var iStart = document.cookie.indexOf(sCID_oldData+"=");
        var iLength = iStart+sCID_oldData.length+1;
        var iEnd = document.cookie.indexOf(";",iLength);
        if (iEnd == -1) iEnd = document.cookie.length;
        return unescape(document.cookie.substring(iLength,iEnd));
}
function SetCookie () {//														Last revision: 20050315
	var dateExp = new Date (); 
	dateExp.setTime( dateExp.getTime() + dMonth )  	
    document.cookie = sCID + "=" + escape(sAll) + ("; expires=" + dateExp.toGMTString());
}
function BackupCookie(){//														Last revision: 20050315
	var dateExp = new Date(); 
	dateExp.setTime(dateExp.getTime()+3*dMonth )  	
	sAll=sCookie()
    document.cookie=sCID_oldData+"="+escape(sAll)+("; expires="+dateExp.toGMTString());
}
function DeleteCookie() {   if (sCookie()) document.cookie = sCID + "=" + ";expires=Thu, 01-Jan-70 00:00:01 GMT";}//								Last revision: 200500313
function fCookieFilePresent(){return (sCookie()!=null)}//						Last revision: 20050312	
// dedicated I-O
function iData(p){// 																	Last revision:    20050313
	sAll=sCookie()
	var w1=Math.floor(pa[p]/i16);	var b1=pa[p]%i16;	var b2=pa[p+1]%i16
	if (b1<b2){	return ((i_char(sAll.substr(w1,1)))&iaf(b1,b2))>>(i16-b2)}else{	return (((i_char(sAll.substr(w1,1)))&iaf(b1,i16))<<b2)|(((i_char(sAll.substr(w1+1,1)))&iaf(0,b2))>>(i16-b2))}
}
function SetData(i,p){// 				Last revision:    20050313
							if(i>iabv[i16-ipa[p]])document.write("<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000FF> error, data at "+p+" too big  "+(i)+" >"+iabv[i16+1-ipa[p]]+" (=max for "+ipa[p]+" bit"+(ipa[p]>1.1?'s)':')')+"</font>")
	var w1=Math.floor(pa[p]/i16);	var b1=pa[p]%i16;	var b2=pa[p+1]%i16
	sAll=sCookie()
	if (b1<b2){	sAll=sAll.substring(0,w1)+s_code(((i_char(sAll.substr(w1,1)))&(~iaf(b1,b2)))|(i<<(i16-b2)))+sAll.substring(w1+1)}else{sAll= sAll.substring(0,w1)+s_code(((i_char(sAll.substr(w1,1))&(~iaf(b1,i16))))|(i>>b2))+s_code((i_char(sAll.substr(w1+1,1))&(~iaf(0,b2)))	|((i&~iaf(0,i16-b2))<<(i16-b2)))+sAll.substring(w1+2)}
	SetCookie()
}
function StartUp(){// 																						Last revision: 20050315
	sAll=""
	if (document.cookie.length<=3){	alert(" initialiseren - even geduld - het duurt even (ook bij snelle computers) maar alleen deze eerste keer");InitCookieFile();
	}else{
		if ((iVersion-i_Version())>5){	DeleteCookie();alert(" initialiseren - even geduld - het duurt even (ook bij snelle computers) maar alleen deze eerste keer");InitCookieFile();
		}else{	SetDateTime();}
	}
	sAll=sCookie()
}			
//==================  I / O   s e t t i n g s  =================================================================================================
function SetHint(fHint){SetData((fHint!=null?fHint:0),mHint);parent.mid.location.reload() }//					 Last revision: 20050313
function fHintOn(){	return eval(iData(mHint)!=0)}// 																			Last revision: 20050313
function SetFB(fFB){SetData((fFB!=null?fFB:0),mFB);parent.mid.location.reload();}//								Last revision: 20050313
function fFBOn(){		return eval(iData(mFB)!=0)}
function SetSound(fSound){SetData((fSound!=null?fSound:1),mSound)}// 		Last revision: 20050313
function fSoundOn(){  return eval(iData(mSound)!=0)}//						 Last revision: 20050313
function SetVersion(){SetData(iVersion,11)}//						 Last revision: 20050313
function i_Version(){return iData(11)};//										 Last revision: 20050313
function SetNumVisit(i){SetData(i==null?1:i,12)}
function IncNumVisit(i){SetNumVisit(+iNumVisit()+(i==null?1:i))}//						 Last revision: 20050315
function iNumVisit(){return iData(12)};//										Last revision: 20050313
function SetTotalPages(){SetData(iTotalPages,13)}//						 Last revision: 20050313
function i_TotalPages(){return iData(13)};//										Last revision: 20050313
function SetWordsPerPage(){SetData(iWordsPerPage,14)}//					 Last revision: 20050313
function i_WordsPerPage(){return iData(14)}//										 Last revision: 20050313
function SetTotalWords(){SetData(iTotalWords,21)}//						 		Last revision: 20050313
function i_TotalWords(){return iData(21)}//						 						Last revision: 20050313
function iFarPage(){return iData(27)}//						 						Last revision: 20050319
function SetFarPage(iP){SetData(iP,27)}//						 						Last revision: 20050319
function iFarWord(){return iData(28)}//						 						Last revision: 20050319
function SetFarWord(iW){	SetData(iW,28)}//						 						Last revision: 20050319
function SetPendingPage(iPP){SetData((iPP!=null?iPP:1),15)}//				Last revision: 20041228  
function iPendingPage(){return Math.min(iTotalPages+1,iData(15))}//			Last revision:   20041228
function IncPendingPage(iInc){SetData(eval(+iData(15)+(iInc!=null?iInc:1)),15)}//							Last revision: 20041228  
function sPendingPage(sQA){// returns full filename of start/end or next page in rnd-seq  Last revision: 20050102
	var iPP=iPendingPage()
	if (iPP<=iTotalPages){iPP=sNumFormat(iData(iPointerPos(iPP)+mPageNr))}else{return sEndFile}
	return sWordPage+sQA+iPP+sHTML
}
function iPage_Nr(n){return iData(iPointerPos(n)+mPageNr)}
function InitCookieFile () {//																	 Last revision: 20050313		
var i;	var i1=0;var i2=0; 	var iaRnd=new Array									
	if (document.cookie.length>10){	BackupCookie()// save the old stuff   
	}else{		sAll=sRepeat("*",iTotalPages*3);	SetCookie();}// or fill with dummy sAll string	
	SetVersion()// to iVersion
	SetNumVisit()// to 1
	SetTotalPages()// to iTotalPages
	SetWordsPerPage()// to iWordsPerPage
	SetPendingPage()// to 1
	SetOK()		// to 0														
	SetNotOK(iTotalWords)
	SetErr()// to 0		
	SetFarPage(1);	SetFarWord(1);
	SetSound()// sound=on	
	SetFB()//  instant feedback=off
	SetHint()// hint=off
	SetTotalWords()
	SetDateTime(mFirstVisit);	SetDateTime(mLastVisit);
	for (i=1;i<iTotalPages;i++){iaRnd[i]=i}
	for ( i=1;i<iTotalPages;i++){	i1=Math.round(1+Math.random()*(i-1));i2=iaRnd[i1];	iaRnd[i1]=iaRnd[i];	iaRnd[i]=i2	}
	iaRnd[iTotalPages]=iTotalPages//last page last	
	for (iPageNr=1;iPageNr<iTotalPages+1;iPageNr++){
		SetData(+iaRnd[iPageNr],+(iPointerPos(iPageNr)+mPageNr))
			for (i=1;i<100;i++){
				SetData(+iaRnd[iPageNr],+(iPointerPos(iPageNr)+mPageNr))
				if(iaRnd[iPageNr]==iPage_Nr(iPageNr))break
			}
 		SetNotOK(iWordsPerPage,iPageNr);		SetOK(0,iPageNr);		SetErr(0,iPageNr);		SetSeen(0,iPageNr);
		for (var iWordNr=1;iWordNr<iWordsPerPage+1;iWordNr++){
			SetNotOK(1,iPageNr,iWordNr);SetOK(0,iPageNr,iWordNr);SetErr(0,iPageNr,iWordNr);	SetSeen(0,iPageNr,iWordNr);	SetFB(0,iPageNr,iWordNr);SetHint(0,iPageNr,iWordNr);SetHear(0,iPageNr,iWordNr)
		}
	}
}


//======= I / O   t o   C O O K I E ============================================================================================
function SetDateTime(m,d){//			lat revision  20050313
	if (d==null)d= new Date ()//default = now 
	if (m==null)m=mLastVisit
	SetData(eval(d.toString().replace(/(.*)(\d\d):(\d\d):(\d\d)(.*)/, "$3")),m+4)	//min
	SetData(eval(d.toString().replace(/(.*)(\d\d):(\d\d):(\d\d)(.*)/, "$2")),m+3)	//hr	
	SetData((+d.getFullYear()-2005),(m+2))													//yr
	SetData(Number(d.getMonth())+1,(m+1))												//mo
	SetData(Number(d.getDate()),m)															//day	
}
function sDateTime(m){return sNumFormat(iData(m),2)+"/"+sNumFormat(iData(m+1),2)+"/"+eval(2005+iData(m+2))+"-"+sNumFormat(iData(m+3),2)+":"+sNumFormat(iData(m+4),2)}												
function IncThis(mThis,iValue,iPage,iWord){	SetThis(mThis,eval(+iValue+iThis(mThis,iPage,iWord)),iPage,iWord)}//not fot iOK/iNotOK/iErr
function SetThis(mThis,iValue,iPage,iWord){// 	Last revision: 20050313
	if (iValue==null)iValue=0
	if (iWord==null){iWord=0}
	if (iPage==null){iPage=0;iWord=1};
	SetData(iValue,eval(mThis+iPointerPos(iPage,iWord)))
}
function iThis(mThis,iPage,iWord){
	if (iWord==null){iWord=0}
	if (iPage==null){iPage=0;iWord=1};
	return iData(eval(mThis+iPointerPos(iPage,iWord)))
}
function IncNotOK(i,iPage,iWord){	IncOK(-i,iPage,iWord)}//{	IncThis(mNotOK,i,iPage,iWord)}
function SetNotOK(i,iPage,iWord){	SetThis(mNotOK,i,iPage,iWord)}
function iNotOK(iPage,iWord){return	iThis(mNotOK,iPage,iWord)}
function IncOK(i,iPage,iWord){
	if(i==null)i=1
	if(i>0&&iOK(iPage,iWord)!=0)return;// prevent double OK 
	if(i<0&&iOK(iPage,iWord)==0)return;// prevent  minus OK
	SetOK(eval(+i+iOK()));	SetNotOK(eval(-i+iNotOK()))
	if(iPage!=null){	SetOK(+i+iOK(iPage),iPage);	SetNotOK(-i+iNotOK(iPage),iPage)}
	if(iWord!=null){
		if (i>0){SetOK(1,iPage,iWord);	SetNotOK(0,iPage,iWord)
		}else{	SetOK(0,iPage,iWord);	SetNotOK(1,iPage,iWord)	}
	}
}
function SetOK(i,iPage,iWord){SetThis(mOK,i,iPage,iWord)}
function iOK(iPage,iWord){return iThis(mOK,iPage,iWord)}
function IncErr(i,iPage,iWord){
	var iE=iErr(iPage,iWord)
	if(iE==iBonusCode){iE=0;SetErr(0,iPage,iWord)}
	if (iE<iMaxErrPerWord){
		IncThis(mErr,i);			
		IncThis(mErr,i,iPage);			
		IncThis(mErr,i,iPage,iWord)	;	
	}
}
function SetErr(i,iPage,iWord){		SetThis(mErr,i,iPage,iWord)}
function iErr(iPage,iWord){return	iThis(mErr,iPage,iWord)}
function SetSeen(i,iPage,iWord){	SetThis(mSeen,i,iPage,iWord)}
function iSeen(iPage,iWord){return	iThis(mSeen,iPage,iWord)}
function SetHint(i,iPage,iWord){	SetThis(mHint,i,iPage,iWord)}
function iHint(iPage,iWord){return	iThis(mHint,iPage,iWord)}
function fSetHint(id,iHintLength){
	var iPP=iPendingPage();	var iWord=id%iWordsPerPage	
	if(fHintOn()&&(iHintLength>5)&&(iOK(iPP,iWord)<1)){
		SetHint(1,iPP,iWord);
		if((iPP-iFarPage())<1){if(iWord>iFarWord()){SetFarWord(iWord)}}
		if(iPP>iFarPage()){	SetFarPage(iPP);SetFarWord(iWord)}
		parent.hi.location.href=sScoreFile+"?"+sColorHint
		return true
	}else{	return  false}
}
function SetFB(i,iPage,iWord){	SetThis(mFB,i,iPage,iWord)}
function iFB(iPage,iWord){return	iThis(mFB,iPage,iWord)}
function SetHear(i,iPage,iWord){	SetThis(mHear,i,iPage,iWord)}
function iHear(iPage,iWord){return	iThis(mHear,iPage,iWord)}
function ResultCSSpan(iWord){if(iOK(iPendingPage(),iWord)>0.1){document.write('<span class="OK">') }else {document.write('<span class="notOK">')}}
function SendResultButton(rScore,fFinal){ // we have a problem here with long strings!!  make a codec
	if (fFinal==null)fFinal=true // final by default
	if (rScore==null)rScore=rOKtotal()//final by default
	if (fFinal){document.write("<INPUT TYPE=\"BUTTON\" VALUE=\"stuur eindresultaat: ")}else{document.write("<INPUT TYPE=\"BUTTON\" VALUE=\"stuur tussenresultaat: \n")}
	if (!fFinal)rScore=rScore+" na "+sPercent(iLastWord(),iTotalWords)
	var ss=escape(sCookie())
	document.write(rScore)
	document.write("\" onClick=\"parent.location='mailto:JanWilmsOostzaan@hotmail.com?subject=Resultaat Helmondse Dialect Quiz: "+rScore+"&Body="+escape("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n")+ "["+sCodec(ss)+"]\'\">")
}
//=============== S C O R I N G ===============================================================================================================
function rOKword(iPageNr,iWordNr){	
	var iE=iErr(iPageNr,iWordNr)
	if(iE==iBonusCode){iE=1.1}else{	iE=(1/(1+0.5*iErr(iPageNr,iWordNr)*iErr(iPageNr,iWordNr)))}
	return eval(+(1-iSeen(iPageNr,iWordNr))*iOK(iPageNr,iWordNr)*iE*(1-0.02*iFB(iPageNr,iWordNr))*(1+0.06*(iHear(iPageNr,iWordNr)*iHint(iPageNr,iWordNr))-0.10*(0.7*iHear(iPageNr,iWordNr)+iHint(iPageNr,iWordNr))))
}
function rOKpage(iP){//														Last revision: 20050128
	var rTot=0
	for (var j=1;j<iWordsPerPage+1;j++)	rTot+=rOKword(iP,j);
	return eval(Math.floor(100*rTot/iWordsPerPage))
}	
function rOKtotal(iPlast,iFraction){//										Last revision: 20050128
var rTot=0
	if (iPlast==0){return eval(   (iFraction==null)?"0%":0)}
	if (iPlast==null)iPlast=iTotalPages
	iPlast=Math.min(iTotalPages,iFarPage())
	if(iPlast>0)for (var i=1;i<iPlast;i++)rTot=rTot+iWordsPerPage*rOKpage(i)*0.01// summarize completed pages
	for(i=1;i<1+iFarWord();i++)rTot=rTot+rOKword(iPlast,i) // and add last page
	if (iFraction==null){return sPercent(rTot,iLastWord(iPlast))}else{return eval(rTot/iLastWord(iPlast))}
}
function WriteScore(s,i){document.write(s+(i<10?"&nbsp;":"")+i)} //											Last revision: 20050128
function _WriteScore(s,i){if (i<10){i="&nbsp;"+i}; 	
document.write(s+i)
} //											Last revision: 20050128
function ScoreLine(sColor){
	var sSep='</span><span class="h3">&nbsp;|&nbsp;</span><span class="h5">'
	var iPP=iPendingPage()
	if(iSeen(iPP)>0)sColor=sColorSeen
	if(iSeen(iPP)>0)document.write("<font size=+3 color='"+sColorSeen+"'> &nbsp; antwoorden gezien!</font>")
	if(iFarPage()>1){
		if (iPP>iTotalPages){document.write("eind score: ");
		}else{document.write(sSep);	WriteScore("goed:",iOK(iPP));WriteScore("&nbsp; niet:",iNotOK(iPP));
		WriteScore(("<font color='"+sColor+"'> &nbsp;mis:"),iErr(iPP));	document.write(sSep);document.write("<font color="+sColor+">"+rOKtotal(iPP)+" </font>");document.write(" na "+sPercent(iLastWord(),iTotalWords)+" | &nbsp;");}
		WriteScore("goed:",iOK());	WriteScore("&nbsp; niet:",iNotOK());WriteScore(" &nbsp;mis:",iErr());document.write(sSep);
	}else{if (iNumVisit()>1)document.write("&nbsp;&nbsp;"+eval(iNumVisit()-1)+"e poging sinds "+sDateTime(mFirstVisit));}
//	if(iSeen(iPP)>0)document.write("<font color='"+sColorSeen+"'> &nbsp; antwoorden al gezien!</font>")
}
function UpdateFrames(sColor){
	var sC=""
	if(sColor!=null)sC="?"+sColor
	parent.left.location.href=sLeftFile+sC		
	parent.right.location.href=sRightFile+sC
	parent.hi.location.href=sScoreFile+sC
}
function MakeScore(iWord,iAnswer,iRightAnswer,iMP3,sMP3,nWait){// 						Last revision: 20050318
var iA=eval(iAnswer)
	if(iA==0)return
	var iR=Math.abs(iRightAnswer)
	var iPP=iPendingPage()
	var fBonusWord=(iRightAnswer<0)
	if((iPP-iFarPage())<1){		if(iWord>iFarWord()){			SetFarWord(iWord)	}	}
	if(iPP>iFarPage()){	SetFarPage(iPP);SetFarWord(iWord)}
	//if(iSeen(iPP,iWord)>0){		PlaySound("seen");		for (i=-1000;i<1000;i++){j=(i*i+i+7)/i}}
	if ((iA==iMP3)||((iA!=Math.floor((iR+0.05)/100))&&(iA!=Math.floor((iR%100+0.05)/10))&&(iA!=Math.floor(iR%10+0.05)))) {//not OK choice
		if( window.event ) {			window.event.cancelBubble = true;}
			if(iA==iMP3){		//luister
				PlaySound(sMP3)
				for (t=1;t<nWait;t=t+10){SetHear(1,iPP,iWord)}//delay delay		
				UpdateFrames(sColorNo)
			}else{
				if(iAnswer!=0){		//mis
					if(iSeen(iPP,iWord)==0){
						PlaySound("mis",1)
						if(iErr(iPP,iWord)==iBonusCode){SetErr(0,iPP,iWord)}
						if (iErr(iPP,iWord)<iMaxErrPerWord){IncErr(1,iPP,iWord);}else{PlaySound("warning")}
						IncNotOK(1,iPP,iWord);
						UpdateFrames(sColorErr)
					}else{	PlaySound("seen",1)}
				}
			}
		
	}else{
		if(iSeen(iPP,iWord)==0){
			if(iR>10){				//een van meerdere OK
				if(iOK(iPP,iWord)<1){PlaySound("ok2",1)}else{PlaySound("ok",1)}
				UpdateFrames(sColorOK2)
			}else{
				if(iOK(iPP,iWord)<1){
					if (fBonusWord&&(iErr(iPP,iWord)==0)&&(iOK(iPP,iWord)==0)){
						SetErr(iBonusCode,iPP,iWord)
						PlaySound("bonus",1)
					}else{
						PlaySound("ok",1)	// een OK
					}	
				}else{
					PlaySound("seen",1)
				}
			}	
			UpdateFrames(sColorOK)		
		}
		if(iSeen(iPP,iWord)==0)IncOK(1,iPP,iWord)
	}
	if (fFBOn()){
		SetFB(1,iPP,iWord)
		parent.mid.location.reload()	
	}
}
function sOKcolor(iWonP,iIsComment,y){//								Last revision: 20050413
	var iPP=iPendingPage()
	if (iIsComment==null){	//	on Answers/Score Page
		if(iOK(iPP,iWonP)>0){return "<span class='H3OK'>"}
		if(iErr(iPP,iWonP)>0){return "<span class='H3Err'>"}
		return "<span class='H3'>"
	}else{
		if(iIsComment==1){	//	on Questions Page
			if((iOK(iPP,iWonP)>0)&fFBOn()){return "<span class='comment'>"}else{return "<span class='invisible'>"}
		}else{				//	on Intro Page
			if(fFBOn()){return "<span class='comment'>"}else{return "<span class='invisible'>"}	
		}		
	}	
}

function ShowAnswer(){// 								Last revision: 20041214
	var iPP=iPendingPage();
	var iW;
//	parent.left.location.href=sLeftFile//+"?"+sColorNo
//	parent.right.location.href=sRightFile//+"?"+sColorNo
	UpdateFrames()
	for (iW=1;iW<iWordsPerPage+1;iW++){if(iOK(iPP,iW)<1)SetSeen(1,iPP,iW)}
	SetSeen(1,iPP)
	parent.mid.location.href=sPendingPage(sQA_A)
}
 
//======= N A V I G A T I O N =================================================================================================

function GoPrev(){if(iPendingPage()>1){IncPendingPage(-2);GoNext()}}//	Last revision: 20050318
function GoNext(){parent.mid.location.href=sMidFile}//					Last revision: 20050128
function GoOne(){parent.mid.location.href=sIntroFile}//					Last revision: 20050128
function GoEnd(){parent.mid.location.href=sEndFile}//					Last revision: 20050128
function iPointerPos(iP,iW){//											Last revision: 20050315
	if (iP==null||iP<1){return 0}
	if(iW==null)iW=0
	return eval(+l_ipa+(iP-1)*(l_ipap+iWordsPerPage*l_ipaw)+iW*l_ipaw+(iW==0?0:-2))
}

function iLastWord(iPP,iOnThisPageOnly){//							Last revision: 20050128
	if(iPP==null)iPP=iPendingPage()
	for (var i=iWordsPerPage;i>0;i--){if  (eval(iOK(iPP,i)+iErr(iPP,i)+iSeen(iPP,i)+iHear(iPP,i))>0)break}
	if(iOnThisPageOnly!=null)return i
	if(iPP==1)return i
	for (var j=1;j<iPP;j++){i=i+iWordsPerPage}
	return Math.max(0,Math.min(iTotalWords,i))
}
function __iLastWord(iPP,iOnThisPageOnly){//							Last revision: 20050128
	if(iPP==null)iPP=iPendingPage()
	iPP=iFarPage()
	for (var i=iWordsPerPage;i>0;i--){if  (eval(iOK(iPP,i)+iErr(iPP,i)+iSeen(iPP,i)+iHear(iPP,i))>0)break}
	if(iOnThisPageOnly!=null)return i
	if(iPP==1)return i
	for (var j=1;j<iPP;j++){i=i+iWordsPerPage}
	return Math.max(0,Math.min(iTotalWords,i))
}
function _iLastNotOK(iP,iOnlyThisPage){
	if(iP==null)iP=iPendingPage()
	for (var i=iWordsPerPage;i>0;i--){if  (eval(iOK(iP,i)+iErr(iP,i))>0){break}}
	if (iOnlyThisPage!=null){return i}else{	return Math.max(0,Math.min(iP-1,iTotalPages-1))*iWordsPerPage+i}
}
function iLastNotOK(iP,iOnlyThisPage){
	iP=iFarPage()
	if(iP==null)iP=iPendingPage()
	for (var i=iWordsPerPage;i>0;i--){if  (eval(iOK(iP,i)+iErr(iP,i))>0){break}}
	if (iOnlyThisPage!=null){return i}else{	return Math.max(0,Math.min(iP-1,iTotalPages-1))*iWordsPerPage+i}
}
function sNextPage(){//			Last revision: 20050201
	var iPP=iPendingPage()
	if(iPP==0||iLastWord(iPP,1)>(iWordsPerPage-1)){IncPendingPage();}
	if(iPP==1&&iNumVisit()<2)IncNumVisit();
	if(iPP==iTotalPages){SetSeen(iPP)}
//	parent.hi.location.href=sScoreFile+"?"+sColorNo
//	parent.right.location.href=sRightFile+"?"//+sColorNo
//	parent.left.location.href=sLeftFile+"?"//+sColorNo
	UpdateFrames(sColorNo)
	return sPendingPage(sQA_Q)
}
//======= f l o a t i n g   h i n t s  ==============================================================================================================================


// Title: Tigra Hints
// URL: http://www.softcomplex.com/products/tigra_hints/
// Version: 1.2
// Date: 04/18/2003 (mm/dd/yyyy)
// Feedback: feedback@softcomplex.com (specify product title in the subject)
// Note: Permission given to use this script in ANY kind of applications if  header lines are left unchanged.
// About us: Our company provides offshore IT consulting services.
//  Contact us at sales@softcomplex.com if you have any programming task you  want to be handled by professionals. Our typical hourly rate is $20.



var HINTS_CFG = {
	'top'        : -12, // a vertical offset of a hint from mouse pointer
	'left'       : 133*iScreenSize, // a horizontal offset of a hint from mouse pointer
	'css'        : 'hintsClass', // a style class name for all hints, TD object
	'show_delay' : 100, // a delay between object mouseover and hint appearing
	'hide_delay' : 90000, // a delay between hint appearing and hint hiding
	'wise'       : true,
	'follow'     : false,
	'z-index'    : -1 // a z-index for all hint layers
}
function THints (o_cfg, items) {
	this.top = o_cfg.top ? o_cfg.top : 0;	this.left = o_cfg.left ? o_cfg.left : 0;	this.n_dl_show = o_cfg.show_delay;	this.n_dl_hide = o_cfg.hide_delay;	this.b_wise = o_cfg.wise;	this.b_follow = o_cfg.follow;
	this.x = 0;	this.y = 0;	this.divs = [];	this.show  = fHintOn()?TTipShow:TTipHide;	this.showD = fHintOn()?TTipShowD:TTipHide;	this.hide = TTipHide;	this.move = TTipMove;	if (document.layers) return;
	var b_IE = navigator.userAgent.indexOf('MSIE') > -1,s_tag = ['<div id="TTip%name%" style="visibility:hidden;position:absolute;top:0px;left:0px;',   b_IE ? 'width:1px;height:1px;' : '', o_cfg['z-index'] != null ? 'z-index:' + o_cfg['z-index'] : '', '"><table cellpadding="0" cellspacing="0" border="0"><tr><td class="', o_cfg.css, '" nowrap>%text%</td></tr></table></div>'].join('');
	this.getElem = 		function (id) { return document.all ? document.all[id] : document.getElementById(id); };
	this.showElem =		function (id, hide) { this.divs[id].o_css.visibility = hide ? 'hidden' : 'visible'; };
	this.getWinSz = window.innerHeight != null 		? function (b_hight) { return b_hight ? innerHeight : innerWidth; }		: function (b_hight) { return document.body[b_hight ? 'clientHeight' : 'clientWidth']; };	
	this.getWinSc = window.innerHeight != null 		? function (b_hight) { return b_hight ? pageYOffset : pageXOffset; }		: function (b_hight) { return document.body[b_hight ? 'scrollTop' : 'scrollLeft']; };	
	if (window.opera) {
		this.getSize = function (id, b_hight) { 
			return this.divs[id].o_css[b_hight ? 'pixelHeight' : 'pixelWidth']
		};
		document.onmousemove = function () {
			myHint.x = event.clientX;			myHint.y = event.clientY;
			if (myHint.b_follow && myHint.visible) myHint.move(myHint.visible)
			return true;
		};
	}
	else {
		this.getSize = function (id, b_hight) { 
			return this.divs[id].o_obj[b_hight ? 'offsetHeight' : 'offsetWidth'] 
		};
		document.onmousemove = b_IE
		? function () {
			myHint.x = event.clientX + document.body.scrollLeft;
			myHint.y = event.clientY + document.body.scrollTop;
			if (myHint.b_follow && myHint.visible) myHint.move(myHint.visible)
			return true;
		} 
		: function (e) {
			myHint.x = e.pageX;			myHint.y = e.pageY;
			if (myHint.b_follow && myHint.visible) myHint.move(myHint.visible)
			return true;
		};
	}
	for (i in items) {
		document.write (s_tag.replace(/%text%/, items[i]).replace(/%name%/, i));
		this.divs[i] = { 'o_obj' : this.getElem('TTip' + i) };
		this.divs[i].o_css = this.divs[i].o_obj.style;
	}
}
function TTipShow (id) {
	if (document.layers) return;
	this.hide();
	if( fSetHint(id,HINT_ITEM[id].length)){// for scoring
		if (this.divs[id]) {
			if (this.n_dl_show) this.divs[id].timer = setTimeout("myHint.showD(" + id + ")", this.n_dl_show);
			else this.showD(id);
			this.visible = id;
			//if(HINT_ITEM[id].length>5)SetHint_id(id)// for scoring
		}
	}
}
function TTipShowD (id) {
	this.move(id);
	this.showElem(id);
	if (this.n_dl_hide) this.timer = setTimeout("myHint.hide()", this.n_dl_hide);
}
function TTipMove (id) {
	var n_x = this.x + this.left, n_y = this.y + this.top;
	if (this.b_wise) {
		var n_w = this.getSize(id), n_h = this.getSize(id, true),
		n_win_w = this.getWinSz(), n_win_h = this.getWinSz(true),
		n_win_l = this.getWinSc(), n_win_t = this.getWinSc(true);
		if (n_x + n_w > n_win_w + n_win_l) n_x = n_win_w + n_win_l - n_w;
		if (n_x < n_win_l) n_x = n_win_l;
		if (n_y + n_h > n_win_h + n_win_t) n_y = n_win_h + n_win_t - n_h;
		if (n_y < n_win_t) n_y = n_win_t;
	}
	this.divs[id].o_css.left = n_x;
	this.divs[id].o_css.top = n_y;
}
function TTipHide () {
	if (this.timer) clearTimeout(this.timer);
	if (this.visible != null) {
		if (this.divs[this.visible].timer) clearTimeout(this.divs[this.visible].timer);
		setTimeout("myHint.showElem(" + this.visible + ", true)", 10);
		this.visible = null;
	}
}

//===============  6   b i t s   c o d i n g / d e c o d i n g   f o r   e - m a i l  =============================================================================================================
function sCodec(s1,fDecode){
	if (fDecode==null)fDecode=false
	if(fDecode>0)fDecode=true	
	var p;var i;var c
	var iOffset=49
	var cOffset_1=s_code(iOffset-1)
	var s2=" "
// 16 bits functions
	var i16=16				  // max number of bits used 
	var i6=6
	var iMaxLen=500//00
	iMaxLen=Math.floor(iMaxLen*16/i6)
	var iabv=new Array  // n'th element contains 2^(16-n) value
	var ipa= new Array
	for (i=0;i<iMaxLen;i++){ipa[i]=i6}//
	var pa=new Array//array of pointers to position of infos in sMail constructed from ipa
	iabv[i16]=1;for(j=i16;j>0;j--)iabv[j-1]=2*iabv[j] 
	pa[0]=0;for (j=1;j<ipa.length;j++){pa[j]=pa[j-1]+(ipa[j]==null?1:(ipa[j-1]>i16?i16:ipa[j-1]));if(ipa[j+1]==null||ipa[j+1]<1){break}} // fill pointer array
	function iaf(p1,p2){return (iabv[p1]-iabv[p2])}//filter for info between p1 and p2					Last revision: 200500308
		function sSetips(i,p,s){// 				Last revision:    20050313
		if(p>ipa.length)return s
		var sTemp=s
		if(i>iabv[i16-ipa[p]])document.write("<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000FF> error, data at "+p+" too big  "+(i)+" >"+iabv[i16+1-ipa[p]]+" (=max for "+ipa[p]+" bit"+(ipa[p]>1.1?'s)':')')+"</font>")
		var w1=Math.floor(pa[p]/i16);	var b1=pa[p]%i16;	var b2=pa[p+1]%i16
		if (b1<b2){	sTemp=sTemp.substring(0,w1)+s_code(((i_char(sTemp.substr(w1,1)))&(~iaf(b1,b2)))|(i<<(i16-b2)))+sTemp.substring(w1+1)}else{sTemp= sTemp.substring(0,w1)+s_code(((i_char(sTemp.substr(w1,1))&(~iaf(b1,i16))))|(i>>b2))+s_code((i_char(sTemp.substr(w1+1,1))&(~iaf(0,b2)))	|((i&~iaf(0,i16-b2))<<(i16-b2)))+sTemp.substring(w1+2)}
		return sTemp
	}	
	function i_ps(p,sV){// 																	Last revision:    20050313
		var w1=Math.floor(pa[p]/i16);	var b1=pa[p]%i16;	var b2=pa[p+1]%i16
		if(w1>sV.length)return null
		if (b1<b2){	return ((i_char(sV.substr(w1,1)))&iaf(b1,b2))>>(i16-b2)}else{	return (((i_char(sV.substr(w1,1)))&iaf(b1,i16))<<b2)|(((i_char(sV.substr(w1+1,1)))&iaf(0,b2))>>(i16-b2))}
	}	
	if(!fDecode){//code
		for (p=1;p<(ipa.length+1);p++){
			i=i_ps(p,s1)
			if (i==null)break
			c=s_code(i+iOffset)
			if(c=="<")c=cOffset_1
			s2=s2+c
		}
	}else{//decode
		for (p=1;p<(+s1.length+1);p++){
			c=s1.substr(p,1)
			if(c==cOffset_1)c="<"
			i=i_char(c)-iOffset
			if(i<0||i>127)break
			s2=sSetips(i,p,s2)	
		}
	s2=s2.substr(0,s2.length-2)
	}
	return s2
}