function Question (qname,
type,
qstring,
response,
comment,
corrects,
explan,
score,
ifcorrect,ifwrong,ifnull,
img)
{this.qname=qname;
this.type=type;
this.qstring=qstring;
this.response=response;
this.comment=comment;
this.corrects=corrects;
this.explan=explan;
this.score=score;
this.ifcorrect=ifcorrect;
this.ifwrong=ifwrong;
this.ifnull=ifnull;
this.img=img;
}

var zin=1,top=0, mycount=0, waitTime=3000, qright=0, mycomment;
var global=new Array(3);
var recent, recent2, recdone=false, opera7, opera=CheckOpera56();
function cachewrite(s,idx){global[idx]+=s;}
function CheckOpera56()
{
var version;
if (navigator.userAgent.toLowerCase().indexOf('opera') == -1) return false;
version=parseInt(navigator.appVersion.toLowerCase());
if (version>6) {opera7=true; return false;}
if (version<5) return false;
return true;
}
resp=new Array("5 si dice esponente e 3 si dice base","5 si dice base e 3 si dice esponente")
corr=new Array("0","1")
comm=""
valu=""
quest001 = new Question(
"Domanda 1",
0,
"Nella potenza 5<sup>3</sup>",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("5x4","5x5x5x5","4x4x4x4x4","5x4x5x4x5x4x5x4x5x4")
corr=new Array("0","1","0","0")
comm=""
valu=""
quest002 = new Question(
"Domanda 2",
0,
"La potenza 5<sup>4</sup> significa",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("2<sup>3</sup>","3<sup>2</sup>","2<sup>4</sup>","2<sup>5</sup>")
corr=new Array("1","0","0","0")
comm=""
valu=""
quest003 = new Question(
"Domanda 3",
0,
"Due al cubo si scrive come",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("4<sup>5</sup>","4<sup>6</sup>","4<sup>9</sup>")
corr=new Array("1","0","0")
comm=""
valu=""
quest004 = new Question(
"Domanda 4",
0,
"Per le proprietà delle potenze 4<sup>3</sup>x4<sup>2</sup>=",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("5<sup>3</sup>","5<sup>4</sup>","5<sup>12</sup>","1<sup>4</sup>")
corr=new Array("0","1","0","0")
comm=""
valu=""
quest005 = new Question(
"Domanda 5",
0,
"Per le proprietà delle potenze 5<sup>6</sup>:5<sup>2</sup>=",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("4<sup>5</sup>","4<sup>6</sup>","4<sup>9</sup>")
corr=new Array("0","1","0")
comm=""
valu=""
quest006 = new Question(
"Domanda 6",
0,
"Per le proprietà delle potenze (4<sup>3</sup>)<sup>2</sup>=",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("10<sup>3</sup>","10<sup>6</sup>","10<sup>9</sup>","non si può applicare nessuna proprietà")
corr=new Array("1","0","0","0")
comm=""
valu=""
quest007 = new Question(
"Domanda 7",
0,
"Per le proprietà delle potenze 5<sup>3</sup>x2<sup>3</sup>=",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("3<sup>5</sup>","12<sup>10</sup>","4<sup>5</sup>","non si può applicare nessuna proprietà")
corr=new Array("1","0","0","0")
comm=""
valu=""
quest008 = new Question(
"Domanda 8",
0,
"12<sup>5</sup>:4<sup>5</sup>=",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("2<sup>3</sup>x2<sup>5</sup>=2<sup>15</sup>","3<sup>4</sup>:3<sup>4</sup>=1","(3<sup>2</sup>)<sup>3</sup>=3<sup>6</sup>","(15:3)<sup>2</sup>=15:3<sup>2</sup>")
corr=new Array("0","1","1","0")
comm=""
valu=""
quest009 = new Question(
"Domanda 9",
1,
"Quali delle seguenti operazioni sono corrette?",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("Vero","Falso")
corr=new Array("1","0")
comm=""
valu=""
quest010 = new Question(
"Domanda 10",
0,
"2<sup>0</sup>=1",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("Vero","Falso")
corr=new Array("0","1")
comm=""
valu=""
quest011 = new Question(
"Domanda 11",
0,
"3<sup>1</sup>=1",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("Vero","Falso")
corr=new Array("0","1")
comm=""
valu=""
quest012 = new Question(
"Domanda 12",
0,
"1<sup>5</sup>=5",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("Vero","Falso")
corr=new Array("1","0")
comm=""
valu=""
quest013 = new Question(
"Domanda 13",
0,
"0<sup>3</sup>=0",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=""
corr="25"
comm=valu=""
quest014 = new Question(
"Domanda 14",
5,
"5<sup>2</sup>=",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=""
corr="17"
comm=valu=""
quest015 = new Question(
"Domanda 15",
5,
"2<sup>3</sup>+3<sup>2</sup>=",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=""
corr="5"
comm=valu=""
quest016 = new Question(
"Domanda 16",
5,
"3+2x1<sup>2</sup>=",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("(3+3)<sup>2</sup>","(3x3)<sup>2</sup>","3<sup>2</sup>+3<sup>2</sup>","3<sup>2</sup>x3<sup>2</sup>","(3<sup>2</sup>)<sup>2</sup>")
corr=new Array("0","1","0","1","1")
comm=""
valu=""
quest017 = new Question(
"Domanda 17",
1,
"Quali delle seguenti espressioni hanno lo stesso risultato?",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("2x3<sup>4</sup>+3x2<sup>3</sup>","3x2<sup>4</sup>+2x3<sup>3</sup>","2x(3<sup>4</sup>+3x2<sup>3</sup>)","2x[3<sup>4</sup>+(3x2)<sup>3</sup>]")
corr=new Array("1","0","0","0")
comm=""
valu=""
quest018 = new Question(
"Domanda 18",
0,
"A quale espressione aritmetica corrisponde la frase:<br>&quot;la somma del doppio di tre alla quarta con il triplo di due alla terza&quot;",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("50<sup>3</sup>","50<sup>6</sup>","5x10<sup>6</sup>","5x10<sup>9</sup>")
corr=new Array("0","0","1","0")
comm=""
valu=""
quest019 = new Question(
"Domanda 19",
0,
"Cinque milioni di euro si può scrivere come",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

resp=new Array("4<sup>10</sup>","2<sup>11</sup>","2<sup>12</sup>","2<sup>20</sup>")
corr=new Array("0","1","0","0")
comm=""
valu=""
quest020 = new Question(
"Domanda 20",
0,
"Una cultura di batteri raddoppia ogni giorno. Se i batteri attualmente sono 2<sup>10</sup> domani saranno",
resp,
comm,
corr,
"",
valu,
1,
0,
0,
"");

questions = new Array (
quest001,quest002,quest003,quest004,quest005,quest006,quest007,quest008,quest009,quest010,quest011,quest012,quest013,quest014,quest015,quest016,quest017,quest018,quest019,quest020)

function doQuestion(quest)
{
var numdo;
var numord=eval(quest+1);
var i=-1, ii, type, myname, gadget;
type=questions[quest].type;
numdo=type>=3?1:questions[quest].response.length;
if (type<3) {
respcopy=new Array(numdo);corrcopy=new Array(numdo);
for (i=0; i<numdo; i++) respcopy[i]=questions[quest].response[i];
respcopy.sort(myrandom);
for (i=0; i<numdo; i++) {
for (ii=0; ii<numdo; ii++) {
if (respcopy[i]==questions[quest].response[ii]) {
corrcopy[i]=questions[quest].corrects[ii];break;}}}
questions[quest].response=respcopy;
questions[quest].corrects=corrcopy;}

document.writeln ("<a name=\""+questions[quest].qname+"\"></a>")
document.write("\n")
document.write("  <tr>\n")
document.write("    <td>\n")
document.write("      <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" onmouseover=\"this.className='graybg'\" onmouseout=\"this.className='whitebg'\">\n")
document.write("      <tr height=5>\n")
document.write("        <td colSpan=5></td>\n")
document.write("      </tr>\n")
document.write("      <tr>\n")
document.write("        <td width=\"5%\" rowspan=\"3\"></td>\n")
document.write("        <td class=\"numord\" width=\"9%\" rowspan=\"3\" valign=\"top\" align=\"center\"><font face=\"Verdana\" size=\"7\" color=\"#C0C0C0\">")
document.write(numord)
document.write("</font></td>\n")
document.write("        <td width=\"1%\" rowspan=\"3\" background=\"http://www.matematicamente.it/test_vari/potenze/s_vline.gif\">&nbsp;</td>\n")
document.write("        <td width=\"80%\" class=\"question\" valign=\"top\">\n")
document.write("         ")
if (questions[quest].img!="") {
document.write("\n")
document.write("         <img border=\"0\" hspace=\"10\" vspace=\"0\" align=\"left\" src=\"")
document.write(questions[quest].img)
document.write("\">\n")
document.write("         ")
}
document.write("\n")
document.write("          ")
document.writeln(questions[quest].qstring)
document.write("\n")
document.write("        </td>\n")
document.write("        <td width=\"5%\"></td>\n")
document.write("      </tr>\n")
document.write("      <tr height=10>\n")
document.write("        <td width=\"80%\"></td>\n")
document.write("        <td width=\"5%\"></td>\n")
document.write("      </tr>\n")
document.write("      <tr>\n")
document.write("        <td width=\"80%\" class=\"answer\">\n")
document.write("          ")
for (i=0; i<numdo; i++) {
myname=questions[quest].qname;
gadget="radio";
if (type>=3) gadget="text";
else if (type==1) {
myname+="_"+(i<9?"0":"")+(i+1);
gadget="checkbox";}
document.write("\n")
document.write("          ")
document.write(type==7?"<textarea name=\""+myname+"\" rows=5 cols=30 class=\"input\">":" <input type="+gadget+" name=\""+myname);
if (type<3) document.write("\" value=\""+i+"\">\n")
else document.write(type==7?"</textarea>":"\" class=\"input\" value=\"\">\n")
if (type<3) document.write(questions[quest].response[i]);
document.write("<br>\n")
document.write("          ")
}
document.write("\n")
document.write("        </td>\n")
document.write("        <td width=\"5%\"></td>\n")
document.write("      </tr>\n")
document.write("      <tr height=5>\n")
document.write("        <td colSpan=5></td>\n")
document.write("      </tr>\n")
document.write("      </table>\n")
document.write("    </td>\n")
document.write("  </tr>\n")
document.write("  <tr height=10>\n")
document.write("    <td>&nbsp;</td>\n")
document.write("  </tr>\n")
document.write("  ")
}
function doTest() {
var count, i;

count=questions.length;
for (i=0; i<count; i++) doQuestion(i);
}
function fill(s,l){
s=s+""
for (y=1;y<=l;y++)
if (s.length>=l) break; else s="0"+s;
return s
}
function CheckQName(wapf,ii,i,multi,selection){
var len;
if (!multi) return(wapf.elements[ii].name==questions[i].qname);
len=questions[i].qname.length;
if (wapf.elements[ii].name.substring(0,len)!=questions[i].qname) return false;
if (wapf.elements[ii].name.substring(len,len+1)!="_") return false;
if (eval(wapf.elements[ii].name.substring(len+1,len+3))==(selection+1)) return true;
return false;
}
function errore(uno,due,tre)
{
if (!errori) global[1]="<H3>Hai commesso i seguenti errori</H3>";
++errori;
cachewrite("<p><b>"+uno+"</b><br>"+due+"<br>"+mycomment+tre+"</p>",2);
mycomment="";
}
function testIE5plus(){
var pos=navigator.appVersion.lastIndexOf('MSIE ');
if (pos != -1) {
pos+=5;
if (eval(navigator.appVersion.charAt(pos))>4)
return true;}
return false;}
function correct(wapf)
{
var i, ii, t, re, tmp, selection, multi, multipage=0, type, isnull, iswrong, iscorrect, evaluation=0, total=0, udat;
errori=waitTime=0;
udat=new Array();
for (i=0; i<questions.length; i++) {
for (ii=0; ii<wapf.elements.length; ii++) {
if (questions[i].type>3 && questions[i].type<7 && CheckQName(wapf,ii,i,multi,selection)) {
if (InputCheck(wapf.elements[ii],questions[i].type-4)==false) return;}}}
for (i=0, ii=0; i<wapf.elements.length; i++)
{tmp=wapf.elements[i];
if (tmp.name.substring(0,13)=="Quiz.UserData"){
t=tmp.name.substring(14,tmp.name.length);
re=new RegExp("_", "g");
t=t.replace(re," ");
udat[ii++]=t+": <i>"+tmp.value+"</i><br>";
if (opera) tmp.value="";}}
global[0]=global[2]="";
global[1]="<h3>Complimenti, non hai commesso alcun errore</h3>";
cachewrite("<html><head><title>Risultati</title><BASE target='_blank'></head><body bgcolor='#FFFFFF'><font face='Verdana, Arial'><table border=0 cellpadding=0 cellspacing=0 width='100%' bgcolor='#C0C0C0'><tr><td width='100%'><font face='Verdana, Arial' size=5 color='#FFFFFF'><b>&nbsp;Risultati</b></font></td></tr></table>",0)
now= new Date()
cachewrite("<small><p>"+fill(now.getDate(),2)+"/"+fill((now.getMonth()+1),2)+"/"+now.getYear()+"&nbsp;&nbsp;"+fill(now.getHours(),2)+":"+fill(now.getMinutes(),2)+"</p>",0)
cachewrite("<b>Le potenze</b><br><br>\n",0);
if (udat.length>0) {
cachewrite("<b>Dati utente</b><br>\n",0);
for (i=0; i<udat.length; i++) cachewrite(udat[i],0);}
if (opera7 && multipage) {
for (i=0; i<questions.length; i++) {
id=document.getElementById("q"+(i+1));
id2=document.getElementById("q"+(i+1)+"a");
id.style.display=id2.style.display="block";}}

for (i=0; i<questions.length; i++) {
if (opera && multipage) {
id=document.getElementById("q"+(i+1));
id2=document.getElementById("q"+(i+1)+"a");
id.style.visibility=id2.style.visibility="visible";}
type=questions[i].type;
if (type==1) multi=1;
else multi=0;
isnull=true;
iscorrect=false;iswrong=false;
selection=0;
evaluation=0;
mycomment="";
for (ii=0; ii<wapf.elements.length; ii++) {
if (CheckQName(wapf,ii,i,multi,selection)) {
if (type>=3 && wapf.elements[ii].value!="") {
isnull=false;
if (wapf.elements[ii].value.toLowerCase()==questions[i].corrects.toLowerCase()) iscorrect=true;
else iswrong=true;
++selection;}
else if (wapf.elements[ii].checked) {
if (questions[i].score!="") evaluation+=questions[i].score[selection];
if (isnull) isnull=false;
if (questions[i].corrects[selection]=="1") iscorrect=(iswrong==false)?true:false;
else {
iswrong=true;
if (multi && questions[i].corrects!='') errore(questions[i].qname,"La casella  <i>"+questions[i].response[selection]+"</i>  non andava selezionata.",questions[i].explan)
}
if (questions[i].comment!="" && questions[i].comment[selection]!="")
mycomment+=((iscorrect || questions[i].corrects=='')?"<b>"+questions[i].qname+"</b><br>":"")+"<small>"+questions[i].comment[selection]+"</small><br>";
} else {
if (questions[i].corrects[selection]=="1") {
iswrong=true;
if (multi && questions[i].corrects!='') errore(questions[i].qname,"La casella  <i>"+questions[i].response[selection]+"</i>  andava selezionata.",questions[i].explan);
}}
++selection;
}}
if (multi==false && (isnull || iswrong)) {
var okresp="", z;
if (type>=3) okresp=questions[i].corrects;
else {
for (z=0; z<questions[i].corrects.length; z++) {
if (questions[i].corrects[z]==1) {
okresp=questions[i].response[z];
break;
}}}
if (okresp!="") errore(questions[i].qname,"La risposta corretta era <i>"+okresp+".</i>",questions[i].explan);
}
if (mycomment!="") cachewrite(mycomment,2);
if (questions[i].corrects!="") ++qright;
if (isnull) evaluation+=questions[i].ifnull;
else if (iswrong) evaluation+=questions[i].ifwrong;
else if (iscorrect) evaluation+=questions[i].ifcorrect;
total+=evaluation;}
if (qright==0) global[1]="<br>";
if (errori) cachewrite("<br><b>In totale hai commesso "+errori+" "+(errori==1?"errore":"errori")+".</b>",2);
cachewrite("<br><b>Punteggio totale realizzato: "+total+".</b><br>",2);

cachewrite("<br><b>Valutazione:</b><br>"+GetEval(total)+"<br>",2);
cachewrite("</small><hr noshade><center><form>",2)
printest=(((navigator.appName=="Netscape") && (navigator.appVersion.charAt(0)>="4")) || (testIE5plus() == true))? "print()": "alert('Questo pulsante funziona soltanto con Netscape Navigator 4 o Microsoft Internet Explorer 5 (o versioni successive). Per stampare con gli altri browser, seleziona il comando Stampa nel menu File.')"
cachewrite("<input type='button' value='Stampa...' onClick='"+printest+"'>&nbsp;&nbsp;&nbsp;&nbsp;",2)
cachewrite("<input type='button' value='Chiudi questa finestra' onClick='window.close()'></form></center>",2)
winr=window.open('','wapres', 'titlebar=1,location=0,directories=0,menubar=1,toolbar=0,scrollbars=1,resizable=1,status=1')
for (i=0; i<3; i++) winr.document.write(global[i]);winr.document.close()
if ((opera || opera7) && multipage) {
document.forms[0].elements[0].value='Stampa...';
document.forms[0].elements[1].value='Chiudi questa finestra';
for (i=0; i<questions.length-1; i++) {
id=document.getElementById("q"+(i+1));
id2=document.getElementById("q"+(i+1)+"a");
opera?id.style.visibility=id2.style.visibility="hidden":id.style.display=id2.style.display="none";}}
}
function myrandom(a,b)
{
var rc;
do {rc=Math.floor(Math.random()*3)-1;} while (rc==2);
return(rc);
}
function GetEval(total)
{
var minval, maxval, valstr, top, i;
minval=new Array(0,9,13,17,20);
maxval=new Array(8,12,16,19,20);
valstr=new Array("INSUFFICIENTE","SUFFICIENTE","DISCRETO","BUONO","ECCELLENTE","non disponibile.");
top=minval.length;
for (i=0;i<top;i++) if (total>=minval[i] && total<=maxval[i]) break;
return(valstr[i]);}
function InputCheck(elem,format)
{
var mes, oks, checkOK, checkStr, nam, allValid;
checkStr=elem.value;
nam=elem.name;
mes=new Array("Inserire solo lettere e spazio nel campo ","Inserire solo cifre nel campo ","Inserire un numero valido nel campo ");
oks=new Array("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ \t\r\n\f","0123456789-","0123456789-.");
checkOK=oks[format]
allValid=true
for (i = 0;  i < checkStr.length;  i++)
{ ch = checkStr.charAt(i);
for (j = 0;  j < checkOK.length;  j++)
if (ch == checkOK.charAt(j))
break;
if (j == checkOK.length)
{allValid = false;break;}}
if (!allValid)
{alert(mes[format]+nam);elem.focus();return (false);}
return (true);
}
function update_time(t) {
self.status=t;}
function stms(s){
if (Math.abs(tmMx)>=3600){
h=Math.floor(s/3600);m=Math.floor((s%3600)/60);s=((s%3600)%60);return fill(h,2)+':'+fill(m,2)+':'+fill(s,2);
}else{m=Math.floor(s/60);s=s%60;return fill(m,2)+':'+fill(s,2);}}
function shtm(t){
tmVl=t+1;update_time(stms(Math.abs(t)))
if (waitTime==0) return;
tmId = setTimeout('shtm(tmVl)',1000)
if (t==((tmMx>0)? tmMx : 0)){
clearTimeout(tmId)
alert('Il tempo è scaduto! Si procede alla correzione.')

correct(document.WapForm)}}
function checkTime(){
tmMx=-waitTime;
if (tmMx!=0){
alert('Il tempo a disposizione per completare il questionario è: '+stms(Math.abs(tmMx))+'\n\nPuoi controllare il cronometro.');
shtm((tmMx>0) ? 0 : tmMx)}}

